LLVM 入門簡單教程
LLVM 是一種應用廣泛的開源編譯器架構,該架構采用模塊化設計,能夠輕松地新增對編程語言和處理器架構的支持。 LLVM 支持各種各樣的編程語言和前端,其中包括 C/C++、Objective-C、Fortran、Ada、Haskell、Java bytecode、Python、Ruby、ActionScript、GLSL 以及 Rust。 LLVM 是 Illinois 大學發起的一個開源項目,它到底是什么呢?從字面上看,它是一個虛機系統,然而這又和之前為大家所熟知的 JVM 以及 .net Runtime 這樣的虛機不同,它提供了一套中立的中間代碼和編譯基礎設施,并圍繞這些設施提供了一套全新的編譯策略(使得優化能夠在編譯、連接、運行環境執行過程中,以及安裝之后以有效的方式進行)和其他一些非常有意思的功能。
1,下載相關源碼包:
wget -c http://llvm.org/releases/2.7/llvm-2.7.tgz
wget -c http://llvm.org/releases/2.7/clang-2.7.tgz
wget -c http://llvm.org/releases/2.7/llvm-gcc-4.2-2.7.source.tgz
wget -c http://llvm.org/releases/2.7/llvm-test-2.7.tgz
llvm-2.7.tgz是LLVM的主要源碼包
clang-2.7.tgz:Clang前端
llvm-gcc-4.2-2.7.source.tgz:GCC4.2前端,llvm-test-2.7.tgz:LLVM 測試驗證包。
2,接下來就是解壓源碼:
解壓縮LLVM-2.7源碼
tar xzf llvm-2.7.tgz
解壓縮Clang源碼到llvm27/tools/clang/下 (PS:按照指定的目錄執行)
tar xzf llvm-tar/clang-2.7.tgz
cp -r clang-2.7 llvm-2.7/tools/clang
3,標準步驟,configure,make,make install
mkdir llvm-build
cd llvm-build
../llvm-2.7/configure --prefix=/home/lingcc --disable-optimize
make
make install
4.testsuite要特殊對待。
解壓縮llvm-test-2.7.tgz到llvm-2.7/projects/test-suite/下
tar xzf llvm-tar/llvm-test-2.7.tgz
cp -r llvm-test-2.7 llvm-2.7/projects/test-suite
cd llvm-build
../llvm-2.7/configure --prefix=/home/lingcc --disable-optimize
cd llvm-build/projects/test-suite/
gmake
日后的改動,都可以在llvm-build/projects/test-suite/驗證正確性。
5.做個實驗!helloworld
新建一個hello.c文件:
#include
int main()
{
printf("hello,LLVM\n");
return 0;
}
直接生成可執行文件:
clang hello.c -o hello -v
使用-v選項能看到,clang負責生成了匯編文件.s,然后/usr/bin/gcc負責將匯編文件轉為.o文件,進而生成hello可執行文件。
生成LLVM中間表示文件.bc:
clang hello.c -c -o hello.bc -emit-llvm -v
用LLVM虛擬機執行
lli hello.bc
看看輸出結果是不是一致。。。
轉換為可讀模式的LLVM中間表示:
llvm-dis < hello.bc
將LLVM中間表示轉換為匯編語言文件:
llc hello.bc -o hello.s
匯編文件就可以直接使用GCC轉換為可執行文件了
gcc hello.s -o hello.native
執行一下:
./hello.native
顯示結果。。。