Merge changes from topic "no-srcs-no-deps"

* changes:
  enable conversion of all java_import modules
  emulate java_library static_deps with Bazel exports
This commit is contained in:
Treehugger Robot
2022-03-30 21:06:46 +00:00
committed by Gerrit Code Review
10 changed files with 300 additions and 84 deletions

View File

@@ -393,8 +393,6 @@ var (
// A module can either be in this list or its directory allowlisted entirely // A module can either be in this list or its directory allowlisted entirely
// in bp2buildDefaultConfig, but not both at the same time. // in bp2buildDefaultConfig, but not both at the same time.
bp2buildModuleAlwaysConvertList = []string{ bp2buildModuleAlwaysConvertList = []string{
"prebuilt_junit-params-assertj-core",
//external/avb //external/avb
"avbtool", "avbtool",
"libavb", "libavb",
@@ -419,9 +417,11 @@ var (
"fec", "fec",
} }
// Per-module-type allowlist to always opt modules in of both bp2build and mixed builds // Per-module-type allowlist to always opt modules in to both bp2build and mixed builds
// when they have the same type as one listed. // when they have the same type as one listed.
bp2buildModuleTypeAlwaysConvertList = []string{} bp2buildModuleTypeAlwaysConvertList = []string{
"java_import",
}
// Per-module denylist to always opt modules out of both bp2build and mixed builds. // Per-module denylist to always opt modules out of both bp2build and mixed builds.
bp2buildModuleDoNotConvertList = []string{ bp2buildModuleDoNotConvertList = []string{
@@ -485,18 +485,12 @@ var (
"libprotobuf-java-full", // b/210751803, we don't handle path property for filegroups "libprotobuf-java-full", // b/210751803, we don't handle path property for filegroups
"host-libprotobuf-java-full", // b/210751803, we don't handle path property for filegroups "host-libprotobuf-java-full", // b/210751803, we don't handle path property for filegroups
"libprotobuf-java-util-full", // b/210751803, we don't handle path property for filegroups "libprotobuf-java-util-full", // b/210751803, we don't handle path property for filegroups
"apex_manifest_proto_java", // b/210751803, depends on libprotobuf-java-full
"conscrypt", // b/210751803, we don't handle path property for filegroups
"conscrypt-for-host", // b/210751803, we don't handle path property for filegroups
"conscrypt", // b/210751803, we don't handle path property for filegroups "libprotobuf-java-nano", // b/220869005, depends on non-public_current SDK
"conscrypt-for-host", // b/210751803, we don't handle path property for filegroups "host-libprotobuf-java-nano", // b/220869005, depends on libprotobuf-java-nano
"host-libprotobuf-java-lite", // b/217236083, java_library cannot have deps without srcs
"host-libprotobuf-java-micro", // b/217236083, java_library cannot have deps without srcs
"host-libprotobuf-java-nano", // b/217236083, java_library cannot have deps without srcs
"error_prone_core", // b/217236083, java_library cannot have deps without srcs
"bouncycastle-host", // b/217236083, java_library cannot have deps without srcs
"mockito-robolectric-prebuilt", // b/217236083, java_library cannot have deps without srcs
"apex_manifest_proto_java", // b/215230097, we don't handle .proto files in java_library srcs attribute
"libc_musl_sysroot_bionic_arch_headers", // b/218405924, depends on soong_zip "libc_musl_sysroot_bionic_arch_headers", // b/218405924, depends on soong_zip
"libc_musl_sysroot_bionic_headers", // b/218405924, depends on soong_zip and generates duplicate srcs "libc_musl_sysroot_bionic_headers", // b/218405924, depends on soong_zip and generates duplicate srcs
@@ -566,9 +560,23 @@ var (
"art-script", // depends on unconverted modules: dalvikvm, dex2oat "art-script", // depends on unconverted modules: dalvikvm, dex2oat
"dex2oat-script", // depends on unconverted modules: dex2oat "dex2oat-script", // depends on unconverted modules: dex2oat
"error_prone_checkerframework_dataflow_nullaway", // TODO(b/219908977): "Error in fail: deps not allowed without srcs; move to runtime_deps?" // TODO(b/221082840) convert java_imports in //packages/apps/Car/libs/car-ui-lib/...
"prebuilt_car-ui-androidx-annotation",
"prebuilt_car-ui-androidx-annotation-nodeps",
"prebuilt_car-ui-androidx-collection",
"prebuilt_car-ui-androidx-collection-nodeps",
"prebuilt_car-ui-androidx-core-common",
"prebuilt_car-ui-androidx-core-common-nodeps",
"prebuilt_car-ui-androidx-lifecycle-common",
"prebuilt_car-ui-androidx-lifecycle-common-nodeps",
"prebuilt_car-ui-androidx-constraintlayout-solver",
"prebuilt_car-ui-androidx-constraintlayout-solver-nodeps",
"libprotobuf-java-nano", // b/220869005, depends on non-public_current SDK "prebuilt_art-module-host-exports_okhttp-norepackage@current", // aosp/1999250, needs Jars (arch variant)
"prebuilt_conscrypt-unbundled", // aosp/1999250, needs Jars (arch variant)
"prebuilt_conscrypt-module-host-exports_conscrypt-unbundled@current", // aosp/1999250, needs Jars (arch variant)
"prebuilt_platform-robolectric-4.4-prebuilt", // aosp/1999250, needs .aar support in Jars
"prebuilt_platform-robolectric-4.5.1-prebuilt", // aosp/1999250, needs .aar support in Jars
} }
// Per-module denylist of cc_library modules to only generate the static // Per-module denylist of cc_library modules to only generate the static

View File

@@ -65,6 +65,14 @@ type LabelList struct {
Excludes []Label Excludes []Label
} }
// MakeLabelList creates a LabelList from a list Label
func MakeLabelList(labels []Label) LabelList {
return LabelList{
Includes: labels,
Excludes: nil,
}
}
func (ll *LabelList) Equals(other LabelList) bool { func (ll *LabelList) Equals(other LabelList) bool {
if len(ll.Includes) != len(other.Includes) || len(ll.Excludes) != len(other.Excludes) { if len(ll.Includes) != len(other.Includes) || len(ll.Excludes) != len(other.Excludes) {
return false return false
@@ -354,6 +362,15 @@ func (la *LabelAttribute) SortedConfigurationAxes() []ConfigurationAxis {
return keys return keys
} }
// MakeLabelAttribute turns a string into a LabelAttribute
func MakeLabelAttribute(label string) *LabelAttribute {
return &LabelAttribute{
Value: &Label{
Label: label,
},
}
}
type configToBools map[string]bool type configToBools map[string]bool
func (ctb configToBools) setValue(config string, value *bool) { func (ctb configToBools) setValue(config string, value *bool) {

View File

@@ -51,7 +51,6 @@ android_app {
"srcs": `["app.java"]`, "srcs": `["app.java"]`,
"manifest": `"AndroidManifest.xml"`, "manifest": `"AndroidManifest.xml"`,
"resource_files": `["res/res.png"]`, "resource_files": `["res/res.png"]`,
"deps": `["//prebuilts/sdk:public_current_android_sdk_java_import"]`,
}), }),
}}) }})
} }
@@ -87,10 +86,7 @@ android_app {
"resb/res.png", "resb/res.png",
]`, ]`,
"custom_package": `"com.google"`, "custom_package": `"com.google"`,
"deps": `[ "deps": `[":static_lib_dep"]`,
"//prebuilts/sdk:public_current_android_sdk_java_import",
":static_lib_dep",
]`,
}), }),
}}) }})
} }
@@ -129,7 +125,6 @@ android_app {
})`, })`,
"manifest": `"AndroidManifest.xml"`, "manifest": `"AndroidManifest.xml"`,
"resource_files": `["res/res.png"]`, "resource_files": `["res/res.png"]`,
"deps": `["//prebuilts/sdk:public_current_android_sdk_java_import"]`,
}), }),
}}) }})
} }

View File

@@ -28,6 +28,7 @@ func runJavaBinaryHostTestCase(t *testing.T, tc bp2buildTestCase) {
(&tc).moduleTypeUnderTestFactory = java.BinaryHostFactory (&tc).moduleTypeUnderTestFactory = java.BinaryHostFactory
runBp2BuildTestCase(t, func(ctx android.RegistrationContext) { runBp2BuildTestCase(t, func(ctx android.RegistrationContext) {
ctx.RegisterModuleType("cc_library_host_shared", cc.LibraryHostSharedFactory) ctx.RegisterModuleType("cc_library_host_shared", cc.LibraryHostSharedFactory)
ctx.RegisterModuleType("java_library", java.LibraryFactory)
}, tc) }, tc)
} }
@@ -67,3 +68,33 @@ func TestJavaBinaryHost(t *testing.T) {
}, },
}) })
} }
func TestJavaBinaryHostRuntimeDeps(t *testing.T) {
runJavaBinaryHostTestCase(t, bp2buildTestCase{
description: "java_binary_host with srcs, exclude_srcs, jni_libs, javacflags, and manifest.",
filesystem: fs,
blueprint: `java_binary_host {
name: "java-binary-host-1",
static_libs: ["java-dep-1"],
manifest: "test.mf",
bazel_module: { bp2build_available: true },
}
java_library {
name: "java-dep-1",
srcs: ["a.java"],
bazel_module: { bp2build_available: false },
}
`,
expectedBazelTargets: []string{
makeBazelTarget("java_binary", "java-binary-host-1", attrNameToString{
"main_class": `"com.android.test.MainClass"`,
"runtime_deps": `[":java-dep-1"]`,
"target_compatible_with": `select({
"//build/bazel/platforms/os:android": ["@platforms//:incompatible"],
"//conditions:default": [],
})`,
}),
},
})
}

View File

@@ -15,6 +15,7 @@
package bp2build package bp2build
import ( import (
"fmt"
"testing" "testing"
"android/soong/android" "android/soong/android"
@@ -55,3 +56,76 @@ java_library {
}, },
}) })
} }
func TestJavaLibraryConvertsStaticLibsToDepsAndExports(t *testing.T) {
runJavaLibraryTestCase(t, bp2buildTestCase{
blueprint: `java_library {
name: "java-lib-1",
srcs: ["a.java"],
libs: ["java-lib-2"],
static_libs: ["java-lib-3"],
bazel_module: { bp2build_available: true },
}
java_library {
name: "java-lib-2",
srcs: ["b.java"],
bazel_module: { bp2build_available: false },
}
java_library {
name: "java-lib-3",
srcs: ["c.java"],
bazel_module: { bp2build_available: false },
}`,
expectedBazelTargets: []string{
makeBazelTarget("java_library", "java-lib-1", attrNameToString{
"srcs": `["a.java"]`,
"deps": `[
":java-lib-2",
":java-lib-3",
]`,
"exports": `[":java-lib-3"]`,
}),
},
})
}
func TestJavaLibraryConvertsStaticLibsToExportsIfNoSrcs(t *testing.T) {
runJavaLibraryTestCase(t, bp2buildTestCase{
blueprint: `java_library {
name: "java-lib-1",
static_libs: ["java-lib-2"],
bazel_module: { bp2build_available: true },
}
java_library {
name: "java-lib-2",
srcs: ["a.java"],
bazel_module: { bp2build_available: false },
}`,
expectedBazelTargets: []string{
makeBazelTarget("java_library", "java-lib-1", attrNameToString{
"exports": `[":java-lib-2"]`,
}),
},
})
}
func TestJavaLibraryFailsToConvertLibsWithNoSrcs(t *testing.T) {
runJavaLibraryTestCase(t, bp2buildTestCase{
expectedErr: fmt.Errorf("Module has direct dependencies but no sources. Bazel will not allow this."),
blueprint: `java_library {
name: "java-lib-1",
libs: ["java-lib-2"],
bazel_module: { bp2build_available: true },
}
java_library {
name: "java-lib-2",
srcs: ["a.java"],
bazel_module: { bp2build_available: false },
}`,
expectedBazelTargets: []string{},
})
}

View File

@@ -70,3 +70,39 @@ java_library {
}, },
}) })
} }
func TestJavaPluginNoSrcs(t *testing.T) {
runJavaPluginTestCase(t, bp2buildTestCase{
description: "java_plugin without srcs converts (static) libs to deps",
blueprint: `java_plugin {
name: "java-plug-1",
libs: ["java-lib-1"],
static_libs: ["java-lib-2"],
bazel_module: { bp2build_available: true },
}
java_library {
name: "java-lib-1",
srcs: ["b.java"],
bazel_module: { bp2build_available: false },
}
java_library {
name: "java-lib-2",
srcs: ["c.java"],
bazel_module: { bp2build_available: false },
}`,
expectedBazelTargets: []string{
makeBazelTarget("java_plugin", "java-plug-1", attrNameToString{
"target_compatible_with": `select({
"//build/bazel/platforms/os:android": ["@platforms//:incompatible"],
"//conditions:default": [],
})`,
"deps": `[
":java-lib-1",
":java-lib-2",
]`,
}),
},
})
}

View File

@@ -89,7 +89,7 @@ func TestJavaProto(t *testing.T) {
"deps": `[":java-protos_proto"]`, "deps": `[":java-protos_proto"]`,
}), }),
makeBazelTarget("java_library", "java-protos", attrNameToString{ makeBazelTarget("java_library", "java-protos", attrNameToString{
"deps": fmt.Sprintf(`[":%s"]`, javaLibraryName), "exports": fmt.Sprintf(`[":%s"]`, javaLibraryName),
}), }),
}, },
}) })
@@ -98,7 +98,7 @@ func TestJavaProto(t *testing.T) {
func TestJavaProtoDefault(t *testing.T) { func TestJavaProtoDefault(t *testing.T) {
runJavaProtoTestCase(t, bp2buildTestCase{ runJavaProtoTestCase(t, bp2buildTestCase{
description: "java_proto", description: "java_library proto default",
blueprint: `java_library_static { blueprint: `java_library_static {
name: "java-protos", name: "java-protos",
srcs: ["a.proto"], srcs: ["a.proto"],
@@ -115,7 +115,7 @@ func TestJavaProtoDefault(t *testing.T) {
"deps": `[":java-protos_proto"]`, "deps": `[":java-protos_proto"]`,
}), }),
makeBazelTarget("java_library", "java-protos", attrNameToString{ makeBazelTarget("java_library", "java-protos", attrNameToString{
"deps": `[":java-protos_java_proto_lite"]`, "exports": `[":java-protos_java_proto_lite"]`,
}), }),
}, },
}) })

View File

@@ -1450,7 +1450,8 @@ func androidAppCertificateBp2Build(ctx android.TopDownMutatorContext, module *An
} }
type bazelAndroidAppAttributes struct { type bazelAndroidAppAttributes struct {
*javaLibraryAttributes *javaCommonAttributes
Deps bazel.LabelListAttribute
Manifest bazel.Label Manifest bazel.Label
Custom_package *string Custom_package *string
Resource_files bazel.LabelListAttribute Resource_files bazel.LabelListAttribute
@@ -1460,7 +1461,16 @@ type bazelAndroidAppAttributes struct {
// ConvertWithBp2build is used to convert android_app to Bazel. // ConvertWithBp2build is used to convert android_app to Bazel.
func (a *AndroidApp) ConvertWithBp2build(ctx android.TopDownMutatorContext) { func (a *AndroidApp) ConvertWithBp2build(ctx android.TopDownMutatorContext) {
libAttrs := a.convertLibraryAttrsBp2Build(ctx) commonAttrs, depLabels := a.convertLibraryAttrsBp2Build(ctx)
deps := depLabels.Deps
if !commonAttrs.Srcs.IsEmpty() {
deps.Append(depLabels.StaticDeps) // we should only append these if there are sources to use them
} else if !deps.IsEmpty() || !depLabels.StaticDeps.IsEmpty() {
ctx.ModuleErrorf("android_app has dynamic or static dependencies but no sources." +
" Bazel does not allow direct dependencies without sources nor exported" +
" dependencies on android_binary rule.")
}
manifest := proptools.StringDefault(a.aaptProperties.Manifest, "AndroidManifest.xml") manifest := proptools.StringDefault(a.aaptProperties.Manifest, "AndroidManifest.xml")
@@ -1483,7 +1493,8 @@ func (a *AndroidApp) ConvertWithBp2build(ctx android.TopDownMutatorContext) {
} }
attrs := &bazelAndroidAppAttributes{ attrs := &bazelAndroidAppAttributes{
libAttrs, commonAttrs,
deps,
android.BazelLabelForModuleSrcSingle(ctx, manifest), android.BazelLabelForModuleSrcSingle(ctx, manifest),
// TODO(b/209576404): handle package name override by product variable PRODUCT_MANIFEST_PACKAGE_NAME_OVERRIDES // TODO(b/209576404): handle package name override by product variable PRODUCT_MANIFEST_PACKAGE_NAME_OVERRIDES
a.overridableAppProperties.Package_name, a.overridableAppProperties.Package_name,

View File

@@ -2023,13 +2023,23 @@ func addCLCFromDep(ctx android.ModuleContext, depModule android.Module,
} }
} }
type javaLibraryAttributes struct { type javaCommonAttributes struct {
Srcs bazel.LabelListAttribute Srcs bazel.LabelListAttribute
Deps bazel.LabelListAttribute
Javacopts bazel.StringListAttribute Javacopts bazel.StringListAttribute
} }
func (m *Library) convertLibraryAttrsBp2Build(ctx android.TopDownMutatorContext) *javaLibraryAttributes { type javaDependencyLabels struct {
// Dependencies which DO NOT contribute to the API visible to upstream dependencies.
Deps bazel.LabelListAttribute
// Dependencies which DO contribute to the API visible to upstream dependencies.
StaticDeps bazel.LabelListAttribute
}
// convertLibraryAttrsBp2Build converts a few shared attributes from java_* modules
// and also separates dependencies into dynamic dependencies and static dependencies.
// Each corresponding Bazel target type, can have a different method for handling
// dynamic vs. static dependencies, and so these are returned to the calling function.
func (m *Library) convertLibraryAttrsBp2Build(ctx android.TopDownMutatorContext) (*javaCommonAttributes, *javaDependencyLabels) {
var srcs bazel.LabelListAttribute var srcs bazel.LabelListAttribute
archVariantProps := m.GetArchVariantProperties(ctx, &CommonProperties{}) archVariantProps := m.GetArchVariantProperties(ctx, &CommonProperties{})
for axis, configToProps := range archVariantProps { for axis, configToProps := range archVariantProps {
@@ -2048,40 +2058,68 @@ func (m *Library) convertLibraryAttrsBp2Build(ctx android.TopDownMutatorContext)
protoSrcPartition: android.ProtoSrcLabelPartition, protoSrcPartition: android.ProtoSrcLabelPartition,
}) })
attrs := &javaLibraryAttributes{ commonAttrs := &javaCommonAttributes{
Srcs: srcPartitions[javaSrcPartition], Srcs: srcPartitions[javaSrcPartition],
} }
if m.properties.Javacflags != nil { if m.properties.Javacflags != nil {
attrs.Javacopts = bazel.MakeStringListAttribute(m.properties.Javacflags) commonAttrs.Javacopts = bazel.MakeStringListAttribute(m.properties.Javacflags)
} }
depLabels := &javaDependencyLabels{}
var deps bazel.LabelList var deps bazel.LabelList
sdkVersion := m.SdkVersion(ctx)
if sdkVersion.Kind == android.SdkPublic && sdkVersion.ApiLevel == android.FutureApiLevel {
// TODO(b/220869005) remove forced dependency on current public android.jar
deps.Add(&bazel.Label{Label: "//prebuilts/sdk:public_current_android_sdk_java_import"})
}
if m.properties.Libs != nil { if m.properties.Libs != nil {
deps.Append(android.BazelLabelForModuleDeps(ctx, m.properties.Libs)) deps.Append(android.BazelLabelForModuleDeps(ctx, m.properties.Libs))
} }
var staticDeps bazel.LabelList
if m.properties.Static_libs != nil { if m.properties.Static_libs != nil {
//TODO(b/217236083) handle static libs similarly to Soong staticDeps.Append(android.BazelLabelForModuleDeps(ctx, m.properties.Static_libs))
deps.Append(android.BazelLabelForModuleDeps(ctx, m.properties.Static_libs))
} }
protoDeps := bp2buildProto(ctx, &m.Module, srcPartitions[protoSrcPartition]) protoDepLabel := bp2buildProto(ctx, &m.Module, srcPartitions[protoSrcPartition])
if protoDeps != nil { // Soong does not differentiate between a java_library and the Bazel equivalent of
deps.Add(protoDeps) // a java_proto_library + proto_library pair. Instead, in Soong proto sources are
} // listed directly in the srcs of a java_library, and the classes produced
// by protoc are included directly in the resulting JAR. Thus upstream dependencies
// that depend on a java_library with proto sources can link directly to the protobuf API,
// and so this should be a static dependency.
staticDeps.Add(protoDepLabel)
attrs.Deps = bazel.MakeLabelListAttribute(deps) depLabels.Deps = bazel.MakeLabelListAttribute(deps)
depLabels.StaticDeps = bazel.MakeLabelListAttribute(staticDeps)
return attrs return commonAttrs, depLabels
}
type javaLibraryAttributes struct {
*javaCommonAttributes
Deps bazel.LabelListAttribute
Exports bazel.LabelListAttribute
} }
func javaLibraryBp2Build(ctx android.TopDownMutatorContext, m *Library) { func javaLibraryBp2Build(ctx android.TopDownMutatorContext, m *Library) {
attrs := m.convertLibraryAttrsBp2Build(ctx) commonAttrs, depLabels := m.convertLibraryAttrsBp2Build(ctx)
deps := depLabels.Deps
if !commonAttrs.Srcs.IsEmpty() {
deps.Append(depLabels.StaticDeps) // we should only append these if there are sources to use them
sdkVersion := m.SdkVersion(ctx)
if sdkVersion.Kind == android.SdkPublic && sdkVersion.ApiLevel == android.FutureApiLevel {
// TODO(b/220869005) remove forced dependency on current public android.jar
deps.Add(bazel.MakeLabelAttribute("//prebuilts/sdk:public_current_android_sdk_java_import"))
}
} else if !depLabels.Deps.IsEmpty() {
ctx.ModuleErrorf("Module has direct dependencies but no sources. Bazel will not allow this.")
}
attrs := &javaLibraryAttributes{
javaCommonAttributes: commonAttrs,
Deps: deps,
Exports: depLabels.StaticDeps,
}
props := bazel.BazelTargetModuleProperties{ props := bazel.BazelTargetModuleProperties{
Rule_class: "java_library", Rule_class: "java_library",
@@ -2092,15 +2130,30 @@ func javaLibraryBp2Build(ctx android.TopDownMutatorContext, m *Library) {
} }
type javaBinaryHostAttributes struct { type javaBinaryHostAttributes struct {
Srcs bazel.LabelListAttribute *javaCommonAttributes
Deps bazel.LabelListAttribute Deps bazel.LabelListAttribute
Main_class string Runtime_deps bazel.LabelListAttribute
Jvm_flags bazel.StringListAttribute Main_class string
Javacopts bazel.StringListAttribute Jvm_flags bazel.StringListAttribute
} }
// JavaBinaryHostBp2Build is for java_binary_host bp2build. // JavaBinaryHostBp2Build is for java_binary_host bp2build.
func javaBinaryHostBp2Build(ctx android.TopDownMutatorContext, m *Binary) { func javaBinaryHostBp2Build(ctx android.TopDownMutatorContext, m *Binary) {
commonAttrs, depLabels := m.convertLibraryAttrsBp2Build(ctx)
deps := depLabels.Deps
deps.Append(depLabels.StaticDeps)
if m.binaryProperties.Jni_libs != nil {
deps.Append(bazel.MakeLabelListAttribute(android.BazelLabelForModuleDeps(ctx, m.binaryProperties.Jni_libs)))
}
var runtimeDeps bazel.LabelListAttribute
if commonAttrs.Srcs.IsEmpty() {
// if there are no sources, then the dependencies can only be used at runtime
runtimeDeps = deps
deps = bazel.LabelListAttribute{}
}
mainClass := "" mainClass := ""
if m.binaryProperties.Main_class != nil { if m.binaryProperties.Main_class != nil {
mainClass = *m.binaryProperties.Main_class mainClass = *m.binaryProperties.Main_class
@@ -2112,26 +2165,12 @@ func javaBinaryHostBp2Build(ctx android.TopDownMutatorContext, m *Binary) {
} }
mainClass = mainClassInManifest mainClass = mainClassInManifest
} }
srcs := bazel.MakeLabelListAttribute(android.BazelLabelForModuleSrcExcludes(ctx, m.properties.Srcs, m.properties.Exclude_srcs))
attrs := &javaBinaryHostAttributes{ attrs := &javaBinaryHostAttributes{
Srcs: srcs, javaCommonAttributes: commonAttrs,
Main_class: mainClass, Deps: deps,
} Runtime_deps: runtimeDeps,
Main_class: mainClass,
if m.properties.Javacflags != nil {
attrs.Javacopts = bazel.MakeStringListAttribute(m.properties.Javacflags)
}
// Attribute deps
deps := []string{}
if m.properties.Static_libs != nil {
deps = append(deps, m.properties.Static_libs...)
}
if m.binaryProperties.Jni_libs != nil {
deps = append(deps, m.binaryProperties.Jni_libs...)
}
if len(deps) > 0 {
attrs.Deps = bazel.MakeLabelListAttribute(android.BazelLabelForModuleDeps(ctx, deps))
} }
// Attribute jvm_flags // Attribute jvm_flags

View File

@@ -58,27 +58,32 @@ type PluginProperties struct {
} }
type pluginAttributes struct { type pluginAttributes struct {
*javaLibraryAttributes *javaCommonAttributes
Processor_class *string Deps bazel.LabelListAttribute
Target_compatible_with bazel.LabelListAttribute Processor_class *string
} }
// ConvertWithBp2build is used to convert android_app to Bazel. // ConvertWithBp2build is used to convert android_app to Bazel.
func (p *Plugin) ConvertWithBp2build(ctx android.TopDownMutatorContext) { func (p *Plugin) ConvertWithBp2build(ctx android.TopDownMutatorContext) {
libAttrs := p.convertLibraryAttrsBp2Build(ctx) pluginName := p.Name()
attrs := &pluginAttributes{ commonAttrs, depLabels := p.convertLibraryAttrsBp2Build(ctx)
libAttrs,
nil, deps := depLabels.Deps
bazel.LabelListAttribute{}, deps.Append(depLabels.StaticDeps)
var processorClass *string
if p.pluginProperties.Processor_class != nil {
processorClass = p.pluginProperties.Processor_class
} }
if p.pluginProperties.Processor_class != nil { attrs := &pluginAttributes{
attrs.Processor_class = p.pluginProperties.Processor_class javaCommonAttributes: commonAttrs,
Deps: deps,
Processor_class: processorClass,
} }
props := bazel.BazelTargetModuleProperties{ props := bazel.BazelTargetModuleProperties{
Rule_class: "java_plugin", Rule_class: "java_plugin",
} }
ctx.CreateBazelTargetModule(props, android.CommonAttributes{Name: pluginName}, attrs)
ctx.CreateBazelTargetModule(props, android.CommonAttributes{Name: p.Name()}, attrs)
} }