浏览代码

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 <[email protected]>
Tested-by: buildbot <[email protected]>
Merge-request: !10705
Brad King 6 月之前
父节点
当前提交
782f054ccb
共有 3 个文件被更改,包括 31 次插入21 次删除
  1. 5 1
      Modules/CMakeDetermineCompiler.cmake
  2. 22 19
      Modules/CheckLanguage.cmake
  3. 4 1
      Tests/CMakeOnly/CheckLanguage/CMakeLists.txt

+ 5 - 1
Modules/CMakeDetermineCompiler.cmake

@@ -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)

+ 22 - 19
Modules/CheckLanguage.cmake

@@ -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)
-    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}\\\")")
+    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")
+      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()

+ 4 - 1
Tests/CMakeOnly/CheckLanguage/CMakeLists.txt

@@ -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()