Browse Source

VS: Fix CUDA compiler id with CMAKE_CUDA_ARCHITECTURES={all,all-major}

Skip the architecture verification check for these values on Visual
Studio.  It cannot be implemented correctly until future work delays the
check to the main compiler test step.

Issue: #23164, #23161
Brad King 3 years ago
parent
commit
5c1f5357b0

+ 3 - 1
Modules/CMakeDetermineCUDACompiler.cmake

@@ -280,7 +280,9 @@ if(NOT CMAKE_CUDA_COMPILER_ID_RUN)
       if(CMAKE_CUDA_COMPILER_ID STREQUAL "NVIDIA" AND CMAKE_CUDA_COMPILER_TOOLKIT_VERSION VERSION_GREATER_EQUAL 11.5)
         string(APPEND nvcc_test_flags " -arch=${CMAKE_CUDA_ARCHITECTURES}")
         set(architectures_tested "${CMAKE_CUDA_ARCHITECTURES}")
-      elseif(NOT CMAKE_GENERATOR MATCHES "Visual Studio")
+      elseif(CMAKE_GENERATOR MATCHES "Visual Studio")
+        set(architectures_tested "${CMAKE_CUDA_ARCHITECTURES}")
+      else()
         if(CMAKE_CUDA_ARCHITECTURES STREQUAL "all")
           set(architectures_test ${CMAKE_CUDA_ARCHITECTURES_ALL})
         elseif(CMAKE_CUDA_ARCHITECTURES STREQUAL "all-major")

+ 6 - 4
Modules/CMakeDetermineCompilerId.cmake

@@ -495,10 +495,12 @@ Id flags: ${testflags} ${CMAKE_${lang}_COMPILER_ID_FLAGS_ALWAYS}
       if(CMAKE_VS_PLATFORM_NAME STREQUAL x64)
         set(cuda_target "<TargetMachinePlatform>64</TargetMachinePlatform>")
       endif()
-      foreach(arch ${CMAKE_CUDA_ARCHITECTURES})
-        string(REGEX MATCH "[0-9]+" arch_name "${arch}")
-        string(APPEND cuda_codegen "compute_${arch_name},sm_${arch_name};")
-      endforeach()
+      if(NOT CMAKE_CUDA_ARCHITECTURES MATCHES "^(all|all-major)$")
+        foreach(arch ${CMAKE_CUDA_ARCHITECTURES})
+          string(REGEX MATCH "[0-9]+" arch_name "${arch}")
+          string(APPEND cuda_codegen "compute_${arch_name},sm_${arch_name};")
+        endforeach()
+      endif()
       set(id_ItemDefinitionGroup_entry "<CudaCompile>${cuda_target}<AdditionalOptions>%(AdditionalOptions)-v</AdditionalOptions><CodeGeneration>${cuda_codegen}</CodeGeneration></CudaCompile>")
       set(id_PostBuildEvent_Command [[echo CMAKE_CUDA_COMPILER=$(CudaToolkitBinDir)\nvcc.exe]])
       if(CMAKE_VS_PLATFORM_TOOLSET_CUDA_CUSTOM_DIR)