GCCPATH = /opt/gcc-arm/bin

CC 			= $(GCCPATH)/aarch64-none-elf-gcc
LD 			= $(GCCPATH)/aarch64-none-elf-ld
OBJCOPY 	= $(GCCPATH)/aarch64-none-elf-objcopy
GCCFLAGS 	= -Wall -O2 -ffreestanding -fno-builtin -nostdinc -nostdlib -nostartfiles 

OUTDIR = ./out/bin

HFILES = $(wildcard *.h include/*.h)
CFILES = $(wildcard *.c src/*.c)
_OFILES = $(CFILES:.c=.o)
OFILES = $(_OFILES:src/%=out/%)

all: clean kernel8.img

out/boot.o: src/boot.S
	@echo "Building $@"
	@mkdir -p $(@D)
	@$(CC) -c $< -o $@ $(GCCLFAGS)

out/%.o: src/%.c $(HFILES)
	@echo "Building $@"
	@mkdir -p $(@D)
	@$(CC) -Iinclude -c $< -o $@ $(GCCLFAGS)

kernel8.img: out/boot.o $(OFILES)
	@echo "Linking kernel"
	@mkdir -p bin
	@$(LD) -nostdlib out/boot.o $(OFILES) -T link.ld -o out/kernel8.elf
	@$(OBJCOPY) -O binary out/kernel8.elf bin/kernel8.img
	@echo "Done!"

clean:
	@/bin/rm -rf out/ > /dev/null 2> /dev/null || true