1 LIBEVENT_PATH = ../libs/libevent-dev |
|
2 LIBFUSE_PATH = ../libs/libfuse-2.7.4 |
|
3 |
|
4 LIBRARY_PATHS = -L${LIBEVENT_PATH}/lib -L${LIBFUSE_PATH}/lib |
|
5 INCLUDE_PATHS = -I${LIBEVENT_PATH}/include -I${LIBFUSE_PATH}/include |
|
6 LDLIBS = -levent -lfuse -lpq |
|
7 |
|
8 # default is test |
|
9 ifndef MODE |
|
10 MODE = test |
|
11 endif |
|
12 |
|
13 ifeq ($(MODE), debug) |
|
14 MODE_CFLAGS = -g -DDEBUG_ENABLED |
|
15 else ifeq ($(MODE), dev) |
|
16 MODE_CFLAGS = -g |
|
17 else ifeq ($(MODE), test) |
|
18 MODE_CFLAGS = -g -DINFO_DISABLED |
|
19 else ifeq ($(MODE), release) |
|
20 MODE_CFLAGS = -DINFO_DISABLED -O2 |
|
21 endif |
|
22 |
|
23 # XXX: ugh... use `pkg-config fuse` |
|
24 DEFINES = -D_FILE_OFFSET_BITS=64 |
|
25 FIXED_CFLAGS = -Wall -std=gnu99 |
|
26 |
|
27 BIN_NAMES = helloworld hello simple_hello evpq_test url_test dbfs |
|
28 BIN_PATHS = $(addprefix bin/,$(BIN_NAMES)) |
|
29 |
|
30 # modules |
|
31 module_objs = $(patsubst src/%.c,obj/%.o,$(wildcard src/$(1)/*.c)) |
|
32 |
|
33 # complex modules |
|
34 EVSQL_OBJS = $(call module_objs,evsql) obj/evpq.o |
|
35 DBFS_OBJS = $(call module_objs,dbfs) obj/dirbuf.o |
|
36 |
|
37 # first target |
|
38 all: ${BIN_PATHS} |
|
39 |
|
40 # binaries |
|
41 bin/helloworld: |
|
42 bin/hello: obj/evfuse.o obj/dirbuf.o obj/lib/log.o obj/lib/signals.o |
|
43 bin/simple_hello: obj/evfuse.o obj/dirbuf.o obj/lib/log.o obj/lib/signals.o obj/simple.o |
|
44 bin/evpq_test: obj/evpq.o obj/lib/log.o |
|
45 bin/url_test: obj/lib/url.o obj/lib/lex.o obj/lib/log.o |
|
46 bin/dbfs: ${DBFS_OBJS} ${EVSQL_OBJS} obj/evfuse.o obj/lib/log.o obj/lib/signals.o |
|
47 |
|
48 # computed |
|
49 LDFLAGS = ${LIBRARY_PATHS} |
|
50 |
|
51 CPPFLAGS = ${INCLUDE_PATHS} ${DEFINES} |
|
52 CFLAGS = ${MODE_CFLAGS} ${FIXED_CFLAGS} |
|
53 |
|
54 SRC_PATHS = $(wildcard src/*.c) $(wildcard src/*/*.c) |
|
55 SRC_NAMES = $(patsubst src/%,%,$(SRC_PATHS)) |
|
56 SRC_DIRS = $(dir $(SRC_NAMES)) |
|
57 |
|
58 # other targets |
|
59 clean : |
|
60 -rm obj/*.o obj/*/*.o |
|
61 -rm bin/* |
|
62 -rm build/deps/*.d build/deps/*/*.d |
|
63 |
|
64 clean-deps: |
|
65 -rm build/deps/*/*.d |
|
66 -rm build/deps/*.d |
|
67 |
|
68 #obj-dirs: |
|
69 # python build/make_obj_dirs.py $(BIN_PATHS) |
|
70 |
|
71 build/deps/%.d : src/%.c |
|
72 @set -e; rm -f $@; \ |
|
73 $(CC) -MM -MT __ $(CPPFLAGS) $< > $@.$$$$; \ |
|
74 sed 's,__[ :]*,obj/$*.o $@ : ,g' < $@.$$$$ > $@; \ |
|
75 rm -f $@.$$$$ |
|
76 |
|
77 include $(SRC_NAMES:%.c=build/deps/%.d) |
|
78 |
|
79 obj/%.o : src/%.c |
|
80 $(CC) -c $(CPPFLAGS) $(CFLAGS) $< -o $@ |
|
81 |
|
82 bin/% : obj/%.o |
|
83 $(CC) $(LDFLAGS) $+ $(LOADLIBES) $(LDLIBS) -o $@ |
|
84 |
|