CC=i386-elf-gcc
LD=i386-elf-ld
CFLAGS=-ffreestanding -g -m32 -O3 -Wall
C_SOURCE=$(wildcard src/*.c) $(wildcard src/**/*.c)
C_OBJ=$(patsubst src/%.c, bin/%.o, $(C_SOURCE))

all: always boot kernel
	cat bin/boot.bin bin/full_kernel.bin > bin/os_unpadded.bin
	dd if=bin/os_unpadded.bin ibs=512 count=40 of=bin/os.bin conv=sync

always:
	mkdir -p bin
	mkdir -p bin/lib
	mkdir -p bin/sys
	mkdir -p bin/shell

boot: src/boot/boot.asm always
	nasm -f bin src/boot/boot.asm -o bin/boot.bin

bin/%.o: src/%.c always
	$(CC) -c $(CFLAGS) -o $@ $<

kernel: src/kernel_entry.asm $(C_OBJ) always
	nasm src/kernel_entry.asm -f elf -o bin/kernel_entry.o
	$(LD) -o bin/full_kernel.bin -Ttext 0x1000 bin/kernel_entry.o $(C_OBJ) --oformat binary

run: all
	qemu-system-x86_64 -drive file=bin/os.bin,index=0,media=disk,format=raw

clean:
	rm -r bin
