Makefile
branchbuild-cmake
changeset 60 3c440bebcea7
parent 59 375a3b5c3a46
child 61 4ba21936518a
equal deleted inserted replaced
59:375a3b5c3a46 60:3c440bebcea7
     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