From 2e2dbc250aa91eb8893d8e4248f3ed237bf124d0 Mon Sep 17 00:00:00 2001 From: Colin Cross Date: Wed, 25 Sep 2019 13:31:46 -0700 Subject: [PATCH] Use localPool consistently for UseGoma() == true Remove the distinction between pctx.StaticRule and pctx.AndroidStaticRule so that all of the local rules correctly get assigned to the localPool. Also put Module and Singleton rules into the localPool. Test: compare out/soong/build.ninja Change-Id: Id2bb38eff3c7209340fe55bc9006f00bd3661d81 --- android/module.go | 6 ++++++ android/package_ctx.go | 34 +++++++++++++++++----------------- android/singleton.go | 5 +++++ cc/builder.go | 2 +- 4 files changed, 29 insertions(+), 18 deletions(-) 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})"