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:
@@ -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
|
||||||
|
@@ -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) {
|
||||||
|
@@ -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"]`,
|
|
||||||
}),
|
}),
|
||||||
}})
|
}})
|
||||||
}
|
}
|
||||||
|
@@ -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": [],
|
||||||
|
})`,
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
@@ -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{},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
@@ -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",
|
||||||
|
]`,
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
@@ -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"]`,
|
||||||
}),
|
}),
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
17
java/app.go
17
java/app.go
@@ -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,
|
||||||
|
125
java/java.go
125
java/java.go
@@ -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
|
||||||
|
@@ -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)
|
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user