Swift 進階001 -- Swift源碼編譯

編譯環(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

cmakeninja可通過 brew list查看是否安裝

brew list.png

編譯步驟

開始前先準備一下:

  • 新建一個名為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-checkoutclone編譯 swift 相關(guān)的庫,不然編譯一定會失敗。(時間有點長旧烧,可以喝杯??)
這里編譯需要注意一點:文件的路徑盡量避免出現(xiàn)中文影钉,中文有很大的概率會報錯。

安裝完如下:


update-checkout succeeded.png

完成后文件大概有3G掘剪。

第三步:編譯

編譯過程可以使用ninja平委,也可以使用Xcode,但是Xcode編譯之后的支持性不是太好夺谁,所以這里采用ninja編譯廉赔。

  • 利用 swift 源碼中的腳本編譯:
./swift/utils/build-script -x -R --debug-swift
  • 或者執(zhí)行以下腳本查閱命令:
./swift/utils/build-script -r --debug-swift-stdlib --lldb

編譯過程可能會報錯:

swift-source.png

看報錯信息應(yīng)該是和CommandLine有關(guān)帝簇,直接刪除Developer下的CommandLineTools仗颈,使用Xcode中的就好过咬。

sudo rm -rf /Library/Developer/CommandLineTools
sudo xcode-select -s /Applications/Xcode.app
BUILD SUCCEEDED.png

如果的你的目錄有可執(zhí)行文件swift就編譯完成了永品。


image.jpg
編譯完成.png

編譯完文件大概有50G镇草。

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

  • 首先下載VSCode并安裝右蹦。
  • 使用VSCode來安裝一個CodeLLDB插件摆尝。
image.png
  • 將swift-source導(dǎo)入VSCode亭病,創(chuàng)建JSON文件笆环,選擇LLDB模式

    image.png

  • 添加配置文件launch.json攒至,并修改

    image.png

{
    "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起來之后

    image.png

  • 過濾掉斷點, 查看終端
    這個時候就證明正常跑起來了


    image.png

這個時候我們可以寫swift代碼,進行調(diào)試


image.png

可以看到本地變量沒有任何顯示(原因是CodeLLDB這個插件的作者沒有支持swift語言)躁劣,當(dāng)然并不妨礙調(diào)試源代碼迫吐。

設(shè)置本地變量顯示支持swift

  • 準備工作:做下面步驟的時候最好先備份,防止誤操作账忘。

  • 找到CodeLLDB的安裝目錄

    image.png

  • 然后找到編譯過后的lldb文件目錄志膀,把目錄里面的文件全部拷貝到上面的目錄中(lldbcode本質(zhì)上也是使用bin目錄下的lldb來調(diào)試我們的源碼)
    這一步的操作是要讓codelldb使用我們編譯好的swift中的lldb來調(diào)試代碼。先找到VSCode插件的安裝目錄鳖擒,一般情況下在用戶目錄下:

    image.png

  • 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)目錄使用)

    image.png

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市播赁,隨后出現(xiàn)的幾起案子颂郎,更是在濱河造成了極大的恐慌,老刑警劉巖容为,帶你破解...
    沈念sama閱讀 211,948評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件乓序,死亡現(xiàn)場離奇詭異寺酪,居然都是意外死亡,警方通過查閱死者的電腦和手機替劈,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評論 3 385
  • 文/潘曉璐 我一進店門寄雀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人抬纸,你說我怎么就攤上這事咙俩。” “怎么了湿故?”我有些...
    開封第一講書人閱讀 157,490評論 0 348
  • 文/不壞的土叔 我叫張陵阿趁,是天一觀的道長。 經(jīng)常有香客問我坛猪,道長脖阵,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,521評論 1 284
  • 正文 為了忘掉前任墅茉,我火速辦了婚禮命黔,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘就斤。我一直安慰自己悍募,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,627評論 6 386
  • 文/花漫 我一把揭開白布洋机。 她就那樣靜靜地躺著坠宴,像睡著了一般。 火紅的嫁衣襯著肌膚如雪绷旗。 梳的紋絲不亂的頭發(fā)上喜鼓,一...
    開封第一講書人閱讀 49,842評論 1 290
  • 那天,我揣著相機與錄音衔肢,去河邊找鬼庄岖。 笑死,一個胖子當(dāng)著我的面吹牛角骤,可吹牛的內(nèi)容都是我干的隅忿。 我是一名探鬼主播,決...
    沈念sama閱讀 38,997評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼邦尊,長吁一口氣:“原來是場噩夢啊……” “哼硼控!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起胳赌,我...
    開封第一講書人閱讀 37,741評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎匙隔,沒想到半個月后疑苫,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,203評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,534評論 2 327
  • 正文 我和宋清朗相戀三年捍掺,在試婚紗的時候發(fā)現(xiàn)自己被綠了撼短。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,673評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡挺勿,死狀恐怖曲横,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情不瓶,我是刑警寧澤禾嫉,帶...
    沈念sama閱讀 34,339評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站蚊丐,受9級特大地震影響熙参,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜麦备,卻給世界環(huán)境...
    茶點故事閱讀 39,955評論 3 313
  • 文/蒙蒙 一孽椰、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧凛篙,春花似錦黍匾、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,770評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至削彬,卻和暖如春全庸,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背融痛。 一陣腳步聲響...
    開封第一講書人閱讀 32,000評論 1 266
  • 我被黑心中介騙來泰國打工壶笼, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人雁刷。 一個月前我還...
    沈念sama閱讀 46,394評論 2 360
  • 正文 我出身青樓覆劈,卻偏偏與公主長得像,于是被迫代替她去往敵國和親沛励。 傳聞我的和親對象是個殘疾皇子责语,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,562評論 2 349

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