diff --git a/Help/manual/cmake-variables.7.rst b/Help/manual/cmake-variables.7.rst index a79747f0da..e0358db256 100644 --- a/Help/manual/cmake-variables.7.rst +++ b/Help/manual/cmake-variables.7.rst @@ -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 diff --git a/Help/release/dev/cuda-host-compiler-id.rst b/Help/release/dev/cuda-host-compiler-id.rst new file mode 100644 index 0000000000..ab688613a5 --- /dev/null +++ b/Help/release/dev/cuda-host-compiler-id.rst @@ -0,0 +1,8 @@ +cuda-host-compiler-id +--------------------- + +* The :variable:`CMAKE__HOST_COMPILER_ID` and + :variable:`CMAKE__HOST_COMPILER_VERSION` variables were added, + where ```` is either ``CUDA`` or ``HIP``. They are populated + when :variable:`CMAKE__COMPILER_ID` is ``NVIDIA`` to identify + NVCC's host compiler. diff --git a/Help/variable/CMAKE_LANG_HOST_COMPILER.rst b/Help/variable/CMAKE_LANG_HOST_COMPILER.rst index cf3ba62a3c..ed9a055961 100644 --- a/Help/variable/CMAKE_LANG_HOST_COMPILER.rst +++ b/Help/variable/CMAKE_LANG_HOST_COMPILER.rst @@ -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__HOST_COMPILER_ID` and +:variable:`CMAKE__HOST_COMPILER_VERSION` variables for +information about the host compiler used by ``nvcc``, whether +by default or specified by ``CMAKE__HOST_COMPILER``. diff --git a/Help/variable/CMAKE_LANG_HOST_COMPILER_ID.rst b/Help/variable/CMAKE_LANG_HOST_COMPILER_ID.rst new file mode 100644 index 0000000000..a4da281f43 --- /dev/null +++ b/Help/variable/CMAKE_LANG_HOST_COMPILER_ID.rst @@ -0,0 +1,10 @@ +CMAKE__HOST_COMPILER_ID +----------------------------- + +.. versionadded:: 3.31 + +This variable is available when ```` is ``CUDA`` or ``HIP`` +and :variable:`CMAKE__COMPILER_ID` is ``NVIDIA``. +It contains the identity of the host compiler invoked by ``nvcc``, +either by default or as specified by :variable:`CMAKE__HOST_COMPILER`, +among possibilities documented by :variable:`CMAKE__COMPILER_ID`. diff --git a/Help/variable/CMAKE_LANG_HOST_COMPILER_VERSION.rst b/Help/variable/CMAKE_LANG_HOST_COMPILER_VERSION.rst new file mode 100644 index 0000000000..eb2c2068ff --- /dev/null +++ b/Help/variable/CMAKE_LANG_HOST_COMPILER_VERSION.rst @@ -0,0 +1,10 @@ +CMAKE__HOST_COMPILER_VERSION +---------------------------------- + +.. versionadded:: 3.31 + +This variable is available when ```` is ``CUDA`` or ``HIP`` +and :variable:`CMAKE__COMPILER_ID` is ``NVIDIA``. +It contains the version of the host compiler invoked by ``nvcc``, +either by default or as specified by :variable:`CMAKE__HOST_COMPILER`, +in the same format as :variable:`CMAKE__COMPILER_VERSION`. diff --git a/Modules/CMakeCUDACompiler.cmake.in b/Modules/CMakeCUDACompiler.cmake.in index c054e5ccea..c6a176ba53 100644 --- a/Modules/CMakeCUDACompiler.cmake.in +++ b/Modules/CMakeCUDACompiler.cmake.in @@ -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@") diff --git a/Modules/CMakeCUDACompilerId.cu.in b/Modules/CMakeCUDACompilerId.cu.in index cecb9488e1..fdffd02d6c 100644 --- a/Modules/CMakeCUDACompilerId.cu.in +++ b/Modules/CMakeCUDACompilerId.cu.in @@ -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]; diff --git a/Modules/CMakeDetermineCompilerId.cmake b/Modules/CMakeDetermineCompilerId.cmake index e58ae42795..378e46fe98 100644 --- a/Modules/CMakeDetermineCompilerId.cmake +++ b/Modules/CMakeDetermineCompilerId.cmake @@ -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() #----------------------------------------------------------------------------- diff --git a/Modules/CMakeHIPCompiler.cmake.in b/Modules/CMakeHIPCompiler.cmake.in index 601ffafe7c..e6a472071e 100644 --- a/Modules/CMakeHIPCompiler.cmake.in +++ b/Modules/CMakeHIPCompiler.cmake.in @@ -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@") diff --git a/Modules/CMakeHIPCompilerId.hip.in b/Modules/CMakeHIPCompilerId.hip.in index fa97667022..54a051a3e5 100644 --- a/Modules/CMakeHIPCompilerId.hip.in +++ b/Modules/CMakeHIPCompilerId.hip.in @@ -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]; diff --git a/Tests/CMakeOnly/CMakeLists.txt b/Tests/CMakeOnly/CMakeLists.txt index 727c7fcbc2..4ceb768e1f 100644 --- a/Tests/CMakeOnly/CMakeLists.txt +++ b/Tests/CMakeOnly/CMakeLists.txt @@ -35,29 +35,11 @@ endif() add_CMakeOnly_test(CheckStructHasMember) -add_CMakeOnly_test(CompilerIdC) -add_CMakeOnly_test(CompilerIdCXX) - if (APPLE AND CMAKE_C_COMPILER_ID MATCHES "Clang|GNU") - add_CMakeOnly_test(CompilerIdOBJC) add_CMakeOnly_test(CheckOBJCCompilerFlag) - add_CMakeOnly_test(CompilerIdOBJCXX) add_CMakeOnly_test(CheckOBJCXXCompilerFlag) endif() -if(CMake_TEST_CUDA) - add_CMakeOnly_test(CompilerIdCUDA) -endif() - - -if(CMAKE_Fortran_COMPILER) - add_CMakeOnly_test(CompilerIdFortran) - set_property(TEST CMakeOnly.CompilerIdFortran APPEND PROPERTY LABELS "Fortran") -endif() -if(CMAKE_GENERATOR MATCHES "Visual Studio") - add_CMakeOnly_test(CompilerIdCSharp) -endif() - add_test(CMakeOnly.AllFindModules ${CMAKE_CMAKE_COMMAND} -DTEST=AllFindModules -DCMAKE_ARGS=-DCMake_TEST_CMakeOnly.AllFindModules_NO_VERSION=${CMake_TEST_CMakeOnly.AllFindModules_NO_VERSION} diff --git a/Tests/CMakeOnly/CompilerIdC/CMakeLists.txt b/Tests/CMakeOnly/CompilerIdC/CMakeLists.txt deleted file mode 100644 index 6fea73eb8b..0000000000 --- a/Tests/CMakeOnly/CompilerIdC/CMakeLists.txt +++ /dev/null @@ -1,21 +0,0 @@ -cmake_minimum_required(VERSION 2.8.9) -project(CompilerIdC C) - -foreach(v - CMAKE_C_COMPILER - CMAKE_C_COMPILER_ID - CMAKE_C_COMPILER_VERSION - ) - if(${v}) - message(STATUS "${v}=[${${v}}]") - else() - message(SEND_ERROR "${v} not set!") - endif() -endforeach() - -# Version numbers may only contain numbers and periods. -if(NOT CMAKE_C_COMPILER_VERSION MATCHES - "^([0-9]+)(\\.([0-9]+))?(\\.([0-9]+))?(\\.([0-9]+))?$" - ) - message(SEND_ERROR "Compiler version is not numeric!") -endif() diff --git a/Tests/CMakeOnly/CompilerIdCSharp/CMakeLists.txt b/Tests/CMakeOnly/CompilerIdCSharp/CMakeLists.txt deleted file mode 100644 index 6c0703745d..0000000000 --- a/Tests/CMakeOnly/CompilerIdCSharp/CMakeLists.txt +++ /dev/null @@ -1,21 +0,0 @@ -cmake_minimum_required(VERSION 3.7.0) -project(CompilerIdCSharp CSharp) - -foreach(v - CMAKE_CSharp_COMPILER - CMAKE_CSharp_COMPILER_ID - CMAKE_CSharp_COMPILER_VERSION - ) - if(${v}) - message(STATUS "${v}=[${${v}}]") - else() - message(SEND_ERROR "${v} not set!") - endif() -endforeach() - -# Version numbers may only contain numbers and periods. -if(NOT CMAKE_CSharp_COMPILER_VERSION MATCHES - "^([0-9]+)(\\.([0-9]+))?(\\.([0-9]+))?(\\.([0-9]+))?$" - ) - message(SEND_ERROR "Compiler version is not numeric!") -endif() diff --git a/Tests/CMakeOnly/CompilerIdCUDA/CMakeLists.txt b/Tests/CMakeOnly/CompilerIdCUDA/CMakeLists.txt deleted file mode 100644 index da14000249..0000000000 --- a/Tests/CMakeOnly/CompilerIdCUDA/CMakeLists.txt +++ /dev/null @@ -1,14 +0,0 @@ -cmake_minimum_required(VERSION 3.18) -project(CompilerIdCUDA CUDA) - -foreach(v - CMAKE_CUDA_COMPILER - CMAKE_CUDA_COMPILER_ID - CMAKE_CUDA_COMPILER_VERSION - ) - if(${v}) - message(STATUS "${v}=[${${v}}]") - else() - message(SEND_ERROR "${v} not set!") - endif() -endforeach() diff --git a/Tests/CMakeOnly/CompilerIdCXX/CMakeLists.txt b/Tests/CMakeOnly/CompilerIdCXX/CMakeLists.txt deleted file mode 100644 index 05e6bb2224..0000000000 --- a/Tests/CMakeOnly/CompilerIdCXX/CMakeLists.txt +++ /dev/null @@ -1,21 +0,0 @@ -cmake_minimum_required(VERSION 2.8.9) -project(CompilerIdCXX CXX) - -foreach(v - CMAKE_CXX_COMPILER - CMAKE_CXX_COMPILER_ID - CMAKE_CXX_COMPILER_VERSION - ) - if(${v}) - message(STATUS "${v}=[${${v}}]") - else() - message(SEND_ERROR "${v} not set!") - endif() -endforeach() - -# Version numbers may only contain numbers and periods. -if(NOT CMAKE_CXX_COMPILER_VERSION MATCHES - "^([0-9]+)(\\.([0-9]+))?(\\.([0-9]+))?(\\.([0-9]+))?$" - ) - message(SEND_ERROR "Compiler version is not numeric!") -endif() diff --git a/Tests/CMakeOnly/CompilerIdFortran/CMakeLists.txt b/Tests/CMakeOnly/CompilerIdFortran/CMakeLists.txt deleted file mode 100644 index 067fb8cd3f..0000000000 --- a/Tests/CMakeOnly/CompilerIdFortran/CMakeLists.txt +++ /dev/null @@ -1,21 +0,0 @@ -cmake_minimum_required(VERSION 2.8.9) -project(CompilerIdFortran Fortran) - -foreach(v - CMAKE_Fortran_COMPILER - CMAKE_Fortran_COMPILER_ID - CMAKE_Fortran_COMPILER_VERSION - ) - if(${v}) - message(STATUS "${v}=[${${v}}]") - else() - message(SEND_ERROR "${v} not set!") - endif() -endforeach() - -# Version numbers may only contain numbers and periods. -if(NOT CMAKE_Fortran_COMPILER_VERSION MATCHES - "^([0-9]+)(\\.([0-9]+))?(\\.([0-9]+))?(\\.([0-9]+))?$" - ) - message(SEND_ERROR "Compiler version is not numeric!") -endif() diff --git a/Tests/CMakeOnly/CompilerIdOBJC/CMakeLists.txt b/Tests/CMakeOnly/CompilerIdOBJC/CMakeLists.txt deleted file mode 100644 index 18a1ff658b..0000000000 --- a/Tests/CMakeOnly/CompilerIdOBJC/CMakeLists.txt +++ /dev/null @@ -1,14 +0,0 @@ -cmake_minimum_required(VERSION 3.5) -project(CompilerIdOBJC OBJC) - -foreach(v - CMAKE_OBJC_COMPILER - CMAKE_OBJC_COMPILER_ID - CMAKE_OBJC_COMPILER_VERSION - ) - if(${v}) - message(STATUS "${v}=[${${v}}]") - else() - message(SEND_ERROR "${v} not set!") - endif() -endforeach() diff --git a/Tests/CMakeOnly/CompilerIdOBJCXX/CMakeLists.txt b/Tests/CMakeOnly/CompilerIdOBJCXX/CMakeLists.txt deleted file mode 100644 index 76c1e4b0e4..0000000000 --- a/Tests/CMakeOnly/CompilerIdOBJCXX/CMakeLists.txt +++ /dev/null @@ -1,14 +0,0 @@ -cmake_minimum_required(VERSION 3.5) -project(CompilerIdOBJCXX OBJCXX) - -foreach(v - CMAKE_OBJCXX_COMPILER - CMAKE_OBJCXX_COMPILER_ID - CMAKE_OBJCXX_COMPILER_VERSION - ) - if(${v}) - message(STATUS "${v}=[${${v}}]") - else() - message(SEND_ERROR "${v} not set!") - endif() -endforeach() diff --git a/Tests/RunCMake/CMakeLists.txt b/Tests/RunCMake/CMakeLists.txt index 40db51b10a..29351eb07b 100644 --- a/Tests/RunCMake/CMakeLists.txt +++ b/Tests/RunCMake/CMakeLists.txt @@ -369,7 +369,7 @@ if(UNIX AND "${CMAKE_GENERATOR}" MATCHES "Unix Makefiles|Ninja") endif() add_RunCMake_test(CompilerNotFound) if(DEFINED CMake_TEST_OBJC) - list(APPEND CompilerTest_ARGS -DCMake_TEST_OBJC=${CMake_TEST_OBJC}) + list(APPEND CMake_TEST_LANG_VARS -DCMake_TEST_OBJC=${CMake_TEST_OBJC}) endif() if(CMAKE_Fortran_COMPILER) # lfortran < 1.24 cannot handle long file names. Fortran is not @@ -377,19 +377,21 @@ if(CMAKE_Fortran_COMPILER) if(CMAKE_C_COMPILER_ID STREQUAL "LCC" AND CMAKE_C_COMPILER_VERSION VERSION_LESS "1.24") string(LENGTH "${CMAKE_CURRENT_BINARY_DIR}" _CCBD_LEN) if(_CCBD_LEN LESS 35) - list(APPEND CompilerTest_ARGS -DCMake_TEST_Fortran=1) + list(APPEND CMake_TEST_LANG_VARS -DCMake_TEST_Fortran=1) endif() unset(_CCBD_LEN) else() - list(APPEND CompilerTest_ARGS -DCMake_TEST_Fortran=1) + list(APPEND CMake_TEST_LANG_VARS -DCMake_TEST_Fortran=1) endif() endif() foreach(lang IN ITEMS CUDA HIP ISPC) if(CMake_TEST_${lang}) - list(APPEND CompilerTest_ARGS -DCMake_TEST_${lang}=1) + list(APPEND CMake_TEST_LANG_VARS -DCMake_TEST_${lang}=1) endif() endforeach() -add_RunCMake_test(CompilerTest) +add_RunCMake_test(CompilerId ${CMake_TEST_LANG_VARS}) +set_property(TEST RunCMake.CompilerId APPEND PROPERTY LABELS "CUDA" "HIP" "ISPC" "Fortran") +add_RunCMake_test(CompilerTest ${CMake_TEST_LANG_VARS}) set_property(TEST RunCMake.CompilerTest APPEND PROPERTY LABELS "CUDA" "HIP" "ISPC" "Fortran") add_RunCMake_test(Configure -DMSVC_IDE=${MSVC_IDE}) add_RunCMake_test(DisallowedCommands) diff --git a/Tests/RunCMake/CompilerId/C-stdout.txt b/Tests/RunCMake/CompilerId/C-stdout.txt new file mode 100644 index 0000000000..e9ce46b0f3 --- /dev/null +++ b/Tests/RunCMake/CompilerId/C-stdout.txt @@ -0,0 +1,3 @@ +-- CMAKE_C_COMPILER='[^']+' +-- CMAKE_C_COMPILER_ID='[A-Za-z]+' +-- CMAKE_C_COMPILER_VERSION='([0-9]+)(\.([0-9]+))?(\.([0-9]+))?(\.([0-9]+))?' diff --git a/Tests/RunCMake/CompilerId/C.cmake b/Tests/RunCMake/CompilerId/C.cmake new file mode 100644 index 0000000000..3bf943f49c --- /dev/null +++ b/Tests/RunCMake/CompilerId/C.cmake @@ -0,0 +1,4 @@ +enable_language(C) +message(STATUS "CMAKE_C_COMPILER='${CMAKE_C_COMPILER}'") +message(STATUS "CMAKE_C_COMPILER_ID='${CMAKE_C_COMPILER_ID}'") +message(STATUS "CMAKE_C_COMPILER_VERSION='${CMAKE_C_COMPILER_VERSION}'") diff --git a/Tests/RunCMake/CompilerId/CMakeLists.txt b/Tests/RunCMake/CompilerId/CMakeLists.txt new file mode 100644 index 0000000000..dda37d8bc5 --- /dev/null +++ b/Tests/RunCMake/CompilerId/CMakeLists.txt @@ -0,0 +1,3 @@ +cmake_minimum_required(VERSION 3.30) +project(${RunCMake_TEST} NONE) +include(${RunCMake_TEST}.cmake) diff --git a/Tests/RunCMake/CompilerId/CSharp-stdout.txt b/Tests/RunCMake/CompilerId/CSharp-stdout.txt new file mode 100644 index 0000000000..e36df6ae27 --- /dev/null +++ b/Tests/RunCMake/CompilerId/CSharp-stdout.txt @@ -0,0 +1,3 @@ +-- CMAKE_CSharp_COMPILER='[^']+' +-- CMAKE_CSharp_COMPILER_ID='[A-Za-z ]+' +-- CMAKE_CSharp_COMPILER_VERSION='([0-9]+)(\.([0-9]+))?(\.([0-9]+))?(\.([0-9]+))?' diff --git a/Tests/RunCMake/CompilerId/CSharp.cmake b/Tests/RunCMake/CompilerId/CSharp.cmake new file mode 100644 index 0000000000..2ffd41d88d --- /dev/null +++ b/Tests/RunCMake/CompilerId/CSharp.cmake @@ -0,0 +1,4 @@ +enable_language(CSharp) +message(STATUS "CMAKE_CSharp_COMPILER='${CMAKE_CSharp_COMPILER}'") +message(STATUS "CMAKE_CSharp_COMPILER_ID='${CMAKE_CSharp_COMPILER_ID}'") +message(STATUS "CMAKE_CSharp_COMPILER_VERSION='${CMAKE_CSharp_COMPILER_VERSION}'") diff --git a/Tests/RunCMake/CompilerId/CUDA-stdout.txt b/Tests/RunCMake/CompilerId/CUDA-stdout.txt new file mode 100644 index 0000000000..459743f61d --- /dev/null +++ b/Tests/RunCMake/CompilerId/CUDA-stdout.txt @@ -0,0 +1,11 @@ +(-- 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='' +) diff --git a/Tests/RunCMake/CompilerId/CUDA.cmake b/Tests/RunCMake/CompilerId/CUDA.cmake new file mode 100644 index 0000000000..874a2ffee8 --- /dev/null +++ b/Tests/RunCMake/CompilerId/CUDA.cmake @@ -0,0 +1,6 @@ +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}'") diff --git a/Tests/RunCMake/CompilerId/CXX-stdout.txt b/Tests/RunCMake/CompilerId/CXX-stdout.txt new file mode 100644 index 0000000000..4062a97a9d --- /dev/null +++ b/Tests/RunCMake/CompilerId/CXX-stdout.txt @@ -0,0 +1,3 @@ +-- CMAKE_CXX_COMPILER='[^']+' +-- CMAKE_CXX_COMPILER_ID='[A-Za-z]+' +-- CMAKE_CXX_COMPILER_VERSION='([0-9]+)(\.([0-9]+))?(\.([0-9]+))?(\.([0-9]+))?' diff --git a/Tests/RunCMake/CompilerId/CXX.cmake b/Tests/RunCMake/CompilerId/CXX.cmake new file mode 100644 index 0000000000..4d8bd0ea89 --- /dev/null +++ b/Tests/RunCMake/CompilerId/CXX.cmake @@ -0,0 +1,4 @@ +enable_language(CXX) +message(STATUS "CMAKE_CXX_COMPILER='${CMAKE_CXX_COMPILER}'") +message(STATUS "CMAKE_CXX_COMPILER_ID='${CMAKE_CXX_COMPILER_ID}'") +message(STATUS "CMAKE_CXX_COMPILER_VERSION='${CMAKE_CXX_COMPILER_VERSION}'") diff --git a/Tests/RunCMake/CompilerId/Fortran-stdout.txt b/Tests/RunCMake/CompilerId/Fortran-stdout.txt new file mode 100644 index 0000000000..6a59c668d3 --- /dev/null +++ b/Tests/RunCMake/CompilerId/Fortran-stdout.txt @@ -0,0 +1,3 @@ +-- CMAKE_Fortran_COMPILER='[^']+' +-- CMAKE_Fortran_COMPILER_ID='[A-Za-z]+' +-- CMAKE_Fortran_COMPILER_VERSION='([0-9]+)(\.([0-9]+))?(\.([0-9]+))?(\.([0-9]+))?' diff --git a/Tests/RunCMake/CompilerId/Fortran.cmake b/Tests/RunCMake/CompilerId/Fortran.cmake new file mode 100644 index 0000000000..d4ed0396a6 --- /dev/null +++ b/Tests/RunCMake/CompilerId/Fortran.cmake @@ -0,0 +1,4 @@ +enable_language(Fortran) +message(STATUS "CMAKE_Fortran_COMPILER='${CMAKE_Fortran_COMPILER}'") +message(STATUS "CMAKE_Fortran_COMPILER_ID='${CMAKE_Fortran_COMPILER_ID}'") +message(STATUS "CMAKE_Fortran_COMPILER_VERSION='${CMAKE_Fortran_COMPILER_VERSION}'") diff --git a/Tests/RunCMake/CompilerId/HIP-stdout.txt b/Tests/RunCMake/CompilerId/HIP-stdout.txt new file mode 100644 index 0000000000..ab779aae42 --- /dev/null +++ b/Tests/RunCMake/CompilerId/HIP-stdout.txt @@ -0,0 +1,11 @@ +(-- 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='' +) diff --git a/Tests/RunCMake/CompilerId/HIP.cmake b/Tests/RunCMake/CompilerId/HIP.cmake new file mode 100644 index 0000000000..095c3a8fe4 --- /dev/null +++ b/Tests/RunCMake/CompilerId/HIP.cmake @@ -0,0 +1,6 @@ +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}'") diff --git a/Tests/RunCMake/CompilerId/ISPC-stdout.txt b/Tests/RunCMake/CompilerId/ISPC-stdout.txt new file mode 100644 index 0000000000..c45ea5a932 --- /dev/null +++ b/Tests/RunCMake/CompilerId/ISPC-stdout.txt @@ -0,0 +1,3 @@ +-- CMAKE_ISPC_COMPILER='[^']+' +-- CMAKE_ISPC_COMPILER_ID='[A-Za-z]+' +-- CMAKE_ISPC_COMPILER_VERSION='([0-9]+)(\.([0-9]+))?(\.([0-9]+))?(\.([0-9]+))?' diff --git a/Tests/RunCMake/CompilerId/ISPC.cmake b/Tests/RunCMake/CompilerId/ISPC.cmake new file mode 100644 index 0000000000..a022db4d4f --- /dev/null +++ b/Tests/RunCMake/CompilerId/ISPC.cmake @@ -0,0 +1,4 @@ +enable_language(ISPC) +message(STATUS "CMAKE_ISPC_COMPILER='${CMAKE_ISPC_COMPILER}'") +message(STATUS "CMAKE_ISPC_COMPILER_ID='${CMAKE_ISPC_COMPILER_ID}'") +message(STATUS "CMAKE_ISPC_COMPILER_VERSION='${CMAKE_ISPC_COMPILER_VERSION}'") diff --git a/Tests/RunCMake/CompilerId/OBJC-stdout.txt b/Tests/RunCMake/CompilerId/OBJC-stdout.txt new file mode 100644 index 0000000000..528675afff --- /dev/null +++ b/Tests/RunCMake/CompilerId/OBJC-stdout.txt @@ -0,0 +1,3 @@ +-- CMAKE_OBJC_COMPILER='[^']+' +-- CMAKE_OBJC_COMPILER_ID='[A-Za-z]+' +-- CMAKE_OBJC_COMPILER_VERSION='([0-9]+)(\.([0-9]+))?(\.([0-9]+))?(\.([0-9]+))?' diff --git a/Tests/RunCMake/CompilerId/OBJC.cmake b/Tests/RunCMake/CompilerId/OBJC.cmake new file mode 100644 index 0000000000..5ae4681c95 --- /dev/null +++ b/Tests/RunCMake/CompilerId/OBJC.cmake @@ -0,0 +1,4 @@ +enable_language(OBJC) +message(STATUS "CMAKE_OBJC_COMPILER='${CMAKE_OBJC_COMPILER}'") +message(STATUS "CMAKE_OBJC_COMPILER_ID='${CMAKE_OBJC_COMPILER_ID}'") +message(STATUS "CMAKE_OBJC_COMPILER_VERSION='${CMAKE_OBJC_COMPILER_VERSION}'") diff --git a/Tests/RunCMake/CompilerId/OBJCXX-stdout.txt b/Tests/RunCMake/CompilerId/OBJCXX-stdout.txt new file mode 100644 index 0000000000..9d7f822a1c --- /dev/null +++ b/Tests/RunCMake/CompilerId/OBJCXX-stdout.txt @@ -0,0 +1,3 @@ +-- CMAKE_OBJCXX_COMPILER='[^']+' +-- CMAKE_OBJCXX_COMPILER_ID='[A-Za-z]+' +-- CMAKE_OBJCXX_COMPILER_VERSION='([0-9]+)(\.([0-9]+))?(\.([0-9]+))?(\.([0-9]+))?' diff --git a/Tests/RunCMake/CompilerId/OBJCXX.cmake b/Tests/RunCMake/CompilerId/OBJCXX.cmake new file mode 100644 index 0000000000..0e1875bdca --- /dev/null +++ b/Tests/RunCMake/CompilerId/OBJCXX.cmake @@ -0,0 +1,4 @@ +enable_language(OBJCXX) +message(STATUS "CMAKE_OBJCXX_COMPILER='${CMAKE_OBJCXX_COMPILER}'") +message(STATUS "CMAKE_OBJCXX_COMPILER_ID='${CMAKE_OBJCXX_COMPILER_ID}'") +message(STATUS "CMAKE_OBJCXX_COMPILER_VERSION='${CMAKE_OBJCXX_COMPILER_VERSION}'") diff --git a/Tests/RunCMake/CompilerId/RunCMakeTest.cmake b/Tests/RunCMake/CompilerId/RunCMakeTest.cmake new file mode 100644 index 0000000000..64e397b8d4 --- /dev/null +++ b/Tests/RunCMake/CompilerId/RunCMakeTest.cmake @@ -0,0 +1,29 @@ +include(RunCMake) + +run_cmake(C) +run_cmake(CXX) + +if(CMake_TEST_CUDA) + run_cmake(CUDA) +endif() + +if(CMake_TEST_Fortran) + run_cmake(Fortran) +endif() + +if(CMake_TEST_HIP) + run_cmake(HIP) +endif() + +if(CMake_TEST_ISPC) + run_cmake(ISPC) +endif() + +if(CMake_TEST_OBJC) + run_cmake(OBJC) + run_cmake(OBJCXX) +endif() + +if(RunCMake_GENERATOR MATCHES "Visual Studio") + run_cmake(CSharp) +endif()