llvm+clang的安装(使用cmake)

时间:2021-12-29 02:23:59

1. 下载码源

首先先安装svn,用来checkout llvm的码源

aptitude install subversion

然后checkout llvm的码源:

1.2 Checkout LLVM

checkout的是llvm项目的主要代码

cd where-you-want-llvm-to-live
svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm

1.3 Checkout Clang

clang是llvm项目的 C, C++, Objective C and Objective C++ 前端

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

1.4 Checkout Compiler-RT

Compiler-RT主要是为Clang和LLVM提供运行时库的支持

cd llvm/projects
svn co http://llvm.org/svn/llvm-project/compiler-rt/trunk compiler-rt
cd ../..

1.5 Checkout Test Suite Source Code(可选的)

cd where-you-want-llvm-to-live
cd llvm/projects
svn co http://llvm.org/svn/llvm-project/test-suite/trunk test-suit

2. 编译安装

llvm支持cmake和autotools进行编译。不同编译方式对后续创建自定义的pass的方式就不同,例如如果使用cmake编译,写pass的时候就不需要创建makefile文件,而需要创建CMakeList.txt文件。
在编译之前,需要参看对系统的要求:
http://llvm.org/docs/GettingStarted.html#requirements

2.1 安装cmake

由于Debian软件仓库中的cmake的版本过低,因此需要自己安装cmake。
http://www.cmake.org/download/下载cmake的码源,解压。

./configure
make
make install

2.2 编译安装

llvm为了防止编译的中间结果分布在码源目录中,影响码源的结构。因此不支持目录内编译。需要在码源目录外创建额外的编译目录。

mkdir build
cd build
cmake -G "Unix Makefiles" ../llvm
make
make install

3. 常用工具简介

这样llvm就安装完成了。下面是llvm的常用工具简短介绍:
clang: C语言编译器,类似于gcc
clang++: C++编译器,类似于g++。clang++只是clang的一个别名。
clang-format:按照固定的规范格式化C/C++代码,非常智能。文档请见:http://clang.llvm.org/docs/ClangFormat.html
clang-modernize:把按照C++98标准写的代码,转成C++11标准的。文档请见:http://clang.llvm.org/extra/ModernizerUsage.html
llvm-as:LLVM 汇编器
llvm-dis: LLVM 反汇编器
opt:LLVM 优化器
llc:LLVM 静态编译器
lli:LLVM的字节码执行器(某些平台下支持JIT)
llvm-link:LLVM的字节码链接器
llvm-ar:LLVM的静态库打包器,类似unix的ar。
llvm-nm:类似于unix的nm
llvm-ranlib:为 llvm-ar 打包的文件创建索引
llvm-prof:将 ‘llvmprof.out’ raw 数据格式化成人类可读的报告
llvm-ld :带有可装载的运行时优化支持的通用目标连接器
llvm-config:打印出配置时 LLVM 编译选项、库、等等
llvmc:一个通用的可定制的编译器驱动
llvm-diff:比较两个模块的结构
bugpoint:自动案例测试减速器
llvm-extract:从 LLVM 字节代码文件中解压出一个函数
llvm-bcanalyzer:字节代码分析器 (分析二进制编码本身,而不是它代表的程序)
FileCheck:灵活的文件验证器,广泛的被测试工具利用
tblgen:目标描述阅读器和生成器
lit:LLVM 集成测试器,用于运行测试

参考文献


[1]:http://llvm.org/docs/GettingStarted.html
[2]:http://clang.llvm.org/get_started.html
[3]:http://my.oschina.net/u/659405/blog/376347
[4]:http://blog.csdn.net/snsn1984/article/details/8036032