From c4ae9384ff4d355f51c06180984dd4d053f074cc Mon Sep 17 00:00:00 2001 From: Raul Tambre Date: Tue, 24 Nov 2020 19:21:36 +0200 Subject: CUDA: Initialize CMAKE_CUDA_ARCHITECTURES using $ENV{CUDAARCHS} NVCC's default architecture may be newer than the one supported by the machine's GPU. In such cases it's useful to have an environment variable for initializing CMAKE_CUDA_ARCHITECTURES to avoid specifying it for every invocation. --- Help/envvar/CUDAARCHS.rst | 13 +++++++++++++ Help/manual/cmake-env-variables.7.rst | 1 + Help/release/dev/cuda-archs-env.rst | 6 ++++++ Help/variable/CMAKE_CUDA_ARCHITECTURES.rst | 3 ++- Modules/CMakeDetermineCUDACompiler.cmake | 4 ++++ 5 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 Help/envvar/CUDAARCHS.rst create mode 100644 Help/release/dev/cuda-archs-env.rst diff --git a/Help/envvar/CUDAARCHS.rst b/Help/envvar/CUDAARCHS.rst new file mode 100644 index 0000000..82369cd --- /dev/null +++ b/Help/envvar/CUDAARCHS.rst @@ -0,0 +1,13 @@ +CUDAARCHS +--------- + +.. versionadded:: 3.20 + +.. include:: ENV_VAR.txt + +Value used to initialize :variable:`CMAKE_CUDA_ARCHITECTURES` on the first +configuration if it's not already defined. Subsequent runs will use the value +stored in the cache. + +This is a semicolon-separated list of architectures as described in +:prop_tgt:`CUDA_ARCHITECTURES`. diff --git a/Help/manual/cmake-env-variables.7.rst b/Help/manual/cmake-env-variables.7.rst index 13e0d39..26e0c48 100644 --- a/Help/manual/cmake-env-variables.7.rst +++ b/Help/manual/cmake-env-variables.7.rst @@ -56,6 +56,7 @@ Environment Variables for Languages /envvar/CC /envvar/CFLAGS /envvar/CSFLAGS + /envvar/CUDAARCHS /envvar/CUDACXX /envvar/CUDAFLAGS /envvar/CUDAHOSTCXX diff --git a/Help/release/dev/cuda-archs-env.rst b/Help/release/dev/cuda-archs-env.rst new file mode 100644 index 0000000..a2afcbe --- /dev/null +++ b/Help/release/dev/cuda-archs-env.rst @@ -0,0 +1,6 @@ +cuda-archs-env +-------------- + +* The :envvar:`CUDAARCHS` environment variable was added for initializing + :variable:`CMAKE_CUDA_ARCHITECTURES`. Useful in cases where the compiler + default is unsuitable for the machine's GPU. diff --git a/Help/variable/CMAKE_CUDA_ARCHITECTURES.rst b/Help/variable/CMAKE_CUDA_ARCHITECTURES.rst index 985040d..7f7e679 100644 --- a/Help/variable/CMAKE_CUDA_ARCHITECTURES.rst +++ b/Help/variable/CMAKE_CUDA_ARCHITECTURES.rst @@ -5,7 +5,8 @@ CMAKE_CUDA_ARCHITECTURES Default value for :prop_tgt:`CUDA_ARCHITECTURES` property of targets. -This is initialized as follows depending on :variable:`CMAKE_CUDA_COMPILER_ID _COMPILER_ID>`: +Initialized by the :envvar:`CUDAARCHS` environment variable if set. +Otherwise as follows depending on :variable:`CMAKE_CUDA_COMPILER_ID _COMPILER_ID>`: - For ``Clang``: the oldest architecture that works. diff --git a/Modules/CMakeDetermineCUDACompiler.cmake b/Modules/CMakeDetermineCUDACompiler.cmake index 972adef..578729c 100644 --- a/Modules/CMakeDetermineCUDACompiler.cmake +++ b/Modules/CMakeDetermineCUDACompiler.cmake @@ -47,6 +47,10 @@ if(NOT $ENV{CUDAHOSTCXX} STREQUAL "") endif() endif() +if(NOT "$ENV{CUDAARCHS}" STREQUAL "") + set(CMAKE_CUDA_ARCHITECTURES "$ENV{CUDAARCHS}" CACHE STRING "CUDA architectures") +endif() + # Build a small source file to identify the compiler. if(NOT CMAKE_CUDA_COMPILER_ID_RUN) set(CMAKE_CUDA_COMPILER_ID_RUN 1) -- cgit v0.12