Merge "Add java_system_modules to sdk/module_exports" am: 568a82a36e
Change-Id: I74d7795e5a22c11a253508a37b2215bedcd2b778
This commit is contained in:
@@ -180,6 +180,15 @@ type SnapshotBuilder interface {
|
|||||||
// will only be used if the equivalently named non-prebuilt module is not
|
// will only be used if the equivalently named non-prebuilt module is not
|
||||||
// present.
|
// present.
|
||||||
AddPrebuiltModule(member SdkMember, moduleType string) BpModule
|
AddPrebuiltModule(member SdkMember, moduleType string) BpModule
|
||||||
|
|
||||||
|
// The property tag to use when adding a property to a BpModule that contains
|
||||||
|
// references to other sdk members. Using this will ensure that the reference
|
||||||
|
// is correctly output for both versioned and unversioned prebuilts in the
|
||||||
|
// snapshot.
|
||||||
|
//
|
||||||
|
// e.g.
|
||||||
|
// bpPropertySet.AddPropertyWithTag("libs", []string{"member1", "member2"}, builder.SdkMemberReferencePropertyTag())
|
||||||
|
SdkMemberReferencePropertyTag() BpPropertyTag
|
||||||
}
|
}
|
||||||
|
|
||||||
type BpPropertyTag interface{}
|
type BpPropertyTag interface{}
|
||||||
|
18
java/java.go
18
java/java.go
@@ -37,14 +37,7 @@ func init() {
|
|||||||
RegisterJavaBuildComponents(android.InitRegistrationContext)
|
RegisterJavaBuildComponents(android.InitRegistrationContext)
|
||||||
|
|
||||||
// Register sdk member types.
|
// Register sdk member types.
|
||||||
android.RegisterSdkMemberType(&headerLibrarySdkMemberType{
|
android.RegisterSdkMemberType(javaHeaderLibsSdkMemberType)
|
||||||
librarySdkMemberType{
|
|
||||||
android.SdkMemberTypeBase{
|
|
||||||
PropertyName: "java_header_libs",
|
|
||||||
SupportsSdk: true,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
})
|
|
||||||
|
|
||||||
android.RegisterSdkMemberType(&implLibrarySdkMemberType{
|
android.RegisterSdkMemberType(&implLibrarySdkMemberType{
|
||||||
librarySdkMemberType{
|
librarySdkMemberType{
|
||||||
@@ -1849,6 +1842,15 @@ func (mt *librarySdkMemberType) buildSnapshot(
|
|||||||
module.AddProperty("jars", []string{snapshotRelativeJavaLibPath})
|
module.AddProperty("jars", []string{snapshotRelativeJavaLibPath})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var javaHeaderLibsSdkMemberType android.SdkMemberType = &headerLibrarySdkMemberType{
|
||||||
|
librarySdkMemberType{
|
||||||
|
android.SdkMemberTypeBase{
|
||||||
|
PropertyName: "java_header_libs",
|
||||||
|
SupportsSdk: true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
type headerLibrarySdkMemberType struct {
|
type headerLibrarySdkMemberType struct {
|
||||||
librarySdkMemberType
|
librarySdkMemberType
|
||||||
}
|
}
|
||||||
|
@@ -31,6 +31,15 @@ func init() {
|
|||||||
RegisterSystemModulesBuildComponents(android.InitRegistrationContext)
|
RegisterSystemModulesBuildComponents(android.InitRegistrationContext)
|
||||||
|
|
||||||
pctx.SourcePathVariable("moduleInfoJavaPath", "build/soong/scripts/jars-to-module-info-java.sh")
|
pctx.SourcePathVariable("moduleInfoJavaPath", "build/soong/scripts/jars-to-module-info-java.sh")
|
||||||
|
|
||||||
|
// Register sdk member types.
|
||||||
|
android.RegisterSdkMemberType(&systemModulesSdkMemberType{
|
||||||
|
android.SdkMemberTypeBase{
|
||||||
|
PropertyName: "java_system_modules",
|
||||||
|
SupportsSdk: true,
|
||||||
|
TransitiveSdkMembers: true,
|
||||||
|
},
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func RegisterSystemModulesBuildComponents(ctx android.RegistrationContext) {
|
func RegisterSystemModulesBuildComponents(ctx android.RegistrationContext) {
|
||||||
@@ -66,6 +75,10 @@ var (
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
"classpath", "outDir", "workDir")
|
"classpath", "outDir", "workDir")
|
||||||
|
|
||||||
|
// Dependency tag that causes the added dependencies to be added as java_header_libs
|
||||||
|
// to the sdk/module_exports/snapshot.
|
||||||
|
systemModulesLibsTag = android.DependencyTagForSdkMemberType(javaHeaderLibsSdkMemberType)
|
||||||
)
|
)
|
||||||
|
|
||||||
func TransformJarsToSystemModules(ctx android.ModuleContext, jars android.Paths) (android.Path, android.Paths) {
|
func TransformJarsToSystemModules(ctx android.ModuleContext, jars android.Paths) (android.Path, android.Paths) {
|
||||||
@@ -107,6 +120,7 @@ func SystemModulesFactory() android.Module {
|
|||||||
type SystemModules struct {
|
type SystemModules struct {
|
||||||
android.ModuleBase
|
android.ModuleBase
|
||||||
android.DefaultableModuleBase
|
android.DefaultableModuleBase
|
||||||
|
android.SdkBase
|
||||||
|
|
||||||
properties SystemModulesProperties
|
properties SystemModulesProperties
|
||||||
|
|
||||||
@@ -125,7 +139,7 @@ type SystemModulesProperties struct {
|
|||||||
func (system *SystemModules) GenerateAndroidBuildActions(ctx android.ModuleContext) {
|
func (system *SystemModules) GenerateAndroidBuildActions(ctx android.ModuleContext) {
|
||||||
var jars android.Paths
|
var jars android.Paths
|
||||||
|
|
||||||
ctx.VisitDirectDepsWithTag(libTag, func(module android.Module) {
|
ctx.VisitDirectDepsWithTag(systemModulesLibsTag, func(module android.Module) {
|
||||||
dep, _ := module.(Dependency)
|
dep, _ := module.(Dependency)
|
||||||
jars = append(jars, dep.HeaderJars()...)
|
jars = append(jars, dep.HeaderJars()...)
|
||||||
})
|
})
|
||||||
@@ -136,7 +150,7 @@ func (system *SystemModules) GenerateAndroidBuildActions(ctx android.ModuleConte
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (system *SystemModules) DepsMutator(ctx android.BottomUpMutatorContext) {
|
func (system *SystemModules) DepsMutator(ctx android.BottomUpMutatorContext) {
|
||||||
ctx.AddVariationDependencies(nil, libTag, system.properties.Libs...)
|
ctx.AddVariationDependencies(nil, systemModulesLibsTag, system.properties.Libs...)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (system *SystemModules) AndroidMk() android.AndroidMkData {
|
func (system *SystemModules) AndroidMk() android.AndroidMkData {
|
||||||
@@ -173,6 +187,7 @@ func systemModulesImportFactory() android.Module {
|
|||||||
android.InitPrebuiltModule(module, &module.properties.Libs)
|
android.InitPrebuiltModule(module, &module.properties.Libs)
|
||||||
android.InitAndroidArchModule(module, android.HostAndDeviceSupported, android.MultilibCommon)
|
android.InitAndroidArchModule(module, android.HostAndDeviceSupported, android.MultilibCommon)
|
||||||
android.InitDefaultableModule(module)
|
android.InitDefaultableModule(module)
|
||||||
|
android.InitSdkAwareModule(module)
|
||||||
return module
|
return module
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -188,3 +203,37 @@ func (system *systemModulesImport) Name() string {
|
|||||||
func (system *systemModulesImport) Prebuilt() *android.Prebuilt {
|
func (system *systemModulesImport) Prebuilt() *android.Prebuilt {
|
||||||
return &system.prebuilt
|
return &system.prebuilt
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type systemModulesSdkMemberType struct {
|
||||||
|
android.SdkMemberTypeBase
|
||||||
|
}
|
||||||
|
|
||||||
|
func (mt *systemModulesSdkMemberType) AddDependencies(mctx android.BottomUpMutatorContext, dependencyTag blueprint.DependencyTag, names []string) {
|
||||||
|
mctx.AddVariationDependencies(nil, dependencyTag, names...)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (mt *systemModulesSdkMemberType) IsInstance(module android.Module) bool {
|
||||||
|
if _, ok := module.(*SystemModules); ok {
|
||||||
|
// A prebuilt system module cannot be added as a member of an sdk because the source and
|
||||||
|
// snapshot instances would conflict.
|
||||||
|
_, ok := module.(*systemModulesImport)
|
||||||
|
return !ok
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
func (mt *systemModulesSdkMemberType) BuildSnapshot(sdkModuleContext android.ModuleContext, builder android.SnapshotBuilder, member android.SdkMember) {
|
||||||
|
variants := member.Variants()
|
||||||
|
if len(variants) != 1 {
|
||||||
|
sdkModuleContext.ModuleErrorf("sdk contains %d variants of member %q but only one is allowed", len(variants), member.Name())
|
||||||
|
for _, variant := range variants {
|
||||||
|
sdkModuleContext.ModuleErrorf(" %q", variant)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
variant := variants[0]
|
||||||
|
systemModule := variant.(*SystemModules)
|
||||||
|
|
||||||
|
pbm := builder.AddPrebuiltModule(member, "java_system_modules_import")
|
||||||
|
// Add the references to the libraries that form the system module.
|
||||||
|
pbm.AddPropertyWithTag("libs", systemModule.properties.Libs, builder.SdkMemberReferencePropertyTag())
|
||||||
|
}
|
||||||
|
@@ -583,3 +583,136 @@ module_exports_snapshot {
|
|||||||
checkMergeZip(".intermediates/myexports/linux_glibc_common/tmp/java/myjavaapistubs_stubs_sources.zip"),
|
checkMergeZip(".intermediates/myexports/linux_glibc_common/tmp/java/myjavaapistubs_stubs_sources.zip"),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestSnapshotWithJavaSystemModules(t *testing.T) {
|
||||||
|
result := testSdkWithJava(t, `
|
||||||
|
sdk {
|
||||||
|
name: "mysdk",
|
||||||
|
java_system_modules: ["my-system-modules"],
|
||||||
|
}
|
||||||
|
|
||||||
|
java_system_modules {
|
||||||
|
name: "my-system-modules",
|
||||||
|
libs: ["system-module"],
|
||||||
|
}
|
||||||
|
|
||||||
|
java_library {
|
||||||
|
name: "system-module",
|
||||||
|
srcs: ["Test.java"],
|
||||||
|
sdk_version: "none",
|
||||||
|
system_modules: "none",
|
||||||
|
}
|
||||||
|
`)
|
||||||
|
|
||||||
|
result.CheckSnapshot("mysdk", "android_common", "",
|
||||||
|
checkAndroidBpContents(`
|
||||||
|
// This is auto-generated. DO NOT EDIT.
|
||||||
|
|
||||||
|
java_import {
|
||||||
|
name: "mysdk_system-module@current",
|
||||||
|
sdk_member_name: "system-module",
|
||||||
|
jars: ["java/system-module.jar"],
|
||||||
|
}
|
||||||
|
|
||||||
|
java_import {
|
||||||
|
name: "system-module",
|
||||||
|
prefer: false,
|
||||||
|
jars: ["java/system-module.jar"],
|
||||||
|
}
|
||||||
|
|
||||||
|
java_system_modules_import {
|
||||||
|
name: "mysdk_my-system-modules@current",
|
||||||
|
sdk_member_name: "my-system-modules",
|
||||||
|
libs: ["mysdk_system-module@current"],
|
||||||
|
}
|
||||||
|
|
||||||
|
java_system_modules_import {
|
||||||
|
name: "my-system-modules",
|
||||||
|
prefer: false,
|
||||||
|
libs: ["system-module"],
|
||||||
|
}
|
||||||
|
|
||||||
|
sdk_snapshot {
|
||||||
|
name: "mysdk@current",
|
||||||
|
java_system_modules: ["mysdk_my-system-modules@current"],
|
||||||
|
}
|
||||||
|
`),
|
||||||
|
checkAllCopyRules(".intermediates/system-module/android_common/turbine-combined/system-module.jar -> java/system-module.jar"),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestHostSnapshotWithJavaSystemModules(t *testing.T) {
|
||||||
|
// b/145598135 - Generating host snapshots for anything other than linux is not supported.
|
||||||
|
SkipIfNotLinux(t)
|
||||||
|
|
||||||
|
result := testSdkWithJava(t, `
|
||||||
|
sdk {
|
||||||
|
name: "mysdk",
|
||||||
|
device_supported: false,
|
||||||
|
host_supported: true,
|
||||||
|
java_system_modules: ["my-system-modules"],
|
||||||
|
}
|
||||||
|
|
||||||
|
java_system_modules {
|
||||||
|
name: "my-system-modules",
|
||||||
|
device_supported: false,
|
||||||
|
host_supported: true,
|
||||||
|
libs: ["system-module"],
|
||||||
|
}
|
||||||
|
|
||||||
|
java_library {
|
||||||
|
name: "system-module",
|
||||||
|
device_supported: false,
|
||||||
|
host_supported: true,
|
||||||
|
srcs: ["Test.java"],
|
||||||
|
sdk_version: "none",
|
||||||
|
system_modules: "none",
|
||||||
|
}
|
||||||
|
`)
|
||||||
|
|
||||||
|
result.CheckSnapshot("mysdk", "linux_glibc_common", "",
|
||||||
|
checkAndroidBpContents(`
|
||||||
|
// This is auto-generated. DO NOT EDIT.
|
||||||
|
|
||||||
|
java_import {
|
||||||
|
name: "mysdk_system-module@current",
|
||||||
|
sdk_member_name: "system-module",
|
||||||
|
device_supported: false,
|
||||||
|
host_supported: true,
|
||||||
|
jars: ["java/system-module.jar"],
|
||||||
|
}
|
||||||
|
|
||||||
|
java_import {
|
||||||
|
name: "system-module",
|
||||||
|
prefer: false,
|
||||||
|
device_supported: false,
|
||||||
|
host_supported: true,
|
||||||
|
jars: ["java/system-module.jar"],
|
||||||
|
}
|
||||||
|
|
||||||
|
java_system_modules_import {
|
||||||
|
name: "mysdk_my-system-modules@current",
|
||||||
|
sdk_member_name: "my-system-modules",
|
||||||
|
device_supported: false,
|
||||||
|
host_supported: true,
|
||||||
|
libs: ["mysdk_system-module@current"],
|
||||||
|
}
|
||||||
|
|
||||||
|
java_system_modules_import {
|
||||||
|
name: "my-system-modules",
|
||||||
|
prefer: false,
|
||||||
|
device_supported: false,
|
||||||
|
host_supported: true,
|
||||||
|
libs: ["system-module"],
|
||||||
|
}
|
||||||
|
|
||||||
|
sdk_snapshot {
|
||||||
|
name: "mysdk@current",
|
||||||
|
device_supported: false,
|
||||||
|
host_supported: true,
|
||||||
|
java_system_modules: ["mysdk_my-system-modules@current"],
|
||||||
|
}
|
||||||
|
`),
|
||||||
|
checkAllCopyRules(".intermediates/system-module/linux_glibc_common/javac/system-module.jar -> java/system-module.jar"),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
@@ -72,6 +72,7 @@ func testSdkContext(bp string, fs map[string][]byte) (*android.TestContext, andr
|
|||||||
java.RegisterJavaBuildComponents(ctx)
|
java.RegisterJavaBuildComponents(ctx)
|
||||||
java.RegisterAppBuildComponents(ctx)
|
java.RegisterAppBuildComponents(ctx)
|
||||||
java.RegisterStubsBuildComponents(ctx)
|
java.RegisterStubsBuildComponents(ctx)
|
||||||
|
java.RegisterSystemModulesBuildComponents(ctx)
|
||||||
|
|
||||||
// from cc package
|
// from cc package
|
||||||
cc.RegisterRequiredBuildComponentsForTest(ctx)
|
cc.RegisterRequiredBuildComponentsForTest(ctx)
|
||||||
|
@@ -291,13 +291,17 @@ func (s *sdk) buildSnapshot(ctx android.ModuleContext) android.OutputPath {
|
|||||||
return outputZipFile
|
return outputZipFile
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type propertyTag struct {
|
||||||
|
name string
|
||||||
|
}
|
||||||
|
|
||||||
|
var sdkMemberReferencePropertyTag = propertyTag{"sdkMemberReferencePropertyTag"}
|
||||||
|
|
||||||
type unversionedToVersionedTransformation struct {
|
type unversionedToVersionedTransformation struct {
|
||||||
identityTransformation
|
identityTransformation
|
||||||
builder *snapshotBuilder
|
builder *snapshotBuilder
|
||||||
}
|
}
|
||||||
|
|
||||||
var _ bpTransformer = (*unversionedToVersionedTransformation)(nil)
|
|
||||||
|
|
||||||
func (t unversionedToVersionedTransformation) transformModule(module *bpModule) *bpModule {
|
func (t unversionedToVersionedTransformation) transformModule(module *bpModule) *bpModule {
|
||||||
// Use a versioned name for the module but remember the original name for the
|
// Use a versioned name for the module but remember the original name for the
|
||||||
// snapshot.
|
// snapshot.
|
||||||
@@ -307,6 +311,14 @@ func (t unversionedToVersionedTransformation) transformModule(module *bpModule)
|
|||||||
return module
|
return module
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (t unversionedToVersionedTransformation) transformProperty(name string, value interface{}, tag android.BpPropertyTag) (interface{}, android.BpPropertyTag) {
|
||||||
|
if tag == sdkMemberReferencePropertyTag {
|
||||||
|
return t.builder.versionedSdkMemberNames(value.([]string)), tag
|
||||||
|
} else {
|
||||||
|
return value, tag
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func generateBpContents(contents *generatedContents, bpFile *bpFile) {
|
func generateBpContents(contents *generatedContents, bpFile *bpFile) {
|
||||||
contents.Printfln("// This is auto-generated. DO NOT EDIT.")
|
contents.Printfln("// This is auto-generated. DO NOT EDIT.")
|
||||||
for _, bpModule := range bpFile.order {
|
for _, bpModule := range bpFile.order {
|
||||||
@@ -453,6 +465,10 @@ func addHostDeviceSupportedProperties(module *android.ModuleBase, bpModule *bpMo
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *snapshotBuilder) SdkMemberReferencePropertyTag() android.BpPropertyTag {
|
||||||
|
return sdkMemberReferencePropertyTag
|
||||||
|
}
|
||||||
|
|
||||||
// Get a versioned name appropriate for the SDK snapshot version being taken.
|
// Get a versioned name appropriate for the SDK snapshot version being taken.
|
||||||
func (s *snapshotBuilder) versionedSdkMemberName(unversionedName string) string {
|
func (s *snapshotBuilder) versionedSdkMemberName(unversionedName string) string {
|
||||||
return versionedSdkMemberName(s.ctx, unversionedName, s.version)
|
return versionedSdkMemberName(s.ctx, unversionedName, s.version)
|
||||||
|
Reference in New Issue
Block a user