Files
nate-os/makefile
2025-11-11 11:09:32 -07:00

59 lines
1.3 KiB
Makefile
Executable File

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)