From 162606f3586878d6eaf9a034be84aea8ca60e829 Mon Sep 17 00:00:00 2001 From: Daniel Bertalan Date: Sat, 8 Jan 2022 12:59:14 +0100 Subject: [PATCH] Toolchain+CI: Link LLVM with LLD if available According to most benchmarks, LLD is faster than GNU ld and the macOS linker, so let's use it if possible in order to speed up the toolchain build. --- Meta/Azure/Setup.yml | 2 +- Toolchain/BuildClang.sh | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/Meta/Azure/Setup.yml b/Meta/Azure/Setup.yml index 6aacfbc40ef..4eb452c7548 100644 --- a/Meta/Azure/Setup.yml +++ b/Meta/Azure/Setup.yml @@ -10,7 +10,7 @@ steps: sudo add-apt-repository ppa:canonical-server/server-backports sudo add-apt-repository ppa:ubuntu-toolchain-r/test sudo apt-get update - sudo apt-get install ccache e2fsprogs gcc-11 g++-11 libstdc++-11-dev libmpfr-dev libmpc-dev ninja-build qemu-utils qemu-system-i386 unzip + sudo apt-get install ccache e2fsprogs gcc-11 g++-11 libstdc++-11-dev libmpfr-dev libmpc-dev ninja-build qemu-utils qemu-system-i386 unzip lld displayName: 'Install Dependencies' - ${{ if eq(parameters.os, 'Linux') }}: diff --git a/Toolchain/BuildClang.sh b/Toolchain/BuildClang.sh index 4dd1865b29f..160c41d766c 100755 --- a/Toolchain/BuildClang.sh +++ b/Toolchain/BuildClang.sh @@ -130,6 +130,18 @@ then exit 1 fi +link_lld= +buildstep dependencies echo "Checking whether the LLD linker is available..." +if ${CXX:-c++} -o /dev/null -fuse-ld=lld -xc - >/dev/null 2>/dev/null << 'PROGRAM' +int main() {} +PROGRAM +then + link_lld=1 + buildstep dependencies echo "Using LLD for linking LLVM." +else + buildstep dependencies echo "LLD not found. Using the default linker." +fi + # === CHECK CACHE AND REUSE === pushd "$DIR" @@ -254,6 +266,7 @@ pushd "$DIR/Build/clang" -DCMAKE_INSTALL_PREFIX="$PREFIX" \ -DSERENITY_MODULE_PATH="$DIR/CMake" \ -C "$DIR/CMake/LLVMConfig.cmake" \ + ${link_lld:+"-DLLVM_ENABLE_LLD=ON"} \ ${dev:+"-DLLVM_CCACHE_BUILD=ON"} \ ${ci:+"-DLLVM_CCACHE_BUILD=ON"} \ ${ci:+"-DLLVM_CCACHE_DIR=$LLVM_CCACHE_DIR"} \