summaryrefslogtreecommitdiff
path: root/Makefile
diff options
context:
space:
mode:
authorJesper Jensen <jesper@jnsn.dev>2026-02-16 21:43:36 +0100
committerJesper Jensen <jesper@jnsn.dev>2026-02-16 21:43:36 +0100
commitc9e3a4b2816ad23aa201a4f43f357a376947bd49 (patch)
tree042530b79b1e3c7c36872b991850002bec9268a8 /Makefile
INITIAL COMMIT
Diffstat (limited to 'Makefile')
-rw-r--r--Makefile79
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