aboutsummaryrefslogtreecommitdiff
path: root/cmake
diff options
context:
space:
mode:
authorwsnipex <wsnipex@a1.net>2021-06-14 14:31:34 +0200
committerwsnipex <wsnipex@a1.net>2021-06-30 07:54:05 +0200
commit9f0cee6b60d1bd21226dcf95558474df265c39a4 (patch)
treed2636dae44e53a7f98fbb5845846ff9d331a4526 /cmake
parentfe8c4c0c8796682a80b8e4d1f6d01a3d9d5c8539 (diff)
[cmake] add lld linker support
Diffstat (limited to 'cmake')
-rw-r--r--cmake/modules/LDGOLD.cmake2
-rw-r--r--cmake/modules/LLD.cmake27
2 files changed, 27 insertions, 2 deletions
diff --git a/cmake/modules/LDGOLD.cmake b/cmake/modules/LDGOLD.cmake
index ad19c6b349..30926b591c 100644
--- a/cmake/modules/LDGOLD.cmake
+++ b/cmake/modules/LDGOLD.cmake
@@ -1,6 +1,4 @@
option(ENABLE_LDGOLD "Use GNU gold linker" ON)
-
-set(LDGOLD_FOUND FALSE)
if(ENABLE_LDGOLD)
execute_process(COMMAND ${CMAKE_C_COMPILER} -fuse-ld=gold -Wl,--version ERROR_QUIET OUTPUT_VARIABLE LD_VERSION)
if(LD_VERSION MATCHES "GNU gold")
diff --git a/cmake/modules/LLD.cmake b/cmake/modules/LLD.cmake
new file mode 100644
index 0000000000..600c1a3d3f
--- /dev/null
+++ b/cmake/modules/LLD.cmake
@@ -0,0 +1,27 @@
+option(ENABLE_LLD "Use LLVM linker" OFF)
+if(ENABLE_LLD AND NOT LLD_FOUND)
+ if(ENABLE_LDGOLD)
+ message(FATAL_ERROR "Only enable ENABLE_LDGOLD OR ENABLE_LLD")
+ endif()
+
+ execute_process(COMMAND ${CMAKE_CXX_COMPILER} -fuse-ld=lld -Wl,--version ERROR_QUIET OUTPUT_VARIABLE LD_VERSION)
+ if(LD_VERSION MATCHES "LLD")
+ include(FindPackageHandleStandardArgs)
+ find_program(LLD_EXECUTABLE lld)
+ find_package_handle_standard_args(LLD REQUIRED_VARS LLD_EXECUTABLE)
+
+ if(LLD_FOUND)
+ set(CMAKE_LINKER ${LLD_EXECUTABLE})
+ set(CMAKE_CXX_LINK_FLAGS -fuse-ld=lld)
+ set(CMAKE_C_LINK_FLAGS -fuse-ld=lld)
+ set(CMAKE_EXE_LINKER_FLAGS "${LD_FLAGS} -fuse-ld=lld")
+ set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS}")
+ set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS}")
+ message(STATUS "Linker: LLVM lld")
+ endif()
+ mark_as_advanced(LLD_EXECUTABLE CMAKE_LINKER)
+
+ else()
+ message(WARNING "LLVM lld linker is not available, falling back to default system linker")
+ endif()
+endif()