From 712af07e4792beea6f3b62bddace9077d7fec525 Mon Sep 17 00:00:00 2001 From: Robert Maynard Date: Thu, 13 Jul 2017 11:00:40 -0400 Subject: CUDA: CMAKE_EXPORT_COMPILE_COMMANDS now works with CUDA and Ninja Fixes: #17061 --- Modules/CMakeCUDAInformation.cmake | 4 +++- Source/cmNinjaTargetGenerator.cxx | 27 +++++++++++++++++++++------ 2 files changed, 24 insertions(+), 7 deletions(-) diff --git a/Modules/CMakeCUDAInformation.cmake b/Modules/CMakeCUDAInformation.cmake index 780e953..9bba847 100644 --- a/Modules/CMakeCUDAInformation.cmake +++ b/Modules/CMakeCUDAInformation.cmake @@ -104,7 +104,9 @@ include(CMakeCommonLanguageInclude) # now define the following rules: # CMAKE_CUDA_CREATE_SHARED_LIBRARY # CMAKE_CUDA_CREATE_SHARED_MODULE -# CMAKE_CUDA_COMPILE_OBJECT +# CMAKE_CUDA_COMPILE_WHOLE_COMPILATION +# CMAKE_CUDA_COMPILE_PTX_COMPILATION +# CMAKE_CUDA_COMPILE_SEPARABLE_COMPILATION # CMAKE_CUDA_LINK_EXECUTABLE if(CMAKE_CUDA_HOST_COMPILER) diff --git a/Source/cmNinjaTargetGenerator.cxx b/Source/cmNinjaTargetGenerator.cxx index 2f4cccb..d38dbcb 100644 --- a/Source/cmNinjaTargetGenerator.cxx +++ b/Source/cmNinjaTargetGenerator.cxx @@ -1064,13 +1064,28 @@ void cmNinjaTargetGenerator::ExportObjectCompileCommand( compileObjectVars.Includes = includes.c_str(); // Rule for compiling object file. - std::string compileCmdVar = "CMAKE_"; - compileCmdVar += language; - compileCmdVar += "_COMPILE_OBJECT"; - std::string compileCmd = - this->GetMakefile()->GetRequiredDefinition(compileCmdVar); std::vector compileCmds; - cmSystemTools::ExpandListArgument(compileCmd, compileCmds); + if (language == "CUDA") { + std::string cmdVar; + if (this->GeneratorTarget->GetPropertyAsBool( + "CUDA_SEPARABLE_COMPILATION")) { + cmdVar = std::string("CMAKE_CUDA_COMPILE_SEPARABLE_COMPILATION"); + } else if (this->GeneratorTarget->GetPropertyAsBool( + "CUDA_PTX_COMPILATION")) { + cmdVar = std::string("CMAKE_CUDA_COMPILE_PTX_COMPILATION"); + } else { + cmdVar = std::string("CMAKE_CUDA_COMPILE_WHOLE_COMPILATION"); + } + std::string compileCmd = + this->GetMakefile()->GetRequiredDefinition(cmdVar); + cmSystemTools::ExpandListArgument(compileCmd, compileCmds); + } else { + const std::string cmdVar = + std::string("CMAKE_") + language + "_COMPILE_OBJECT"; + std::string compileCmd = + this->GetMakefile()->GetRequiredDefinition(cmdVar); + cmSystemTools::ExpandListArgument(compileCmd, compileCmds); + } CM_AUTO_PTR rulePlaceholderExpander( this->GetLocalGenerator()->CreateRulePlaceholderExpander()); -- cgit v0.12