在Ubuntu上编译安装LLVM

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Mr_Megamind/article/details/78896717

Motivation

两周前实验室要求我配置一个叫Speedy.js的编译器,配置这个编译器需要先配置好LLVM。根据这个编译器作者的教程,乱七八糟配置了一通,踩过一些坑,碰过一些雷,浪费了很多时间。花了两周时间,终于全套配置完成,因此想写个教程,留点知识给以后的自己和需要的各位。Speedy.js不好说,但是LLVM这东西以后有大概率会用的上。


环境

这是我这次配置LLVM过程中最大的一个坑,因为耗费了将近40%的时间。一定不要在Windows上配!一定不要在Windows上配!一定不要在Windows上配! 重要的话说三遍。
一般情况下,普通的DOS指令在Windows下和Linux下是一样,但是差异也是有的,比如,教程里有一句:

cmake --build . --target install -- -j4

关键在于最后的-j4,作者是这么说的:

The -j4 defines how many processes are used to build LLVM. A good
choice is to use the number of cores + 1.

意思就是,这个-j4代表了可以指定多少个进程来执行这个操作,推荐设置为CPU核心数+1。
但是,要命的是,微软的MSBuild编译器不识别这个子命令,会报以下的错误:
MSBuilder -j4指令报错

之后查了一查,-jx这种子命令是Linux系统下的,因此就装了个VMWare,弄了一个Ubuntu的虚拟机,重配。

Git

Git是什么我就不多说了,自行BaiDu,首先你需要给自己的虚拟机或者Linux电脑里安装Git。
首先,开个控制台(Terminal),在系统根目录(Home)下,输入以下命令:

$ apt-get install git

等待一会儿就能自动安装好。


下载LLVM源码

现在我们已经装好Git了,就可以用Git指令下载安装东西了。
新开一个控制台或者退回到根目录下面,执行下面的命令创建一个临时文件夹(存源码用的),并进入这个文件夹:

$ mkdir LLVM_Temp && cd LLVM_Temp

然后依次执行下面两条指令:

$ git clone https://github.com/llvm-mirror/llvm.git
$ cd llvm

注意,上面这两条里面的第一条会下载llvm的源码,如果带宽不高的话会比较慢,耐心等着,别按键盘上的任何按键。完成之后再敲第二句。

然后,再依次执行下面这四句:

$ cd tools
$ git clone https://github.com/llvm-mirror/clang.git
$ cd ..
$ mkdir build && cd build

ok,到这里为止,下载源码的工作就完了。


CMake

因为后面的编译工作需要用到这个东西,所以在这里说一下它的安装。
进入官方下载地址:https://cmake.org/download/,下载第一个压缩包:
CMake压缩包选择
下载好之后解压到根目录,然后另起一个新的控制台,进到刚刚解压cmake的文件夹,如:

$ cd cmake-3.10.1

并依次执行以下操作:

$ ./configure
$ make
$ make install

执行完这些操作,CMake这个工具就安装完了。


编译

此时,在当前的控制台中,回到根目录,创建一个LLVM文件夹(这个是最后安装LLVM的文件夹),不用进去,然后关掉这个控制台。回到最初的那个控制台,现在应该在build文件夹中,执行下面的指令:

$ cmake -DLLVM_TARGETS_TO_BUILD=host -DCMAKE_INSTALL_PREFIX=~/LLVM -DCMAKE_BUILD_TYPE=MinSizeRel -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=WebAssembly -DLLVM_INCLUDE_EXAMPLES=OFF -DLLVM_INCLUDE_TESTS=OFF -DCLANG_INCLUDE_TESTS=OFF ..

注意:上面这段代码是一行,中间是空格,不是回车。

这个命令实际的功能是编译LLVM源码,过程将持续2~4个小时(SSD高玩请忽略)。


安装

编译完成后,执行下面的操作就可以完成安装了:

cmake --build . --target install -- -j3

这个数字3前面已经提过了,推荐设置为你的CPU核心数+1,我给虚拟机分配了两核,所以是3。


文件链接

这个操作是我学习到的一个额外的点。一般情况下你想运行一个可执行文件,就需要用控制台进入到对应的目录中去,如果想打开控制台直接在全局中使用,就需要做文件链接。
起一个新的控制台,输入以下命令:

$ ln -s ~/LLVM/bin ~/bin

这句指令的作用是将根目录下的bin目录和LLVM的bin目录链接起来,系统接收到去根目录下(全局)找文件的指令时,就会根据映射去LLVM的bin里面找。

更加详细的有关于ln指令的知识请移步:
http://man.linuxde.net/ln


验证

最后一步,验证一下LLVM是否成功编译,成功安装。
随便哪个控制台,在根目录下执行以下命令:

$ llvm-config --targets-built

如果输出中包含WebAssembly这个关键字,那么恭喜你,你机器上的LLVM已经编译、安装成功!


后记

没有做文件链接这一步的同学,需要进入到LLVM的bin目录中去再执行验证的指令。

我的邮箱是:[email protected],CSDN的博客我不常登上来看,有问题的同学可以发邮件来问。

猜你喜欢

转载自blog.csdn.net/Mr_Megamind/article/details/78896717