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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容

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