diff options
author | Ben Boeckel <ben.boeckel@kitware.com> | 2020-01-20 15:42:23 (GMT) |
---|---|---|
committer | Ben Boeckel <ben.boeckel@kitware.com> | 2020-01-21 13:57:51 (GMT) |
commit | eb2da206d94dcfcb579036969145a8bdb52e7e72 (patch) | |
tree | 83f242122ca9c5ade218d14071b904ab55b3eb0a /Source/cmGlobalNinjaGenerator.cxx | |
parent | 5e38b8f608fee599494aadd0d4b5ed9366843bda (diff) | |
download | CMake-eb2da206d94dcfcb579036969145a8bdb52e7e72.zip CMake-eb2da206d94dcfcb579036969145a8bdb52e7e72.tar.gz CMake-eb2da206d94dcfcb579036969145a8bdb52e7e72.tar.bz2 |
cmGlobalNinjaGenerator: only restat build.ninja
This reduces the work that ninja needs to do on a CMake reconfigure.
Diffstat (limited to 'Source/cmGlobalNinjaGenerator.cxx')
-rw-r--r-- | Source/cmGlobalNinjaGenerator.cxx | 24 |
1 files changed, 19 insertions, 5 deletions
diff --git a/Source/cmGlobalNinjaGenerator.cxx b/Source/cmGlobalNinjaGenerator.cxx index 0487ad1..1f83ec5 100644 --- a/Source/cmGlobalNinjaGenerator.cxx +++ b/Source/cmGlobalNinjaGenerator.cxx @@ -531,11 +531,13 @@ void cmGlobalNinjaGenerator::Generate() return; } - auto run_ninja_tool = [this](char const* tool) { + auto run_ninja_tool = [this](std::vector<char const*> const& args) { std::vector<std::string> command; command.push_back(this->NinjaCommand); command.emplace_back("-t"); - command.emplace_back(tool); + for (auto const& arg : args) { + command.emplace_back(arg); + } std::string error; if (!cmSystemTools::RunSingleCommand(command, nullptr, &error, nullptr, nullptr, @@ -551,13 +553,25 @@ void cmGlobalNinjaGenerator::Generate() }; if (this->NinjaSupportsCleanDeadTool) { - run_ninja_tool("cleandead"); + run_ninja_tool({ "cleandead" }); } if (this->NinjaSupportsUnconditionalRecompactTool) { - run_ninja_tool("recompact"); + run_ninja_tool({ "recompact" }); } if (this->NinjaSupportsRestatTool) { - run_ninja_tool("restat"); + // XXX(ninja): We only list `build.ninja` entry files here because CMake + // *always* rewrites these files on a reconfigure. If CMake ever gets + // smarter about this, all CMake-time created/edited files listed as + // outputs for the reconfigure build statement will need to be listed here. + cmNinjaDeps outputs; + this->AddRebuildManifestOutputs(outputs); + std::vector<const char*> args; + args.reserve(outputs.size() + 1); + args.push_back("restat"); + for (auto const& output : outputs) { + args.push_back(output.c_str()); + } + run_ninja_tool(args); } } |