# 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" OR (CMAKE_${lang}_COMPILER_ID STREQUAL "Clang" AND CMAKE_${lang}_COMPILER_VERSION VERSION_GREATER_EQUAL 16.0) ) 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" OR (CMAKE_${lang}_COMPILER_ID STREQUAL "Clang" AND CMAKE_${lang}_COMPILER_VERSION VERSION_GREATER_EQUAL 16.0) ) 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) list(REMOVE_ITEM CMAKE_CUDA_ARCHITECTURES_ALL 35 37) list(REMOVE_ITEM CMAKE_CUDA_ARCHITECTURES_ALL_MAJOR 35) 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()