抛开llvm\clang的一些工具组件,这张图基本涵盖了llvm\clang的主流程。
llvm的前端部分clang,脱胎于对C系语言的编译,C\C++\OC是其最主要的客户语言(python后面可能也会被纳入进来)。
预处理、词法分析、生成符号表工作与gcc相差无几,基本由流行的工具完成。语法分析、语义分析是clang比较有特色的部分,尤其是在编译过程中生成AST(抽象语法树)这一特色能力,能够深入和拓展编程语言,是帮助实现语言分析、自定义逻辑检查、元编程等各种工具的利器。
前端的输出结果是IR(中间表示),它是各种编程语言的输出,也是各种机器码的输入。它就像一个接口(协议),将前端和后端两个组件进行解耦。
后端技术主要是根据IR生成机器码的过程,中间涉及到许多优化。这块技术比较专,涉猎不多。与iOS开发相关的就是bitcode文件,它是iOS平台上的一种优化手段,主要凭借的就是其动态下发及解释执行的能力,具体可参考工具lli。对.bc文件继续编译(或者叫转义估计也可以)生成我们熟悉的.o文件,最终链接生成我们需要的产物。
最重要的还得夸下大神,这条龙相比于llvm的logo,画的更好看。
展开