SRC_DIR := src BUILD_DIR := build OBJ_DIR := $(BUILD_DIR) BIN_DIR := $(BUILD_DIR)/bin IMG := $(BIN_DIR)/kernel8.img ELF := $(BIN_DIR)/kernel8.elf SRC := $(wildcard $(SRC_DIR)/*.c) OBJ := $(SRC:$(SRC_DIR)/%.c=$(OBJ_DIR)/%.o) ASM_SRC := $(wildcard $(SRC_DIR)/*.s) ASM_OBJ := $(ASM_SRC:$(SRC_DIR)/%.s=$(OBJ_DIR)/%.o) LINK := $(SRC_DIR)/link.ld CPPFLAGS := -I$(SRC_DIR) -MMD -MP CFLAGS := -Wall -Wextra -O2 -ffreestanding -nostdinc -nostdlib -nostartfiles LDFLAGS := -nostdlib TOOLCHAIN := $(HOME)/bin/arm-gnu-toolchain-14.2.rel1-x86_64-aarch64-none-elf/bin AS := $(TOOLCHAIN)/aarch64-none-elf-as CC := $(TOOLCHAIN)/aarch64-none-elf-gcc LD := $(TOOLCHAIN)/aarch64-none-elf-ld OBJCOPY := $(TOOLCHAIN)/aarch64-none-elf-objcopy .PHONY: all clean all: $(IMG) $(IMG): $(ELF) | $(BIN_DIR) @echo Building $@ $(OBJCOPY) -O binary $(ELF) $@ $(ELF): $(OBJ) $(ASM_OBJ) | $(BIN_DIR) @echo Building $@ $(LD) $(LDFLAGS) $^ -T $(LINK) -o $@ $(OBJ_DIR)/%.o: $(SRC_DIR)/%.c | $(BUILD_DIR) @echo Building $< "->" $@ $(CC) $(CFLAGS) -c $< -o $@ $(OBJ_DIR)/%.o: $(SRC_DIR)/%.s | $(BUILD_DIR) @echo Building $< "->" $@ $(AS) $< -o $@ clean: rm -rf $(BUILD_DIR) $(BUILD_DIR): mkdir -p $(BUILD_DIR) $(BIN_DIR): mkdir -p $(BIN_DIR)