編譯環(huán)境
- 電腦系統(tǒng):macOS Catalina 10.15.7
- Xcode:Xcode 12.2
- Python :Python 2.x
- cmake: brew install cmake
- ninja:brew install ninja
cmake
和ninja
可通過 brew list
查看是否安裝
編譯步驟
開始前先準備一下:
- 新建一個名為
swift-source
的文件夾 - 因為要clone源碼顽悼,建議搭建小梯子晶伦。
第一步:clone swift
源碼
git clone --branch swift-5.3.1-RELEASE https://github.com/apple/swift.git
這里編譯的是swift-5.3.1-Release
∩可以自行在官網(wǎng)找到對應(yīng)的分支,需要注意的是:swift源碼版本需要與Xcode
版本匹配(官方編譯文檔有說明)曙咽。????目前最新版本是5.3.1闲询。
clone
完成文件大概700M怖辆。
第二步:update-checkou
./swift/utils/update-checkout --tag swift-5.3.1-RELEASE --clone
確保是在當(dāng)前的swift-source
目錄下,然后執(zhí)行上面命令裕菠。
這一步很重要咬清,update-checkout
會clone
編譯 swift
相關(guān)的庫,不然編譯一定會失敗。(時間有點長旧烧,可以喝杯??)
這里編譯需要注意一點:文件的路徑盡量避免出現(xiàn)中文
影钉,中文有很大的概率會報錯。
安裝完如下:
完成后文件大概有3G掘剪。
第三步:編譯
編譯過程可以使用ninja
平委,也可以使用Xcode
,但是Xcode編譯之后的支持性不是太好夺谁,所以這里采用ninja
編譯廉赔。
- 利用 swift 源碼中的腳本編譯:
./swift/utils/build-script -x -R --debug-swift
- 或者執(zhí)行以下腳本查閱命令:
./swift/utils/build-script -r --debug-swift-stdlib --lldb
編譯過程可能會報錯:
看報錯信息應(yīng)該是和
CommandLine
有關(guān)帝簇,直接刪除Developer
下的CommandLineTools
仗颈,使用Xcode中的就好过咬。
sudo rm -rf /Library/Developer/CommandLineTools
sudo xcode-select -s /Applications/Xcode.app
如果的你的目錄有可執(zhí)行文件swift就編譯完成了永品。
編譯完文件大概有50G镇草。
第四步:使用VSCode調(diào)試Swift
- 首先下載
VSCode
并安裝右蹦。 - 使用
VSCode
來安裝一個CodeLLDB
插件摆尝。
-
將swift-source導(dǎo)入
VSCode
亭病,創(chuàng)建JSON文件笆环,選擇LLDB
模式
-
添加配置文件
launch.json
攒至,并修改
{
"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}"
}
]
}
注意的是program的路徑需要與你編譯的文件路徑一致
-
run
起來之后
-
過濾掉斷點, 查看終端
這個時候就證明正常跑起來了
這個時候我們可以寫swift代碼,進行調(diào)試
可以看到本地變量沒有任何顯示(原因是CodeLLDB這個插件的作者沒有支持swift語言)躁劣,當(dāng)然并不妨礙調(diào)試源代碼迫吐。
設(shè)置本地變量顯示支持swift
準備工作:做下面步驟的時候最好先備份,防止誤操作账忘。
-
找到
CodeLLDB
的安裝目錄
-
然后找到編譯過后的
lldb
文件目錄志膀,把目錄里面的文件全部拷貝到上面的目錄中(lldbcode本質(zhì)上也是使用bin目錄下的lldb來調(diào)試我們的源碼)
這一步的操作是要讓codelldb使用我們編譯好的swift中的lldb來調(diào)試代碼。先找到VSCode插件的安裝目錄鳖擒,一般情況下在用戶目錄下:
-
將
swift
編譯后lldb
文件復(fù)制到vscode lldb/lib
目錄下溉浙,刪除本來就存在的liblldb.dylib
文件,并將lldb文件重命名為liblldb.dylib
蒋荚。
lldb
會直接用到自身lib
目錄下liblldb.dylib
動態(tài)庫來調(diào)試戳稽,liblldb.dylib
本身包含了LLDB.framework文件。這里替換改名的目的是為了讓vscode
去找bin
中我們編譯之后的LLDB.framework
期升。(當(dāng)然如果替換后也不顯示惊奇,可以拷貝別人相同版本的LLDB.framework
到對應(yīng)目錄使用)