深入研究Clang(一)Clang和LLVM的关系及整体架构

作者:史宁宁snsn1984

Clang和LLVM的关系

        Clang和LLVM到底是什么关系,这是在研究Clang的过程中所不可避免的一个问题。如果要搞清楚Clang和LLVM之间的关系,首先先要知道宏观的LLVM和微观的LLVM。

        宏观的LLVM,指的是整个的LLVM的框架,它肯定包含了Clang,因为Clang是LLVM的框架的一部分,是它的一个C/C++的前端。虽然这个前端占的比重比较大,但是它依然只是个前端,LLVM框架可以有很多个前端和很多个后端,只要你想继续扩展。

        微观的LLVM指的是以实际开发过程中,包括实际使用过程中,划分出来的LLVM。比如编译LLVM和Clang的时候,LLVM的源码包是不包含Clang的源码包的,需要单独下载Clang的源码包。

        所以这里想讨论的就是微观的LLVM和Clang的关系。从编译器用户的角度,Clang使用了LLVM中的一些功能,目前所知道的主要就是对中间格式代码的优化,或许还有一部分生成代码的功能。从Clang和微观LLVM的源码位置可以看出,Clang是基于微观的LLVM的一个工具。而从功能的角度来说,微观的LLVM可以认为是一个编译器的后端,而Clang是一个编译器的前端,它们的关系就更加的明了了,一个编译器前端想要程序最终变成可执行文件,是缺少不了对编译器后端的介绍的。

        这样基本就确定了Clang和LLVM的关系。这个问题虽然并不复杂,但是对于后续的结构理解和深入研究确是一个很重要的出发点。这个出发点不理清楚的话,后续的研究没有办法继续深入下去。

Clang的整体架构

        如果要深入的研究Clang,那么首先需要知道Clang的整体架构。直接打开Clang的源码的话,里面目录较多,无从下手。可以直接从doxygen文档看,Clang的doxygen的地址是:http://clang.llvm.org/doxygen/index.html 。从这个首页选取Directories,可以直接进到文件目录列表:http://clang.llvm.org/doxygen/dirs.html 。在这个里面看目录,就比较清晰了,在clang目录下面一共就三个目录:
docs、include和lib。为什么只有这三个呢?仔细研究和对比就会发现,如果你要研究Clang的内部实现,只需要这三个目录就够了,其他的目录和Clang核心没有任何关系,是一些基于Clang的工具,Clang的一些例子,或者是一些测试用例等。

          现在看起来,Clang的结构已经很明显了。docs很明显放置的都是一些文档相关的内容,include放置的都是一些头文件。就只剩下一个lib目录了,下面是分类的目录,这个时候也可以推断出Clang的总体架构了,它的总体架构是基于库的。在Clang的官方文档“Clang" CFE Internals Manual (http://clang.llvm.org/docs/InternalsManual.html )中,对Clang内部的介绍也是依据库来进行分类的。

时间: 2024-12-21 09:40:24

深入研究Clang(一)Clang和LLVM的关系及整体架构的相关文章

深入研究Clang(九) Clang代码阅读之打log读流程2

继续上一篇,同样的hello.c,同样的执行过程,只不过继续添加了一些log信息,而且对代码进行了更近一步的挖掘.先看输入和输出的log信息(前半部分): shining@shining-VirtualBox:~/llvm-3.9.0/build/bin$ ./clang hello.c -o hello clang/tools/driver/driver.cpp/main()_begin/shining_add clang/lib/Driver/Driver.cpp/BuildCompilat

WPS表格研究:圆和圆的位置关系

  研究几何图形之间的位置关系,几何画板无疑是最佳平台之一,不过巧妙应用WPS表格强大的数据处理与图表生成功能,也可以深入研究一些几何问题?下面笔者就以圆和圆的位置关系 的研究 (如图1)为例,让您对WPS表格有一个更深入的认识: 图1 WPS表格实例(点击看大图) 本例要实现的目标: 1.建立两个圆的参数方程后,利用WPS表格的图表生成功能得到两个圆的图形; 2.利用窗体工具栏中的滚动条控件控制两个圆的大小与位置; 3.根据两个圆的大小与位置判断他们之间的位置关系. 制作过程如下: 一.完成工

研究表明:呼叫中心促进客户关系管理

一个发展成熟的战略要考虑到所有的客户.对组织来说,客户关系管理最具吸引力的好处之一是能够识别出赢利少的客户,并将他们转到更具成本效益的服务选项中,例如交互式语音应答.参考一下e-Satisfy公司进行的调查(由国际客户服务协会发起),其报道一个由座席处理的呼叫的每次联络成本的平均值为5美元,然而通常交互式语音应答联络则花费用0.36美元. 虽然这听上去好像具有良好的商业意识,然而实际上它已受到主要倾和普遍业务压力的不断攻击.还记得当美国富达投资集团尝试鼓励其赢利少且经常进行呼叫的客户使用其交互式

研究新发现夫妻睡姿 或可揭示关系亲密程度

&http://www.aliyun.com/zixun/aggregation/37954.html">nbsp;      [ 科技讯]5月14日消息,据媒体报道,夫妻之间的关系是亲密还是疏远,我们一般是通过两人日常的表现中总结出来的, 但是是否还有其他我们没有发现的反应模式呢?近日,心理学家怀斯曼教授在分析了1100名参与实验者的研究数据后, 认为夫妻睡姿能够反应出彼此间关系的亲密程度. 研究发现,睡觉时喜欢靠近伴侣的人性格偏外向,睡眠时身体距离小于2.54厘米的与相距多于7

软件定义光网络技术演进及在5G中的创新应用

当前,我国信息通信产业持续高速增长,互联网应用呈现出加深发展态势. 为把互联网的创新成果与经济社会各领域深度融合,推动技术进步,提升实体经济创新力和生产力,国务院提出以"互联网+"为主线的国家信息化战略方针. 作为"互联网+"的重要基础设施,光网络在高速.宽带.长距离超大容量传输方面的优势得到了充分体现. 随着光网络智能化的不断发展,其发展趋势已不再局限于简单的刚性带宽管道提供,出现了结构开放化.业务增值化的发展趋势与特征,而带来这一特征的主要因素在于光网络的可编程

Clang一个LLVM编译器前端介绍

本文将首先介绍 C++lang 的背景知识,让读者对 Clang 的背景知识和功能特性有一个基本的了解.我们还将通过一个实际的例子,介绍如何在最新的 Clang(3.0) 发行版本上,编写一个 Clang 的插件. Low Level Virtual http://www.aliyun.com/zixun/aggregation/39569.html">Machine (LLVM) 是一个开源的编译器架构,它已经被成功应用到多个应用领域.Clang ( 发音为 /klæŋ/) 是 LLVM

llvm, clang

gcc http://blog.163.com/digoal@126/blog/static/163877040201601313814429/ export PATH=/u02/dege.zzz/gcc4.9.3/bin:$PATH export LD_LIBRARY_PATH=/u02/dege.zzz/gcc4.9.3/lib64:/u02/dege.zzz/gcc4.9.3/lib:$LD_LIBRARY_PATH cmake wget https://cmake.org/files/v

gentoo prefix重生(llvm/clang)

gentoo prefix重生(llvm/clang) 前天手贱,更新了mac上gentoo prefix的perl,然后发现git svn无法使用.更新perl其他组件的时候,遇到了一堆问题. 特别是subversion1.8,在gcc-apple下已经无法编译了. gentoo prefix portage镜像 之前gentoo prefix的portage rsync服务器挂掉过,然后改了其他一台,但是速度都非常慢.看见阿里云有gentoo prefix portage 的镜像,尝试修改成

LLVM每日谈之七 Clang

作者:snsn1984         官方介绍Clang是LLVM native的一个面向C/C++/Objective-C的编译器,目标是要提供一个编译非常快的编译器.他们宣称在Debug模式下编译Objective-C比GCC快3倍.至于是否能比GCC快这么多,总有人去做对比,大家可以搜索下,好像确实快了些. Clang一般被说是LLVM的一个前端.关于前端的定义,大家可以从LLVM每日谈之二里面看到前端在整个LLVM体系中的位置.Clang当初的定位就是要做下一个十年中一个伟大的前端,这