KERNEL = julios
ISO = julios.iso
INSTALL_ROOT = iso
ABS_INSTALL = $(abspath $(INSTALL_ROOT))

LINKER_SCRIPT = src/linker.ld
BOOT_OBJS = src/boot/multiboot.o src/boot/boot.o
LIB_JULIOS = target/x86_64-julios/debug/libjulios.a

GRUB_CFG = grub/grub.cfg

all: $(ISO)

run: $(ISO)
	qemu-system-x86_64 -cdrom $< -serial stdio -m 8G

debug: $(ISO)
	bochs -q

$(ISO): install
	grub-mkrescue -o $@ $(INSTALL_ROOT)

install: $(KERNEL) $(GRUB_CFG)
	mkdir -p $(ABS_INSTALL)
	mkdir -p $(ABS_INSTALL)/boot/grub
	cp $(KERNEL) $(ABS_INSTALL)/boot
	cp grub/grub.cfg $(ABS_INSTALL)/boot/grub

$(KERNEL): $(LIB_JULIOS) $(LINKER_SCRIPT) $(BOOT_OBJS)
	ld -n -T $(LINKER_SCRIPT) -o $(KERNEL) $(BOOT_OBJS) $(LIB_JULIOS)

$(LIB_JULIOS):
	cargo build


%.o: %.asm
	nasm -f elf64 $^ -o $@

clean:
	$(RM) $(BOOT_OBJS)
	$(RM) $(KERNEL)
	$(RM) julios.iso
	$(RM) -r iso
	$(RM) -r target

.PHONY: $(INSTALL_ROOT) install clean all run debug $(LIB_JULIOS)