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 --- makefile | 67 ++++++++++++++++++++++------------------------------------------ 1 file changed, 23 insertions(+), 44 deletions(-) (limited to 'makefile') diff --git a/makefile b/makefile index 58bce7f..742db3d 100644 --- a/makefile +++ b/makefile @@ -2,64 +2,43 @@ include .config OBJ_DIR != echo $(CONFIG_OBJ_DIR) include toolchain.makefile -.PHONY: default clean test tidy todo run menuconfig -all: $(OBJ_DIR)/glitch.elf +.PHONY: all clean test tidy todo run menuconfig +all: $(OBJ_DIR)/src/glitch.elf -include libk/makefile -include src/makefile -include drivers/makefile +LIBS := $(OBJ_DIR)/libk.a $(OBJ_DIR)/libd.a +LD_FLAGS := $(LD_FLAGS) --library-path $(CURDIR)/$(OBJ_DIR) -AS_OBJ := $(addprefix $(OBJ_DIR)/, $(AS_OBJ)) -CXX_SRC := $(CXX_OBJ:%.o=%.cc) -CXX_OBJ := $(addprefix $(OBJ_DIR)/, $(CXX_OBJ)) -CXX_DEP = $(CXX_OBJ:%.o=%.d) -CXX_JSON = $(CXX_OBJ:.o=.json) -CXX_TEST_OBJ := $(addprefix $(OBJ_DIR)/, $(CXX_TEST_OBJ)) -CXX_INCLUDE := $(addprefix -I, $(CXX_INCLUDE)) -SYSTEM_INCLUDE := $(addprefix -isystem, $(SYSTEM_INCLUDE)) +export AR AR_FLAGS AS AS_FLAGS NM SED \ + CXX CXX_FLAGS CXX_INCLUDE TARGET \ + TEST_CXX TEST_CXX_FLAGS \ + LD LD_FLAGS +$(OBJ_DIR)/src/glitch.elf: $(LIBS) + @make -C src OBJ_DIR=$(CURDIR)/$(OBJ_DIR)/src $(CURDIR)/$(OBJ_DIR)/src/glitch.elf +$(OBJ_DIR)/libk.a: + @make -C libk OBJ_DIR=$(CURDIR)/$(OBJ_DIR)/libk $(CURDIR)/$(OBJ_DIR)/libk.a +$(OBJ_DIR)/libd.a: + @make -C drivers OBJ_DIR=$(CURDIR)/$(OBJ_DIR)/drivers $(CURDIR)/$(OBJ_DIR)/libd.a -$(OBJ_DIR)/glitch.elf: $(autogen) $(AS_OBJ) $(CXX_OBJ) linker.ld - @echo " LD $@" - @$(LD) $(LD_FLAGS) -o $@ $(AS_OBJ) $(CXX_OBJ) - -$(AS_OBJ): $(OBJ_DIR)/%.o: %.S - @mkdir -p $(@D) - @echo " AS $<" - @$(AS) -target $(TARGET) $(AS_FLAGS) $(SYSTEM_INCLUDE) -c $^ -o $@ - --include $(CXX_DEP) -$(OBJ_DIR)/%.o $(OBJ_DIR)%.json : %.cc - @mkdir -p $(@D) - @echo " CXX $<" - @$(CXX) -target $(TARGET) $(CXX_FLAGS) $(CXX_INCLUDE) $(SYSTEM_INCLUDE) -MMD -MJ$(subst .o,.json,$@) -c $< -o $@ - -$(CXX_TEST_OBJ): $(OBJ_DIR)/%.o : %.cc - @mkdir -p $(@D) - @echo " TEST $<" - @$(TEST_CXX) -target $(TARGET) $(CXX_TEST_FLAGS) $(CXX_INCLUDE) -MMD -c $< -o $@ - -compile_commands.json: $(CXX_JSON) - @echo [ > $@ - @cat $(CXX_JSON) >> $@ - @echo ] >> $@ +compile_commands: + @make -C libk OBJ_DIR=$(CURDIR)/$(OBJ_DIR)/libk compile_commands.json clean: - @rm -rf $(autogen) $(AS_OBJ) $(CXX_OBJ) $(CXX_DEP) $(CXX_TEST_OBJ) $(OBJ_DIR)/glitch.elf $(OBJ_DIR)/isodir - @rm -f $(CXX_JSON) compile_commands.json + @rm -rf $(OBJ_DIR)/isodir $(LIBS) + @make -C src OBJ_DIR=$(CURDIR)/$(OBJ_DIR)/src clean + @make -C libk OBJ_DIR=$(CURDIR)/$(OBJ_DIR)/libk clean + @make -C drivers OBJ_DIR=$(CURDIR)/$(OBJ_DIR)/drivers clean @make -C tools/kconfig OBJ_DIR=$(CURDIR)/$(OBJ_DIR)/kconfig clean -tidy: compile_commands.json - $(foreach x, $(CXX_SRC), $(shell clang-tidy $x)) - # testing -test: $(CXX_TEST_OBJ) +test: + @make -C libk OBJ_DIR=$(CURDIR)/$(OBJ_DIR)/libk test todo: @grep TODO -r libk/ src/ drivers/ # disk image -$(OBJ_DIR)/glitch.iso: $(OBJ_DIR)/glitch.elf grub/grub.cfg +$(OBJ_DIR)/glitch.iso: $(OBJ_DIR)/src/glitch.elf grub/grub.cfg @mkdir -p $(OBJ_DIR)/isodir/boot/grub $(GRUB_FILE) --is-x86-multiboot2 $< @cp $< $(OBJ_DIR)/isodir/boot/glitch.elf -- cgit v1.2.1