summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author LaMont Jones <lamontjones@google.com> 2025-03-05 11:57:40 -0800
committer LaMont Jones <lamontjones@google.com> 2025-03-05 15:58:37 -0800
commitec1b7fa91efbe6026a73e9e3782a1f5264b8fc7e (patch)
tree1eff63b96828b2c13a00d06b202c23268ce2c73a
parent7c459e518761d4f43517548ccd6f37f5e042ad59 (diff)
More partial compile optimizations
Add "disable_stub_validation" and "disable_api_lint" Bug: b/394154271 Bug: b/396345437 Test: manual Change-Id: I1dc2b52bb3bfc3275287c99dbc679290bfeece35
-rw-r--r--android/config.go40
-rw-r--r--android/config_test.go32
-rw-r--r--java/droiddoc.go3
-rw-r--r--java/droidstubs.go2
-rw-r--r--java/java.go1
5 files changed, 63 insertions, 15 deletions
diff --git a/android/config.go b/android/config.go
index 696e7727f..9ccd09990 100644
--- a/android/config.go
+++ b/android/config.go
@@ -385,24 +385,28 @@ type config struct {
}
type partialCompileFlags struct {
- // Is partial compilation enabled at all?
- Enabled bool
-
// Whether to use d8 instead of r8
Use_d8 bool
+ // Whether to disable stub validation. This is slightly more surgical
+ // than DISABLE_STUB_VALIDATION, in that it only applies to partial
+ // compile builds.
+ Disable_stub_validation bool
+
+ // Whether to disable api lint.
+ Disable_api_lint bool
+
// Add others as needed.
}
// These are the flags when `SOONG_PARTIAL_COMPILE` is empty or not set.
-var defaultPartialCompileFlags = partialCompileFlags{
- Enabled: false,
-}
+var defaultPartialCompileFlags = partialCompileFlags{}
// These are the flags when `SOONG_PARTIAL_COMPILE=true`.
var enabledPartialCompileFlags = partialCompileFlags{
- Enabled: true,
- Use_d8: true,
+ Use_d8: true,
+ Disable_stub_validation: false,
+ Disable_api_lint: false,
}
type deviceConfig struct {
@@ -477,13 +481,29 @@ func (c *config) parsePartialCompileFlags(isEngBuild bool) (partialCompileFlags,
state = "+"
}
switch tok {
+ case "all":
+ // Turn on **all** of the flags.
+ ret = partialCompileFlags{
+ Use_d8: true,
+ Disable_stub_validation: true,
+ Disable_api_lint: true,
+ }
case "true":
ret = enabledPartialCompileFlags
case "false":
// Set everything to false.
ret = partialCompileFlags{}
- case "enabled":
- ret.Enabled = makeVal(state, defaultPartialCompileFlags.Enabled)
+
+ case "api_lint", "enable_api_lint":
+ ret.Disable_api_lint = !makeVal(state, !defaultPartialCompileFlags.Disable_api_lint)
+ case "disable_api_lint":
+ ret.Disable_api_lint = makeVal(state, defaultPartialCompileFlags.Disable_api_lint)
+
+ case "stub_validation", "enable_stub_validation":
+ ret.Disable_stub_validation = !makeVal(state, !defaultPartialCompileFlags.Disable_stub_validation)
+ case "disable_stub_validation":
+ ret.Disable_stub_validation = makeVal(state, defaultPartialCompileFlags.Disable_stub_validation)
+
case "use_d8":
ret.Use_d8 = makeVal(state, defaultPartialCompileFlags.Use_d8)
default:
diff --git a/android/config_test.go b/android/config_test.go
index 3d8686041..d1b26c12a 100644
--- a/android/config_test.go
+++ b/android/config_test.go
@@ -213,13 +213,18 @@ func TestConfiguredJarList(t *testing.T) {
})
}
-func (p partialCompileFlags) updateEnabled(value bool) partialCompileFlags {
- p.Enabled = value
+func (p partialCompileFlags) updateUseD8(value bool) partialCompileFlags {
+ p.Use_d8 = value
return p
}
-func (p partialCompileFlags) updateUseD8(value bool) partialCompileFlags {
- p.Use_d8 = value
+func (p partialCompileFlags) updateDisableApiLint(value bool) partialCompileFlags {
+ p.Disable_api_lint = value
+ return p
+}
+
+func (p partialCompileFlags) updateDisableStubValidation(value bool) partialCompileFlags {
+ p.Disable_stub_validation = value
return p
}
@@ -241,10 +246,29 @@ func TestPartialCompile(t *testing.T) {
{"false", true, partialCompileFlags{}},
{"true", true, enabledPartialCompileFlags},
{"true", false, partialCompileFlags{}},
+ {"all", true, partialCompileFlags{}.updateUseD8(true).updateDisableApiLint(true).updateDisableStubValidation(true)},
+
+ // This verifies both use_d8 and the processing order.
{"true,use_d8", true, enabledPartialCompileFlags.updateUseD8(true)},
{"true,-use_d8", true, enabledPartialCompileFlags.updateUseD8(false)},
{"use_d8,false", true, partialCompileFlags{}},
{"false,+use_d8", true, partialCompileFlags{}.updateUseD8(true)},
+
+ // disable_api_lint can be specified with any of 3 options.
+ {"false,-api_lint", true, partialCompileFlags{}.updateDisableApiLint(true)},
+ {"false,-enable_api_lint", true, partialCompileFlags{}.updateDisableApiLint(true)},
+ {"false,+disable_api_lint", true, partialCompileFlags{}.updateDisableApiLint(true)},
+ {"false,+api_lint", true, partialCompileFlags{}.updateDisableApiLint(false)},
+ {"false,+enable_api_lint", true, partialCompileFlags{}.updateDisableApiLint(false)},
+ {"false,-disable_api_lint", true, partialCompileFlags{}.updateDisableApiLint(false)},
+
+ // disable_stub_validation can be specified with any of 3 options.
+ {"false,-stub_validation", true, partialCompileFlags{}.updateDisableStubValidation(true)},
+ {"false,-enable_stub_validation", true, partialCompileFlags{}.updateDisableStubValidation(true)},
+ {"false,+disable_stub_validation", true, partialCompileFlags{}.updateDisableStubValidation(true)},
+ {"false,+stub_validation", true, partialCompileFlags{}.updateDisableStubValidation(false)},
+ {"false,+enable_stub_validation", true, partialCompileFlags{}.updateDisableStubValidation(false)},
+ {"false,-disable_stub_validation", true, partialCompileFlags{}.updateDisableStubValidation(false)},
}
for _, test := range tests {
diff --git a/java/droiddoc.go b/java/droiddoc.go
index 225f201a9..3faf294de 100644
--- a/java/droiddoc.go
+++ b/java/droiddoc.go
@@ -195,6 +195,9 @@ func apiCheckEnabled(ctx android.ModuleContext, apiToCheck ApiToCheck, apiVersio
"them instead.")
}
return false
+ } else if ctx.Config().PartialCompileFlags().Disable_stub_validation &&
+ !ctx.Config().BuildFromTextStub() {
+ return false
} else if String(apiToCheck.Api_file) != "" && String(apiToCheck.Removed_api_file) != "" {
return true
} else if String(apiToCheck.Api_file) != "" {
diff --git a/java/droidstubs.go b/java/droidstubs.go
index caad6883e..150129fbc 100644
--- a/java/droidstubs.go
+++ b/java/droidstubs.go
@@ -1245,7 +1245,7 @@ func (d *Droidstubs) GenerateAndroidBuildActions(ctx android.ModuleContext) {
// Add options for the other optional tasks: API-lint and check-released.
// We generate separate timestamp files for them.
- doApiLint := BoolDefault(d.properties.Check_api.Api_lint.Enabled, false)
+ doApiLint := BoolDefault(d.properties.Check_api.Api_lint.Enabled, false) && !ctx.Config().PartialCompileFlags().Disable_api_lint
doCheckReleased := apiCheckEnabled(ctx, d.properties.Check_api.Last_released, "last_released")
writeSdkValues := Bool(d.properties.Write_sdk_values)
diff --git a/java/java.go b/java/java.go
index c1e4f8ca0..215fbbda8 100644
--- a/java/java.go
+++ b/java/java.go
@@ -2530,6 +2530,7 @@ func (al *ApiLibrary) DepsMutator(ctx android.BottomUpMutatorContext) {
apiContributions := al.properties.Api_contributions
addValidations := !ctx.Config().IsEnvTrue("DISABLE_STUB_VALIDATION") &&
!ctx.Config().IsEnvTrue("WITHOUT_CHECK_API") &&
+ !ctx.Config().PartialCompileFlags().Disable_stub_validation &&
proptools.BoolDefault(al.properties.Enable_validation, true)
for _, apiContributionName := range apiContributions {
ctx.AddDependency(ctx.Module(), javaApiContributionTag, apiContributionName)