LLVM和Clang被精心组织成如下库:
1.libLLVMCore:它包含了与LLVM IR相关的逻辑:IR构造(数据布局,指令,基础块和函数)和IR验证器。它还提供了pass管理器。
2.libLLVMAnalysis:将多个IR分析步骤进行分组,如别名分析、依赖关系分析、常数折叠、循环信息、内存依赖关系分析和指令简化。
3.libLLVMCodeGen:这实现了与目标无关的代码生成和机器级别(LLVM IR的较低级别版本)的分析和转换。
4.libLLVMTarget:通过对通用目标抽象提供目标机器信息的访问。这些高级抽象提供了libLLVMCodeGen实现的通用后端算法与为下一个库保留的特定的目标逻辑之间的通信网关。
5.libLLVMX86CodeGen:它具有特定于x86架构的代码生成信息、转换和分析传递,这些信息组成了x86后端。注意,不通架构的主机有不同的库,比如LLVMARMCodeGen和LLVMMipsCodeGen,分别实现ARM和MIPS后端。
6.libLLVMSupport:它包括一组通用实用程序。错误、整数和浮点处理、命令行解析、调试、文件支持和字符串操作都是这个library中实现的算法的例子,它在LLVM组件中得到了广泛使用。
7.libclang:这实现了一个C接口,而不是C++ (LLVM代码的默认实现语言)来访问Clang的大部分前端功能——诊断报告、AST遍历、代码完成、游标与源代码之间的映射。既然如此。作为一个C语言的、更简单的接口,它允许用其他语言(如Python)编写的项目更容易地使用Clang功能,尽管C接口的设计更加稳定,并且允许外部项目依赖它。这只包括内部LLVM组件使用的C++接口的一个子集。
8.libclangDriver:它包含编译器驱动工具使用的一组类,用于理解类gcc的命令行,以便准备作业,并为外部工具组织足够的参数,以完成编译的不同步骤。它可以根据目标平台管理不同的编译策略。
9.libclangAnalysis:这是Clang提供的一组前端级分析。它具有CFG和调用图构造、可访问代码、格式字符串安全性等特性。