-CXXFLAGS := -std=gnu++14 -O2 -march=native -Wall -g $(shell pkg-config libusb-1.0 --cflags) -pthread
+CXXFLAGS := -std=gnu++14 -O2 -Wall -I. -g $(shell pkg-config libusb-1.0 --cflags) -pthread
LDFLAGS := $(shell pkg-config libusb-1.0 --libs) -pthread
+AR := ar
+LN := ln
+RANLIB := ranlib
+INSTALL := install
+PREFIX := /usr/local
+LIB := libbmusb.a
+SODEV := libbmusb.so
+SONAME := libbmusb.so.1
+SOLIB := libbmusb.so.1.0.0
+
+all: $(LIB) $(SOLIB) main
+
+%.pic.o : %.cpp
+ $(CXX) $(CPPFLAGS) $(CXXFLAGS) -fPIC -o $@ -c $^
main: bmusb.o main.o
$(CXX) -o main $^ $(LDFLAGS)
-all: main
+# Static library.
+$(LIB): bmusb.o fake_capture.o
+ $(AR) rc $@ $^
+ $(RANLIB) $@
+
+# Shared library.
+$(SOLIB): bmusb.pic.o fake_capture.pic.o
+ $(CXX) -shared -Wl,-soname,$(SONAME) -o $@ $^ $(LDFLAGS)
+
+clean:
+ $(RM) bmusb.o main.o fake_capture.o bmusb.pic.o fake_capture.pic.o $(LIB) $(SOLIB) main
+
+install: all
+ $(INSTALL) -m 755 -o root -g root -d \
+ $(DESTDIR)$(PREFIX)/lib \
+ $(DESTDIR)$(PREFIX)/lib/pkgconfig \
+ $(DESTDIR)$(PREFIX)/include/bmusb
+ $(INSTALL) -m 755 -o root -g root $(LIB) $(SOLIB) $(DESTDIR)$(PREFIX)/lib
+ $(LN) -sf $(SOLIB) $(DESTDIR)$(PREFIX)/lib/$(SONAME)
+ $(LN) -sf $(SOLIB) $(DESTDIR)$(PREFIX)/lib/$(SODEV)
+ $(INSTALL) -m 755 -o root -g root bmusb/bmusb.h bmusb/fake_capture.h $(DESTDIR)$(PREFIX)/include/bmusb
+ $(INSTALL) -m 644 -o root -g root bmusb.pc $(DESTDIR)$(PREFIX)/lib/pkgconfig