diff options
Diffstat (limited to 'Makefile')
| -rw-r--r-- | Makefile | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..d5ca000 --- /dev/null +++ b/Makefile @@ -0,0 +1,79 @@ +CC ?= gcc + +SRCDIR ?= src +TSTDIR ?= test +GENDIR ?= gen +OBJDIR ?= obj + +PACKAGES = libmicrohttpd libcjson sqlite3 + +LIBS = -lm +INCS = -Isrc/ -Igen/ -I. + +CFLAGS ?= -O3 -D_FORTIFY_SOURCE=2 -Wall -g +CFLAGS += -std=gnu11 -fms-extensions -flto + +APP_MAIN_SOURCES = src/main.c +APP_SOURCES = $(filter-out $(APP_MAIN_SOURCES),$(shell find $(SRCDIR) -name "*.c")) +APP_OBJS = $(APP_SOURCES:%.c=$(OBJDIR)/%.o) +APP_MAIN_OBJS = $(APP_MAIN_SOURCES:%.c=$(OBJDIR)/%.o) +APP_DEPS = $(APP_OBJS:%.o=%.d) +APP_MAIN_DEPS = $(APP_MAIN_OBJS:%.o=%.d) + +TEST_LIB_SOURCES = +TEST_LIB_OBJS = $(TEST_LIB_SOURCES:%.c=$(OBJDIR)/%.o) +TEST_LIB_DEPS = $(TEST_LIB_SOURCES:%.c=%.d) +TEST_LIB_INCS = +TEST_LIB_CFLAGS = +TEST_LIB_LIBS = -lcurl + +TEST_SOURCES = $(shell find $(TSTDIR) -name "*.c") +TEST_EXES = $(TEST_SOURCES:%.c=$(OBJDIR)/%) +TEST_DEPS = $(TEST_SOURCES:%.c=%.d) + +LIBS += $(shell pkg-config --libs $(PACKAGES)) +INCS += $(shell pkg-config --cflags $(PACKAGES)) + +print-% : ; @echo $* = $($*) + +-include $(APP_DEPS) $(TEST_LIB_DEPS) $(TEST_DEPS) + +# We don't really need to run the tests for bear to record them +compile_commands.json: clean Makefile $(APP_SOURCES) $(TEST_LIB_SOURCES) $(TEST_SOURCES) + @rm -f "$@" + bear -- make $(TEST_EXES) app + +app: $(APP_MAIN_OBJS) $(APP_OBJS) + $(CC) $(LDFLAGS) $(CFLAGS) -o $@ $(APP_MAIN_OBJS) $(APP_OBJS) $(LIBS) + +$(OBJDIR)/%.o: %.c + @mkdir -p $(dir $@) + $(CC) $(CFLAGS) $(INCS) -MMD -o $@ -c $< + +clean: + @rm -rf $(OBJDIR) + @rm -f app + +.PHONY: version +version: + @echo "$(COMPTON_VERSION)" + +# Tests! +# Run all tests +.PHONY: test +test: $(TEST_EXES) + $(foreach test,$(TEST_EXES),./$(test) &&) true + +$(OBJDIR)/test/%: $(APP_OBJS) $(TEST_LIB_OBJS) $(OBJDIR)/test/%.o + $(CC) $(LDFLAGS) $(TEST_LIB_CFLAGS) $(CFLAGS) -o $@ $^ $(LIBS) $(TEST_LIB_LIBS) + +$(OBJDIR)/test/%.o: test/%.c + @mkdir -p $(dir $@) + $(CC) $(CFLAGS) $(TEST_LIB_CFLAGS) $(TEST_LIB_INCS) $(INCS) -MMD -o $@ -c $< + +$(OBJDIR)/test/%.o: $(OBJDIR)/test/%.c + @mkdir -p $(dir $@) + $(CC) $(CFLAGS) $(TEST_LIB_CFLAGS) $(TEST_LIB_INCS) $(INCS) -MMD -o $@ -c $< + +.DEFAULT_GOAL := all +all: test app |
