乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      llvm之旅第一站 - 編譯及簡單使用

       quasiceo 2017-12-14



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

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


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

      1.png



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

      2.png



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

      目前l(fā)lvm有很多的子項目,針對不同的需求進行了深入的擴展,具體參考llvm官方首頁。

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


      llvm下載及編譯


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


      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. 遷出編譯運行庫 

      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




      更詳細的編譯選項參考 Getting Started with the LLVM System

      編譯鏈中工具的具體說明參考 LLVM Command Guide



      工具鏈使用 


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

      創(chuàng)建簡單的c語言源碼文件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


      運行可執(zhí)行文件

      ./test



      運行字節(jié)碼文件

      ./lli test.bc



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

      ./llvm-dis < test.bc | less



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

      ./llc test.bc -o test.s



      參考文獻:


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

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

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多