CUDA: Add option to run the compiler through launcher tools

Add a `CUDA_COMPILER_LAUNCHER` target property like those added for C
and CXX by commit v3.4.0-rc1~450^2 (Add options to launch the compiler
through tools like ccache or distcc, 2015-06-04).

Fixes: #16953
This commit is contained in:
Brad King
2017-06-09 11:20:41 -04:00
parent 591557ba45
commit 414438b2fb
13 changed files with 42 additions and 9 deletions

View File

@@ -1,7 +1,8 @@
<LANG>_COMPILER_LAUNCHER <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 Specify a :ref:`;-list <CMake Language Lists>` containing a command line
for a compiler launching tool. The :ref:`Makefile Generators` and the for a compiler launching tool. The :ref:`Makefile Generators` and the

View File

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

View File

@@ -3,4 +3,4 @@ CMAKE_<LANG>_COMPILER_LAUNCHER
Default value for :prop_tgt:`<LANG>_COMPILER_LAUNCHER` target property. Default value for :prop_tgt:`<LANG>_COMPILER_LAUNCHER` target property.
This variable is used to initialize the property on each target as it is 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``.

View File

@@ -657,7 +657,8 @@ void cmMakefileTargetGenerator::WriteObjectBuildFile(
} }
// Maybe insert a compiler launcher like ccache or distcc // 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"; std::string const clauncher_prop = lang + "_COMPILER_LAUNCHER";
const char* clauncher = const char* clauncher =
this->GeneratorTarget->GetProperty(clauncher_prop); this->GeneratorTarget->GetProperty(clauncher_prop);

View File

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

View File

@@ -276,6 +276,7 @@ cmTarget::cmTarget(std::string const& name, cmStateEnums::TargetType type,
this->SetPropertyDefault("CUDA_STANDARD", CM_NULLPTR); this->SetPropertyDefault("CUDA_STANDARD", CM_NULLPTR);
this->SetPropertyDefault("CUDA_STANDARD_REQUIRED", CM_NULLPTR); this->SetPropertyDefault("CUDA_STANDARD_REQUIRED", CM_NULLPTR);
this->SetPropertyDefault("CUDA_EXTENSIONS", 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_START_STATIC", CM_NULLPTR);
this->SetPropertyDefault("LINK_SEARCH_END_STATIC", CM_NULLPTR); this->SetPropertyDefault("LINK_SEARCH_END_STATIC", CM_NULLPTR);
} }

View File

@@ -341,6 +341,9 @@ if("${CMAKE_GENERATOR}" MATCHES "Make|Ninja")
add_RunCMake_test(ClangTidy -DPSEUDO_TIDY=$<TARGET_FILE:pseudo_tidy>) add_RunCMake_test(ClangTidy -DPSEUDO_TIDY=$<TARGET_FILE:pseudo_tidy>)
add_RunCMake_test(IncludeWhatYouUse -DPSEUDO_IWYU=$<TARGET_FILE:pseudo_iwyu>) add_RunCMake_test(IncludeWhatYouUse -DPSEUDO_IWYU=$<TARGET_FILE:pseudo_iwyu>)
add_RunCMake_test(Cpplint -DPSEUDO_CPPLINT=$<TARGET_FILE:pseudo_cpplint>) 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) add_RunCMake_test(CompilerLauncher)
endif() endif()

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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