aboutsummaryrefslogtreecommitdiff
path: root/makefile
diff options
context:
space:
mode:
authorAqua-sama <aqua@iserlohn-fortress.net>2021-02-07 11:36:04 +0200
committerAqua-sama <aqua@iserlohn-fortress.net>2021-02-07 11:36:04 +0200
commit21e7874d9a9729b3ac7520a0a7ef8f7f5bc7601b (patch)
tree40df2b6564739d7ec1e67468fd3b8e628eb83bc7 /makefile
parentlibk: add some tests (diff)
downloadkernel.cpp-21e7874d9a9729b3ac7520a0a7ef8f7f5bc7601b.tar.xz
Rewrite makefile
Diffstat (limited to 'makefile')
-rw-r--r--makefile74
1 files changed, 34 insertions, 40 deletions
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