LLVMもついに10まで来ましたGCCを追い越してしましましたね(?)。今回はLLVMをソースからビルドしてみたいと思います。今回はビルドツールにmake
ではなくninja
を使うのでインストールしてない場合はやっておいてください。
必要なもの
-
CMake (>=3.4.3)
-
GCC (>=5.1.0)
-
python (>=2.7)
-
zlib (>=1.2.3.4)
-
make (3.79, 3.79.1) <- 今回は不要
-
ninja <- 今回は必要
- ninja-github : リポジトリ
- ninja-org : 公式サイト
-
LLVMビルドに必要なソフトウェア一覧
筆者のマシン環境はコア数3, メモリ10GBのVM(ubuntu18.04.4 LTS)で4時間ほどでビルドできました。できるだけ高スペックマシンでやることをおすすめします。
ソースコードをダウンロード && 展開
LLVM 9.0.1まではプロジェクト別にソースコードをダウンロードして適切なディレクトリに移動させる必要がありました。しかし、LLVM 10.0.0からllvm-project-10.0.0.tar.xz
という一つのファイルが全プロジェクトを含んでおり楽になりました。ビルド時に-DLLVM_ENABLE_PROJECTS
でビルド対象プロジェクトを選択することができます。
wget https://github.com/llvm/llvm-project/releases/download/llvmorg-10.0.0/llvm-project-10.0.0.tar.xz
tar xf llvm-project-10.0.0.tar.xz
ビルド・インストールディレクトリを作成
build
: ビルドに使用するディレクトリ
install
: 現在ディレクトリ直下にinstall
を作成し、そこにインストールする。他にインストール場合は任意のものに変える
mkdir build install
ビルド
make
の代わりにninja
を指定していることに注意してください。ビルドの並列数を指定する場合make -j16
のように-j
オプションで指定されますが、ninjaの場合はコア数を自動認識して並列ビルドされるようです。勝手に並列ビルドされてはメモリが心配なので-DLLVM_PARALLEL_LINK_JOBS="1"
でリンク時のみ非並列で動作させるように指定します。
pushd ./build
cmake -G "Ninja" \
-DCMAKE_INSTALL_PREFIX=./install \
-DCMAKE_C_COMPILER="gcc" \
-DCMAKE_CXX_COMPILER="g++" \
-DCMAKE_BUILD_TYPE="Release" \
-DLLVM_PARALLEL_LINK_JOBS="1" \
-DLLVM_ENABLE_PROJECTS="clang;clang-tools-extra;compiler-rt;libc;libclc;libcxx;libcxxabi;libunwind;lld;lldb;openmp;parallel-libs;polly;pstl" \
../llvm-project-10.0.0/llvm
ninja
ninja install
popd
余談ですがビルドにmake
ではなくninja
を使用したのはドキュメントに「ninja
のほうが早くビルドできるよ」と書いてあったためです。(恥ずかしながら今までninja
を知らなかったのです。) LLVMのビルドは巷でも(?)高スペックが必要とされているらしいのでninjaをおすすめします。
参考
https://llvm.org/docs/CMake.html
https://llvm.org/docs/GettingStarted.html