“ compiler-rt”运行时runtime库
编译器-rt项目包括:
- Builtins-一个简单的库,提供了代码生成和其他运行时runtime组件所需的特定于目标的低级接口。例如,当为32位目标进行编译时,将双精度数转换为64位无符号整数将编译为对“ __fixunsdfdi”函数的运行时runtime调用。内置库以与目标无关的C形式或经过高度优化的程序集的形式提供了此示例和其他低级示例的优化实现。
内建函数为受支持的目标上的libgcc接口提供了全面支持,并为汇编中的常用功能(如__floatundidf)提供了高性能的手动调试实现,这些实现比libgcc实现快得多。通过添加内置目标来支持新目标应该很容易,因为该目标需要添加新的示例。
- sanitizer运行时runtime-使用sanitizer工具运行代码所需的运行时runtime库。这包括以下运行时runtime:
- AddressSanitizer
- ThreadSanitizer
- UndefinedBehaviorSanitizer
- MemorySanitizer
- LeakSanitizer
- DataFlowSanitizer
- profile -用于收集覆盖范围信息的库。
- BlocksRuntime-苹果“ Blocks”运行时runtime接口的与目标无关的实现。
根据MIT许可证和UIUC许可证(类似于BSD的许可证),compiler-rt项目中的所有代码均具有双重许可。
客户群
当前,Clang 和LLVM项目主要将editor -rt用作运行时runtime编译器支持库的实现。有关将C ++编译器与Clang一起使用的更多信息,请参见Clang 入门 文档。
平台支援
已知buildin可在以下平台上工作:
- 硬件架构:i386,X86-64,SPARC64,ARM,PowerPC,PowerPC 64。
- 操作系统:AuroraUX,DragonFlyBSD,FreeBSD,NetBSD,Linux,Darwin。
大多数sanitizer运行时runtime仅在Linux x86-64上受支持。有关更多详细信息,请参见Clang文档中特定于工具的文档。
源结构
编译器-rt的目录结构的简短说明:
为了进行测试,可以构建通用库和优化库。通过将优化版本覆盖到通用库上来形成优化库。当然,某些体系结构具有附加功能,因此优化库可能具有通用版本中找不到的功能。
- include /包含可以包含在用户程序中的header(例如,用户可以直接从sanitizer运行时runtime调用某些函数)。
- lib /包含库实现。
- lib / builtins是内置示例的通用可移植实现。
- lib / builtins /(arch)为支持的体系结构优化了某些示例的版本。
- test /包含用于compile-rt运行时runtime的测试套件。
得到它并参与其中!
通常,需要构建LLVM / Clang才能构建Compiler-rt。可以将其与llvm和clang一起构建,也可以分别构建。
要将其构建在一起,只需将compile-rt添加到-DLLVM_ENABLE_PROJECTS =option to cmake。
要单独构建它,首先分别 构建LLVM 以获得llvm-config二进制文件,然后运行:
- cd llvm-project
- mkdir build-compiler-rt
- cd build-compiler-rt
- cmake ../compiler-rt -DLLVM_CONFIG_PATH = / path / to / llvm-config
- make
sanitizer运行时runtime的测试已移植到 llvm-lit,并通过LLVM / Clang / compiler-rt构建树中的make check-all命令运行。
使用LLVM / Clang / compiler-rt或独立的compile-rt构建树中的make install命令将编译器RT库安装到系统中。
compile-rt没有自己的邮件列表,如果有任何疑问,请通过电子邮件发送llvm-dev邮件列表。提交到editor-rt SVN模块的信息将自动发送到 llvm-commits 邮件列表。