Browse Source

Merge topic 'cuda-compiler-launcher'

414438b2 CUDA: Add option to run the compiler through launcher tools

Acked-by: Kitware Robot <[email protected]>
Merge-request: !949
Brad King 8 years ago
parent
commit
99153a9eb6

+ 2 - 1
Help/prop_tgt/LANG_COMPILER_LAUNCHER.rst

@@ -1,7 +1,8 @@
 <LANG>_COMPILER_LAUNCHER
 ------------------------
 
-This property is implemented only when ``<LANG>`` is ``C`` or ``CXX``.
+This property is implemented only when ``<LANG>`` is ``C``, ``CXX``,
+or ``CUDA``.
 
 Specify a :ref:`;-list <CMake Language Lists>` containing a command line
 for a compiler launching tool. The :ref:`Makefile Generators` and the

+ 8 - 0
Help/release/dev/cuda-compiler-launcher.rst

@@ -0,0 +1,8 @@
+cuda-compiler-launcher
+----------------------
+
+* The :ref:`Makefile Generators` and the :generator:`Ninja` generator learned
+  to add compiler launcher tools like ccache along with the compiler for the
+  ``CUDA`` language (``C`` and ``CXX`` were supported previously).  See the
+  :variable:`CMAKE_<LANG>_COMPILER_LAUNCHER` variable and
+  :prop_tgt:`<LANG>_COMPILER_LAUNCHER` target property for details.

+ 1 - 1
Help/variable/CMAKE_LANG_COMPILER_LAUNCHER.rst

@@ -3,4 +3,4 @@ CMAKE_<LANG>_COMPILER_LAUNCHER
 
 Default value for :prop_tgt:`<LANG>_COMPILER_LAUNCHER` target property.
 This variable is used to initialize the property on each target as it is
-created.  This is done only when ``<LANG>`` is ``C`` or ``CXX``.
+created.  This is done only when ``<LANG>`` is ``C``, ``CXX``, or ``CUDA``.

+ 2 - 1
Source/cmMakefileTargetGenerator.cxx

@@ -657,7 +657,8 @@ void cmMakefileTargetGenerator::WriteObjectBuildFile(
     }
 
     // Maybe insert a compiler launcher like ccache or distcc
-    if (!compileCommands.empty() && (lang == "C" || lang == "CXX")) {
+    if (!compileCommands.empty() &&
+        (lang == "C" || lang == "CXX" || lang == "CUDA")) {
       std::string const clauncher_prop = lang + "_COMPILER_LAUNCHER";
       const char* clauncher =
         this->GeneratorTarget->GetProperty(clauncher_prop);

+ 2 - 1
Source/cmNinjaTargetGenerator.cxx

@@ -648,7 +648,8 @@ void cmNinjaTargetGenerator::WriteCompileRule(const std::string& lang)
   }
 
   // Maybe insert a compiler launcher like ccache or distcc
-  if (!compileCmds.empty() && (lang == "C" || lang == "CXX")) {
+  if (!compileCmds.empty() &&
+      (lang == "C" || lang == "CXX" || lang == "CUDA")) {
     std::string const clauncher_prop = lang + "_COMPILER_LAUNCHER";
     const char* clauncher = this->GeneratorTarget->GetProperty(clauncher_prop);
     if (clauncher && *clauncher) {

+ 1 - 0
Source/cmTarget.cxx

@@ -276,6 +276,7 @@ cmTarget::cmTarget(std::string const& name, cmStateEnums::TargetType type,
     this->SetPropertyDefault("CUDA_STANDARD", CM_NULLPTR);
     this->SetPropertyDefault("CUDA_STANDARD_REQUIRED", CM_NULLPTR);
     this->SetPropertyDefault("CUDA_EXTENSIONS", CM_NULLPTR);
+    this->SetPropertyDefault("CUDA_COMPILER_LAUNCHER", CM_NULLPTR);
     this->SetPropertyDefault("LINK_SEARCH_START_STATIC", CM_NULLPTR);
     this->SetPropertyDefault("LINK_SEARCH_END_STATIC", CM_NULLPTR);
   }

+ 3 - 0
Tests/RunCMake/CMakeLists.txt

@@ -341,6 +341,9 @@ if("${CMAKE_GENERATOR}" MATCHES "Make|Ninja")
   add_RunCMake_test(ClangTidy -DPSEUDO_TIDY=$<TARGET_FILE:pseudo_tidy>)
   add_RunCMake_test(IncludeWhatYouUse -DPSEUDO_IWYU=$<TARGET_FILE:pseudo_iwyu>)
   add_RunCMake_test(Cpplint -DPSEUDO_CPPLINT=$<TARGET_FILE:pseudo_cpplint>)
+  if(DEFINED CMake_TEST_CUDA)
+    list(APPEND CompilerLauncher_ARGS -DCMake_TEST_CUDA=${CMake_TEST_CUDA})
+  endif()
   add_RunCMake_test(CompilerLauncher)
 endif()
 

+ 1 - 0
Tests/RunCMake/CompilerLauncher/CUDA-Build-stdout.txt

@@ -0,0 +1 @@
+.*-E env USED_LAUNCHER=1.*

+ 1 - 0
Tests/RunCMake/CompilerLauncher/CUDA-launch-Build-stdout.txt

@@ -0,0 +1 @@
+.*-E env USED_LAUNCHER=1.*

+ 3 - 0
Tests/RunCMake/CompilerLauncher/CUDA-launch.cmake

@@ -0,0 +1,3 @@
+set(CTEST_USE_LAUNCHERS 1)
+include(CTestUseLaunchers)
+include(CUDA.cmake)

+ 4 - 0
Tests/RunCMake/CompilerLauncher/CUDA.cmake

@@ -0,0 +1,4 @@
+enable_language(CUDA)
+set(CMAKE_CUDA_COMPILER_LAUNCHER "${CMAKE_COMMAND};-E;env;USED_LAUNCHER=1")
+set(CMAKE_VERBOSE_MAKEFILE TRUE)
+add_executable(main main.cu)

+ 10 - 5
Tests/RunCMake/CompilerLauncher/RunCMakeTest.cmake

@@ -15,9 +15,14 @@ function(run_compiler_launcher lang)
   run_cmake_command(${lang}-Build ${CMAKE_COMMAND} --build . ${verbose_args})
 endfunction()
 
-run_compiler_launcher(C)
-run_compiler_launcher(CXX)
-if (NOT RunCMake_GENERATOR STREQUAL "Watcom WMake")
-  run_compiler_launcher(C-launch)
-  run_compiler_launcher(CXX-launch)
+set(langs C CXX)
+if(CMake_TEST_CUDA)
+  list(APPEND langs CUDA)
 endif()
+
+foreach(lang ${langs})
+  run_compiler_launcher(${lang})
+  if (NOT RunCMake_GENERATOR STREQUAL "Watcom WMake")
+    run_compiler_launcher(${lang}-launch)
+  endif()
+endforeach()

+ 4 - 0
Tests/RunCMake/CompilerLauncher/main.cu

@@ -0,0 +1,4 @@
+int main()
+{
+  return 0;
+}