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.
335 lines
6.2 KiB
335 lines
6.2 KiB
# Windows Clang 支持测试指南
|
|
|
|
## ✅ 已完成的修改
|
|
|
|
### 1. 代码实现
|
|
|
|
#### CompilerBase.php 修改
|
|
|
|
**文件位置:** `D:\workspace\compiler\src\Php\CompilerBase.php`
|
|
|
|
**主要修改:**
|
|
|
|
1. **detectPlatform() 方法** (第 298-327 行)
|
|
- 添加智能编译器检测
|
|
- 优先级:PHPX_CC 环境变量 > Clang > MSVC
|
|
- 显示当前使用的编译器信息
|
|
|
|
2. **isClangAvailable() 方法** (第 329-370 行)
|
|
- 检测 PATH 中的 clang++
|
|
- 自动搜索 Visual Studio LLVM 路径
|
|
- 支持 VS 2019 和 VS 2022 所有版本
|
|
- 找到后自动添加到 PATH
|
|
|
|
3. **addCompilationOption() 方法** (第 2410-2425 行)
|
|
- 根据编译器类型分发到不同的处理方法
|
|
- 支持 MSVC 和 Clang
|
|
|
|
4. **addWindowsClangCompilationOption() 方法** (第 2543-2647 行)
|
|
- 新增方法,处理 Windows Clang 编译选项
|
|
- 使用 GCC 风格的编译选项(-std, -O, -Wall)
|
|
- 链接时使用 MSVC 链接器选项
|
|
- 完整的 Sanitizer 支持
|
|
|
|
---
|
|
|
|
## 🧪 测试步骤
|
|
|
|
### 前置条件
|
|
|
|
您需要安装以下之一:
|
|
|
|
#### 选项 1:Visual Studio LLVM 组件(推荐)
|
|
|
|
1. 打开 **Visual Studio Installer**
|
|
2. 点击 **修改** 您的 Visual Studio 安装
|
|
3. 切换到 **单个组件** 标签
|
|
4. 搜索并勾选:
|
|
- ✅ **Clang compiler for Windows**
|
|
- ✅ **C++ Clang tools for Windows**
|
|
5. 点击 **修改** 开始安装
|
|
|
|
#### 选项 2:独立 LLVM 安装
|
|
|
|
1. 访问 https://releases.llvm.org/download.html
|
|
2. 下载 **LLVM-{version}-win64.exe**
|
|
3. 运行安装程序
|
|
4. **重要:** 勾选 "Add LLVM to the system PATH"
|
|
|
|
---
|
|
|
|
### 测试 1:检查 Clang 安装
|
|
|
|
运行检查脚本:
|
|
|
|
```cmd
|
|
cd D:\workspace\compiler
|
|
check-clang.bat
|
|
```
|
|
|
|
或使用 PowerShell:
|
|
|
|
```powershell
|
|
cd D:\workspace\compiler
|
|
.\check-clang.ps1
|
|
```
|
|
|
|
**预期输出:**
|
|
|
|
如果 Clang 已安装:
|
|
```
|
|
=== Checking Clang Installation ===
|
|
|
|
1. Checking PATH for clang++:
|
|
Found in PATH
|
|
clang version 17.0.6
|
|
|
|
2. Checking Visual Studio paths:
|
|
Found: VS 2022 Community
|
|
clang version 17.0.6
|
|
|
|
=== Check Complete ===
|
|
```
|
|
|
|
如果未安装:
|
|
```
|
|
Not found in PATH
|
|
Not found in Visual Studio directories
|
|
|
|
To install LLVM for Visual Studio:
|
|
1. Open Visual Studio Installer
|
|
2. Modify your installation
|
|
...
|
|
```
|
|
|
|
---
|
|
|
|
### 测试 2:编译器检测
|
|
|
|
运行 PHP 测试脚本:
|
|
|
|
```cmd
|
|
php test-compiler-detection.php
|
|
```
|
|
|
|
**预期输出:**
|
|
|
|
如果使用 Clang:
|
|
```
|
|
=== Testing Compiler Detection ===
|
|
|
|
Platform Detection:
|
|
isWindows: true
|
|
cppCompiler: clang++
|
|
cxxStd: c++17
|
|
|
|
Clang Detection Test:
|
|
isClangAvailable: true
|
|
|
|
✓ Clang is available and will be used by default
|
|
|
|
=== Test Complete ===
|
|
```
|
|
|
|
如果使用 MSVC:
|
|
```
|
|
Platform Detection:
|
|
isWindows: true
|
|
cppCompiler: cl
|
|
cxxStd: c++17
|
|
|
|
Clang Detection Test:
|
|
isClangAvailable: false
|
|
|
|
✗ Clang not found, will use MSVC
|
|
|
|
=== Test Complete ===
|
|
```
|
|
|
|
---
|
|
|
|
### 测试 3:实际编译测试
|
|
|
|
#### 测试 3a:使用 Clang 编译
|
|
|
|
```cmd
|
|
# 确保 Clang 可用
|
|
php test-compiler-detection.php
|
|
|
|
# 编译测试文件
|
|
php bin/compiler.php test-clang-simple.php
|
|
|
|
# 运行生成的可执行文件
|
|
test-clang-simple.exe
|
|
```
|
|
|
|
**预期输出:**
|
|
```
|
|
Hello from PHPX!
|
|
Testing Clang compiler support...
|
|
PHP Version: 8.x.x
|
|
Sum of [1,2,3,4,5] = 15
|
|
Test completed successfully!
|
|
```
|
|
|
|
---
|
|
|
|
#### 测试 3b:强制使用 MSVC
|
|
|
|
```cmd
|
|
# 设置环境变量强制使用 MSVC
|
|
set PHPX_CC=cl
|
|
|
|
# 编译
|
|
php bin/compiler.php test-clang-simple.php
|
|
|
|
# 运行
|
|
test-clang-simple.exe
|
|
```
|
|
|
|
---
|
|
|
|
#### 测试 3c:强制使用 Clang
|
|
|
|
```cmd
|
|
# 设置环境变量强制使用 Clang
|
|
set PHPX_CC=clang++
|
|
|
|
# 编译
|
|
php bin/compiler.php test-clang-simple.php
|
|
|
|
# 运行
|
|
test-clang-simple.exe
|
|
```
|
|
|
|
---
|
|
|
|
### 测试 4:Sanitizer 测试(仅 Clang)
|
|
|
|
```cmd
|
|
# 使用 AddressSanitizer 编译
|
|
php bin/compiler.php test-clang-simple.php --sanitize=address
|
|
|
|
# 运行(如果有内存错误会报告)
|
|
test-clang-simple.exe
|
|
```
|
|
|
|
---
|
|
|
|
## 📊 验证清单
|
|
|
|
完成后,请确认以下功能:
|
|
|
|
- [ ] Clang 正确安装在系统中
|
|
- [ ] `isClangAvailable()` 能检测到 Clang
|
|
- [ ] 默认情况下优先使用 Clang(如果可用)
|
|
- [ ] 可以通过 `PHPX_CC` 环境变量切换编译器
|
|
- [ ] Clang 编译的程序可以正常运行
|
|
- [ ] MSVC 仍然可以正常工作
|
|
- [ ] Sanitizer 选项在 Clang 下工作
|
|
- [ ] 编译时显示正确的编译器信息
|
|
|
|
---
|
|
|
|
## 🐛 故障排除
|
|
|
|
### 问题 1:Clang 未被检测到
|
|
|
|
**症状:** `isClangAvailable()` 返回 false
|
|
|
|
**解决:**
|
|
1. 确认 Clang 已安装
|
|
2. 检查 PATH 环境变量
|
|
3. 重启命令行窗口
|
|
4. 手动添加 Clang 到 PATH:
|
|
```cmd
|
|
set PATH=C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\Llvm\x64\bin;%PATH%
|
|
```
|
|
|
|
---
|
|
|
|
### 问题 2:编译失败
|
|
|
|
**症状:** 编译时出现错误
|
|
|
|
**检查:**
|
|
1. 确认使用的是正确的编译器
|
|
2. 检查 Visual Studio Developer Command Prompt
|
|
3. 查看详细的错误信息
|
|
|
|
**尝试:**
|
|
```cmd
|
|
# 清除缓存后重新编译
|
|
del /s /q *.o 2>nul
|
|
del /s /q *.obj 2>nul
|
|
php bin/compiler.php test.php
|
|
```
|
|
|
|
---
|
|
|
|
### 问题 3:链接错误
|
|
|
|
**症状:** 编译成功但链接失败
|
|
|
|
**原因:** Clang on Windows 需要 MSVC 的链接器
|
|
|
|
**解决:**
|
|
1. 确保 Visual Studio Build Tools 已安装
|
|
2. 使用 Developer Command Prompt
|
|
3. 检查 Windows SDK 是否安装
|
|
|
|
---
|
|
|
|
## 📝 下一步
|
|
|
|
如果测试成功,您可以:
|
|
|
|
1. ✅ 开始在项目中使用 Clang
|
|
2. ✅ 利用 Clang 的 Sanitizers 进行调试
|
|
3. ✅ 享受更好的错误信息和诊断
|
|
4. ✅ 为跨平台开发做准备
|
|
|
|
---
|
|
|
|
## 🔗 相关文档
|
|
|
|
- [WINDOWS_CLANG_GUIDE.md](./examples/win32-hello/WINDOWS_CLANG_GUIDE.md) - 完整的使用指南
|
|
- [YAML_CONFIG_NAMING_CONVENTION.md](./examples/win32-hello/YAML_CONFIG_NAMING_CONVENTION.md) - YAML 配置规范
|
|
- [CONFIG_PRIORITY_RULES.md](./examples/win32-hello/CONFIG_PRIORITY_RULES.md) - 配置优先级规则
|
|
|
|
---
|
|
|
|
## 💡 提示
|
|
|
|
**快速切换编译器:**
|
|
|
|
```cmd
|
|
# 使用 Clang
|
|
set PHPX_CC=clang++
|
|
php bin/compiler.php app.php
|
|
|
|
# 使用 MSVC
|
|
set PHPX_CC=cl
|
|
php bin/compiler.php app.php
|
|
|
|
# 自动选择(默认)
|
|
set PHPX_CC=
|
|
php bin/compiler.php app.php
|
|
```
|
|
|
|
**永久设置(系统环境变量):**
|
|
|
|
```cmd
|
|
# 设置为 Clang
|
|
setx PHPX_CC "clang++"
|
|
|
|
# 设置为 MSVC
|
|
setx PHPX_CC "cl"
|
|
|
|
# 删除设置(自动选择)
|
|
setx PHPX_CC ""
|
|
```
|
|
|
|
---
|
|
|
|
祝测试顺利!如有问题,请查看详细文档或报告 bug。
|
|
|