59 lines
1.3 KiB
Makefile
Executable File
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)
|