aboutsummaryrefslogtreecommitdiff
path: root/src/makefile
diff options
context:
space:
mode:
Diffstat (limited to 'src/makefile')
-rw-r--r--src/makefile69
1 files changed, 53 insertions, 16 deletions
diff --git a/src/makefile b/src/makefile
index 6e8545d..96507ce 100644
--- a/src/makefile
+++ b/src/makefile
@@ -1,18 +1,21 @@
-AS_OBJ += src/boot.o \
- src/idt/stubs.o
-
-CXX_OBJ += src/kernel.o \
- src/kernel/dump_gdt.o src/kernel/dump_multiboot.o src/kernel/multiboot.o \
- src/cpu/cpu.o \
- src/gdt.o \
- src/gdt/segmentdescriptor.o \
- src/idt.o \
- src/idt/exception.o src/idt/interruptgate.o src/idt/interrupthandler.o \
- src/vmm.o \
- src/allocator.o \
- src/scheduler.o src/scheduler/task.o
-
-src/cpu/irq.h: $(OBJ_DIR)/src/idt/stubs.o
+AS_OBJ = boot.o idt/stubs.o
+AS_OBJ := $(addprefix $(OBJ_DIR)/, $(AS_OBJ))
+
+CXX_OBJ = kernel.o \
+ kernel/dump_gdt.o kernel/dump_multiboot.o kernel/multiboot.o \
+ cpu/cpu.o \
+ gdt.o \
+ gdt/segmentdescriptor.o \
+ idt.o \
+ idt/exception.o idt/interruptgate.o idt/interrupthandler.o \
+ vmm.o \
+ allocator.o \
+ scheduler.o scheduler/task.o
+CXX_OBJ := $(addprefix $(OBJ_DIR)/, $(CXX_OBJ))
+CXX_DEP = $(CXX_OBJ:%.o=%.d)
+CXX_JSON = $(CXX_OBJ:.o=.json)
+
+cpu/irq.h: $(OBJ_DIR)/idt/stubs.o
@echo " GEN $@"
@echo '#pragma once' > $@
@echo 'extern "C" {' >> $@
@@ -20,4 +23,38 @@ src/cpu/irq.h: $(OBJ_DIR)/src/idt/stubs.o
@for x in $^; do $(NM) $$x -g | $(SED) -nr 's/[0-9a-f]{8} T (.+)/void \1();/p'; done >> $@
@echo '}' >> $@
-autogen := $(autogen) src/cpu/irq.h
+autogen := $(autogen) cpu/irq.h
+
+.PHONY: all test clean
+all: $(OBJ_DIR)/kernel.a
+test: $(TEST_CXX_OBJ)
+
+$(AS_OBJ): $(OBJ_DIR)/%.o: %.S
+ @mkdir -p $(@D)
+ @echo " AS $<"
+ @$(AS) -target $(TARGET) $(AS_FLAGS) $(CXX_INCLUDE) -c $^ -o $@
+
+-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 $@
+
+$(OBJ_DIR)/glitch.elf: $(autogen) $(AS_OBJ) $(CXX_OBJ) linker.ld
+ @echo " LD $@"
+ @$(LD) $(LD_FLAGS) -o $@ $(AS_OBJ) $(CXX_OBJ) -lk -ld
+
+# 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 $(AS_OBJ) $(CXX_OBJ) $(CXX_TEST_OBJ) $(OBJ_DIR)/glitch.elf