build(build): 拆分子目录 CMakeLists 并规范目标命名

This commit is contained in:
Lane0218
2025-12-27 15:10:35 +08:00
parent 35da726b00
commit 6de56f107b
13 changed files with 276 additions and 14 deletions

View File

@@ -1,4 +1,23 @@
# src/ 子目录构建脚本:
# - 收集并编译各子模块源文件frontend/ast/sem/irgen/ir/mir/utils
# - 生成库或目标对象并链接到最终可执行文件
# src/ 子目录构建脚本:各子目录独立维护 CMakeLists.txt并在此聚合链接
add_subdirectory(utils)
add_subdirectory(ast)
add_subdirectory(sem)
add_subdirectory(ir)
add_subdirectory(frontend)
add_subdirectory(irgen)
add_subdirectory(mir)
# 当前仓库仍是“骨架阶段”,`src/main.cpp` 暂无可链接的 main。
# 为了让默认 `cmake --build` 能成功(先把各模块库编译通过),将可执行文件从 ALL 中排除;
# 需要构建可执行文件时可显式执行cmake --build <build_dir> --target compiler
add_executable(compiler EXCLUDE_FROM_ALL
main.cpp
)
target_link_libraries(compiler PRIVATE
frontend
sem
irgen
mir
utils
)

8
src/ast/CMakeLists.txt Normal file
View File

@@ -0,0 +1,8 @@
add_library(ast STATIC
AstNodes.cpp
AstPrinter.cpp
)
target_link_libraries(ast PUBLIC
build_options
)

View File

@@ -0,0 +1,18 @@
add_library(frontend STATIC
AntlrDriver.cpp
AstBuilder.cpp
)
target_link_libraries(frontend PUBLIC
build_options
ast
"${ANTLR4_RUNTIME_TARGET}"
)
# 自动纳入构建目录中的 ANTLR 生成源码(若存在)
file(GLOB ANTLR4_GENERATED_SOURCES CONFIGURE_DEPENDS
"${ANTLR4_GENERATED_DIR}/*.cpp"
)
if(ANTLR4_GENERATED_SOURCES)
target_sources(frontend PRIVATE ${ANTLR4_GENERATED_SOURCES})
endif()

26
src/ir/CMakeLists.txt Normal file
View File

@@ -0,0 +1,26 @@
add_library(ir_core STATIC
Context.cpp
Module.cpp
Function.cpp
BasicBlock.cpp
Type.cpp
Value.cpp
Instruction.cpp
IRBuilder.cpp
IRPrinter.cpp
)
target_link_libraries(ir_core PUBLIC
build_options
)
add_subdirectory(analysis)
add_subdirectory(passes)
# 统一对外的 IR 依赖入口
add_library(ir INTERFACE)
target_link_libraries(ir INTERFACE
ir_core
ir_analysis
ir_passes
)

View File

@@ -0,0 +1,9 @@
add_library(ir_analysis STATIC
DominatorTree.cpp
LoopInfo.cpp
)
target_link_libraries(ir_analysis PUBLIC
build_options
ir_core
)

View File

@@ -0,0 +1,13 @@
add_library(ir_passes STATIC
PassManager.cpp
Mem2Reg.cpp
ConstFold.cpp
DCE.cpp
CFGSimplify.cpp
)
target_link_libraries(ir_passes PUBLIC
build_options
ir_core
ir_analysis
)

View File

@@ -1,4 +1,14 @@
# src/irgen/ 子模块构建脚本:
# - 编译 IR 生成相关源文件Driver/Func/Stmt/Exp/Decl
# - 作为 src/ 的子目标被链接到最终可执行文件(具体组织方式按工程实现选择)
add_library(irgen STATIC
IRGenDriver.cpp
IRGenFunc.cpp
IRGenStmt.cpp
IRGenExp.cpp
IRGenDecl.cpp
)
target_link_libraries(irgen PUBLIC
build_options
ast
sem
ir
)

24
src/mir/CMakeLists.txt Normal file
View File

@@ -0,0 +1,24 @@
add_library(mir_core STATIC
MIRContext.cpp
MIRFunction.cpp
MIRBasicBlock.cpp
MIRInstr.cpp
Register.cpp
Lowering.cpp
RegAlloc.cpp
FrameLowering.cpp
AsmPrinter.cpp
)
target_link_libraries(mir_core PUBLIC
build_options
ir
)
add_subdirectory(passes)
add_library(mir INTERFACE)
target_link_libraries(mir INTERFACE
mir_core
mir_passes
)

View File

@@ -0,0 +1,9 @@
add_library(mir_passes STATIC
PassManager.cpp
Peephole.cpp
)
target_link_libraries(mir_passes PUBLIC
build_options
mir_core
)

10
src/sem/CMakeLists.txt Normal file
View File

@@ -0,0 +1,10 @@
add_library(sem STATIC
Sema.cpp
SymbolTable.cpp
ConstEval.cpp
)
target_link_libraries(sem PUBLIC
build_options
ast
)

8
src/utils/CMakeLists.txt Normal file
View File

@@ -0,0 +1,8 @@
add_library(utils STATIC
Log.cpp
CLI.cpp
)
target_link_libraries(utils PUBLIC
build_options
)