Convert java_aconfig_library to bazel.
Bug: 297357579 Test: Unit test and AconfigJavaHostTest Change-Id: Icf944cc0b2a7382107923d49b2d2ff0eb4113638
This commit is contained in:
parent
dec9ce6693
commit
f2b94010c8
7 changed files with 160 additions and 5 deletions
|
@ -15,10 +15,13 @@
|
|||
package aconfig
|
||||
|
||||
import (
|
||||
"android/soong/android"
|
||||
"android/soong/java"
|
||||
"fmt"
|
||||
|
||||
"android/soong/android"
|
||||
"android/soong/bazel"
|
||||
"android/soong/java"
|
||||
"github.com/google/blueprint"
|
||||
"github.com/google/blueprint/proptools"
|
||||
)
|
||||
|
||||
type declarationsTagType struct {
|
||||
|
@ -32,7 +35,7 @@ type JavaAconfigDeclarationsLibraryProperties struct {
|
|||
Aconfig_declarations string
|
||||
|
||||
// whether to generate test mode version of the library
|
||||
Test bool
|
||||
Test *bool
|
||||
}
|
||||
|
||||
type JavaAconfigDeclarationsLibraryCallbacks struct {
|
||||
|
@ -68,7 +71,7 @@ func (callbacks *JavaAconfigDeclarationsLibraryCallbacks) GenerateSourceJarBuild
|
|||
// Generate the action to build the srcjar
|
||||
srcJarPath := android.PathForModuleGen(ctx, ctx.ModuleName()+".srcjar")
|
||||
var mode string
|
||||
if callbacks.properties.Test {
|
||||
if proptools.Bool(callbacks.properties.Test) {
|
||||
mode = "test"
|
||||
} else {
|
||||
mode = "production"
|
||||
|
@ -89,3 +92,39 @@ func (callbacks *JavaAconfigDeclarationsLibraryCallbacks) GenerateSourceJarBuild
|
|||
|
||||
return srcJarPath
|
||||
}
|
||||
|
||||
type bazelJavaAconfigLibraryAttributes struct {
|
||||
Aconfig_declarations bazel.LabelAttribute
|
||||
Test *bool
|
||||
Sdk_version *string
|
||||
}
|
||||
|
||||
func (callbacks *JavaAconfigDeclarationsLibraryCallbacks) Bp2build(ctx android.Bp2buildMutatorContext, module *java.GeneratedJavaLibraryModule) {
|
||||
if ctx.ModuleType() != "java_aconfig_library" {
|
||||
return
|
||||
}
|
||||
|
||||
// By default, soong builds the aconfig java library with private_current, however
|
||||
// bazel currently doesn't support it so we default it to system_current. One reason
|
||||
// is that the dependency of all java_aconfig_library aconfig-annotations-lib is
|
||||
// built with system_current. For the java aconfig library itself it doesn't really
|
||||
// matter whether it uses private API or system API because the only module it uses
|
||||
// is DeviceConfig which is in system, and the rdeps of the java aconfig library
|
||||
// won't change its sdk version either, so this should be fine.
|
||||
// Ideally we should only use the default value if it is not set by the user, but
|
||||
// bazel only supports a limited sdk versions, for example, the java_aconfig_library
|
||||
// modules in framework/base use core_platform which is not supported by bazel yet.
|
||||
// TODO(b/302148527): change soong to default to system_current as well.
|
||||
sdkVersion := "system_current"
|
||||
attrs := bazelJavaAconfigLibraryAttributes{
|
||||
Aconfig_declarations: *bazel.MakeLabelAttribute(android.BazelLabelForModuleDepSingle(ctx, callbacks.properties.Aconfig_declarations).Label),
|
||||
Test: callbacks.properties.Test,
|
||||
Sdk_version: &sdkVersion,
|
||||
}
|
||||
props := bazel.BazelTargetModuleProperties{
|
||||
Rule_class: "java_aconfig_library",
|
||||
Bzl_load_location: "//build/bazel/rules/java:java_aconfig_library.bzl",
|
||||
}
|
||||
|
||||
ctx.CreateBazelTargetModule(props, android.CommonAttributes{Name: ctx.ModuleName()}, &attrs)
|
||||
}
|
||||
|
|
|
@ -523,6 +523,7 @@ var (
|
|||
}
|
||||
|
||||
Bp2buildModuleAlwaysConvertList = []string{
|
||||
"AconfigJavaHostTest",
|
||||
// aconfig
|
||||
"libonce_cell",
|
||||
"libanyhow",
|
||||
|
@ -1002,6 +1003,7 @@ var (
|
|||
"cc_prebuilt_library_static",
|
||||
"combined_apis",
|
||||
"droiddoc_exported_dir",
|
||||
"java_aconfig_library",
|
||||
"java_import",
|
||||
"java_import_host",
|
||||
"java_sdk_library",
|
||||
|
|
|
@ -442,7 +442,8 @@ func getOtherModuleLabel(ctx BazelConversionPathContext, dep, tag string,
|
|||
otherLabel := labelFromModule(ctx, m)
|
||||
|
||||
// TODO(b/165114590): Convert tag (":name{.tag}") to corresponding Bazel implicit output targets.
|
||||
if tag != "" && m.Name() == "framework-res" {
|
||||
if (tag != "" && m.Name() == "framework-res") ||
|
||||
(tag == ".generated_srcjars" && ctx.OtherModuleType(m) == "java_aconfig_library") {
|
||||
otherLabel += tag
|
||||
}
|
||||
|
||||
|
|
|
@ -20,11 +20,13 @@ import (
|
|||
"android/soong/aconfig"
|
||||
"android/soong/android"
|
||||
"android/soong/cc"
|
||||
"android/soong/java"
|
||||
)
|
||||
|
||||
func registerAconfigModuleTypes(ctx android.RegistrationContext) {
|
||||
aconfig.RegisterBuildComponents(ctx)
|
||||
ctx.RegisterModuleType("cc_library", cc.LibraryFactory)
|
||||
ctx.RegisterModuleType("java_library", java.LibraryFactory)
|
||||
}
|
||||
|
||||
func TestAconfigDeclarations(t *testing.T) {
|
||||
|
@ -135,3 +137,101 @@ func TestCcAconfigLibrary(t *testing.T) {
|
|||
StubbedBuildDefinitions: []string{"server_configurable_flags"},
|
||||
})
|
||||
}
|
||||
|
||||
func TestJavaAconfigLibrary(t *testing.T) {
|
||||
bp := `
|
||||
aconfig_declarations {
|
||||
name: "foo_aconfig_declarations",
|
||||
srcs: [
|
||||
"foo1.aconfig",
|
||||
],
|
||||
package: "com.android.foo",
|
||||
}
|
||||
java_aconfig_library {
|
||||
name: "foo",
|
||||
aconfig_declarations: "foo_aconfig_declarations",
|
||||
test: true,
|
||||
}
|
||||
`
|
||||
expectedBazelTargets := []string{
|
||||
MakeBazelTargetNoRestrictions(
|
||||
"aconfig_declarations",
|
||||
"foo_aconfig_declarations",
|
||||
AttrNameToString{
|
||||
"srcs": `["foo1.aconfig"]`,
|
||||
"package": `"com.android.foo"`,
|
||||
},
|
||||
),
|
||||
MakeBazelTargetNoRestrictions(
|
||||
"java_aconfig_library",
|
||||
"foo",
|
||||
AttrNameToString{
|
||||
"aconfig_declarations": `":foo_aconfig_declarations"`,
|
||||
"test": `True`,
|
||||
"sdk_version": `"system_current"`,
|
||||
"target_compatible_with": `["//build/bazel/platforms/os:android"]`,
|
||||
},
|
||||
)}
|
||||
RunBp2BuildTestCase(t, registerAconfigModuleTypes, Bp2buildTestCase{
|
||||
Blueprint: bp,
|
||||
ExpectedBazelTargets: expectedBazelTargets,
|
||||
})
|
||||
}
|
||||
|
||||
func TestJavaAconfigLibraryAsTaggedOutput(t *testing.T) {
|
||||
bp := `
|
||||
aconfig_declarations {
|
||||
name: "foo_aconfig_declarations",
|
||||
srcs: [
|
||||
"foo.aconfig",
|
||||
],
|
||||
package: "com.android.foo",
|
||||
}
|
||||
java_library {
|
||||
name: "foo_library",
|
||||
srcs: [":foo_aconfig_library{.generated_srcjars}"],
|
||||
sdk_version: "current",
|
||||
bazel_module: { bp2build_available: true },
|
||||
}
|
||||
java_aconfig_library {
|
||||
name: "foo_aconfig_library",
|
||||
aconfig_declarations: "foo_aconfig_declarations",
|
||||
test: true,
|
||||
}
|
||||
`
|
||||
expectedBazelTargets := []string{
|
||||
MakeBazelTargetNoRestrictions(
|
||||
"aconfig_declarations",
|
||||
"foo_aconfig_declarations",
|
||||
AttrNameToString{
|
||||
"srcs": `["foo.aconfig"]`,
|
||||
"package": `"com.android.foo"`,
|
||||
},
|
||||
),
|
||||
MakeBazelTargetNoRestrictions(
|
||||
"java_aconfig_library",
|
||||
"foo_aconfig_library",
|
||||
AttrNameToString{
|
||||
"aconfig_declarations": `":foo_aconfig_declarations"`,
|
||||
"test": `True`,
|
||||
"sdk_version": `"system_current"`,
|
||||
"target_compatible_with": `["//build/bazel/platforms/os:android"]`,
|
||||
},
|
||||
),
|
||||
MakeBazelTargetNoRestrictions(
|
||||
"java_library",
|
||||
"foo_library",
|
||||
AttrNameToString{
|
||||
"srcs": `[":foo_aconfig_library.generated_srcjars"]`,
|
||||
"sdk_version": `"current"`,
|
||||
"target_compatible_with": `["//build/bazel/platforms/os:android"]`,
|
||||
},
|
||||
),
|
||||
MakeNeverlinkDuplicateTarget("java_library", "foo_library"),
|
||||
}
|
||||
|
||||
RunBp2BuildTestCase(t, registerAconfigModuleTypes, Bp2buildTestCase{
|
||||
Blueprint: bp,
|
||||
ExpectedBazelTargets: expectedBazelTargets,
|
||||
})
|
||||
}
|
||||
|
|
|
@ -714,6 +714,10 @@ func (j *Module) MinSdkVersion(ctx android.EarlyModuleContext) android.ApiLevel
|
|||
return j.SdkVersion(ctx).ApiLevel
|
||||
}
|
||||
|
||||
func (j *Module) GetDeviceProperties() *DeviceProperties {
|
||||
return &j.deviceProperties
|
||||
}
|
||||
|
||||
func (j *Module) MaxSdkVersion(ctx android.EarlyModuleContext) android.ApiLevel {
|
||||
if j.deviceProperties.Max_sdk_version != nil {
|
||||
return android.ApiLevelFrom(ctx, *j.deviceProperties.Max_sdk_version)
|
||||
|
|
|
@ -35,6 +35,8 @@ type GeneratedJavaLibraryCallbacks interface {
|
|||
// Called from inside GenerateAndroidBuildActions. Add the build rules to
|
||||
// make the srcjar, and return the path to it.
|
||||
GenerateSourceJarBuildActions(module *GeneratedJavaLibraryModule, ctx android.ModuleContext) android.Path
|
||||
|
||||
Bp2build(ctx android.Bp2buildMutatorContext, module *GeneratedJavaLibraryModule)
|
||||
}
|
||||
|
||||
// GeneratedJavaLibraryModuleFactory provides a utility for modules that are generated
|
||||
|
@ -108,3 +110,7 @@ func (module *GeneratedJavaLibraryModule) GenerateAndroidBuildActions(ctx androi
|
|||
module.Library.properties.Generated_srcjars = append(module.Library.properties.Generated_srcjars, srcJarPath)
|
||||
module.Library.GenerateAndroidBuildActions(ctx)
|
||||
}
|
||||
|
||||
func (module *GeneratedJavaLibraryModule) ConvertWithBp2build(ctx android.Bp2buildMutatorContext) {
|
||||
module.callbacks.Bp2build(ctx, module)
|
||||
}
|
||||
|
|
|
@ -41,6 +41,9 @@ func (callbacks *JavaGenLibTestCallbacks) GenerateSourceJarBuildActions(module *
|
|||
return android.PathForOutput(ctx, "blah.srcjar")
|
||||
}
|
||||
|
||||
func (callbacks *JavaGenLibTestCallbacks) Bp2build(ctx android.Bp2buildMutatorContext, module *GeneratedJavaLibraryModule) {
|
||||
}
|
||||
|
||||
func testGenLib(t *testing.T, errorHandler android.FixtureErrorHandler, bp string) *android.TestResult {
|
||||
return android.GroupFixturePreparers(
|
||||
PrepareForIntegrationTestWithJava,
|
||||
|
|
Loading…
Reference in a new issue