Swift进阶 01:Swift源码编译
2021-01-20 本文已影响0人
源本平凡
编译环境
- macOS Big Sur 11.1
- Xcode 12.2
- Python 2.x
- brew install cmake ninja
- VSCode
编译步骤
准备工作
- 新建一个文件夹,命名为
swift-source
- 由于拉取资源需要访问外网,所以需要梯子(没有也行,可能慢点)
第一步:clone swift 源码
这里编译的是swift-5.3.1-Release
,可以自行在官网找到对应的分支,需要注意
的是:swift源码版本需要与Xcode
版本匹配(官方编译文档有说明)。
git clone --branch swift-5.3.1-RELEASE https://github.com/apple/swift.git

第二步:update-checkout
这步主要是clone
编译swift相关的库
,否则在编译时一定会失败,这步很关键!(编译过程会很长,建议休息时间编译)
./swift/utils/update-checkout --tag swift-5.3.1-RELEASE --clone
注意:文件的
路径避免出现中文
,中文有很大的概率会报错

第三步:采用ninja编译
编译过程中既可以使用ninja
,也可以使用Xcode
进行编译。但是Xcode编译后的支持性不是特别好
,所以这里就使用了ninja
来作为编译工具。
./swift/utils/build-script -r --debug-swift-stdlib --lldb
编译成功
编译成功时包的大小如下入所示

第四步:使用VSCode调试swift
- 首先,在VSCode中安装
codelldb
插件

- 添加配置文件
launch.json
,并修改

需要注意的是program
的路径需要与你编译的文件路径一致

{
"version": "0.2.0",
"configurations": [
{
"type": "lldb",
"request": "launch",
"name": "Debug",
"program": "${workspaceFolder}/build/Ninja-RelWithDebInfoAssert+stdlib-DebugAssert/swift-macosx-x86_64/bin/swift",
"args": [],
"cwd": "${workspaceFolder}"
}
]
}
如果找不到
launch.json
文件,把swift-source
整个文件夹拖进VSCode
中,就会有launch.json
文件了

- 点击
Debug
运行,断住

然后过掉断点

看到以下结果就表示运行成功了

- 然后切换至终端,我们可以开始正常的源码调试了
- 在终端输入以下代码(也可以从swift文件中直接拷贝)

- 源码中搜索
swift_allocObject
,加上断点

- 继续在终端输入
var sun = Sunrise()
,回车

这样,我们就可以愉快的调试swift源码了。