Add write_if_changed property to genrule
When "write_if_changed: true" is set, it will call restat for ninja.
With this option the output file will be copied only if it is changed.
Bug: 290130959
Test: ninja rule include "--write-if-changed"
Change-Id: I8bd77b43b22eb0115e0bdc73718b2d6997d92652
diff --git a/genrule/genrule.go b/genrule/genrule.go
index 99c9166..a470c5e 100644
--- a/genrule/genrule.go
+++ b/genrule/genrule.go
@@ -151,6 +151,9 @@
// input files to exclude
Exclude_srcs []string `android:"path,arch_variant"`
+
+ // Enable restat to update the output only if the output is changed
+ Write_if_changed *bool
}
type Module struct {
@@ -467,6 +470,9 @@
// Use a RuleBuilder to create a rule that runs the command inside an sbox sandbox.
rule := getSandboxedRuleBuilder(ctx, android.NewRuleBuilder(pctx, ctx).Sbox(task.genDir, manifestPath))
+ if Bool(g.properties.Write_if_changed) {
+ rule.Restat()
+ }
cmd := rule.Command()
for _, out := range task.out {