Merge topic 'check_language-fix'

89df8efba4 CheckLanguage: Bias compiler selection using already-enabled languages
f290240b0b CheckLanguage: Simplify test project generation
7ae8764710 Tests: Extend CMakeOnly.CheckLanguage to enable languages whose checks succeed
a049413bb6 Tests: Extend CMakeOnly.CheckLanguage to cover ASM

Acked-by: Kitware Robot <kwrobot@kitware.com>
Tested-by: buildbot <buildbot@kitware.com>
Merge-request: !10705
This commit is contained in:
Brad King
2025-04-25 12:54:14 +00:00
committed by Kitware Robot
3 changed files with 31 additions and 21 deletions

View File

@@ -4,7 +4,11 @@
macro(_cmake_find_compiler lang)
# Use already-enabled languages for reference.
get_property(_languages GLOBAL PROPERTY ENABLED_LANGUAGES)
if(DEFINED _CMAKE_CHECK_ENABLED_LANGUAGES)
set(_languages "${_CMAKE_CHECK_ENABLED_LANGUAGES}")
else()
get_property(_languages GLOBAL PROPERTY ENABLED_LANGUAGES)
endif()
list(REMOVE_ITEM _languages "${lang}")
if(CMAKE_${lang}_COMPILER_INIT)

View File

@@ -77,31 +77,34 @@ macro(check_language lang)
message(CHECK_START "${_desc}")
file(REMOVE_RECURSE ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/Check${lang})
set(extra_compiler_variables)
set(_input_variables "set(CMAKE_MODULE_PATH \"${CMAKE_MODULE_PATH}\")\n")
get_property(_languages GLOBAL PROPERTY ENABLED_LANGUAGES)
list(REMOVE_ITEM _languages "NONE")
if(NOT _languages STREQUAL "")
string(APPEND _input_variables "set(_CMAKE_CHECK_ENABLED_LANGUAGES \"${_languages}\")\n")
foreach(l IN LISTS _languages)
string(APPEND _input_variables
"set(CMAKE_${l}_COMPILER \"${CMAKE_${l}_COMPILER}\")\n"
"set(CMAKE_${l}_COMPILER_ID \"${CMAKE_${l}_COMPILER_ID}\")\n"
"set(CMAKE_${l}_COMPILER_LOADED ${CMAKE_${l}_COMPILER_LOADED})\n"
"set(CMAKE_${l}_COMPILER_VERSION \"${CMAKE_${l}_COMPILER_VERSION}\")\n"
)
endforeach()
endif()
set(_output_variables "set(CMAKE_${lang}_COMPILER \\\"\${CMAKE_${lang}_COMPILER}\\\")\n")
if("${lang}" MATCHES "^(CUDA|HIP)$" AND NOT CMAKE_GENERATOR MATCHES "Visual Studio")
set(extra_compiler_variables "set(CMAKE_${lang}_HOST_COMPILER \\\"\${CMAKE_${lang}_HOST_COMPILER}\\\")")
string(APPEND _output_variables "set(CMAKE_${lang}_HOST_COMPILER \\\"\${CMAKE_${lang}_HOST_COMPILER}\\\")\n")
endif()
if("${lang}" STREQUAL "HIP")
list(APPEND extra_compiler_variables "set(CMAKE_${lang}_PLATFORM \\\"\${CMAKE_${lang}_PLATFORM}\\\")")
string(APPEND _output_variables "set(CMAKE_${lang}_PLATFORM \\\"\${CMAKE_${lang}_PLATFORM}\\\")\n")
endif()
list(TRANSFORM extra_compiler_variables PREPEND "\"")
list(TRANSFORM extra_compiler_variables APPEND "\\n\"")
list(JOIN extra_compiler_variables "\n " extra_compiler_variables)
set(_cl_content
"cmake_minimum_required(VERSION ${CMAKE_VERSION})
set(CMAKE_MODULE_PATH \"${CMAKE_MODULE_PATH}\")
project(Check${lang} ${lang})
file(WRITE \"\${CMAKE_CURRENT_BINARY_DIR}/result.cmake\"
\"set(CMAKE_${lang}_COMPILER \\\"\${CMAKE_${lang}_COMPILER}\\\")\\n\"
${extra_compiler_variables}
)"
)
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/Check${lang}/CMakeLists.txt"
"${_cl_content}")
"cmake_minimum_required(VERSION ${CMAKE_VERSION})
${_input_variables}
project(Check${lang} LANGUAGES ${lang})
file(WRITE \"\${CMAKE_CURRENT_BINARY_DIR}/result.cmake\" \"${_output_variables}\")")
if(CMAKE_GENERATOR_INSTANCE)
set(_D_CMAKE_GENERATOR_INSTANCE "-DCMAKE_GENERATOR_INSTANCE:INTERNAL=${CMAKE_GENERATOR_INSTANCE}")
else()

View File

@@ -13,7 +13,7 @@ endif()
unset(expect_Fortran)
set(expect_NoSuchLanguage 0)
set(LANGUAGES C CXX Fortran CUDA HIP NoSuchLanguage)
set(LANGUAGES C CXX Fortran CUDA HIP ASM NoSuchLanguage)
if(APPLE)
list(APPEND LANGUAGES OBJC OBJCXX)
endif()
@@ -30,4 +30,7 @@ foreach(test_lang ${LANGUAGES})
message(FATAL_ERROR "check_language(${test_lang}) should not succeed!")
endif()
endif()
if(CMAKE_${test_lang}_COMPILER)
enable_language(${test_lang})
endif()
endforeach()