写在最前

如果安装过程中出现源的问题,进入Ubuntu Software Center - Edit - Software Sources - Ubuntu Software - Download From, 修改源,然后使用sudo apt-get update命令更新源。

为了避免后续出现小问题,首先还是更新源吧。

1
$ sudo apt-get update

参考文档(若不想看英文,可跳过)

安装相关

Getting Started with the LLVM System:
LLVM: Getting Started Quickly (A Summary)
LLVM: Requirements

CMake

Building LLVM with CMake

必要的包

1.cmake, version 3.6 and higher.

1
$ sudo apt-get install cmake

2.gcc and gcc-c++, version 4.8 and higher.

1
$ sudo apt-get build-dep gcc` 或 `sudo apt-get install build-essential`

3.binutils, including ld, ar and etc.

4.subversion.

1
$ sudo apt-get install subversion`

选择版本

之前推荐的是当前版本trunk,但是有时它在不断更新,所以最好还是选择特定版本,这里我们选择clang 5.0最终版,那么官网指南中可将trunk改成tags/RELEASE_500/final。
例如:
http://llvm.org/svn/llvm-project/llvm/trunk
可以改成:
http://llvm.org/svn/llvm-project/llvm/tags/RELEASE_500/final

安装

1.建立目录

1
2
3
$ cd ~
$ sudo mkdir LLVM
$ cd LLVM

2.下载llvm, 选择5.0.0版本的llvm

1
$ svn co http://llvm.org/svn/llvm-project/llvm/tags/RELEASE_500/final llvm

3.下载clang, 选择5.0.0版本的clang

1
2
3
$ cd llvm/tools
$ svn co http://llvm.org/svn/llvm-project/cfe/tags/RELEASE_500/final clang
$ cd ../..

4.安装额外的clang工具,可选

1
2
3
$ cd llvm/tools/clang/tools
$ svn co http://llvm.org/svn/llvm-project/clang-tools-extra/tags/RELEASE_500/final extra
$ cd ../../../..

5.安装Compiler—RT,可选

1
2
3
$ cd llvm/projects
$ svn co http://llvm.org/svn/llvm-project/compiler-rt/tags/RELEASE_500/final compiler-rt
$ cd ../..

【安装其他可选项,可参考http://clang.llvm.org/get_started.html】

6.安装标准库libcxx及libcxxabi:

1
2
3
4
$ cd llvm/projects
$ svn co http://llvm.org/svn/llvm-project/libcxx/tags/RELEASE_500/final libcxx
$ svn co http://llvm.org/svn/llvm-project/libcxxabi/tags/RELEASE_500/final libcxxabi
$ cd ../..

编译

1.建立目录

1
2
$ mkdir build
$ cd build

2.注意将默认的Debug模式换成Release模式.
[Debug版本大概20多个G,选择Release版本]

1
2
3
$ cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release ../llvm
make
sudo make install

修改环境变量

修改/etc/profile文件,添加环境变量

1
$ sudo gedit /etc/profile

打开配置文件后给PATH添加路径:
export LLVM_HOME=/opt/LLVM
export PATH=${PATH}:${LLVM_HOME}/build/bin

测试安装正确性

1
2
$ clang -version
$ llvm -version

测试

可参考An Example Using the LLVM Tool Chain

测试1

1.创建test.c文件

1
2
3
4
5
#include <stdio.h>  
int main() {
printf("hello llvm\n");
return 0;
}

2.编译可执行文件

1
$ clang test.c -o test

3.生成LLVM字节码文件

1
$ clang -03 -emit-llvm test.c -c -o test.bc

4.生成LLVM可视化字节码文件

1
$ clang -03 -emit-llvm test.c -S -o test.ll

5.运行可执行文件
./test

6.运行字节码文件

1
$ lli test.bc

7.反汇编字节码文件

1
$ llvm-dis < test.bc | less

8.编译字节码文件为汇编文件

1
$ llc test.bc -o test.s

测试2

1.基于c11使用libc编译x.cpp并执行a.out

1
2
$ clang++ -std=c++11 -stdlib=libc++ x.cpp
.\a.out

2.验证x.cpp的正确性

1
$ clang x.cpp -fsyntax-only

3.输出x.cpp未优化的LLVM代码

1
$ clang x.cpp -S -emit-llvm -o -

4.输出x.cpp经过O3优化的LLVM代码

1
$ clang x.cpp -S -emit-llvm -o - -O3

5.输出x.cpp的原生机器码

1
$ clang x.cpp -S -O3 -o -

折腾

由于第一次安装没有考虑很多,将LLVM目录建在系统/opt目录下,然后进行了编译,导致很多时候出现权限问题,于是决定将LLVM换个目录。

1.更换目录
原始目录/opt/LLVM,包含build及llvm两个文件夹
目标目录/home/katherine/LLVM

1
$ sudo mv /opt/LLVM /home/katherine/LLVM

2.重新编译
首先删除build目录下的所有内容

然后使用sudo cmake(与之前编译不同,此处有sudo,当然你可以试试不用sudo会出现什么问题)

1
$ sudo cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release ../llvm

重新编译。此时终端没有其他任务,使用nproc参数,所有的核都会用于开启多线程进行编译。如果有其他任务的话,直接make
如果你的电脑有8核,那么可以使用make -j8来进行编译。