環境:
- Ubuntu 22.04.2 LTS
- x86_64
- メモリ 8GB
以下のパッケージは apt で導入したもの。
- GCC 11.3.0
- Clang 15.0.6
GCC で失敗したよ
@k0kubun, LLVM/Clang 14をビルドする, Qiita を参考に GCC で LLVM/Clang をビルドした結果、リンカがメモリを食いつぶして失敗する。
top コマンドで観察する限りリンカは実メモリ 6GB 以上の大きさにまで膨れる。
で、今どき 8GB メモリじゃビルドできないパッケージもあるんだろうなぁ、と Twitter で何気なくつぶやいたところ、親切にも 8GB でもビルドできるとの知らせを @omniroid_dev さんより受けた。
Clang で成功したよ
そのツイートにあったリンク tinyreminder, Raspberry PiでのLLVMツールチェインのビルド, Zenn を参考にして Clang でビルドしたところ成功した。
その記事は、環境がいくつか異なるため Arm/Raspberry Pi OS にいくつか項目を変更した。
パッケージのインストール:
$ sudo apt install cmake ninja-build binutils-dev \
clang-15 libc++-15-dev libc++abi-15-dev lld-15 llvm-15
環境変数の設定:
export CC=clang-15
export CXX=clang++-15
export AR=llvm-ar-15
export AS=llvm-as-15
#export LD=ld.mold
export LD=ld.lld-15
export NM=llvm-nm-15
export RANLIB=llvm-ranlib-15
export STRIP=llvm-strip-15
export OBJCOPYY=llvm-objcopy-15
export OBJDUMP=llvm-objdump-15
export READELF=llvm-readelf-15
export C_FLAGS="-O3 -mcpu=native -pipe"
export CXX_FLAGS="-O3 -mcpu=native -pipe"
export LDFLAGS=""
ビルド:
$ cmake -G Ninja \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/usr/local \
-DLLVM_BINUTILS_INCDIR=/usr/include/ \
-DBUILD_SHARED_LIBS=OFF \
-DLLVM_BUILD_LLVM_DYLIB=OFF \
-DLLVM_CCACHE_BUILD=OFF \
-DLLVM_ENABLE_LIBCXX=ON \
-DLLVM_ENABLE_LLD=ON \
-DLLVM_ENABLE_LTO=Thin \
-DLLVM_ENABLE_PIC=ON \
-DLLVM_INSTALL_UTILS=ON \
-DLLVM_LINK_LLVM_DYLIB=OFF \
-DLLVM_PARALLEL_COMPILE_JOBS=2 \
-DLLVM_PARALLEL_LINK_JOBS=1 \
-DLLVM_ENABLE_PROJECTS="bolt;clang;clang-tools-extra;cross-project-tests;libclc;lld;polly;pstl" \
-DLLVM_ENABLE_RUNTIMES="compiler-rt;libc;libcxx;libcxxabi;libunwind" \
-DLLVM_ENABLE_THREADS=ON \
-DLLVM_TARGET_ARCH=x86_64 \
-DLLVM_TARGETS_TO_BUILD=X86 \
../llvm