summaryrefslogtreecommitdiff
path: root/Makefile
blob: e4c002238c64b3a6dc5908a2160d8d9ec80aff76 (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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
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 \
		  kernel/utils.o \
		  kernel/io/logger/base.o \
		  kernel/amd64/io/com1.o
K_SRCS := $(patsubst %.o,%.cxx,$(K_OBJS))
K_ASM_OBJS := \
			  kernel/amd64/io/ports.o
K_LINKSCRIPT := kernel/ldscript

CPPSTDDIRS := \
		vendor/x86_64-elf/include/c++/14.2.0 \
		vendor/x86_64-elf/include/c++/14.2.0/x86_64-elf \
		vendor/x86_64-elf/include/c++/14.2.0/backward
CPPSTD := $(addprefix -I ,$(CPPSTDDIRS))

BINARIES := \
			$(KERNEL)

OVMF_ROOT := /usr/share/qemu

.PHONY: all clean run

all: hinterOS.iso

run:
	qemu-system-x86_64 --serial stdio --bios $(OVMF_ROOT)/ovmf-x86_64.bin -cdrom hinterOS.iso

clean:
	- find kernel -type f -name '*.o' -exec rm {} +
	- find kernel -type f -name '*.d' -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) $(K_ASM_OBJS)
	rm -rf bin
	mkdir -p bin
	$(LD) -o $@ -T $(K_LINKSCRIPT) $^

.SECONDEXPANSION:
$(K_OBJS): %.o: %.cxx %.d
	$(CC) -c $(CFLAGS) -MT $@ -MMD -MP -MF $(basename $<).d -I kernel $(CPPSTD) $< -o $@

$(K_ASM_OBJS): %.o: %.S
	$(CC) -c $(CFLAGS) $^ -o $@

DEPFILES := $(K_SRCS:%.cxx=%.d)
$(DEPFILES):

-include $(wildcard $(DEPFILES))