From df1af31b90d904fddc45c6da6da5ee36d905a0ca Mon Sep 17 00:00:00 2001 From: Richard Qin Date: Tue, 21 Apr 2026 23:05:20 +0800 Subject: feat: Update Makefile and module.mk files to include additional source files and improve build process --- na/Makefile | 40 ++++++++++++++++++++++++++++++++++------ na/arch/riscv/module.mk | 1 + na/drivers/module.mk | 6 ++++++ na/fdt/module.mk | 3 +++ na/lib/module.mk | 35 +++++++++++++++++++++++++++++++++++ na/mm/module.mk | 4 ++++ na/test/module.mk | 10 ++++++++++ 7 files changed, 93 insertions(+), 6 deletions(-) create mode 100644 na/drivers/module.mk create mode 100644 na/fdt/module.mk create mode 100644 na/mm/module.mk create mode 100644 na/test/module.mk (limited to 'na') diff --git a/na/Makefile b/na/Makefile index 3fc72b1..6b5e84c 100644 --- a/na/Makefile +++ b/na/Makefile @@ -46,29 +46,37 @@ LINKER_SCRIPT := linker.ld # Common flags (base, before module includes) WARNINGS := -Wall -Wextra -Wno-unused-parameter -INCLUDES := -Iinclude +INCLUDES := -Iinclude -I. # ============================================================ # Source Collection (Non-Recursive Module Fragments) # Module .mk files may append to SRCS_CC, SRCS_S, INCLUDES # ============================================================ SRCS_CC := +SRCS_C := SRCS_S := +SRCS_s := include arch/$(ARCH)/module.mk include kernel/module.mk -# include mm/module.mk # Phase 1 +include mm/module.mk # include fs/module.mk # Phase 3 -# include drivers/module.mk # As needed +include drivers/module.mk +include fdt/module.mk include lib/module.mk +include test/module.mk # Compiler flags (defined AFTER includes so INCLUDES is complete) -CFLAGS := $(WARNINGS) -O2 -g \ +CFLAGS := $(WARNINGS) -O2 -g -DDEBUG \ -ffreestanding -nostdlib \ -mcmodel=medany \ -MMD -MP \ $(INCLUDES) +# C flags for musl libc sources: add libc-shim headers first +CFLAGS_LIBC := $(CFLAGS) -Iinclude/libc-shim \ + -Wno-parentheses -Wno-sign-compare + CXXFLAGS := $(CFLAGS) \ -std=c++17 \ -fno-exceptions -fno-rtti -fno-use-cxa-atexit \ @@ -82,7 +90,9 @@ LDFLAGS := -nostdlib -static # Object File Computation # ============================================================ OBJS := $(patsubst %.cc,$(BUILD)/%.o,$(SRCS_CC)) \ - $(patsubst %.S,$(BUILD)/%.o,$(SRCS_S)) + $(patsubst %.c,$(BUILD)/%.o,$(SRCS_C)) \ + $(patsubst %.S,$(BUILD)/%.o,$(SRCS_S)) \ + $(patsubst %.s,$(BUILD)/%.o,$(SRCS_s)) DEPS := $(OBJS:.o=.d) @@ -111,12 +121,24 @@ $(BUILD)/%.o: %.cc @mkdir -p $(dir $@) @$(CXX) $(CXXFLAGS) -c $< -o $@ -# Assemble RISC-V assembly +# Compile C sources (musl libc) +$(BUILD)/%.o: %.c + @echo " CC $<" + @mkdir -p $(dir $@) + @$(CC) $(CFLAGS_LIBC) -c $< -o $@ + +# Assemble (preprocessed .S) $(BUILD)/%.o: %.S @echo " AS $<" @mkdir -p $(dir $@) @$(CC) $(ASFLAGS) -c $< -o $@ +# Assemble (raw .s, no preprocessing) +$(BUILD)/%.o: %.s + @echo " AS $<" + @mkdir -p $(dir $@) + @$(CC) $(ASFLAGS) -c $< -o $@ + # Auto-dependency tracking -include $(DEPS) @@ -150,6 +172,12 @@ fmt: @echo " FMT Formatting source files..." @find . -name '*.cc' -o -name '*.h' | xargs clang-format -i 2>/dev/null || true +lint: + @echo " LINT Generating compile_commands.json via bear..." + @bear -- $(MAKE) all + @echo " LINT Running clang-tidy on C++ sources..." + @clang-tidy -p . $(SRCS_CC) || true + # Print build info (for debugging Makefile issues) info: @echo "TOOLCHAIN_PREFIX = $(TOOLCHAIN_PREFIX)" diff --git a/na/arch/riscv/module.mk b/na/arch/riscv/module.mk index 85ed5dd..154ae77 100644 --- a/na/arch/riscv/module.mk +++ b/na/arch/riscv/module.mk @@ -1,4 +1,5 @@ # arch/riscv/module.mk +SRCS_CC += arch/riscv/mm/pmap.cc SRCS_S += arch/riscv/boot/entry.S SRCS_S += arch/riscv/trap/swtch.S SRCS_S += arch/riscv/trap/trap_vector.S diff --git a/na/drivers/module.mk b/na/drivers/module.mk new file mode 100644 index 0000000..eba8130 --- /dev/null +++ b/na/drivers/module.mk @@ -0,0 +1,6 @@ +# SPDX-License-Identifier: GPL-2.0-or-later +# Copyright (C) 2026 Richard Qin +# +# Drivers module + +SRCS_CC += drivers/uart.cc drivers/plic.cc diff --git a/na/fdt/module.mk b/na/fdt/module.mk new file mode 100644 index 0000000..3e490ca --- /dev/null +++ b/na/fdt/module.mk @@ -0,0 +1,3 @@ +# fdt/module.mk +SRCS_CC += fdt/fdt.cc +SRCS_CC += fdt/device_node.cc diff --git a/na/lib/module.mk b/na/lib/module.mk index 46c46d4..08b29c2 100644 --- a/na/lib/module.mk +++ b/na/lib/module.mk @@ -1,2 +1,37 @@ # lib/module.mk SRCS_CC += lib/panic.cc +SRCS_CC += lib/cxx_abi.cc +SRCS_CC += lib/rbtree.cc + +# ============================================================ +# musl string library (cross-platform with arch asm overrides) +# ============================================================ + +# Map LumeOS ARCH to musl string arch directory +# riscv has no musl asm optimizations → pure C fallback +MUSL_STRING_ARCH_riscv := +MUSL_STRING_ARCH_x86_64 := x86_64 +MUSL_STRING_ARCH_i386 := i386 +MUSL_STRING_ARCH_aarch64:= aarch64 +MUSL_STRING_ARCH_arm := arm + +MUSL_STRING_ARCH := $(MUSL_STRING_ARCH_$(ARCH)) + +# Collect arch-specific asm sources (if any for this arch) +MUSL_ASM_SRCS := +ifneq ($(MUSL_STRING_ARCH),) + MUSL_ASM_SRCS += $(wildcard lib/string/$(MUSL_STRING_ARCH)/*.S) \ + $(wildcard lib/string/$(MUSL_STRING_ARCH)/*.s) +endif + +# Derive which C files are overridden by asm (strip path+ext to get base name) +MUSL_ASM_BASENAMES := $(sort $(basename $(notdir $(MUSL_ASM_SRCS)))) + +# All C sources, then filter out those with asm replacements +MUSL_ALL_C := $(wildcard lib/string/*.c) +MUSL_EXCLUDED_C := $(foreach name,$(MUSL_ASM_BASENAMES),lib/string/$(name).c) +MUSL_C_SRCS := $(filter-out $(MUSL_EXCLUDED_C),$(MUSL_ALL_C)) + +SRCS_C += $(MUSL_C_SRCS) +SRCS_S += $(filter %.S,$(MUSL_ASM_SRCS)) +SRCS_s += $(filter %.s,$(MUSL_ASM_SRCS)) diff --git a/na/mm/module.mk b/na/mm/module.mk new file mode 100644 index 0000000..8e472cd --- /dev/null +++ b/na/mm/module.mk @@ -0,0 +1,4 @@ +SRCS_CC += mm/pmm.cc +SRCS_CC += mm/slab.cc +SRCS_CC += mm/vmm.cc +SRCS_CC += mm/vma.cc diff --git a/na/test/module.mk b/na/test/module.mk new file mode 100644 index 0000000..6ccc2ab --- /dev/null +++ b/na/test/module.mk @@ -0,0 +1,10 @@ +# test/module.mk +SRCS_CC += test/selftest.cc +SRCS_CC += test/test_pmm.cc +SRCS_CC += test/test_slab.cc +SRCS_CC += test/test_spinlock.cc +SRCS_CC += test/test_rbtree.cc +SRCS_CC += test/test_vmm.cc +SRCS_CC += test/test_vma.cc +SRCS_CC += test/test_atomic.cc +SRCS_CC += test/test_fdt.cc -- cgit v1.2.3