summaryrefslogtreecommitdiff
path: root/Makefile
diff options
context:
space:
mode:
Diffstat (limited to 'Makefile')
-rw-r--r--Makefile81
1 files changed, 81 insertions, 0 deletions
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..f859764
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,81 @@
+.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
+
+LDFLAGS = \
+ -m elf_x86_64 \
+ -static \
+ -T linker.lds
+
+OFILES = \
+ src/boot.o \
+ src/font.o \
+ src/main.o \
+ src/nasty.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