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文件。

    *转载请注明出处

你可能感兴趣的:(llvm 代码结构)