Browse Source

CUDA: Restore CMAKE_CUDA_ARCHITECTURES support for -real and -virtual suffixes

Fix the validation regex added by commit c267ed205a (CUDA: Defer
architecture testing to the compiler testing step, 2022-04-25) to
allow these values.
Brad King 3 years ago
parent
commit
7bf5200699

+ 4 - 3
Modules/CMakeDetermineCUDACompiler.cmake

@@ -275,13 +275,14 @@ if(NOT CMAKE_CUDA_COMPILER_ID_RUN)
   if(DEFINED CMAKE_CUDA_ARCHITECTURES)
     if(CMAKE_CUDA_ARCHITECTURES STREQUAL "")
       message(FATAL_ERROR "CMAKE_CUDA_ARCHITECTURES must be non-empty if set.")
-    elseif(CMAKE_CUDA_ARCHITECTURES AND NOT CMAKE_CUDA_ARCHITECTURES MATCHES "^([0-9]+[;0-9]*|all|all-major|native)$")
+    elseif(CMAKE_CUDA_ARCHITECTURES AND NOT CMAKE_CUDA_ARCHITECTURES MATCHES "^([0-9]+(-real|-virtual)?(;[0-9]+(-real|-virtual)?|;)*|all|all-major|native)$")
       message(FATAL_ERROR
         "CMAKE_CUDA_ARCHITECTURES:\n"
         "  ${CMAKE_CUDA_ARCHITECTURES}\n"
         "is not one of the following:\n"
-        "* a semicolon-separated list of integers\n"
-        "* a special value: all, all-major, native\n"
+        "  * a semicolon-separated list of integers, each optionally\n"
+        "    followed by '-real' or '-virtual'\n"
+        "  * a special value: all, all-major, native\n"
         )
     endif()
   endif()

+ 5 - 0
Tests/RunCMake/CUDA_architectures/RunCMakeTest.cmake

@@ -20,3 +20,8 @@ if(CMAKE_CUDA_COMPILER_ID STREQUAL "Clang" AND CMAKE_CUDA_ARCHITECTURES)
 endif()
 run_cmake(architectures-off)
 unset(RunCMake_TEST_OPTIONS)
+
+if(CMAKE_CUDA_ARCHITECTURES MATCHES "([0-9]+)")
+  set(arch "${CMAKE_MATCH_1}")
+  run_cmake_with_options(architectures-suffix -Darch=${arch})
+endif()

+ 3 - 3
Tests/RunCMake/CUDA_architectures/architectures-invalid-stderr.txt

@@ -5,9 +5,9 @@
 
   is not one of the following:
 
-  \* a semicolon-separated list of integers
-
-  \* a special value: all, all-major, native
+    \* a semicolon-separated list of integers, each optionally
+      followed by '-real' or '-virtual'
+    \* a special value: all, all-major, native
 
 Call Stack \(most recent call first\):
   architectures-invalid\.cmake:2 \(enable_language\)

+ 4 - 0
Tests/RunCMake/CUDA_architectures/architectures-suffix-stderr.txt

@@ -0,0 +1,4 @@
+^(CMake Warning in [^
+]*/Tests/RunCMake/CUDA_architectures/architectures-suffix-build/CMakeFiles/CMakeTmp/CMakeLists.txt:
+  Clang doesn't support disabling CUDA real code generation.
+*)*$

+ 4 - 0
Tests/RunCMake/CUDA_architectures/architectures-suffix-stdout.txt

@@ -0,0 +1,4 @@
+-- CMAKE_CUDA_ARCHITECTURES='[0-9]+-real;[0-9]+-virtual;'
+-- CMAKE_CUDA_ARCHITECTURES_ALL='[0-9;]+'
+-- CMAKE_CUDA_ARCHITECTURES_ALL_MAJOR='[0-9;]+'
+-- CMAKE_CUDA_ARCHITECTURES_NATIVE='[0-9;]+'

+ 6 - 0
Tests/RunCMake/CUDA_architectures/architectures-suffix.cmake

@@ -0,0 +1,6 @@
+set(CMAKE_CUDA_ARCHITECTURES "${arch}-real;${arch}-virtual;")
+enable_language(CUDA)
+message(STATUS "CMAKE_CUDA_ARCHITECTURES='${CMAKE_CUDA_ARCHITECTURES}'")
+message(STATUS "CMAKE_CUDA_ARCHITECTURES_ALL='${CMAKE_CUDA_ARCHITECTURES_ALL}'")
+message(STATUS "CMAKE_CUDA_ARCHITECTURES_ALL_MAJOR='${CMAKE_CUDA_ARCHITECTURES_ALL_MAJOR}'")
+message(STATUS "CMAKE_CUDA_ARCHITECTURES_NATIVE='${CMAKE_CUDA_ARCHITECTURES_NATIVE}'")