編譯環(huán)境
- Xcode 12.2
- Python 2.7.16
- ninja 1.10.1
編譯步驟
第一步:clone swift 源碼
git clone --branch swift-5.2.4-RELEASE https://github/apple/swift.git
swift 根據(jù)編譯時(shí)的官方版本來做碉碉。
https://github.com/apple/swift
第二步:update-checkout
注意:這一步很關(guān)鍵,需要保證網(wǎng)絡(luò)環(huán)境的穩(wěn)定,必要時(shí)需要科學(xué)上網(wǎng)
確保你當(dāng)前是在 swift-source
目錄下鳞骤,然后執(zhí)行如下命令:
./swift/utils/update-checkout --tag swift-5.2.4-RELEASE --clone
這一步非常重要,因?yàn)?code>update-checkout 會(huì) clone
編譯 swift 的相關(guān)的庫,不然后面在編譯 swift 源碼的過程中一定會(huì)失敗是钥。
第三步:編譯
這里我們使用 ninja
,來進(jìn)行編譯缅叠。
請(qǐng)檢查是否已經(jīng)安裝ninja悄泥,并保證版本不要太舊,如果沒有安裝肤粱,請(qǐng)用下面的命令安裝
brew instal ninja
以上確認(rèn)完成之后弹囚,執(zhí)行以下命令進(jìn)行編譯:
./swift/utils/build-script -r --debug-swift-stdlib --lldb
該步驟耗時(shí)過長(zhǎng),請(qǐng)耐心等待
第三步遇到的錯(cuò)誤大概率是環(huán)境的問題狼犯,可以嘗試: ①重裝cmake余寥,②重裝ninja
如果遇到關(guān)于XcodeTools的相關(guān)問題可以嘗試執(zhí)行下面命令:
sudo rm -rf /Library/Developer/CommandLineTools
sudo xcode-select -s /Applications/Xcode.app
執(zhí)行完之后從新編譯领铐。
編譯成功之后再 swift-source/build
下面的 Ninja相關(guān)的文件夾里面會(huì)出現(xiàn)如下四個(gè)文件夾
第四步:使用 VSCode 來調(diào)試 Swift
首先我們需要安裝一個(gè)插件CodeLLDB
緊接著配置 JSON 文件
注意 program 文件路徑要和你編譯的文件路徑相同
${workspaceFolder}/build/Ninja-RelWithDebInfoAssert+stdlib-DebugAssert/swift-macosx-x86_64/bin/swift
配置完JSON之后,Run一下工程后如下:
會(huì)出現(xiàn)一個(gè)端點(diǎn)宋舷,過掉端點(diǎn)之后如下:
此時(shí)源碼編譯的所有裝備工作都完成了绪撵,下面我們生成SIL文件,通過SIL文件來探索Swift的執(zhí)行過程
生成SIL文件
show in finder
到你想要查看的文件夾祝蝠。
如下:
在當(dāng)前文件加下執(zhí)行如下指令:
swiftc -emit-sil main.swift | xcrun swift-demangle >> ./main.sil && code main.sil
音诈。
xcrun swift-demangle
用于還原混淆的代碼
code main.sil
用于打開main.sil文件(這里是自定義的指令)可以用以下方式設(shè)定:
$ open .zshrc
alias code='/Applications/Visual\ Studio\ Code.app/Contents/Resources/app/bin/code'
$ source .zshrc
更多的swiftc 的操作指令,可以使用swiftc -h
指令來查看