From 7968d9d442d5582f12c9eb34e9883cc77bb1b068 Mon Sep 17 00:00:00 2001 From: Brad King Date: Tue, 14 Jul 2020 15:19:56 -0400 Subject: Help: Document CMAKE_CUDA_HOST_COMPILER as specific to NVIDIA nvcc Explain the purpose of this variable and the conditions under which it can be set. Point out that it should not be set explicitly without also setting `CMAKE_CUDA_COMPILER` explicitly. Issue: #20826 --- Help/variable/CMAKE_CUDA_HOST_COMPILER.rst | 25 ++++++++++++++++++++----- Modules/CheckLanguage.cmake | 2 +- 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/Help/variable/CMAKE_CUDA_HOST_COMPILER.rst b/Help/variable/CMAKE_CUDA_HOST_COMPILER.rst index 34512b4..07342b5 100644 --- a/Help/variable/CMAKE_CUDA_HOST_COMPILER.rst +++ b/Help/variable/CMAKE_CUDA_HOST_COMPILER.rst @@ -3,8 +3,23 @@ CMAKE_CUDA_HOST_COMPILER .. versionadded:: 3.10 -Executable to use when compiling host code when compiling ``CUDA`` language -files. Maps to the ``nvcc -ccbin`` option. Will only be used by CMake on the first -configuration to determine a valid host compiler for ``CUDA``. After a valid -host compiler has been found, this value is read-only. This variable takes -priority over the :envvar:`CUDAHOSTCXX` environment variable. +When :variable:`CMAKE_CUDA_COMPILER _COMPILER>` is set to +NVIDIA ``nvcc``, ``CMAKE_CUDA_HOST_COMPILER`` selects the compiler +executable to use when compiling host code for ``CUDA`` language files. +This maps to the ``nvcc -ccbin`` option. + +The ``CMAKE_CUDA_HOST_COMPILER`` variable may be set explicitly before CUDA is +first enabled by a :command:`project` or :command:`enable_language` command. +This can be done via ``-DCMAKE_CUDA_HOST_COMPILER=...`` on the command line +or in a :ref:`toolchain file `. Or, one may set +the :envvar:`CUDAHOSTCXX` environment variable to provide a default value. + +Once the CUDA language is enabled, the ``CMAKE_CUDA_HOST_COMPILER`` variable +is read-only and changes to it are undefined behavior. + +.. note:: + + Since ``CMAKE_CUDA_HOST_COMPILER`` is meaningful only when the + ``CMAKE_CUDA_COMPILER`` is ``nvcc``, it does not make sense to + set ``CMAKE_CUDA_HOST_COMPILER`` explicitly without also setting + ``CMAKE_CUDA_COMPILER`` explicitly to be sure it is ``nvcc``. diff --git a/Modules/CheckLanguage.cmake b/Modules/CheckLanguage.cmake index d67d8d3..44387d4 100644 --- a/Modules/CheckLanguage.cmake +++ b/Modules/CheckLanguage.cmake @@ -20,7 +20,7 @@ test project. The result is cached in :variable:`CMAKE__COMPILER` as the compiler that was found, or ``NOTFOUND`` if the language cannot be enabled. For CUDA which can have an explicit host compiler, the cache :variable:`CMAKE_CUDA_HOST_COMPILER` variable will be set if it was required -for compilation. +for compilation (and cleared if it was not). Example: -- cgit v0.12