Refactor vendor snapshot modules

They have too many duplicated fields and functions.

Bug: 65377115
Test: manual
Change-Id: If3e2d67f02f3db7fa836c9550c978073ab7190e0
This commit is contained in:
Inseob Kim
2020-07-30 21:04:09 +09:00
committed by Bill Peckham
parent bd60c83271
commit 2d34ad94f9

View File

@@ -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()
}