init(kernel, kernel.elf)

preset(freestanding)
# This makes debugging hard :(
# preset(optimize)
preset(debug)
preset(32)
preset(warn)
preset(nasm)

archetype(c)
archetype(asm)

depends(initrd, $(ROOT)/boot/initrd, initrd.img)
depends(ata_pio, dri/ata_pio, ata_pio.a)
depends(pci, dri/pci, pci.a)
depends(ide, dri/ide, ide.a)
depends(ext2, dri/fs/ext2, ext2.a)
# AHCI not yet implemented
# depends(ahci, dri/ahci, ahci.a)

TEST ?=
test_defines = $(TEST:%=-DTEST_%)

FS ?= ext2

CFLAGS += -I $(ROOT)/include/kernel $(test_defines)

LDFLAGS += -Tlink.ld -melf_i386
ASMFLAGS += -felf -Fdwarf
QEMUFLAGS = -hda hd0_ext2.img

OBJECTS = 	boot.o \
			main.o \
			descriptor_tables.o \
			io.o \
			vga.o \
			gdt_flush.o \
			idt.o \
			log.o \
			irq.o \
			pic.o \
			timer.o \
			paging.o \
			switch_table.o \
			scan_codes.o \
			kheap.o \
			alloc.o \
			vfs.o \
			multiboot.o \
			vfs_initrd.o \
			syscall.o \
			task.o \
			task_api.o \
			faults.o \
			lib(ext2) \
			lib(ide) \
			lib(ata_pio) \
			lib(pci)

type(custom_link)

debug-wait: kernel.elf
	qemu-system-i386 -s -S $(QEMUFLAGS) -kernel kernel.elf

debug: kernel.elf
	qemu-system-i386 -s -S $(QEMUFLAGS) -kernel kernel.elf &
	@echo run "target remote localhost:1234" to connect to qemu
	gdb $<
	@pkill qemu-system-i38

hd0_%.img:
	status_log(MKFS, $@)
	@dd bs=4M count=8 if=/dev/zero of=$@
	@$(patsubst hd0_%.img,mkfs.%,$@) $@

qemu: kernel.elf hd0_$(FS).img
	qemu-system-i386 $(QEMUFLAGS) -d cpu_reset -monitor stdio -kernel kernel.elf -no-reboot

qemu-iso: install
	qemu-system-i386 $(QEMUFLAGS) -monitor stdio $(ROOT)/bin/bluejay.iso

scan_codes.c: gen_scan_codes.py scan_codes.tsv 
	python3 $< > $@

mount: hd0_$(FS).img
	status_log(MOUNT, $^ $(ROOT)/mnt)
	@if [ "$(whoami)" = root ]; then echo "DON'T RUN THIS AS ROOT" && exit 1; fi
	@mkdir -p $(ROOT)/mnt
	@mount $^ $(ROOT)/mnt

umount:
	status_log(UMOUNT, $(ROOT)/mnt)
	@umount $(ROOT)/mnt

install: kernel.elf lib(initrd)
	cp kernel.elf $(ROOT)/boot/
	rm -f $(ROOT)/bin/bluejay.iso
	grub-mkrescue -o $(ROOT)/bin/bluejay.iso $(ROOT)

finish
