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
This commit is contained in:
Romain Jobredeaux
2023-05-04 10:16:26 -04:00
parent 30208863b4
commit 8242b43df8
4 changed files with 48 additions and 16 deletions

View File

@@ -303,6 +303,7 @@ var (
"prebuilts/clang/host/linux-x86": Bp2BuildDefaultTrueRecursively, "prebuilts/clang/host/linux-x86": Bp2BuildDefaultTrueRecursively,
"prebuilts/gradle-plugin": Bp2BuildDefaultTrueRecursively, "prebuilts/gradle-plugin": Bp2BuildDefaultTrueRecursively,
"prebuilts/runtime/mainline/platform/sdk": Bp2BuildDefaultTrueRecursively, "prebuilts/runtime/mainline/platform/sdk": Bp2BuildDefaultTrueRecursively,
"prebuilts/sdk": Bp2BuildDefaultTrue,
"prebuilts/sdk/current/androidx": Bp2BuildDefaultTrue, "prebuilts/sdk/current/androidx": Bp2BuildDefaultTrue,
"prebuilts/sdk/current/androidx-legacy": Bp2BuildDefaultTrue, "prebuilts/sdk/current/androidx-legacy": Bp2BuildDefaultTrue,
"prebuilts/sdk/current/extras/constraint-layout-x": Bp2BuildDefaultTrue, "prebuilts/sdk/current/extras/constraint-layout-x": Bp2BuildDefaultTrue,

View File

@@ -71,7 +71,7 @@ type BazelConversionStatus struct {
MissingDeps []string `blueprint:"mutated"` 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 // 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 // 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. // a conflict due to duplicate targets if bp2build_available is also set.
@@ -96,7 +96,7 @@ type bazelModuleProperties struct {
type properties struct { type properties struct {
// In "Bazel mixed build" mode, this represents the Bazel target replacing // In "Bazel mixed build" mode, this represents the Bazel target replacing
// this Soong module. // this Soong module.
Bazel_module bazelModuleProperties Bazel_module BazelModuleProperties
} }
// namespacedVariableProperties is a map from a string representing a Soong // namespacedVariableProperties is a map from a string representing a Soong

View File

@@ -218,7 +218,7 @@ func (bcc *TestBazelConversionContext) Config() Config {
var bazelableBazelModuleBase = BazelModuleBase{ var bazelableBazelModuleBase = BazelModuleBase{
bazelProperties: properties{ bazelProperties: properties{
Bazel_module: bazelModuleProperties{ Bazel_module: BazelModuleProperties{
CanConvertToBazel: true, CanConvertToBazel: true,
}, },
}, },
@@ -344,7 +344,7 @@ func TestBp2BuildAllowlist(t *testing.T) {
}, },
BazelModuleBase: BazelModuleBase{ BazelModuleBase: BazelModuleBase{
bazelProperties: properties{ bazelProperties: properties{
Bazel_module: bazelModuleProperties{ Bazel_module: BazelModuleProperties{
CanConvertToBazel: true, CanConvertToBazel: true,
Bp2build_available: proptools.BoolPtr(true), Bp2build_available: proptools.BoolPtr(true),
}, },

View File

@@ -104,20 +104,51 @@ func prebuiltApiModuleName(mctx android.LoadHookContext, module, scope, version
return fmt.Sprintf("%s_%s_%s_%s", mctx.ModuleName(), scope, version, module) 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) { func createImport(mctx android.LoadHookContext, module, scope, version, path, sdkVersion string, compileDex bool) {
props := struct { props := struct {
Name *string Name *string
Jars []string Jars []string
Sdk_version *string Sdk_version *string
Installable *bool Installable *bool
Compile_dex *bool Compile_dex *bool
}{} Bazel_module android.BazelModuleProperties
props.Name = proptools.StringPtr(prebuiltApiModuleName(mctx, module, scope, version)) }{
props.Jars = append(props.Jars, path) Name: proptools.StringPtr(prebuiltApiModuleName(mctx, module, scope, version)),
props.Sdk_version = proptools.StringPtr(sdkVersion) Jars: []string{path},
props.Installable = proptools.BoolPtr(false) Sdk_version: proptools.StringPtr(sdkVersion),
props.Compile_dex = proptools.BoolPtr(compileDex) 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) mctx.CreateModule(ImportFactory, &props)
} }