Swift進(jìn)階(一)--- 源碼編譯

編譯環(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è)文件夾

image.png

第四步:使用 VSCode 來調(diào)試 Swift

首先我們需要安裝一個(gè)插件CodeLLDB

image_0.png

緊接著配置 JSON 文件
image_1.png

注意 program 文件路徑要和你編譯的文件路徑相同
${workspaceFolder}/build/Ninja-RelWithDebInfoAssert+stdlib-DebugAssert/swift-macosx-x86_64/bin/swift

配置完JSON之后,Run一下工程后如下:


image_2.png

會(huì)出現(xiàn)一個(gè)端點(diǎn)宋舷,過掉端點(diǎn)之后如下:


image_3.png

此時(shí)源碼編譯的所有裝備工作都完成了绪撵,下面我們生成SIL文件,通過SIL文件來探索Swift的執(zhí)行過程

生成SIL文件

show in finder 到你想要查看的文件夾祝蝠。
如下:

image_4.png

在當(dāng)前文件加下執(zhí)行如下指令:
swiftc -emit-sil main.swift | xcrun swift-demangle >> ./main.sil && code main.sil音诈。

image_5.png

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指令來查看

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末绎狭,一起剝皮案震驚了整個(gè)濱河市细溅,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌儡嘶,老刑警劉巖喇聊,帶你破解...
    沈念sama閱讀 211,348評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異蹦狂,居然都是意外死亡誓篱,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,122評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門凯楔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來窜骄,“玉大人,你說我怎么就攤上這事摆屯×诙簦” “怎么了?”我有些...
    開封第一講書人閱讀 156,936評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵虐骑,是天一觀的道長(zhǎng)准验。 經(jīng)常有香客問我,道長(zhǎng)富弦,這世上最難降的妖魔是什么沟娱? 我笑而不...
    開封第一講書人閱讀 56,427評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮腕柜,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘矫废。我一直安慰自己盏缤,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,467評(píng)論 6 385
  • 文/花漫 我一把揭開白布蓖扑。 她就那樣靜靜地躺著唉铜,像睡著了一般。 火紅的嫁衣襯著肌膚如雪律杠。 梳的紋絲不亂的頭發(fā)上潭流,一...
    開封第一講書人閱讀 49,785評(píng)論 1 290
  • 那天竞惋,我揣著相機(jī)與錄音,去河邊找鬼灰嫉。 笑死拆宛,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的讼撒。 我是一名探鬼主播浑厚,決...
    沈念sama閱讀 38,931評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼根盒!你這毒婦竟也來了钳幅?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,696評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤炎滞,失蹤者是張志新(化名)和其女友劉穎敢艰,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體册赛,經(jīng)...
    沈念sama閱讀 44,141評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡盖矫,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,483評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了击奶。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片辈双。...
    茶點(diǎn)故事閱讀 38,625評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖柜砾,靈堂內(nèi)的尸體忽然破棺而出湃望,到底是詐尸還是另有隱情,我是刑警寧澤痰驱,帶...
    沈念sama閱讀 34,291評(píng)論 4 329
  • 正文 年R本政府宣布证芭,位于F島的核電站,受9級(jí)特大地震影響担映,放射性物質(zhì)發(fā)生泄漏废士。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,892評(píng)論 3 312
  • 文/蒙蒙 一蝇完、第九天 我趴在偏房一處隱蔽的房頂上張望官硝。 院中可真熱鬧,春花似錦短蜕、人聲如沸氢架。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽岖研。三九已至,卻和暖如春警检,著一層夾襖步出監(jiān)牢的瞬間孙援,已是汗流浹背害淤。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留拓售,地道東北人窥摄。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像邻辉,于是被迫代替她去往敵國和親溪王。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,492評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容