summaryrefslogtreecommitdiff
path: root/na
diff options
context:
space:
mode:
authorRichard Qin <richard.qin.x@gmail.com>2026-04-21 23:05:20 +0800
committerRichard Qin <richard.qin.x@gmail.com>2026-04-21 23:05:20 +0800
commitdf1af31b90d904fddc45c6da6da5ee36d905a0ca (patch)
treeed51b2b97da3845c842ad27d7b3b44909e703baf /na
parentde8ee60ecb4396fa0567db666f99c1b8d1114bc7 (diff)
downloadlume-df1af31b90d904fddc45c6da6da5ee36d905a0ca.tar.gz
lume-df1af31b90d904fddc45c6da6da5ee36d905a0ca.tar.xz
feat: Update Makefile and module.mk files to include additional source files and improve build process
Diffstat (limited to 'na')
-rw-r--r--na/Makefile40
-rw-r--r--na/arch/riscv/module.mk1
-rw-r--r--na/drivers/module.mk6
-rw-r--r--na/fdt/module.mk3
-rw-r--r--na/lib/module.mk35
-rw-r--r--na/mm/module.mk4
-rw-r--r--na/test/module.mk10
7 files changed, 93 insertions, 6 deletions
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