From 21e7874d9a9729b3ac7520a0a7ef8f7f5bc7601b Mon Sep 17 00:00:00 2001 From: Aqua-sama Date: Sun, 7 Feb 2021 11:36:04 +0200 Subject: Rewrite makefile --- makefile | 74 +++++++++++++++++++++++++++++----------------------------------- 1 file changed, 34 insertions(+), 40 deletions(-) (limited to 'makefile') diff --git a/makefile b/makefile index 1a50a18..6dd59d7 100644 --- a/makefile +++ b/makefile @@ -3,58 +3,52 @@ # ?= only set if it doesn't have a value # != execute a shell script on the right-hand side and assign its result to the left-hand side -export TARGET := i686-elf +include toolchain.makefile +OBJ_DIR := obj -export AR := llvm-ar - -AS := clang - -LD := ld.lld -LD_FLAGS := -T linker.ld -lk - -export CXX := clang -export CXX_FLAGS := -std=c++20 -ffreestanding -nostdlib -nostdinc -nostdinc++ \ - -fno-exceptions -fno-rtti -Wall -Wextra -O2 -CXX_INCLUDE := $(CURDIR)/libk -CXX_OBJ := kernel.o vga.o +include kernel/makefile +include libk/makefile +AS_OBJ := $(addprefix $(OBJ_DIR)/, $(AS_OBJ)) +CXX_OBJ := $(addprefix $(OBJ_DIR)/, $(CXX_OBJ)) +CXX_TEST_OBJ := $(addprefix $(OBJ_DIR)/, $(CXX_TEST_OBJ)) +CXX_INCLUDE := $(addprefix -I, $(CXX_INCLUDE)) # $@ is target # $< is first dependency # $^ is all dependencies +.PHONY: default clean test check-grub run default: glitch.elf -check-grub: glitch.elf - grub-file --is-x86-multiboot2 glitch.elf - -glitch.elf: boot.o $(CXX_OBJ) libk/libk.a - $(LD) $(LD_FLAGS) -o $@ boot.o $(CXX_OBJ) +glitch.elf: $(AS_OBJ) $(CXX_OBJ) + @echo " LD $@" + @$(LD) $(LD_FLAGS) -o $@ $(AS_OBJ) $(CXX_OBJ) -boot.o: boot.s - $(AS) -target $(TARGET) -nostdlib -Wall -Wextra -c $^ -o $@ +$(AS_OBJ): $(OBJ_DIR)/%.o: %.s + @mkdir -p $(@D) + @echo " AS $^" + @$(AS) -target $(TARGET) -nostdlib -Wall -Wextra -c $^ -o $@ -$(CXX_OBJ): %.o : %.cc - $(CXX) -target $(TARGET) $(CXX_FLAGS) -I$(CXX_INCLUDE) -c $^ -o $@ +$(CXX_OBJ) $(CXX_TEST_OBJ): $(OBJ_DIR)/%.o : %.cc + @mkdir -p $(@D) + @echo " CXX $^" + @$(CXX) -target $(TARGET) $(CXX_FLAGS) $(CXX_INCLUDE) -c $^ -o $@ -libk/libk.a: - $(MAKE) -C libk libk.a - -libk/test: - $(MAKE) -C libk test -test: libk/test +clean: + rm -rf $(AS_OBJ) $(CXX_OBJ) $(CXX_TEST_OBJ) glitch.elf isodir -iso: glitch.elf - mkdir -p isodir/boot/grub - cp glitch.elf isodir/boot/glitch.elf - cp grub.cfg isodir/boot/grub/grub.cfg - grub-mkrescue -o myos.iso isodir +# testing +test: $(CXX_TEST_OBJ) check-grub +check-grub: glitch.elf + grub-file --is-x86-multiboot2 glitch.elf -run: iso - qemu-system-i386 -cdrom myos.iso +# disk image +glitch.iso: glitch.elf grub/grub.cfg + @mkdir -p isodir/boot/grub + @cp glitch.elf isodir/boot/glitch.elf + @cp grub/grub.cfg isodir/boot/grub/grub.cfg + @$(BOOT) -o $@ isodir -clean: - rm -f boot.o $(CXX_OBJ) glitch.elf - $(MAKE) -C libk clean +run: glitch.iso + @$(EMU) $< -clean-iso: - rm -rf isodir -- cgit v1.2.1