Run non-RBE supported actions in the local pool when USE_RBE is set.
Bug: 143938974
Test: ran CTS build at -j500 successfully.
Change-Id: I55074bd67308cd716972e24fb56a20bc393d5d9d
diff --git a/android/package_ctx.go b/android/package_ctx.go
index 548450e..cf8face 100644
--- a/android/package_ctx.go
+++ b/android/package_ctx.go
@@ -115,9 +115,9 @@
if len(ctx.errors) > 0 {
return params, ctx.errors[0]
}
- if ctx.Config().UseGoma() && params.Pool == nil {
- // When USE_GOMA=true is set and the rule is not supported by goma, restrict jobs to the
- // local parallelism value
+ if (ctx.Config().UseGoma() || ctx.Config().UseRBE()) && params.Pool == nil {
+ // When USE_GOMA=true or USE_RBE=true are set and the rule is not supported by
+ // goma/RBE, restrict jobs to the local parallelism value
params.Pool = localPool
}
return params, nil
@@ -254,9 +254,35 @@
}, argNames...)
}
-// AndroidGomaStaticRule wraps blueprint.StaticRule but uses goma's parallelism if goma is enabled
-func (p PackageContext) AndroidGomaStaticRule(name string, params blueprint.RuleParams,
+// RemoteRuleSupports selects if a AndroidRemoteStaticRule supports goma, RBE, or both.
+type RemoteRuleSupports int
+
+const (
+ SUPPORTS_NONE = 0
+ SUPPORTS_GOMA = 1 << iota
+ SUPPORTS_RBE = 1 << iota
+ SUPPORTS_BOTH = SUPPORTS_GOMA | SUPPORTS_RBE
+)
+
+// AndroidRemoteStaticRule wraps blueprint.StaticRule but uses goma or RBE's parallelism if goma or RBE are enabled
+// and the appropriate SUPPORTS_* flag is set.
+func (p PackageContext) AndroidRemoteStaticRule(name string, supports RemoteRuleSupports, params blueprint.RuleParams,
argNames ...string) blueprint.Rule {
- // bypass android.PackageContext.StaticRule so that Pool does not get set to local_pool.
- return p.PackageContext.StaticRule(name, params, argNames...)
+
+ return p.PackageContext.RuleFunc(name, func(config interface{}) (blueprint.RuleParams, error) {
+ ctx := &configErrorWrapper{p, config.(Config), nil}
+ if ctx.Config().UseGoma() && supports&SUPPORTS_GOMA == 0 {
+ // When USE_GOMA=true is set and the rule is not supported by goma, restrict jobs to the
+ // local parallelism value
+ params.Pool = localPool
+ }
+
+ if ctx.Config().UseRBE() && supports&SUPPORTS_RBE == 0 {
+ // When USE_RBE=true is set and the rule is not supported by RBE, restrict jobs to the
+ // local parallelism value
+ params.Pool = localPool
+ }
+
+ return params, nil
+ }, argNames...)
}