LLVM/compiler-rt
LLVMコンパイラランタイムライブラリ (compiler-rt)
[編集]はじめに
[編集]compiler-rtはLLVMプロジェクトの一部として、コンパイラとランタイム環境の間の重要な橋渡しを担っています。この章では、compiler-rtプロジェクトの概要と役割について説明します。
compiler-rt ランタイムライブラリ
[編集]"builtins"ライブラリ
[編集]builtinsライブラリは、コード生成やその他のランタイムコンポーネントに必要な低レベルのターゲット固有フックの実装を提供します。たとえば、32ビットターゲット向けにコンパイルする場合、doubleを64ビットの符号なし整数に変換する処理は、"__fixunsdfdi"関数へのランタイムコールにコンパイルされます。builtinsライブラリは、このような低レベルルーチンの最適化された実装を提供します。これらは、ターゲット非依存のC形式または高度に最適化されたアセンブリ形式で提供されます。
"sanitizer runtimes"ライブラリ
[編集]sanitizer runtimesライブラリには、コードをサニタイザーインストルメント化するために必要なランタイムライブラリが含まれます。これには、AddressSanitizer、ThreadSanitizer、UndefinedBehaviorSanitizer、MemorySanitizer、LeakSanitizer、DataFlowSanitizerなどが含まれます。
"profile"ライブラリ
[編集]profileライブラリは、カバレッジ情報を収集するために使用されます。このライブラリを使用して、カバレッジデータを収集し、分析する方法について説明します。
"BlocksRuntime"ライブラリ
[編集]BlocksRuntimeライブラリは、Appleの"Blocks"ランタイムインターフェースのターゲット非依存実装です。このセクションでは、BlocksRuntimeライブラリの役割と利用方法について説明します。
ライセンスとクライアント
[編集]compiler-rtプロジェクトのコードは、MITライセンスとUIUCライセンスの二重ライセンスで提供されています。現在、compiler-rtは主にClangやLLVMプロジェクトによって、ランタイムコンパイラサポートライブラリの実装として使用されています。
プラットフォームサポート
[編集]builtinsライブラリは、i386、X86-64、SPARC64、ARM、PowerPC、PowerPC 64などのマシンアーキテクチャ、およびDragonFlyBSD、FreeBSD、NetBSD、OpenBSD、Linux、DarwinなどのOSで動作することが知られています。ほとんどのサニタイザーランタイムは、現時点ではLinux x86-64のみをサポートしています。
ソース構造
[編集]compiler-rtのディレクトリ構造は、include/、lib/、test/の3つの主要な部分に分かれています。include/には、ユーザープログラムで直接使用できるヘッダーファイルが含まれています。lib/には、ライブラリの実装が含まれており、lib/builtinsディレクトリには、ビルトインルーチンのジェネリックなポータブル実装が含まれています。また、lib/builtins/(arch)には、サポートされるアーキテクチャ向けの最適化された実装が含まれています。test/ディレクトリには、compiler-rtランタイムのテストスイートが含まれています。
ビルド手順
[編集]compiler-rtのビルド手順は、LLVM/Clangとの統合ビルドまたは単独ビルドの両方をサポートしています。ここでは、それぞれの手順について詳しく説明します。
LLVM/Clangとの統合ビルド手順
[編集]LLVM/Clangのビルド
[編集]まず、LLVM/Clangをビルドする必要があります。この手順は、LLVM/Clangのビルド手順に従って行います。通常、以下のような手順になります:
mkdir llvm-project cd llvm-project git clone https://github.com/llvm/llvm-project.git mkdir build cd build cmake -G Ninja ../llvm -DLLVM_ENABLE_PROJECTS="clang;compiler-rt" -DCMAKE_BUILD_TYPE=Release ninja
compiler-rtのビルド
[編集]LLVM/Clangのビルドが完了したら、次にcompiler-rtをビルドします。compiler-rtは、LLVM/Clangのサブプロジェクトとしてビルドされます。
cd llvm-project/llvm/build ninja compiler-rt
単独でのビルド手順
[編集]単独でのビルド
[編集]LLVM/Clangとは独立してcompiler-rtをビルドする場合は、以下の手順に従います。
git clone https://github.com/llvm/llvm-project.git cd llvm-project mkdir build-compiler-rt cd build-compiler-rt cmake ../compiler-rt -DLLVM_CMAKE_DIR=/path/to/llvm-project/llvm/cmake/modules make
テストの実行方法とライブラリのインストール手順
[編集]テストの実行
[編集]テストを実行するには、以下のコマンドを使用します。
cd llvm-project/llvm/build ninja check-all
ライブラリのインストール
[編集]ライブラリをシステムにインストールする場合は、以下のコマンドを使用します。
cd llvm-project/llvm/build ninja install
これで、compiler-rtが正常にビルドされ、テストされ、必要に応じてシステムにインストールされました。