terom@1: LIBEVENT_PATH = ../libs/libevent-dev terom@44: LIBFUSE_PATH = ../opt terom@0: terom@0: LIBRARY_PATHS = -L${LIBEVENT_PATH}/lib -L${LIBFUSE_PATH}/lib terom@0: INCLUDE_PATHS = -I${LIBEVENT_PATH}/include -I${LIBFUSE_PATH}/include terom@11: LDLIBS = -levent -lfuse -lpq terom@0: terom@41: # default is test terom@40: ifndef MODE terom@41: MODE = test terom@40: endif terom@40: terom@41: ifeq ($(MODE), debug) terom@40: MODE_CFLAGS = -g -DDEBUG_ENABLED terom@41: else ifeq ($(MODE), dev) terom@40: MODE_CFLAGS = -g terom@41: else ifeq ($(MODE), test) terom@40: MODE_CFLAGS = -g -DINFO_DISABLED terom@41: else ifeq ($(MODE), release) terom@40: MODE_CFLAGS = -DINFO_DISABLED -O2 terom@28: endif terom@28: terom@1: # XXX: ugh... use `pkg-config fuse` terom@40: DEFINES = -D_FILE_OFFSET_BITS=64 terom@41: FIXED_CFLAGS = -Wall -std=gnu99 terom@0: terom@45: BIN_NAMES = helloworld hello simple_hello evpq_test url_test dbfs evsql_test terom@19: BIN_PATHS = $(addprefix bin/,$(BIN_NAMES)) terom@0: terom@41: # modules terom@41: module_objs = $(patsubst src/%.c,obj/%.o,$(wildcard src/$(1)/*.c)) terom@41: terom@28: # complex modules terom@45: CORE_OBJS = obj/lib/log.o obj/lib/signals.o terom@41: EVSQL_OBJS = $(call module_objs,evsql) obj/evpq.o terom@41: DBFS_OBJS = $(call module_objs,dbfs) obj/dirbuf.o terom@28: terom@11: # first target terom@11: all: ${BIN_PATHS} terom@11: terom@11: # binaries terom@1: bin/helloworld: terom@45: bin/hello: obj/evfuse.o obj/dirbuf.o ${CORE_OBJS} terom@45: bin/simple_hello: obj/evfuse.o obj/dirbuf.o obj/simple.o ${CORE_OBJS} terom@11: bin/evpq_test: obj/evpq.o obj/lib/log.o terom@15: bin/url_test: obj/lib/url.o obj/lib/lex.o obj/lib/log.o terom@45: bin/dbfs: ${DBFS_OBJS} ${EVSQL_OBJS} obj/evfuse.o ${CORE_OBJS} terom@45: bin/evsql_test: ${EVSQL_OBJS} ${CORE_OBJS} terom@0: terom@0: # computed terom@41: LDFLAGS = ${LIBRARY_PATHS} terom@41: terom@41: CPPFLAGS = ${INCLUDE_PATHS} ${DEFINES} terom@41: CFLAGS = ${MODE_CFLAGS} ${FIXED_CFLAGS} terom@0: terom@19: SRC_PATHS = $(wildcard src/*.c) $(wildcard src/*/*.c) terom@0: SRC_NAMES = $(patsubst src/%,%,$(SRC_PATHS)) terom@1: SRC_DIRS = $(dir $(SRC_NAMES)) terom@0: terom@11: # other targets terom@0: clean : terom@31: -rm obj/*.o obj/*/*.o terom@31: -rm bin/* terom@31: -rm build/deps/*.d build/deps/*/*.d terom@29: terom@29: clean-deps: terom@29: -rm build/deps/*/*.d terom@29: -rm build/deps/*.d terom@0: terom@11: #obj-dirs: terom@11: # python build/make_obj_dirs.py $(BIN_PATHS) terom@0: terom@11: build/deps/%.d : src/%.c terom@11: @set -e; rm -f $@; \ terom@20: $(CC) -MM -MT __ $(CPPFLAGS) $< > $@.$$$$; \ terom@20: sed 's,__[ :]*,obj/$*.o $@ : ,g' < $@.$$$$ > $@; \ terom@11: rm -f $@.$$$$ terom@11: terom@11: include $(SRC_NAMES:%.c=build/deps/%.d) terom@1: terom@0: obj/%.o : src/%.c terom@11: $(CC) -c $(CPPFLAGS) $(CFLAGS) $< -o $@ terom@0: terom@0: bin/% : obj/%.o terom@1: $(CC) $(LDFLAGS) $+ $(LOADLIBES) $(LDLIBS) -o $@ terom@0: terom@52: # documentation terom@52: DOXYGEN_PATH = /usr/bin/doxygen terom@52: DOXYGEN_CONF_PATH = doc/doxygen.conf terom@52: DOXYGEN_OUTPUT_FILE = doc/html/index.html terom@52: terom@52: docs : terom@52: ${DOXYGEN_PATH} ${DOXYGEN_CONF_PATH} terom@52: