]> git.ipfire.org Git - thirdparty/ccache.git/commitdiff
feat(cmake): Use the matching lld for clang
authorGregor Jasny <gregor.jasny@logmein.com>
Sun, 22 Aug 2021 10:47:04 +0000 (12:47 +0200)
committerJoel Rosdahl <joel@rosdahl.net>
Sun, 29 Aug 2021 18:46:51 +0000 (20:46 +0200)
Otherwise one could end up on Ubuntu with clang-11 calling lld-10
which breaks IPO.

.github/workflows/build.yaml
cmake/UseFastestLinker.cmake

index 36f8a5116a6288b1d276a4a1be36f79a5903f1ae..e4fd3d70db99ea0c86092fd4a6f79bc1babc6d1c 100644 (file)
@@ -104,7 +104,7 @@ jobs:
               echo "CC=clang-${{ matrix.config.version }}" >> $GITHUB_ENV
               echo "CXX=clang++-${{ matrix.config.version }}" >> $GITHUB_ENV
 
-              sudo apt install -y clang-${{ matrix.config.version }} g++-multilib
+              sudo apt install -y clang-${{ matrix.config.version }} g++-multilib lld-${{ matrix.config.version }}
             fi
           elif [ "${{ runner.os }}" = "macOS" ]; then
             HOMEBREW_NO_AUTO_UPDATE=1 HOMEBREW_NO_INSTALL_CLEANUP=1 \
index 9b4fdd6abe0a44061c2f2bf734d853bc69e26800..f7e079b4f0634ec0b29baf24edd113ddf964a4e6 100644 (file)
@@ -35,23 +35,31 @@ function(use_fastest_linker)
     return()
   endif()
 
-  set(use_default_linker 1)
+  # prefer an lld that matches the clang version
+  if(CMAKE_C_COMPILER_ID STREQUAL "Clang" AND CMAKE_C_COMPILER_VERSION MATCHES "^([0-9]*)\\.")
+    check_linker(lld-${CMAKE_MATCH_1})
+    if(HAVE_LD_LLD-${CMAKE_MATCH_1})
+      link_libraries("-fuse-ld=lld-${CMAKE_MATCH_1}")
+      message(STATUS "Using lld-${CMAKE_MATCH_1} linker")
+      return()
+    endif()
+  endif()
+
   check_linker(lld)
   if(HAVE_LD_LLD)
     link_libraries("-fuse-ld=lld")
-    set(use_default_linker 0)
     message(STATUS "Using lld linker")
-  else()
-    check_linker(gold)
-    if(HAVE_LD_GOLD)
-      link_libraries("-fuse-ld=gold")
-      set(use_default_linker 0)
-      message(STATUS "Using gold linker")
-    endif()
+    return()
   endif()
-  if(use_default_linker)
-    message(STATUS "Using default linker")
+
+  check_linker(gold)
+  if(HAVE_LD_GOLD)
+    link_libraries("-fuse-ld=gold")
+    message(STATUS "Using gold linker")
+    return()
   endif()
+
+  message(STATUS "Using default linker")
 endfunction()
 
 option(USE_FASTER_LINKER "Use the lld or gold linker instead of the default for faster linking" TRUE)