mirror of
https://github.com/Kitware/CMake.git
synced 2026-01-05 21:31:08 -06:00
HIP: Add CMAKE_HIP_HOST_COMPILER when compiler is NVCC
Also add `HIPHOSTCXX` environment variable.
This commit is contained in:
19
Help/envvar/HIPHOSTCXX.rst
Normal file
19
Help/envvar/HIPHOSTCXX.rst
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
HIPHOSTCXX
|
||||||
|
-----------
|
||||||
|
|
||||||
|
.. versionadded:: 3.28
|
||||||
|
|
||||||
|
.. include:: ENV_VAR.txt
|
||||||
|
|
||||||
|
Preferred executable for compiling host code when compiling ``HIP``
|
||||||
|
language files with the NVIDIA CUDA Compiler. Will only be used by CMake
|
||||||
|
on the first configuration to determine ``HIP`` host compiler, after which
|
||||||
|
the value for ``HIPHOSTCXX`` is stored in the cache as
|
||||||
|
:variable:`CMAKE_HIP_HOST_COMPILER <CMAKE_<LANG>_HOST_COMPILER>`.
|
||||||
|
|
||||||
|
This environment variable is primarily meant for use with projects that
|
||||||
|
enable ``HIP`` as a first-class language.
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
|
||||||
|
Ignored when using :ref:`Visual Studio Generators`.
|
||||||
@@ -84,6 +84,7 @@ Environment Variables for Languages
|
|||||||
/envvar/FFLAGS
|
/envvar/FFLAGS
|
||||||
/envvar/HIPCXX
|
/envvar/HIPCXX
|
||||||
/envvar/HIPFLAGS
|
/envvar/HIPFLAGS
|
||||||
|
/envvar/HIPHOSTCXX
|
||||||
/envvar/ISPC
|
/envvar/ISPC
|
||||||
/envvar/ISPCFLAGS
|
/envvar/ISPCFLAGS
|
||||||
/envvar/OBJC
|
/envvar/OBJC
|
||||||
|
|||||||
@@ -4,22 +4,25 @@ CMAKE_<LANG>_HOST_COMPILER
|
|||||||
.. versionadded:: 3.10
|
.. versionadded:: 3.10
|
||||||
``CMAKE_CUDA_HOST_COMPILER``
|
``CMAKE_CUDA_HOST_COMPILER``
|
||||||
|
|
||||||
This variable is available when ``<LANG>`` is ``CUDA``.
|
.. versionadded:: 3.28
|
||||||
|
``CMAKE_HIP_HOST_COMPILER``
|
||||||
|
|
||||||
|
This variable is available when ``<LANG>`` is ``CUDA`` or ``HIP``.
|
||||||
|
|
||||||
When :variable:`CMAKE_<LANG>_COMPILER_ID` is
|
When :variable:`CMAKE_<LANG>_COMPILER_ID` is
|
||||||
``NVIDIA``, ``CMAKE_<LANG>_HOST_COMPILER`` selects the compiler executable
|
``NVIDIA``, ``CMAKE_<LANG>_HOST_COMPILER`` selects the compiler executable
|
||||||
to use when compiling host code for ``CUDA`` language files.
|
to use when compiling host code for ``CUDA`` or ``HIP`` language files.
|
||||||
This maps to the ``nvcc -ccbin`` option.
|
This maps to the ``nvcc -ccbin`` option.
|
||||||
|
|
||||||
The ``CMAKE_<LANG>_HOST_COMPILER`` variable may be set explicitly before CUDA
|
The ``CMAKE_<LANG>_HOST_COMPILER`` variable may be set explicitly before CUDA
|
||||||
is first enabled by a :command:`project` or :command:`enable_language`
|
or HIP is first enabled by a :command:`project` or :command:`enable_language`
|
||||||
command.
|
command.
|
||||||
This can be done via ``-DCMAKE_<LANG>_HOST_COMPILER=...`` on the command line
|
This can be done via ``-DCMAKE_<LANG>_HOST_COMPILER=...`` on the command line
|
||||||
or in a :ref:`toolchain file <Cross Compiling Toolchain>`. Or, one may set
|
or in a :ref:`toolchain file <Cross Compiling Toolchain>`. Or, one may set
|
||||||
the :envvar:`CUDAHOSTCXX` environment variable to
|
the :envvar:`CUDAHOSTCXX` or :envvar:`HIPHOSTCXX` environment variable to
|
||||||
provide a default value.
|
provide a default value.
|
||||||
|
|
||||||
Once the CUDA language is enabled, the ``CMAKE_<LANG>_HOST_COMPILER``
|
Once the CUDA or HIP language is enabled, the ``CMAKE_<LANG>_HOST_COMPILER``
|
||||||
variable is read-only and changes to it are undefined behavior.
|
variable is read-only and changes to it are undefined behavior.
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
|
|||||||
@@ -107,6 +107,13 @@ if(NOT CMAKE_HIP_COMPILER_ID_RUN)
|
|||||||
# If the user set CMAKE_HIP_ARCHITECTURES, validate its value.
|
# If the user set CMAKE_HIP_ARCHITECTURES, validate its value.
|
||||||
include(Internal/CMakeCUDAArchitecturesValidate)
|
include(Internal/CMakeCUDAArchitecturesValidate)
|
||||||
cmake_cuda_architectures_validate(HIP)
|
cmake_cuda_architectures_validate(HIP)
|
||||||
|
|
||||||
|
if(NOT CMAKE_HIP_HOST_COMPILER AND NOT $ENV{HIPHOSTCXX} STREQUAL "")
|
||||||
|
get_filename_component(CMAKE_HIP_HOST_COMPILER $ENV{HIPHOSTCXX} PROGRAM)
|
||||||
|
if(NOT EXISTS "${CMAKE_HIP_HOST_COMPILER}")
|
||||||
|
message(FATAL_ERROR "Could not find compiler set in environment variable HIPHOSTCXX:\n$ENV{HIPHOSTCXX}.\n${CMAKE_HIP_HOST_COMPILER}")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(CMAKE_HIP_COMPILER_ID STREQUAL "Clang")
|
if(CMAKE_HIP_COMPILER_ID STREQUAL "Clang")
|
||||||
@@ -114,6 +121,9 @@ if(NOT CMAKE_HIP_COMPILER_ID_RUN)
|
|||||||
elseif(CMAKE_HIP_COMPILER_ID STREQUAL "NVIDIA")
|
elseif(CMAKE_HIP_COMPILER_ID STREQUAL "NVIDIA")
|
||||||
# Tell nvcc to treat .hip files as CUDA sources.
|
# Tell nvcc to treat .hip files as CUDA sources.
|
||||||
list(APPEND CMAKE_HIP_COMPILER_ID_TEST_FLAGS_FIRST "-x cu -v")
|
list(APPEND CMAKE_HIP_COMPILER_ID_TEST_FLAGS_FIRST "-x cu -v")
|
||||||
|
if(CMAKE_HIP_HOST_COMPILER)
|
||||||
|
string(APPEND CMAKE_HIP_COMPILER_ID_TEST_FLAGS_FIRST " -ccbin=\"${CMAKE_HIP_HOST_COMPILER}\"")
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# We perform compiler identification for a second time to extract implicit linking info.
|
# We perform compiler identification for a second time to extract implicit linking info.
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ or :command:`project` commands:
|
|||||||
a previous call, the check is skipped.
|
a previous call, the check is skipped.
|
||||||
|
|
||||||
:variable:`CMAKE_<LANG>_HOST_COMPILER`
|
:variable:`CMAKE_<LANG>_HOST_COMPILER`
|
||||||
This variable is set when ``<lang>`` is ``CUDA``.
|
This variable is set when ``<lang>`` is ``CUDA`` or ``HIP``.
|
||||||
|
|
||||||
If the check detects an explicit host compiler that is required for
|
If the check detects an explicit host compiler that is required for
|
||||||
compilation, this variable will be set to that compiler.
|
compilation, this variable will be set to that compiler.
|
||||||
@@ -65,7 +65,7 @@ macro(check_language lang)
|
|||||||
file(REMOVE_RECURSE ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/Check${lang})
|
file(REMOVE_RECURSE ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/Check${lang})
|
||||||
|
|
||||||
set(extra_compiler_variables)
|
set(extra_compiler_variables)
|
||||||
if(${lang} STREQUAL CUDA AND NOT CMAKE_GENERATOR MATCHES "Visual Studio")
|
if("${lang}" MATCHES "^(CUDA|HIP)$" AND NOT CMAKE_GENERATOR MATCHES "Visual Studio")
|
||||||
set(extra_compiler_variables "set(CMAKE_CUDA_HOST_COMPILER \\\"\${CMAKE_CUDA_HOST_COMPILER}\\\")")
|
set(extra_compiler_variables "set(CMAKE_CUDA_HOST_COMPILER \\\"\${CMAKE_CUDA_HOST_COMPILER}\\\")")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ endif()
|
|||||||
unset(expect_Fortran)
|
unset(expect_Fortran)
|
||||||
set(expect_NoSuchLanguage 0)
|
set(expect_NoSuchLanguage 0)
|
||||||
|
|
||||||
set(LANGUAGES C CXX Fortran CUDA NoSuchLanguage)
|
set(LANGUAGES C CXX Fortran CUDA HIP NoSuchLanguage)
|
||||||
if(APPLE)
|
if(APPLE)
|
||||||
list(APPEND LANGUAGES OBJC OBJCXX)
|
list(APPEND LANGUAGES OBJC OBJCXX)
|
||||||
endif()
|
endif()
|
||||||
|
|||||||
Reference in New Issue
Block a user