1
0
Эх сурвалжийг харах

VS: Fix support for nvcc flags not in our flag table

The change in commit v3.9.0-rc4~3^2 (VS: Improve workaround for CUDA
-Xcompiler placement bug, 2017-06-21) accidentally appended to the
`AdditionalOptions` as if it were a `;`-separated list, but it is
actually a command-line string.  Append with a space instead.

While at it, fix the same problem for the `AdditionalOptions` added to
`CudaLink` by commit v3.9.0-rc3~1^2 (CUDA: When linking device code
suppress CUDA 8.0+ deprecation warnings, 2017-06-09).

Fixes: #17008
Brad King 8 жил өмнө
parent
commit
bbc1f3642c

+ 3 - 3
Source/cmVisualStudio10TargetGenerator.cxx

@@ -2530,7 +2530,7 @@ bool cmVisualStudio10TargetGenerator::ComputeCudaOptions(
     cudaOptions.RemoveFlag("AdditionalCompilerOptions");
     cudaOptions.RemoveFlag("AdditionalCompilerOptions");
     if (!aco.empty()) {
     if (!aco.empty()) {
       aco = this->LocalGenerator->EscapeForShell(aco, false);
       aco = this->LocalGenerator->EscapeForShell(aco, false);
-      cudaOptions.AppendFlag("AdditionalOptions", "-Xcompiler=" + aco);
+      cudaOptions.AppendFlagString("AdditionalOptions", "-Xcompiler=" + aco);
     }
     }
   }
   }
 
 
@@ -2619,8 +2619,8 @@ bool cmVisualStudio10TargetGenerator::ComputeCudaLinkOptions(
   // Suppress deprecation warnings for default GPU targets during device link.
   // Suppress deprecation warnings for default GPU targets during device link.
   if (cmSystemTools::VersionCompareGreaterEq(
   if (cmSystemTools::VersionCompareGreaterEq(
         this->GlobalGenerator->GetPlatformToolsetCudaString(), "8.0")) {
         this->GlobalGenerator->GetPlatformToolsetCudaString(), "8.0")) {
-    cudaLinkOptions.AppendFlag("AdditionalOptions",
-                               "-Wno-deprecated-gpu-targets");
+    cudaLinkOptions.AppendFlagString("AdditionalOptions",
+                                     "-Wno-deprecated-gpu-targets");
   }
   }
 
 
   this->CudaLinkOptions[configName] = pOptions.release();
   this->CudaLinkOptions[configName] = pOptions.release();

+ 5 - 0
Tests/CudaOnly/SeparateCompilation/CMakeLists.txt

@@ -16,6 +16,11 @@ set(CMAKE_CUDA_STANDARD 11)
 add_library(CUDASeparateLibA STATIC file1.cu file2.cu file3.cu)
 add_library(CUDASeparateLibA STATIC file1.cu file2.cu file3.cu)
 
 
 if(CMAKE_CUDA_SIMULATE_ID STREQUAL "MSVC")
 if(CMAKE_CUDA_SIMULATE_ID STREQUAL "MSVC")
+  # Test adding a flag that is not in our CUDA flag table for VS.
+  if(NOT CMAKE_CUDA_COMPILER_VERSION VERSION_LESS 8)
+    string(APPEND CMAKE_CUDA_FLAGS " --ftemplate-depth 50")
+  endif()
+  # Test adding a flag that nvcc should pass to the host compiler.
   target_compile_options(CUDASeparateLibA PRIVATE -Xcompiler=-bigobj)
   target_compile_options(CUDASeparateLibA PRIVATE -Xcompiler=-bigobj)
 endif()
 endif()