summaryrefslogtreecommitdiff
path: root/Modules
diff options
context:
space:
mode:
Diffstat (limited to 'Modules')
-rw-r--r--Modules/CMakeTestCUDACompiler.cmake22
-rw-r--r--Modules/CUDA/architectures.cmake22
2 files changed, 42 insertions, 2 deletions
diff --git a/Modules/CMakeTestCUDACompiler.cmake b/Modules/CMakeTestCUDACompiler.cmake
index 95f015fded..ea074822d7 100644
--- a/Modules/CMakeTestCUDACompiler.cmake
+++ b/Modules/CMakeTestCUDACompiler.cmake
@@ -30,7 +30,27 @@ if(CMAKE_CUDA_ABI_COMPILED)
OUTPUT_STRIP_TRAILING_WHITESPACE
)
if(_CUDA_ARCHS_RESULT EQUAL 0)
- set(CMAKE_CUDA_ARCHITECTURES_NATIVE "${_CUDA_ARCHS_OUTPUT}")
+ if("$ENV{CMAKE_CUDA_ARCHITECTURES_NATIVE_CLAMP}")
+ # Undocumented hook used by CMake's CI.
+ # Clamp native architecture to version range supported by this CUDA.
+ list(GET CMAKE_CUDA_ARCHITECTURES_ALL 0 _CUDA_ARCH_MIN)
+ list(GET CMAKE_CUDA_ARCHITECTURES_ALL -1 _CUDA_ARCH_MAX)
+ set(CMAKE_CUDA_ARCHITECTURES_NATIVE "")
+ foreach(_CUDA_ARCH IN LISTS _CUDA_ARCHS_OUTPUT)
+ if(_CUDA_ARCH LESS _CUDA_ARCH_MIN)
+ set(_CUDA_ARCH "${_CUDA_ARCH_MIN}")
+ endif()
+ if(_CUDA_ARCH GREATER _CUDA_ARCH_MAX)
+ set(_CUDA_ARCH "${_CUDA_ARCH_MAX}")
+ endif()
+ list(APPEND CMAKE_CUDA_ARCHITECTURES_NATIVE ${_CUDA_ARCH})
+ endforeach()
+ unset(_CUDA_ARCH)
+ unset(_CUDA_ARCH_MIN)
+ unset(_CUDA_ARCH_MAX)
+ else()
+ set(CMAKE_CUDA_ARCHITECTURES_NATIVE "${_CUDA_ARCHS_OUTPUT}")
+ endif()
list(REMOVE_DUPLICATES CMAKE_CUDA_ARCHITECTURES_NATIVE)
else()
if(NOT _CUDA_ARCHS_RESULT MATCHES "[0-9]+")
diff --git a/Modules/CUDA/architectures.cmake b/Modules/CUDA/architectures.cmake
index 521243b44e..9b1f2b50a9 100644
--- a/Modules/CUDA/architectures.cmake
+++ b/Modules/CUDA/architectures.cmake
@@ -66,7 +66,27 @@ if(NOT CMAKE_GENERATOR MATCHES "Visual Studio")
)
endif()
if(_CUDA_ARCHS_RESULT EQUAL 0)
- set(_CUDA_ARCHITECTURES_NATIVE "${_CUDA_ARCHS_OUTPUT}")
+ if("$ENV{CMAKE_CUDA_ARCHITECTURES_NATIVE_CLAMP}")
+ # Undocumented hook used by CMake's CI.
+ # Clamp native architecture to version range supported by this CUDA.
+ list(GET CMAKE_CUDA_ARCHITECTURES_ALL 0 _CUDA_ARCH_MIN)
+ list(GET CMAKE_CUDA_ARCHITECTURES_ALL -1 _CUDA_ARCH_MAX)
+ set(_CUDA_ARCHITECTURES_NATIVE "")
+ foreach(_CUDA_ARCH IN LISTS _CUDA_ARCHS_OUTPUT)
+ if(_CUDA_ARCH LESS _CUDA_ARCH_MIN)
+ set(_CUDA_ARCH "${_CUDA_ARCH_MIN}")
+ endif()
+ if(_CUDA_ARCH GREATER _CUDA_ARCH_MAX)
+ set(_CUDA_ARCH "${_CUDA_ARCH_MAX}")
+ endif()
+ list(APPEND _CUDA_ARCHITECTURES_NATIVE ${_CUDA_ARCH})
+ endforeach()
+ unset(_CUDA_ARCH)
+ unset(_CUDA_ARCH_MIN)
+ unset(_CUDA_ARCH_MAX)
+ else()
+ set(_CUDA_ARCHITECTURES_NATIVE "${_CUDA_ARCHS_OUTPUT}")
+ endif()
list(REMOVE_DUPLICATES _CUDA_ARCHITECTURES_NATIVE)
else()
if (NOT _CUDA_ARCHS_RESULT MATCHES "[0-9]+")