.DELETE_ON_ERROR:

CC = gcc
GCCPARAMS = -m32 -fno-pie -nostdlib -fstrength-reduce -fomit-frame-pointer -finline-functions -fno-builtin -nostdinc -fno-stack-protector -Wall -Wextra
ASPARAMS = -f elf32
LDPARAMS = -m elf_i386

SRC := kernel
OBJ := obj

SOURCES := $(wildcard $(SRC)/*.c)
ASMSOURCES := $(wildcard $(SRC)/*.s)
OBJECTS := $(patsubst $(SRC)/%.c, $(OBJ)/%.o, $(SOURCES))
ASMOBJECTS := $(patsubst $(SRC)/%.s, $(OBJ)/%.o, $(ASMSOURCES))

run: kernel.iso
	bochs -f support_files/boch.txt -q

$(OBJ)/%.o: $(SRC)/%.c
	$(CC) $(GCCPARAMS) $(SRC) -c -o $@ $<

$(OBJ)/%.o: $(SRC)/%.s
	nasm $(ASPARAMS) -o $@ $<
	
kernel.o: build_numbers.c $(OBJECTS) $(ASMOBJECTS)
	@sh support_files/run_linker.sh "$(LDPARAMS)" obj/bin/$@ "$(OBJECTS)" "$(ASMOBJECTS)"

kernel.iso: kernel.o
	cp obj/bin/kernel.o iso/boot/kernel.bin
	grub-mkrescue --output=kernel.iso iso

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

.PHONY: resetbuild
resetbuild:
	@sh support_files/handle_build_numbers.sh build_numbers.c reset
