diff options
author | Aqua-sama <aqua@iserlohn-fortress.net> | 2021-02-07 11:36:04 +0200 |
---|---|---|
committer | Aqua-sama <aqua@iserlohn-fortress.net> | 2021-02-07 11:36:04 +0200 |
commit | 21e7874d9a9729b3ac7520a0a7ef8f7f5bc7601b (patch) | |
tree | 40df2b6564739d7ec1e67468fd3b8e628eb83bc7 | |
parent | libk: add some tests (diff) | |
download | kernel.cpp-21e7874d9a9729b3ac7520a0a7ef8f7f5bc7601b.tar.xz |
Rewrite makefile
-rw-r--r-- | .gitignore | 7 | ||||
-rw-r--r-- | grub/grub.cfg (renamed from grub.cfg) | 0 | ||||
-rw-r--r-- | grub/multiboot2.h (renamed from multiboot2.h) | 0 | ||||
-rw-r--r-- | kernel/boot.s (renamed from boot.s) | 0 | ||||
-rw-r--r-- | kernel/kernel.cc (renamed from kernel.cc) | 2 | ||||
-rw-r--r-- | kernel/makefile | 2 | ||||
-rw-r--r-- | kernel/vga.cc (renamed from vga.cc) | 0 | ||||
-rw-r--r-- | kernel/vga.h (renamed from vga.h) | 0 | ||||
-rw-r--r-- | libk/makefile | 15 | ||||
-rw-r--r-- | libk/stdlib.h | 2 | ||||
-rw-r--r-- | linker.ld | 2 | ||||
-rw-r--r-- | makefile | 74 | ||||
-rw-r--r-- | toolchain.makefile | 18 |
13 files changed, 62 insertions, 60 deletions
@@ -1,3 +1,4 @@ -*.o -*.a -*.bin +glitch.elf +glitch.iso +obj/ +isodir/ diff --git a/multiboot2.h b/grub/multiboot2.h index 5a3db5a..5a3db5a 100644 --- a/multiboot2.h +++ b/grub/multiboot2.h diff --git a/kernel.cc b/kernel/kernel.cc index 3045374..9ea5c95 100644 --- a/kernel.cc +++ b/kernel/kernel.cc @@ -8,9 +8,9 @@ #error "This tutorial needs to be compiled with a ix86-elf compiler" #endif +#include <multiboot2.h> #include <stdlib.h> #include <types.h> -#include "multiboot2.h" #include "vga.h" extern "C" void kernel_main(uint32_t mb_magic, uint32_t mb_addr) { diff --git a/kernel/makefile b/kernel/makefile new file mode 100644 index 0000000..23e3683 --- /dev/null +++ b/kernel/makefile @@ -0,0 +1,2 @@ +AS_OBJ += kernel/boot.o +CXX_OBJ += kernel/kernel.o kernel/vga.o diff --git a/libk/makefile b/libk/makefile index ea684ba..0f75e5a 100644 --- a/libk/makefile +++ b/libk/makefile @@ -1,14 +1,3 @@ +CXX_OBJ += libk/string/string.o libk/string/integerview.o libk/stdlib/console.o +CXX_TEST_OBJ += libk/types/test.o libk/string/test.o -CXX_OBJ := string/string.o string/integerview.o stdlib/console.o -CXX_TEST_OBJ := types/test.o string/test.o - -libk.a: $(CXX_OBJ) - $(AR) rcs $@ $(CXX_OBJ) - -test: $(CXX_TEST_OBJ) - -$(CXX_OBJ) $(CXX_TEST_OBJ): %.o : %.cc - $(CXX) -target $(TARGET) $(CXX_FLAGS) -I$(CURDIR) -c $^ -o $@ - -clean: - rm -f libk.a $(CXX_OBJ) $(CXX_TEST_OBJ) diff --git a/libk/stdlib.h b/libk/stdlib.h index e1d3dd2..1b76b67 100644 --- a/libk/stdlib.h +++ b/libk/stdlib.h @@ -35,4 +35,4 @@ void printk(const T& a, const Args&... x) { printk(x...); } -__attribute__((__noreturn__)) void abort(); +extern "C" __attribute__((__noreturn__)) void abort(); @@ -1,8 +1,6 @@ ENTRY(_start) OUTPUT_FORMAT(elf32-i386) -SEARCH_DIR(libk) - /* Tell where the various sections of the object files will be put in the final kernel image. */ SECTIONS @@ -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 diff --git a/toolchain.makefile b/toolchain.makefile new file mode 100644 index 0000000..f5fb1b1 --- /dev/null +++ b/toolchain.makefile @@ -0,0 +1,18 @@ +# Toolchain +TARGET := i686-elf + +AS := clang +AS_FLAGS := + +LD := ld.lld +LD_FLAGS := -T linker.ld + +CXX := clang++ +CXX_FLAGS := -std=c++20 -ffreestanding -nostdlib -nostdinc -nostdinc++ \ + -fno-exceptions -fno-rtti -Wall -Wextra -O2 +CXX_INCLUDE := $(CURDIR)/libk $(CURDIR)/grub + +# +BOOT := grub-mkrescue +EMU := qemu-system-i386 -cdrom + |