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)
|
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 {
|
func (c *config) UseRemoteBuild() bool {
|
||||||
return c.UseGoma() || c.UseRBE()
|
return c.UseGoma() || c.UseRBE()
|
||||||
}
|
}
|
||||||
|
|
|
@ -232,16 +232,32 @@ func (p PackageContext) StaticRule(name string, params blueprint.RuleParams,
|
||||||
}, argNames...)
|
}, argNames...)
|
||||||
}
|
}
|
||||||
|
|
||||||
// RemoteRuleSupports selects if a AndroidRemoteStaticRule supports goma, RBE, or both.
|
// RBEExperimentalFlag indicates which flag should be set for the AndroidRemoteStaticRule
|
||||||
type RemoteRuleSupports int
|
// to use RBE.
|
||||||
|
type RBEExperimentalFlag int
|
||||||
|
|
||||||
const (
|
const (
|
||||||
SUPPORTS_NONE = 0
|
// RBE_NOT_EXPERIMENTAL indicates the rule should use RBE in every build that has
|
||||||
SUPPORTS_GOMA = 1 << iota
|
// UseRBE set.
|
||||||
SUPPORTS_RBE = 1 << iota
|
RBE_NOT_EXPERIMENTAL RBEExperimentalFlag = iota
|
||||||
SUPPORTS_BOTH = SUPPORTS_GOMA | SUPPORTS_RBE
|
// 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
|
// AndroidRemoteStaticRule wraps blueprint.StaticRule but uses goma or RBE's parallelism if goma or RBE are enabled
|
||||||
// and the appropriate SUPPORTS_* flag is set.
|
// and the appropriate SUPPORTS_* flag is set.
|
||||||
func (p PackageContext) AndroidRemoteStaticRule(name string, supports RemoteRuleSupports, params blueprint.RuleParams,
|
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) {
|
return p.PackageContext.RuleFunc(name, func(config interface{}) (blueprint.RuleParams, error) {
|
||||||
ctx := &configErrorWrapper{p, config.(Config), nil}
|
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
|
// When USE_GOMA=true is set and the rule is not supported by goma, restrict jobs to the
|
||||||
// local parallelism value
|
// local parallelism value
|
||||||
params.Pool = localPool
|
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
|
// When USE_RBE=true is set and the rule is not supported by RBE, restrict jobs to the
|
||||||
// local parallelism value
|
// local parallelism value
|
||||||
params.Pool = localPool
|
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
|
return params, nil
|
||||||
}, argNames...)
|
}, argNames...)
|
||||||
}
|
}
|
||||||
|
|
|
@ -417,10 +417,10 @@ func (r *RuleBuilder) Build(pctx PackageContext, ctx BuilderContext, name string
|
||||||
}
|
}
|
||||||
|
|
||||||
var pool blueprint.Pool
|
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.
|
// 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 {
|
} else if ctx.Config().UseRBE() && r.remoteable.RBE {
|
||||||
// When USE_GOMA=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, allow jobs to run outside the local pool.
|
||||||
} else if r.highmem {
|
} else if r.highmem {
|
||||||
pool = highmemPool
|
pool = highmemPool
|
||||||
} else if ctx.Config().UseRemoteBuild() {
|
} else if ctx.Config().UseRemoteBuild() {
|
||||||
|
|
|
@ -204,6 +204,9 @@ type productVariables struct {
|
||||||
Binder32bit *bool `json:",omitempty"`
|
Binder32bit *bool `json:",omitempty"`
|
||||||
UseGoma *bool `json:",omitempty"`
|
UseGoma *bool `json:",omitempty"`
|
||||||
UseRBE *bool `json:",omitempty"`
|
UseRBE *bool `json:",omitempty"`
|
||||||
|
UseRBEJAVAC *bool `json:",omitempty"`
|
||||||
|
UseRBER8 *bool `json:",omitempty"`
|
||||||
|
UseRBED8 *bool `json:",omitempty"`
|
||||||
Debuggable *bool `json:",omitempty"`
|
Debuggable *bool `json:",omitempty"`
|
||||||
Eng *bool `json:",omitempty"`
|
Eng *bool `json:",omitempty"`
|
||||||
Treble_linker_namespaces *bool `json:",omitempty"`
|
Treble_linker_namespaces *bool `json:",omitempty"`
|
||||||
|
|
|
@ -33,7 +33,7 @@ func init() {
|
||||||
var (
|
var (
|
||||||
pctx = android.NewPackageContext("android/soong/bpf")
|
pctx = android.NewPackageContext("android/soong/bpf")
|
||||||
|
|
||||||
ccRule = pctx.AndroidRemoteStaticRule("ccRule", android.SUPPORTS_GOMA,
|
ccRule = pctx.AndroidRemoteStaticRule("ccRule", android.RemoteRuleSupports{Goma: true},
|
||||||
blueprint.RuleParams{
|
blueprint.RuleParams{
|
||||||
Depfile: "${out}.d",
|
Depfile: "${out}.d",
|
||||||
Deps: blueprint.DepsGCC,
|
Deps: blueprint.DepsGCC,
|
||||||
|
|
|
@ -46,7 +46,7 @@ var (
|
||||||
var (
|
var (
|
||||||
pctx = android.NewPackageContext("android/soong/cc")
|
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{
|
blueprint.RuleParams{
|
||||||
Depfile: "${out}.d",
|
Depfile: "${out}.d",
|
||||||
Deps: blueprint.DepsGCC,
|
Deps: blueprint.DepsGCC,
|
||||||
|
@ -55,7 +55,7 @@ var (
|
||||||
},
|
},
|
||||||
"ccCmd", "cFlags")
|
"ccCmd", "cFlags")
|
||||||
|
|
||||||
ccNoDeps = pctx.AndroidRemoteStaticRule("ccNoDeps", android.SUPPORTS_GOMA,
|
ccNoDeps = pctx.AndroidRemoteStaticRule("ccNoDeps", android.RemoteRuleSupports{Goma: true},
|
||||||
blueprint.RuleParams{
|
blueprint.RuleParams{
|
||||||
Command: "$relPwd ${config.CcWrapper}$ccCmd -c $cFlags -o $out $in",
|
Command: "$relPwd ${config.CcWrapper}$ccCmd -c $cFlags -o $out $in",
|
||||||
CommandDeps: []string{"$ccCmd"},
|
CommandDeps: []string{"$ccCmd"},
|
||||||
|
|
|
@ -38,7 +38,7 @@ var (
|
||||||
// this, all java rules write into separate directories and then are combined into a .jar file
|
// 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).
|
// (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.
|
// .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{
|
blueprint.RuleParams{
|
||||||
Command: `rm -rf "$outDir" "$annoDir" "$srcJarDir" && mkdir -p "$outDir" "$annoDir" "$srcJarDir" && ` +
|
Command: `rm -rf "$outDir" "$annoDir" "$srcJarDir" && mkdir -p "$outDir" "$annoDir" "$srcJarDir" && ` +
|
||||||
`${config.ZipSyncCmd} -d $srcJarDir -l $srcJarDir/list -f "*.java" $srcJars && ` +
|
`${config.ZipSyncCmd} -d $srcJarDir -l $srcJarDir/list -f "*.java" $srcJars && ` +
|
||||||
|
|
|
@ -148,6 +148,20 @@ func init() {
|
||||||
return ""
|
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.HostJavaToolVariable("JacocoCLIJar", "jacoco-cli.jar")
|
||||||
|
|
||||||
pctx.HostBinToolVariable("ManifestCheckCmd", "manifest_check")
|
pctx.HostBinToolVariable("ManifestCheckCmd", "manifest_check")
|
||||||
|
|
|
@ -22,10 +22,10 @@ import (
|
||||||
"android/soong/android"
|
"android/soong/android"
|
||||||
)
|
)
|
||||||
|
|
||||||
var d8 = pctx.AndroidStaticRule("d8",
|
var d8 = pctx.AndroidRemoteStaticRule("d8", android.RemoteRuleSupports{RBE: true, RBEFlag: android.RBE_D8},
|
||||||
blueprint.RuleParams{
|
blueprint.RuleParams{
|
||||||
Command: `rm -rf "$outDir" && mkdir -p "$outDir" && ` +
|
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.SoongZipCmd} $zipFlags -o $outDir/classes.dex.jar -C $outDir -f "$outDir/classes*.dex" && ` +
|
||||||
`${config.MergeZipsCmd} -D -stripFile "**/*.class" $out $outDir/classes.dex.jar $in`,
|
`${config.MergeZipsCmd} -D -stripFile "**/*.class" $out $outDir/classes.dex.jar $in`,
|
||||||
CommandDeps: []string{
|
CommandDeps: []string{
|
||||||
|
@ -36,11 +36,11 @@ var d8 = pctx.AndroidStaticRule("d8",
|
||||||
},
|
},
|
||||||
"outDir", "d8Flags", "zipFlags")
|
"outDir", "d8Flags", "zipFlags")
|
||||||
|
|
||||||
var r8 = pctx.AndroidStaticRule("r8",
|
var r8 = pctx.AndroidRemoteStaticRule("r8", android.RemoteRuleSupports{RBE: true, RBEFlag: android.RBE_R8},
|
||||||
blueprint.RuleParams{
|
blueprint.RuleParams{
|
||||||
Command: `rm -rf "$outDir" && mkdir -p "$outDir" && ` +
|
Command: `rm -rf "$outDir" && mkdir -p "$outDir" && ` +
|
||||||
`rm -f "$outDict" && ` +
|
`rm -f "$outDict" && ` +
|
||||||
`${config.R8Cmd} ${config.DexFlags} -injars $in --output $outDir ` +
|
`${config.R8Wrapper}${config.R8Cmd} ${config.DexFlags} -injars $in --output $outDir ` +
|
||||||
`--force-proguard-compatibility ` +
|
`--force-proguard-compatibility ` +
|
||||||
`--no-data-resources ` +
|
`--no-data-resources ` +
|
||||||
`-printmapping $outDict ` +
|
`-printmapping $outDict ` +
|
||||||
|
|
|
@ -26,7 +26,7 @@ import (
|
||||||
"github.com/google/blueprint"
|
"github.com/google/blueprint"
|
||||||
)
|
)
|
||||||
|
|
||||||
var kotlinc = pctx.AndroidRemoteStaticRule("kotlinc", android.SUPPORTS_GOMA,
|
var kotlinc = pctx.AndroidRemoteStaticRule("kotlinc", android.RemoteRuleSupports{Goma: true},
|
||||||
blueprint.RuleParams{
|
blueprint.RuleParams{
|
||||||
Command: `rm -rf "$classesDir" "$srcJarDir" "$kotlinBuildFile" "$emptyDir" && ` +
|
Command: `rm -rf "$classesDir" "$srcJarDir" "$kotlinBuildFile" "$emptyDir" && ` +
|
||||||
`mkdir -p "$classesDir" "$srcJarDir" "$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{
|
blueprint.RuleParams{
|
||||||
Command: `rm -rf "$srcJarDir" "$kotlinBuildFile" "$kaptDir" && mkdir -p "$srcJarDir" "$kaptDir" && ` +
|
Command: `rm -rf "$srcJarDir" "$kotlinBuildFile" "$kaptDir" && mkdir -p "$srcJarDir" "$kaptDir" && ` +
|
||||||
`${config.ZipSyncCmd} -d $srcJarDir -l $srcJarDir/list -f "*.java" $srcJars && ` +
|
`${config.ZipSyncCmd} -d $srcJarDir -l $srcJarDir/list -f "*.java" $srcJars && ` +
|
||||||
|
|
|
@ -787,6 +787,48 @@ func (c *configImpl) UseRBE() bool {
|
||||||
return false
|
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 {
|
func (c *configImpl) StartRBE() bool {
|
||||||
if !c.UseRBE() {
|
if !c.UseRBE() {
|
||||||
return false
|
return false
|
||||||
|
|
|
@ -191,6 +191,8 @@ func runMakeProductConfig(ctx Context, config Config) {
|
||||||
"CC_WRAPPER",
|
"CC_WRAPPER",
|
||||||
"CXX_WRAPPER",
|
"CXX_WRAPPER",
|
||||||
"JAVAC_WRAPPER",
|
"JAVAC_WRAPPER",
|
||||||
|
"R8_WRAPPER",
|
||||||
|
"D8_WRAPPER",
|
||||||
|
|
||||||
// ccache settings
|
// ccache settings
|
||||||
"CCACHE_COMPILERCHECK",
|
"CCACHE_COMPILERCHECK",
|
||||||
|
|
Loading…
Reference in New Issue