Browse Source

Merge topic 'check_language_respects_cuda_host_compiler'

fada8cbfd6 CheckLanguage: Report CMAKE_CUDA_HOST_COMPILER if needed for compilation

Acked-by: Kitware Robot <[email protected]>
Merge-request: !3407
Brad King 6 years ago
parent
commit
d4108f5585
2 changed files with 25 additions and 5 deletions
  1. 23 4
      Modules/CheckLanguage.cmake
  2. 2 1
      Tests/CMakeOnly/CheckLanguage/CMakeLists.txt

+ 23 - 4
Modules/CheckLanguage.cmake

@@ -18,7 +18,9 @@ such as ``Fortran``.  If :variable:`CMAKE_<LANG>_COMPILER` is already defined
 the check does nothing.  Otherwise it tries enabling the language in a
 the check does nothing.  Otherwise it tries enabling the language in a
 test project.  The result is cached in :variable:`CMAKE_<LANG>_COMPILER`
 test project.  The result is cached in :variable:`CMAKE_<LANG>_COMPILER`
 as the compiler that was found, or ``NOTFOUND`` if the language cannot be
 as the compiler that was found, or ``NOTFOUND`` if the language cannot be
-enabled.
+enabled. For CUDA which can have an explicit host compiler, the cache
+:variable:`CMAKE_CUDA_HOST_COMPILER` variable will be set if it was required
+for compilation.
 
 
 Example:
 Example:
 
 
@@ -39,13 +41,23 @@ macro(check_language lang)
     set(_desc "Looking for a ${lang} compiler")
     set(_desc "Looking for a ${lang} compiler")
     message(STATUS ${_desc})
     message(STATUS ${_desc})
     file(REMOVE_RECURSE ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/Check${lang})
     file(REMOVE_RECURSE ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/Check${lang})
-    file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/Check${lang}/CMakeLists.txt"
+
+    set(extra_compiler_variables)
+    if(lang STREQUAL CUDA)
+      set(extra_compiler_variables "set(CMAKE_CUDA_HOST_COMPILER \\\"\${CMAKE_CUDA_HOST_COMPILER}\\\")")
+    endif()
+
+    set(content
       "cmake_minimum_required(VERSION ${CMAKE_VERSION})
       "cmake_minimum_required(VERSION ${CMAKE_VERSION})
 project(Check${lang} ${lang})
 project(Check${lang} ${lang})
 file(WRITE \"\${CMAKE_CURRENT_BINARY_DIR}/result.cmake\"
 file(WRITE \"\${CMAKE_CURRENT_BINARY_DIR}/result.cmake\"
   \"set(CMAKE_${lang}_COMPILER \\\"\${CMAKE_${lang}_COMPILER}\\\")\\n\"
   \"set(CMAKE_${lang}_COMPILER \\\"\${CMAKE_${lang}_COMPILER}\\\")\\n\"
-  )
-")
+  \"${extra_compiler_variables}\\n\"
+  )"
+    )
+
+    file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/Check${lang}/CMakeLists.txt"
+      "${content}")
     if(CMAKE_GENERATOR_INSTANCE)
     if(CMAKE_GENERATOR_INSTANCE)
       set(_D_CMAKE_GENERATOR_INSTANCE "-DCMAKE_GENERATOR_INSTANCE:INTERNAL=${CMAKE_GENERATOR_INSTANCE}")
       set(_D_CMAKE_GENERATOR_INSTANCE "-DCMAKE_GENERATOR_INSTANCE:INTERNAL=${CMAKE_GENERATOR_INSTANCE}")
     else()
     else()
@@ -75,5 +87,12 @@ file(WRITE \"\${CMAKE_CURRENT_BINARY_DIR}/result.cmake\"
     message(STATUS "${_desc} - ${CMAKE_${lang}_COMPILER}")
     message(STATUS "${_desc} - ${CMAKE_${lang}_COMPILER}")
     set(CMAKE_${lang}_COMPILER "${CMAKE_${lang}_COMPILER}" CACHE FILEPATH "${lang} compiler")
     set(CMAKE_${lang}_COMPILER "${CMAKE_${lang}_COMPILER}" CACHE FILEPATH "${lang} compiler")
     mark_as_advanced(CMAKE_${lang}_COMPILER)
     mark_as_advanced(CMAKE_${lang}_COMPILER)
+
+    if(CMAKE_${lang}_HOST_COMPILER)
+      message(STATUS "Looking for a ${lang} host compiler - ${CMAKE_${lang}_HOST_COMPILER}")
+      set(CMAKE_${lang}_HOST_COMPILER "${CMAKE_${lang}_HOST_COMPILER}" CACHE FILEPATH "${lang} host compiler")
+      mark_as_advanced(CMAKE_${lang}_HOST_COMPILER)
+    endif()
+
   endif()
   endif()
 endmacro()
 endmacro()

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

@@ -7,7 +7,8 @@ set(expect_C 1)
 set(expect_CXX 1)
 set(expect_CXX 1)
 unset(expect_Fortran)
 unset(expect_Fortran)
 set(expect_NoSuchLanguage 0)
 set(expect_NoSuchLanguage 0)
-foreach(lang C CXX Fortran NoSuchLanguage)
+
+foreach(lang C CXX Fortran CUDA NoSuchLanguage)
   check_language(${lang})
   check_language(${lang})
   if(NOT DEFINED CMAKE_${lang}_COMPILER)
   if(NOT DEFINED CMAKE_${lang}_COMPILER)
     message(FATAL_ERROR "check_language(${lang}) did not set result")
     message(FATAL_ERROR "check_language(${lang}) did not set result")