本文由博主原創,轉載請註明出處(保留此處和鏈接):
IT人生(http://blog.csdn.net/robinblog/article/details/17339027)
llvm官方資料:
在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。
svn獲取最新llvm,並編譯:
其實鏈接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/projects
8.開始在llvm/projects目錄下獲取Compiler-RT源碼:
$ svn co http://llvm.org/svn/llvm-project/compiler-rt/trunk compiler-rt
9.開始在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 llvm
11. 好了,我們準備工作已經做完,可以開始編譯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
獲取自己需要的Release版本,並編譯:
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
然後構建llvm工程的目錄結構,在此構建如svn方式的結構:
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 2
A1:
當遇到這個問題時,我們需要重新來執行命令llvm-3.3/build$ cmake -DCMAKE_INSTALL_PREFIX=_install/ ../llvm/ (注意,這裏要保留上次在build下生成的文件),第二次cmake之後,我們再來執行make && make install 就可以了。