GCCPARAMS = -m32 -fno-pie -nostdlib -fstrength-reduce -fomit-frame-pointer -finline-functions -fno-builtin -nostdinc -fno-stack-protector
ASPARAMS = -f elf32
LDPARAMS = -m elf_i386
INCBULDNUM := sh make_buildnum.sh

objects = obj/start.o \
	      obj/kernel.o \
	      obj/scrn.o \
	      obj/gdt.o \
	      obj/idt.o \
	      obj/isrs.o \
	      obj/irq.o \
	      obj/timer.o \
	      obj/kb.o \
	      obj/shell.o \
	      obj/memorymanager.o \
	      obj/pci.o \
	      obj/port.o \

run:kernel.iso
	qemu-system-x86_64 -m 256M -cdrom kernel.iso &

obj/%.o: src/%.c
	mkdir -p $(@D)
	gcc $(GCCPARAMS) -c -o $@ $<

obj/%.o: src/%.asm
	mkdir -p $(@D)
	nasm $(ASPARAMS) -o $@ $<

kernel.bin: linker.ld $(objects)
	#Crap way to increment the build number, but will do for now
	#thanks to my limited knowledge of Makefiles.
	sh make_buildnum.sh
	mkdir -p obj/bin
	ld $(LDPARAMS) -T $< -o obj/bin/$@ $(objects)

kernel.iso: kernel.bin
	mkdir iso
	mkdir iso/boot
	mkdir iso/boot/grub
	cp obj/bin/kernel.bin iso/boot/kernel.bin
	echo 'set timeout=0' > iso/boot/grub/grub.cfg
	echo 'set default=0' >> iso/boot/grub/grub.cfg
	echo '' >> iso/boot/grub/grub.cfg
	echo 'menuentry "SDOS" {'  >> iso/boot/grub/grub.cfg
	echo '  multiboot /boot/kernel.bin'    	 >> iso/boot/grub/grub.cfg
	echo '  boot'                            >> iso/boot/grub/grub.cfg
	echo '}'                                 >> iso/boot/grub/grub.cfg
	grub-mkrescue --output=kernel.iso iso
	rm -rf iso

.PHONY: clean
clean:
	rm -rf obj kernel.iso

.PHONY: resetbuild
resetbuild:
	echo 0 > build.number
