背景
我们每天都在跟swift打交道,对oc的底层原理我们可能很熟悉,但是对于swift可能就不自信了,这里我们先编译好swift源码拉开后续原理探索之路...
目标
- 成功编译源码
- 可以通过源码调试工程
环境
Apple建议:
本篇文档环境:
- os 13.1
- xcode 14.2
- swift 5.7.2
- cmake 3.26.4
- ninja 1.11.1
操作步骤
第1步: 拉取代码
最好和本地版本一致,执行如下指令获取swift版本
xcrun swift -version
第2步:拉取swift的依赖
进入swift源码目录下,执行如下命令:
./utils/update-checkout --tag swift-x.x.x-RELEASE --clone
注意:[x.x.x]需要下载的版本一致
第3步:编译
执行如下指令
./utils/build-script --xcode --debug --skip-build-benchmarks --swift-darwin-supported-archs "\$(uname -m)" --sccache --skip-ios --skip-tvos --skip-watchos --bootstrapping=off
看到这样算是成功了,我的编译了近4个多小时😭
问题记录:
1.问题1
error: using unsupported Xcode version:
error: using unsupported Xcode version: Xcode 13.1 Build version 13A1030d Install one of: 12.3 (12C33) 12.4 (12D4e) 12.5 (12E262) 13.0 beta (13A5154h) 13.0 beta 4 (13A5201i) Or set 'SKIP\_XCODE\_VERSION\_CHECK=1' in the environment
执行
export SKIP\_XCODE\_VERSION\_CHECK=1
- 问题2
The following build commands failed: Ld /Users/gegaozhao/Desktop/person/Person-Project/swift/swift\_build/build/Xcode-RelWithDebInfoAssert+stdlib-
DebugAssert/swift-macosx-x86\_64/bootstrapping1/RelWithDebInfo/bin/swift-frontend normal (in target 'swift-frontend-bootstrapping1' from project 'Swift')
(1 failure) ERROR: command terminated with a non-zero exit status 65, aborting
这个问题是我用如下指令编译的
utils/build-script --bootstrapping1=off \
--release-debuginfo --debug-swift-stdlib \
--xcode --skip-ios --skip-watchos --skip-tvos \
--skip-build-benchmarks \
--swift-darwin-supported-archs="\$(uname -m)"
forums.swift.org/t/building-… 这个帖子找到答案,找到上面的编译指令解决,主要是添加了 --bootstrapping=off
注意:这里需要把原来的swift编译信息全部删除下,我的第一次没有成功就是因为存在之前旧的编译数据,上面的帖子也提示要注意下
推荐swift社区:forums.swift.org/t/building-… swift编译问题基本都可以解决
编译demo验证
第一步:打开编译好的swift源码工程
第二步:第一次打开会提示对scheme的管理方式,因为存在很多scheme所以建议手动管理
第三步:进入会提示新建scheme点击close
第四步:新建我们需要的Scheme
名字随便,这里我的名字是SwiftSourceCode
第五步:依赖 ALL_BUILD(self)
第六步:添加测试代码
main.swift
Test.swift
第七步:运行
需要等一会...成功后如下