NVCC: Detect host compiler id and version
Report them in `CMAKE_<LANG>_HOST_COMPILER_{ID,VERSION}` variables. Fixes: #20901
This commit is contained in:
parent
38cacd83a5
commit
3b4d0df670
@ -637,6 +637,8 @@ Variables for Languages
|
||||
/variable/CMAKE_LANG_FLAGS_RELWITHDEBINFO
|
||||
/variable/CMAKE_LANG_FLAGS_RELWITHDEBINFO_INIT
|
||||
/variable/CMAKE_LANG_HOST_COMPILER
|
||||
/variable/CMAKE_LANG_HOST_COMPILER_ID
|
||||
/variable/CMAKE_LANG_HOST_COMPILER_VERSION
|
||||
/variable/CMAKE_LANG_IGNORE_EXTENSIONS
|
||||
/variable/CMAKE_LANG_IMPLICIT_INCLUDE_DIRECTORIES
|
||||
/variable/CMAKE_LANG_IMPLICIT_LINK_DIRECTORIES
|
||||
|
8
Help/release/dev/cuda-host-compiler-id.rst
Normal file
8
Help/release/dev/cuda-host-compiler-id.rst
Normal file
@ -0,0 +1,8 @@
|
||||
cuda-host-compiler-id
|
||||
---------------------
|
||||
|
||||
* The :variable:`CMAKE_<LANG>_HOST_COMPILER_ID` and
|
||||
:variable:`CMAKE_<LANG>_HOST_COMPILER_VERSION` variables were added,
|
||||
where ``<LANG>`` is either ``CUDA`` or ``HIP``. They are populated
|
||||
when :variable:`CMAKE_<LANG>_COMPILER_ID` is ``NVIDIA`` to identify
|
||||
NVCC's host compiler.
|
@ -42,3 +42,8 @@ variable is read-only and changes to it are undefined behavior.
|
||||
.. note::
|
||||
|
||||
Ignored when using :ref:`Visual Studio Generators`.
|
||||
|
||||
See the :variable:`CMAKE_<LANG>_HOST_COMPILER_ID` and
|
||||
:variable:`CMAKE_<LANG>_HOST_COMPILER_VERSION` variables for
|
||||
information about the host compiler used by ``nvcc``, whether
|
||||
by default or specified by ``CMAKE_<LANG>_HOST_COMPILER``.
|
||||
|
10
Help/variable/CMAKE_LANG_HOST_COMPILER_ID.rst
Normal file
10
Help/variable/CMAKE_LANG_HOST_COMPILER_ID.rst
Normal file
@ -0,0 +1,10 @@
|
||||
CMAKE_<LANG>_HOST_COMPILER_ID
|
||||
-----------------------------
|
||||
|
||||
.. versionadded:: 3.31
|
||||
|
||||
This variable is available when ``<LANG>`` is ``CUDA`` or ``HIP``
|
||||
and :variable:`CMAKE_<LANG>_COMPILER_ID` is ``NVIDIA``.
|
||||
It contains the identity of the host compiler invoked by ``nvcc``,
|
||||
either by default or as specified by :variable:`CMAKE_<LANG>_HOST_COMPILER`,
|
||||
among possibilities documented by :variable:`CMAKE_<LANG>_COMPILER_ID`.
|
10
Help/variable/CMAKE_LANG_HOST_COMPILER_VERSION.rst
Normal file
10
Help/variable/CMAKE_LANG_HOST_COMPILER_VERSION.rst
Normal file
@ -0,0 +1,10 @@
|
||||
CMAKE_<LANG>_HOST_COMPILER_VERSION
|
||||
----------------------------------
|
||||
|
||||
.. versionadded:: 3.31
|
||||
|
||||
This variable is available when ``<LANG>`` is ``CUDA`` or ``HIP``
|
||||
and :variable:`CMAKE_<LANG>_COMPILER_ID` is ``NVIDIA``.
|
||||
It contains the version of the host compiler invoked by ``nvcc``,
|
||||
either by default or as specified by :variable:`CMAKE_<LANG>_HOST_COMPILER`,
|
||||
in the same format as :variable:`CMAKE_<LANG>_COMPILER_VERSION`.
|
@ -3,6 +3,8 @@ set(CMAKE_CUDA_HOST_COMPILER "@CMAKE_CUDA_HOST_COMPILER@")
|
||||
set(CMAKE_CUDA_HOST_LINK_LAUNCHER "@CMAKE_CUDA_HOST_LINK_LAUNCHER@")
|
||||
set(CMAKE_CUDA_COMPILER_ID "@CMAKE_CUDA_COMPILER_ID@")
|
||||
set(CMAKE_CUDA_COMPILER_VERSION "@CMAKE_CUDA_COMPILER_VERSION@")
|
||||
set(CMAKE_CUDA_HOST_COMPILER_ID "@CMAKE_CUDA_HOST_COMPILER_ID@")
|
||||
set(CMAKE_CUDA_HOST_COMPILER_VERSION "@CMAKE_CUDA_HOST_COMPILER_VERSION@")
|
||||
set(CMAKE_CUDA_DEVICE_LINKER "@CMAKE_CUDA_DEVICE_LINKER@")
|
||||
set(CMAKE_CUDA_FATBINARY "@CMAKE_CUDA_FATBINARY@")
|
||||
set(CMAKE_CUDA_STANDARD_COMPUTED_DEFAULT "@CMAKE_CUDA_STANDARD_COMPUTED_DEFAULT@")
|
||||
|
@ -16,6 +16,28 @@ char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]";
|
||||
@CMAKE_CUDA_COMPILER_ID_PLATFORM_CONTENT@
|
||||
@CMAKE_CUDA_COMPILER_ID_ERROR_FOR_TEST@
|
||||
|
||||
#ifdef HOST_COMPILER_ID
|
||||
char const* info_host_compiler = "INFO" ":" "host_compiler[" HOST_COMPILER_ID "]";
|
||||
#endif
|
||||
#ifdef HOST_COMPILER_VERSION
|
||||
char const* info_host_compiler_version = "INFO" ":" "host_compiler_version[" HOST_COMPILER_VERSION "]";
|
||||
#elif defined(HOST_COMPILER_VERSION_MAJOR)
|
||||
char const info_host_compiler_version[] = {
|
||||
'I', 'N', 'F', 'O', ':','h','o','s','t','_',
|
||||
'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[',
|
||||
HOST_COMPILER_VERSION_MAJOR,
|
||||
# ifdef HOST_COMPILER_VERSION_MINOR
|
||||
'.', HOST_COMPILER_VERSION_MINOR,
|
||||
# ifdef HOST_COMPILER_VERSION_PATCH
|
||||
'.', HOST_COMPILER_VERSION_PATCH,
|
||||
# ifdef HOST_COMPILER_VERSION_TWEAK
|
||||
'.', HOST_COMPILER_VERSION_TWEAK,
|
||||
# endif
|
||||
# endif
|
||||
# endif
|
||||
']','\0'};
|
||||
#endif
|
||||
|
||||
#define CXX_STD_11 201103L
|
||||
#define CXX_STD_14 201402L
|
||||
#define CXX_STD_17 201703L
|
||||
@ -74,6 +96,12 @@ int main(int argc, char* argv[])
|
||||
#endif
|
||||
#ifdef SIMULATE_VERSION_MAJOR
|
||||
require += info_simulate_version[argc];
|
||||
#endif
|
||||
#ifdef HOST_COMPILER_ID
|
||||
require += info_host_compiler[argc];
|
||||
#endif
|
||||
#ifdef HOST_COMPILER_VERSION_MAJOR
|
||||
require += info_host_compiler_version[argc];
|
||||
#endif
|
||||
require += info_language_standard_default[argc];
|
||||
require += info_language_extensions_default[argc];
|
||||
|
@ -347,8 +347,17 @@ function(CMAKE_DETERMINE_COMPILER_ID lang flagvar src)
|
||||
else()
|
||||
set(_archid "")
|
||||
endif()
|
||||
if(CMAKE_${lang}_HOST_COMPILER_ID)
|
||||
set(_hostcc " with host compiler ${CMAKE_${lang}_HOST_COMPILER_ID}")
|
||||
if(CMAKE_${lang}_HOST_COMPILER_VERSION)
|
||||
string(APPEND _hostcc " ${CMAKE_${lang}_HOST_COMPILER_VERSION}")
|
||||
endif()
|
||||
else()
|
||||
set(_hostcc "")
|
||||
endif()
|
||||
message(STATUS "The ${lang} compiler identification is "
|
||||
"${CMAKE_${lang}_COMPILER_ID}${_archid}${_version}${_variant}")
|
||||
"${CMAKE_${lang}_COMPILER_ID}${_archid}${_version}${_variant}${_hostcc}")
|
||||
unset(_hostcc)
|
||||
unset(_archid)
|
||||
unset(_version)
|
||||
unset(_variant)
|
||||
@ -373,6 +382,8 @@ function(CMAKE_DETERMINE_COMPILER_ID lang flagvar src)
|
||||
set(CMAKE_${lang}_COMPILER_WRAPPER "${CMAKE_${lang}_COMPILER_WRAPPER}" PARENT_SCOPE)
|
||||
set(CMAKE_${lang}_SIMULATE_ID "${CMAKE_${lang}_SIMULATE_ID}" PARENT_SCOPE)
|
||||
set(CMAKE_${lang}_SIMULATE_VERSION "${CMAKE_${lang}_SIMULATE_VERSION}" PARENT_SCOPE)
|
||||
set(CMAKE_${lang}_HOST_COMPILER_ID "${CMAKE_${lang}_HOST_COMPILER_ID}" PARENT_SCOPE)
|
||||
set(CMAKE_${lang}_HOST_COMPILER_VERSION "${CMAKE_${lang}_HOST_COMPILER_VERSION}" PARENT_SCOPE)
|
||||
set(CMAKE_${lang}_STANDARD_COMPUTED_DEFAULT "${CMAKE_${lang}_STANDARD_COMPUTED_DEFAULT}" PARENT_SCOPE)
|
||||
set(CMAKE_${lang}_EXTENSIONS_COMPUTED_DEFAULT "${CMAKE_${lang}_EXTENSIONS_COMPUTED_DEFAULT}" PARENT_SCOPE)
|
||||
set(CMAKE_${lang}_COMPILER_PRODUCED_OUTPUT "${COMPILER_${lang}_PRODUCED_OUTPUT}" PARENT_SCOPE)
|
||||
@ -395,6 +406,22 @@ function(CMAKE_DETERMINE_COMPILER_ID_WRITE lang src)
|
||||
PLATFORM_DEFAULT_COMPILER
|
||||
)
|
||||
|
||||
if(lang MATCHES "^(CUDA|HIP)$")
|
||||
compiler_id_detection(CMAKE_${lang}_HOST_COMPILER_ID_CONTENT CXX
|
||||
PREFIX HOST_
|
||||
ID_STRING
|
||||
VERSION_STRINGS
|
||||
)
|
||||
string(APPEND CMAKE_${lang}_COMPILER_ID_CONTENT
|
||||
"\n"
|
||||
"\n"
|
||||
"/* Detect host compiler used by NVCC. */\n"
|
||||
"#ifdef __NVCC__\n"
|
||||
"${CMAKE_${lang}_HOST_COMPILER_ID_CONTENT}\n"
|
||||
"#endif /* __NVCC__ */\n"
|
||||
)
|
||||
endif()
|
||||
|
||||
unset(src_in CACHE)
|
||||
string(CONFIGURE "${ID_CONTENT_IN}" ID_CONTENT_OUT @ONLY)
|
||||
file(WRITE ${CMAKE_${lang}_COMPILER_ID_DIR}/${src} "${ID_CONTENT_OUT}")
|
||||
@ -941,6 +968,8 @@ function(CMAKE_DETERMINE_COMPILER_ID_CHECK lang file)
|
||||
set(ARCHITECTURE_ID)
|
||||
set(SIMULATE_ID)
|
||||
set(SIMULATE_VERSION)
|
||||
set(HOST_COMPILER_ID)
|
||||
set(HOST_COMPILER_VERSION)
|
||||
set(CMAKE_${lang}_COMPILER_ID_STRING_REGEX ".?I.?N.?F.?O.?:.?[A-Za-z0-9_]+\\[[^]]*\\]")
|
||||
foreach(encoding "" "ENCODING;UTF-16LE" "ENCODING;UTF-16BE")
|
||||
cmake_policy(PUSH)
|
||||
@ -1027,6 +1056,13 @@ function(CMAKE_DETERMINE_COMPILER_ID_CHECK lang file)
|
||||
if("${info}" MATCHES "INFO:qnxnto\\[\\]")
|
||||
set(COMPILER_QNXNTO 1)
|
||||
endif()
|
||||
if("${info}" MATCHES "INFO:host_compiler\\[([^]\"]*)\\]")
|
||||
set(HOST_COMPILER_ID "${CMAKE_MATCH_1}")
|
||||
endif()
|
||||
if("${info}" MATCHES "INFO:host_compiler_version\\[([^]\"]*)\\]")
|
||||
string(REGEX REPLACE "^0+([0-9]+)" "\\1" HOST_COMPILER_VERSION "${CMAKE_MATCH_1}")
|
||||
string(REGEX REPLACE "\\.0+([0-9])" ".\\1" HOST_COMPILER_VERSION "${HOST_COMPILER_VERSION}")
|
||||
endif()
|
||||
if("${info}" MATCHES "INFO:standard_default\\[([^]\"]*)\\]")
|
||||
set(CMAKE_${lang}_STANDARD_COMPUTED_DEFAULT "${CMAKE_MATCH_1}")
|
||||
endif()
|
||||
@ -1088,6 +1124,8 @@ function(CMAKE_DETERMINE_COMPILER_ID_CHECK lang file)
|
||||
set(CMAKE_${lang}_COMPILER_VERSION_INTERNAL "${COMPILER_VERSION_INTERNAL}")
|
||||
set(CMAKE_${lang}_SIMULATE_ID "${SIMULATE_ID}")
|
||||
set(CMAKE_${lang}_SIMULATE_VERSION "${SIMULATE_VERSION}")
|
||||
set(CMAKE_${lang}_HOST_COMPILER_ID "${HOST_COMPILER_ID}")
|
||||
set(CMAKE_${lang}_HOST_COMPILER_VERSION "${HOST_COMPILER_VERSION}")
|
||||
endif()
|
||||
|
||||
# Check the compiler identification string.
|
||||
@ -1095,7 +1133,12 @@ function(CMAKE_DETERMINE_COMPILER_ID_CHECK lang file)
|
||||
# The compiler identification was found.
|
||||
string(APPEND _CMAKE_${lang}_COMPILER_ID_LOG
|
||||
"The ${lang} compiler identification is ${CMAKE_${lang}_COMPILER_ID}, found in:\n"
|
||||
" ${file}\n\n")
|
||||
" ${file}\n")
|
||||
if(CMAKE_${lang}_HOST_COMPILER_ID)
|
||||
string(APPEND _CMAKE_${lang}_COMPILER_ID_LOG
|
||||
"The host compiler identification is ${CMAKE_${lang}_HOST_COMPILER_ID}\n")
|
||||
endif()
|
||||
string(APPEND _CMAKE_${lang}_COMPILER_ID_LOG "\n")
|
||||
else()
|
||||
# The compiler identification could not be found.
|
||||
string(APPEND _CMAKE_${lang}_COMPILER_ID_LOG
|
||||
@ -1144,6 +1187,8 @@ function(CMAKE_DETERMINE_COMPILER_ID_CHECK lang file)
|
||||
set(COMPILER_QNXNTO "${COMPILER_QNXNTO}" PARENT_SCOPE)
|
||||
set(CMAKE_${lang}_STANDARD_COMPUTED_DEFAULT "${CMAKE_${lang}_STANDARD_COMPUTED_DEFAULT}" PARENT_SCOPE)
|
||||
set(CMAKE_${lang}_EXTENSIONS_COMPUTED_DEFAULT "${CMAKE_${lang}_EXTENSIONS_COMPUTED_DEFAULT}" PARENT_SCOPE)
|
||||
set(CMAKE_${lang}_HOST_COMPILER_ID "${CMAKE_${lang}_HOST_COMPILER_ID}" PARENT_SCOPE)
|
||||
set(CMAKE_${lang}_HOST_COMPILER_VERSION "${CMAKE_${lang}_HOST_COMPILER_VERSION}" PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
|
@ -3,6 +3,8 @@ set(CMAKE_HIP_HOST_COMPILER "@CMAKE_HIP_HOST_COMPILER@")
|
||||
set(CMAKE_HIP_HOST_LINK_LAUNCHER "@CMAKE_HIP_HOST_LINK_LAUNCHER@")
|
||||
set(CMAKE_HIP_COMPILER_ID "@CMAKE_HIP_COMPILER_ID@")
|
||||
set(CMAKE_HIP_COMPILER_VERSION "@CMAKE_HIP_COMPILER_VERSION@")
|
||||
set(CMAKE_HIP_HOST_COMPILER_ID "@CMAKE_HIP_HOST_COMPILER_ID@")
|
||||
set(CMAKE_HIP_HOST_COMPILER_VERSION "@CMAKE_HIP_HOST_COMPILER_VERSION@")
|
||||
set(CMAKE_HIP_STANDARD_COMPUTED_DEFAULT "@CMAKE_HIP_STANDARD_COMPUTED_DEFAULT@")
|
||||
set(CMAKE_HIP_EXTENSIONS_COMPUTED_DEFAULT "@CMAKE_HIP_EXTENSIONS_COMPUTED_DEFAULT@")
|
||||
set(CMAKE_HIP_STANDARD_LATEST "@CMAKE_HIP_STANDARD_LATEST@")
|
||||
|
@ -16,6 +16,28 @@ char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]";
|
||||
@CMAKE_HIP_COMPILER_ID_PLATFORM_CONTENT@
|
||||
@CMAKE_HIP_COMPILER_ID_ERROR_FOR_TEST@
|
||||
|
||||
#ifdef HOST_COMPILER_ID
|
||||
char const* info_host_compiler = "INFO" ":" "host_compiler[" HOST_COMPILER_ID "]";
|
||||
#endif
|
||||
#ifdef HOST_COMPILER_VERSION
|
||||
char const* info_host_compiler_version = "INFO" ":" "host_compiler_version[" HOST_COMPILER_VERSION "]";
|
||||
#elif defined(HOST_COMPILER_VERSION_MAJOR)
|
||||
char const info_host_compiler_version[] = {
|
||||
'I', 'N', 'F', 'O', ':','h','o','s','t','_',
|
||||
'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[',
|
||||
HOST_COMPILER_VERSION_MAJOR,
|
||||
# ifdef HOST_COMPILER_VERSION_MINOR
|
||||
'.', HOST_COMPILER_VERSION_MINOR,
|
||||
# ifdef HOST_COMPILER_VERSION_PATCH
|
||||
'.', HOST_COMPILER_VERSION_PATCH,
|
||||
# ifdef HOST_COMPILER_VERSION_TWEAK
|
||||
'.', HOST_COMPILER_VERSION_TWEAK,
|
||||
# endif
|
||||
# endif
|
||||
# endif
|
||||
']','\0'};
|
||||
#endif
|
||||
#
|
||||
#define CXX_STD_98 199711L
|
||||
#define CXX_STD_11 201103L
|
||||
#define CXX_STD_14 201402L
|
||||
@ -66,6 +88,12 @@ int main(int argc, char* argv[])
|
||||
#endif
|
||||
#ifdef SIMULATE_VERSION_MAJOR
|
||||
require += info_simulate_version[argc];
|
||||
#endif
|
||||
#ifdef HOST_COMPILER_ID
|
||||
require += info_host_compiler[argc];
|
||||
#endif
|
||||
#ifdef HOST_COMPILER_VERSION_MAJOR
|
||||
require += info_host_compiler_version[argc];
|
||||
#endif
|
||||
require += info_language_standard_default[argc];
|
||||
require += info_language_extensions_default[argc];
|
||||
|
@ -1,3 +1,11 @@
|
||||
-- CMAKE_CUDA_COMPILER='[^']+'
|
||||
-- CMAKE_CUDA_COMPILER_ID='[A-Za-z]+'
|
||||
(-- CMAKE_CUDA_COMPILER='[^']+'
|
||||
-- CMAKE_CUDA_COMPILER_ID='NVIDIA'
|
||||
-- CMAKE_CUDA_COMPILER_VERSION='([0-9]+)(\.([0-9]+))?(\.([0-9]+))?(\.([0-9]+))?'
|
||||
-- CMAKE_CUDA_HOST_COMPILER_ID='[A-Za-z]+'
|
||||
-- CMAKE_CUDA_HOST_COMPILER_VERSION='([0-9]+)(\.([0-9]+))?(\.([0-9]+))?(\.([0-9]+))?'
|
||||
|-- CMAKE_CUDA_COMPILER='[^']+'
|
||||
-- CMAKE_CUDA_COMPILER_ID='([^N]|N[^V]|NV[^I]|NVI[^D]|NVID[^I]|NVIDI[^A])[A-Za-z]*'
|
||||
-- CMAKE_CUDA_COMPILER_VERSION='([0-9]+)(\.([0-9]+))?(\.([0-9]+))?(\.([0-9]+))?'
|
||||
-- CMAKE_CUDA_HOST_COMPILER_ID=''
|
||||
-- CMAKE_CUDA_HOST_COMPILER_VERSION=''
|
||||
)
|
||||
|
@ -2,3 +2,5 @@ enable_language(CUDA)
|
||||
message(STATUS "CMAKE_CUDA_COMPILER='${CMAKE_CUDA_COMPILER}'")
|
||||
message(STATUS "CMAKE_CUDA_COMPILER_ID='${CMAKE_CUDA_COMPILER_ID}'")
|
||||
message(STATUS "CMAKE_CUDA_COMPILER_VERSION='${CMAKE_CUDA_COMPILER_VERSION}'")
|
||||
message(STATUS "CMAKE_CUDA_HOST_COMPILER_ID='${CMAKE_CUDA_HOST_COMPILER_ID}'")
|
||||
message(STATUS "CMAKE_CUDA_HOST_COMPILER_VERSION='${CMAKE_CUDA_HOST_COMPILER_VERSION}'")
|
||||
|
@ -1,3 +1,11 @@
|
||||
-- CMAKE_HIP_COMPILER='[^']+'
|
||||
-- CMAKE_HIP_COMPILER_ID='[A-Za-z]+'
|
||||
(-- CMAKE_HIP_COMPILER='[^']+'
|
||||
-- CMAKE_HIP_COMPILER_ID='NVIDIA'
|
||||
-- CMAKE_HIP_COMPILER_VERSION='([0-9]+)(\.([0-9]+))?(\.([0-9]+))?(\.([0-9]+))?'
|
||||
-- CMAKE_HIP_HOST_COMPILER_ID='[A-Za-z]+'
|
||||
-- CMAKE_HIP_HOST_COMPILER_VERSION='([0-9]+)(\.([0-9]+))?(\.([0-9]+))?(\.([0-9]+))?'
|
||||
|-- CMAKE_HIP_COMPILER='[^']+'
|
||||
-- CMAKE_HIP_COMPILER_ID='([^N]|N[^V]|NV[^I]|NVI[^D]|NVID[^I]|NVIDI[^A])[A-Za-z]*'
|
||||
-- CMAKE_HIP_COMPILER_VERSION='([0-9]+)(\.([0-9]+))?(\.([0-9]+))?(\.([0-9]+))?'
|
||||
-- CMAKE_HIP_HOST_COMPILER_ID=''
|
||||
-- CMAKE_HIP_HOST_COMPILER_VERSION=''
|
||||
)
|
||||
|
@ -2,3 +2,5 @@ enable_language(HIP)
|
||||
message(STATUS "CMAKE_HIP_COMPILER='${CMAKE_HIP_COMPILER}'")
|
||||
message(STATUS "CMAKE_HIP_COMPILER_ID='${CMAKE_HIP_COMPILER_ID}'")
|
||||
message(STATUS "CMAKE_HIP_COMPILER_VERSION='${CMAKE_HIP_COMPILER_VERSION}'")
|
||||
message(STATUS "CMAKE_HIP_HOST_COMPILER_ID='${CMAKE_HIP_HOST_COMPILER_ID}'")
|
||||
message(STATUS "CMAKE_HIP_HOST_COMPILER_VERSION='${CMAKE_HIP_HOST_COMPILER_VERSION}'")
|
||||
|
Loading…
Reference in New Issue
Block a user