summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2023-09-15 14:54:23 (GMT)
committerBrad King <brad.king@kitware.com>2023-09-21 19:34:28 (GMT)
commit0db0fe7958346ace0f5f01496e071c365faf3eb9 (patch)
treeb0e9b3a1f09dfe40b689d3984b3b2aa5732afb79
parentc16f1e2b938918c4c8c917c713d09eb6af36ce3b (diff)
downloadCMake-0db0fe7958346ace0f5f01496e071c365faf3eb9.zip
CMake-0db0fe7958346ace0f5f01496e071c365faf3eb9.tar.gz
CMake-0db0fe7958346ace0f5f01496e071c365faf3eb9.tar.bz2
CUDA: Factor out helper to compute all CUDA architectures
Prepare to use it for other languages.
-rw-r--r--Modules/CMakeDetermineCUDACompiler.cmake8
-rw-r--r--Modules/CUDA/architectures.cmake82
-rw-r--r--Modules/Internal/CMakeCUDAArchitecturesAll.cmake88
3 files changed, 95 insertions, 83 deletions
diff --git a/Modules/CMakeDetermineCUDACompiler.cmake b/Modules/CMakeDetermineCUDACompiler.cmake
index e698b79..481a15b 100644
--- a/Modules/CMakeDetermineCUDACompiler.cmake
+++ b/Modules/CMakeDetermineCUDACompiler.cmake
@@ -84,6 +84,7 @@ if(NOT CMAKE_CUDA_COMPILER_ID_RUN)
# - CMAKE_CUDA_COMPILER_LIBRARY_ROOT
# We save them in CMakeCUDACompiler.cmake so FindCUDAToolkit can
# avoid searching on future runs and the toolkit is the same.
+ # Match arguments with cmake_cuda_architectures_all call.
include(Internal/CMakeCUDAFindToolkit)
cmake_cuda_find_toolkit(CUDA CMAKE_CUDA_COMPILER_)
@@ -157,7 +158,12 @@ if(NOT CMAKE_CUDA_COMPILER_ID_RUN)
set(CMAKE_CUDA_COMPILER_TOOLKIT_VERSION ${CMAKE_CUDA_COMPILER_VERSION})
endif()
- include(${CMAKE_ROOT}/Modules/CUDA/architectures.cmake)
+ include(Internal/CMakeCUDAArchitecturesAll)
+ # From CMAKE_CUDA_COMPILER_TOOLKIT_VERSION and CMAKE_CUDA_COMPILER_{ID,VERSION}, get:
+ # - CMAKE_CUDA_ARCHITECTURES_ALL
+ # - CMAKE_CUDA_ARCHITECTURES_ALL_MAJOR
+ # Match arguments with cmake_cuda_find_toolkit call.
+ cmake_cuda_architectures_all(CUDA CMAKE_CUDA_COMPILER_)
_cmake_find_compiler_sysroot(CUDA)
endif()
diff --git a/Modules/CUDA/architectures.cmake b/Modules/CUDA/architectures.cmake
deleted file mode 100644
index 87cbaaf..0000000
--- a/Modules/CUDA/architectures.cmake
+++ /dev/null
@@ -1,82 +0,0 @@
-# See supported GPUs on Wikipedia
-# https://en.wikipedia.org/wiki/CUDA#GPUs_supported
-
-# Initial set based on CUDA 7.0.
-set(CMAKE_CUDA_ARCHITECTURES_ALL 20 21 30 35 37 50 52 53)
-set(CMAKE_CUDA_ARCHITECTURES_ALL_MAJOR 20 30 35 50)
-
-if(CMAKE_CUDA_COMPILER_TOOLKIT_VERSION VERSION_GREATER_EQUAL 8.0)
- list(APPEND CMAKE_CUDA_ARCHITECTURES_ALL 60 61 62)
- list(APPEND CMAKE_CUDA_ARCHITECTURES_ALL_MAJOR 60)
-endif()
-
-if(CMAKE_CUDA_COMPILER_TOOLKIT_VERSION VERSION_GREATER_EQUAL 9.0)
- if(CMAKE_CUDA_COMPILER_ID STREQUAL "NVIDIA"
- OR (CMAKE_CUDA_COMPILER_ID STREQUAL "Clang" AND CMAKE_CUDA_COMPILER_VERSION VERSION_GREATER_EQUAL 6.0)
- )
- list(APPEND CMAKE_CUDA_ARCHITECTURES_ALL 70 72)
- list(APPEND CMAKE_CUDA_ARCHITECTURES_ALL_MAJOR 70)
- endif()
-
- list(REMOVE_ITEM CMAKE_CUDA_ARCHITECTURES_ALL 20 21)
- list(REMOVE_ITEM CMAKE_CUDA_ARCHITECTURES_ALL_MAJOR 20)
-endif()
-
-if(CMAKE_CUDA_COMPILER_TOOLKIT_VERSION VERSION_GREATER_EQUAL 10.0)
- if(CMAKE_CUDA_COMPILER_ID STREQUAL "NVIDIA"
- OR (CMAKE_CUDA_COMPILER_ID STREQUAL "Clang" AND CMAKE_CUDA_COMPILER_VERSION VERSION_GREATER_EQUAL 8.0)
- )
- list(APPEND CMAKE_CUDA_ARCHITECTURES_ALL 75)
- endif()
-endif()
-
-if(CMAKE_CUDA_COMPILER_TOOLKIT_VERSION VERSION_GREATER_EQUAL 11.0)
- if(CMAKE_CUDA_COMPILER_ID STREQUAL "NVIDIA"
- OR (CMAKE_CUDA_COMPILER_ID STREQUAL "Clang" AND CMAKE_CUDA_COMPILER_VERSION VERSION_GREATER_EQUAL 11.0)
- )
- list(APPEND CMAKE_CUDA_ARCHITECTURES_ALL 80)
- list(APPEND CMAKE_CUDA_ARCHITECTURES_ALL_MAJOR 80)
- endif()
-
- list(REMOVE_ITEM CMAKE_CUDA_ARCHITECTURES_ALL 30)
- list(REMOVE_ITEM CMAKE_CUDA_ARCHITECTURES_ALL_MAJOR 30)
-endif()
-
-if(CMAKE_CUDA_COMPILER_TOOLKIT_VERSION VERSION_GREATER_EQUAL 11.1)
- if(CMAKE_CUDA_COMPILER_ID STREQUAL "NVIDIA"
- OR (CMAKE_CUDA_COMPILER_ID STREQUAL "Clang" AND CMAKE_CUDA_COMPILER_VERSION VERSION_GREATER_EQUAL 13.0)
- )
- list(APPEND CMAKE_CUDA_ARCHITECTURES_ALL 86)
- endif()
-endif()
-
-if(CMAKE_CUDA_COMPILER_TOOLKIT_VERSION VERSION_GREATER_EQUAL 11.4)
- if(CMAKE_CUDA_COMPILER_ID STREQUAL "NVIDIA")
- list(APPEND CMAKE_CUDA_ARCHITECTURES_ALL 87)
- endif()
-endif()
-
-if(CMAKE_CUDA_COMPILER_TOOLKIT_VERSION VERSION_GREATER_EQUAL 11.8)
- if(CMAKE_CUDA_COMPILER_ID STREQUAL "NVIDIA")
- list(APPEND CMAKE_CUDA_ARCHITECTURES_ALL 89 90)
- list(APPEND CMAKE_CUDA_ARCHITECTURES_ALL_MAJOR 90)
- endif()
-endif()
-
-if(CMAKE_CUDA_COMPILER_TOOLKIT_VERSION VERSION_GREATER_EQUAL 12.0)
- if(CMAKE_CUDA_COMPILER_ID STREQUAL "NVIDIA")
- list(REMOVE_ITEM CMAKE_CUDA_ARCHITECTURES_ALL 35 37)
- list(REMOVE_ITEM CMAKE_CUDA_ARCHITECTURES_ALL_MAJOR 35)
- endif()
-endif()
-
-# only generate jit code for the newest arch for all/all-major
-list(POP_BACK CMAKE_CUDA_ARCHITECTURES_ALL _latest_arch)
-list(TRANSFORM CMAKE_CUDA_ARCHITECTURES_ALL APPEND "-real")
-list(APPEND CMAKE_CUDA_ARCHITECTURES_ALL ${_latest_arch})
-
-list(POP_BACK CMAKE_CUDA_ARCHITECTURES_ALL_MAJOR _latest_arch)
-list(TRANSFORM CMAKE_CUDA_ARCHITECTURES_ALL_MAJOR APPEND "-real")
-list(APPEND CMAKE_CUDA_ARCHITECTURES_ALL_MAJOR ${_latest_arch})
-
-unset(_latest_arch)
diff --git a/Modules/Internal/CMakeCUDAArchitecturesAll.cmake b/Modules/Internal/CMakeCUDAArchitecturesAll.cmake
new file mode 100644
index 0000000..873400a
--- /dev/null
+++ b/Modules/Internal/CMakeCUDAArchitecturesAll.cmake
@@ -0,0 +1,88 @@
+# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+# See supported GPUs on Wikipedia
+# https://en.wikipedia.org/wiki/CUDA#GPUs_supported
+
+function(cmake_cuda_architectures_all lang lang_var_)
+ # Initial set based on CUDA 7.0.
+ set(CMAKE_CUDA_ARCHITECTURES_ALL 20 21 30 35 37 50 52 53)
+ set(CMAKE_CUDA_ARCHITECTURES_ALL_MAJOR 20 30 35 50)
+
+ if(${lang_var_}TOOLKIT_VERSION VERSION_GREATER_EQUAL 8.0)
+ list(APPEND CMAKE_CUDA_ARCHITECTURES_ALL 60 61 62)
+ list(APPEND CMAKE_CUDA_ARCHITECTURES_ALL_MAJOR 60)
+ endif()
+
+ if(${lang_var_}TOOLKIT_VERSION VERSION_GREATER_EQUAL 9.0)
+ if(CMAKE_${lang}_COMPILER_ID STREQUAL "NVIDIA"
+ OR (CMAKE_${lang}_COMPILER_ID STREQUAL "Clang" AND CMAKE_${lang}_COMPILER_VERSION VERSION_GREATER_EQUAL 6.0)
+ )
+ list(APPEND CMAKE_CUDA_ARCHITECTURES_ALL 70 72)
+ list(APPEND CMAKE_CUDA_ARCHITECTURES_ALL_MAJOR 70)
+ endif()
+
+ list(REMOVE_ITEM CMAKE_CUDA_ARCHITECTURES_ALL 20 21)
+ list(REMOVE_ITEM CMAKE_CUDA_ARCHITECTURES_ALL_MAJOR 20)
+ endif()
+
+ if(${lang_var_}TOOLKIT_VERSION VERSION_GREATER_EQUAL 10.0)
+ if(CMAKE_${lang}_COMPILER_ID STREQUAL "NVIDIA"
+ OR (CMAKE_${lang}_COMPILER_ID STREQUAL "Clang" AND CMAKE_${lang}_COMPILER_VERSION VERSION_GREATER_EQUAL 8.0)
+ )
+ list(APPEND CMAKE_CUDA_ARCHITECTURES_ALL 75)
+ endif()
+ endif()
+
+ if(${lang_var_}TOOLKIT_VERSION VERSION_GREATER_EQUAL 11.0)
+ if(CMAKE_${lang}_COMPILER_ID STREQUAL "NVIDIA"
+ OR (CMAKE_${lang}_COMPILER_ID STREQUAL "Clang" AND CMAKE_${lang}_COMPILER_VERSION VERSION_GREATER_EQUAL 11.0)
+ )
+ list(APPEND CMAKE_CUDA_ARCHITECTURES_ALL 80)
+ list(APPEND CMAKE_CUDA_ARCHITECTURES_ALL_MAJOR 80)
+ endif()
+
+ list(REMOVE_ITEM CMAKE_CUDA_ARCHITECTURES_ALL 30)
+ list(REMOVE_ITEM CMAKE_CUDA_ARCHITECTURES_ALL_MAJOR 30)
+ endif()
+
+ if(${lang_var_}TOOLKIT_VERSION VERSION_GREATER_EQUAL 11.1)
+ if(CMAKE_${lang}_COMPILER_ID STREQUAL "NVIDIA"
+ OR (CMAKE_${lang}_COMPILER_ID STREQUAL "Clang" AND CMAKE_${lang}_COMPILER_VERSION VERSION_GREATER_EQUAL 13.0)
+ )
+ list(APPEND CMAKE_CUDA_ARCHITECTURES_ALL 86)
+ endif()
+ endif()
+
+ if(${lang_var_}TOOLKIT_VERSION VERSION_GREATER_EQUAL 11.4)
+ if(CMAKE_${lang}_COMPILER_ID STREQUAL "NVIDIA")
+ list(APPEND CMAKE_CUDA_ARCHITECTURES_ALL 87)
+ endif()
+ endif()
+
+ if(${lang_var_}TOOLKIT_VERSION VERSION_GREATER_EQUAL 11.8)
+ if(CMAKE_${lang}_COMPILER_ID STREQUAL "NVIDIA")
+ list(APPEND CMAKE_CUDA_ARCHITECTURES_ALL 89 90)
+ list(APPEND CMAKE_CUDA_ARCHITECTURES_ALL_MAJOR 90)
+ endif()
+ endif()
+
+ if(${lang_var_}TOOLKIT_VERSION VERSION_GREATER_EQUAL 12.0)
+ if(CMAKE_${lang}_COMPILER_ID STREQUAL "NVIDIA")
+ list(REMOVE_ITEM CMAKE_CUDA_ARCHITECTURES_ALL 35 37)
+ list(REMOVE_ITEM CMAKE_CUDA_ARCHITECTURES_ALL_MAJOR 35)
+ endif()
+ endif()
+
+ # only generate jit code for the newest arch for all/all-major
+ list(POP_BACK CMAKE_CUDA_ARCHITECTURES_ALL _latest_arch)
+ list(TRANSFORM CMAKE_CUDA_ARCHITECTURES_ALL APPEND "-real")
+ list(APPEND CMAKE_CUDA_ARCHITECTURES_ALL ${_latest_arch})
+
+ list(POP_BACK CMAKE_CUDA_ARCHITECTURES_ALL_MAJOR _latest_arch)
+ list(TRANSFORM CMAKE_CUDA_ARCHITECTURES_ALL_MAJOR APPEND "-real")
+ list(APPEND CMAKE_CUDA_ARCHITECTURES_ALL_MAJOR ${_latest_arch})
+
+ set(CMAKE_${lang}_ARCHITECTURES_ALL "${CMAKE_CUDA_ARCHITECTURES_ALL}" PARENT_SCOPE)
+ set(CMAKE_${lang}_ARCHITECTURES_ALL_MAJOR "${CMAKE_CUDA_ARCHITECTURES_ALL_MAJOR}" PARENT_SCOPE)
+endfunction()