【轉】搭建LLVM實驗環境

週末在家裏,把前一段時間略爲作了一些研究的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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章