diff options
author | wsnipex <wsnipex@a1.net> | 2021-06-14 14:31:34 +0200 |
---|---|---|
committer | wsnipex <wsnipex@a1.net> | 2021-06-30 07:54:05 +0200 |
commit | 9f0cee6b60d1bd21226dcf95558474df265c39a4 (patch) | |
tree | d2636dae44e53a7f98fbb5845846ff9d331a4526 /cmake | |
parent | fe8c4c0c8796682a80b8e4d1f6d01a3d9d5c8539 (diff) |
[cmake] add lld linker support
Diffstat (limited to 'cmake')
-rw-r--r-- | cmake/modules/LDGOLD.cmake | 2 | ||||
-rw-r--r-- | cmake/modules/LLD.cmake | 27 |
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() |