From a7424b636b28ce0b6f9d7156dd3e1fe0e487f643 Mon Sep 17 00:00:00 2001 From: Ben Boeckel Date: Wed, 14 Feb 2024 13:42:18 -0500 Subject: Ninja: make the collator rule use `restat = 1` This avoids rebuilds when the module metadata does not change. --- Source/cmGlobalNinjaGenerator.cxx | 2 ++ Source/cmNinjaTargetGenerator.cxx | 5 +++++ 2 files changed, 7 insertions(+) diff --git a/Source/cmGlobalNinjaGenerator.cxx b/Source/cmGlobalNinjaGenerator.cxx index 22fd90d..4fa5032 100644 --- a/Source/cmGlobalNinjaGenerator.cxx +++ b/Source/cmGlobalNinjaGenerator.cxx @@ -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; diff --git a/Source/cmNinjaTargetGenerator.cxx b/Source/cmNinjaTargetGenerator.cxx index 9c75cd6..58248fc 100644 --- a/Source/cmNinjaTargetGenerator.cxx +++ b/Source/cmNinjaTargetGenerator.cxx @@ -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). -- cgit v0.12