Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5cde33dd authored by Ramy Medhat's avatar Ramy Medhat Committed by Automerger Merge Worker
Browse files

[DO NOT MERGE] Add support for experimentally enabling RBE support on specific...

[DO NOT MERGE] Add support for experimentally enabling RBE support on specific rules. am: 4807a1b5

Original change: https://googleplex-android-review.googlesource.com/c/platform/build/soong/+/12467707

Change-Id: I5c7f99e0686c3b90c5c0168ff2173cceee7592e2
parents 06e62639 4807a1b5
Loading
Loading
Loading
Loading
+16 −0
Original line number Diff line number Diff line
@@ -718,6 +718,22 @@ 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()
}

func (c *config) RunErrorProne() bool {
	return c.IsEnvTrue("RUN_ERROR_PRONE")
}
+36 −8
Original line number Diff line number Diff line
@@ -254,16 +254,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,
@@ -271,18 +287,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...)
}
+3 −0
Original line number Diff line number Diff line
@@ -193,6 +193,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"`
+1 −1
Original line number Diff line number Diff line
@@ -33,7 +33,7 @@ func init() {
var (
	pctx = android.NewPackageContext("android/soong/bpf")

	cc = pctx.AndroidRemoteStaticRule("cc", android.SUPPORTS_GOMA,
	cc = pctx.AndroidRemoteStaticRule("cc", android.RemoteRuleSupports{Goma: true},
		blueprint.RuleParams{
			Depfile:     "${out}.d",
			Deps:        blueprint.DepsGCC,
+2 −2
Original line number Diff line number Diff line
@@ -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"},
Loading