aboutsummaryrefslogtreecommitdiff
path: root/libk/makefile
diff options
context:
space:
mode:
Diffstat (limited to 'libk/makefile')
-rw-r--r--libk/makefile39
1 files changed, 36 insertions, 3 deletions
diff --git a/libk/makefile b/libk/makefile
index b2a91c1..9063f72 100644
--- a/libk/makefile
+++ b/libk/makefile
@@ -1,5 +1,38 @@
-CXX_OBJ += libk/string/string.o libk/string/integerview.o \
- libk/stdlib/abort.o libk/stdlib/console.o libk/stdlib/memory.o
+CXX_OBJ = string/string.o string/integerview.o \
+ stdlib/abort.o stdlib/console.o stdlib/memory.o
+CXX_OBJ := $(addprefix $(OBJ_DIR)/, $(CXX_OBJ))
+CXX_DEP = $(CXX_OBJ:%.o=%.d)
+CXX_JSON = $(CXX_OBJ:.o=.json)
-CXX_TEST_OBJ += libk/test/types.o libk/test/string.o libk/test/result.o libk/test/quicksort.o
+TEST_CXX_OBJ = test/types.o test/string.o test/result.o test/quicksort.o
+TEST_CXX_OBJ := $(addprefix $(OBJ_DIR)/, $(TEST_CXX_OBJ))
+TEST_CXX_DEP = $(TEST_CXX_OBJ:%.o=%.d)
+.PHONY: all test clean
+all: $(OBJ_DIR)/libk.a
+test: $(TEST_CXX_OBJ)
+
+-include $(CXX_DEP)
+$(CXX_OBJ) : $(OBJ_DIR)/%.o : %.cc
+ @mkdir -p $(@D)
+ @echo " CXX $<"
+ @$(CXX) -target $(TARGET) $(CXX_FLAGS) $(CXX_INCLUDE) -MMD -MJ$(subst .o,.json,$@) -c $< -o $@
+
+%/libk.a: $(CXX_OBJ)
+ @echo " AR $(@F)"
+ @$(AR) $(AR_FLAGS) rcs $@ $(CXX_OBJ)
+
+# constexpr tests
+-include $(TEST_CXX_DEP)
+$(TEST_CXX_OBJ): $(OBJ_DIR)/%.o : %.cc
+ @mkdir -p $(@D)
+ @echo " TEST $<"
+ @$(TEST_CXX) -target $(TARGET) $(TEST_CXX_FLAGS) $(CXX_INCLUDE) -MMD -c $< -o $@
+
+compile_commands.json: $(CXX_JSON)
+ @echo [ > $@
+ @cat $(CXX_JSON) >> $@
+ @echo ] >> $@
+
+clean:
+ @rm -f $(CXX_OBJ) $(CXX_TEST_OBJ) $(OBJ_DIR)/libk.a