美文网首页
Swift底层源码编译步骤

Swift底层源码编译步骤

作者: Alex1989 | 来源:发表于2020-12-08 14:05 被阅读0次

    Swift底层源码编译步骤

    准备工作

    • HomeBrew(软件包管理器)
      如果被墙,请查看:
      国内安装HomeBrew教程

    • 预留60G空间(编译后灰常占用空间)

    • Python2.X (使用HomeBrew安装最新即可)

    • Xcode 12.2

    • 安装cmake(推荐使用brew cask install安装)

      • 推荐使用“brew cask install homebrew/cask/cmake”安装
      • 直接使用brew install camke会报警告
        [图片上传失败...(image-8ddd3f-1607407538583)]
      • 为了保险起见,我用brew install cmake也执行了一遍
    • 安装ninja(它用来编译Swift,Xcode会出奇怪的问题)

      • 使用“brew ninja”安装

    创建母文件夹

    mkdir swift-source
    cd swift-source
    

    第一步 clone swift 源码

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

    这里推荐使用最新的分支以对应新版的Xcode。别的分支我也下载过,update-checkout会出各种问题

    第二步 update-checkout

    执行此指令确保在swift-source目录下(重点)

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

    这一步会clone 编译Swift相关的库

    第三步 编译(推荐使用ninja直接在终端编译)(编译了1小时)

    在swift-source目录下执行以下指令:

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

    编译完成后:如果的你的目录有可执行文件swift就大功告成了


    image

    第四步 使用VSCode 调试 Swift

    • 在VSCode我们需要安装CodeLLDB


      安装CodeLLDB
    • 将swift-source导入vscode,创建JSON文件,选择LLDB模式


      创建JSON
      选择LLDB
    • 编辑JSON文件


      编辑JSON

      *run起来,跳过断点,选择TERMINAL即可编写Swift代码


      跳过断点
      编写swift

    最后说说我再编译过程中遇到的坑以及解决方案吧

    • 在编译过程中报了一堆error:


      报错截图

      从网查了好多从一篇和swift无关的文章中找到了解决方案,大致意思
      就是和#include的检索顺序有关系。首先可以通过命令找到自己系统的#include的顺序
      而能找到math.h的第一个路径,则是/usr/local/include/math.h这个文件,这和预期是不一致的,预期要使用的math.h是其同目录的math.h。因此,我们可以对原来的cmath代码进行调整,将<math.h>改成"math.h"即可。
      具体步骤:

    修改“/Library/Developer/CommandLineTools/usr/include/c++/v1/cmath”中的#include <math.h>为#include "math.h"。
    截图所示:


    image

    用IDE打开:


    image

    另一种解决方案

    该信息的报错应该是和CommandLineTools有关,那就直接删除
    1.在终端中执行以下代码:

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

    2.从新执行编译即可

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

    使用VSCode无法展示本地变量的问题

    -w1173

    1.将swift-source下编译好的build目录中对应路径bin文件全部拷贝


    -w827

    2.将swift源码中的文件lldb 赋值到 vscode下的lib文件 覆盖掉原来的liblldb.dylib,完成替换
    3.退出vscode,从新打开并debug,即可看到本地变量。

    我们看看效果:


    -w845

    这就是Swift源码完整的编译流程,有问题可以给我留言,探索过程是蛮有意思的。

    最后强烈建议使用科学上网,科学上网,科学上网。

    相关文章

      网友评论

          本文标题:Swift底层源码编译步骤

          本文链接:https://www.haomeiwen.com/subject/vocawktx.html