CC = i686-elf-gcc
LD = i686-elf-ld

OSNAME := rockos

C_SOURCES := $(shell find kernel -type f -name '*.c')
S_SOURCES := $(shell find kernel -type f -name '*.S')

OBJECTS := $(patsubst %, obj/%.o, $(C_SOURCES) $(S_SOURCES))

CFLAGS  := -ffreestanding -O2 -Wall -Wextra -Ikernel
LDFLAGS := -T kernel/linker.ld

.PHONY: all run clean

all: $(OSNAME).iso

$(OSNAME).bin: $(OBJECTS) kernel/linker.ld
	$(LD) $(LDFLAGS) -o $@ $(OBJECTS)

$(OSNAME).iso: $(OSNAME).bin grub.cfg
	mkdir -p isodir/boot/grub
	cp $(OSNAME).bin isodir/boot/$(OSNAME)
	cp grub.cfg isodir/boot/grub/grub.cfg
	grub-mkrescue -o $(OSNAME).iso isodir

obj/%.c.o: %.c
	@mkdir -p $(dir $@)
	$(CC) -c $< -o $@ $(CFLAGS)

obj/%.S.o: %.S
	@mkdir -p $(dir $@)
	$(CC) -c $< -o $@ $(CFLAGS)

run: $(OSNAME).iso
	qemu-system-i386 -cdrom $(OSNAME).iso

clean:
	@echo "Cleaning up build artifacts..."
	rm -rf $(OSNAME).iso $(OSNAME).bin obj isodir compile_commands.json