频道栏目
首页 > 资讯 > 其他 > 正文

在Mac OS上Build、配置和使用LLVM

17-11-22        来源:[db:作者]  
收藏   我要投稿

一、引言

LLVM这个名字最初的意思是底层虚拟机(Low Level Virtual Machine)的缩写,它是由美国伊利诺伊大学开发的一个开源项目。现在LLVM的意义已经远远超越它最初的意思,所以现在LLVM就是整个项目的名称。

具体来说,LLVM是以C++编写而成的编译器(compiler)框架系统,或者说是一个模块化和可重复使用的编译器和工具技术的集合,其核心库提供了与编译器相关的支持,可以作为多种语言编译器的后台来使用。利用LLVM,能够进行程序语言的编译期优化、链接优化、在线编译优化、代码生成。

如果上面的解释仍然令你感觉不得要领,那么简而言之——LLVM就是一套类似于GCC(及其相关工具)的编译工具。很多人会好奇二者的区别,或者孰优孰劣。相比而言,GCC历史悠久、树大根深,拥有庞大的用户群体。而LLVM是后起之秀,方兴未艾。既然是后来者,自然也就具有一定的后发优势,例如LLVM的编译速度很快(据说通常是GCC的三倍左右)、拥有独到的IR表示形式等等。

近些年来,LLVM发展很快,特别是它的主要贡献者Chris Lattner受雇于Apple专攻其编译器的开发之后,LLVM更是得到了Apple的大力支持。在新版的Xcode中,LLVM已经成为默认的后端编译器。2012年,LLVM荣获ACM软件系统奖,可见其价值已经得到学术界与产业界的广泛认可。

二、在Mac OS上Build你的LLVM

说到LLVM,你想必应该还听过另外一个产品Clang。如下图所示,Clang主要负责完成类似前端的一些工作,它通常作为标准LLVM发布版的一部分而被发布(Clang is released as part of regular LLVM releases)。特别地,在Mac OS系统下,From Xcode 4.2, Clang is the default compiler for Mac OS X。

所以,如果你已经安装了Xcode,其实你已经可以在命令行中使用Clang来编译程序了(用法上跟GCC差不多)。但是如果你要做一些更加深入的、更酷的事情,你还需要获得并安装完整的LLVM。

前面已经提过,LLVM是一套编译器和工具技术的集合,具体来说,此处所谓之常用的基本工具有如下这些:

所以在命令行中,其实并没有一个单独的命令叫LLVM(但是却有一个可以执行的程序或者命令叫gcc或者g++)。正如前面所说,在Mac OS系统下,如果你已经安装了Xcode(例如我电脑上的版本是9.0),那么在命令行中你是可以直接使用Clang命令的。但是,由于你并没有单独安装LLVM,所以你还无法使用上面列表中的命令,例如llc。

下面就来演示在Mac OS上安装LLVM的过程(其实是下载源代码后,自己Build)。首先,你要做一些检查工作,确保你的电脑上已经安装了稍后Build时会用到的工具,其实最主要的就是CMake,关于CMake的安装你可以参考【1】。

然后,创建一个名叫llvm的文件夹用来存放稍后你要下载的LLVM代码。如下图所示,使用命令它来完成,其中的最后的llvm就是你刚刚创建的文件夹的名字(当然如果你使用其他的文件夹,这里要注意替换):

svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm

接下来是对Clang做类似的事情。Clang的源文件需要被安装到llvm/tools/clang这个文件夹下面,注意检查一下路径是否正确。

cd llvm/tools

svn co http://llvm.org/svn/llvm-project/cfe/trunk clang

cd ../..接下来是Check out附加的Clang工具(extra Clang tools),这一步是可选的,我们也follow着做一下。使用命令:

cd llvm/tools/clang/tools

svn co http://llvm.org/svn/llvm-project/clang-tools-extra/trunk extra

cd ../../../..

如下图所示:

接下来还有几个可选的安装内容我们忽略掉它们,如果你需要安装它们,可以参考【2】中的5~6步。接下来就是Build LLVM和Clang。注意,你要在llvm文件夹下面新建一个名为build的文件夹,然后在build路径下使用命令:

cmake -G "Unix Makefiles" ../llvm如下图所示:

上一步完成后,在使用make命令来builds both LLVM and Clang for debug mode,如下图所示:

整个过程大约需要1个小时左右,到出现下面这个界面,即100%时,所有的Build工作就都完成了!

三、配置环境变量

要想使用之前的表中罗列处理的各种LLVM工具,还需要配置一下环境变量。在Mac OS中一种临时调整环境变量的方法如下图所示:

从上图中可以获知,如此配置好环境变量之后,就已经可以使用llc了。但是这只是一种“临时”的方法,一旦重新开启一个命令行窗口后,环境变量还会消失。

Mac OS中配置环境变量的方法有很多,下面使用其中一种,即修改bash_profile文件的方式。具体操作是在命令行窗口下输入命令:sudo vi ~/.bash_profile,系统会提示你输入管理员密码。然后在vim中编辑文件bash_profile,在其中加入一句:export PATH="你的llvm中的bin路径:$PATH",如下图所示:

保存之后退出。再使用一下source命令使其生效,如下图所示:

四、试用一下LLVM

最后来试用一下LLVM,首先在桌面上(或者其他你希望的路径下)创建一个helloworld程序,如下图所示:

你可以用clang命令来编译它,这一点跟gcc的用法类似。下面来做一点不一样的实验。如下图所示,第一句命令的意思是生成 .ll文件,接下来,第二句再以此为基础生成 .s文件。

你可以观察一下这两个文件的内容。不过理解它们并不是本文所要探讨的。如果有机会,我会在日后的博文里分享更多基于LLVM的黑科技。

相关TAG标签
上一篇:phpstudy打不开localhost问题的解决办法
下一篇:软件工程:DFD、决策树、E-R图、FSM、Petri网介绍
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站