summaryrefslogtreecommitdiff
path: root/Makefile
diff options
context:
space:
mode:
Diffstat (limited to 'Makefile')
-rw-r--r--Makefile37
1 files changed, 37 insertions, 0 deletions
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..9779670
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,37 @@
+.DEFAULT_GOAL := macaroni.iso
+
+LIMINE_SHARE = /opt/homebrew/share/limine/
+
+BUILD_OUT = build
+ASM = nasm
+ASM_FLAGS = -felf32
+CFLAG = -std=c11 -ffreestanding -O0 -Wall -Wextra
+CC = i686-elf-gcc
+BINFLAG = -T linker.ld -ffreestanding -O0 -nostdlib -lgcc
+
+boot.o: src/boot.asm
+ ${ASM} ${ASM_FLAGS} src/boot.asm -o ${BUILD_OUT}/boot.o
+
+kernel.o: src/kernel.c
+ ${CC} -c src/kernel.c -o ${BUILD_OUT}/kernel.o ${CFLAG}
+
+macaroni.bin: boot.o kernel.o
+ ${CC} -o ${BUILD_OUT}/macaroni.bin ${BINFLAG} ${BUILD_OUT}/*.o
+
+macaroni.iso: macaroni.bin
+ mkdir -p ${BUILD_OUT}/iso
+ cp ${BUILD_OUT}/macaroni.bin ${BUILD_OUT}/iso/macaroni.bin
+ printf "timeout: 0\n/macaroni\n protocol: multiboot1\n kernel_path: boot():/macaroni.bin\n" > ${BUILD_OUT}/iso/limine.conf
+ cp ${LIMINE_SHARE}/limine-bios-cd.bin ${LIMINE_SHARE}/limine-bios.sys ${LIMINE_SHARE}/limine-uefi-cd.bin ${BUILD_OUT}/iso/
+ xorriso -as mkisofs -R -r -J -b limine-bios-cd.bin -no-emul-boot -boot-load-size 4 -boot-info-table \
+ --efi-boot limine-uefi-cd.bin -efi-boot-part --efi-boot-image --protective-msdos-label \
+ ${BUILD_OUT}/iso -o ${BUILD_OUT}/macaroni.iso
+ limine bios-install ${BUILD_OUT}/macaroni.iso
+
+.PHONY: demo
+demo: macaroni.iso
+ qemu-system-x86_64 -cdrom ${BUILD_OUT}/macaroni.iso
+
+.PHONY: clean
+clean:
+ rm -rf ${BUILD_OUT}/**