“ compiler-rt”运行时runtime库
“ compiler-rt”運(yùn)行時(shí)runtime庫(kù)
編譯器-rt項(xiàng)目包括:
? Builtins-一個(gè)簡(jiǎn)單的庫(kù),提供了代碼生成和其他運(yùn)行時(shí)runtime組件所需的特定于目標(biāo)的低級(jí)接口。例如,當(dāng)為32位目標(biāo)進(jìn)行編譯時(shí),將雙精度數(shù)轉(zhuǎn)換為64位無(wú)符號(hào)整數(shù)將編譯為對(duì)“ __fixunsdfdi”函數(shù)的運(yùn)行時(shí)runtime調(diào)用。內(nèi)置庫(kù)以與目標(biāo)無(wú)關(guān)的C形式或經(jīng)過(guò)高度優(yōu)化的程序集的形式提供了此示例和其他低級(jí)示例的優(yōu)化實(shí)現(xiàn)。
內(nèi)建函數(shù)為受支持的目標(biāo)上的libgcc接口提供了全面支持,并為匯編中的常用功能(如__floatundidf)提供了高性能的手動(dòng)調(diào)試實(shí)現(xiàn),這些實(shí)現(xiàn)比libgcc實(shí)現(xiàn)快得多。通過(guò)添加內(nèi)置目標(biāo)來(lái)支持新目標(biāo)應(yīng)該很容易,因?yàn)樵撃繕?biāo)需要添加新的示例。
? sanitizer運(yùn)行時(shí)runtime-使用sanitizer工具運(yùn)行代碼所需的運(yùn)行時(shí)runtime庫(kù)。這包括以下運(yùn)行時(shí)runtime:
? AddressSanitizer
? ThreadSanitizer
? UndefinedBehaviorSanitizer
? MemorySanitizer
? LeakSanitizer
? DataFlowSanitizer
? profile -用于收集覆蓋范圍信息的庫(kù)。
? BlocksRuntime-蘋果“ Blocks”運(yùn)行時(shí)runtime接口的與目標(biāo)無(wú)關(guān)的實(shí)現(xiàn)。
根據(jù)MIT許可證和UIUC許可證(類似于BSD的許可證),compiler-rt項(xiàng)目中的所有代碼均具有雙重許可。
客戶群
當(dāng)前,Clang 和LLVM項(xiàng)目主要將editor -rt用作運(yùn)行時(shí)runtime編譯器支持庫(kù)的實(shí)現(xiàn)。有關(guān)將C ++編譯器與Clang一起使用的更多信息,請(qǐng)參見Clang 入門 文檔。
平臺(tái)支援
已知buildin可在以下平臺(tái)上工作:
? 硬件架構(gòu):i386,X86-64,SPARC64,ARM,PowerPC,PowerPC 64。
? 操作系統(tǒng):AuroraUX,DragonFlyBSD,FreeBSD,NetBSD,Linux,Darwin。
大多數(shù)sanitizer運(yùn)行時(shí)runtime僅在Linux x86-64上受支持。有關(guān)更多詳細(xì)信息,請(qǐng)參見Clang文檔中特定于工具的文檔。
源結(jié)構(gòu)
編譯器-rt的目錄結(jié)構(gòu)的簡(jiǎn)短說(shuō)明:
為了進(jìn)行測(cè)試,可以構(gòu)建通用庫(kù)和優(yōu)化庫(kù)。通過(guò)將優(yōu)化版本覆蓋到通用庫(kù)上來(lái)形成優(yōu)化庫(kù)。當(dāng)然,某些體系結(jié)構(gòu)具有附加功能,因此優(yōu)化庫(kù)可能具有通用版本中找不到的功能。
? include /包含可以包含在用戶程序中的header(例如,用戶可以直接從sanitizer運(yùn)行時(shí)runtime調(diào)用某些函數(shù))。
? lib /包含庫(kù)實(shí)現(xiàn)。
? lib / builtins是內(nèi)置示例的通用可移植實(shí)現(xiàn)。
? lib / builtins /(arch)為支持的體系結(jié)構(gòu)優(yōu)化了某些示例的版本。
? test /包含用于compile-rt運(yùn)行時(shí)runtime的測(cè)試套件。
得到它并參與其中!
通常,需要構(gòu)建LLVM / Clang才能構(gòu)建Compiler-rt。可以將其與llvm和clang一起構(gòu)建,也可以分別構(gòu)建。
要將其構(gòu)建在一起,只需將compile-rt添加到-DLLVM_ENABLE_PROJECTS =option to cmake。
要單獨(dú)構(gòu)建它,首先分別 構(gòu)建LLVM 以獲得llvm-config二進(jìn)制文件,然后運(yùn)行:
? cd llvm-project
? mkdir build-compiler-rt
? cd build-compiler-rt
? cmake …/compiler-rt -DLLVM_CONFIG_PATH = / path / to / llvm-config
? make
sanitizer運(yùn)行時(shí)runtime的測(cè)試已移植到 llvm-lit,并通過(guò)LLVM / Clang / compiler-rt構(gòu)建樹中的make check-all命令運(yùn)行。
使用LLVM / Clang / compiler-rt或獨(dú)立的compile-rt構(gòu)建樹中的make install命令將編譯器RT庫(kù)安裝到系統(tǒng)中。
compile-rt沒(méi)有自己的郵件列表,如果有任何疑問(wèn),請(qǐng)通過(guò)電子郵件發(fā)送llvm-dev郵件列表。提交到editor-rt SVN模塊的信息將自動(dòng)發(fā)送到 llvm-commits 郵件列表。
總結(jié)
以上是生活随笔為你收集整理的“ compiler-rt”运行时runtime库的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Clang:LLVM的C语言家族前端
- 下一篇: 多级中间表示概述MLIR