1 # default is test |
|
2 ifndef MODE |
|
3 MODE = test |
|
4 endif |
|
5 |
|
6 ifeq ($(MODE), debug) |
|
7 MODE_CFLAGS = -g -DDEBUG_ENABLED |
|
8 else ifeq ($(MODE), dev) |
|
9 MODE_CFLAGS = -g |
|
10 else ifeq ($(MODE), test) |
|
11 MODE_CFLAGS = -g -DINFO_DISABLED |
|
12 else ifeq ($(MODE), release) |
|
13 MODE_CFLAGS = -DINFO_DISABLED -O2 |
|
14 endif |
|
15 |
|
16 FIXED_CFLAGS = -Wall -Wextra -std=gnu99 |
|
17 |
|
18 # libevent |
|
19 LIBEVENT_CFLAGS = -I/home/terom/opt/include |
|
20 LIBEVENT_LDFLAGS = -L/home/terom/opt/lib -levent_core |
|
21 |
|
22 # GnuTLS stuff |
|
23 GNUTLS_NAME = "gnutls" |
|
24 GNUTLS_CFLAGS = $(shell pkg-config ${GNUTLS_NAME} --cflags) |
|
25 GNUTLS_LDFLAGS = $(shell pkg-config ${GNUTLS_NAME} --libs) |
|
26 |
|
27 # evsql stuff |
|
28 EVSQL_CFLAGS = |
|
29 EVSQL_LDFLAGS = -levsql -lpq |
|
30 |
|
31 BIN_NAMES = nexus test |
|
32 BIN_PATHS = $(addprefix bin/,$(BIN_NAMES)) |
|
33 |
|
34 # modules |
|
35 module_objs = $(patsubst src/%.c,obj/%.o,$(wildcard src/$(1)/*.c)) |
|
36 |
|
37 CORE_OBJS = obj/error.o obj/log.o |
|
38 SOCK_OBJS = obj/sock.o obj/sock_tcp.o |
|
39 SOCK_TEST_OBJS = obj/sock_test.o |
|
40 SOCK_GNUTLS_OBJS = obj/sock_gnutls.o |
|
41 LINEPROTO_OBJS = obj/line_proto.o |
|
42 IRC_OBJS = obj/irc_line.o obj/irc_conn.o obj/irc_net.o obj/irc_chan.o obj/chain.o obj/irc_cmd.o obj/irc_proto.o obj/irc_client.o |
|
43 NEXUS_OBJS = obj/signals.o obj/module.o |
|
44 IRC_LOG_OBJS = obj/irc_log.o |
|
45 |
|
46 # XXX: not yet there |
|
47 #CORE_OBJS = obj/lib/log.o obj/lib/signals.o |
|
48 |
|
49 # first target |
|
50 all: ${BIN_PATHS} modules/irc_log.so |
|
51 |
|
52 # binaries |
|
53 bin/nexus: ${CORE_OBJS} ${SOCK_OBJS} ${SOCK_GNUTLS_OBJS} ${LINEPROTO_OBJS} ${IRC_OBJS} ${IRC_LOG_OBJS} ${NEXUS_OBJS} |
|
54 |
|
55 bin/test: ${CORE_OBJS} ${SOCK_OBJS} ${SOCK_GNUTLS_OBJS} ${SOCK_TEST_OBJS} ${LINEPROTO_OBJS} ${IRC_OBJS} |
|
56 |
|
57 modules/irc_log.so: ${CORE_OBJS} |
|
58 |
|
59 # computed |
|
60 CFLAGS = ${MODE_CFLAGS} ${FIXED_CFLAGS} ${LIBEVENT_CFLAGS} ${GNUTLS_CFLAGS} ${EVSQL_CFLAGS} -fpic |
|
61 LDFLAGS = ${LIBEVENT_LDFLAGS} ${GNUTLS_LDFLAGS} ${EVSQL_LDFLAGS} -Wl,--export-dynamic |
|
62 |
|
63 # XXX: is this valid? |
|
64 CPPFLAGS = ${CFLAGS} |
|
65 |
|
66 # names for src/ |
|
67 SRC_PATHS = $(wildcard src/*.c) $(wildcard src/*/*.c) |
|
68 SRC_NAMES = $(patsubst src/%,%,$(SRC_PATHS)) |
|
69 SRC_DIRS = $(dir $(SRC_NAMES)) |
|
70 |
|
71 # other targets |
|
72 clean : |
|
73 -rm obj/*.o obj/*/*.o |
|
74 -rm bin/* |
|
75 -rm build/deps/*.d build/deps/*/*.d |
|
76 |
|
77 clean-deps: |
|
78 -rm build/deps/*/*.d |
|
79 -rm build/deps/*.d |
|
80 |
|
81 #obj-dirs: |
|
82 # python build/make_obj_dirs.py $(BIN_PATHS) |
|
83 |
|
84 build/deps/%.d : src/%.c |
|
85 @set -e; rm -f $@; \ |
|
86 $(CC) -MM -MT __ $(CPPFLAGS) $< > $@.$$$$; \ |
|
87 sed 's,__[ :]*,obj/$*.o $@ : ,g' < $@.$$$$ > $@; \ |
|
88 rm -f $@.$$$$ |
|
89 |
|
90 include $(SRC_NAMES:%.c=build/deps/%.d) |
|
91 |
|
92 |
|
93 # XXX: removed $(CPPFLAGS) |
|
94 obj/%.o : src/%.c |
|
95 $(CC) -c $(CFLAGS) $< -o $@ |
|
96 |
|
97 bin/% : obj/%.o |
|
98 $(CC) $(LDFLAGS) $+ $(LOADLIBES) $(LDLIBS) -o $@ |
|
99 |
|
100 modules/%.so : obj/%.o |
|
101 $(CC) -shared -Wl,-soname,$(notdir $@) -o $@ $+ -lc |
|
102 |
|
103 # documentation |
|
104 DOXYGEN_PATH = /usr/bin/doxygen |
|
105 DOXYGEN_CONF_PATH = doc/doxygen.conf |
|
106 DOXYGEN_OUTPUT_FILE = doc/html/index.html |
|
107 |
|
108 docs : |
|
109 ${DOXYGEN_PATH} ${DOXYGEN_CONF_PATH} |
|
110 |
|