mirror of
https://github.com/Kitware/CMake.git
synced 2026-01-26 16:39:44 -06:00
Merge topic 'linker-user-selection'
96a953b1ed Add options to specify linker tool
Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !8861
This commit is contained in:
@@ -5,6 +5,8 @@ set(CMAKE_ASM@ASM_DIALECT@_COMPILER_AR "@_CMAKE_ASM_COMPILER_AR@")
|
||||
set(CMAKE_RANLIB "@CMAKE_RANLIB@")
|
||||
set(CMAKE_ASM@ASM_DIALECT@_COMPILER_RANLIB "@_CMAKE_ASM_COMPILER_RANLIB@")
|
||||
set(CMAKE_LINKER "@CMAKE_LINKER@")
|
||||
set(CMAKE_LINKER_LINK "@CMAKE_LINKER_LINK@")
|
||||
set(CMAKE_LINKER_LLD "@CMAKE_LINKER_LLD@")
|
||||
set(CMAKE_MT "@CMAKE_MT@")
|
||||
set(CMAKE_TAPI "@CMAKE_TAPI@")
|
||||
set(CMAKE_ASM@ASM_DIALECT@_COMPILER_LOADED 1)
|
||||
|
||||
@@ -26,6 +26,8 @@ set(CMAKE_C_COMPILER_AR "@CMAKE_C_COMPILER_AR@")
|
||||
set(CMAKE_RANLIB "@CMAKE_RANLIB@")
|
||||
set(CMAKE_C_COMPILER_RANLIB "@CMAKE_C_COMPILER_RANLIB@")
|
||||
set(CMAKE_LINKER "@CMAKE_LINKER@")
|
||||
set(CMAKE_LINKER_LINK "@CMAKE_LINKER_LINK@")
|
||||
set(CMAKE_LINKER_LLD "@CMAKE_LINKER_LLD@")
|
||||
set(CMAKE_MT "@CMAKE_MT@")
|
||||
set(CMAKE_TAPI "@CMAKE_TAPI@")
|
||||
set(CMAKE_COMPILER_IS_GNUCC @CMAKE_COMPILER_IS_GNUCC@)
|
||||
|
||||
@@ -72,5 +72,7 @@ set(CMAKE_CUDA_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "@CMAKE_CUDA_IMPLICIT_LINK_FR
|
||||
@_SET_CMAKE_CUDA_RUNTIME_LIBRARY_DEFAULT@
|
||||
|
||||
set(CMAKE_LINKER "@CMAKE_LINKER@")
|
||||
set(CMAKE_LINKER_LINK "@CMAKE_LINKER_LINK@")
|
||||
set(CMAKE_LINKER_LLD "@CMAKE_LINKER_LLD@")
|
||||
set(CMAKE_AR "@CMAKE_AR@")
|
||||
set(CMAKE_MT "@CMAKE_MT@")
|
||||
|
||||
@@ -27,6 +27,8 @@ set(CMAKE_CXX_COMPILER_AR "@CMAKE_CXX_COMPILER_AR@")
|
||||
set(CMAKE_RANLIB "@CMAKE_RANLIB@")
|
||||
set(CMAKE_CXX_COMPILER_RANLIB "@CMAKE_CXX_COMPILER_RANLIB@")
|
||||
set(CMAKE_LINKER "@CMAKE_LINKER@")
|
||||
set(CMAKE_LINKER_LINK "@CMAKE_LINKER_LINK@")
|
||||
set(CMAKE_LINKER_LLD "@CMAKE_LINKER_LLD@")
|
||||
set(CMAKE_MT "@CMAKE_MT@")
|
||||
set(CMAKE_TAPI "@CMAKE_TAPI@")
|
||||
set(CMAKE_COMPILER_IS_GNUCXX @CMAKE_COMPILER_IS_GNUCXX@)
|
||||
|
||||
@@ -60,6 +60,13 @@ endfunction()
|
||||
__resolve_tool_path(CMAKE_LINKER "${_CMAKE_TOOLCHAIN_LOCATION}" "Default Linker")
|
||||
__resolve_tool_path(CMAKE_MT "${_CMAKE_TOOLCHAIN_LOCATION}" "Default Manifest Tool")
|
||||
|
||||
macro(__resolve_linker_path __linker_type __name __search_path __doc)
|
||||
if(NOT CMAKE_LINKER_${__linker_type})
|
||||
set( CMAKE_LINKER_${__linker_type} "${__name}")
|
||||
endif()
|
||||
__resolve_tool_path(CMAKE_LINKER_${__linker_type} "${__search_path}" "${__doc}")
|
||||
endmacro()
|
||||
|
||||
set(_CMAKE_TOOL_VARS "")
|
||||
|
||||
# if it's the MS C/CXX compiler, search for link
|
||||
@@ -93,6 +100,10 @@ if(("x${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_SIMULATE_ID}" STREQUAL "xMSVC" AND
|
||||
|
||||
list(APPEND _CMAKE_TOOL_VARS LINKER MT AR)
|
||||
|
||||
# look-up for possible usable linker
|
||||
__resolve_linker_path(LINK "link" "${_CMAKE_TOOLCHAIN_LOCATION}" "link Linker")
|
||||
__resolve_linker_path(LLD "lld-link" "${_CMAKE_TOOLCHAIN_LOCATION}" "lld-link Linker")
|
||||
|
||||
elseif("x${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_ID}" MATCHES "^x(Open)?Watcom$")
|
||||
set(_CMAKE_LINKER_NAMES "wlink")
|
||||
set(_CMAKE_AR_NAMES "wlib")
|
||||
|
||||
@@ -74,5 +74,7 @@ set(CMAKE_HIP_COMPILER_AR "@CMAKE_HIP_COMPILER_AR@")
|
||||
set(CMAKE_RANLIB "@CMAKE_RANLIB@")
|
||||
set(CMAKE_HIP_COMPILER_RANLIB "@CMAKE_HIP_COMPILER_RANLIB@")
|
||||
set(CMAKE_LINKER "@CMAKE_LINKER@")
|
||||
set(CMAKE_LINKER_LINK "@CMAKE_LINKER_LINK@")
|
||||
set(CMAKE_LINKER_LLD "@CMAKE_LINKER_LLD@")
|
||||
set(CMAKE_MT "@CMAKE_MT@")
|
||||
set(CMAKE_TAPI "@CMAKE_TAPI@")
|
||||
|
||||
@@ -24,6 +24,8 @@ set(CMAKE_OBJC_COMPILER_AR "@CMAKE_OBJC_COMPILER_AR@")
|
||||
set(CMAKE_RANLIB "@CMAKE_RANLIB@")
|
||||
set(CMAKE_OBJC_COMPILER_RANLIB "@CMAKE_OBJC_COMPILER_RANLIB@")
|
||||
set(CMAKE_LINKER "@CMAKE_LINKER@")
|
||||
set(CMAKE_LINKER_LINK "@CMAKE_LINKER_LINK@")
|
||||
set(CMAKE_LINKER_LLD "@CMAKE_LINKER_LLD@")
|
||||
set(CMAKE_MT "@CMAKE_MT@")
|
||||
set(CMAKE_TAPI "@CMAKE_TAPI@")
|
||||
set(CMAKE_COMPILER_IS_GNUOBJC @CMAKE_COMPILER_IS_GNUOBJC@)
|
||||
|
||||
@@ -25,6 +25,8 @@ set(CMAKE_OBJCXX_COMPILER_AR "@CMAKE_OBJCXX_COMPILER_AR@")
|
||||
set(CMAKE_RANLIB "@CMAKE_RANLIB@")
|
||||
set(CMAKE_OBJCXX_COMPILER_RANLIB "@CMAKE_OBJCXX_COMPILER_RANLIB@")
|
||||
set(CMAKE_LINKER "@CMAKE_LINKER@")
|
||||
set(CMAKE_LINKER_LINK "@CMAKE_LINKER_LINK@")
|
||||
set(CMAKE_LINKER_LLD "@CMAKE_LINKER_LLD@")
|
||||
set(CMAKE_MT "@CMAKE_MT@")
|
||||
set(CMAKE_TAPI "@CMAKE_TAPI@")
|
||||
set(CMAKE_COMPILER_IS_GNUOBJCXX @CMAKE_COMPILER_IS_GNUOBJCXX@)
|
||||
|
||||
@@ -18,6 +18,13 @@ macro(__apple_compiler_clang lang)
|
||||
set(CMAKE_${lang}_LINK_LIBRARY_USING_FRAMEWORK "-framework <LIBRARY>")
|
||||
set(CMAKE_${lang}_LINK_LIBRARY_USING_FRAMEWORK_SUPPORTED TRUE)
|
||||
|
||||
# linker selection
|
||||
set(CMAKE_${lang}_USING_LINKER_SYSTEM "-fuse-ld=ld")
|
||||
set(CMAKE_${lang}_USING_LINKER_APPLE_CLASSIC "-fuse-ld=ld" "LINKER:-ld_classic")
|
||||
set(CMAKE_${lang}_USING_LINKER_LLD "-fuse-ld=lld")
|
||||
set(CMAKE_${lang}_USING_LINKER_MOLD "-fuse-ld=mold")
|
||||
set(CMAKE_${lang}_USING_LINKER_SOLD "-fuse-ld=sold")
|
||||
|
||||
if(_CMAKE_OSX_SYSROOT_PATH MATCHES "/iPhoneOS")
|
||||
set(CMAKE_${lang}_OSX_DEPLOYMENT_TARGET_FLAG "-miphoneos-version-min=")
|
||||
elseif(_CMAKE_OSX_SYSROOT_PATH MATCHES "/iPhoneSimulator")
|
||||
|
||||
@@ -17,6 +17,9 @@ macro(__apple_compiler_gnu lang)
|
||||
|
||||
set(CMAKE_${lang}_LINK_LIBRARY_USING_FRAMEWORK "-framework <LIBRARY>")
|
||||
set(CMAKE_${lang}_LINK_LIBRARY_USING_FRAMEWORK_SUPPORTED TRUE)
|
||||
|
||||
set(CMAKE_${lang}_USING_LINKER_SYSTEM "")
|
||||
set(CMAKE_${lang}_USING_LINKER_APPLE_CLASSIC "LINKER:-ld_classic")
|
||||
endmacro()
|
||||
|
||||
macro(cmake_gnu_set_sysroot_flag lang)
|
||||
|
||||
2
Modules/Platform/Linux-Clang-CUDA.cmake
Normal file
2
Modules/Platform/Linux-Clang-CUDA.cmake
Normal file
@@ -0,0 +1,2 @@
|
||||
include(Platform/Linux-GNU)
|
||||
__linux_compiler_gnu(CUDA)
|
||||
@@ -12,4 +12,11 @@ macro(__linux_compiler_gnu lang)
|
||||
# We pass this for historical reasons. Projects may have
|
||||
# executables that use dlopen but do not set ENABLE_EXPORTS.
|
||||
set(CMAKE_SHARED_LIBRARY_LINK_${lang}_FLAGS "-rdynamic")
|
||||
|
||||
# linker selection
|
||||
set(CMAKE_${lang}_USING_LINKER_SYSTEM "")
|
||||
set(CMAKE_${lang}_USING_LINKER_LLD "-fuse-ld=lld")
|
||||
set(CMAKE_${lang}_USING_LINKER_BFD "-fuse-ld=bfd")
|
||||
set(CMAKE_${lang}_USING_LINKER_GOLD "-fuse-ld=gold")
|
||||
set(CMAKE_${lang}_USING_LINKER_MOLD "-fuse-ld=mold")
|
||||
endmacro()
|
||||
|
||||
7
Modules/Platform/Linux-NVIDIA-CUDA.cmake
Normal file
7
Modules/Platform/Linux-NVIDIA-CUDA.cmake
Normal file
@@ -0,0 +1,7 @@
|
||||
|
||||
# linker selection
|
||||
set(CMAKE_CUDA_USING_LINKER_SYSTEM "")
|
||||
set(CMAKE_CUDA_USING_LINKER_LLD "-fuse-ld=lld")
|
||||
set(CMAKE_CUDA_USING_LINKER_BFD "-fuse-ld=bfd")
|
||||
set(CMAKE_CUDA_USING_LINKER_GOLD "-fuse-ld=gold")
|
||||
set(CMAKE_CUDA_USING_LINKER_MOLD "-fuse-ld=mold")
|
||||
@@ -53,6 +53,12 @@ macro(__windows_compiler_clang_gnu lang)
|
||||
set(CMAKE_${lang}_LINK_OPTIONS_NO_PIE "")
|
||||
set(CMAKE_SHARED_LIBRARY_${lang}_FLAGS "")
|
||||
|
||||
# linker selection
|
||||
set(CMAKE_${lang}_USING_LINKER_DEFAULT "-fuse-ld=lld-link")
|
||||
set(CMAKE_${lang}_USING_LINKER_SYSTEM "-fuse-ld=link")
|
||||
set(CMAKE_${lang}_USING_LINKER_LLD "-fuse-ld=lld-link")
|
||||
set(CMAKE_${lang}_USING_LINKER_MSVC "-fuse-ld=link")
|
||||
|
||||
set(CMAKE_${lang}_USE_RESPONSE_FILE_FOR_OBJECTS 1)
|
||||
set(CMAKE_${lang}_USE_RESPONSE_FILE_FOR_LIBRARIES 1)
|
||||
set(CMAKE_${lang}_USE_RESPONSE_FILE_FOR_INCLUDES 1)
|
||||
@@ -74,10 +80,10 @@ macro(__windows_compiler_clang_gnu lang)
|
||||
set(CMAKE_${lang}_ARCHIVE_APPEND "<CMAKE_AR> q <TARGET> <LINK_FLAGS> <OBJECTS>")
|
||||
set(CMAKE_${lang}_ARCHIVE_FINISH "<CMAKE_RANLIB> <TARGET>")
|
||||
set(CMAKE_${lang}_CREATE_SHARED_LIBRARY
|
||||
"<CMAKE_${lang}_COMPILER> -fuse-ld=lld-link -nostartfiles -nostdlib <CMAKE_SHARED_LIBRARY_${lang}_FLAGS> <LANGUAGE_COMPILE_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_${lang}_FLAGS> -o <TARGET> ${CMAKE_GNULD_IMAGE_VERSION} -Xlinker /MANIFEST:EMBED -Xlinker /implib:<TARGET_IMPLIB> -Xlinker /pdb:<TARGET_PDB> -Xlinker /version:<TARGET_VERSION_MAJOR>.<TARGET_VERSION_MINOR> <OBJECTS> <LINK_LIBRARIES> <MANIFESTS>")
|
||||
"<CMAKE_${lang}_COMPILER> -nostartfiles -nostdlib <CMAKE_SHARED_LIBRARY_${lang}_FLAGS> <LANGUAGE_COMPILE_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_${lang}_FLAGS> -o <TARGET> ${CMAKE_GNULD_IMAGE_VERSION} -Xlinker /MANIFEST:EMBED -Xlinker /implib:<TARGET_IMPLIB> -Xlinker /pdb:<TARGET_PDB> -Xlinker /version:<TARGET_VERSION_MAJOR>.<TARGET_VERSION_MINOR> <OBJECTS> <LINK_LIBRARIES> <MANIFESTS>")
|
||||
set(CMAKE_${lang}_CREATE_SHARED_MODULE ${CMAKE_${lang}_CREATE_SHARED_LIBRARY})
|
||||
set(CMAKE_${lang}_LINK_EXECUTABLE
|
||||
"<CMAKE_${lang}_COMPILER> -fuse-ld=lld-link -nostartfiles -nostdlib <FLAGS> <CMAKE_${lang}_LINK_FLAGS> <LINK_FLAGS> <OBJECTS> -o <TARGET> -Xlinker /MANIFEST:EMBED -Xlinker /implib:<TARGET_IMPLIB> -Xlinker /pdb:<TARGET_PDB> -Xlinker /version:<TARGET_VERSION_MAJOR>.<TARGET_VERSION_MINOR> ${CMAKE_GNULD_IMAGE_VERSION} <LINK_LIBRARIES> <MANIFESTS>")
|
||||
"<CMAKE_${lang}_COMPILER> -nostartfiles -nostdlib <FLAGS> <CMAKE_${lang}_LINK_FLAGS> <LINK_FLAGS> <OBJECTS> -o <TARGET> -Xlinker /MANIFEST:EMBED -Xlinker /implib:<TARGET_IMPLIB> -Xlinker /pdb:<TARGET_PDB> -Xlinker /version:<TARGET_VERSION_MAJOR>.<TARGET_VERSION_MINOR> ${CMAKE_GNULD_IMAGE_VERSION} <LINK_LIBRARIES> <MANIFESTS>")
|
||||
|
||||
set(CMAKE_${lang}_CREATE_WIN32_EXE "-Xlinker /subsystem:windows")
|
||||
set(CMAKE_${lang}_CREATE_CONSOLE_EXE "-Xlinker /subsystem:console")
|
||||
|
||||
@@ -112,6 +112,11 @@ macro(__windows_compiler_gnu lang)
|
||||
set(CMAKE_${type}_LINK_DYNAMIC_${lang}_FLAGS "-Wl,-Bdynamic")
|
||||
endforeach()
|
||||
|
||||
# linker selection
|
||||
set(CMAKE_${lang}_USING_LINKER_SYSTEM "")
|
||||
set(CMAKE_${lang}_USING_LINKER_BFD "-fuse-ld=bfd")
|
||||
set(CMAKE_${lang}_USING_LINKER_LLD "-fuse-ld=lld")
|
||||
|
||||
# No -fPIC on Windows
|
||||
set(CMAKE_${lang}_COMPILE_OPTIONS_PIC "")
|
||||
set(CMAKE_${lang}_COMPILE_OPTIONS_PIE "")
|
||||
|
||||
@@ -512,6 +512,12 @@ macro(__windows_compiler_msvc lang)
|
||||
set(CMAKE_DEPFILE_FLAGS_${lang} "/showIncludes")
|
||||
set(CMAKE_${lang}_DEPFILE_FORMAT msvc)
|
||||
endif()
|
||||
|
||||
# linker selection
|
||||
set(CMAKE_${lang}_USING_LINKER_SYSTEM "${CMAKE_LINKER_LINK}")
|
||||
set(CMAKE_${lang}_USING_LINKER_LLD "${CMAKE_LINKER_LLD}")
|
||||
set(CMAKE_${lang}_USING_LINKER_MSVC "${CMAKE_LINKER_LINK}")
|
||||
set(CMAKE_${lang}_USING_LINKER_MODE TOOL)
|
||||
endmacro()
|
||||
|
||||
macro(__windows_compiler_msvc_enable_rc flags)
|
||||
|
||||
@@ -47,6 +47,12 @@ set(CMAKE_CUDA_DEVICE_LINK_EXECUTABLE
|
||||
"<CMAKE_CUDA_COMPILER> ${_CMAKE_CUDA_EXTRA_FLAGS} <LANGUAGE_COMPILE_FLAGS> <LINK_FLAGS> ${_CMAKE_CUDA_EXTRA_DEVICE_LINK_FLAGS} -shared -dlink <OBJECTS> -o <TARGET> <LINK_LIBRARIES> -Xcompiler=-Fd<TARGET_COMPILE_PDB>,-FS${__IMPLICIT_DLINK_FLAGS}")
|
||||
unset(__IMPLICIT_DLINK_FLAGS)
|
||||
|
||||
# linker selection
|
||||
set(CMAKE_CUDA_USING_LINKER_SYSTEM "${CMAKE_LINKER_LINK}")
|
||||
set(CMAKE_CUDA_USING_LINKER_LLD "${CMAKE_LINKER_LLD}")
|
||||
set(CMAKE_CUDA_USING_LINKER_MSVC "${CMAKE_LINKER_LINK}")
|
||||
set(CMAKE_CUDA_USING_LINKER_MODE TOOL)
|
||||
|
||||
string(REPLACE "/D" "-D" _PLATFORM_DEFINES_CUDA "${_PLATFORM_DEFINES}${_PLATFORM_DEFINES_CXX}")
|
||||
|
||||
if(CMAKE_MSVC_RUNTIME_LIBRARY_DEFAULT)
|
||||
|
||||
Reference in New Issue
Block a user