From 8242b43df84c883db8f7231a3d0e82849583e94d Mon Sep 17 00:00:00 2001 From: Romain Jobredeaux Date: Thu, 4 May 2023 10:16:26 -0400 Subject: [PATCH] Map prebuilt_apis labels to Bazel's manually generated ones. Change-Id: I5bec807da9b39e2b166af1bd83da43df91f997ef Bug: 237810289 Test: check that android-non-updatable.stubs.module_lib uses manual bazel target for its sdk_system_current_android dependency Change-Id: I6f5fb348e1dcaad10eb756382359f34de792b6e0 --- android/allowlists/allowlists.go | 1 + android/bazel.go | 4 +-- android/bazel_test.go | 4 +-- java/prebuilt_apis.go | 55 +++++++++++++++++++++++++------- 4 files changed, 48 insertions(+), 16 deletions(-) diff --git a/android/allowlists/allowlists.go b/android/allowlists/allowlists.go index 6bd4e26e8..10c3aef83 100644 --- a/android/allowlists/allowlists.go +++ b/android/allowlists/allowlists.go @@ -303,6 +303,7 @@ var ( "prebuilts/clang/host/linux-x86": Bp2BuildDefaultTrueRecursively, "prebuilts/gradle-plugin": Bp2BuildDefaultTrueRecursively, "prebuilts/runtime/mainline/platform/sdk": Bp2BuildDefaultTrueRecursively, + "prebuilts/sdk": Bp2BuildDefaultTrue, "prebuilts/sdk/current/androidx": Bp2BuildDefaultTrue, "prebuilts/sdk/current/androidx-legacy": Bp2BuildDefaultTrue, "prebuilts/sdk/current/extras/constraint-layout-x": Bp2BuildDefaultTrue, diff --git a/android/bazel.go b/android/bazel.go index 58d9d87db..a9ba79044 100644 --- a/android/bazel.go +++ b/android/bazel.go @@ -71,7 +71,7 @@ type BazelConversionStatus struct { MissingDeps []string `blueprint:"mutated"` } -type bazelModuleProperties struct { +type BazelModuleProperties struct { // The label of the Bazel target replacing this Soong module. When run in conversion mode, this // will import the handcrafted build target into the autogenerated file. Note: this may result in // a conflict due to duplicate targets if bp2build_available is also set. @@ -96,7 +96,7 @@ type bazelModuleProperties struct { type properties struct { // In "Bazel mixed build" mode, this represents the Bazel target replacing // this Soong module. - Bazel_module bazelModuleProperties + Bazel_module BazelModuleProperties } // namespacedVariableProperties is a map from a string representing a Soong diff --git a/android/bazel_test.go b/android/bazel_test.go index 87b2c8f42..77e251575 100644 --- a/android/bazel_test.go +++ b/android/bazel_test.go @@ -218,7 +218,7 @@ func (bcc *TestBazelConversionContext) Config() Config { var bazelableBazelModuleBase = BazelModuleBase{ bazelProperties: properties{ - Bazel_module: bazelModuleProperties{ + Bazel_module: BazelModuleProperties{ CanConvertToBazel: true, }, }, @@ -344,7 +344,7 @@ func TestBp2BuildAllowlist(t *testing.T) { }, BazelModuleBase: BazelModuleBase{ bazelProperties: properties{ - Bazel_module: bazelModuleProperties{ + Bazel_module: BazelModuleProperties{ CanConvertToBazel: true, Bp2build_available: proptools.BoolPtr(true), }, diff --git a/java/prebuilt_apis.go b/java/prebuilt_apis.go index 206d99527..7964f4cc6 100644 --- a/java/prebuilt_apis.go +++ b/java/prebuilt_apis.go @@ -104,20 +104,51 @@ func prebuiltApiModuleName(mctx android.LoadHookContext, module, scope, version return fmt.Sprintf("%s_%s_%s_%s", mctx.ModuleName(), scope, version, module) } +func hasBazelPrebuilt(module string) bool { + return module == "android" || module == "core-for-system-modules" +} + +func bazelPrebuiltApiModuleName(module, scope, version string) string { + bazelModule := module + switch module { + case "android": + bazelModule = "android_jar" + case "core-for-system-modules": + bazelModule = "core_jar" + } + bazelVersion := version + if version == "current" { + bazelVersion = strconv.Itoa(android.FutureApiLevelInt) + } + bazelScope := scope + switch scope { + case "module-lib": + bazelScope = "module" + case "system-server": + bazelScope = "system_server" + } + return fmt.Sprintf("//prebuilts/sdk:%s_%s_%s", bazelScope, bazelVersion, bazelModule) +} + func createImport(mctx android.LoadHookContext, module, scope, version, path, sdkVersion string, compileDex bool) { props := struct { - Name *string - Jars []string - Sdk_version *string - Installable *bool - Compile_dex *bool - }{} - props.Name = proptools.StringPtr(prebuiltApiModuleName(mctx, module, scope, version)) - props.Jars = append(props.Jars, path) - props.Sdk_version = proptools.StringPtr(sdkVersion) - props.Installable = proptools.BoolPtr(false) - props.Compile_dex = proptools.BoolPtr(compileDex) - + Name *string + Jars []string + Sdk_version *string + Installable *bool + Compile_dex *bool + Bazel_module android.BazelModuleProperties + }{ + Name: proptools.StringPtr(prebuiltApiModuleName(mctx, module, scope, version)), + Jars: []string{path}, + Sdk_version: proptools.StringPtr(sdkVersion), + Installable: proptools.BoolPtr(false), + Compile_dex: proptools.BoolPtr(compileDex), + } + if hasBazelPrebuilt(module) { + props.Bazel_module = android.BazelModuleProperties{ + Label: proptools.StringPtr(bazelPrebuiltApiModuleName(module, scope, version))} + } mctx.CreateModule(ImportFactory, &props) }