summaryrefslogtreecommitdiff
path: root/Makefile
blob: 97796702e8ffd1de79ba4fa13419074015b08e07 (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
.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}/**