diff --git a/android/defs.go b/android/defs.go index 5c815e64e..45522246f 100644 --- a/android/defs.go +++ b/android/defs.go @@ -100,6 +100,9 @@ var ( // Used only when USE_GOMA=true is set, to restrict non-goma jobs to the local parallelism value localPool = blueprint.NewBuiltinPool("local_pool") + // Used only by RuleBuilder to identify remoteable rules. Does not actually get created in ninja. + remotePool = blueprint.NewBuiltinPool("remote_pool") + // Used for processes that need significant RAM to ensure there are not too many running in parallel. highmemPool = blueprint.NewBuiltinPool("highmem_pool") ) diff --git a/android/module.go b/android/module.go index d57abd168..80f477b04 100644 --- a/android/module.go +++ b/android/module.go @@ -908,7 +908,7 @@ func (m *ModuleBase) PartitionTag(config DeviceConfig) string { // partition at "system/vendor/odm". if config.OdmPath() == "odm" { partition = "odm" - } else if strings.HasPrefix(config.OdmPath (), "vendor/") { + } else if strings.HasPrefix(config.OdmPath(), "vendor/") { partition = "vendor" } } else if m.ProductSpecific() { @@ -1506,10 +1506,17 @@ func (m *moduleContext) Variable(pctx PackageContext, name, value string) { func (m *moduleContext) Rule(pctx PackageContext, name string, params blueprint.RuleParams, argNames ...string) blueprint.Rule { - if m.config.UseRemoteBuild() && 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 + if m.config.UseRemoteBuild() { + if 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 + } else if params.Pool == remotePool { + // remotePool is a fake pool used to identify rule that are supported for remoting. If the rule's + // pool is the remotePool, replace with nil so that ninja runs it at NINJA_REMOTE_NUM_JOBS + // parallelism. + params.Pool = nil + } } rule := m.bp.Rule(pctx.PackageContext, name, params, argNames...) diff --git a/android/rule_builder.go b/android/rule_builder.go index 9005f072a..6226548ba 100644 --- a/android/rule_builder.go +++ b/android/rule_builder.go @@ -446,7 +446,8 @@ func (r *RuleBuilder) Build(pctx PackageContext, ctx BuilderContext, name string if ctx.Config().UseGoma() && r.remoteable.Goma { // When USE_GOMA=true is set and the rule is supported by goma, allow jobs to run outside the local pool. } else if ctx.Config().UseRBE() && r.remoteable.RBE { - // When USE_RBE=true is set and the rule is supported by RBE, allow jobs to run outside the local pool. + // When USE_RBE=true is set and the rule is supported by RBE, use the remotePool. + pool = remotePool } else if r.highmem { pool = highmemPool } else if ctx.Config().UseRemoteBuild() { diff --git a/android/singleton.go b/android/singleton.go index 45a9b8243..568398cdd 100644 --- a/android/singleton.go +++ b/android/singleton.go @@ -128,10 +128,17 @@ func (s *singletonContextAdaptor) Variable(pctx PackageContext, name, value stri } func (s *singletonContextAdaptor) Rule(pctx PackageContext, name string, params blueprint.RuleParams, argNames ...string) blueprint.Rule { - if s.Config().UseRemoteBuild() && 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 + if s.Config().UseRemoteBuild() { + if 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 + } else if params.Pool == remotePool { + // remotePool is a fake pool used to identify rule that are supported for remoting. If the rule's + // pool is the remotePool, replace with nil so that ninja runs it at NINJA_REMOTE_NUM_JOBS + // parallelism. + params.Pool = nil + } } rule := s.SingletonContext.Rule(pctx.PackageContext, name, params, argNames...) if s.Config().captureBuild {