From 045399a4610b7452d825cc3a58852884dc717748 Mon Sep 17 00:00:00 2001 From: Brad King Date: Wed, 1 Nov 2023 12:46:40 -0400 Subject: CMakeParseImplicitLinkInfo: Ignore MSVC link /implib: flag The flag specifies the import library for the linked binary. It is not a linked library. --- Modules/CMakeParseImplicitLinkInfo.cmake | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Modules/CMakeParseImplicitLinkInfo.cmake b/Modules/CMakeParseImplicitLinkInfo.cmake index 9213cc9..cbdb915 100644 --- a/Modules/CMakeParseImplicitLinkInfo.cmake +++ b/Modules/CMakeParseImplicitLinkInfo.cmake @@ -106,6 +106,8 @@ function(CMAKE_PARSE_IMPLICIT_LINK_INFO text lib_var dir_var fwk_var log_var obj string(APPEND log " arg [${arg}] ==> dir [${dir}]\n") elseif(is_msvc AND "${arg}" STREQUAL "-link") string(APPEND log " arg [${arg}] ==> ignore MSVC cl option\n") + elseif(is_msvc AND "${arg}" MATCHES "^[-/][Ii][Mm][Pp][Ll][Ii][Bb]:") + string(APPEND log " arg [${arg}] ==> ignore MSVC link option\n") elseif(is_msvc AND "${arg}" MATCHES "^(.*\\.[Ll][Ii][Bb])$") set(lib "${CMAKE_MATCH_1}") list(APPEND implicit_libs_tmp ${lib}) -- cgit v0.12 From 677992d85ad2560e48282bed8d20ac23e3ee2172 Mon Sep 17 00:00:00 2001 From: Brad King Date: Wed, 1 Nov 2023 13:10:14 -0400 Subject: CMakeParseImplicitLinkInfo: Log exclusion of MSVC link /implib: flag --- Modules/CMakeParseImplicitLinkInfo.cmake | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Modules/CMakeParseImplicitLinkInfo.cmake b/Modules/CMakeParseImplicitLinkInfo.cmake index a513faf..b48eb43 100644 --- a/Modules/CMakeParseImplicitLinkInfo.cmake +++ b/Modules/CMakeParseImplicitLinkInfo.cmake @@ -161,8 +161,9 @@ function(cmake_parse_implicit_link_info2 text log_var obj_regex) endif() elseif(is_msvc AND "${arg}" STREQUAL "-link") string(APPEND log " arg [${arg}] ==> ignore MSVC cl option\n") - elseif(is_msvc AND NOT "${arg}" MATCHES "^/[Ii][Mm][Pp][Ll][Ii][Bb]:" - AND "${arg}" MATCHES "^(.*\\.[Ll][Ii][Bb])$") + elseif(is_msvc AND "${arg}" MATCHES "^[-/][Ii][Mm][Pp][Ll][Ii][Bb]:") + string(APPEND log " arg [${arg}] ==> ignore MSVC link option\n") + elseif(is_msvc AND "${arg}" MATCHES "^(.*\\.[Ll][Ii][Bb])$") if(EXTRA_PARSE_COMPUTE_IMPLICIT_LIBS) set(lib "${CMAKE_MATCH_1}") list(APPEND implicit_libs_tmp ${lib}) -- cgit v0.12 From 27e64a8498110af4f729dd2e86ad507312d13711 Mon Sep 17 00:00:00 2001 From: Brad King Date: Wed, 1 Nov 2023 12:50:02 -0400 Subject: CMakeNVCCParseImplicitInfo: Recognize link.exe line in CUDA VS integration --- Modules/Internal/CMakeNVCCParseImplicitInfo.cmake | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Modules/Internal/CMakeNVCCParseImplicitInfo.cmake b/Modules/Internal/CMakeNVCCParseImplicitInfo.cmake index 32ff28a..3aa10a2 100644 --- a/Modules/Internal/CMakeNVCCParseImplicitInfo.cmake +++ b/Modules/Internal/CMakeNVCCParseImplicitInfo.cmake @@ -52,6 +52,9 @@ macro(cmake_nvcc_parse_implicit_info lang lang_var_) string(APPEND _nvcc_log " considering line: [${_nvcc_output_line}]\n") if("${_nvcc_output_line}" MATCHES "^ *nvlink") string(APPEND _nvcc_log " ignoring nvlink line\n") + elseif("${_nvcc_output_line}" MATCHES "(link\\.exe .*CompilerId${lang}\\.exe.*)$") + set(_nvcc_link_line "${CMAKE_MATCH_1}") + string(APPEND _nvcc_log " extracted link line: [${_nvcc_link_line}]\n") elseif(_nvcc_libraries) if("${_nvcc_output_line}" MATCHES "(@\"?((tmp/)?a\\.exe\\.res)\"?)") set(_nvcc_link_res_arg "${CMAKE_MATCH_1}") -- cgit v0.12 From 79f3f29e50d494d1e1638492bf7dda3ef9d3a5e7 Mon Sep 17 00:00:00 2001 From: Brad King Date: Wed, 1 Nov 2023 12:51:24 -0400 Subject: CUDA: Parse NVCC implicit compile/link information in Visual Studio generators Refactoring in commit deff0e638d (CUDA: Factor out helper to parse NVCC implicit compiler and linker flags, 2023-09-15, v3.28.0-rc1~63^2~6) incorrectly dropped detection of the default CUDA architecture and the CUDA toolkit include directories from the code path used for Visual Studio generators. However, CMakeNVCCParseImplicitInfo is now general enough that we no longer need a VS-specific code path. Fixes: #25378 --- Modules/CMakeDetermineCUDACompiler.cmake | 21 +-------------------- 1 file changed, 1 insertion(+), 20 deletions(-) diff --git a/Modules/CMakeDetermineCUDACompiler.cmake b/Modules/CMakeDetermineCUDACompiler.cmake index 585b2aa..6ac4dad 100644 --- a/Modules/CMakeDetermineCUDACompiler.cmake +++ b/Modules/CMakeDetermineCUDACompiler.cmake @@ -164,26 +164,7 @@ if(MSVC_CUDA_ARCHITECTURE_ID) "set(MSVC_CUDA_ARCHITECTURE_ID ${MSVC_CUDA_ARCHITECTURE_ID})") endif() -if(CMAKE_GENERATOR MATCHES "Visual Studio") - set(CMAKE_CUDA_HOST_LINK_LAUNCHER "${CMAKE_LINKER}") - set(CMAKE_CUDA_HOST_IMPLICIT_LINK_LIBRARIES "") - set(CMAKE_CUDA_HOST_IMPLICIT_LINK_DIRECTORIES "") - set(CMAKE_CUDA_HOST_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "") - - # We do not currently detect CMAKE_CUDA_HOST_IMPLICIT_LINK_LIBRARIES but we - # do need to detect CMAKE_CUDA_RUNTIME_LIBRARY_DEFAULT from the compiler by - # looking at which cudart library exists in the implicit link libraries passed - # to the host linker. - if(CMAKE_CUDA_COMPILER_PRODUCED_OUTPUT MATCHES "link\\.exe [^\n]*cudart_static\\.lib") - set(CMAKE_CUDA_RUNTIME_LIBRARY_DEFAULT "STATIC") - elseif(CMAKE_CUDA_COMPILER_PRODUCED_OUTPUT MATCHES "link\\.exe [^\n]*cudart\\.lib") - set(CMAKE_CUDA_RUNTIME_LIBRARY_DEFAULT "SHARED") - else() - set(CMAKE_CUDA_RUNTIME_LIBRARY_DEFAULT "NONE") - endif() - set(_SET_CMAKE_CUDA_RUNTIME_LIBRARY_DEFAULT - "set(CMAKE_CUDA_RUNTIME_LIBRARY_DEFAULT \"${CMAKE_CUDA_RUNTIME_LIBRARY_DEFAULT}\")") -elseif(CMAKE_CUDA_COMPILER_ID STREQUAL "Clang") +if(CMAKE_CUDA_COMPILER_ID STREQUAL "Clang") string(REGEX MATCHALL "-target-cpu sm_([0-9]+)" _clang_target_cpus "${CMAKE_CUDA_COMPILER_PRODUCED_OUTPUT}") foreach(_clang_target_cpu ${_clang_target_cpus}) -- cgit v0.12