Ninja: make the collator rule use restat = 1

This avoids rebuilds when the module metadata does not change.
This commit is contained in:
Ben Boeckel
2024-02-14 13:42:18 -05:00
parent e24eecfc33
commit a7424b636b
2 changed files with 7 additions and 0 deletions

View File

@@ -2763,6 +2763,7 @@ bool cmGlobalNinjaGenerator::WriteDyndepFile(
// `cmNinjaTargetGenerator::ExportObjectCompileCommand` to generate the
// corresponding file path.
cmGeneratedFileStream mmf(cmStrCat(object.PrimaryOutput, ".modmap"));
mmf.SetCopyIfDifferent(true);
mmf << mm;
}
@@ -2852,6 +2853,7 @@ bool cmGlobalNinjaGenerator::WriteDyndepFile(
}
cmGeneratedFileStream tmf(target_mods_file);
tmf.SetCopyIfDifferent(true);
tmf << target_module_info;
cmDyndepMetadataCallbacks cb;

View File

@@ -814,6 +814,11 @@ void cmNinjaTargetGenerator::WriteCompileRule(const std::string& lang,
// dyndep rules
rule.RspFile = "$out.rsp";
rule.RspContent = "$in";
// Ninja's collator writes all outputs using `cmGeneratedFileStream`, so
// they are only updated if contents actually change. Avoid running
// dependent jobs if the contents don't change by telling `ninja` to check
// the timestamp again.
rule.Restat = "1";
// Run CMake dependency scanner on the source file (using the preprocessed
// source if that was performed).