mold 是一个多线程的链接器,比 gold/ld/lld 快不只一个数量级
1. 构建高版本的 GCC
不过低版本的 gcc(8.3肯定不行) 不支持,想要使用,需要编一个高版本的。我这用的是 gcc 12.2,构建脚本:
#!/bin/bash
set -ex
./contrib/download_prerequisites
./configure --prefix=`pwd`/install --disable-bootstrap --disable-multilib
make -j`nproc`
make install
2. 构建 mold
当然,项目的 readme.md 在 这里 已经描述了怎么构建,还是贴一下我的构建过程:
#!/bin/bash
set -ex
[ ! -d build ] && cd mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release .. \
-DCMAKE_C_COMPILER=/workspace/tools/04.gcc12/install/bin/gcc \
-DCMAKE_CXX_COMPILER=/workspace/tools/04.gcc12/install/bin/g++ \
-DCMAKE_INSTALL_PREFIX=/workspace/tools/03.mold/install
cmake --build . -j $(nproc)
cmake --install .
3. 构建 clang
构建过程:
#!/bin/bash
[ ! -d build ] && mkdir build
cd build
export LD_LIBRARY_PATH=/workspace/tools/04.gcc12/install/lib:/workspace/tools/04.gcc12/install/lib64:$LD_LIBRARY_PATH
cmake -G Ninja \
../llvm -DLLVM_TARGETS_TO_BUILD="X86" \
-DLVM_USE_LINKER=mold \
-DCMAKE_BUILD_TYPE=Debug \
-DLLVM_ENABLE_ASSERTIONS=ON \
-DCMAKE_C_COMPILER=/workspace/tools/04.gcc12/install/bin/gcc \
-DCMAKE_CXX_COMPILER=/workspace/tools/04.gcc12/install/bin/g++ \
-DCMAKE_C_FLAGS="-O3 -fuse-ld=mold" \
-DCMAKE_CXX_FLAGS="-O3 -fuse-ld=mold" \
-DCMAKE_SHARED_LINKER_FLAGS="-fuse-ld=mold" \
-DCMAKE_EXE_LINKER_FLAGS="-fuse-ld=mold" \
-DLLVM_ENABLE_PROJECTS="bolt"
time ninja -j`nproc` -v
3.1 效果
ld:
real 46m16.016s
user 448m49.011s
sys 62m51.865s
mold:
real 22m47.918s
user 615m0.892s
sys 37m1.994s
真 TM newbility !!