diff options
author | Robert Maynard <rmaynard@nvidia.com> | 2021-09-17 20:39:13 (GMT) |
---|---|---|
committer | unknown <rmaynard@nvidia.com> | 2021-10-20 15:18:06 (GMT) |
commit | 61b9764b03517276e99584de02d52ceefa5689ec (patch) | |
tree | 663e5dee6f66a2ef958002b209437b659ad02dca /Source/cmMakefileTargetGenerator.cxx | |
parent | 3b5e1b53eae726bb4105240143354270df4495e3 (diff) | |
download | CMake-61b9764b03517276e99584de02d52ceefa5689ec.zip CMake-61b9764b03517276e99584de02d52ceefa5689ec.tar.gz CMake-61b9764b03517276e99584de02d52ceefa5689ec.tar.bz2 |
CUDA: Allow both CUDA_SEPARABLE_COMPILATION and CUDA_PTX_COMPILATION
The target properties `CUDA_SEPARABLE_COMPILATION` and `CUDA_PTX_COMPILATION`
now aren't mutually exclusive and can now be used together on the same
target.
Diffstat (limited to 'Source/cmMakefileTargetGenerator.cxx')
-rw-r--r-- | Source/cmMakefileTargetGenerator.cxx | 33 |
1 files changed, 18 insertions, 15 deletions
diff --git a/Source/cmMakefileTargetGenerator.cxx b/Source/cmMakefileTargetGenerator.cxx index 8edadd3..9f2ae19 100644 --- a/Source/cmMakefileTargetGenerator.cxx +++ b/Source/cmMakefileTargetGenerator.cxx @@ -897,28 +897,31 @@ void cmMakefileTargetGenerator::WriteObjectRuleFiles( // Construct the compile rules. { - std::vector<std::string> compileCommands; + std::string cudaCompileMode; if (lang == "CUDA") { - std::string cmdVar; if (this->GeneratorTarget->GetPropertyAsBool( "CUDA_SEPARABLE_COMPILATION")) { - cmdVar = "CMAKE_CUDA_COMPILE_SEPARABLE_COMPILATION"; - } else if (this->GeneratorTarget->GetPropertyAsBool( - "CUDA_PTX_COMPILATION")) { - cmdVar = "CMAKE_CUDA_COMPILE_PTX_COMPILATION"; + const std::string& rdcFlag = + this->Makefile->GetRequiredDefinition("_CMAKE_CUDA_RDC_FLAG"); + cudaCompileMode = cmStrCat(cudaCompileMode, rdcFlag, " "); + } + if (this->GeneratorTarget->GetPropertyAsBool("CUDA_PTX_COMPILATION")) { + const std::string& ptxFlag = + this->Makefile->GetRequiredDefinition("_CMAKE_CUDA_PTX_FLAG"); + cudaCompileMode = cmStrCat(cudaCompileMode, ptxFlag); } else { - cmdVar = "CMAKE_CUDA_COMPILE_WHOLE_COMPILATION"; + const std::string& wholeFlag = + this->Makefile->GetRequiredDefinition("_CMAKE_CUDA_WHOLE_FLAG"); + cudaCompileMode = cmStrCat(cudaCompileMode, wholeFlag); } - const std::string& compileRule = - this->Makefile->GetRequiredDefinition(cmdVar); - cmExpandList(compileRule, compileCommands); - } else { - const std::string cmdVar = "CMAKE_" + lang + "_COMPILE_OBJECT"; - const std::string& compileRule = - this->Makefile->GetRequiredDefinition(cmdVar); - cmExpandList(compileRule, compileCommands); + vars.CudaCompileMode = cudaCompileMode.c_str(); } + std::vector<std::string> compileCommands; + const std::string& compileRule = this->Makefile->GetRequiredDefinition( + "CMAKE_" + lang + "_COMPILE_OBJECT"); + cmExpandList(compileRule, compileCommands); + if (this->GeneratorTarget->GetPropertyAsBool("EXPORT_COMPILE_COMMANDS") && lang_can_export_cmds && compileCommands.size() == 1) { std::string compileCommand = compileCommands[0]; |