LLVM 入門簡單教程

jopen 12年前發布 | 68K 次閱讀 LLVM C/C++開發

    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
 顯示結果。。。

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!