diff --git a/android/module.go b/android/module.go index 8076a99ff..a1097c112 100644 --- a/android/module.go +++ b/android/module.go @@ -1177,6 +1177,12 @@ 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.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 + params.Pool = localPool + } + rule := m.bp.Rule(pctx.PackageContext, name, params, argNames...) if m.config.captureBuild { diff --git a/android/package_ctx.go b/android/package_ctx.go index 00b99ff62..548450e44 100644 --- a/android/package_ctx.go +++ b/android/package_ctx.go @@ -104,7 +104,8 @@ func (p PackageContext) PoolFunc(name string, } // RuleFunc wraps blueprint.PackageContext.RuleFunc, converting the interface{} config -// argument to a Context that supports Config(). +// argument to a Context that supports Config(), and provides a default Pool if none is +// specified. func (p PackageContext) RuleFunc(name string, f func(PackageRuleContext) blueprint.RuleParams, argNames ...string) blueprint.Rule { @@ -114,6 +115,11 @@ func (p PackageContext) RuleFunc(name string, 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 + params.Pool = localPool + } return params, nil }, argNames...) } @@ -234,10 +240,16 @@ func (p PackageContext) PrefixedExistentPathsForSourcesVariable( }) } -// AndroidStaticRule wraps blueprint.StaticRule and provides a default Pool if none is specified +// AndroidStaticRule is an alias for StaticRule. func (p PackageContext) AndroidStaticRule(name string, params blueprint.RuleParams, argNames ...string) blueprint.Rule { - return p.AndroidRuleFunc(name, func(PackageRuleContext) blueprint.RuleParams { + return p.StaticRule(name, params, argNames...) +} + +// StaticRule wraps blueprint.StaticRule and provides a default Pool if none is specified. +func (p PackageContext) StaticRule(name string, params blueprint.RuleParams, + argNames ...string) blueprint.Rule { + return p.RuleFunc(name, func(PackageRuleContext) blueprint.RuleParams { return params }, argNames...) } @@ -245,18 +257,6 @@ func (p PackageContext) AndroidStaticRule(name string, params blueprint.RulePara // AndroidGomaStaticRule wraps blueprint.StaticRule but uses goma's parallelism if goma is enabled func (p PackageContext) AndroidGomaStaticRule(name string, params blueprint.RuleParams, argNames ...string) blueprint.Rule { - return p.StaticRule(name, params, argNames...) -} - -func (p PackageContext) AndroidRuleFunc(name string, - f func(PackageRuleContext) blueprint.RuleParams, argNames ...string) blueprint.Rule { - return p.RuleFunc(name, func(ctx PackageRuleContext) blueprint.RuleParams { - params := f(ctx) - 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 - params.Pool = localPool - } - return params - }, argNames...) + // bypass android.PackageContext.StaticRule so that Pool does not get set to local_pool. + return p.PackageContext.StaticRule(name, params, argNames...) } diff --git a/android/singleton.go b/android/singleton.go index a59d54aa2..7f9c21606 100644 --- a/android/singleton.go +++ b/android/singleton.go @@ -127,6 +127,11 @@ 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().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 + params.Pool = localPool + } rule := s.SingletonContext.Rule(pctx.PackageContext, name, params, argNames...) if s.Config().captureBuild { s.ruleParams[rule] = params diff --git a/cc/builder.go b/cc/builder.go index c4f65dab1..0760dd490 100644 --- a/cc/builder.go +++ b/cc/builder.go @@ -195,7 +195,7 @@ var ( _ = pctx.SourcePathVariable("sAbiDiffer", "prebuilts/clang-tools/${config.HostPrebuiltTag}/bin/header-abi-diff") - sAbiDiff = pctx.AndroidRuleFunc("sAbiDiff", + sAbiDiff = pctx.RuleFunc("sAbiDiff", func(ctx android.PackageRuleContext) blueprint.RuleParams { // TODO(b/78139997): Add -check-all-apis back commandStr := "($sAbiDiffer ${allowFlags} -lib ${libName} -arch ${arch} -o ${out} -new ${in} -old ${referenceDump})"