週末在家裏,把前一段時間略爲作了一些研究的LLVM的文檔翻出來又讀了一下,一時興
起,到llvm的官方站點
裏下了llvm 2.3和 llvm-gcc 4.2,在本地搭了個llvm的實驗環境。
基本的搭建步驟如下:
1。從llvm.org裏下載下來llvm 2.3的source code
2。從llvm.org裏下載下來llvm-gcc 4.2的source code
,在llvm的官方站點裏也提供了
llvm-gcc 4.2在若干個平臺上的binary版本,如果正好有自己平臺相對應的binary文件,
就不需要下載llvm-gcc的源碼進行手動編譯安裝的工作了
3。將llvm 2.3的源碼包解壓縮到指定目錄,我是解壓縮到
/mnt/work/personal/open-source/LLVM/source-code/llvm-2.3
目錄下
然後
cd /mnt/work/personal/open-source/LLVM/source-code/llvm-2.3
./configure
make
make install
編譯時間較長,在Ubuntu 8.04, T7250 Duo Core, 2G內存的本本上,大概花了半個
小時左右的時間。
4。將llvm-gcc 4.2的源碼包解壓縮到指定目錄下,然後在跟該目錄平級的地方
創建一個
OBJ
目錄用來存放編譯llvm-gcc
生成的目標文件。
如,我將llvm-gcc4.2解壓縮到 LLVM/llvm-gcc4.2-2.3.source/
目錄下,所以需要在
LLVM
目錄下再新建一個llvm-gcc-obj
的目錄,用於存放llvm-gcc編譯過程中生成的目標
文件。(注:直接在 llvm-gcc4.2-2.3.source
目錄下編譯會報錯)
cd llvm-gcc-obj/
../llvm-gcc4.2-2.3.source/configure --program-prefix=llvm-
--enable-llvm=/mnt/work/personal/open-source/LLVM/source-code/llvm-2.3
--enable-languages=c,c++
(其中program-prefix是用於確保編譯生成的gcc工具的可執行文件名會有一個llvm-的前綴,而--enable-llvm則是指定步驟
3中編譯llvm生成的目標文件的所在路徑,確保llvm-gcc的編譯過程中能夠找到所需的llvm的目標文件)
make
make install
編譯過程大概也花了有將近二十分鐘。
5。確保llvm-gcc工具和llvm工具的可執行程序所在路徑已經加到了PATH
環境變量中
至此,llvm的實驗環境已經搭建完畢。
現在我們可以使用剛剛搭建好的環境作一個小實驗。
現在有如下內容的c++源文件test.cc
:
#include <stdio.h>
#include <iostream>
using namespace std;
int main()
{
printf( "hello, the world/n" );
cout << "this from C++" << endl;
return 0;
}
實驗步驟:
1。llvm-g++ test.cc -emit-llvm -c -o test.bc
調用llvm-g++的編譯前端爲test.cc生成相應的LLVM bit code 文件。
我們也可以在調用llvm-g++的過程中添加上一些額外的選項,如
llvm-g++ --verbose test.cc -emit-llvm -c -o test.bc
加上--verbose
以確認llvm-g++前端在編譯過程中使用的是正確的頭文件
llvm-g++ -S test.cc --emit-llvm
加上 -S
選項,生成 LLVM的彙編格式文件。
2。基於步驟1生成的bit code文件,我們可以調用lli
來對其解釋執行
lli ./test.bc
3。基於步驟1生成的bit code文件,我們可以調用llvm-dis
來進行反彙編
llvm-dis < test.bc
4。基於步驟1生成的bit code文件,我們還可以調用llc
來爲其生成本地的彙編
文件
llc test.bc -o test.s
5。最後我們可以調用本地g++編譯器爲test.s生成本地機器碼並執行之。
g++ test.s -o test.native
./test.native
【轉】搭建LLVM實驗環境
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.