Refactor vendor snapshot modules
They have too many duplicated fields and functions. Bug: 65377115 Test: manual Change-Id: If3e2d67f02f3db7fa836c9550c978073ab7190e0
This commit is contained in:
@@ -80,13 +80,63 @@ func vendorSnapshotObjects(config android.Config) *snapshotMap {
|
||||
}).(*snapshotMap)
|
||||
}
|
||||
|
||||
type vendorSnapshotLibraryProperties struct {
|
||||
type vendorSnapshotBaseProperties struct {
|
||||
// snapshot version.
|
||||
Version string
|
||||
|
||||
// Target arch name of the snapshot (e.g. 'arm64' for variant 'aosp_arm64')
|
||||
Target_arch string
|
||||
}
|
||||
|
||||
// vendorSnapshotModuleBase provides common basic functions for all snapshot modules.
|
||||
type vendorSnapshotModuleBase struct {
|
||||
baseProperties vendorSnapshotBaseProperties
|
||||
moduleSuffix string
|
||||
}
|
||||
|
||||
func (p *vendorSnapshotModuleBase) Name(name string) string {
|
||||
return name + p.NameSuffix()
|
||||
}
|
||||
|
||||
func (p *vendorSnapshotModuleBase) NameSuffix() string {
|
||||
versionSuffix := p.version()
|
||||
if p.arch() != "" {
|
||||
versionSuffix += "." + p.arch()
|
||||
}
|
||||
|
||||
return p.moduleSuffix + versionSuffix
|
||||
}
|
||||
|
||||
func (p *vendorSnapshotModuleBase) version() string {
|
||||
return p.baseProperties.Version
|
||||
}
|
||||
|
||||
func (p *vendorSnapshotModuleBase) arch() string {
|
||||
return p.baseProperties.Target_arch
|
||||
}
|
||||
|
||||
func (p *vendorSnapshotModuleBase) isSnapshotPrebuilt() bool {
|
||||
return true
|
||||
}
|
||||
|
||||
// Call this after creating a snapshot module with module suffix
|
||||
// such as vendorSnapshotSharedSuffix
|
||||
func (p *vendorSnapshotModuleBase) init(m *Module, suffix string) {
|
||||
p.moduleSuffix = suffix
|
||||
m.AddProperties(&p.baseProperties)
|
||||
android.AddLoadHook(m, func(ctx android.LoadHookContext) {
|
||||
vendorSnapshotLoadHook(ctx, p)
|
||||
})
|
||||
}
|
||||
|
||||
func vendorSnapshotLoadHook(ctx android.LoadHookContext, p *vendorSnapshotModuleBase) {
|
||||
if p.version() != ctx.DeviceConfig().VndkVersion() {
|
||||
ctx.Module().Disable()
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
type vendorSnapshotLibraryProperties struct {
|
||||
// Prebuilt file for each arch.
|
||||
Src *string `android:"arch_variant"`
|
||||
|
||||
@@ -105,41 +155,12 @@ type vendorSnapshotLibraryProperties struct {
|
||||
}
|
||||
|
||||
type vendorSnapshotLibraryDecorator struct {
|
||||
vendorSnapshotModuleBase
|
||||
*libraryDecorator
|
||||
properties vendorSnapshotLibraryProperties
|
||||
androidMkVendorSuffix bool
|
||||
}
|
||||
|
||||
func (p *vendorSnapshotLibraryDecorator) Name(name string) string {
|
||||
return name + p.NameSuffix()
|
||||
}
|
||||
|
||||
func (p *vendorSnapshotLibraryDecorator) NameSuffix() string {
|
||||
versionSuffix := p.version()
|
||||
if p.arch() != "" {
|
||||
versionSuffix += "." + p.arch()
|
||||
}
|
||||
|
||||
var linkageSuffix string
|
||||
if p.buildShared() {
|
||||
linkageSuffix = vendorSnapshotSharedSuffix
|
||||
} else if p.buildStatic() {
|
||||
linkageSuffix = vendorSnapshotStaticSuffix
|
||||
} else {
|
||||
linkageSuffix = vendorSnapshotHeaderSuffix
|
||||
}
|
||||
|
||||
return linkageSuffix + versionSuffix
|
||||
}
|
||||
|
||||
func (p *vendorSnapshotLibraryDecorator) version() string {
|
||||
return p.properties.Version
|
||||
}
|
||||
|
||||
func (p *vendorSnapshotLibraryDecorator) arch() string {
|
||||
return p.properties.Target_arch
|
||||
}
|
||||
|
||||
func (p *vendorSnapshotLibraryDecorator) linkerFlags(ctx ModuleContext, flags Flags) Flags {
|
||||
p.libraryDecorator.libName = strings.TrimSuffix(ctx.ModuleName(), p.NameSuffix())
|
||||
return p.libraryDecorator.linkerFlags(ctx, flags)
|
||||
@@ -189,32 +210,17 @@ func (p *vendorSnapshotLibraryDecorator) link(ctx ModuleContext,
|
||||
return in
|
||||
}
|
||||
|
||||
func (p *vendorSnapshotLibraryDecorator) nativeCoverage() bool {
|
||||
return false
|
||||
}
|
||||
|
||||
func (p *vendorSnapshotLibraryDecorator) isSnapshotPrebuilt() bool {
|
||||
return true
|
||||
}
|
||||
|
||||
func (p *vendorSnapshotLibraryDecorator) install(ctx ModuleContext, file android.Path) {
|
||||
if p.matchesWithDevice(ctx.DeviceConfig()) && (p.shared() || p.static()) {
|
||||
p.baseInstaller.install(ctx, file)
|
||||
}
|
||||
}
|
||||
|
||||
type vendorSnapshotInterface interface {
|
||||
version() string
|
||||
func (p *vendorSnapshotLibraryDecorator) nativeCoverage() bool {
|
||||
return false
|
||||
}
|
||||
|
||||
func vendorSnapshotLoadHook(ctx android.LoadHookContext, p vendorSnapshotInterface) {
|
||||
if p.version() != ctx.DeviceConfig().VndkVersion() {
|
||||
ctx.Module().Disable()
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
func vendorSnapshotLibrary() (*Module, *vendorSnapshotLibraryDecorator) {
|
||||
func vendorSnapshotLibrary(suffix string) (*Module, *vendorSnapshotLibraryDecorator) {
|
||||
module, library := NewLibrary(android.DeviceSupported)
|
||||
|
||||
module.stl = nil
|
||||
@@ -237,77 +243,42 @@ func vendorSnapshotLibrary() (*Module, *vendorSnapshotLibraryDecorator) {
|
||||
module.linker = prebuilt
|
||||
module.installer = prebuilt
|
||||
|
||||
module.AddProperties(
|
||||
&prebuilt.properties,
|
||||
)
|
||||
prebuilt.init(module, suffix)
|
||||
module.AddProperties(&prebuilt.properties)
|
||||
|
||||
return module, prebuilt
|
||||
}
|
||||
|
||||
func VendorSnapshotSharedFactory() android.Module {
|
||||
module, prebuilt := vendorSnapshotLibrary()
|
||||
module, prebuilt := vendorSnapshotLibrary(vendorSnapshotSharedSuffix)
|
||||
prebuilt.libraryDecorator.BuildOnlyShared()
|
||||
android.AddLoadHook(module, func(ctx android.LoadHookContext) {
|
||||
vendorSnapshotLoadHook(ctx, prebuilt)
|
||||
})
|
||||
return module.Init()
|
||||
}
|
||||
|
||||
func VendorSnapshotStaticFactory() android.Module {
|
||||
module, prebuilt := vendorSnapshotLibrary()
|
||||
module, prebuilt := vendorSnapshotLibrary(vendorSnapshotStaticSuffix)
|
||||
prebuilt.libraryDecorator.BuildOnlyStatic()
|
||||
android.AddLoadHook(module, func(ctx android.LoadHookContext) {
|
||||
vendorSnapshotLoadHook(ctx, prebuilt)
|
||||
})
|
||||
return module.Init()
|
||||
}
|
||||
|
||||
func VendorSnapshotHeaderFactory() android.Module {
|
||||
module, prebuilt := vendorSnapshotLibrary()
|
||||
module, prebuilt := vendorSnapshotLibrary(vendorSnapshotHeaderSuffix)
|
||||
prebuilt.libraryDecorator.HeaderOnly()
|
||||
android.AddLoadHook(module, func(ctx android.LoadHookContext) {
|
||||
vendorSnapshotLoadHook(ctx, prebuilt)
|
||||
})
|
||||
return module.Init()
|
||||
}
|
||||
|
||||
type vendorSnapshotBinaryProperties struct {
|
||||
// snapshot version.
|
||||
Version string
|
||||
|
||||
// Target arch name of the snapshot (e.g. 'arm64' for variant 'aosp_arm64_ab')
|
||||
Target_arch string
|
||||
|
||||
// Prebuilt file for each arch.
|
||||
Src *string `android:"arch_variant"`
|
||||
}
|
||||
|
||||
type vendorSnapshotBinaryDecorator struct {
|
||||
vendorSnapshotModuleBase
|
||||
*binaryDecorator
|
||||
properties vendorSnapshotBinaryProperties
|
||||
androidMkVendorSuffix bool
|
||||
}
|
||||
|
||||
func (p *vendorSnapshotBinaryDecorator) Name(name string) string {
|
||||
return name + p.NameSuffix()
|
||||
}
|
||||
|
||||
func (p *vendorSnapshotBinaryDecorator) NameSuffix() string {
|
||||
versionSuffix := p.version()
|
||||
if p.arch() != "" {
|
||||
versionSuffix += "." + p.arch()
|
||||
}
|
||||
return vendorSnapshotBinarySuffix + versionSuffix
|
||||
}
|
||||
|
||||
func (p *vendorSnapshotBinaryDecorator) version() string {
|
||||
return p.properties.Version
|
||||
}
|
||||
|
||||
func (p *vendorSnapshotBinaryDecorator) arch() string {
|
||||
return p.properties.Target_arch
|
||||
}
|
||||
|
||||
func (p *vendorSnapshotBinaryDecorator) matchesWithDevice(config android.DeviceConfig) bool {
|
||||
if config.DeviceArch() != p.arch() {
|
||||
return false
|
||||
@@ -349,8 +320,8 @@ func (p *vendorSnapshotBinaryDecorator) link(ctx ModuleContext,
|
||||
return outputFile
|
||||
}
|
||||
|
||||
func (p *vendorSnapshotBinaryDecorator) isSnapshotPrebuilt() bool {
|
||||
return true
|
||||
func (p *vendorSnapshotBinaryDecorator) nativeCoverage() bool {
|
||||
return false
|
||||
}
|
||||
|
||||
func VendorSnapshotBinaryFactory() android.Module {
|
||||
@@ -372,51 +343,23 @@ func VendorSnapshotBinaryFactory() android.Module {
|
||||
module.stl = nil
|
||||
module.linker = prebuilt
|
||||
|
||||
android.AddLoadHook(module, func(ctx android.LoadHookContext) {
|
||||
vendorSnapshotLoadHook(ctx, prebuilt)
|
||||
})
|
||||
|
||||
prebuilt.init(module, vendorSnapshotBinarySuffix)
|
||||
module.AddProperties(&prebuilt.properties)
|
||||
return module.Init()
|
||||
}
|
||||
|
||||
type vendorSnapshotObjectProperties struct {
|
||||
// snapshot version.
|
||||
Version string
|
||||
|
||||
// Target arch name of the snapshot (e.g. 'arm64' for variant 'aosp_arm64_ab')
|
||||
Target_arch string
|
||||
|
||||
// Prebuilt file for each arch.
|
||||
Src *string `android:"arch_variant"`
|
||||
}
|
||||
|
||||
type vendorSnapshotObjectLinker struct {
|
||||
vendorSnapshotModuleBase
|
||||
objectLinker
|
||||
properties vendorSnapshotObjectProperties
|
||||
androidMkVendorSuffix bool
|
||||
}
|
||||
|
||||
func (p *vendorSnapshotObjectLinker) Name(name string) string {
|
||||
return name + p.NameSuffix()
|
||||
}
|
||||
|
||||
func (p *vendorSnapshotObjectLinker) NameSuffix() string {
|
||||
versionSuffix := p.version()
|
||||
if p.arch() != "" {
|
||||
versionSuffix += "." + p.arch()
|
||||
}
|
||||
return vendorSnapshotObjectSuffix + versionSuffix
|
||||
}
|
||||
|
||||
func (p *vendorSnapshotObjectLinker) version() string {
|
||||
return p.properties.Version
|
||||
}
|
||||
|
||||
func (p *vendorSnapshotObjectLinker) arch() string {
|
||||
return p.properties.Target_arch
|
||||
}
|
||||
|
||||
func (p *vendorSnapshotObjectLinker) matchesWithDevice(config android.DeviceConfig) bool {
|
||||
if config.DeviceArch() != p.arch() {
|
||||
return false
|
||||
@@ -443,10 +386,6 @@ func (p *vendorSnapshotObjectLinker) nativeCoverage() bool {
|
||||
return false
|
||||
}
|
||||
|
||||
func (p *vendorSnapshotObjectLinker) isSnapshotPrebuilt() bool {
|
||||
return true
|
||||
}
|
||||
|
||||
func VendorSnapshotObjectFactory() android.Module {
|
||||
module := newObject()
|
||||
|
||||
@@ -457,10 +396,7 @@ func VendorSnapshotObjectFactory() android.Module {
|
||||
}
|
||||
module.linker = prebuilt
|
||||
|
||||
android.AddLoadHook(module, func(ctx android.LoadHookContext) {
|
||||
vendorSnapshotLoadHook(ctx, prebuilt)
|
||||
})
|
||||
|
||||
prebuilt.init(module, vendorSnapshotObjectSuffix)
|
||||
module.AddProperties(&prebuilt.properties)
|
||||
return module.Init()
|
||||
}
|
||||
|
Reference in New Issue
Block a user