Makefile
changeset 0 317e5bc59627
child 1 cf0e1bb6bcab
equal deleted inserted replaced
-1:000000000000 0:317e5bc59627
       
     1 #LIBEVENT_PATH = ~/opt
       
     2 #LIBRARY_PATHS = -L${LIBEVENT_PATH}/lib
       
     3 #INCLUDE_PATHS = -I${LIBEVENT_PATH}/include
       
     4 LDLIBS = -levent
       
     5 
       
     6 # default is test
       
     7 ifndef MODE
       
     8 MODE = test
       
     9 endif
       
    10 
       
    11 ifeq ($(MODE), debug)
       
    12 MODE_CFLAGS = -g -DDEBUG_ENABLED
       
    13 else ifeq ($(MODE), dev)
       
    14 MODE_CFLAGS = -g
       
    15 else ifeq ($(MODE), test)
       
    16 MODE_CFLAGS = -g -DINFO_DISABLED
       
    17 else ifeq ($(MODE), release)
       
    18 MODE_CFLAGS = -DINFO_DISABLED -O2
       
    19 endif
       
    20 
       
    21 FIXED_CFLAGS = -Wall -std=gnu99
       
    22 
       
    23 BIN_NAMES = nexus
       
    24 BIN_PATHS = $(addprefix bin/,$(BIN_NAMES))
       
    25 
       
    26 # modules
       
    27 module_objs = $(patsubst src/%.c,obj/%.o,$(wildcard src/$(1)/*.c))
       
    28 
       
    29 # XXX: not yet there
       
    30 #CORE_OBJS = obj/lib/log.o obj/lib/signals.o
       
    31 
       
    32 # first target
       
    33 all: ${BIN_PATHS}
       
    34 
       
    35 # binaries
       
    36 bin/nexus: 
       
    37 
       
    38 # computed
       
    39 LDFLAGS = ${LIBRARY_PATHS}
       
    40 CPPFLAGS = ${INCLUDE_PATHS} ${DEFINES}
       
    41 CFLAGS = ${MODE_CFLAGS} ${FIXED_CFLAGS}
       
    42 
       
    43 SRC_PATHS = $(wildcard src/*.c) $(wildcard src/*/*.c)
       
    44 SRC_NAMES = $(patsubst src/%,%,$(SRC_PATHS))
       
    45 SRC_DIRS = $(dir $(SRC_NAMES))
       
    46 
       
    47 # other targets
       
    48 clean :
       
    49 	-rm obj/*.o obj/*/*.o
       
    50 	-rm bin/* 
       
    51 	-rm build/deps/*.d build/deps/*/*.d
       
    52 
       
    53 clean-deps:
       
    54 	-rm build/deps/*/*.d 
       
    55 	-rm build/deps/*.d
       
    56 
       
    57 #obj-dirs: 
       
    58 #	python build/make_obj_dirs.py $(BIN_PATHS)
       
    59 
       
    60 build/deps/%.d : src/%.c
       
    61 	@set -e; rm -f $@; \
       
    62 	 $(CC) -MM -MT __ $(CPPFLAGS) $< > $@.$$$$; \
       
    63 	 sed 's,__[ :]*,obj/$*.o $@ : ,g' < $@.$$$$ > $@; \
       
    64 	 rm -f $@.$$$$
       
    65 
       
    66 include $(SRC_NAMES:%.c=build/deps/%.d)
       
    67 
       
    68 obj/%.o : src/%.c
       
    69 	$(CC) -c $(CPPFLAGS) $(CFLAGS) $< -o $@
       
    70 
       
    71 bin/% : obj/%.o
       
    72 	$(CC) $(LDFLAGS) $+ $(LOADLIBES) $(LDLIBS) -o $@
       
    73 
       
    74 # documentation
       
    75 DOXYGEN_PATH = /usr/bin/doxygen
       
    76 DOXYGEN_CONF_PATH = doc/doxygen.conf
       
    77 DOXYGEN_OUTPUT_FILE = doc/html/index.html
       
    78 
       
    79 docs :
       
    80 	${DOXYGEN_PATH} ${DOXYGEN_CONF_PATH}
       
    81