CXX = i686-elf-g++
ASM = nasm

CXXFLAGS = -m32 -ffreestanding -Wall -Wextra -O2
LDFLAGS = -m32 -nostdlib -Wl,-T,linker.ld

OBJS = boot.o kernel.o screen.o keyboard.o keymap_trq.o login.o notepad.o tnx_interpreter.o

all: kernel.bin

kernel.bin: $(OBJS)
	$(CXX) $(LDFLAGS) -o kernel.bin $(OBJS)


boot.o: boot.asm
	$(ASM) -f elf32 boot.asm -o boot.o


kernel.o: kernel.cpp
	$(CXX) $(CXXFLAGS) -c kernel.cpp -o kernel.o


screen.o: screen.cpp
	$(CXX) $(CXXFLAGS) -c screen.cpp -o screen.o


keyboard.o: keyboard.cpp
	$(CXX) $(CXXFLAGS) -c keyboard.cpp -o keyboard.o


login.o: login.cpp
	$(CXX) $(CXXFLAGS) -c login.cpp -o login.o


notepad.o: notepad.cpp
	$(CXX) $(CXXFLAGS) -c notepad.cpp -o notepad.o


clean:
	rm -f *.o kernel.bin tunodinx.iso


rebuild: clean all


run: all
	cp kernel.bin iso/boot/kernel.bin

	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 \
	-o tunodinx.iso

	./limine/limine-binary/limine-tool-windows-x86/limine.exe bios-install tunodinx.iso

	/c/msys64/ucrt64/bin/qemu-system-i386.exe -cdrom tunodinx.iso


.PHONY: all clean rebuild run