-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
132 lines (101 loc) · 3.21 KB
/
Makefile
File metadata and controls
132 lines (101 loc) · 3.21 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
BUILD_DIR = build
LIBRARY = libusbgetdev
PROGRAM = listdevs
URL = https://github.com/Mr-Bossman/libusbgetdev
VERSION = 0.1.0
CFLAGS := -Wall \
-Wextra \
-fPIC
LDFLAGS :=
PREFIX ?= /usr/local
PKG_CONFIG ?= pkg-config
HOST := $(shell $(CC) -dumpmachine)
C_SOURCES := src/libusbgetdev.c
OBJECTS += $(addprefix $(BUILD_DIR)/,$(notdir $(C_SOURCES:.c=.o)))
DEPS = $(OBJECTS:%.o=%.d)
vpath %.c $(sort $(dir $(C_SOURCES)))
vpath %.o $(BUILD_DIR)
ifneq (, $(shell $(PKG_CONFIG) --version 2>/dev/null))
CFLAGS += $(shell $(PKG_CONFIG) --cflags libusb-1.0)
LDFLAGS += $(shell $(PKG_CONFIG) --libs libusb-1.0)
else
CFLAGS += -I/usr/include/libusb-1.0
LDFLAGS += -lusb-1.0
endif
run_check = printf "$(1)" | $(CC) -x c -c -S -Wall -Werror $(CFLAGS) -o - - > /dev/null 2>&1; echo $$?
have_get_session_data=\#include <libusb.h>\n int main(void) { return sizeof(libusb_get_session_data); }
ifeq (0, $(shell $(call run_check,$(have_get_session_data))))
CFLAGS += -DHAVE_GET_SESSION_DATA
endif
ifneq (, $(findstring linux, $(HOST)))
C_SOURCES += src/linux_lib.c
SONAME = $(LIBRARY).so
LDCONFIG ?= ldconfig
else ifneq (, $(findstring darwin, $(HOST)))
C_SOURCES += src/darwin_lib.c
SONAME = $(LIBRARY).dylib
LDFLAGS += -framework IOKit -framework CoreFoundation -framework Security
LIB_LDFLAGS += -dynamiclib
SET_SONAME = install_name_tool -id $(PREFIX)/lib/$(SONAME) $(BUILD_DIR)/$(SONAME)
else ifneq (, $(findstring msys, $(HOST)))
PREFIX := /usr
C_SOURCES += src/windows_lib.c
SONAME = $(LIBRARY).dll
LDFLAGS += -lsetupapi
LIBS = -lsetupapi
else
$(error 'Could not determine the host type. Please set the $$HOST variable.')
endif
define newline
endef
_file = @printf "$(subst $(newline),\n,$(1))" $(2) "$(3)"
define PKG_CONFIG_FILE
prefix=$(PREFIX)
exec_prefix=\$${prefix}
includedir=\$${prefix}/include
libdir=\$${exec_prefix}/lib
Name: $(LIBRARY)
Description: A cross-platform library to correlate USB devices to block or character devices
URL: $(URL)
Version: $(VERSION)
Requires: libusb-1.0
Cflags: -I\$${includedir}/$(LIBRARY)
Libs: -L\$${libdir} -l$(LIBRARY:lib%=%) $(LIBS)
endef
.PHONY: all clean debug example
all: $(BUILD_DIR)/$(SONAME) $(BUILD_DIR)/$(LIBRARY).a $(BUILD_DIR)/$(LIBRARY).pc
debug: CFLAGS += -g
debug: all
example:
@$(MAKE) $(PROGRAM) C_SOURCES="$(C_SOURCES) src/listdevs.c"
$(OBJECTS): | $(BUILD_DIR)
$(BUILD_DIR):
mkdir -p $@
-include $(DEPS)
$(BUILD_DIR)/%.o: %.c
$(CC) -MMD -c $(CFLAGS) $< -o $@
$(PROGRAM): $(OBJECTS)
$(CC) $^ $(LDFLAGS) -o $@
$(BUILD_DIR)/$(SONAME): $(OBJECTS)
$(CC) -shared $^ $(LDFLAGS) $(LIB_LDFLAGS) -o $@
$(SET_SONAME)
$(BUILD_DIR)/$(LIBRARY).a: $(OBJECTS)
$(AR) rcs $@ $^
$(BUILD_DIR)/$(LIBRARY).pc: $(BUILD_DIR) Makefile
@echo "Generating $@"
$(call _file,$(PKG_CONFIG_FILE),>,$@)
install: all
install -m 755 -d $(PREFIX)/include/$(LIBRARY)
install -m 644 src/$(LIBRARY).h $(PREFIX)/include/$(LIBRARY)
install -m 644 $(BUILD_DIR)/$(SONAME) $(PREFIX)/lib
install -m 644 $(BUILD_DIR)/$(LIBRARY).a $(PREFIX)/lib
install -m 644 $(BUILD_DIR)/$(LIBRARY).pc $(PREFIX)/lib/pkgconfig
$(LDCONFIG)
uninstall:
-rm -rf $(PREFIX)/include/$(LIBRARY)
-rm -f $(PREFIX)/lib/pkgconfig/$(LIBRARY).pc
-rm -f $(PREFIX)/lib/$(SONAME)
-rm -f $(PREFIX)/lib/$(LIBRARY).a
clean:
-rm -rf $(BUILD_DIR)
-rm -f $(PROGRAM)