最近写编译器,要用到LLVM,记录一下在Linux下编译和安装的过程。
准备
LLVM编译器架构的前端是Clang,狭义的LLVM是指它的后端。
我们可以通过SVN来下载LLVM和Clang最新的源码。
首先如果没有安装SVN,使用如下命令安装:
sudo apt-get install subversion
下载
现在开始下载源码,如果用SVN下载失败还可以到官网直接下载压缩包,然后解压到对应的目录里。注意下载的版本。
首先进入到你想要下载LLVM的目录(以下称为myfolder_path):
cd myfolder_path
下载LLVM源码至llvm文件夹:
svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm
进入llvm/tools,下载Clang源码至clang文件夹:
cd myfolder_path/llvm/tools
svn co http://llvm.org/svn/llvm-project/cfe/trunk clang
再进入clang/tools,下载Clang-extra-Tools源码至extra文件夹:
cd myfolder_path/llvm/tools/clang/tools
svn co http://llvm.org/svn/llvm-project/clang-tools-extra/trunk extra
回到llvm/tools,下载链接器(非必须):
cd myfolder_path/llvm/tools
svn co http://llvm.org/svn/llvm-project/lld/trunk lld
还是在这个目录,下载循环和数据优化器(非必须):
cd myfolder_path/llvm/tools
svn co http://llvm.org/svn/llvm-project/polly/trunk polly
到llvm/projects目录,下载Compiler-RT:
cd myfolder_path/llvm/projects
svn co http://llvm.org/svn/llvm-project/compiler-rt/trunk compiler-rt
还有一些非必须的如Libomp, libcxx and libcxxabi和测试套件,这里不需要用到。
编译
不能在源码所在的文件夹直接编译安装,可以在myfolder_path/llvm目录下新建一个build文件夹并进入:
cd myfolder_path/llvm
mkdir build
cd build
用CMake生成Makefile,选择Release而不是Debug是为了缩短编译时间:
cmake -G "Unix Makefiles" -DLLVM_ENABLE_ASSERTIONS=On -DCMAKE_BUILD_TYPE=Release ../
编译:
cmake --build .
或者
make -j4
安装:
cmake --build . --target install
或者
make install
测试
LLVM Tutorial网站上有详细的使用LLVM实现完整编译器的教程。
可以用它的代码生成章节3.6. Full Code Listing的例程来测试是否成功安装好了所需的所有工具。
将它提供的源码toy.cpp拷贝下来,用如下命令编译:
clang++ -g -O3 toy.cpp `llvm-config --cxxflags --ldflags --system-libs --libs core` -o toy
-O3
表示三级优化,注意是大写字母O不是数字0。还有使用llvm-config工具的语句是用反撇号括起来的,不是单引号。
运行:
./toy
如果出现ready>
提示,则运行成功,你可以输入一段Kaleidoscope语言
编写的代码,看看结果。
网友评论