[LLVM]LLVM入門 ---llvm 代碼結構

翻譯於(http://llvm.org/docs/GettingStarted.html

以下是一個簡短的介紹代碼佈局:

  • llvm/examples

    這個目錄包含一些簡單的示例,這些演示如何使用LLVM IR和JIT。

  • llvm/include

    • llvm/include/llvm

      這個目錄包含所有的LLVM特定頭文件。這個目錄的子目錄也有不同部分的LLVM:Analysis,CodeGen,Target,Transforms, 等。。。

    • llvm/include/llvm/Support

      這個目錄包含,LLVM提供的泛型支持庫但不一定是特定於LLVM。例如,一些c++ STL utilities和一個命令行選項處理庫頭文件存儲在這裏

    • llvm/include/llvm/Config

      這個目錄包含頭文件配置的配置腳本。這裏包裝了“標準的”UNIX和C頭文件。源碼可以包含這些頭文件,這些頭文件能自動考慮到條件句 #includes 並且配置腳本生成。

  • llvm/lib系統的

    這個目錄包含大部分的LLVM的系統的源文件。在LLVM中,幾乎所有的代碼存在於libraries,這樣使在不同的tools中共享代碼是很容易的。

    • llvm/lib/VMCore/

      此目錄保存着核心LLVM源文件, 這些文件實現了核心的類 比如Instruction 和BasicBlock。

    • llvm/lib/AsmParser/

      此目錄保存着LLVM彙編語言解析器庫的源代碼。

    • llvm/lib/BitCode/

      此目錄保存着讀寫LLVM bitcode的源代碼。

    • llvm/lib/Analysis/

      這個目錄包含各種不同的程序分析,例如 Dominator 信息,Call Graphs,Induction Variables,IntervalIdentification,Natural Loop Identification 等。

    • llvm/lib/Transforms/

      此目錄包含了 從LLVM 到LLVM程序轉換的源代碼,例如Aggressive Dead Code Elimination,Sparse Conditional Constant Propagation,Inlining,Loop Invariant Code Motion,Dead Global Elimination等。

    • llvm/lib/Target/

      這個目錄包含的文件描述了各種目標架構的代碼生成。例如llvm/lib/Target/X86目錄 是 X86機器的描述,而llvm/lib/Target/ARM 實現的是ARM 的後端。

    • llvm/lib/CodeGen/

      這個目錄包含了主要部分的代碼生成器:InstructionSelector,Instruction Scheduling 和Register Allocation

    • llvm/lib/MC/

    • llvm/lib/Debugger/

      這個目錄包含源代碼級調試器庫,它使LLVM program 成爲一個工具,當程序執行的時候,Debugger 可以識別源代碼的位置。

    • llvm/lib/ExecutionEngine/

      這個目錄包含了在運行時解釋和JIT編譯的形式直接執行LLVM字節碼的庫。

    • llvm/lib/Support/

      這個目錄包含llvm/include/ADT/和llvm/include/Support/頭文件相對應的源代碼。

  • llvm/projects

    這個目錄包含的projects 不是嚴格意義上的llvm的部分,但是是LLVM附帶的。這個應該是你創建自己的基於llvm項目的目錄。參見lvm/projects/sample ,如何建立自己的項目。

  • llvm/runtime

    這個目錄包含庫的編譯成LLVM bitcode的庫,這些庫在用clang 前端鏈接程序的時候被使用。大部分的庫是真實庫的精簡版;例如,libc是一個精簡版本的glibc。
    與其他的LLVM套件不同,這個目錄需要LLVM GCC前端編譯。

  • llvm/test

    這個目錄包含功能和迴歸測試和其他LLVM infrastructure的正常的檢查。這些旨在快速運行和覆蓋大量的區域而不是詳盡的。

  • test-suite

    在通常的llvm模塊裏,這不是一個目錄;它是一個一定要被取出的單獨Subversion模塊(通常在projects/test-suite)

  • llvm/tools

    tools 目錄包含了,由libraries 構建生成的可執行文件,這構成了用戶藉口的主要部分。你通常可以通過 輸入 工具名 -help 的方式獲得相應的幫助。一下是對重要工具的簡短的介紹。更多的細節信息在Command Guide

    • bugpoint

      bugpoint用於debug優化的passes或是代碼生成的後端,通過引發問題的最小數量的passes或是指令不管是一個崩潰還是誤編譯來縮小給定的測試用例。見HowToSubmitABug.html更多關於使用 bugpoint 的信息。

    • llvm-ar

      這個歸檔器生成一個關於LLVM bitcode 文件的存檔,可選地與一個索引用於快速查找。

    • llvm-as

      彙編器將人可讀的LLVM 裝配成LLVM bitcode.

    • llvm-dis

      反彙編器將 LLVM bitcode 轉換成 人可都的LLVMllvm-link

    • llvm-link,

      沒什麼驚奇的,就是將多個LLVM模塊到一個單獨的程序。lli是LLVM 的解釋器,可以直接執行LLVM bitcode(儘管很慢)。對於架構,它自持(現在是x86,Sparc 和PowerPC),默認,lli 將會當作一個 Just-In - time 的編譯器運行(如果這個功能被編譯了的),並將執行比解釋器快得多。

    • llc

      llc 是LLVM 後端編譯器。它會將LLVM bitcode 轉換成一個本地代碼彙編文件或是C代碼文件(用 -march=C 的選項)。

    • opt

      opt 讀取LLVM bitcode,應用一系列的LLVM 到LLVM transformations(在命令行中指定),然後生成 合成的bitcode。“opt - help '命令是一個很好的方式在LLVM中獲得一組可用的程序轉換。
      opt 也可以用於運行特定的analysis 在輸入的LLVM bitcode 文件並且打印輸出運行結果。它主要用於調試分析,或是熟悉分析做什麼。

  • llvm/utils

    • codegen-diff

      codegen-diff是一個腳本,用於發現LLC和LLI產生代碼的差異。這是一個有用的工具如果你調試其中之一,假設其他產生正確的輸出。獲取完整的用戶手冊,運行‘perldoc codegen-diff’。

    • emacs/

      emacs目錄包含語法高亮文件,他將會與Emacs和XEmacs editors一起起作用。爲LLVMassembly 文件和TableGen描述文件提供語法高亮支持。關於如何使用語法文件請查閱目錄裏的README文件。

    • getsrcs.sh

      getsrcs.sh腳本找到並輸出所有非生成的源文件。這是有用的如果一個人想要做很多跨目錄的項目。一種方式使用它是運行,例如:xemacs`utils/getsources.sh` 在您頂層的LLVM源代碼樹。

    • llvmgrep

      這個小工具執行egrep -H -n在LLVM 中的每個源文件 並傳遞給llvmprep 的命令行提供的正則表達式。

    • makellvm

      makellvm 腳本編譯當前目錄的所有文件並且編譯鏈接第一個參數的tool。例如,假定您在目錄llvm/lib/Target/Sparc,如果makellvm是在您的路徑,簡單地運行makellvm llC 將會構建當前的目錄,切換到llvm/tools/llc 目錄並且構建它,然後會引發重新鏈接LLC。

    • TableGen/

      TableGen 目錄包含這樣的工具,它用於產生寄存器描述,指令集描述,甚至是有關常見的TableGen描述的彙編程序。

    • vim/

      vim目錄包含文件的語法高亮現實文件,他將伴隨vim編輯器的使用。爲LLVMassembly 文件和TableGen描述文件提供語法高亮支持。關於如何使用語法文件請查閱目錄裏的README文件。
       

    *轉載請註明出處

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