summaryrefslogtreecommitdiff
path: root/Makefile
diff options
context:
space:
mode:
Diffstat (limited to 'Makefile')
-rw-r--r--Makefile68
1 files changed, 68 insertions, 0 deletions
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..0b534fb
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,68 @@
+CC := vendor/bin/x86_64-elf-g++
+LD := vendor/bin/x86_64-elf-ld
+
+CFLAGS := -g -O2 -pipe
+override CFLAGS += \
+ -Wall \
+ -Wextra \
+ -std=c++17 \
+ -ffreestanding \
+ -mno-red-zone \
+ -msoft-float \
+ -mno-sse \
+ -fno-stack-protector \
+ -fno-stack-check \
+ -fno-rtti \
+ -fno-exceptions \
+ -ffunction-sections \
+ -fdata-sections \
+ -mcmodel=kernel
+
+KERNEL := bin/core
+K_OBJS := \
+ kernel/entry.o \
+ kernel/cxx/constructors.o \
+ kernel/cxx/icxxabi.o
+K_LINKSCRIPT := kernel/ldscript
+
+BINARIES := \
+ $(KERNEL)
+
+OVMF_ROOT := /usr/share/qemu
+
+.PHONY: all clean run
+
+all: hinterOS.iso
+
+run:
+ qemu-system-x86_64 --bios $(OVMF_ROOT)/ovmf-x86_64.bin -cdrom hinterOS.iso
+
+clean:
+ - find kernel -type f -name '*.o' -exec rm {} +
+ - rm hinterOS.iso
+ - rm $(BINARIES)
+
+hinterOS.iso: $(BINARIES)
+ rm -rf iso
+ mkdir -p iso/bin
+ cp -v $^ iso/bin/
+ mkdir -p iso/boot
+ mkdir -p iso/boot/limine
+ cp -v limine.conf iso/boot/limine/
+ mkdir -p iso/EFI/BOOT
+ cp -v vendor/limine/limine-bios.sys vendor/limine/limine-bios-cd.bin vendor/limine/limine-uefi-cd.bin iso/boot/limine/
+ cp -v vendor/limine/BOOTX64.EFI iso/EFI/BOOT/
+ xorriso -as mkisofs -R -r -J -b boot/limine/limine-bios-cd.bin \
+ -no-emul-boot -boot-load-size 4 -boot-info-table -hfsplus \
+ -apm-block-size 2048 --efi-boot boot/limine/limine-uefi-cd.bin \
+ -efi-boot-part --efi-boot-image --protective-msdos-label \
+ iso -o $@
+ vendor/limine/limine bios-install $@
+
+$(KERNEL): $(K_OBJS)
+ rm -rf bin
+ mkdir -p bin
+ $(LD) -o $@ -T$(K_LINKSCRIPT) $^
+
+$(K_OBJS): %.o: %.cxx
+ $(CC) -c $(CFLAGS) $^ -o $@