TypePHP 编译器
https://swoole.com/aot/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
2.0 KiB
2.0 KiB
编译器后端
TypePHP 不直接调 g++/cl,而是抽象出 平台(Platform)+ 编译器后端(Backend) 两层,由工厂在启动时自动探测。这样同一份生成代码能在 GCC / Clang / MSVC 下编译。
Sources: src/Translator.php · src/Backend/
抽象结构
| 类 | 角色 |
|---|---|
PlatformFactory |
按 OS 创建 Windows / Linux / macOS 平台对象 |
CompilerFactory |
detectCompilerName() / createByName() / autoDetect() 选择后端 |
CompilerBackend(接口) |
定义编译/链接命令抽象 |
GccLikeBackend |
GCC / Clang 共用逻辑 |
Gcc / Clang |
具体后端 |
Msvc |
MSVC(Windows)后端 |
detectPlatform() 先建平台,再探测编译器名,最后 CompilerFactory::createByName() 生成后端;若失败则告警并回退到旧逻辑(initializeNewArchitecture())。
Sources: src/Translator.php · src/Translator.php
命令生成
后端只负责「给定源/目标/选项 → 返回命令字符串」。真实的进程执行在 构建流水线 的 NativeBuilder 中。例如:
compileCommand()/linkCommand()产出可复现的命令行;- 命令行本身被写进缓存键,确保编译参数变化能触发重编译。
Sources: src/Translator.php · src/Translator.php
预编译头
后端是否支持 PCH 由 supportsPrecompiledHeaders() 决定;支持的会在构建期预编译 phpx.h 等全局头,显著加速后续编译单元。
Sources: src/Translator.php · src/Build/PrecompiledHeaderManager.php