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