CROSS ?= aarch64-linux-gnu-

SRC_DIR := src
BUILD_DIR := build
BOOT_DIR := boot

CC := $(CROSS)gcc
LD := $(CROSS)ld
OBJCOPY := $(CROSS)objcopy

CFLAGS := -Wall -Wextra -O2 -ffreestanding -nostdlib -nostartfiles
LDFLAGS := -nostdlib -T $(SRC_DIR)/link.ld

BOOT_OBJ := $(BUILD_DIR)/boot.o
KERNEL_OBJ := $(BUILD_DIR)/kernel.o
KERNEL_ELF := $(BUILD_DIR)/kernel8.elf
KERNEL_IMG := $(BOOT_DIR)/kernel8.img

.PHONY: all clean

all: $(KERNEL_IMG)

$(BUILD_DIR):
	mkdir -p $(BUILD_DIR)

$(BOOT_DIR):
	mkdir -p $(BOOT_DIR)

$(BOOT_OBJ): $(SRC_DIR)/boot.S | $(BUILD_DIR)
	$(CC) $(CFLAGS) -c $< -o $@

$(KERNEL_OBJ): $(SRC_DIR)/kernel.c | $(BUILD_DIR)
	$(CC) $(CFLAGS) -c $< -o $@

$(KERNEL_ELF): $(BOOT_OBJ) $(KERNEL_OBJ) $(SRC_DIR)/link.ld | $(BUILD_DIR)
	$(LD) $(LDFLAGS) $(BOOT_OBJ) $(KERNEL_OBJ) -o $@

$(KERNEL_IMG): $(KERNEL_ELF) | $(BOOT_DIR)
	$(OBJCOPY) -O binary $< $@

clean:
	rm -rf $(BUILD_DIR)
	rm -f $(KERNEL_IMG)
