diff options
author | Aqua-sama <aqua@iserlohn-fortress.net> | 2021-03-30 22:49:06 +0300 |
---|---|---|
committer | Aqua-sama <aqua@iserlohn-fortress.net> | 2021-03-30 22:49:06 +0300 |
commit | 6eefbd0e736c3334e9b1b8141feb0430a5f247c1 (patch) | |
tree | 8866b0cc2b555016e23fabaa869ddc54036a1c0e | |
parent | Move MemoryAllocator to libk (diff) | |
download | kernel.cpp-master.tar.xz |
-rw-r--r-- | .config | 5 | ||||
-rw-r--r-- | Kconfig | 3 | ||||
-rw-r--r-- | arch/i686/toolchain.mk (renamed from toolchain.makefile) | 9 | ||||
-rw-r--r-- | common.mk | 15 | ||||
-rw-r--r-- | drivers/makefile | 11 | ||||
-rw-r--r-- | libk/makefile | 10 | ||||
-rw-r--r-- | makefile | 37 | ||||
-rw-r--r-- | src/makefile | 24 |
8 files changed, 72 insertions, 42 deletions
@@ -1,7 +1,12 @@ +# +# Automatically generated file; DO NOT EDIT. +# Main menu +# # # Build # +CONFIG_ARCH="i686" CONFIG_EXTRA_CXX_FLAGS="" CONFIG_OBJ_DIR="build" # end of Build @@ -1,4 +1,7 @@ menu "Build" + config ARCH + string "Target architecture" + default "i686" config EXTRA_CXX_FLAGS string "Additional cxx flags" config OBJ_DIR diff --git a/toolchain.makefile b/arch/i686/toolchain.mk index 9500449..c6349e8 100644 --- a/toolchain.makefile +++ b/arch/i686/toolchain.mk @@ -1,4 +1,7 @@ -# Toolchain +# x86 toolchain +# - 32-bit X86: Pentium-Pro and above +# +# To check targets supported by llvm, see 'llc --version' TARGET := i686-elf NM := llvm-nm @@ -24,9 +27,9 @@ CXX_FLAGS := -std=c++20 -g -O3 -flto=full \ -Wconsumed TEST_CXX := clang++ TEST_CXX_FLAGS := -std=c++20 -Wall -Wextra -Werror=pedantic -CXX_INCLUDE := $(CURDIR)/libk $(CURDIR)/src $(CURDIR)/drivers +CXX_INCLUDE := $(prefix)/libk $(prefix)/src $(prefix)/drivers CXX_INCLUDE := $(addprefix -I, $(CXX_INCLUDE)) -SYSTEM_INCLUDE := $(CURDIR)/grub +SYSTEM_INCLUDE := $(prefix)/grub SYSTEM_INCLUDE := $(addprefix -isystem, $(SYSTEM_INCLUDE)) CXX_INCLUDE := $(CXX_INCLUDE) $(SYSTEM_INCLUDE) diff --git a/common.mk b/common.mk new file mode 100644 index 0000000..a07e718 --- /dev/null +++ b/common.mk @@ -0,0 +1,15 @@ +# directory of the current makefile +prefix := $(abspath $(dir $(lastword $(MAKEFILE_LIST)))) + +include $(prefix)/.config +OBJ_DIR != echo $(prefix)/$(CONFIG_OBJ_DIR) +CONFIG_BUILD_DEST != echo $(prefix)/$(CONFIG_OBJ_DIR) +CONFIG_ARCH != echo $(CONFIG_ARCH) + +include $(prefix)/arch/$(CONFIG_ARCH)/toolchain.mk + +export AR AR_FLAGS AS AS_FLAGS NM SED \ + CXX CXX_FLAGS CXX_INCLUDE TARGET \ + TEST_CXX TEST_CXX_FLAGS \ + LD LD_FLAGS + diff --git a/drivers/makefile b/drivers/makefile index 6a80fec..65bf22d 100644 --- a/drivers/makefile +++ b/drivers/makefile @@ -1,11 +1,16 @@ +include ../common.mk + CXX_OBJ = cga.o serial.o keyboard.o -CXX_OBJ := $(addprefix $(OBJ_DIR)/, $(CXX_OBJ)) +CXX_OBJ := $(addprefix $(OBJ_DIR)/libd/, $(CXX_OBJ)) CXX_DEP = $(CXX_OBJ:%.o=%.d) CXX_JSON = $(CXX_OBJ:.o=.json) HWH := drivers/hardware.h autogen := $(autogen) $(HWH) +.PHONY: all clean +all: $(OBJ_DIR)/libd.a + $(HWH): .config @echo " GEN $@" @echo \/\* autogenerated hardware description \*\/ > $(HWH) @@ -22,12 +27,12 @@ ifdef CONFIG_serial0_enable endif -include $(CXX_DEP) -$(CXX_OBJ) : $(OBJ_DIR)/%.o : %.cc +$(CXX_OBJ) : $(OBJ_DIR)/libd/%.o : %.cc @mkdir -p $(@D) @echo " CXX $<" @$(CXX) -target $(TARGET) $(CXX_FLAGS) $(CXX_INCLUDE) -MMD -MJ$(subst .o,.json,$@) -c $< -o $@ -%/libd.a: $(CXX_OBJ) +$(OBJ_DIR)/libd.a: $(CXX_OBJ) @echo " AR $(@F)" @$(AR) $(AR_FLAGS) rcs $@ $(CXX_OBJ) diff --git a/libk/makefile b/libk/makefile index eafa98c..7a0483d 100644 --- a/libk/makefile +++ b/libk/makefile @@ -1,12 +1,14 @@ +include ../common.mk + CXX_OBJ = string/integerview.o string/memory.o \ memory/allocator.o \ stdlib/abort.o stdlib/console.o stdlib/virtual.o -CXX_OBJ := $(addprefix $(OBJ_DIR)/, $(CXX_OBJ)) +CXX_OBJ := $(addprefix $(OBJ_DIR)/libk/, $(CXX_OBJ)) CXX_DEP = $(CXX_OBJ:%.o=%.d) CXX_JSON = $(CXX_OBJ:.o=.json) 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_OBJ := $(addprefix $(OBJ_DIR)/libk/, $(TEST_CXX_OBJ)) TEST_CXX_DEP = $(TEST_CXX_OBJ:%.o=%.d) .PHONY: all test clean @@ -14,12 +16,12 @@ all: $(OBJ_DIR)/libk.a test: $(TEST_CXX_OBJ) -include $(CXX_DEP) -$(CXX_OBJ) : $(OBJ_DIR)/%.o : %.cc +$(CXX_OBJ) : $(OBJ_DIR)/libk/%.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) +$(OBJ_DIR)/libk.a: $(CXX_OBJ) @echo " AR $(@F)" @$(AR) $(AR_FLAGS) rcs $@ $(CXX_OBJ) @@ -1,35 +1,30 @@ -include .config -OBJ_DIR != echo $(CONFIG_OBJ_DIR) -include toolchain.makefile +include common.mk -.PHONY: all libk libd clean test tidy todo run menuconfig -all: $(OBJ_DIR)/src/glitch.elf +.PHONY: all help libk libd clean test tidy todo run menuconfig +all: $(OBJ_DIR)/glitch.elf -LIBS := $(OBJ_DIR)/libk.a $(OBJ_DIR)/libd.a -LD_FLAGS := $(LD_FLAGS) --library-path $(CURDIR)/$(OBJ_DIR) +help: + @echo prefix $(prefix) + @echo "CONFIG_BUILD_DIR $(CONFIG_OBJ_DIR)" + @echo "CONFIG_ARCH $(CONFIG_ARCH)" -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: libk libd - @make -C src OBJ_DIR=$(CURDIR)/$(OBJ_DIR)/src $(CURDIR)/$(OBJ_DIR)/src/glitch.elf +$(OBJ_DIR)/glitch.elf: libk libd + @make -C src libk: - @make -C libk OBJ_DIR=$(CURDIR)/$(OBJ_DIR)/libk $(CURDIR)/$(OBJ_DIR)/libk.a + @make -C libk libd: - @make -C drivers OBJ_DIR=$(CURDIR)/$(OBJ_DIR)/drivers $(CURDIR)/$(OBJ_DIR)/libd.a + @make -C drivers compile_commands: @make -C libk OBJ_DIR=$(CURDIR)/$(OBJ_DIR)/libk compile_commands.json clean: - @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 + @rm -rf $(OBJ_DIR)/isodir + @make -C src clean + @make -C libk clean + @make -C drivers clean @make -C tools/kconfig OBJ_DIR=$(CURDIR)/$(OBJ_DIR)/kconfig clean # testing @@ -40,7 +35,7 @@ todo: @grep TODO -r libk/ src/ drivers/ # disk image -$(OBJ_DIR)/glitch.iso: $(OBJ_DIR)/src/glitch.elf grub/grub.cfg +$(OBJ_DIR)/glitch.iso: $(OBJ_DIR)/glitch.elf grub/grub.cfg @mkdir -p $(OBJ_DIR)/isodir/boot/grub $(GRUB_FILE) --is-x86-multiboot2 $< @cp $< $(OBJ_DIR)/isodir/boot/glitch.elf diff --git a/src/makefile b/src/makefile index d1e2147..731e948 100644 --- a/src/makefile +++ b/src/makefile @@ -1,5 +1,7 @@ +include ../common.mk + AS_OBJ = boot.o idt/stubs.o -AS_OBJ := $(addprefix $(OBJ_DIR)/, $(AS_OBJ)) +AS_OBJ := $(addprefix $(OBJ_DIR)/glitch/, $(AS_OBJ)) CXX_OBJ = kernel.o \ kernel/dump_gdt.o kernel/dump_multiboot.o kernel/multiboot.o \ @@ -10,11 +12,15 @@ CXX_OBJ = kernel.o \ idt/exception.o idt/interruptgate.o idt/interrupthandler.o \ vmm.o \ scheduler.o scheduler/task.o -CXX_OBJ := $(addprefix $(OBJ_DIR)/, $(CXX_OBJ)) +CXX_OBJ := $(addprefix $(OBJ_DIR)/glitch/, $(CXX_OBJ)) CXX_DEP = $(CXX_OBJ:%.o=%.d) CXX_JSON = $(CXX_OBJ:.o=.json) -cpu/irq.h: $(OBJ_DIR)/idt/stubs.o +.PHONY: all test clean +all: $(OBJ_DIR)/glitch.elf +test: $(TEST_CXX_OBJ) + +cpu/irq.h: $(OBJ_DIR)/glitch/idt/stubs.o @echo " GEN $@" @echo '#pragma once' > $@ @echo 'extern "C" {' >> $@ @@ -24,28 +30,24 @@ cpu/irq.h: $(OBJ_DIR)/idt/stubs.o autogen := $(autogen) cpu/irq.h -.PHONY: all test clean -all: $(OBJ_DIR)/kernel.a -test: $(TEST_CXX_OBJ) - -$(AS_OBJ): $(OBJ_DIR)/%.o: %.S +$(AS_OBJ): $(OBJ_DIR)/glitch/%.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 +$(CXX_OBJ) : $(OBJ_DIR)/glitch/%.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 $(@F)" - @$(LD) $(LD_FLAGS) -o $@ $(AS_OBJ) $(CXX_OBJ) -lk -ld + @$(LD) $(LD_FLAGS) --library-path $(OBJ_DIR) -o $@ $(AS_OBJ) $(CXX_OBJ) -lk -ld # constexpr tests -include $(TEST_CXX_DEP) -$(TEST_CXX_OBJ): $(OBJ_DIR)/%.o : %.cc +$(TEST_CXX_OBJ): $(OBJ_DIR)/glitch/%.o : %.cc @mkdir -p $(@D) @echo " TEST $<" @$(TEST_CXX) -target $(TARGET) $(TEST_CXX_FLAGS) $(CXX_INCLUDE) -MMD -c $< -o $@ |