From: Alexander Lanin Date: Mon, 25 Jan 2021 06:51:10 +0000 (+0100) Subject: Fix fast linker selection for old GCC versions (#788) X-Git-Tag: v4.2~15 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6b552a32;p=thirdparty%2Fccache.git Fix fast linker selection for old GCC versions (#788) --- diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index eb7ab387f..fcf15e20c 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -91,10 +91,12 @@ jobs: if [ "${{ runner.os }}" = "Linux" ]; then sudo apt-get update + # Install ld.gold (binutils) and ld.lld on different runs. + # Binding to Ubuntu 20 has no special meaning. if [ "${{ matrix.config.os }}" = "ubuntu-20.04" ]; then - sudo apt-get install -y ninja-build elfutils libzstd-dev + sudo apt-get install -y ninja-build elfutils libzstd-dev lld else - sudo apt-get install -y ninja-build elfutils libzstd1-dev + sudo apt-get install -y ninja-build elfutils libzstd1-dev binutils fi if [ "${{ matrix.config.compiler }}" = "gcc" ]; then diff --git a/cmake/UseFastestLinker.cmake b/cmake/UseFastestLinker.cmake index 8f392aac3..c96639cb1 100644 --- a/cmake/UseFastestLinker.cmake +++ b/cmake/UseFastestLinker.cmake @@ -11,19 +11,20 @@ function(use_fastest_linker) message(WARNING "use_fastest_linker() disabled, as it is not called at the project top level") return() endif() - - find_program(HAS_LD_LLD ld.lld) - if(HAS_LD_LLD) - link_libraries(-fuse-ld=lld) - message_verbose("Using lld linker for faster linking") + + find_program(FASTER_LINKER ld.lld) + if(NOT FASTER_LINKER) + find_program(FASTER_LINKER ld.gold) + endif() + + if(FASTER_LINKER) + # Note: Compiler flag -fuse-ld requires gcc 9 or clang 3.8. + # Instead override CMAKE_CXX_LINK_EXECUTABLE directly. + # By default CMake uses the compiler executable for linking. + set(CMAKE_CXX_LINK_EXECUTABLE "${FASTER_LINKER} -o ") + message_verbose("Using ${FASTER_LINKER} linker for faster linking") else() - find_program(HAS_LD_GOLD ld.gold) - if(HAS_LD_GOLD) - link_libraries(-fuse-ld=gold) - message_verbose("Using gold linker for faster linking") - else() - message_verbose("Using default linker") - endif() + message_verbose("Using default linker") endif() endfunction()