aboutsummaryrefslogtreecommitdiff
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
parentlibk: add some tests (diff)
downloadkernel.cpp-21e7874d9a9729b3ac7520a0a7ef8f7f5bc7601b.tar.xz
Rewrite makefile
-rw-r--r--.gitignore7
-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/makefile2
-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/makefile15
-rw-r--r--libk/stdlib.h2
-rw-r--r--linker.ld2
-rw-r--r--makefile74
-rw-r--r--toolchain.makefile18
13 files changed, 62 insertions, 60 deletions
diff --git a/.gitignore b/.gitignore
index 8bfb596..ae3d99d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,4 @@
-*.o
-*.a
-*.bin
+glitch.elf
+glitch.iso
+obj/
+isodir/
diff --git a/grub.cfg b/grub/grub.cfg
index d41ece4..d41ece4 100644
--- a/grub.cfg
+++ b/grub/grub.cfg
diff --git a/multiboot2.h b/grub/multiboot2.h
index 5a3db5a..5a3db5a 100644
--- a/multiboot2.h
+++ b/grub/multiboot2.h
diff --git a/boot.s b/kernel/boot.s
index bb446d8..bb446d8 100644
--- a/boot.s
+++ b/kernel/boot.s
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/vga.cc b/kernel/vga.cc
index 83d0060..83d0060 100644
--- a/vga.cc
+++ b/kernel/vga.cc
diff --git a/vga.h b/kernel/vga.h
index 3052dbc..3052dbc 100644
--- a/vga.h
+++ b/kernel/vga.h
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();
diff --git a/linker.ld b/linker.ld
index a0bb74f..c6c706e 100644
--- a/linker.ld
+++ b/linker.ld
@@ -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
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
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
+