summaryrefslogtreecommitdiff
path: root/Makefile
blob: 0b534fb76ff6ac9bc03190c45229f3cff2cba90b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
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 $@