SOURCES = src/debug/misc.c src/io/term/flanterm_backends/fb.c src/io/term/flanterm.c src/debug/panic.c src/debug/stacktrace.c src/boot/boot.c src/sched/scheduler.c src/sched/process.c src/mem/heap/kheap.c src/mem/paging/vmm.c src/mem/paging/paging.c src/mem/paging/pmm.c src/string/string.c src/io/kbd/ps2.c src/io/serial/serial.c src/io/term/printf.c src/io/term/term.c src/idt/idt.c src/mem/gdt/gdt.c src/mem/misc/utils.c src/time/timer.c src/kmain.c

PROBLEMATIC_FLAGS=-Wno-unused-parameter -Wno-unused-variable

build:
	rm -f *.o
	x86_64-elf-gcc -g -c -Isrc $(SOURCES) $(PROBLEMATIC_FLAGS) -Wall -Wextra -std=gnu99 -nostdlib -ffreestanding -fno-stack-protector -fno-omit-frame-pointer -fno-stack-check -fno-PIC -ffunction-sections -fdata-sections -mcmodel=kernel
	nasm -f elf64 src/idt/idt.S -o idt_stub.o
	x86_64-elf-ld -o pepperk -T linker.ld *.o
	nm -n pepperk | awk '$$2 ~ /[TtDdBbRr]/ {print $$1, $$3}' > symbols.map
	python3 symbols.py
	nasm -f elf64 symbols.S -o symbols.o
	x86_64-elf-ld -o pepperk -T linker.ld *.o

limine/limine:
	rm -rf limine
	git clone https://github.com/limine-bootloader/limine.git --branch=v9.x-binary --depth=1
	$(MAKE) -C limine

build-iso: limine/limine build
	rm -rf iso_root
	mkdir -p iso_root/boot
	cp -v pepperk iso_root/boot
	mkdir -p iso_root/boot/limine
	cp -v limine.conf iso_root/boot/limine
	mkdir -p iso_root/EFI/BOOT
	cp -v limine/limine-bios.sys limine/limine-bios-cd.bin limine/limine-uefi-cd.bin iso_root/boot/limine/
	cp -v limine/BOOTX64.EFI iso_root/EFI/BOOT/
	cp -v 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 pepper.iso
	./limine/limine bios-install pepper.iso

debug:
	/usr/bin/qemu-system-x86_64 -drive file=pepper.iso -s -S -d int -D qemu.log -no-reboot -no-shutdown &
	gdb pepperk --command=debug.gdb

debug2:
	/usr/bin/qemu-system-x86_64 -drive file=pepper.iso -s -S -d int -no-reboot -no-shutdown &
	pwndbg pepperk --command=debug.gdb

run: build-iso
	/usr/bin/qemu-system-x86_64 -cdrom pepper.iso -serial stdio

clean:
	rm -rf *.o symbols.map symbols.S pepperk iso_root pepper.iso limine
