Swift底层源码编译步骤
准备工作
-
HomeBrew(软件包管理器)
如果被墙,请查看:
国内安装HomeBrew教程 -
预留60G空间(编译后灰常占用空间)
-
Python2.X (使用HomeBrew安装最新即可)
-
Xcode 12.2
-
安装cmake(推荐使用brew cask install安装)
- 推荐使用“brew cask install homebrew/cask/cmake”安装
- 直接使用brew install camke会报警告
[图片上传失败...(image-8ddd3f-1607407538583)] - 为了保险起见,我用brew install cmake也执行了一遍
-
安装ninja(它用来编译Swift,Xcode会出奇怪的问题)
- 使用“brew ninja”安装
创建母文件夹
mkdir swift-source
cd swift-source
第一步 clone swift 源码
git clone --branch swift-5.3.1-RELEASE https://github.com/apple/swift.git
这里推荐使用最新的分支以对应新版的Xcode。别的分支我也下载过,update-checkout会出各种问题
第二步 update-checkout
执行此指令确保在swift-source目录下(重点)
./swift/utils/update-checkout --tag swift-5.3.1-RELEASE --clone
这一步会clone 编译Swift相关的库
第三步 编译(推荐使用ninja直接在终端编译)(编译了1小时)
在swift-source目录下执行以下指令:
./swift/utils/build-script -r --debug-swift-stdlib --lldb
编译完成后:如果的你的目录有可执行文件swift就大功告成了
image
第四步 使用VSCode 调试 Swift
-
在VSCode我们需要安装CodeLLDB
安装CodeLLDB -
将swift-source导入vscode,创建JSON文件,选择LLDB模式
创建JSON
选择LLDB -
编辑JSON文件
编辑JSON
*run起来,跳过断点,选择TERMINAL即可编写Swift代码
跳过断点
编写swift
最后说说我再编译过程中遇到的坑以及解决方案吧
-
在编译过程中报了一堆error:
报错截图
从网查了好多从一篇和swift无关的文章中找到了解决方案,大致意思
就是和#include的检索顺序有关系。首先可以通过命令找到自己系统的#include的顺序
而能找到math.h的第一个路径,则是/usr/local/include/math.h这个文件,这和预期是不一致的,预期要使用的math.h是其同目录的math.h。因此,我们可以对原来的cmath代码进行调整,将<math.h>改成"math.h"即可。
具体步骤:
修改“/Library/Developer/CommandLineTools/usr/include/c++/v1/cmath”中的#include <math.h>为#include "math.h"。
截图所示:
image
用IDE打开:
image
另一种解决方案
该信息的报错应该是和CommandLineTools
有关,那就直接删除
1.在终端中执行以下代码:
sudo rm -rf /Library/Developer/CommandLineTools
sudo xcode-select -s /Applications/Xcode.app
2.从新执行编译即可
./swift/utils/build-script -r --debug-swift-stdlib --lldb
使用VSCode无法展示本地变量的问题
-w11731.将swift-source下编译好的build目录中对应路径bin文件全部拷贝
-w827
2.将swift源码中的文件lldb 赋值到 vscode下的lib文件 覆盖掉原来的liblldb.dylib,完成替换
3.退出vscode,从新打开并debug,即可看到本地变量。
我们看看效果:
-w845
这就是Swift源码完整的编译流程,有问题可以给我留言,探索过程是蛮有意思的。
网友评论