- 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
57 lines
1 KiB
Makefile
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
|