[build]: 新更编译规则 添加编译文件

This commit is contained in:
2025-08-21 22:52:57 +08:00
parent 429a97f06b
commit 1ef2a551a0
6 changed files with 106 additions and 0 deletions

5
arch/aarch64/meson.build Normal file
View File

@@ -0,0 +1,5 @@
#aarch64
# 加入架构相关汇编文件
libk_sources += files('asm_src/memory.S')
libk_sources += files('asm_src/string.S')

0
arch/riscv64/meson.build Normal file
View File

0
arch/x86_64/meson.build Normal file
View File

7
crt/meson.build Normal file
View File

@@ -0,0 +1,7 @@
# crt 实现
crt0_sources += files('crt0.c')
arch = get_option('arch')
libk_sources += files(arch + '/libk_init.S')
libk_sources += files(arch + '/libk_fini.S')

89
meson.build Normal file
View File

@@ -0,0 +1,89 @@
# libk 轻量级特化 libc 库
# 架构识别
arch = get_option('arch')
arch_dir = 'arch/' + arch
# libk的头文件
# 创建包含多个目录的对象
libk_inc = include_directories(
'arch', # 架构头文件路径
'src/include', # 源代码实现的头文件
arch_dir, # 架构特定头文件路径
)
# C 源文件变量声明
libk_sources = []
crt0_sources = []
# 引用编译文件添加
subdir('crt') # 启动入口实现
subdir('src') # C函数通用实现
subdir(arch_dir) # 汇编特化实现
# 生成静态库
libk = static_library(
'k-' + arch,
sources: libk_sources,
include_directories: libk_inc,
pic: false, # 内核必须固定地址
install: false, # 不安装到系统目录
override_options: [
'c_std=gnu11', # 明确C标准
],
# 编译器专属参数
c_args : [
'-nostdinc', # 禁止搜索标准头文件路径
'-ffreestanding', # 声明独立环境(无操作系统依赖)
'-fno-builtin', # 禁用GCC内置函数如memcpy
],
# 链接器专属参数
link_args : [
'-nostdlib', # 禁止链接标准库libc等
],
)
# 依赖声明
libk_dep = declare_dependency(
link_with: libk,
include_directories: libk_inc,
compile_args: [
'-DKERNEL_MODE', # 内核模式宏定义
]
)
# 生成 crt0 对象文件
cc = meson.get_compiler('c')
# 对象文件名
crt0_name = 'crt0-' + arch + '.o'
# 确保只有一个源文件crt0 通常只有一个入口文件)
if crt0_sources.length() != 1
error('crt0 must have exactly one source file')
endif
# crt0 文件
crt0_source = crt0_sources[0]
# 手动编译对象文件
crt0_obj = custom_target(
crt0_name,
input: crt0_source,
output: crt0_name,
command: [
cc.cmd_array(),
'-c', '@INPUT@',
'-o', '@OUTPUT@',
'-std=gnu11',
'-nostdinc',
'-ffreestanding',
'-fno-builtin',
'-nostdlib',
# 添加头文件搜索路径
'-I' + meson.current_source_dir() / 'arch',
'-I' + meson.current_source_dir() / 'src/include',
'-I' + meson.current_source_dir() / arch_dir,
],
build_by_default: true,
)

5
src/meson.build Normal file
View File

@@ -0,0 +1,5 @@
# 通用解决方案 弱定义
libk_sources += files('memory.c')
libk_sources += files('string.c')
libk_sources += files('libk_start_main.c')