]> git.ipfire.org Git - thirdparty/ccache.git/commitdiff
Fix fast linker selection for old GCC versions (#788)
authorAlexander Lanin <alex@lanin.de>
Mon, 25 Jan 2021 06:51:10 +0000 (07:51 +0100)
committerGitHub <noreply@github.com>
Mon, 25 Jan 2021 06:51:10 +0000 (07:51 +0100)
.github/workflows/build.yaml
cmake/UseFastestLinker.cmake

index eb7ab387f560bb37e2a2da026f49a0cd40498d53..fcf15e20c8f3790cce59b1bd6c8cdab705f1a0f2 100644 (file)
@@ -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
index 8f392aac3ed4e7c40b9e0772f2aa378b929afef2..c96639cb13c5bba025f9f83854456a22a36e63e1 100644 (file)
@@ -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} <FLAGS> <CMAKE_CXX_LINK_FLAGS> <LINK_FLAGS> <OBJECTS> -o <TARGET> <LINK_LIBRARIES>")
+    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()