diff --git a/Modules/CMakeASMCompiler.cmake.in b/Modules/CMakeASMCompiler.cmake.in index a821e58e77..81da7eca96 100644 --- a/Modules/CMakeASMCompiler.cmake.in +++ b/Modules/CMakeASMCompiler.cmake.in @@ -8,6 +8,7 @@ set(CMAKE_LINKER "@CMAKE_LINKER@") set(CMAKE_LINKER_LINK "@CMAKE_LINKER_LINK@") set(CMAKE_LINKER_LLD "@CMAKE_LINKER_LLD@") set(CMAKE_ASM@ASM_DIALECT@_COMPILER_LINKER "@_CMAKE_ASM_COMPILER_LINKER@") +set(CMAKE_ASM@ASM_DIALECT@_COMPILER_LINKER_ARCHITECTURE_FLAGS "@_CMAKE_ASM_COMPILER_LINKER_ARCHITECTURE_FLAGS@") set(CMAKE_ASM@ASM_DIALECT@_COMPILER_LINKER_ID "@_CMAKE_ASM_COMPILER_LINKER_ID@") set(CMAKE_ASM@ASM_DIALECT@_COMPILER_LINKER_VERSION "@_CMAKE_ASM_COMPILER_LINKER_VERSION@") set(CMAKE_ASM@ASM_DIALECT@_COMPILER_LINKER_FRONTEND_VARIANT "@_CMAKE_ASM_COMPILER_LINKER_FRONTEND_VARIANT@") diff --git a/Modules/CMakeCCompiler.cmake.in b/Modules/CMakeCCompiler.cmake.in index 0b371766f3..5d60020207 100644 --- a/Modules/CMakeCCompiler.cmake.in +++ b/Modules/CMakeCCompiler.cmake.in @@ -32,6 +32,7 @@ set(CMAKE_LINKER "@CMAKE_LINKER@") set(CMAKE_LINKER_LINK "@CMAKE_LINKER_LINK@") set(CMAKE_LINKER_LLD "@CMAKE_LINKER_LLD@") set(CMAKE_C_COMPILER_LINKER "@CMAKE_C_COMPILER_LINKER@") +set(CMAKE_C_COMPILER_LINKER_ARCHITECTURE_FLAGS "@CMAKE_C_COMPILER_LINKER_ARCHITECTURE_FLAGS@") set(CMAKE_C_COMPILER_LINKER_ID "@CMAKE_C_COMPILER_LINKER_ID@") set(CMAKE_C_COMPILER_LINKER_VERSION "@CMAKE_C_COMPILER_LINKER_VERSION@") set(CMAKE_C_COMPILER_LINKER_FRONTEND_VARIANT "@CMAKE_C_COMPILER_LINKER_FRONTEND_VARIANT@") diff --git a/Modules/CMakeCUDACompiler.cmake.in b/Modules/CMakeCUDACompiler.cmake.in index fc1439a5fb..0643e2b15b 100644 --- a/Modules/CMakeCUDACompiler.cmake.in +++ b/Modules/CMakeCUDACompiler.cmake.in @@ -82,6 +82,7 @@ set(CMAKE_LINKER "@CMAKE_LINKER@") set(CMAKE_LINKER_LINK "@CMAKE_LINKER_LINK@") set(CMAKE_LINKER_LLD "@CMAKE_LINKER_LLD@") set(CMAKE_CUDA_COMPILER_LINKER "@CMAKE_CUDA_COMPILER_LINKER@") +set(CMAKE_CUDA_COMPILER_LINKER_ARCHITECTURE_FLAGS "@CMAKE_CUDA_COMPILER_LINKER_ARCHITECTURE_FLAGS@") set(CMAKE_CUDA_COMPILER_LINKER_ID "@CMAKE_CUDA_COMPILER_LINKER_ID@") set(CMAKE_CUDA_COMPILER_LINKER_VERSION "@CMAKE_CUDA_COMPILER_LINKER_VERSION@") set(CMAKE_CUDA_COMPILER_LINKER_FRONTEND_VARIANT "@CMAKE_CUDA_COMPILER_LINKER_FRONTEND_VARIANT@") diff --git a/Modules/CMakeCXXCompiler.cmake.in b/Modules/CMakeCXXCompiler.cmake.in index 81e3706f0d..52495f46f4 100644 --- a/Modules/CMakeCXXCompiler.cmake.in +++ b/Modules/CMakeCXXCompiler.cmake.in @@ -34,6 +34,7 @@ set(CMAKE_LINKER "@CMAKE_LINKER@") set(CMAKE_LINKER_LINK "@CMAKE_LINKER_LINK@") set(CMAKE_LINKER_LLD "@CMAKE_LINKER_LLD@") set(CMAKE_CXX_COMPILER_LINKER "@CMAKE_CXX_COMPILER_LINKER@") +set(CMAKE_CXX_COMPILER_LINKER_ARCHITECTURE_FLAGS "@CMAKE_CXX_COMPILER_LINKER_ARCHITECTURE_FLAGS@") set(CMAKE_CXX_COMPILER_LINKER_ID "@CMAKE_CXX_COMPILER_LINKER_ID@") set(CMAKE_CXX_COMPILER_LINKER_VERSION "@CMAKE_CXX_COMPILER_LINKER_VERSION@") set(CMAKE_CXX_COMPILER_LINKER_FRONTEND_VARIANT "@CMAKE_CXX_COMPILER_LINKER_FRONTEND_VARIANT@") diff --git a/Modules/CMakeDetermineCompilerABI.cmake b/Modules/CMakeDetermineCompilerABI.cmake index 6e7f378c39..cc54652b65 100644 --- a/Modules/CMakeDetermineCompilerABI.cmake +++ b/Modules/CMakeDetermineCompilerABI.cmake @@ -24,6 +24,7 @@ function(CMAKE_DETERMINE_COMPILER_ABI lang src) CMAKE_${lang}_LIBRARY_ARCHITECTURE) if (CMAKE_${lang}_COMPILER_LINKER) list(APPEND abi_variables + CMAKE_${lang}_COMPILER_LINKER_ARCHITECTURE_FLAGS CMAKE_${lang}_COMPILER_LINKER_ID CMAKE_${lang}_COMPILER_LINKER_VERSION CMAKE_${lang}_COMPILER_LINKER_FRONTEND_VARIANT) @@ -331,6 +332,11 @@ function(CMAKE_DETERMINE_COMPILER_ABI lang src) set(CMAKE_${lang}_COMPILER_LINKER "${linker_tool}" PARENT_SCOPE) cmake_determine_linker_id(${lang} "${linker_tool}") + if(CMAKE_${lang}_COMPILER_LINKER_ID MATCHES "GNU|LLD|MOLD|WILD") + set(CMAKE_${lang}_COMPILER_LINKER_ARCHITECTURE_FLAGS "${linker_tool_ARCH_FLAGS}" PARENT_SCOPE) + else() + set(CMAKE_${lang}_COMPILER_LINKER_ARCHITECTURE_FLAGS "" PARENT_SCOPE) + endif() set(CMAKE_${lang}_COMPILER_LINKER_ID "${CMAKE_${lang}_COMPILER_LINKER_ID}" PARENT_SCOPE) set(CMAKE_${lang}_COMPILER_LINKER_VERSION ${CMAKE_${lang}_COMPILER_LINKER_VERSION} PARENT_SCOPE) set(CMAKE_${lang}_COMPILER_LINKER_FRONTEND_VARIANT ${CMAKE_${lang}_COMPILER_LINKER_FRONTEND_VARIANT} PARENT_SCOPE) diff --git a/Modules/CMakeFortranCompiler.cmake.in b/Modules/CMakeFortranCompiler.cmake.in index 3921a805cd..ab6c260e54 100644 --- a/Modules/CMakeFortranCompiler.cmake.in +++ b/Modules/CMakeFortranCompiler.cmake.in @@ -16,6 +16,7 @@ set(CMAKE_Fortran_COMPILER_AR "@CMAKE_Fortran_COMPILER_AR@") set(CMAKE_RANLIB "@CMAKE_RANLIB@") set(CMAKE_LINKER "@CMAKE_LINKER@") set(CMAKE_Fortran_COMPILER_LINKER "@CMAKE_Fortran_COMPILER_LINKER@") +set(CMAKE_Fortran_COMPILER_LINKER_ARCHITECTURE_FLAGS "@CMAKE_Fortran_COMPILER_LINKER_ARCHITECTURE_FLAGS@") set(CMAKE_Fortran_COMPILER_LINKER_ID "@CMAKE_Fortran_COMPILER_LINKER_ID@") set(CMAKE_Fortran_COMPILER_LINKER_VERSION "@CMAKE_Fortran_COMPILER_LINKER_VERSION@") set(CMAKE_Fortran_COMPILER_LINKER_FRONTEND_VARIANT "@CMAKE_Fortran_COMPILER_LINKER_FRONTEND_VARIANT@") diff --git a/Modules/CMakeHIPCompiler.cmake.in b/Modules/CMakeHIPCompiler.cmake.in index 92460c262d..3244eeff1d 100644 --- a/Modules/CMakeHIPCompiler.cmake.in +++ b/Modules/CMakeHIPCompiler.cmake.in @@ -84,6 +84,7 @@ set(CMAKE_LINKER "@CMAKE_LINKER@") set(CMAKE_LINKER_LINK "@CMAKE_LINKER_LINK@") set(CMAKE_LINKER_LLD "@CMAKE_LINKER_LLD@") set(CMAKE_HIP_COMPILER_LINKER "@CMAKE_HIP_COMPILER_LINKER@") +set(CMAKE_HIP_COMPILER_LINKER_ARCHITECTURE_FLAGS "@CMAKE_HIP_COMPILER_LINKER_ARCHITECTURE_FLAGS@") set(CMAKE_HIP_COMPILER_LINKER_ID "@CMAKE_HIP_COMPILER_LINKER_ID@") set(CMAKE_HIP_COMPILER_LINKER_VERSION "@CMAKE_HIP_COMPILER_LINKER_VERSION@") set(CMAKE_HIP_COMPILER_LINKER_FRONTEND_VARIANT "@CMAKE_HIP_COMPILER_LINKER_FRONTEND_VARIANT@") diff --git a/Modules/CMakeOBJCCompiler.cmake.in b/Modules/CMakeOBJCCompiler.cmake.in index 8efed7cea6..a6aca6fd84 100644 --- a/Modules/CMakeOBJCCompiler.cmake.in +++ b/Modules/CMakeOBJCCompiler.cmake.in @@ -29,6 +29,7 @@ set(CMAKE_LINKER "@CMAKE_LINKER@") set(CMAKE_LINKER_LINK "@CMAKE_LINKER_LINK@") set(CMAKE_LINKER_LLD "@CMAKE_LINKER_LLD@") set(CMAKE_OBJC_COMPILER_LINKER "@CMAKE_OBJC_COMPILER_LINKER@") +set(CMAKE_OBJC_COMPILER_LINKER_ARCHITECTURE_FLAGS "@CMAKE_OBJC_COMPILER_LINKER_ARCHITECTURE_FLAGS@") set(CMAKE_OBJC_COMPILER_LINKER_ID "@CMAKE_OBJC_COMPILER_LINKER_ID@") set(CMAKE_OBJC_COMPILER_LINKER_VERSION "@CMAKE_OBJC_COMPILER_LINKER_VERSION@") set(CMAKE_OBJC_COMPILER_LINKER_FRONTEND_VARIANT "@CMAKE_OBJC_COMPILER_LINKER_FRONTEND_VARIANT@") diff --git a/Modules/CMakeOBJCXXCompiler.cmake.in b/Modules/CMakeOBJCXXCompiler.cmake.in index 58d2601d29..e81dca1013 100644 --- a/Modules/CMakeOBJCXXCompiler.cmake.in +++ b/Modules/CMakeOBJCXXCompiler.cmake.in @@ -30,6 +30,7 @@ set(CMAKE_LINKER "@CMAKE_LINKER@") set(CMAKE_LINKER_LINK "@CMAKE_LINKER_LINK@") set(CMAKE_LINKER_LLD "@CMAKE_LINKER_LLD@") set(CMAKE_OBJCXX_COMPILER_LINKER "@CMAKE_OBJCXX_COMPILER_LINKER@") +set(CMAKE_OBJCXX_COMPILER_LINKER_ARCHITECTURE_FLAGS "@CMAKE_OBJCXX_COMPILER_LINKER_ARCHITECTURE_FLAGS@") set(CMAKE_OBJCXX_COMPILER_LINKER_ID "@CMAKE_OBJCXX_COMPILER_LINKER_ID@") set(CMAKE_OBJCXX_COMPILER_LINKER_VERSION "@CMAKE_OBJCXX_COMPILER_LINKER_VERSION@") set(CMAKE_OBJCXX_COMPILER_LINKER_FRONTEND_VARIANT "@CMAKE_OBJCXX_COMPILER_LINKER_FRONTEND_VARIANT@") diff --git a/Modules/CMakeParseImplicitLinkInfo.cmake b/Modules/CMakeParseImplicitLinkInfo.cmake index 8c119340a1..4e00970ed0 100644 --- a/Modules/CMakeParseImplicitLinkInfo.cmake +++ b/Modules/CMakeParseImplicitLinkInfo.cmake @@ -108,6 +108,7 @@ function(cmake_parse_implicit_link_info2 text log_var obj_regex) string(APPEND linker_tool_exclude_regex "|^clang |^gcc ") endif() set(linker_tool "NOTFOUND") + set(linker_tool_arch) set(linker_tool_fallback "") set(link_line_parsed 0) string(APPEND log " link line regex: [${linker_regex}]\n") @@ -120,18 +121,31 @@ function(cmake_parse_implicit_link_info2 text log_var obj_regex) NOT linker_tool AND NOT "${line}" MATCHES "${linker_tool_exclude_regex}") if("${line}" MATCHES "exec: ([^()]*/(${linker}))") # IBM XL as nvcc host compiler set(linker_tool "${CMAKE_MATCH_1}") + string(APPEND log " link line: [${line}] ==> linker [${linker_tool}]\n") elseif("${line}" MATCHES "^export XL_LINKER=(.*/${linker})[ \t]*$") # IBM XL set(linker_tool "${CMAKE_MATCH_1}") + string(APPEND log " link line: [${line}] ==> linker [${linker_tool}]\n") elseif("${line}" MATCHES "--with-ld=") # GNU # The GNU compiler reports how it was configured. # This does not account for -fuse-ld= so use it only as a fallback. if("${line}" MATCHES " --with-ld=([^ ]+/${linker})( |$)") set(linker_tool_fallback "${CMAKE_MATCH_1}") + string(APPEND log " link line: [${line}] ==> linker (fallback) [${linker_tool_fallback}]\n") endif() elseif("${line}" MATCHES "vs_link.*-- +\"?([^\"]*[/\\](${linker}))\"? ") # cmake -E vs_link_exe set(linker_tool "${CMAKE_MATCH_1}") + string(APPEND log " link line: [${line}] ==> linker [${linker_tool}]\n") elseif("${line}" MATCHES "${linker_tool_regex}") set(linker_tool "${CMAKE_MATCH_2}") + string(APPEND log " link line: [${line}] ==> linker [${linker_tool}]\n") + endif() + endif() + if(linker_tool) + # pick-up useful flags influencing linker behavior + # these flags are meaningful only for LLVM and GNU linkers. Check will be done later + if("${line}" MATCHES "-m ([a-zA-Z0-9]+)") + list(APPEND linker_tool_arch -m "${CMAKE_MATCH_1}") + string(APPEND log " link line: [${line}] ==> linker architecture flags [${linker_tool_arch}]\n") endif() endif() if(NOT (EXTRA_PARSE_COMPUTE_IMPLICIT_LIBS OR EXTRA_PARSE_COMPUTE_IMPLICIT_DIRS @@ -305,7 +319,7 @@ function(cmake_parse_implicit_link_info2 text log_var obj_regex) if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Windows") cmake_path(NORMAL_PATH linker_tool) endif() - string(APPEND log " linker tool for '${EXTRA_PARSE_LANGUAGE}': ${linker_tool}\n") + string(APPEND log " linker tool for '${EXTRA_PARSE_LANGUAGE}': ${linker_tool} ${linker_tool_arch}\n") endif() # Look for library search paths reported by linker. @@ -401,6 +415,7 @@ function(cmake_parse_implicit_link_info2 text log_var obj_regex) # Return results. if(EXTRA_PARSE_COMPUTE_LINKER) set(${EXTRA_PARSE_COMPUTE_LINKER} "${linker_tool}" PARENT_SCOPE) + set(${EXTRA_PARSE_COMPUTE_LINKER}_ARCH_FLAGS "${linker_tool_arch}" PARENT_SCOPE) endif() set(${log_var} "${log}" PARENT_SCOPE) diff --git a/Modules/Platform/Linker/CYGWIN-GNU.cmake b/Modules/Platform/Linker/CYGWIN-GNU.cmake index 7a7e6f8df6..4984af6611 100644 --- a/Modules/Platform/Linker/CYGWIN-GNU.cmake +++ b/Modules/Platform/Linker/CYGWIN-GNU.cmake @@ -10,6 +10,8 @@ include(Platform/Linker/GNU) macro(__cygwin_linker_gnu lang) set(CMAKE_${lang}_PLATFORM_LINKER_ID GNU) if(CMAKE_${lang}_COMPILER_LINKER) - __cmake_set_whole_archive_feature("${CMAKE_${lang}_COMPILER_LINKER}" "${lang}") + __cmake_set_whole_archive_feature("${CMAKE_${lang}_COMPILER_LINKER}" + "${CMAKE_${lang}_COMPILER_LINKER_ARCHITECTURE_FLAGS}" + "${lang}") endif() endmacro() diff --git a/Modules/Platform/Linker/FreeBSD-GNU.cmake b/Modules/Platform/Linker/FreeBSD-GNU.cmake index 8912c36e5a..e146b3ec03 100644 --- a/Modules/Platform/Linker/FreeBSD-GNU.cmake +++ b/Modules/Platform/Linker/FreeBSD-GNU.cmake @@ -10,6 +10,8 @@ include(Platform/Linker/GNU) macro(__freebsd_linker_gnu lang) set(CMAKE_${lang}_PLATFORM_LINKER_ID GNU) if(CMAKE_${lang}_COMPILER_LINKER) - __cmake_set_whole_archive_feature("${CMAKE_${lang}_COMPILER_LINKER}" "${lang}") + __cmake_set_whole_archive_feature("${CMAKE_${lang}_COMPILER_LINKER}" + "${CMAKE_${lang}_COMPILER_LINKER_ARCHITECTURE_FLAGS}" + "${lang}") endif() endmacro() diff --git a/Modules/Platform/Linker/GNU-GNU.cmake b/Modules/Platform/Linker/GNU-GNU.cmake index 9038f03317..b5b927467b 100644 --- a/Modules/Platform/Linker/GNU-GNU.cmake +++ b/Modules/Platform/Linker/GNU-GNU.cmake @@ -10,6 +10,8 @@ include(Platform/Linker/GNU) macro(__gnu_linker_gnu lang) set(CMAKE_${lang}_PLATFORM_LINKER_ID GNU) if(CMAKE_${lang}_COMPILER_LINKER) - __cmake_set_whole_archive_feature("${CMAKE_${lang}_COMPILER_LINKER}" "${lang}") + __cmake_set_whole_archive_feature("${CMAKE_${lang}_COMPILER_LINKER}" + "${CMAKE_${lang}_COMPILER_LINKER_ARCHITECTURE_FLAGS}" + "${lang}") endif() endmacro() diff --git a/Modules/Platform/Linker/GNU.cmake b/Modules/Platform/Linker/GNU.cmake index f6b213760f..5ab2983744 100644 --- a/Modules/Platform/Linker/GNU.cmake +++ b/Modules/Platform/Linker/GNU.cmake @@ -7,10 +7,10 @@ include_guard() # WHOLE_ARCHIVE Feature for LINK_LIBRARY generator expression ## check linker capabilities -function(__cmake_set_whole_archive_feature __linker) +function(__cmake_set_whole_archive_feature __linker __linker_options) unset(__lang) - if(ARGC EQUAL "2") - set(__lang "${ARGV1}_") + if(ARGC EQUAL "3") + set(__lang "${ARGV2}_") endif() if(NOT __linker) @@ -19,12 +19,11 @@ function(__cmake_set_whole_archive_feature __linker) if(NOT DEFINED CMAKE_${__lang}LINKER_PUSHPOP_STATE_SUPPORTED) # launch linker to check if push_state/pop_state options are supported - execute_process(COMMAND "${__linker}" --push-state --pop-state + execute_process(COMMAND "${__linker}" ${__linker_options} --push-state --pop-state OUTPUT_VARIABLE __linker_log ERROR_VARIABLE __linker_log - COMMAND_ERROR_IS_FATAL NONE - RESULT_VARIABLE __linker_result) - if(__linker_result EQUAL 0 AND (__linker_log MATCHES "--push-state" OR __linker_log MATCHES "--pop-state")) + COMMAND_ERROR_IS_FATAL NONE) + if(__linker_log MATCHES "--push-state" OR __linker_log MATCHES "--pop-state") set(CMAKE_${__lang}LINKER_PUSHPOP_STATE_SUPPORTED FALSE) else() set(CMAKE_${__lang}LINKER_PUSHPOP_STATE_SUPPORTED TRUE) @@ -47,4 +46,4 @@ endfunction() ## Configure system linker -__cmake_set_whole_archive_feature("${CMAKE_LINKER}") +__cmake_set_whole_archive_feature("${CMAKE_LINKER}" "") diff --git a/Modules/Platform/Linker/Linux-GNU.cmake b/Modules/Platform/Linker/Linux-GNU.cmake index 67099b9e6b..ed953bde41 100644 --- a/Modules/Platform/Linker/Linux-GNU.cmake +++ b/Modules/Platform/Linker/Linux-GNU.cmake @@ -10,6 +10,8 @@ include(Platform/Linker/GNU) macro(__linux_linker_gnu lang) set(CMAKE_${lang}_PLATFORM_LINKER_ID GNU) if(CMAKE_${lang}_COMPILER_LINKER) - __cmake_set_whole_archive_feature("${CMAKE_${lang}_COMPILER_LINKER}" "${lang}") + __cmake_set_whole_archive_feature("${CMAKE_${lang}_COMPILER_LINKER}" + "${CMAKE_${lang}_COMPILER_LINKER_ARCHITECTURE_FLAGS}" + "${lang}") endif() endmacro() diff --git a/Modules/Platform/Linker/NetBSD-GNU.cmake b/Modules/Platform/Linker/NetBSD-GNU.cmake index 9c26654a34..3e4c85ea65 100644 --- a/Modules/Platform/Linker/NetBSD-GNU.cmake +++ b/Modules/Platform/Linker/NetBSD-GNU.cmake @@ -10,6 +10,8 @@ include(Platform/Linker/GNU) macro(__netbsd_linker_gnu lang) set(CMAKE_${lang}_PLATFORM_LINKER_ID GNU) if(CMAKE_${lang}_COMPILER_LINKER) - __cmake_set_whole_archive_feature("${CMAKE_${lang}_COMPILER_LINKER}" "${lang}") + __cmake_set_whole_archive_feature("${CMAKE_${lang}_COMPILER_LINKER}" + "${CMAKE_${lang}_COMPILER_LINKER_ARCHITECTURE_FLAGS}" + "${lang}") endif() endmacro() diff --git a/Modules/Platform/Linker/OpenBSD-GNU.cmake b/Modules/Platform/Linker/OpenBSD-GNU.cmake index 64086e7c32..b104fe9fd7 100644 --- a/Modules/Platform/Linker/OpenBSD-GNU.cmake +++ b/Modules/Platform/Linker/OpenBSD-GNU.cmake @@ -10,6 +10,8 @@ include(Platform/Linker/GNU) macro(__openbsd_linker_gnu lang) set(CMAKE_${lang}_PLATFORM_LINKER_ID GNU) if(CMAKE_${lang}_COMPILER_LINKER) - __cmake_set_whole_archive_feature("${CMAKE_${lang}_COMPILER_LINKER}" "${lang}") + __cmake_set_whole_archive_feature("${CMAKE_${lang}_COMPILER_LINKER}" + "${CMAKE_${lang}_COMPILER_LINKER_ARCHITECTURE_FLAGS}" + "${lang}") endif() endmacro() diff --git a/Modules/Platform/Linker/SerenityOS-GNU.cmake b/Modules/Platform/Linker/SerenityOS-GNU.cmake index 0e7013c021..3f6667d518 100644 --- a/Modules/Platform/Linker/SerenityOS-GNU.cmake +++ b/Modules/Platform/Linker/SerenityOS-GNU.cmake @@ -10,6 +10,8 @@ include(Platform/Linker/GNU) macro(__serenityos_linker_gnu lang) set(CMAKE_${lang}_PLATFORM_LINKER_ID GNU) if(CMAKE_${lang}_COMPILER_LINKER) - __cmake_set_whole_archive_feature("${CMAKE_${lang}_COMPILER_LINKER}" "${lang}") + __cmake_set_whole_archive_feature("${CMAKE_${lang}_COMPILER_LINKER}" + "${CMAKE_${lang}_COMPILER_LINKER_ARCHITECTURE_FLAGS}" + "${lang}") endif() endmacro() diff --git a/Modules/Platform/Linker/SunOS-GNU.cmake b/Modules/Platform/Linker/SunOS-GNU.cmake index 0c3b230127..b4c2e2de14 100644 --- a/Modules/Platform/Linker/SunOS-GNU.cmake +++ b/Modules/Platform/Linker/SunOS-GNU.cmake @@ -10,6 +10,8 @@ include(Platform/Linker/GNU) macro(__sunos_linker_gnu lang) set(CMAKE_${lang}_PLATFORM_LINKER_ID GNU) if(CMAKE_${lang}_COMPILER_LINKER) - __cmake_set_whole_archive_feature("${CMAKE_${lang}_COMPILER_LINKER}" "${lang}") + __cmake_set_whole_archive_feature("${CMAKE_${lang}_COMPILER_LINKER}" + "${CMAKE_${lang}_COMPILER_LINKER_ARCHITECTURE_FLAGS}" + "${lang}") endif() endmacro() diff --git a/Modules/Platform/Linker/Windows-GNU.cmake b/Modules/Platform/Linker/Windows-GNU.cmake index c5a968f7f3..20387c96ef 100644 --- a/Modules/Platform/Linker/Windows-GNU.cmake +++ b/Modules/Platform/Linker/Windows-GNU.cmake @@ -10,6 +10,8 @@ include(Platform/Linker/GNU) macro(__windows_linker_gnu lang) set(CMAKE_${lang}_PLATFORM_LINKER_ID GNU) if(CMAKE_${lang}_COMPILER_LINKER) - __cmake_set_whole_archive_feature("${CMAKE_${lang}_COMPILER_LINKER}" "${lang}") + __cmake_set_whole_archive_feature("${CMAKE_${lang}_COMPILER_LINKER}" + "${CMAKE_${lang}_COMPILER_LINKER_ARCHITECTURE_FLAGS}" + "${lang}") endif() endmacro()