日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

llvm之旅第一站 - 編譯及簡(jiǎn)單使用

 quasiceo 2017-12-14



llvm(low level virtual machine)是一個(gè)開(kāi)源編譯器框架,最早的時(shí)候是Illinois的一個(gè)研究項(xiàng)目,主要負(fù)責(zé)人是Chris Lattner,他現(xiàn)在就職于Apple. Apple 目前也是llvm項(xiàng)目的主要贊助者之一。

llvm有一個(gè)表達(dá)形式很好的IR語(yǔ)言,高度模塊化的結(jié)構(gòu),因此它可以作為多種語(yǔ)言的后端,提供與編程語(yǔ)言無(wú)關(guān)的優(yōu)化和針對(duì)多種CPU的代碼生成功能。


傳統(tǒng)編譯器分三個(gè)階段: 

1.png



llvm也分三個(gè)階段,但是設(shè)計(jì)上略微的有些區(qū)別:

2.png



不同的前端后端使用統(tǒng)一的 LLVM IR ,如果需要支持新的編程語(yǔ)言或者新的設(shè)備平臺(tái),只需要開(kāi)發(fā)對(duì)應(yīng)的前端和后端即可。同時(shí)基于 LLVM  IR 我們可以很快的開(kāi)發(fā)自己的編程語(yǔ)言。

目前l(fā)lvm有很多的子項(xiàng)目,針對(duì)不同的需求進(jìn)行了深入的擴(kuò)展,具體參考llvm官方首頁(yè)。

其中的Clang子項(xiàng)目實(shí)現(xiàn)了支持C/C++/Objective-C的優(yōu)秀編譯器前端,官方數(shù)據(jù)表明,在某些編譯環(huán)境下,其編譯速度要比gcc快三倍。


llvm下載及編譯


后續(xù)的系列文章我們都將以Clang作為前端,Mac系統(tǒng)上進(jìn)行開(kāi)發(fā)。(Linux 及Window系統(tǒng)上的下載及編譯過(guò)程與此相同)


1. 遷出LLVM 

1
2
cd where-you-want-llvm-to-live
$ svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm


0.png


 2. 遷出Clang 

1
2
3
cd where-you-want-llvm-to-live
cd llvm/tools
$ svn co http://llvm.org/svn/llvm-project/cfe/trunk clang


3.png


 3. 遷出編譯運(yùn)行庫(kù) 

1
2
3
cd where-you-want-llvm-to-live
cd llvm/projects
$ svn co http://llvm.org/svn/llvm-project/compiler-rt/trunk compiler-rt


4.png



 4.編譯源碼 (Release)  

1
2
3
mkdir build
cd build
$ cmake -DCMAKE_BUILD_TYPE:String=Release ../llvm/


5.png


6.png


也可以:

1
2
3
cd llvm
$ ./configure
make


推薦使用cmake編譯。



build目錄下存放著編譯后的文件: 


7.png



bin中存放著完整的工具鏈:


8.png




更詳細(xì)的編譯選項(xiàng)參考 Getting Started with the LLVM System

編譯鏈中工具的具體說(shuō)明參考 LLVM Command Guide



工具鏈?zhǔn)褂?nbsp;


編譯完成后,build/bin目錄下存放了完整的編譯工具鏈,使用這些工具就可以完成源碼的編譯。

創(chuàng)建簡(jiǎn)單的c語(yǔ)言源碼文件test.c

1
2
3
4
5
#include <stdio.h>
int main() {
  printf("hello llvm\n");
  return 0;
}


編譯可執(zhí)行文件

./clang test.c -o test



生成LLVM 字節(jié)碼文件

./clang -O3 -emit-llvm test.c -c -o test.bc



生成LLVM  可視化字節(jié)碼文件

./clang -O3 -emit-llvm test.c -S -o test.ll


運(yùn)行可執(zhí)行文件

./test



運(yùn)行字節(jié)碼文件

./lli test.bc



反匯編字節(jié)碼文件

./llvm-dis < test.bc | less



編譯字節(jié)碼為匯編文件

./llc test.bc -o test.s



參考文獻(xiàn):


Getting Started with the LLVM System - http:///docs/GettingStarted.html

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多