Swift源碼編譯的環(huán)境搭建和編譯流程

      網(wǎng)友投稿 911 2022-05-30

      版本準(zhǔn)備:macOS 10.15.3 Xcode 11.5

      brew install cmake njnia

      Python 2.X

      Swift 源碼地址:Apple/Swift

      clone 命令:

      git clone --branch swift-5.2.4-RELEASE https://github.com/apple/swift.git

      1

      這里我編譯的是 swift-5.2.4-RELEASE,因?yàn)樵诰幾g源碼的時(shí)候,這是我使用的版本。

      如果需要編譯更新的源碼,可自行在官網(wǎng)上尋找對(duì)應(yīng)的版本:Apple/Swift。同時(shí)要注意對(duì)應(yīng)的Xcode的版本要匹配(在官方文檔編譯的時(shí)候會(huì)有具體的說(shuō)明)。

      clone 完成如下:

      Cloning into 'swift'... remote: Enumerating objects: 1, done. remote: Counting objects: 100% (1/1), done. remote: Total 1170695 (delta 0), reused 0 (delta 0), pack-reused 1170694 Receiving objects: 100% (1170695/1170695), 614.74 MiB | 9.37 MiB/s, done. Resolving deltas: 100% (953771/953771), done. Note: switching to '0bab712aea8f0eb74f3acc303d96857f697a98d8'.

      1

      2

      3

      4

      5

      6

      7

      8

      確保當(dāng)前的目錄在 swift-source 下,然后執(zhí)行以下命令:

      ./swift/utils/update-checkout --tag swift-5.2.4-RELEASE --clone

      1

      結(jié)果如下:

      Skipping cmake on Darwin Skipping icu on Darwin Skipping clone of 'sourcekit-lsp', directory already exists Skipping clone of 'swift-syntax', directory already exists Skipping clone of 'cmake', requested by user Skipping clone of 'swift-xcode-playground-support', directory already exists Skipping clone of 'swift-format', directory already exists Skipping clone of 'indexstore-db', directory already exists Skipping clone of 'swift-stress-tester', directory already exists Skipping clone of 'llvm-project', directory already exists Skipping clone of 'llbuild', directory already exists Skipping clone of 'cmark', directory already exists Skipping clone of 'swift-corelibs-foundation', directory already exists Skipping clone of 'swift-tools-support-core', directory already exists Skipping clone of 'swift-corelibs-xctest', directory already exists Skipping clone of 'ninja', directory already exists Skipping clone of 'swift-integration-tests', directory already exists Skipping clone of 'swiftpm', directory already exists Skipping clone of 'swift', directory already exists Skipping clone of 'swift-corelibs-libdispatch', directory already exists Skipping clone of 'icu', requested by user

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      21

      這一步特別重要,因?yàn)?update-checkout 會(huì) clone 編譯 swift 相關(guān)的庫(kù),不然之后編譯 swift 的過(guò)程中一定會(huì)失敗。

      編譯過(guò)程中,既可以使用 njnia ,也可以使用 Xcode 來(lái)進(jìn)行編譯。在實(shí)際的編譯測(cè)試過(guò)程中,Xcode 編譯之后的支持性不是特別好,推薦使用 njnia 來(lái)編譯。

      利用 swift 源碼中的腳本編譯:

      ./swift/utils/build-script -x -R --debug-swift

      1

      或者執(zhí)行以下腳本查閱命令:

      ./swift/utils/build-script -r --debug-swift-stdlib --lldb

      1

      編譯完成如下:

      要在 Xcode 中打開(kāi) Swift 項(xiàng)目,請(qǐng)打開(kāi)/swift-source/build/Xcode-ReleaseAssert+swift-DebugAssert/swift-macosx-x86_64/Swift.xcodeproj。

      它將為所有可用目標(biāo)自動(dòng)創(chuàng)建很多方案。常見(jiàn)的調(diào)試流程將涉及:

      選擇 swift scheme。

      調(diào)出 scheme 編輯器(??<)。

      選擇 Arguments 選項(xiàng)卡,然后單擊 +。

      添加命令行選項(xiàng),這個(gè)根據(jù)自行需求設(shè)置,如果沒(méi)有特殊需求,正常編譯。

      關(guān)閉scheme 編輯器。

      編譯并運(yùn)行。

      打開(kāi) VSCode 安裝 CodeLLDB 插件,如下所示:

      配置JSON 文件,如下所示:

      配置內(nèi)容如下:

      "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}" } ]

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      注意:上面的 program 文件路徑需要和你編譯的文件路徑相同。

      Run 之后:

      過(guò)掉斷點(diǎn):

      示例如下:

      在調(diào)試 .swift 文件的時(shí)候,可能不會(huì)出現(xiàn)上面 3 的情況,解決辦法如下:

      先找 LLDB 的安裝路徑,如下:

      然后找到編譯之后的 LLDB 的文件路徑,把這里面的文件全部拷貝到上面的目錄之下:

      同時(shí)修改 CodeLLDB 的 lib 文件下的 dylib 文件:

      Swift之源碼編譯的環(huán)境搭建和編譯流程

      切換到終端,然后就可調(diào)試 Swift 源碼。

      在終端中輸入以下代碼(也可以從 swift 文件拷貝):

      在源碼中搜索 *_swift_allocObject,加上斷點(diǎn):

      繼續(xù)在終端輸入 var t = YDWTeacher(),然后回車(chē):

      這樣我們就可以愉快的玩耍調(diào)試 Swift 源碼啦!

      Swift

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶(hù)投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:Redis認(rèn)識(shí)與安裝
      下一篇:mybatis技術(shù)入門(mén)第一次課
      相關(guān)文章
      亚洲人成人网毛片在线播放| 中文国产成人精品久久亚洲精品AⅤ无码精品 | 亚洲AV无码精品国产成人| 97亚洲熟妇自偷自拍另类图片| 亚洲AV日韩精品久久久久久久| 2048亚洲精品国产| 亚洲中文字幕久久精品蜜桃| 亚洲中文字幕久久无码| 麻豆狠色伊人亚洲综合网站| 亚洲人成电影在线观看网| 亚洲一区免费在线观看| 亚洲av无码片在线观看| 亚洲中文无码卡通动漫野外| 亚洲另类无码专区丝袜| 国产精品无码亚洲精品2021| 日本亚洲中午字幕乱码| 亚洲成AⅤ人影院在线观看| www亚洲精品久久久乳| 亚洲第一区精品观看| 亚洲一区二区三区国产精品| 中文字幕不卡亚洲 | 亚洲精品无码你懂的网站| 亚洲毛片av日韩av无码| 国产亚洲精品拍拍拍拍拍| 亚洲精品美女久久777777| 亚洲国产精品免费视频| 亚洲精品永久www忘忧草| 亚洲另类自拍丝袜第1页| 亚洲色大成网站WWW国产| 久久久久亚洲AV无码去区首| 亚洲欧洲日产国码一级毛片| 激情97综合亚洲色婷婷五| 久久国产亚洲观看| 亚洲福利视频网址| 亚洲熟伦熟女专区hd高清| 在线观看免费亚洲| 亚洲人成人77777网站| 日产亚洲一区二区三区| 中文字幕 亚洲 有码 在线| 色窝窝亚洲AV网在线观看| 亚洲无码在线播放|