BaseOS
This commit is contained in:
57
makefile
Executable file
57
makefile
Executable file
@@ -0,0 +1,57 @@
|
||||
|
||||
CROSS = aarch64-none-elf-
|
||||
|
||||
CC = $(CROSS)gcc
|
||||
AS = $(CROSS)as
|
||||
LD = $(CROSS)ld
|
||||
OBJCOPY = $(CROSS)objcopy
|
||||
|
||||
CFLAGS = -O2 -ffreestanding -nostdlib -Wall -Wextra
|
||||
LDFLAGS = -T src/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.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)
|
||||
|
||||
# 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)
|
||||
sudo qemu-system-aarch64 -M raspi3b -serial stdio -kernel $(TARGET_IMG)
|
||||
Reference in New Issue
Block a user