From e7370eabe43bf9b15928e561d5df2fd2a7884dd3 Mon Sep 17 00:00:00 2001 From: Romain Jobredeaux Date: Tue, 4 Apr 2023 10:30:14 -0400 Subject: [PATCH] Bp2build converter for java_host_for_device. Change-Id: I70a345c641bbed3223dc6222062fb6948f7dc6cb Bug: 276710283 Test: Presubmit --- android/allowlists/allowlists.go | 4 +- bp2build/Android.bp | 1 + .../java_host_for_device_conversion_test.go | 63 +++++++++++++++++++ java/device_host_converter.go | 30 +++++++++ 4 files changed, 97 insertions(+), 1 deletion(-) create mode 100644 bp2build/java_host_for_device_conversion_test.go diff --git a/android/allowlists/allowlists.go b/android/allowlists/allowlists.go index d7bcc8171..1ece9fa7d 100644 --- a/android/allowlists/allowlists.go +++ b/android/allowlists/allowlists.go @@ -132,6 +132,7 @@ var ( "external/f2fs-tools": Bp2BuildDefaultTrue, "external/flac": Bp2BuildDefaultTrueRecursively, "external/fmtlib": Bp2BuildDefaultTrueRecursively, + "external/guava": Bp2BuildDefaultTrueRecursively, "external/google-benchmark": Bp2BuildDefaultTrueRecursively, "external/googletest": Bp2BuildDefaultTrueRecursively, "external/gwp_asan": Bp2BuildDefaultTrueRecursively, @@ -397,7 +398,6 @@ var ( "external/bazelbuild-rules_license":/* recursive = */ true, "external/bazelbuild-kotlin-rules":/* recursive = */ true, "external/bazel-skylib":/* recursive = */ true, - "external/guava":/* recursive = */ true, "external/protobuf":/* recursive = */ false, "external/python/absl-py":/* recursive = */ true, @@ -711,6 +711,8 @@ var ( // allowlisting for kotlinx_coroutines "kotlinx_coroutines", + "kotlinx_coroutines-device", + "kotlinx_coroutines-host", "annotations", "kotlinx-coroutines-android-annotation-stubs", diff --git a/bp2build/Android.bp b/bp2build/Android.bp index 6edd78aef..598ca323d 100644 --- a/bp2build/Android.bp +++ b/bp2build/Android.bp @@ -61,6 +61,7 @@ bootstrap_go_package { "genrule_conversion_test.go", "gensrcs_conversion_test.go", "java_binary_host_conversion_test.go", + "java_host_for_device_conversion_test.go", "java_import_conversion_test.go", "java_library_conversion_test.go", "java_library_host_conversion_test.go", diff --git a/bp2build/java_host_for_device_conversion_test.go b/bp2build/java_host_for_device_conversion_test.go new file mode 100644 index 000000000..d908d0002 --- /dev/null +++ b/bp2build/java_host_for_device_conversion_test.go @@ -0,0 +1,63 @@ +// Copyright 2023 Google Inc. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package bp2build + +import ( + "testing" + + "android/soong/android" + "android/soong/java" +) + +func runJavaHostForDeviceTestCaseWithRegistrationCtxFunc(t *testing.T, tc Bp2buildTestCase, registrationCtxFunc func(ctx android.RegistrationContext)) { + t.Helper() + (&tc).ModuleTypeUnderTest = "java_host_for_device" + (&tc).ModuleTypeUnderTestFactory = java.HostForDeviceFactory + RunBp2BuildTestCase(t, registrationCtxFunc, tc) +} + +func runJavaHostForDeviceTestCase(t *testing.T, tc Bp2buildTestCase) { + t.Helper() + runJavaHostForDeviceTestCaseWithRegistrationCtxFunc(t, tc, func(ctx android.RegistrationContext) { + ctx.RegisterModuleType("java_library", java.LibraryFactory) + }) +} + +func TestJavaHostForDevice(t *testing.T) { + runJavaHostForDeviceTestCase(t, Bp2buildTestCase{ + Description: "java_host_for_device test", + Blueprint: `java_host_for_device { + name: "java-lib-1", + libs: ["java-lib-2"], + bazel_module: { bp2build_available: true }, +} + +java_library { + name: "java-lib-2", + srcs: ["b.java"], + bazel_module: { bp2build_available: true }, +}`, + ExpectedBazelTargets: []string{ + MakeBazelTarget("java_host_for_device", "java-lib-1", AttrNameToString{ + "deps": `[":java-lib-2"]`, + }), + MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"), + MakeBazelTarget("java_library", "java-lib-2", AttrNameToString{ + "srcs": `["b.java"]`, + }), + MakeNeverlinkDuplicateTarget("java_library", "java-lib-2"), + }, + }) +} diff --git a/java/device_host_converter.go b/java/device_host_converter.go index 4abdcc6e9..656c866ed 100644 --- a/java/device_host_converter.go +++ b/java/device_host_converter.go @@ -19,12 +19,14 @@ import ( "io" "android/soong/android" + "android/soong/bazel" "android/soong/dexpreopt" ) type DeviceHostConverter struct { android.ModuleBase android.DefaultableModuleBase + android.BazelModuleBase properties DeviceHostConverterProperties @@ -76,6 +78,7 @@ func HostForDeviceFactory() android.Module { module.AddProperties(&module.properties) InitJavaModule(module, android.DeviceSupported) + android.InitBazelModule(module) return module } @@ -186,3 +189,30 @@ func (d *DeviceHostConverter) AndroidMk() android.AndroidMkData { }, } } + +type bazelDeviceHostConverterAttributes struct { + Deps bazel.LabelListAttribute +} + +func (d *DeviceHostConverter) ConvertWithBp2build(ctx android.TopDownMutatorContext) { + ctx.CreateBazelTargetModule( + bazel.BazelTargetModuleProperties{ + Rule_class: "java_host_for_device", + Bzl_load_location: "//build/bazel/rules/java:host_for_device.bzl", + }, + android.CommonAttributes{Name: d.Name()}, + &bazelDeviceHostConverterAttributes{ + Deps: bazel.MakeLabelListAttribute(android.BazelLabelForModuleDeps(ctx, d.properties.Libs)), + }, + ) + neverlinkProp := true + neverLinkAttrs := &javaLibraryAttributes{ + Exports: bazel.MakeSingleLabelListAttribute(bazel.Label{Label: ":" + d.Name()}), + Neverlink: bazel.BoolAttribute{Value: &neverlinkProp}, + } + ctx.CreateBazelTargetModule( + javaLibraryBazelTargetModuleProperties(), + android.CommonAttributes{Name: d.Name() + "-neverlink"}, + neverLinkAttrs) + +}