build(build): 拆分子目录 CMakeLists 并规范目标命名
This commit is contained in:
@@ -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
8
src/ast/CMakeLists.txt
Normal file
@@ -0,0 +1,8 @@
|
||||
add_library(ast STATIC
|
||||
AstNodes.cpp
|
||||
AstPrinter.cpp
|
||||
)
|
||||
|
||||
target_link_libraries(ast PUBLIC
|
||||
build_options
|
||||
)
|
||||
18
src/frontend/CMakeLists.txt
Normal file
18
src/frontend/CMakeLists.txt
Normal 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
26
src/ir/CMakeLists.txt
Normal 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
|
||||
)
|
||||
9
src/ir/analysis/CMakeLists.txt
Normal file
9
src/ir/analysis/CMakeLists.txt
Normal file
@@ -0,0 +1,9 @@
|
||||
add_library(ir_analysis STATIC
|
||||
DominatorTree.cpp
|
||||
LoopInfo.cpp
|
||||
)
|
||||
|
||||
target_link_libraries(ir_analysis PUBLIC
|
||||
build_options
|
||||
ir_core
|
||||
)
|
||||
13
src/ir/passes/CMakeLists.txt
Normal file
13
src/ir/passes/CMakeLists.txt
Normal 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
|
||||
)
|
||||
@@ -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
24
src/mir/CMakeLists.txt
Normal 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
|
||||
)
|
||||
9
src/mir/passes/CMakeLists.txt
Normal file
9
src/mir/passes/CMakeLists.txt
Normal 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
10
src/sem/CMakeLists.txt
Normal 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
8
src/utils/CMakeLists.txt
Normal file
@@ -0,0 +1,8 @@
|
||||
add_library(utils STATIC
|
||||
Log.cpp
|
||||
CLI.cpp
|
||||
)
|
||||
|
||||
target_link_libraries(utils PUBLIC
|
||||
build_options
|
||||
)
|
||||
Reference in New Issue
Block a user