Fix RuleBuilder remoteable actions running in the local pool.

This CL fixes a bug with RuleBuilder's handling of remoteable actions.
It adds a new type of pool to identify remoteable rules by the android
module context. The pool is then set to nil to actually run actions at
NINJA_REMOTE_NUM_JOBS parallelism.

Test: built aosp crosshatch userdebug
Change-Id: I29452f6fc7a161b94189731e3e3cc1f34907b80c
This commit is contained in:
Ramy Medhat
2020-03-31 22:14:52 -04:00
parent 7182c45fe7
commit 944839a88a
4 changed files with 28 additions and 10 deletions

View File

@@ -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...)