swift编译成可执行文件过程

1、swift code编译过程

1.1、流程图

image.png

1.2、转换成对应流程的代码指令

//main可以换成任何.swift文件,只是拿main当例子

// 分析输出AST
swiftc main.swift -dump-parse

// 分析并且检查类型输出AST 
swiftc main.swift -dump-ast 

// 生成中间体语言(SIL),未优化 
swiftc main.swift -emit-silgen 

// 生成中间体语言(SIL),优化后的 
swiftc main.swift -emit-sil 

// 生成LLVM中间体语言 (.ll文件) 
swiftc main.swift -emit-ir 

// 生成LLVM中间体语言 (.bc文件) 
swiftc main.swift -emit-bc 

// 生成汇编
swiftc main.swift -emit-assembly 

// 编译生成可执行.out文件 
swiftc -o main.o main.swift 

1.3、swiftc指令

我们可以在终端上查看swiftc的各种指令

swiftc -h
image.png

常见的swiftc指令的用处

  -dump-ast             语法和类型检查,打印AST语法树
  -dump-parse           语法检查,打印AST语法树
  -dump-pcm             转储有关预编译Clang模块的调试信息
  -dump-scope-maps <expanded-or-list-of-line:column>
                         Parse and type-check input file(s) and dump the scope map(s)
  -dump-type-info        Output YAML dump of fixed-size types from all imported modules
  -dump-type-refinement-contexts
                         Type-check input file(s) and dump type refinement contexts(s)
  -emit-assembly         Emit assembly file(s) (-S)
  -emit-bc               输出一个LLVM的BC文件
  -emit-executable       输出一个可执行文件
  -emit-imported-modules 展示导入的模块列表
  -emit-ir               展示IR中间代码
  -emit-library          输出一个dylib动态库
  -emit-object           输出一个.o机器文件
  -emit-pcm              Emit a precompiled Clang module from a module map
  -emit-sibgen           输出一个.sib的原始SIL文件
  -emit-sib              输出一个.sib的标准SIL文件
  -emit-silgen           展示原始SIL文件
  -emit-sil              展示标准的SIL文件
  -index-file            为源文件生成索引数据
  -parse                 解析文件
  -print-ast             解析文件并打印(漂亮/简洁的)语法树
  -resolve-imports       解析import导入的文件
  -typecheck             检查文件类型

2、代码实践

2.1、创建一个类

class YYPersonClass {
    var age : Int = 18
    var name : String = "zhangsan"
}
let p = YYPersonClass()

2.2、生成sil和ir

在xcode中配置脚本运行target(当然你也可以通过终端编译),过程如下


image.png

image.png

image.png

生成SIL的脚本代码

#swiftc -emit-sil ${SRCROOT}/xxx.swift > ./xxx.sil && open xxx.sil
#${SRCROOT}/xxx.swift > :需要编译成sil的.swift文件
#open xxx.sil :编译成功后 打开xxx.sil文件
swiftc -emit-sil ${SRCROOT}/StructAndClass/main.swift > ./main.sil && open main.sil

#如果是带UIKit的需要使用下面的脚本
#ios13.1 13.1是你的xcode版本
#swiftc -emit-sil -target x86_64-apple-ios13.1-simulator -sdk $(xcrun --show-sdk-path --sdk iphonesimulator) ${SRCROOT}/YYSwiftTest/ViewController.swift > ./ViewController.sil && open ViewController.sil

编译后的sil代码

image.png

生成IR的脚本代码

#swiftc -emit-ir ${SRCROOT}/xxx.swift > ./xxx.sil && open xxx.sil
#${SRCROOT}/xxx.swift > :需要编译成sil的.swift文件
#open xxx.sil :编译成功后 打开xxx.sil文件
swiftc -emit-sil ${SRCROOT}/StructAndClass/main.swift > ./main.ll && open main.ll

#如果是带UIKit的需要使用下面的脚本
#ios13.1 13.1是你的xcode版本
#swiftc -emit-ir -target x86_64-apple-ios13.1-simulator -sdk $(xcrun --show-sdk-path --sdk iphonesimulator) ${SRCROOT}/YYSwiftTest/ViewController.swift > ./ViewController.ll && open ViewController.ll

编译后生成的.ll


image.png
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 应用程序从源代码到可执行文件都经历了哪些过程呢? 可分为两步:编译和链接。而编译又可分为三部,分别是预处理,编译,...
    奉灬孝阅读 4,387评论 0赞 1
  • 一个可执行文件的生成一般都要经过下面几个步骤:编辑 、预处理 、 编译、优化、汇编 、 连接 ——>可执行文件...
    YoonjaeJ阅读 930评论 0赞 0
  • 流程概况:将源代码转换成机器可识别代码的过程,编译程序读取源代码,对他进行词法和语法的分析,将高级语言转化为功能等...
    曹小恒阅读 1,957评论 0赞 0
  • 1.C语言创建程序 1.1C语言创建(分为4个步骤) 编辑 编译 链接 执行 编辑:就是创建和修改C程序的源代码-...
    carolwhite阅读 12,021评论 0赞 16
  • 我们用 Xcode 构建一个程序的过程中,会把源文件 (.m 和 .h) 文件转换为一个可执行文件。这个可执行文件...
    skogt阅读 1,047评论 0赞 1

友情链接更多精彩内容