summaryrefslogtreecommitdiff
path: root/Makefile
blob: 6dd35e405ecd19f528fb9a8d96ae47da9c7e067a (plain) (blame)
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
.POSIX:
.PHONY: all clean run dbg
.SUFFIXES: .c .S. o

NAME = aplos
CC = gcc
CFLAGS = \
	-g \
	-O0 \
	-Wall \
	-Wextra \
	-std=c23 \
	-pedantic \
	-ffreestanding \
	-mcmodel=kernel \
	-fno-pie \
	-fno-stack-protector

LDFLAGS = \
	-m elf_x86_64 \
	-static \
	-T linker.lds

OFILES = \
	src/boot.o \
	src/descriptors.o \
	src/error.o \
	src/font.o \
	src/interrupt.o \
	src/main.o \
	src/nasty.o \
	src/paging.o \
	src/panic.o \
	src/screen.o \
	src/utf8.o \
	src/util.o

HFILES = src/aplos.h

SPLEEN_VERSION=2.1.0
LIMINE_BRANCH=v9.x-binary


all: bin/$(NAME)
	
clean:
	rm -rf bin iso_root external src/*.o

run: bin/$(NAME).iso
	qemu-system-x86_64 bin/$(NAME).iso

dbg: bin/$(NAME).iso
	qemu-system-x86_64 -s -S bin/$(NAME).iso

bin/$(NAME): linker.lds $(OFILES)
	mkdir -p bin
	$(LD) $(OFILES) $(LDFLAGS) -o $@

src/font.c: external/spleen
src/boot.c: external/limine

external/spleen:
	mkdir -p external
	wget -q -O - https://github.com/fcambus/spleen/releases/download/$(SPLEEN_VERSION)/spleen-$(SPLEEN_VERSION).tar.gz | tar -xzf - -C external/
	mv external/spleen-$(SPLEEN_VERSION) external/spleen

external/limine:
	mkdir -p external
	git clone https://github.com/limine-bootloader/limine.git --branch=$(LIMINE_BRANCH) --depth=1 external/limine
	make -C external/limine
	
bin/$(NAME).iso: bin/$(NAME) limine.conf Makefile external/limine
	mkdir -p iso_root/boot/limine
	mkdir -p iso_root/EFI/BOOT
	cp -v bin/$(NAME) iso_root/boot
	cp -v limine.conf \
		external/limine/limine-bios.sys \
		external/limine/limine-bios-cd.bin \
		external/limine/limine-uefi-cd.bin \
		iso_root/boot/limine/
	cp -v external/limine/BOOTX64.EFI iso_root/EFI/BOOT/
	cp -v external/limine/BOOTIA32.EFI iso_root/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_root -o bin/$(NAME).iso
	./external/limine/limine bios-install bin/$(NAME).iso