IT人生(http://blog.csdn.net/robinblog/article/details/17339027)
在2011十月份的时候,有人向我推荐有关llvm的资料,主要是下面三个链接:
1. http://llvm.org/docs/GettingStarted.html
2. http://llvm.org/docs/LangRef.html
3. http://llvm.org/docs/WritingAnLLVMPass.html
最近重新拾回来有点五味杂瓶,不知道说什么好了,在此说一下llvm工程的构建吧,参考上面链接1。
其实链接1的Getting Started Quickly (A Summary) 已经说的很清楚了,在此算作翻译。
1.確認自己的工作目錄,在此默認目錄爲:
robin@ubuntu:~/workspace/llvm_wspace$2.在llvm官網,默認使用svn提供最新llvm版本下載,而且目前最新爲llvm-3.4,所以在此新建llvm-.3.4目錄:
$ mkdir llvm-3.4/3.進入目錄llvm-3.4 :
$ cd llvm-3.4/4.開始在llvm-3.4目錄下獲取llvm源碼:
$ svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm
5. 進入目錄llvm/tools:
$ cd llvm/tools/6.開始在llvm/tools/目錄下獲取clang前端源碼:
$ svn co http://llvm.org/svn/llvm-project/cfe/trunk clang
7.進入目錄llvm/projects:
$ cd ../../llvm/projects8.開始在llvm/projects目錄下獲取Compiler-RT源碼:
$ svn co http://llvm.org/svn/llvm-project/compiler-rt/trunk compiler-rt9.開始在llvm/projects目錄下獲取Test Suite源碼(下载过程比较漫长,test-suite下载是可选的,也就是说,在此可以不下载):
$ svn co http://llvm.org/svn/llvm-project/test-suite/trunk test-suite
10.進入目錄llvm-3.4,新建build目錄:
$ cd ../../ $ mkdir build
到此爲止,我們的robin@ubuntu:~/workspace/llvm_wspace/llvm-3.4$目錄下,含有llvm 和 build兩個目錄:
robin@ubuntu:~/workspace/llvm_wspace/llvm-3.4$ ls build llvm11. 好了,我們準備工作已經做完,可以開始編譯llvm的工程了。編譯llvm有congfigure和cmake兩種方法,llvm官網使用的是configure方法,本人在此選擇CMake吧。 CMake優點
进入build目录:
$ cd build/执行如下cmake命令:(注意:llvm-3.4需要CMake 2.8.8及以上版本编译)
$ cmake -DCMAKE_INSTALL_PREFIX=_install/ ../llvm/
执行make和make install命令:
$ make && make install
llvm各種Release版本 的下載鏈接爲:http://llvm.org/releases/download.html
打開該鏈接,我們我們就會看到LLVM 3.3及其較低版本的Release,在此以LLVM3.3爲例。
和svn需要下載的一樣,我們分別下載:Clang source code、LLVM source code、Compiler RT source code、LLVM Test Suite(可以不下載)。
和svn的第1,2,3步一样,只是我们在robin@ubuntu:~/workspace/llvm_wspace$ 下建立llvm-3.3目录:
robin@ubuntu:~/workspace/llvm_wspace$ mkdir llvm-3.3/ robin@ubuntu:~/workspace/llvm_wspace$ cd llvm-3.3/把我们上面下载的四个文件放置到llvm-3.3目录下,并解压:
robin@ubuntu:~/workspace/llvm_wspace/llvm-3.3$ ls cfe-3.3.src.tar.gz compiler-rt-3.3.src.tar.gz llvm-3.3.src.tar.gz test-suite-3.3.src.tar.gz
解压后,得到文件如下:
robin@ubuntu:~/workspace/llvm_wspace/llvm-3.3$ ls cfe-3.3.src cfe-3.3.src.tar.gz compiler-rt-3.3.src compiler-rt-3.3.src.tar.gz llvm llvm-3.3.src.tar.gz test-suite-3.3.src test-suite-3.3.src.tar.gz
1.重命名llvm-3.3.src为llvm:
$ mv llvm-3.3.src/ llvm/
2.重命名 cfe-3.3.src为clang:
$ mv cfe-3.3.src/ clang/
3.重命名 compiler-rt-3.3.src 为 compiler-rt:
$ mv compiler-rt-3.3.src/ compiler-rt/
4.重命名 test-suite-3.3.src 为 test-suite:
$ mv test-suite-3.3.src/ test-suite/
5. 把clang/ 移动到llvm/tools/下:
$ mv clang/ llvm/tools/
6.把 compiler-rt/ 移动到llvm/projects/下:
$ mv compiler-rt/ llvm/projects/
7.把test-suite/ 移动到 llvm/projects/下:
$ mv test-suite/ llvm/projects/
8.到此为止,我们已经构建好llvm-3.3的目录结构了,现在重复上面svn版本的第10和11步来编译就可以了(要把对应的llvm3.4改为3.3哦)。
注意:我在使用第8步编译llvm-3.3时,遇到了下面问题:
Q1:
make[2]: *** No rule to make target `lib/Target/AArch64/AArch64GenSubtargetInfo.inc', needed by `lib/Target/AArch64/Utils/CMakeFiles/LLVMAArch64Utils.dir/AArch64BaseInfo.cpp.o'. Stop. make[1]: *** [lib/Target/AArch64/Utils/CMakeFiles/LLVMAArch64Utils.dir/all] Error 2 make: *** [all] Error 2A1:
当遇到这个问题时,我们需要重新来执行命令llvm-3.3/build$ cmake -DCMAKE_INSTALL_PREFIX=_install/ ../llvm/ (注意,这里要保留上次在build下生成的文件),第二次cmake之后,我们再来执行make && make install 就可以了。