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(sys, $(ROOT)/src/libsys, libsys.a)
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) -O0

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 \
			sync.o \
			lib(ext2) \
			lib(ide) \
			lib(ata_pio) \
			lib(pci) \
			lib(sys)

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.%,$@) $@

fs-info: hd0_$(FS).img
	tune2fs -l $< | grep -i inode

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
