terom@0: # default is test terom@0: ifndef MODE terom@0: MODE = test terom@0: endif terom@0: terom@0: ifeq ($(MODE), debug) terom@0: MODE_CFLAGS = -g -DDEBUG_ENABLED terom@0: else ifeq ($(MODE), dev) terom@0: MODE_CFLAGS = -g terom@0: else ifeq ($(MODE), test) terom@0: MODE_CFLAGS = -g -DINFO_DISABLED terom@0: else ifeq ($(MODE), release) terom@0: MODE_CFLAGS = -DINFO_DISABLED -O2 terom@0: endif terom@0: terom@0: FIXED_CFLAGS = -Wall -std=gnu99 terom@0: terom@2: # libevent terom@2: LIBEVENT_CFLAGS = terom@2: LIBEVENT_LDFLAGS = -levent terom@2: terom@2: # GnuTLS stuff terom@2: GNUTLS_NAME = "gnutls" terom@2: GNUTLS_CFLAGS = $(shell pkg-config ${GNUTLS_NAME} --cflags) terom@2: GNUTLS_LDFLAGS = $(shell pkg-config ${GNUTLS_NAME} --libs) terom@2: terom@0: BIN_NAMES = nexus terom@0: BIN_PATHS = $(addprefix bin/,$(BIN_NAMES)) terom@0: terom@0: # modules terom@0: module_objs = $(patsubst src/%.c,obj/%.o,$(wildcard src/$(1)/*.c)) terom@0: terom@1: SOCK_OBJS = obj/sock.o obj/sock_tcp.o terom@2: SOCK_GNUTLS_OBJS = obj/sock_gnutls.o terom@1: terom@0: # XXX: not yet there terom@0: #CORE_OBJS = obj/lib/log.o obj/lib/signals.o terom@0: terom@0: # first target terom@0: all: ${BIN_PATHS} terom@0: terom@0: # binaries terom@2: bin/nexus: ${SOCK_OBJS} ${SOCK_GNUTLS_OBJS} terom@0: terom@0: # computed terom@2: CFLAGS = ${MODE_CFLAGS} ${FIXED_CFLAGS} ${LIBEVENT_CFLAGS} ${GNUTLS_CFLAGS} terom@2: LDFLAGS = ${LIBEVENT_LDFLAGS} ${GNUTLS_LDFLAGS} terom@0: terom@2: # XXX: is this valid? terom@2: CPPFLAGS = ${CFLAGS} terom@2: terom@2: # names for src/ terom@0: SRC_PATHS = $(wildcard src/*.c) $(wildcard src/*/*.c) terom@0: SRC_NAMES = $(patsubst src/%,%,$(SRC_PATHS)) terom@0: SRC_DIRS = $(dir $(SRC_NAMES)) terom@0: terom@0: # other targets terom@0: clean : terom@0: -rm obj/*.o obj/*/*.o terom@0: -rm bin/* terom@0: -rm build/deps/*.d build/deps/*/*.d terom@0: terom@0: clean-deps: terom@0: -rm build/deps/*/*.d terom@0: -rm build/deps/*.d terom@0: terom@0: #obj-dirs: terom@0: # python build/make_obj_dirs.py $(BIN_PATHS) terom@0: terom@0: build/deps/%.d : src/%.c terom@0: @set -e; rm -f $@; \ terom@0: $(CC) -MM -MT __ $(CPPFLAGS) $< > $@.$$$$; \ terom@0: sed 's,__[ :]*,obj/$*.o $@ : ,g' < $@.$$$$ > $@; \ terom@0: rm -f $@.$$$$ terom@0: terom@0: include $(SRC_NAMES:%.c=build/deps/%.d) terom@0: terom@0: obj/%.o : src/%.c terom@0: $(CC) -c $(CPPFLAGS) $(CFLAGS) $< -o $@ terom@0: terom@0: bin/% : obj/%.o terom@0: $(CC) $(LDFLAGS) $+ $(LOADLIBES) $(LDLIBS) -o $@ terom@0: terom@0: # documentation terom@0: DOXYGEN_PATH = /usr/bin/doxygen terom@0: DOXYGEN_CONF_PATH = doc/doxygen.conf terom@0: DOXYGEN_OUTPUT_FILE = doc/html/index.html terom@0: terom@0: docs : terom@0: ${DOXYGEN_PATH} ${DOXYGEN_CONF_PATH} terom@0: