diff --git a/android/config.go b/android/config.go index 33877066c..ae2775bd3 100644 --- a/android/config.go +++ b/android/config.go @@ -722,7 +722,7 @@ func (c *config) AllowMissingDependencies() bool { return Bool(c.productVariables.Allow_missing_dependencies) } -// Returns true if building without full platform sources. +// Returns true if a full platform source tree cannot be assumed. func (c *config) UnbundledBuild() bool { return Bool(c.productVariables.Unbundled_build) } @@ -733,8 +733,9 @@ func (c *config) UnbundledBuildApps() bool { return Bool(c.productVariables.Unbundled_build_apps) } -func (c *config) UnbundledBuildUsePrebuiltSdks() bool { - return Bool(c.productVariables.Unbundled_build) && !Bool(c.productVariables.Unbundled_build_sdks_from_source) +// Returns true if building modules against prebuilt SDKs. +func (c *config) AlwaysUsePrebuiltSdks() bool { + return Bool(c.productVariables.Always_use_prebuilt_sdks) } func (c *config) Fuchsia() bool { diff --git a/android/variable.go b/android/variable.go index c1e1b42be..b43675b1e 100644 --- a/android/variable.go +++ b/android/variable.go @@ -214,30 +214,30 @@ type productVariables struct { AppsDefaultVersionName *string `json:",omitempty"` - Allow_missing_dependencies *bool `json:",omitempty"` - Unbundled_build *bool `json:",omitempty"` - Unbundled_build_apps *bool `json:",omitempty"` - Unbundled_build_sdks_from_source *bool `json:",omitempty"` - Malloc_not_svelte *bool `json:",omitempty"` - Malloc_zero_contents *bool `json:",omitempty"` - Malloc_pattern_fill_contents *bool `json:",omitempty"` - Safestack *bool `json:",omitempty"` - HostStaticBinaries *bool `json:",omitempty"` - 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"` - Enforce_vintf_manifest *bool `json:",omitempty"` - Pdk *bool `json:",omitempty"` - Uml *bool `json:",omitempty"` - Use_lmkd_stats_log *bool `json:",omitempty"` - Arc *bool `json:",omitempty"` - MinimizeJavaDebugInfo *bool `json:",omitempty"` + Allow_missing_dependencies *bool `json:",omitempty"` + Unbundled_build *bool `json:",omitempty"` + Unbundled_build_apps *bool `json:",omitempty"` + Always_use_prebuilt_sdks *bool `json:",omitempty"` + Malloc_not_svelte *bool `json:",omitempty"` + Malloc_zero_contents *bool `json:",omitempty"` + Malloc_pattern_fill_contents *bool `json:",omitempty"` + Safestack *bool `json:",omitempty"` + HostStaticBinaries *bool `json:",omitempty"` + 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"` + Enforce_vintf_manifest *bool `json:",omitempty"` + Pdk *bool `json:",omitempty"` + Uml *bool `json:",omitempty"` + Use_lmkd_stats_log *bool `json:",omitempty"` + Arc *bool `json:",omitempty"` + MinimizeJavaDebugInfo *bool `json:",omitempty"` Check_elf_files *bool `json:",omitempty"` diff --git a/cc/rs.go b/cc/rs.go index 9149e1767..de3e64b3d 100644 --- a/cc/rs.go +++ b/cc/rs.go @@ -25,7 +25,7 @@ import ( func init() { pctx.VariableFunc("rsCmd", func(ctx android.PackageVarContext) string { - if ctx.Config().UnbundledBuild() { + if ctx.Config().AlwaysUsePrebuiltSdks() { // Use RenderScript prebuilts for unbundled builds but not PDK builds return filepath.Join("prebuilts/sdk/tools", runtime.GOOS, "bin/llvm-rs-cc") } else { diff --git a/java/aar.go b/java/aar.go index ad9b5e7d2..203de9bc4 100644 --- a/java/aar.go +++ b/java/aar.go @@ -625,7 +625,7 @@ func (a *AARImport) JacocoReportClassesFile() android.Path { } func (a *AARImport) DepsMutator(ctx android.BottomUpMutatorContext) { - if !ctx.Config().UnbundledBuildUsePrebuiltSdks() { + if !ctx.Config().AlwaysUsePrebuiltSdks() { sdkDep := decodeSdkDep(ctx, sdkContext(a)) if sdkDep.useModule && sdkDep.frameworkResModule != "" { ctx.AddVariationDependencies(nil, frameworkResTag, sdkDep.frameworkResModule) diff --git a/java/app_test.go b/java/app_test.go index efb4fd2a6..f50aa3a52 100644 --- a/java/app_test.go +++ b/java/app_test.go @@ -2866,6 +2866,7 @@ func TestUncompressDex(t *testing.T) { config := testAppConfig(nil, bp, nil) if unbundled { config.TestProductVariables.Unbundled_build = proptools.BoolPtr(true) + config.TestProductVariables.Always_use_prebuilt_sdks = proptools.BoolPtr(true) } ctx := testContext() diff --git a/java/config/config.go b/java/config/config.go index d2f451302..d0296ff90 100644 --- a/java/config/config.go +++ b/java/config/config.go @@ -128,7 +128,7 @@ func init() { pctx.HostBinToolVariable("ExtractApksCmd", "extract_apks") pctx.VariableFunc("TurbineJar", func(ctx android.PackageVarContext) string { turbine := "turbine.jar" - if ctx.Config().UnbundledBuild() { + if ctx.Config().AlwaysUsePrebuiltSdks() { return "prebuilts/build-tools/common/framework/" + turbine } else { return ctx.Config().HostJavaToolPath(ctx, turbine).String() @@ -178,7 +178,7 @@ func init() { func hostBinToolVariableWithSdkToolsPrebuilt(name, tool string) { pctx.VariableFunc(name, func(ctx android.PackageVarContext) string { - if ctx.Config().UnbundledBuild() || ctx.Config().IsPdkBuild() { + if ctx.Config().AlwaysUsePrebuiltSdks() || ctx.Config().IsPdkBuild() { return filepath.Join("prebuilts/sdk/tools", runtime.GOOS, "bin", tool) } else { return ctx.Config().HostToolPath(ctx, tool).String() @@ -188,7 +188,7 @@ func hostBinToolVariableWithSdkToolsPrebuilt(name, tool string) { func hostJavaToolVariableWithSdkToolsPrebuilt(name, tool string) { pctx.VariableFunc(name, func(ctx android.PackageVarContext) string { - if ctx.Config().UnbundledBuild() || ctx.Config().IsPdkBuild() { + if ctx.Config().AlwaysUsePrebuiltSdks() || ctx.Config().IsPdkBuild() { return filepath.Join("prebuilts/sdk/tools/lib", tool+".jar") } else { return ctx.Config().HostJavaToolPath(ctx, tool+".jar").String() @@ -198,7 +198,7 @@ func hostJavaToolVariableWithSdkToolsPrebuilt(name, tool string) { func hostJNIToolVariableWithSdkToolsPrebuilt(name, tool string) { pctx.VariableFunc(name, func(ctx android.PackageVarContext) string { - if ctx.Config().UnbundledBuild() || ctx.Config().IsPdkBuild() { + if ctx.Config().AlwaysUsePrebuiltSdks() || ctx.Config().IsPdkBuild() { ext := ".so" if runtime.GOOS == "darwin" { ext = ".dylib" @@ -212,7 +212,7 @@ func hostJNIToolVariableWithSdkToolsPrebuilt(name, tool string) { func hostBinToolVariableWithBuildToolsPrebuilt(name, tool string) { pctx.VariableFunc(name, func(ctx android.PackageVarContext) string { - if ctx.Config().UnbundledBuild() || ctx.Config().IsPdkBuild() { + if ctx.Config().AlwaysUsePrebuiltSdks() || ctx.Config().IsPdkBuild() { return filepath.Join("prebuilts/build-tools", ctx.Config().PrebuiltOS(), "bin", tool) } else { return ctx.Config().HostToolPath(ctx, tool).String() diff --git a/java/hiddenapi_singleton.go b/java/hiddenapi_singleton.go index 7afba2a79..0a330ebad 100644 --- a/java/hiddenapi_singleton.go +++ b/java/hiddenapi_singleton.go @@ -100,7 +100,7 @@ func stubFlagsRule(ctx android.SingletonContext) { // Add the android.test.base to the set of stubs only if the android.test.base module is on // the boot jars list as the runtime will only enforce hiddenapi access against modules on // that list. - if inList("android.test.base", ctx.Config().BootJars()) && !ctx.Config().UnbundledBuildUsePrebuiltSdks() { + if inList("android.test.base", ctx.Config().BootJars()) && !ctx.Config().AlwaysUsePrebuiltSdks() { publicStubModules = append(publicStubModules, "android.test.base.stubs") } diff --git a/java/lint.go b/java/lint.go index 1bf7f69fd..f2091db7b 100644 --- a/java/lint.go +++ b/java/lint.go @@ -309,7 +309,7 @@ func (l *linter) lint(ctx android.ModuleContext) { rule.Command().Text("mkdir -p").Flag(cacheDir.String()).Flag(homeDir.String()) var annotationsZipPath, apiVersionsXMLPath android.Path - if ctx.Config().UnbundledBuildUsePrebuiltSdks() { + if ctx.Config().AlwaysUsePrebuiltSdks() { annotationsZipPath = android.PathForSource(ctx, "prebuilts/sdk/current/public/data/annotations.zip") apiVersionsXMLPath = android.PathForSource(ctx, "prebuilts/sdk/current/public/data/api-versions.xml") } else { @@ -395,7 +395,7 @@ func (l *lintSingleton) GenerateBuildActions(ctx android.SingletonContext) { } func (l *lintSingleton) copyLintDependencies(ctx android.SingletonContext) { - if ctx.Config().UnbundledBuildUsePrebuiltSdks() { + if ctx.Config().AlwaysUsePrebuiltSdks() { return } diff --git a/java/robolectric.go b/java/robolectric.go index 4d68fd9c8..3fe6626bb 100644 --- a/java/robolectric.go +++ b/java/robolectric.go @@ -357,7 +357,7 @@ func (r *robolectricRuntimes) TestSuites() []string { var _ android.TestSuiteModule = (*robolectricRuntimes)(nil) func (r *robolectricRuntimes) DepsMutator(ctx android.BottomUpMutatorContext) { - if !ctx.Config().UnbundledBuildUsePrebuiltSdks() && r.props.Lib != nil { + if !ctx.Config().AlwaysUsePrebuiltSdks() && r.props.Lib != nil { ctx.AddVariationDependencies(nil, libTag, String(r.props.Lib)) } } @@ -371,8 +371,16 @@ func (r *robolectricRuntimes) GenerateAndroidBuildActions(ctx android.ModuleCont r.runtimes = append(r.runtimes, installedRuntime) } - if !ctx.Config().UnbundledBuildUsePrebuiltSdks() && r.props.Lib != nil { + if !ctx.Config().AlwaysUsePrebuiltSdks() && r.props.Lib != nil { runtimeFromSourceModule := ctx.GetDirectDepWithTag(String(r.props.Lib), libTag) + if runtimeFromSourceModule == nil { + if ctx.Config().AllowMissingDependencies() { + ctx.AddMissingDependencies([]string{String(r.props.Lib)}) + } else { + ctx.PropertyErrorf("lib", "missing dependency %q", String(r.props.Lib)) + } + return + } runtimeFromSourceJar := android.OutputFileForModule(ctx, runtimeFromSourceModule, "") runtimeName := fmt.Sprintf("android-all-%s-robolectric-r0.jar", diff --git a/java/sdk.go b/java/sdk.go index 5d79d1d85..fa4c05364 100644 --- a/java/sdk.go +++ b/java/sdk.go @@ -53,7 +53,7 @@ type sdkContext interface { func UseApiFingerprint(ctx android.BaseModuleContext) bool { if ctx.Config().UnbundledBuild() && - !ctx.Config().UnbundledBuildUsePrebuiltSdks() && + !ctx.Config().AlwaysUsePrebuiltSdks() && ctx.Config().IsEnvTrue("UNBUNDLED_BUILD_TARGET_SDK_WITH_API_FINGERPRINT") { return true } @@ -212,7 +212,7 @@ func (s sdkSpec) forPdkBuild(ctx android.EarlyModuleContext) sdkSpec { func (s sdkSpec) usePrebuilt(ctx android.EarlyModuleContext) bool { if s.version.isCurrent() { // "current" can be built from source and be from prebuilt SDK - return ctx.Config().UnbundledBuildUsePrebuiltSdks() + return ctx.Config().AlwaysUsePrebuiltSdks() } else if s.version.isNumbered() { // validation check if s.kind != sdkPublic && s.kind != sdkSystem && s.kind != sdkTest { @@ -511,7 +511,7 @@ func sdkSingletonFactory() android.Singleton { type sdkSingleton struct{} func (sdkSingleton) GenerateBuildActions(ctx android.SingletonContext) { - if ctx.Config().UnbundledBuildUsePrebuiltSdks() || ctx.Config().IsPdkBuild() { + if ctx.Config().AlwaysUsePrebuiltSdks() || ctx.Config().IsPdkBuild() { return } @@ -634,7 +634,7 @@ func createAPIFingerprint(ctx android.SingletonContext) { } else if ctx.Config().IsPdkBuild() { // TODO: get this from the PDK artifacts? cmd.Text("echo PDK >").Output(out) - } else if !ctx.Config().UnbundledBuildUsePrebuiltSdks() { + } else if !ctx.Config().AlwaysUsePrebuiltSdks() { in, err := ctx.GlobWithDeps("frameworks/base/api/*current.txt", nil) if err != nil { ctx.Errorf("error globbing API files: %s", err) @@ -663,7 +663,7 @@ func ApiFingerprintPath(ctx android.PathContext) android.OutputPath { } func sdkMakeVars(ctx android.MakeVarsContext) { - if ctx.Config().UnbundledBuildUsePrebuiltSdks() || ctx.Config().IsPdkBuild() { + if ctx.Config().AlwaysUsePrebuiltSdks() || ctx.Config().IsPdkBuild() { return } diff --git a/java/sdk_library.go b/java/sdk_library.go index 8a8d0c959..6436a8c97 100644 --- a/java/sdk_library.go +++ b/java/sdk_library.go @@ -1798,7 +1798,7 @@ func (module *SdkLibraryImport) Name() string { func (module *SdkLibraryImport) createInternalModules(mctx android.DefaultableHookContext) { // If the build is configured to use prebuilts then force this to be preferred. - if mctx.Config().UnbundledBuildUsePrebuiltSdks() { + if mctx.Config().AlwaysUsePrebuiltSdks() { module.prebuilt.ForcePrefer() } diff --git a/java/sdk_test.go b/java/sdk_test.go index 395da79df..13fc915ee 100644 --- a/java/sdk_test.go +++ b/java/sdk_test.go @@ -384,6 +384,7 @@ func TestClasspath(t *testing.T) { config := testConfig(nil, bpJava8, nil) if testcase.unbundled { config.TestProductVariables.Unbundled_build = proptools.BoolPtr(true) + config.TestProductVariables.Always_use_prebuilt_sdks = proptools.BoolPtr(true) } if testcase.pdk { config.TestProductVariables.Pdk = proptools.BoolPtr(true) @@ -407,6 +408,7 @@ func TestClasspath(t *testing.T) { config := testConfig(nil, bp, nil) if testcase.unbundled { config.TestProductVariables.Unbundled_build = proptools.BoolPtr(true) + config.TestProductVariables.Always_use_prebuilt_sdks = proptools.BoolPtr(true) } if testcase.pdk { config.TestProductVariables.Pdk = proptools.BoolPtr(true) @@ -433,6 +435,7 @@ func TestClasspath(t *testing.T) { if testcase.unbundled { config.TestProductVariables.Unbundled_build = proptools.BoolPtr(true) + config.TestProductVariables.Always_use_prebuilt_sdks = proptools.BoolPtr(true) } if testcase.pdk { config.TestProductVariables.Pdk = proptools.BoolPtr(true) @@ -451,6 +454,7 @@ func TestClasspath(t *testing.T) { if testcase.unbundled { config.TestProductVariables.Unbundled_build = proptools.BoolPtr(true) + config.TestProductVariables.Always_use_prebuilt_sdks = proptools.BoolPtr(true) } if testcase.pdk { config.TestProductVariables.Pdk = proptools.BoolPtr(true)