1CXX?=g++
2CXXFLAGS?=-Wall -O2
3LIB?=hidapi
4ifeq ($(LIB),libusb)
5	CPPFLAGS=-Dlibusb
6	LIBS=-lusb-1.0
7else
8	CPPFLAGS=-Dhidapi
9	LIBS=-lhidapi
10endif
11SYSTEMDDIR?=/usr/lib/systemd
12
13PREFIX?=$(DESTDIR)/usr
14libdir?=$(PREFIX)/lib
15includedir?=$(PREFIX)/include
16
17# Program & versioning information
18PROGN=g810-led
19MAJOR=0
20MINOR=4
21MICRO=2
22
23CXXFLAGS+=-std=gnu++11 -DVERSION=\"$(MAJOR).$(MINOR).$(MICRO)\"
24APPSRCS=src/main.cpp src/helpers/*.cpp
25LIBSRCS=src/classes/*.cpp
26
27.PHONY: all bin debug clean setup install uninstall lib install-lib install-dev
28
29all: lib/lib$(PROGN).so bin/$(PROGN)
30
31bin: bin/$(PROGN)
32
33bin/$(PROGN): $(APPSRCS) $(LIBSRCS)
34	@mkdir -p bin
35	$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(LDFLAGS) $^ -o $@ $(LIBS)
36
37debug: CXXFLAGS += -g -Wextra -pedantic
38debug: bin/$(PROGN)
39
40lib/lib$(PROGN).so: $(LIBSRCS)
41	@mkdir -p lib
42	$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(LDFLAGS) -fPIC -shared -Wl,-soname,lib$(PROGN).so -o lib/lib$(PROGN).so.$(MAJOR).$(MINOR).$(MICRO) $^ $(LIBS)
43	@ln -sf lib$(PROGN).so.$(MAJOR).$(MINOR).$(MICRO) lib/lib$(PROGN).so
44
45bin-linked: lib/lib$(PROGN).so
46	@mkdir -p bin
47	$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(LDFLAGS) $(APPSRCS) -o bin/$(PROGN) $(LIBS) -L./lib -l$(PROGN)
48
49lib: lib/lib$(PROGN).so
50
51clean:
52	@rm -rf bin
53	@rm -rf lib
54
55setup:
56	@install -m 755 -d \
57		$(DESTDIR)/usr/local/bin \
58		$(DESTDIR)/usr/local/etc/$(PROGN)/samples
59	@cp bin/$(PROGN) $(DESTDIR)/usr/local/bin
60	@test -s $(DESTDIR)/usr/local/bin/g213-led || ln -s /usr/local/bin/$(PROGN) $(DESTDIR)/usr/local/bin/g213-led
61	@test -s $(DESTDIR)/usr/local/bin/g410-led || ln -s /usr/local/bin/$(PROGN) $(DESTDIR)/usr/local/bin/g410-led
62	@test -s $(DESTDIR)/usr/local/bin/g413-led || ln -s /usr/local/bin/$(PROGN) $(DESTDIR)/usr/local/bin/g413-led
63	@test -s $(DESTDIR)/usr/local/bin/g512-led || ln -s /usr/local/bin/$(PROGN) $(DESTDIR)/usr/local/bin/g512-led
64	@test -s $(DESTDIR)/usr/local/bin/g513-led || ln -s /usr/local/bin/$(PROGN) $(DESTDIR)/usr/local/bin/g513-led
65	@test -s $(DESTDIR)/usr/local/bin/g610-led || ln -s /usr/local/bin/$(PROGN) $(DESTDIR)/usr/local/bin/g610-led
66	@test -s $(DESTDIR)/usr/local/bin/g815-led || ln -s /usr/local/bin/$(PROGN) $(DESTDIR)/usr/local/bin/g815-led
67	@test -s $(DESTDIR)/usr/local/bin/g910-led || ln -s /usr/local/bin/$(PROGN) $(DESTDIR)/usr/local/bin/g910-led
68	@test -s $(DESTDIR)/usr/local/bin/gpro-led || ln -s /usr/local/bin/$(PROGN) $(DESTDIR)/usr/local/bin/gpro-led
69	@cp sample_profiles/* $(DESTDIR)/usr/local/etc/$(PROGN)/samples
70
71install-lib: lib
72	@install -m 755 -d $(libdir)
73	@install -m 644 lib/lib$(PROGN).so.$(MAJOR).$(MINOR).$(MICRO) $(libdir)/
74	@ln -sf lib$(PROGN).so.$(MAJOR).$(MINOR).$(MICRO) $(libdir)/lib$(PROGN).so
75
76install-dev: install-lib
77	@mkdir -p $(includedir)/$(PROGN)/
78	@install -m 644 src/classes/*.h $(includedir)/$(PROGN)
79
80install: setup
81#	Nothing to do
82
83uninstall-lib:
84	@rm -f $(libdir)/lib$(PROGN).so*
85
86uninstall-dev:
87	@rm -rf $(includedir)/$(PROGN)
88
89uninstall:
90	@test -s /usr/bin/systemd-run && \
91		systemctl disable $(PROGN)-reboot && \
92		rm $(SYSTEMDDIR)/system/$(PROGN)-reboot.service && \
93		systemctl daemon-reload && \
94		rm -R /etc/$(PROGN)
95
96	@rm /usr/bin/g213-led
97	@rm /usr/bin/g410-led
98	@rm /usr/bin/g413-led
99	@rm /usr/bin/g512-led
100	@rm /usr/bin/g513-led
101	@rm /usr/bin/g610-led
102	@rm /usr/bin/g815-led
103	@rm /usr/bin/g910-led
104	@rm /usr/bin/gpro-led
105	@rm /usr/bin/$(PROGN)
106
107	@rm /etc/udev/rules.d/$(PROGN).rules
108	@udevadm control --reload-rules
109