Merge "Copy shared_libs and system_shared_libs to module snapshot"
This commit is contained in:
@@ -186,9 +186,33 @@ type SnapshotBuilder interface {
|
|||||||
// is correctly output for both versioned and unversioned prebuilts in the
|
// is correctly output for both versioned and unversioned prebuilts in the
|
||||||
// snapshot.
|
// snapshot.
|
||||||
//
|
//
|
||||||
|
// "required: true" means that the property must only contain references
|
||||||
|
// to other members of the sdk. Passing a reference to a module that is not a
|
||||||
|
// member of the sdk will result in a build error.
|
||||||
|
//
|
||||||
|
// "required: false" means that the property can contain references to modules
|
||||||
|
// that are either members or not members of the sdk. If a reference is to a
|
||||||
|
// module that is a non member then the reference is left unchanged, i.e. it
|
||||||
|
// is not transformed as references to members are.
|
||||||
|
//
|
||||||
|
// The handling of the member names is dependent on whether it is an internal or
|
||||||
|
// exported member. An exported member is one whose name is specified in one of
|
||||||
|
// the member type specific properties. An internal member is one that is added
|
||||||
|
// due to being a part of an exported (or other internal) member and is not itself
|
||||||
|
// an exported member.
|
||||||
|
//
|
||||||
|
// Member names are handled as follows:
|
||||||
|
// * When creating the unversioned form of the module the name is left unchecked
|
||||||
|
// unless the member is internal in which case it is transformed into an sdk
|
||||||
|
// specific name, i.e. by prefixing with the sdk name.
|
||||||
|
//
|
||||||
|
// * When creating the versioned form of the module the name is transformed into
|
||||||
|
// a versioned sdk specific name, i.e. by prefixing with the sdk name and
|
||||||
|
// suffixing with the version.
|
||||||
|
//
|
||||||
// e.g.
|
// e.g.
|
||||||
// bpPropertySet.AddPropertyWithTag("libs", []string{"member1", "member2"}, builder.SdkMemberReferencePropertyTag())
|
// bpPropertySet.AddPropertyWithTag("libs", []string{"member1", "member2"}, builder.SdkMemberReferencePropertyTag(true))
|
||||||
SdkMemberReferencePropertyTag() BpPropertyTag
|
SdkMemberReferencePropertyTag(required bool) BpPropertyTag
|
||||||
}
|
}
|
||||||
|
|
||||||
type BpPropertyTag interface{}
|
type BpPropertyTag interface{}
|
||||||
|
@@ -95,6 +95,16 @@ type nativeBinaryInfoProperties struct {
|
|||||||
|
|
||||||
// outputFile is not exported as it is always arch specific.
|
// outputFile is not exported as it is always arch specific.
|
||||||
outputFile android.Path
|
outputFile android.Path
|
||||||
|
|
||||||
|
// The set of shared libraries
|
||||||
|
//
|
||||||
|
// This field is exported as its contents may not be arch specific.
|
||||||
|
SharedLibs []string
|
||||||
|
|
||||||
|
// The set of system shared libraries
|
||||||
|
//
|
||||||
|
// This field is exported as its contents may not be arch specific.
|
||||||
|
SystemSharedLibs []string
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *nativeBinaryInfoProperties) PopulateFromVariant(variant android.SdkAware) {
|
func (p *nativeBinaryInfoProperties) PopulateFromVariant(variant android.SdkAware) {
|
||||||
@@ -102,6 +112,14 @@ func (p *nativeBinaryInfoProperties) PopulateFromVariant(variant android.SdkAwar
|
|||||||
|
|
||||||
p.archType = ccModule.Target().Arch.ArchType.String()
|
p.archType = ccModule.Target().Arch.ArchType.String()
|
||||||
p.outputFile = ccModule.OutputFile().Path()
|
p.outputFile = ccModule.OutputFile().Path()
|
||||||
|
|
||||||
|
if ccModule.linker != nil {
|
||||||
|
specifiedDeps := specifiedDeps{}
|
||||||
|
specifiedDeps = ccModule.linker.linkerSpecifiedDeps(specifiedDeps)
|
||||||
|
|
||||||
|
p.SharedLibs = specifiedDeps.sharedLibs
|
||||||
|
p.SystemSharedLibs = specifiedDeps.systemSharedLibs
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *nativeBinaryInfoProperties) AddToPropertySet(sdkModuleContext android.ModuleContext, builder android.SnapshotBuilder, propertySet android.BpPropertySet) {
|
func (p *nativeBinaryInfoProperties) AddToPropertySet(sdkModuleContext android.ModuleContext, builder android.SnapshotBuilder, propertySet android.BpPropertySet) {
|
||||||
@@ -114,4 +132,12 @@ func (p *nativeBinaryInfoProperties) AddToPropertySet(sdkModuleContext android.M
|
|||||||
|
|
||||||
builder.CopyToSnapshot(p.outputFile, nativeBinaryPathFor(*p))
|
builder.CopyToSnapshot(p.outputFile, nativeBinaryPathFor(*p))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if len(p.SharedLibs) > 0 {
|
||||||
|
propertySet.AddPropertyWithTag("shared_libs", p.SharedLibs, builder.SdkMemberReferencePropertyTag(false))
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(p.SystemSharedLibs) > 0 {
|
||||||
|
propertySet.AddPropertyWithTag("system_shared_libs", p.SystemSharedLibs, builder.SdkMemberReferencePropertyTag(false))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
9
cc/cc.go
9
cc/cc.go
@@ -370,6 +370,15 @@ type linker interface {
|
|||||||
|
|
||||||
nativeCoverage() bool
|
nativeCoverage() bool
|
||||||
coverageOutputFilePath() android.OptionalPath
|
coverageOutputFilePath() android.OptionalPath
|
||||||
|
|
||||||
|
// Get the deps that have been explicitly specified in the properties.
|
||||||
|
// Only updates the
|
||||||
|
linkerSpecifiedDeps(specifiedDeps specifiedDeps) specifiedDeps
|
||||||
|
}
|
||||||
|
|
||||||
|
type specifiedDeps struct {
|
||||||
|
sharedLibs []string
|
||||||
|
systemSharedLibs []string
|
||||||
}
|
}
|
||||||
|
|
||||||
type installer interface {
|
type installer interface {
|
||||||
|
@@ -817,6 +817,23 @@ func (library *libraryDecorator) linkerDeps(ctx DepsContext, deps Deps) Deps {
|
|||||||
return deps
|
return deps
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (library *libraryDecorator) linkerSpecifiedDeps(specifiedDeps specifiedDeps) specifiedDeps {
|
||||||
|
specifiedDeps = library.baseLinker.linkerSpecifiedDeps(specifiedDeps)
|
||||||
|
var properties StaticOrSharedProperties
|
||||||
|
if library.static() {
|
||||||
|
properties = library.StaticProperties.Static
|
||||||
|
} else if library.shared() {
|
||||||
|
properties = library.SharedProperties.Shared
|
||||||
|
}
|
||||||
|
|
||||||
|
specifiedDeps.sharedLibs = append(specifiedDeps.sharedLibs, properties.Shared_libs...)
|
||||||
|
specifiedDeps.systemSharedLibs = append(specifiedDeps.systemSharedLibs, properties.System_shared_libs...)
|
||||||
|
|
||||||
|
specifiedDeps.sharedLibs = android.FirstUniqueStrings(specifiedDeps.sharedLibs)
|
||||||
|
specifiedDeps.systemSharedLibs = android.FirstUniqueStrings(specifiedDeps.systemSharedLibs)
|
||||||
|
return specifiedDeps
|
||||||
|
}
|
||||||
|
|
||||||
func (library *libraryDecorator) linkStatic(ctx ModuleContext,
|
func (library *libraryDecorator) linkStatic(ctx ModuleContext,
|
||||||
flags Flags, deps PathDeps, objs Objects) android.Path {
|
flags Flags, deps PathDeps, objs Objects) android.Path {
|
||||||
|
|
||||||
|
@@ -19,6 +19,7 @@ import (
|
|||||||
|
|
||||||
"android/soong/android"
|
"android/soong/android"
|
||||||
"github.com/google/blueprint"
|
"github.com/google/blueprint"
|
||||||
|
"github.com/google/blueprint/proptools"
|
||||||
)
|
)
|
||||||
|
|
||||||
// This file contains support for using cc library modules within an sdk.
|
// This file contains support for using cc library modules within an sdk.
|
||||||
@@ -108,8 +109,11 @@ func (mt *librarySdkMemberType) AddPrebuiltModule(sdkModuleContext android.Modul
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (mt *librarySdkMemberType) FinalizeModule(sdkModuleContext android.ModuleContext, builder android.SnapshotBuilder, member android.SdkMember, bpModule android.BpModule) {
|
func (mt *librarySdkMemberType) FinalizeModule(sdkModuleContext android.ModuleContext, builder android.SnapshotBuilder, member android.SdkMember, bpModule android.BpModule) {
|
||||||
bpModule.AddProperty("stl", "none")
|
ccModule := (member.Variants()[0]).(*Module)
|
||||||
bpModule.AddProperty("system_shared_libs", []string{})
|
stl := ccModule.stl.Properties.Stl
|
||||||
|
if stl != nil {
|
||||||
|
bpModule.AddProperty("stl", proptools.String(stl))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (mt *librarySdkMemberType) CreateVariantPropertiesStruct() android.SdkMemberProperties {
|
func (mt *librarySdkMemberType) CreateVariantPropertiesStruct() android.SdkMemberProperties {
|
||||||
@@ -193,6 +197,14 @@ func addPossiblyArchSpecificProperties(sdkModuleContext android.ModuleContext, b
|
|||||||
outputProperties.AddProperty("srcs", []string{nativeLibraryPath})
|
outputProperties.AddProperty("srcs", []string{nativeLibraryPath})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if len(libInfo.SharedLibs) > 0 {
|
||||||
|
outputProperties.AddPropertyWithTag("shared_libs", libInfo.SharedLibs, builder.SdkMemberReferencePropertyTag(false))
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(libInfo.SystemSharedLibs) > 0 {
|
||||||
|
outputProperties.AddPropertyWithTag("system_shared_libs", libInfo.SystemSharedLibs, builder.SdkMemberReferencePropertyTag(false))
|
||||||
|
}
|
||||||
|
|
||||||
// Map from property name to the include dirs to add to the prebuilt module in the snapshot.
|
// Map from property name to the include dirs to add to the prebuilt module in the snapshot.
|
||||||
includeDirs := make(map[string][]string)
|
includeDirs := make(map[string][]string)
|
||||||
|
|
||||||
@@ -299,6 +311,16 @@ type nativeLibInfoProperties struct {
|
|||||||
// This field is exported as its contents may not be arch specific.
|
// This field is exported as its contents may not be arch specific.
|
||||||
ExportedFlags []string
|
ExportedFlags []string
|
||||||
|
|
||||||
|
// The set of shared libraries
|
||||||
|
//
|
||||||
|
// This field is exported as its contents may not be arch specific.
|
||||||
|
SharedLibs []string
|
||||||
|
|
||||||
|
// The set of system shared libraries
|
||||||
|
//
|
||||||
|
// This field is exported as its contents may not be arch specific.
|
||||||
|
SystemSharedLibs []string
|
||||||
|
|
||||||
// outputFile is not exported as it is always arch specific.
|
// outputFile is not exported as it is always arch specific.
|
||||||
outputFile android.Path
|
outputFile android.Path
|
||||||
}
|
}
|
||||||
@@ -323,6 +345,13 @@ func (p *nativeLibInfoProperties) PopulateFromVariant(variant android.SdkAware)
|
|||||||
p.exportedGeneratedIncludeDirs = exportedGeneratedIncludeDirs
|
p.exportedGeneratedIncludeDirs = exportedGeneratedIncludeDirs
|
||||||
p.ExportedSystemIncludeDirs = ccModule.ExportedSystemIncludeDirs()
|
p.ExportedSystemIncludeDirs = ccModule.ExportedSystemIncludeDirs()
|
||||||
p.ExportedFlags = ccModule.ExportedFlags()
|
p.ExportedFlags = ccModule.ExportedFlags()
|
||||||
|
if ccModule.linker != nil {
|
||||||
|
specifiedDeps := specifiedDeps{}
|
||||||
|
specifiedDeps = ccModule.linker.linkerSpecifiedDeps(specifiedDeps)
|
||||||
|
|
||||||
|
p.SharedLibs = specifiedDeps.sharedLibs
|
||||||
|
p.SystemSharedLibs = specifiedDeps.systemSharedLibs
|
||||||
|
}
|
||||||
p.exportedGeneratedHeaders = ccModule.ExportedGeneratedHeaders()
|
p.exportedGeneratedHeaders = ccModule.ExportedGeneratedHeaders()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -490,6 +490,12 @@ func (linker *baseLinker) link(ctx ModuleContext,
|
|||||||
panic(fmt.Errorf("baseLinker doesn't know how to link"))
|
panic(fmt.Errorf("baseLinker doesn't know how to link"))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (linker *baseLinker) linkerSpecifiedDeps(specifiedDeps specifiedDeps) specifiedDeps {
|
||||||
|
specifiedDeps.sharedLibs = append(specifiedDeps.sharedLibs, linker.Properties.Shared_libs...)
|
||||||
|
specifiedDeps.systemSharedLibs = append(specifiedDeps.systemSharedLibs, linker.Properties.System_shared_libs...)
|
||||||
|
return specifiedDeps
|
||||||
|
}
|
||||||
|
|
||||||
// Injecting version symbols
|
// Injecting version symbols
|
||||||
// Some host modules want a version number, but we don't want to rebuild it every time. Optionally add a step
|
// Some host modules want a version number, but we don't want to rebuild it every time. Optionally add a step
|
||||||
// after linking that injects a constant placeholder with the current version number.
|
// after linking that injects a constant placeholder with the current version number.
|
||||||
|
@@ -255,5 +255,5 @@ func (mt *systemModulesSdkMemberType) BuildSnapshot(sdkModuleContext android.Mod
|
|||||||
|
|
||||||
pbm := builder.AddPrebuiltModule(member, "java_system_modules_import")
|
pbm := builder.AddPrebuiltModule(member, "java_system_modules_import")
|
||||||
// Add the references to the libraries that form the system module.
|
// Add the references to the libraries that form the system module.
|
||||||
pbm.AddPropertyWithTag("libs", systemModule.properties.Libs, builder.SdkMemberReferencePropertyTag())
|
pbm.AddPropertyWithTag("libs", systemModule.properties.Libs, builder.SdkMemberReferencePropertyTag(true))
|
||||||
}
|
}
|
||||||
|
@@ -309,7 +309,6 @@ cc_prebuilt_library_shared {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
stl: "none",
|
stl: "none",
|
||||||
system_shared_libs: [],
|
|
||||||
}
|
}
|
||||||
|
|
||||||
cc_prebuilt_library_shared {
|
cc_prebuilt_library_shared {
|
||||||
@@ -326,7 +325,6 @@ cc_prebuilt_library_shared {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
stl: "none",
|
stl: "none",
|
||||||
system_shared_libs: [],
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sdk_snapshot {
|
sdk_snapshot {
|
||||||
@@ -555,7 +553,6 @@ cc_prebuilt_library_shared {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
stl: "none",
|
stl: "none",
|
||||||
system_shared_libs: [],
|
|
||||||
}
|
}
|
||||||
|
|
||||||
cc_prebuilt_library_shared {
|
cc_prebuilt_library_shared {
|
||||||
@@ -577,7 +574,6 @@ cc_prebuilt_library_shared {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
stl: "none",
|
stl: "none",
|
||||||
system_shared_libs: [],
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sdk_snapshot {
|
sdk_snapshot {
|
||||||
@@ -599,6 +595,189 @@ include/Test.h -> include/include/Test.h
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestSnapshotWithCcSharedLibrarySharedLibs(t *testing.T) {
|
||||||
|
result := testSdkWithCc(t, `
|
||||||
|
sdk {
|
||||||
|
name: "mysdk",
|
||||||
|
native_shared_libs: [
|
||||||
|
"mynativelib",
|
||||||
|
"myothernativelib",
|
||||||
|
"mysystemnativelib",
|
||||||
|
],
|
||||||
|
}
|
||||||
|
|
||||||
|
cc_library {
|
||||||
|
name: "mysystemnativelib",
|
||||||
|
srcs: [
|
||||||
|
"Test.cpp",
|
||||||
|
],
|
||||||
|
system_shared_libs: [],
|
||||||
|
stl: "none",
|
||||||
|
}
|
||||||
|
|
||||||
|
cc_library_shared {
|
||||||
|
name: "myothernativelib",
|
||||||
|
srcs: [
|
||||||
|
"Test.cpp",
|
||||||
|
],
|
||||||
|
system_shared_libs: [
|
||||||
|
// A reference to a library that is not an sdk member. Uses libm as that
|
||||||
|
// is in the default set of modules available to this test and so is available
|
||||||
|
// both here and also when the generated Android.bp file is tested in
|
||||||
|
// CheckSnapshot(). This ensures that the system_shared_libs property correctly
|
||||||
|
// handles references to modules that are not sdk members.
|
||||||
|
"libm",
|
||||||
|
],
|
||||||
|
stl: "none",
|
||||||
|
}
|
||||||
|
|
||||||
|
cc_library {
|
||||||
|
name: "mynativelib",
|
||||||
|
srcs: [
|
||||||
|
"Test.cpp",
|
||||||
|
],
|
||||||
|
shared_libs: [
|
||||||
|
// A reference to another sdk member.
|
||||||
|
"myothernativelib",
|
||||||
|
],
|
||||||
|
target: {
|
||||||
|
android: {
|
||||||
|
shared: {
|
||||||
|
shared_libs: [
|
||||||
|
// A reference to a library that is not an sdk member. The libc library
|
||||||
|
// is used here to check that the shared_libs property is handled correctly
|
||||||
|
// in a similar way to how libm is used to check system_shared_libs above.
|
||||||
|
"libc",
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
system_shared_libs: [],
|
||||||
|
stl: "none",
|
||||||
|
}
|
||||||
|
`)
|
||||||
|
|
||||||
|
result.CheckSnapshot("mysdk", "",
|
||||||
|
checkAndroidBpContents(`
|
||||||
|
// This is auto-generated. DO NOT EDIT.
|
||||||
|
|
||||||
|
cc_prebuilt_library_shared {
|
||||||
|
name: "mysdk_mynativelib@current",
|
||||||
|
sdk_member_name: "mynativelib",
|
||||||
|
installable: false,
|
||||||
|
shared_libs: [
|
||||||
|
"mysdk_myothernativelib@current",
|
||||||
|
"libc",
|
||||||
|
],
|
||||||
|
arch: {
|
||||||
|
arm64: {
|
||||||
|
srcs: ["arm64/lib/mynativelib.so"],
|
||||||
|
},
|
||||||
|
arm: {
|
||||||
|
srcs: ["arm/lib/mynativelib.so"],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
stl: "none",
|
||||||
|
}
|
||||||
|
|
||||||
|
cc_prebuilt_library_shared {
|
||||||
|
name: "mynativelib",
|
||||||
|
prefer: false,
|
||||||
|
shared_libs: [
|
||||||
|
"myothernativelib",
|
||||||
|
"libc",
|
||||||
|
],
|
||||||
|
arch: {
|
||||||
|
arm64: {
|
||||||
|
srcs: ["arm64/lib/mynativelib.so"],
|
||||||
|
},
|
||||||
|
arm: {
|
||||||
|
srcs: ["arm/lib/mynativelib.so"],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
stl: "none",
|
||||||
|
}
|
||||||
|
|
||||||
|
cc_prebuilt_library_shared {
|
||||||
|
name: "mysdk_myothernativelib@current",
|
||||||
|
sdk_member_name: "myothernativelib",
|
||||||
|
installable: false,
|
||||||
|
system_shared_libs: ["libm"],
|
||||||
|
arch: {
|
||||||
|
arm64: {
|
||||||
|
srcs: ["arm64/lib/myothernativelib.so"],
|
||||||
|
},
|
||||||
|
arm: {
|
||||||
|
srcs: ["arm/lib/myothernativelib.so"],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
stl: "none",
|
||||||
|
}
|
||||||
|
|
||||||
|
cc_prebuilt_library_shared {
|
||||||
|
name: "myothernativelib",
|
||||||
|
prefer: false,
|
||||||
|
system_shared_libs: ["libm"],
|
||||||
|
arch: {
|
||||||
|
arm64: {
|
||||||
|
srcs: ["arm64/lib/myothernativelib.so"],
|
||||||
|
},
|
||||||
|
arm: {
|
||||||
|
srcs: ["arm/lib/myothernativelib.so"],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
stl: "none",
|
||||||
|
}
|
||||||
|
|
||||||
|
cc_prebuilt_library_shared {
|
||||||
|
name: "mysdk_mysystemnativelib@current",
|
||||||
|
sdk_member_name: "mysystemnativelib",
|
||||||
|
installable: false,
|
||||||
|
arch: {
|
||||||
|
arm64: {
|
||||||
|
srcs: ["arm64/lib/mysystemnativelib.so"],
|
||||||
|
},
|
||||||
|
arm: {
|
||||||
|
srcs: ["arm/lib/mysystemnativelib.so"],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
stl: "none",
|
||||||
|
}
|
||||||
|
|
||||||
|
cc_prebuilt_library_shared {
|
||||||
|
name: "mysystemnativelib",
|
||||||
|
prefer: false,
|
||||||
|
arch: {
|
||||||
|
arm64: {
|
||||||
|
srcs: ["arm64/lib/mysystemnativelib.so"],
|
||||||
|
},
|
||||||
|
arm: {
|
||||||
|
srcs: ["arm/lib/mysystemnativelib.so"],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
stl: "none",
|
||||||
|
}
|
||||||
|
|
||||||
|
sdk_snapshot {
|
||||||
|
name: "mysdk@current",
|
||||||
|
native_shared_libs: [
|
||||||
|
"mysdk_mynativelib@current",
|
||||||
|
"mysdk_myothernativelib@current",
|
||||||
|
"mysdk_mysystemnativelib@current",
|
||||||
|
],
|
||||||
|
}
|
||||||
|
`),
|
||||||
|
checkAllCopyRules(`
|
||||||
|
.intermediates/mynativelib/android_arm64_armv8-a_shared/mynativelib.so -> arm64/lib/mynativelib.so
|
||||||
|
.intermediates/mynativelib/android_arm_armv7-a-neon_shared/mynativelib.so -> arm/lib/mynativelib.so
|
||||||
|
.intermediates/myothernativelib/android_arm64_armv8-a_shared/myothernativelib.so -> arm64/lib/myothernativelib.so
|
||||||
|
.intermediates/myothernativelib/android_arm_armv7-a-neon_shared/myothernativelib.so -> arm/lib/myothernativelib.so
|
||||||
|
.intermediates/mysystemnativelib/android_arm64_armv8-a_shared/mysystemnativelib.so -> arm64/lib/mysystemnativelib.so
|
||||||
|
.intermediates/mysystemnativelib/android_arm_armv7-a-neon_shared/mysystemnativelib.so -> arm/lib/mysystemnativelib.so
|
||||||
|
`),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
func TestHostSnapshotWithCcSharedLibrary(t *testing.T) {
|
func TestHostSnapshotWithCcSharedLibrary(t *testing.T) {
|
||||||
// b/145598135 - Generating host snapshots for anything other than linux is not supported.
|
// b/145598135 - Generating host snapshots for anything other than linux is not supported.
|
||||||
SkipIfNotLinux(t)
|
SkipIfNotLinux(t)
|
||||||
@@ -652,7 +831,6 @@ cc_prebuilt_library_shared {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
stl: "none",
|
stl: "none",
|
||||||
system_shared_libs: [],
|
|
||||||
}
|
}
|
||||||
|
|
||||||
cc_prebuilt_library_shared {
|
cc_prebuilt_library_shared {
|
||||||
@@ -673,7 +851,6 @@ cc_prebuilt_library_shared {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
stl: "none",
|
stl: "none",
|
||||||
system_shared_libs: [],
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sdk_snapshot {
|
sdk_snapshot {
|
||||||
@@ -753,7 +930,6 @@ cc_prebuilt_library_shared {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
stl: "none",
|
stl: "none",
|
||||||
system_shared_libs: [],
|
|
||||||
}
|
}
|
||||||
|
|
||||||
cc_prebuilt_library_shared {
|
cc_prebuilt_library_shared {
|
||||||
@@ -773,7 +949,6 @@ cc_prebuilt_library_shared {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
stl: "none",
|
stl: "none",
|
||||||
system_shared_libs: [],
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sdk_snapshot {
|
sdk_snapshot {
|
||||||
@@ -833,7 +1008,6 @@ cc_prebuilt_library_static {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
stl: "none",
|
stl: "none",
|
||||||
system_shared_libs: [],
|
|
||||||
}
|
}
|
||||||
|
|
||||||
cc_prebuilt_library_static {
|
cc_prebuilt_library_static {
|
||||||
@@ -851,7 +1025,6 @@ cc_prebuilt_library_static {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
stl: "none",
|
stl: "none",
|
||||||
system_shared_libs: [],
|
|
||||||
}
|
}
|
||||||
|
|
||||||
module_exports_snapshot {
|
module_exports_snapshot {
|
||||||
@@ -924,7 +1097,6 @@ cc_prebuilt_library_static {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
stl: "none",
|
stl: "none",
|
||||||
system_shared_libs: [],
|
|
||||||
}
|
}
|
||||||
|
|
||||||
cc_prebuilt_library_static {
|
cc_prebuilt_library_static {
|
||||||
@@ -944,7 +1116,6 @@ cc_prebuilt_library_static {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
stl: "none",
|
stl: "none",
|
||||||
system_shared_libs: [],
|
|
||||||
}
|
}
|
||||||
|
|
||||||
module_exports_snapshot {
|
module_exports_snapshot {
|
||||||
@@ -1020,7 +1191,6 @@ cc_prebuilt_library_static {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
stl: "none",
|
stl: "none",
|
||||||
system_shared_libs: [],
|
|
||||||
}
|
}
|
||||||
|
|
||||||
cc_prebuilt_library_static {
|
cc_prebuilt_library_static {
|
||||||
@@ -1036,7 +1206,6 @@ cc_prebuilt_library_static {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
stl: "none",
|
stl: "none",
|
||||||
system_shared_libs: [],
|
|
||||||
}
|
}
|
||||||
|
|
||||||
module_exports_snapshot {
|
module_exports_snapshot {
|
||||||
@@ -1084,7 +1253,6 @@ cc_prebuilt_library_headers {
|
|||||||
sdk_member_name: "mynativeheaders",
|
sdk_member_name: "mynativeheaders",
|
||||||
export_include_dirs: ["include/include"],
|
export_include_dirs: ["include/include"],
|
||||||
stl: "none",
|
stl: "none",
|
||||||
system_shared_libs: [],
|
|
||||||
}
|
}
|
||||||
|
|
||||||
cc_prebuilt_library_headers {
|
cc_prebuilt_library_headers {
|
||||||
@@ -1092,7 +1260,6 @@ cc_prebuilt_library_headers {
|
|||||||
prefer: false,
|
prefer: false,
|
||||||
export_include_dirs: ["include/include"],
|
export_include_dirs: ["include/include"],
|
||||||
stl: "none",
|
stl: "none",
|
||||||
system_shared_libs: [],
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sdk_snapshot {
|
sdk_snapshot {
|
||||||
@@ -1139,7 +1306,6 @@ cc_prebuilt_library_headers {
|
|||||||
host_supported: true,
|
host_supported: true,
|
||||||
export_include_dirs: ["include/include"],
|
export_include_dirs: ["include/include"],
|
||||||
stl: "none",
|
stl: "none",
|
||||||
system_shared_libs: [],
|
|
||||||
}
|
}
|
||||||
|
|
||||||
cc_prebuilt_library_headers {
|
cc_prebuilt_library_headers {
|
||||||
@@ -1149,7 +1315,6 @@ cc_prebuilt_library_headers {
|
|||||||
host_supported: true,
|
host_supported: true,
|
||||||
export_include_dirs: ["include/include"],
|
export_include_dirs: ["include/include"],
|
||||||
stl: "none",
|
stl: "none",
|
||||||
system_shared_libs: [],
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sdk_snapshot {
|
sdk_snapshot {
|
||||||
@@ -1211,7 +1376,6 @@ cc_prebuilt_library_headers {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
stl: "none",
|
stl: "none",
|
||||||
system_shared_libs: [],
|
|
||||||
}
|
}
|
||||||
|
|
||||||
cc_prebuilt_library_headers {
|
cc_prebuilt_library_headers {
|
||||||
@@ -1228,7 +1392,6 @@ cc_prebuilt_library_headers {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
stl: "none",
|
stl: "none",
|
||||||
system_shared_libs: [],
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sdk_snapshot {
|
sdk_snapshot {
|
||||||
|
26
sdk/sdk.go
26
sdk/sdk.go
@@ -50,9 +50,6 @@ type sdk struct {
|
|||||||
// list properties, e.g. java_libs.
|
// list properties, e.g. java_libs.
|
||||||
dynamicMemberTypeListProperties interface{}
|
dynamicMemberTypeListProperties interface{}
|
||||||
|
|
||||||
// The set of exported members.
|
|
||||||
exportedMembers map[string]struct{}
|
|
||||||
|
|
||||||
// Information about the OsType specific member variants associated with this variant.
|
// Information about the OsType specific member variants associated with this variant.
|
||||||
//
|
//
|
||||||
// Set by OsType specific variants when their GenerateAndroidBuildActions is invoked
|
// Set by OsType specific variants when their GenerateAndroidBuildActions is invoked
|
||||||
@@ -233,26 +230,19 @@ func (s *sdk) memberListProperties() []*sdkMemberListProperty {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (s *sdk) getExportedMembers() map[string]struct{} {
|
func (s *sdk) getExportedMembers() map[string]struct{} {
|
||||||
if s.exportedMembers == nil {
|
// Collect all the exported members.
|
||||||
// Collect all the exported members.
|
exportedMembers := make(map[string]struct{})
|
||||||
s.exportedMembers = make(map[string]struct{})
|
|
||||||
|
|
||||||
for _, memberListProperty := range s.memberListProperties() {
|
for _, memberListProperty := range s.memberListProperties() {
|
||||||
names := memberListProperty.getter(s.dynamicMemberTypeListProperties)
|
names := memberListProperty.getter(s.dynamicMemberTypeListProperties)
|
||||||
|
|
||||||
// Every member specified explicitly in the properties is exported by the sdk.
|
// Every member specified explicitly in the properties is exported by the sdk.
|
||||||
for _, name := range names {
|
for _, name := range names {
|
||||||
s.exportedMembers[name] = struct{}{}
|
exportedMembers[name] = struct{}{}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return s.exportedMembers
|
return exportedMembers
|
||||||
}
|
|
||||||
|
|
||||||
func (s *sdk) isInternalMember(memberName string) bool {
|
|
||||||
_, ok := s.getExportedMembers()[memberName]
|
|
||||||
return !ok
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *sdk) snapshot() bool {
|
func (s *sdk) snapshot() bool {
|
||||||
|
106
sdk/update.go
106
sdk/update.go
@@ -226,17 +226,23 @@ func versionedSdkMemberName(ctx android.ModuleContext, memberName string, versio
|
|||||||
// the contents (header files, stub libraries, etc) into the zip file.
|
// the contents (header files, stub libraries, etc) into the zip file.
|
||||||
func (s *sdk) buildSnapshot(ctx android.ModuleContext, sdkVariants []*sdk) android.OutputPath {
|
func (s *sdk) buildSnapshot(ctx android.ModuleContext, sdkVariants []*sdk) android.OutputPath {
|
||||||
|
|
||||||
exportedMembers := make(map[string]struct{})
|
allMembersByName := make(map[string]struct{})
|
||||||
|
exportedMembersByName := make(map[string]struct{})
|
||||||
var memberRefs []sdkMemberRef
|
var memberRefs []sdkMemberRef
|
||||||
for _, sdkVariant := range sdkVariants {
|
for _, sdkVariant := range sdkVariants {
|
||||||
memberRefs = append(memberRefs, sdkVariant.memberRefs...)
|
memberRefs = append(memberRefs, sdkVariant.memberRefs...)
|
||||||
|
|
||||||
|
// Record the names of all the members, both explicitly specified and implicitly
|
||||||
|
// included.
|
||||||
|
for _, memberRef := range sdkVariant.memberRefs {
|
||||||
|
allMembersByName[memberRef.variant.Name()] = struct{}{}
|
||||||
|
}
|
||||||
|
|
||||||
// Merge the exported member sets from all sdk variants.
|
// Merge the exported member sets from all sdk variants.
|
||||||
for key, _ := range sdkVariant.getExportedMembers() {
|
for key, _ := range sdkVariant.getExportedMembers() {
|
||||||
exportedMembers[key] = struct{}{}
|
exportedMembersByName[key] = struct{}{}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
s.exportedMembers = exportedMembers
|
|
||||||
|
|
||||||
snapshotDir := android.PathForModuleOut(ctx, "snapshot")
|
snapshotDir := android.PathForModuleOut(ctx, "snapshot")
|
||||||
|
|
||||||
@@ -247,14 +253,16 @@ func (s *sdk) buildSnapshot(ctx android.ModuleContext, sdkVariants []*sdk) andro
|
|||||||
}
|
}
|
||||||
|
|
||||||
builder := &snapshotBuilder{
|
builder := &snapshotBuilder{
|
||||||
ctx: ctx,
|
ctx: ctx,
|
||||||
sdk: s,
|
sdk: s,
|
||||||
version: "current",
|
version: "current",
|
||||||
snapshotDir: snapshotDir.OutputPath,
|
snapshotDir: snapshotDir.OutputPath,
|
||||||
copies: make(map[string]string),
|
copies: make(map[string]string),
|
||||||
filesToZip: []android.Path{bp.path},
|
filesToZip: []android.Path{bp.path},
|
||||||
bpFile: bpFile,
|
bpFile: bpFile,
|
||||||
prebuiltModules: make(map[string]*bpModule),
|
prebuiltModules: make(map[string]*bpModule),
|
||||||
|
allMembersByName: allMembersByName,
|
||||||
|
exportedMembersByName: exportedMembersByName,
|
||||||
}
|
}
|
||||||
s.builderForTests = builder
|
s.builderForTests = builder
|
||||||
|
|
||||||
@@ -402,7 +410,7 @@ func (s *sdk) addMemberPropertiesToPropertySet(builder *snapshotBuilder, propert
|
|||||||
for _, memberListProperty := range s.memberListProperties() {
|
for _, memberListProperty := range s.memberListProperties() {
|
||||||
names := memberListProperty.getter(dynamicMemberTypeListProperties)
|
names := memberListProperty.getter(dynamicMemberTypeListProperties)
|
||||||
if len(names) > 0 {
|
if len(names) > 0 {
|
||||||
propertySet.AddProperty(memberListProperty.propertyName(), builder.versionedSdkMemberNames(names))
|
propertySet.AddProperty(memberListProperty.propertyName(), builder.versionedSdkMemberNames(names, false))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -415,7 +423,13 @@ type propertyTag struct {
|
|||||||
//
|
//
|
||||||
// This will cause the references to be rewritten to a versioned reference in the version
|
// This will cause the references to be rewritten to a versioned reference in the version
|
||||||
// specific instance of a snapshot module.
|
// specific instance of a snapshot module.
|
||||||
var sdkMemberReferencePropertyTag = propertyTag{"sdkMemberReferencePropertyTag"}
|
var requiredSdkMemberReferencePropertyTag = propertyTag{"requiredSdkMemberReferencePropertyTag"}
|
||||||
|
|
||||||
|
// A BpPropertyTag to add to a property that contains references to other sdk members.
|
||||||
|
//
|
||||||
|
// This will cause the references to be rewritten to a versioned reference in the version
|
||||||
|
// specific instance of a snapshot module.
|
||||||
|
var optionalSdkMemberReferencePropertyTag = propertyTag{"optionalSdkMemberReferencePropertyTag"}
|
||||||
|
|
||||||
// A BpPropertyTag that indicates the property should only be present in the versioned
|
// A BpPropertyTag that indicates the property should only be present in the versioned
|
||||||
// module.
|
// module.
|
||||||
@@ -433,14 +447,15 @@ func (t unversionedToVersionedTransformation) transformModule(module *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.
|
||||||
name := module.getValue("name").(string)
|
name := module.getValue("name").(string)
|
||||||
module.setProperty("name", t.builder.versionedSdkMemberName(name))
|
module.setProperty("name", t.builder.versionedSdkMemberName(name, true))
|
||||||
module.insertAfter("name", "sdk_member_name", name)
|
module.insertAfter("name", "sdk_member_name", name)
|
||||||
return module
|
return module
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t unversionedToVersionedTransformation) transformProperty(name string, value interface{}, tag android.BpPropertyTag) (interface{}, android.BpPropertyTag) {
|
func (t unversionedToVersionedTransformation) transformProperty(name string, value interface{}, tag android.BpPropertyTag) (interface{}, android.BpPropertyTag) {
|
||||||
if tag == sdkMemberReferencePropertyTag {
|
if tag == requiredSdkMemberReferencePropertyTag || tag == optionalSdkMemberReferencePropertyTag {
|
||||||
return t.builder.versionedSdkMemberNames(value.([]string)), tag
|
required := tag == requiredSdkMemberReferencePropertyTag
|
||||||
|
return t.builder.versionedSdkMemberNames(value.([]string), required), tag
|
||||||
} else {
|
} else {
|
||||||
return value, tag
|
return value, tag
|
||||||
}
|
}
|
||||||
@@ -454,7 +469,7 @@ type unversionedTransformation struct {
|
|||||||
func (t unversionedTransformation) transformModule(module *bpModule) *bpModule {
|
func (t unversionedTransformation) transformModule(module *bpModule) *bpModule {
|
||||||
// If the module is an internal member then use a unique name for it.
|
// If the module is an internal member then use a unique name for it.
|
||||||
name := module.getValue("name").(string)
|
name := module.getValue("name").(string)
|
||||||
module.setProperty("name", t.builder.unversionedSdkMemberName(name))
|
module.setProperty("name", t.builder.unversionedSdkMemberName(name, true))
|
||||||
|
|
||||||
// Set prefer: false - this is not strictly required as that is the default.
|
// Set prefer: false - this is not strictly required as that is the default.
|
||||||
module.insertAfter("name", "prefer", false)
|
module.insertAfter("name", "prefer", false)
|
||||||
@@ -463,8 +478,9 @@ func (t unversionedTransformation) transformModule(module *bpModule) *bpModule {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (t unversionedTransformation) transformProperty(name string, value interface{}, tag android.BpPropertyTag) (interface{}, android.BpPropertyTag) {
|
func (t unversionedTransformation) transformProperty(name string, value interface{}, tag android.BpPropertyTag) (interface{}, android.BpPropertyTag) {
|
||||||
if tag == sdkMemberReferencePropertyTag {
|
if tag == requiredSdkMemberReferencePropertyTag || tag == optionalSdkMemberReferencePropertyTag {
|
||||||
return t.builder.unversionedSdkMemberNames(value.([]string)), tag
|
required := tag == requiredSdkMemberReferencePropertyTag
|
||||||
|
return t.builder.unversionedSdkMemberNames(value.([]string), required), tag
|
||||||
} else if tag == sdkVersionedOnlyPropertyTag {
|
} else if tag == sdkVersionedOnlyPropertyTag {
|
||||||
// The property is not allowed in the unversioned module so remove it.
|
// The property is not allowed in the unversioned module so remove it.
|
||||||
return nil, nil
|
return nil, nil
|
||||||
@@ -559,6 +575,12 @@ type snapshotBuilder struct {
|
|||||||
|
|
||||||
prebuiltModules map[string]*bpModule
|
prebuiltModules map[string]*bpModule
|
||||||
prebuiltOrder []*bpModule
|
prebuiltOrder []*bpModule
|
||||||
|
|
||||||
|
// The set of all members by name.
|
||||||
|
allMembersByName map[string]struct{}
|
||||||
|
|
||||||
|
// The set of exported members by name.
|
||||||
|
exportedMembersByName map[string]struct{}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *snapshotBuilder) CopyToSnapshot(src android.Path, dest string) {
|
func (s *snapshotBuilder) CopyToSnapshot(src android.Path, dest string) {
|
||||||
@@ -612,7 +634,7 @@ func (s *snapshotBuilder) AddPrebuiltModule(member android.SdkMember, moduleType
|
|||||||
|
|
||||||
variant := member.Variants()[0]
|
variant := member.Variants()[0]
|
||||||
|
|
||||||
if s.sdk.isInternalMember(name) {
|
if s.isInternalMember(name) {
|
||||||
// An internal member is only referenced from the sdk snapshot which is in the
|
// An internal member is only referenced from the sdk snapshot which is in the
|
||||||
// same package so can be marked as private.
|
// same package so can be marked as private.
|
||||||
m.AddProperty("visibility", []string{"//visibility:private"})
|
m.AddProperty("visibility", []string{"//visibility:private"})
|
||||||
@@ -676,40 +698,66 @@ func addHostDeviceSupportedProperties(deviceSupported bool, hostSupported bool,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *snapshotBuilder) SdkMemberReferencePropertyTag() android.BpPropertyTag {
|
func (s *snapshotBuilder) SdkMemberReferencePropertyTag(required bool) android.BpPropertyTag {
|
||||||
return sdkMemberReferencePropertyTag
|
if required {
|
||||||
|
return requiredSdkMemberReferencePropertyTag
|
||||||
|
} else {
|
||||||
|
return optionalSdkMemberReferencePropertyTag
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *snapshotBuilder) OptionalSdkMemberReferencePropertyTag() android.BpPropertyTag {
|
||||||
|
return optionalSdkMemberReferencePropertyTag
|
||||||
}
|
}
|
||||||
|
|
||||||
// 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, required bool) string {
|
||||||
|
if _, ok := s.allMembersByName[unversionedName]; !ok {
|
||||||
|
if required {
|
||||||
|
s.ctx.ModuleErrorf("Required member reference %s is not a member of the sdk", unversionedName)
|
||||||
|
}
|
||||||
|
return unversionedName
|
||||||
|
}
|
||||||
return versionedSdkMemberName(s.ctx, unversionedName, s.version)
|
return versionedSdkMemberName(s.ctx, unversionedName, s.version)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *snapshotBuilder) versionedSdkMemberNames(members []string) []string {
|
func (s *snapshotBuilder) versionedSdkMemberNames(members []string, required bool) []string {
|
||||||
var references []string = nil
|
var references []string = nil
|
||||||
for _, m := range members {
|
for _, m := range members {
|
||||||
references = append(references, s.versionedSdkMemberName(m))
|
references = append(references, s.versionedSdkMemberName(m, required))
|
||||||
}
|
}
|
||||||
return references
|
return references
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get an internal name unique to the sdk.
|
// Get an internal name unique to the sdk.
|
||||||
func (s *snapshotBuilder) unversionedSdkMemberName(unversionedName string) string {
|
func (s *snapshotBuilder) unversionedSdkMemberName(unversionedName string, required bool) string {
|
||||||
if s.sdk.isInternalMember(unversionedName) {
|
if _, ok := s.allMembersByName[unversionedName]; !ok {
|
||||||
|
if required {
|
||||||
|
s.ctx.ModuleErrorf("Required member reference %s is not a member of the sdk", unversionedName)
|
||||||
|
}
|
||||||
|
return unversionedName
|
||||||
|
}
|
||||||
|
|
||||||
|
if s.isInternalMember(unversionedName) {
|
||||||
return s.ctx.ModuleName() + "_" + unversionedName
|
return s.ctx.ModuleName() + "_" + unversionedName
|
||||||
} else {
|
} else {
|
||||||
return unversionedName
|
return unversionedName
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *snapshotBuilder) unversionedSdkMemberNames(members []string) []string {
|
func (s *snapshotBuilder) unversionedSdkMemberNames(members []string, required bool) []string {
|
||||||
var references []string = nil
|
var references []string = nil
|
||||||
for _, m := range members {
|
for _, m := range members {
|
||||||
references = append(references, s.unversionedSdkMemberName(m))
|
references = append(references, s.unversionedSdkMemberName(m, required))
|
||||||
}
|
}
|
||||||
return references
|
return references
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *snapshotBuilder) isInternalMember(memberName string) bool {
|
||||||
|
_, ok := s.exportedMembersByName[memberName]
|
||||||
|
return !ok
|
||||||
|
}
|
||||||
|
|
||||||
type sdkMemberRef struct {
|
type sdkMemberRef struct {
|
||||||
memberType android.SdkMemberType
|
memberType android.SdkMemberType
|
||||||
variant android.SdkAware
|
variant android.SdkAware
|
||||||
|
Reference in New Issue
Block a user