Przeglądaj źródła

Merge topic 'cuda-vs' into release-3.28

79f3f29e50 CUDA: Parse NVCC implicit compile/link information in Visual Studio generators
27e64a8498 CMakeNVCCParseImplicitInfo: Recognize link.exe line in CUDA VS integration
045399a461 CMakeParseImplicitLinkInfo: Ignore MSVC link /implib: flag

Acked-by: Kitware Robot <[email protected]>
Acked-by: Robert Maynard <[email protected]>
Merge-request: !8938
Brad King 2 lat temu
rodzic
commit
ae84de5a0c

+ 1 - 20
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})

+ 2 - 0
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})

+ 3 - 0
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}")