インストール - LLVM

提供:MochiuWiki : SUSE, EC, PCB
2022年10月25日 (火) 15:34時点におけるWiki (トーク | 投稿記録)による版 (→‎LLVMのインストール)
ナビゲーションに移動 検索に移動

概要



LLVMのインストール

パッケージ管理システムからインストール

sudo zypper install 


ソースコードからインストール

LLVMのGithubから、LLVMのソースコードをダウンロードする。
ダウンロードするファイルは、llvm-project-<バージョン>.src.tar.xzである。

ダウンロードしたLLVMのソースコードを解凍する。

tar xf llvm-project-<バージョン>.src.tar.xz


LLVMのビルドディレクトリを作成する。

cd llvm-project
mkdir build && cd build


LLVMをビルドおよびインストールする。

cmake -G "Unix Makefiles" \
-DCMAKE_CXX_COMPILER=<c++20に対応したg++コンパイラのパス> \
-DLLVM_TARGETS_TO_BUILD="X86;AArch64" \  # x86, x86-64, AArch64向けのLLVMをビルドする場合(デフォルトは全てのアーキテクチャ)
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=<LLVMのインストールディレクトリ> \
-DLLVM_ENABLE_PROJECTS="clang;clang-tools-extra;compiler-rt;flang;libclc;libcxx;libcxxabi;libunwind;lld;lldb;mlir;openmp;polly" \
../llvm

make -j $(nproc)
make install

# または
cmake -G Ninja \
-DCMAKE_CXX_COMPILER=<c++20に対応したg++コンパイラのパス> \
-DLLVM_TARGETS_TO_BUILD="X86;AArch64" \  # x86, x86-64, AArch64向けのLLVMをビルドする場合(デフォルトは全てのアーキテクチャ)
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=<LLVMのインストールディレクトリ> \
-DLLVM_ENABLE_PROJECTS="clang;clang-tools-extra;compiler-rt;flang;libclc;libcxx;libcxxabi;libunwind;lld;lldb;mlir;openmp;polly" \
../llvm

ninja -j $(nproc)
ninja install


ビルド向けオプションは、以下の通りである。

  • PYTHON_EXECUTABLE
    Pythonへのパスを渡すことで、CMakeに特定のPythonのバージョンを使用する。
    デフォルトでは環境変数PATHにあるPythonが使用される。

  • LLVM_TARGETS_TO_BUILD
    ビルドするターゲットを選択する。
    これは、LLVMにどのターゲットをリンクするかを制御するセミコロンで区切られたリストである。
    デフォルトは、LLVM_ALL_TARGETSとして定義されている。
    デフォルトでは、以下のターゲットが含まれる。
    AArch64, AMDGPU, ARM, AVR, BPF, Hexagon, Lanai, Mips, MSP430, NVPTX, PowerPC, RISCV, Sparc, SystemZ, WebAssembly, X86, XCore

  • LLVM_ENABLE_DOXYGEN
    ソースコードからdoxygenベースのドキュメントをビルドする。
    これは多くの出力を生成するため、デフォルトでは無効になっている。

  • LLVM_ENABLE_PROJECTS
    他のLLVMサブプロジェクトの内、どのプロジェクトを追加でビルドするかをセミコロンで区切ったリストで指定する。
    デフォルトでは空のリストである。
    ビルドできるプロジェクトは、以下の通りである。
    clang、clang-tools-extra、compiler-rt、cross-project-tests、flang、libc、libclc、libcxx、libcxxabi、libunwind、lld、lldb、mlir、openmp、polly、pstl

  • LLVM_ENABLE_SPHINX
    Sphinxベースのドキュメントをビルドする。
    これは多くの出力を生成するため、デフォルトでは無効になっている。
    Sphinx 1.5以降を推奨する。

  • LLVM_BUILD_LLVM_DYLIB
    libLLVM.soを生成する。
    このライブラリには、LLVMコンポーネントのデフォルトセットが含まれており、LLVM_DYLIB_COMPONENTSでオーバーライドすることができる。
    デフォルトでは、ほとんどのLLVMが含まれており、tools/llvm-shlib/CMakelists.txtで定義されている。
    このオプションはWindowsでは使用できない。

  • LLVM_OPTIMIZED_TABLEGEN
    リリーステーブル生成器を構築する。


LLVMのインストール完了後、~/.profileファイル等に環境変数を設定する。

export PATH="/<LLVMのインストールディレクトリ>/bin:$PATH"
export LLVM_INSTALL_DIR="<LLVMのインストールディレクトリ>"

export LDFLAGS="-L/<LLVMのインストールディレクトリ>/lib"       # 不要の可能性あり
export CPPFLAGS="-I/<LLVMのインストールディレクトリ>/include"  # 不要の可能性あり



LLVMのクロスコンパイル

LLVMの実行ファイルやライブラリにおいて、ビルドされるプラットフォームとは異なるプラットフォームでホストするためにインストールすることができる。
クロスコンパイル向けのビルドファイルを生成するために、-DCMAKE_TOOLCHAIN_FILEオプションを、LLVMのインストール時に使用するコンパイラフラグや変数を定義することができる。

以下の例では、iOSをターゲットとしたLLVMをクロスビルドおよびインストールしている。

mkdir build && cd build

cmake -G Ninja "Unix Makefiles"                                                           \
               -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=<LLVMのインストールディレクトリ> \
               -DCMAKE_OSX_ARCHITECTURES="armv7;armv7s;arm64"                             \
               -DCMAKE_TOOLCHAIN_FILE=<PATH_TO_LLVM>/cmake/platforms/iOS.cmake            \
               -DLLVM_BUILD_RUNTIME=Off -DLLVM_INCLUDE_TESTS=Off                          \
               -DLLVM_INCLUDE_EXAMPLES=Off -DLLVM_ENABLE_BACKTRACES=Off                   \
               ../llvm

ninja -j $(nproc)
ninja install