From 02ca07484cd0b0fa8f7148e77555d07cf4363eb7 Mon Sep 17 00:00:00 2001 From: "Herman S." <429230+has207@users.noreply.github.com> Date: Fri, 27 Mar 2026 14:54:15 +0900 Subject: [PATCH] [Build] Ensure clang/lld are pinned to the correct version --- .github/workflows/Linux_x86.yml | 15 +++++++++++---- CMakeLists.txt | 11 ++++++++++- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/.github/workflows/Linux_x86.yml b/.github/workflows/Linux_x86.yml index 91aea1ecd..e6c12302f 100644 --- a/.github/workflows/Linux_x86.yml +++ b/.github/workflows/Linux_x86.yml @@ -35,11 +35,18 @@ jobs: wget -qO- https://apt.llvm.org/llvm-snapshot.gpg.key | sudo tee /etc/apt/trusted.gpg.d/apt.llvm.org.asc sudo apt-add-repository "deb http://apt.llvm.org/${{ env.UBUNTU_BASE }}/ llvm-toolchain-${{ env.UBUNTU_BASE }}-${{ env.LLVM_VERSION }} main" sudo apt-get -y update - sudo apt-get -y install mesa-vulkan-drivers valgrind libc++-dev libc++abi-dev libgtk-3-dev libsdl2-dev libvulkan-dev libx11-xcb-dev clang-${{ env.LLVM_VERSION }} lld-${{ env.LLVM_VERSION }} ninja-build cmake spirv-tools + sudo apt-get -y install mesa-vulkan-drivers valgrind libc++-dev libc++abi-dev libgtk-3-dev libsdl2-dev libvulkan-dev libx11-xcb-dev clang-${{ env.LLVM_VERSION }} lld-${{ env.LLVM_VERSION }} ninja-build cmake spirv-tools libfuse2 + + # Pin LLVM tools to the correct version so system ar/ranlib/lld + # don't use the older LLVM 17 gold plugin with clang-20 LTO bitcode + sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-${{ env.LLVM_VERSION }} 200 + sudo update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-${{ env.LLVM_VERSION }} 200 + sudo update-alternatives --install /usr/bin/lld lld /usr/bin/lld-${{ env.LLVM_VERSION }} 200 + sudo update-alternatives --install /usr/bin/ld.lld ld.lld /usr/bin/ld.lld-${{ env.LLVM_VERSION }} 200 + sudo update-alternatives --install /usr/bin/llvm-ar llvm-ar /usr/bin/llvm-ar-${{ env.LLVM_VERSION }} 200 + sudo update-alternatives --install /usr/bin/llvm-ranlib llvm-ranlib /usr/bin/llvm-ranlib-${{ env.LLVM_VERSION }} 200 + sudo update-alternatives --install /usr/bin/llvm-nm llvm-nm /usr/bin/llvm-nm-${{ env.LLVM_VERSION }} 200 - # Pin clang to the correct version - sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-${{ env.LLVM_VERSION }} 200 - sudo update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-${{ env.LLVM_VERSION }} 200 - name: Install Vulkan SDK run: | # Install Vulkan SDK diff --git a/CMakeLists.txt b/CMakeLists.txt index 115ffab45..7bd84ceef 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -283,10 +283,19 @@ else() $<$:_NO_DEBUG_HEAP=1> ) add_compile_options($<$:-O3>) - # Link-time optimization (use lld to avoid system linker LTO plugin version mismatch) + # Link-time optimization (use lld and llvm-ar/ranlib to avoid system + # linker/archiver LTO plugin version mismatch with clang's bitcode) add_compile_options($<$:-flto=thin>) add_link_options($<$:-flto=thin>) add_link_options($<$:-fuse-ld=lld>) + find_program(LLVM_AR NAMES llvm-ar) + find_program(LLVM_RANLIB NAMES llvm-ranlib) + if(LLVM_AR) + set(CMAKE_AR "${LLVM_AR}" CACHE FILEPATH "" FORCE) + endif() + if(LLVM_RANLIB) + set(CMAKE_RANLIB "${LLVM_RANLIB}" CACHE FILEPATH "" FORCE) + endif() # No symbols in release on non-Windows string(REPLACE "-g" "" CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE}") string(REPLACE "-g" "" CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}")