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" {' >> $@ @echo '/* interrupt map */' >> $@ @for x in $^; do $(NM) $$x -g | $(SED) -nr 's/[0-9a-f]{8} T (.+)/void \1();/p'; done >> $@ @echo '}' >> $@ 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