universalisos/kernel/Makefile
Fábio Coutada bafa872415 refactor(kernel): rewrite Stage 1 kernel in C++
- Rename kernel.c -> kernel.cpp and uart.c -> uart.cpp
- Add universalisos::uart namespace with constexpr register definitions
- Use extern "C" linkage for kernel_main() called from boot.S
- Compile with arm-none-eabi-g++ using C++17 freestanding flags
  (-fno-exceptions, -fno-rtti, -fno-threadsafe-statics, -fno-use-cxa-atexit)
- Update Makefile to use g++ and .cpp build rules
2026-07-06 22:53:50 +01:00

57 lines
1 KiB
Makefile

# Universalisos kernel build for QEMU ARM virt (C++)
CROSS_COMPILE ?= arm-none-eabi-
CXX := $(CROSS_COMPILE)g++
LD := $(CROSS_COMPILE)ld
OBJCOPY := $(CROSS_COMPILE)objcopy
OBJDUMP := $(CROSS_COMPILE)objdump
CXXFLAGS := \
-mcpu=cortex-a15 \
-marm \
-O2 \
-std=c++17 \
-ffreestanding \
-nostdlib \
-nostartfiles \
-fno-exceptions \
-fno-rtti \
-fno-threadsafe-statics \
-fno-use-cxa-atexit \
-Wall \
-Wextra \
-Werror \
-Iinclude \
-g
LDFLAGS := -T arch/arm/linker.ld
OBJS := \
arch/arm/boot.o \
arch/arm/uart.o \
kernel.o
.PHONY: all clean run dump
all: kernel.bin kernel.elf
kernel.elf: $(OBJS) arch/arm/linker.ld
$(CXX) $(CXXFLAGS) $(LDFLAGS) -o $@ $(OBJS)
kernel.bin: kernel.elf
$(OBJCOPY) -O binary $< $@
%.o: %.S
$(CXX) $(CXXFLAGS) -c -o $@ $<
%.o: %.cpp
$(CXX) $(CXXFLAGS) -c -o $@ $<
dump: kernel.elf
$(OBJDUMP) -d $<
run: kernel.elf
qemu-system-arm -M virt -cpu cortex-a15 -nographic -kernel kernel.elf
clean:
rm -f $(OBJS) kernel.elf kernel.bin