CMake: add WITH_LINKER_LLD option for unix platforms master
authorNathan Craddock <nzcraddock@gmail.com>
Mon, 27 Apr 2020 04:10:56 +0000 (14:10 +1000)
committerCampbell Barton <ideasman42@gmail.com>
Mon, 27 Apr 2020 04:14:00 +0000 (14:14 +1000)
Can give considerably faster linking, especially for debug builds.

This may be enabled by default but needs to be more thoroughly tested.

CMakeLists.txt
build_files/cmake/platform/platform_unix.cmake

index 521dfdf4f02dddc760304f237a3779dc27b4d45c..9f0ff3d1427e028c952f590e6334b35b2b9a16aa 100644 (file)
@@ -475,6 +475,8 @@ endif()
 if(CMAKE_COMPILER_IS_GNUCC)
   option(WITH_LINKER_GOLD "Use ld.gold linker which is usually faster than ld.bfd" ON)
   mark_as_advanced(WITH_LINKER_GOLD)
+  option(WITH_LINKER_LLD "Use ld.lld linker which is usually faster than ld.gold" OFF)
+  mark_as_advanced(WITH_LINKER_LLD)
 endif()
 
 if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID MATCHES "Clang")
index 050ab8f3ba11dc68cdbc863231ca23cf41a276fb..8a89ce40432a4f6c2e523a8850531635006e178f 100644 (file)
@@ -575,6 +575,19 @@ if(CMAKE_COMPILER_IS_GNUCC)
     unset(LD_VERSION)
   endif()
 
+  if(WITH_LINKER_LLD)
+    execute_process(
+      COMMAND ${CMAKE_C_COMPILER} -fuse-ld=lld -Wl,--version
+      ERROR_QUIET OUTPUT_VARIABLE LD_VERSION)
+    if("${LD_VERSION}" MATCHES "LLD")
+      set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fuse-ld=lld")
+      set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fuse-ld=lld")
+    else()
+      message(STATUS "LLD linker isn't available, using the default system linker.")
+    endif()
+    unset(LD_VERSION)
+  endif()
+
 # CLang is the same as GCC for now.
 elseif(CMAKE_C_COMPILER_ID MATCHES "Clang")
   set(PLATFORM_CFLAGS "-pipe -fPIC -funsigned-char -fno-strict-aliasing")