From bf69f336c3fb680e31a5bb43450739b0b06d95e1 Mon Sep 17 00:00:00 2001 From: Aqua-sama Date: Thu, 25 Mar 2021 22:37:33 +0200 Subject: makefile: make makefile recursive --- src/makefile | 69 ++++++++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 53 insertions(+), 16 deletions(-) (limited to 'src/makefile') 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 -- cgit v1.2.1