CROSS = aarch64-none-elf- CC = $(CROSS)gcc AS = $(CROSS)as LD = $(CROSS)ld OBJCOPY = $(CROSS)objcopy CFLAGS = -O2 -ffreestanding -nostdlib -Wall -Wextra -Iinclude include/ LDFLAGS = -T src/boot/linker.ld SRC = src BUILD = build # List all C source files here (update as needed) SOURCES_C = $(SRC)/renderer.c $(SRC)/font_pack.c $(SRC)/main.c # List assembler source files SOURCES_ASM = $(SRC)/boot/boot.s # Object files (one per source file) OBJ_C = $(patsubst $(SRC)/%.c,$(BUILD)/%.o,$(SOURCES_C)) OBJ_ASM = $(patsubst $(SRC)/%.s,$(BUILD)/%.o,$(SOURCES_ASM)) TARGET_ELF = $(BUILD)/kernel.elf TARGET_IMG = $(BUILD)/kernel8.img .PHONY: all clean run all: $(TARGET_IMG) # Create build directory if it does not exist $(BUILD): mkdir -p $(BUILD) mkdir -p $(BUILD)/boot # Assemble assembly sources $(BUILD)/%.o: $(SRC)/%.s | $(BUILD) $(AS) $< -o $@ # Compile C sources $(BUILD)/%.o: $(SRC)/%.c | $(BUILD) $(CC) $(CFLAGS) -c $< -o $@ # Link all object files into ELF kernel $(TARGET_ELF): $(OBJ_ASM) $(OBJ_C) $(LD) $(LDFLAGS) $^ -o $@ # Convert ELF to raw binary image $(TARGET_IMG): $(TARGET_ELF) $(OBJCOPY) $< -O binary $@ clean: rm -rf $(BUILD) # Run QEMU emulator for Raspberry Pi 3 with serial output redirected to terminal run: $(TARGET_IMG) qemu-system-aarch64 -M raspi3b -serial stdio -kernel $(TARGET_IMG)