Add property for incremental nsjail genrules
Normally genrule sandboxes run the build command in a clean state.
Setting keep_gendir as true, along with use_nsjail, will keep $(genDir)
so the genrule can be incrementally built.
Bug: 381459587
Test: build with and without the flag
Change-Id: I07bbea965f7b644ee8c8d2ead5b6abdd1f0c9aa6
diff --git a/genrule/genrule.go b/genrule/genrule.go
index 9d2dbc7..ac62b8d 100644
--- a/genrule/genrule.go
+++ b/genrule/genrule.go
@@ -230,8 +230,9 @@
shards int
// For nsjail tasks
- useNsjail bool
- dirSrcs android.DirectoryPaths
+ useNsjail bool
+ dirSrcs android.DirectoryPaths
+ keepGendir bool
}
func (g *Module) GeneratedSourceFiles() android.Paths {
@@ -487,6 +488,9 @@
name := "generator"
if task.useNsjail {
rule = android.NewRuleBuilder(pctx, ctx).Nsjail(task.genDir, android.PathForModuleOut(ctx, "nsjail_build_sandbox"))
+ if task.keepGendir {
+ rule.NsjailKeepGendir()
+ }
} else {
manifestName := "genrule.sbox.textproto"
if task.shards > 0 {
@@ -897,17 +901,24 @@
return nil
}
+ keepGendir := Bool(properties.Keep_gendir)
+ if keepGendir && !useNsjail {
+ ctx.PropertyErrorf("keep_gendir", "can't use keep_gendir if use_nsjail is false")
+ return nil
+ }
+
outs := make(android.WritablePaths, len(properties.Out))
for i, out := range properties.Out {
outs[i] = android.PathForModuleGen(ctx, out)
}
return []generateTask{{
- in: srcFiles,
- out: outs,
- genDir: android.PathForModuleGen(ctx),
- cmd: rawCommand,
- useNsjail: useNsjail,
- dirSrcs: dirSrcs,
+ in: srcFiles,
+ out: outs,
+ genDir: android.PathForModuleGen(ctx),
+ cmd: rawCommand,
+ useNsjail: useNsjail,
+ dirSrcs: dirSrcs,
+ keepGendir: keepGendir,
}}
}
@@ -928,6 +939,10 @@
// dir_srcs is limited only to Trusty build.
Dir_srcs []string `android:"path"`
+ // If set to true, $(genDir) is not truncated. Useful when this genrule can be incrementally
+ // built. Can be set only when use_nsjail is true.
+ Keep_gendir *bool
+
// names of the output files that will be generated
Out []string `android:"arch_variant"`
}