Merge "Add support for experimentally enabling RBE support on specific rules." am: 5e0dbe4e3e
Change-Id: Ie168aaa15fb183a8b732c0a6f757dce8698c27cb
This commit is contained in:
commit
205edb5da3
|
@ -816,6 +816,18 @@ func (c *config) UseRBE() bool {
|
|||
return Bool(c.productVariables.UseRBE)
|
||||
}
|
||||
|
||||
func (c *config) UseRBEJAVAC() bool {
|
||||
return Bool(c.productVariables.UseRBEJAVAC)
|
||||
}
|
||||
|
||||
func (c *config) UseRBER8() bool {
|
||||
return Bool(c.productVariables.UseRBER8)
|
||||
}
|
||||
|
||||
func (c *config) UseRBED8() bool {
|
||||
return Bool(c.productVariables.UseRBED8)
|
||||
}
|
||||
|
||||
func (c *config) UseRemoteBuild() bool {
|
||||
return c.UseGoma() || c.UseRBE()
|
||||
}
|
||||
|
|
|
@ -232,16 +232,32 @@ func (p PackageContext) StaticRule(name string, params blueprint.RuleParams,
|
|||
}, argNames...)
|
||||
}
|
||||
|
||||
// RemoteRuleSupports selects if a AndroidRemoteStaticRule supports goma, RBE, or both.
|
||||
type RemoteRuleSupports int
|
||||
// RBEExperimentalFlag indicates which flag should be set for the AndroidRemoteStaticRule
|
||||
// to use RBE.
|
||||
type RBEExperimentalFlag int
|
||||
|
||||
const (
|
||||
SUPPORTS_NONE = 0
|
||||
SUPPORTS_GOMA = 1 << iota
|
||||
SUPPORTS_RBE = 1 << iota
|
||||
SUPPORTS_BOTH = SUPPORTS_GOMA | SUPPORTS_RBE
|
||||
// RBE_NOT_EXPERIMENTAL indicates the rule should use RBE in every build that has
|
||||
// UseRBE set.
|
||||
RBE_NOT_EXPERIMENTAL RBEExperimentalFlag = iota
|
||||
// RBE_JAVAC indicates the rule should use RBE only if the RBE_JAVAC variable is
|
||||
// set in an RBE enabled build.
|
||||
RBE_JAVAC
|
||||
// RBE_R8 indicates the rule should use RBE only if the RBE_R8 variable is set in
|
||||
// an RBE enabled build.
|
||||
RBE_R8
|
||||
// RBE_D8 indicates the rule should use RBE only if the RBE_D8 variable is set in
|
||||
// an RBE enabled build.
|
||||
RBE_D8
|
||||
)
|
||||
|
||||
// RemoteRuleSupports configures rules with whether they have Goma and/or RBE support.
|
||||
type RemoteRuleSupports struct {
|
||||
Goma bool
|
||||
RBE bool
|
||||
RBEFlag RBEExperimentalFlag
|
||||
}
|
||||
|
||||
// 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,
|
||||
|
@ -249,18 +265,30 @@ func (p PackageContext) AndroidRemoteStaticRule(name string, supports RemoteRule
|
|||
|
||||
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 {
|
||||
if ctx.Config().UseGoma() && !supports.Goma {
|
||||
// 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 {
|
||||
if ctx.Config().UseRBE() && !supports.RBE {
|
||||
// When USE_RBE=true is set and the rule is not supported by RBE, restrict jobs to the
|
||||
// local parallelism value
|
||||
params.Pool = localPool
|
||||
}
|
||||
|
||||
if ctx.Config().UseRBE() && supports.RBE {
|
||||
if supports.RBEFlag == RBE_JAVAC && !ctx.Config().UseRBEJAVAC() {
|
||||
params.Pool = localPool
|
||||
}
|
||||
if supports.RBEFlag == RBE_R8 && !ctx.Config().UseRBER8() {
|
||||
params.Pool = localPool
|
||||
}
|
||||
if supports.RBEFlag == RBE_D8 && !ctx.Config().UseRBED8() {
|
||||
params.Pool = localPool
|
||||
}
|
||||
}
|
||||
|
||||
return params, nil
|
||||
}, argNames...)
|
||||
}
|
||||
|
|
|
@ -417,10 +417,10 @@ func (r *RuleBuilder) Build(pctx PackageContext, ctx BuilderContext, name string
|
|||
}
|
||||
|
||||
var pool blueprint.Pool
|
||||
if ctx.Config().UseGoma() && r.remoteable&SUPPORTS_GOMA != 0 {
|
||||
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&SUPPORTS_RBE != 0 {
|
||||
// When USE_GOMA=true is set and the rule is supported by RBE, 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.
|
||||
} else if r.highmem {
|
||||
pool = highmemPool
|
||||
} else if ctx.Config().UseRemoteBuild() {
|
||||
|
|
|
@ -204,6 +204,9 @@ type productVariables struct {
|
|||
Binder32bit *bool `json:",omitempty"`
|
||||
UseGoma *bool `json:",omitempty"`
|
||||
UseRBE *bool `json:",omitempty"`
|
||||
UseRBEJAVAC *bool `json:",omitempty"`
|
||||
UseRBER8 *bool `json:",omitempty"`
|
||||
UseRBED8 *bool `json:",omitempty"`
|
||||
Debuggable *bool `json:",omitempty"`
|
||||
Eng *bool `json:",omitempty"`
|
||||
Treble_linker_namespaces *bool `json:",omitempty"`
|
||||
|
|
|
@ -33,7 +33,7 @@ func init() {
|
|||
var (
|
||||
pctx = android.NewPackageContext("android/soong/bpf")
|
||||
|
||||
ccRule = pctx.AndroidRemoteStaticRule("ccRule", android.SUPPORTS_GOMA,
|
||||
ccRule = pctx.AndroidRemoteStaticRule("ccRule", android.RemoteRuleSupports{Goma: true},
|
||||
blueprint.RuleParams{
|
||||
Depfile: "${out}.d",
|
||||
Deps: blueprint.DepsGCC,
|
||||
|
|
|
@ -46,7 +46,7 @@ var (
|
|||
var (
|
||||
pctx = android.NewPackageContext("android/soong/cc")
|
||||
|
||||
cc = pctx.AndroidRemoteStaticRule("cc", android.SUPPORTS_BOTH,
|
||||
cc = pctx.AndroidRemoteStaticRule("cc", android.RemoteRuleSupports{Goma: true, RBE: true},
|
||||
blueprint.RuleParams{
|
||||
Depfile: "${out}.d",
|
||||
Deps: blueprint.DepsGCC,
|
||||
|
@ -55,7 +55,7 @@ var (
|
|||
},
|
||||
"ccCmd", "cFlags")
|
||||
|
||||
ccNoDeps = pctx.AndroidRemoteStaticRule("ccNoDeps", android.SUPPORTS_GOMA,
|
||||
ccNoDeps = pctx.AndroidRemoteStaticRule("ccNoDeps", android.RemoteRuleSupports{Goma: true},
|
||||
blueprint.RuleParams{
|
||||
Command: "$relPwd ${config.CcWrapper}$ccCmd -c $cFlags -o $out $in",
|
||||
CommandDeps: []string{"$ccCmd"},
|
||||
|
|
|
@ -38,7 +38,7 @@ var (
|
|||
// this, all java rules write into separate directories and then are combined into a .jar file
|
||||
// (if the rule produces .class files) or a .srcjar file (if the rule produces .java files).
|
||||
// .srcjar files are unzipped into a temporary directory when compiled with javac.
|
||||
javac = pctx.AndroidRemoteStaticRule("javac", android.SUPPORTS_GOMA,
|
||||
javac = pctx.AndroidRemoteStaticRule("javac", android.RemoteRuleSupports{Goma: true, RBE: true, RBEFlag: android.RBE_JAVAC},
|
||||
blueprint.RuleParams{
|
||||
Command: `rm -rf "$outDir" "$annoDir" "$srcJarDir" && mkdir -p "$outDir" "$annoDir" "$srcJarDir" && ` +
|
||||
`${config.ZipSyncCmd} -d $srcJarDir -l $srcJarDir/list -f "*.java" $srcJars && ` +
|
||||
|
|
|
@ -148,6 +148,20 @@ func init() {
|
|||
return ""
|
||||
})
|
||||
|
||||
pctx.VariableFunc("R8Wrapper", func(ctx android.PackageVarContext) string {
|
||||
if override := ctx.Config().Getenv("R8_WRAPPER"); override != "" {
|
||||
return override + " "
|
||||
}
|
||||
return ""
|
||||
})
|
||||
|
||||
pctx.VariableFunc("D8Wrapper", func(ctx android.PackageVarContext) string {
|
||||
if override := ctx.Config().Getenv("D8_WRAPPER"); override != "" {
|
||||
return override + " "
|
||||
}
|
||||
return ""
|
||||
})
|
||||
|
||||
pctx.HostJavaToolVariable("JacocoCLIJar", "jacoco-cli.jar")
|
||||
|
||||
pctx.HostBinToolVariable("ManifestCheckCmd", "manifest_check")
|
||||
|
|
|
@ -22,10 +22,10 @@ import (
|
|||
"android/soong/android"
|
||||
)
|
||||
|
||||
var d8 = pctx.AndroidStaticRule("d8",
|
||||
var d8 = pctx.AndroidRemoteStaticRule("d8", android.RemoteRuleSupports{RBE: true, RBEFlag: android.RBE_D8},
|
||||
blueprint.RuleParams{
|
||||
Command: `rm -rf "$outDir" && mkdir -p "$outDir" && ` +
|
||||
`${config.D8Cmd} ${config.DexFlags} --output $outDir $d8Flags $in && ` +
|
||||
`${config.D8Wrapper}${config.D8Cmd} ${config.DexFlags} --output $outDir $d8Flags $in && ` +
|
||||
`${config.SoongZipCmd} $zipFlags -o $outDir/classes.dex.jar -C $outDir -f "$outDir/classes*.dex" && ` +
|
||||
`${config.MergeZipsCmd} -D -stripFile "**/*.class" $out $outDir/classes.dex.jar $in`,
|
||||
CommandDeps: []string{
|
||||
|
@ -36,11 +36,11 @@ var d8 = pctx.AndroidStaticRule("d8",
|
|||
},
|
||||
"outDir", "d8Flags", "zipFlags")
|
||||
|
||||
var r8 = pctx.AndroidStaticRule("r8",
|
||||
var r8 = pctx.AndroidRemoteStaticRule("r8", android.RemoteRuleSupports{RBE: true, RBEFlag: android.RBE_R8},
|
||||
blueprint.RuleParams{
|
||||
Command: `rm -rf "$outDir" && mkdir -p "$outDir" && ` +
|
||||
`rm -f "$outDict" && ` +
|
||||
`${config.R8Cmd} ${config.DexFlags} -injars $in --output $outDir ` +
|
||||
`${config.R8Wrapper}${config.R8Cmd} ${config.DexFlags} -injars $in --output $outDir ` +
|
||||
`--force-proguard-compatibility ` +
|
||||
`--no-data-resources ` +
|
||||
`-printmapping $outDict ` +
|
||||
|
|
|
@ -26,7 +26,7 @@ import (
|
|||
"github.com/google/blueprint"
|
||||
)
|
||||
|
||||
var kotlinc = pctx.AndroidRemoteStaticRule("kotlinc", android.SUPPORTS_GOMA,
|
||||
var kotlinc = pctx.AndroidRemoteStaticRule("kotlinc", android.RemoteRuleSupports{Goma: true},
|
||||
blueprint.RuleParams{
|
||||
Command: `rm -rf "$classesDir" "$srcJarDir" "$kotlinBuildFile" "$emptyDir" && ` +
|
||||
`mkdir -p "$classesDir" "$srcJarDir" "$emptyDir" && ` +
|
||||
|
@ -88,7 +88,7 @@ func kotlinCompile(ctx android.ModuleContext, outputFile android.WritablePath,
|
|||
})
|
||||
}
|
||||
|
||||
var kapt = pctx.AndroidRemoteStaticRule("kapt", android.SUPPORTS_GOMA,
|
||||
var kapt = pctx.AndroidRemoteStaticRule("kapt", android.RemoteRuleSupports{Goma: true},
|
||||
blueprint.RuleParams{
|
||||
Command: `rm -rf "$srcJarDir" "$kotlinBuildFile" "$kaptDir" && mkdir -p "$srcJarDir" "$kaptDir" && ` +
|
||||
`${config.ZipSyncCmd} -d $srcJarDir -l $srcJarDir/list -f "*.java" $srcJars && ` +
|
||||
|
|
|
@ -787,6 +787,48 @@ func (c *configImpl) UseRBE() bool {
|
|||
return false
|
||||
}
|
||||
|
||||
func (c *configImpl) UseRBEJAVAC() bool {
|
||||
if !c.UseRBE() {
|
||||
return false
|
||||
}
|
||||
|
||||
if v, ok := c.environ.Get("RBE_JAVAC"); ok {
|
||||
v = strings.TrimSpace(v)
|
||||
if v != "" && v != "false" {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func (c *configImpl) UseRBER8() bool {
|
||||
if !c.UseRBE() {
|
||||
return false
|
||||
}
|
||||
|
||||
if v, ok := c.environ.Get("RBE_R8"); ok {
|
||||
v = strings.TrimSpace(v)
|
||||
if v != "" && v != "false" {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func (c *configImpl) UseRBED8() bool {
|
||||
if !c.UseRBE() {
|
||||
return false
|
||||
}
|
||||
|
||||
if v, ok := c.environ.Get("RBE_D8"); ok {
|
||||
v = strings.TrimSpace(v)
|
||||
if v != "" && v != "false" {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func (c *configImpl) StartRBE() bool {
|
||||
if !c.UseRBE() {
|
||||
return false
|
||||
|
|
|
@ -191,6 +191,8 @@ func runMakeProductConfig(ctx Context, config Config) {
|
|||
"CC_WRAPPER",
|
||||
"CXX_WRAPPER",
|
||||
"JAVAC_WRAPPER",
|
||||
"R8_WRAPPER",
|
||||
"D8_WRAPPER",
|
||||
|
||||
// ccache settings
|
||||
"CCACHE_COMPILERCHECK",
|
||||
|
|
Loading…
Reference in New Issue