diff options
author | Bernhard Burgermeister <bburgerm@googlemail.com> | 2017-02-07 15:50:47 (GMT) |
---|---|---|
committer | Bernhard Burgermeister <bburgerm@googlemail.com> | 2017-04-25 07:32:50 (GMT) |
commit | 594d3d6fffac33062629bafb819a5df7c1326824 (patch) | |
tree | 33f63d977929a8d07464639534815633e1074fed /Source/cmNinjaTargetGenerator.cxx | |
parent | 8b0016ab658e2b96211c33055b8cf38b6d4a6d94 (diff) | |
download | CMake-594d3d6fffac33062629bafb819a5df7c1326824.zip CMake-594d3d6fffac33062629bafb819a5df7c1326824.tar.gz CMake-594d3d6fffac33062629bafb819a5df7c1326824.tar.bz2 |
Ninja: support response file for cmake_ninja_depends on Windows
The internal tool "cmake_ninja_depends" now supports reading the list of ddi
files from a reponse file to circumvent Windows command line length limits.
Use this response file for dyndep rule on Windows.
Diffstat (limited to 'Source/cmNinjaTargetGenerator.cxx')
-rw-r--r-- | Source/cmNinjaTargetGenerator.cxx | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/Source/cmNinjaTargetGenerator.cxx b/Source/cmNinjaTargetGenerator.cxx index 7c417a4..c83b48a 100644 --- a/Source/cmNinjaTargetGenerator.cxx +++ b/Source/cmNinjaTargetGenerator.cxx @@ -557,13 +557,26 @@ void cmNinjaTargetGenerator::WriteCompileRule(const std::string& lang) // Write the rule for ninja dyndep file generation. std::vector<std::string> ddCmds; +#ifdef _WIN32 + // Windows command line length is limited -> use response file for dyndep + // rules + std::string ddRspFile = "$out.rsp"; + std::string ddRspContent = "$in"; + std::string ddInput = "@" + ddRspFile; +#else + std::string ddRspFile; + std::string ddRspContent; + std::string ddInput = "$in"; +#endif + // Run CMake dependency scanner on preprocessed output. std::string const cmake = this->GetLocalGenerator()->ConvertToOutputFormat( cmSystemTools::GetCMakeCommand(), cmLocalGenerator::SHELL); ddCmds.push_back(cmake + " -E cmake_ninja_dyndep" " --tdi=" + tdi + " --dd=$out" - " $in"); + " " + + ddInput); std::string const ddCmdLine = this->GetLocalGenerator()->BuildCommandLine(ddCmds); @@ -575,9 +588,7 @@ void cmNinjaTargetGenerator::WriteCompileRule(const std::string& lang) this->GetGlobalGenerator()->AddRule( this->LanguageDyndepRule(lang), ddCmdLine, ddDesc.str(), ddComment.str(), /*depfile*/ "", - /*deps*/ "", - /*rspfile*/ "", - /*rspcontent*/ "", + /*deps*/ "", ddRspFile, ddRspContent, /*restat*/ "", /*generator*/ false); } |