From 36242850fdad11b4e6fbe061ef30f62e7e8c08d8 Mon Sep 17 00:00:00 2001 From: Colin Cross Date: Fri, 23 Jun 2017 15:06:31 -0700 Subject: [PATCH] Refactor factories Change module factories from returning a blueprint.Module and a list of property structs to returning an android.Module, which holds the list of property structs. Test: build.ninja identical except for Factory: comment lines Change-Id: Ica1d823f009db812c518f271a386fbff39c9766f --- android/arch.go | 15 ++++--------- android/defaults.go | 22 +++++++------------ android/module.go | 39 ++++++++++++++++++++------------- android/prebuilt_test.go | 16 +++++++++----- android/register.go | 15 +++++++++++-- cc/binary.go | 5 ++--- cc/cc.go | 37 +++++++++++++++++-------------- cc/coverage.go | 1 + cc/library.go | 12 +++++----- cc/llndk_library.go | 19 +++++++++------- cc/ndk_headers.go | 16 +++++++++----- cc/ndk_library.go | 14 +++++++----- cc/ndk_prebuilt.go | 10 ++++----- cc/object.go | 4 +--- cc/prebuilt.go | 8 +++---- cc/sabi.go | 2 +- cc/test.go | 12 +++++----- cc/test_data_test.go | 12 ++++++---- cc/toolchain_library.go | 3 +-- genrule/filegroup.go | 9 ++++---- genrule/genrule.go | 13 ++++++----- java/app.go | 7 ++++-- java/java.go | 47 +++++++++++++++++++++++++++------------- phony/phony.go | 7 +++--- python/binary.go | 7 +++--- python/library.go | 4 +--- python/python.go | 9 ++++---- python/python_test.go | 6 +++-- python/test.go | 8 +++---- 29 files changed, 211 insertions(+), 168 deletions(-) diff --git a/android/arch.go b/android/arch.go index effd5a6b4..67ce30eb5 100644 --- a/android/arch.go +++ b/android/arch.go @@ -20,7 +20,6 @@ import ( "runtime" "strings" - "github.com/google/blueprint" "github.com/google/blueprint/proptools" ) @@ -491,13 +490,11 @@ func createArchType(props reflect.Type) reflect.Type { var archPropTypeMap OncePer -func InitArchModule(m Module, - propertyStructs ...interface{}) (blueprint.Module, []interface{}) { +func InitArchModule(m Module) { base := m.base() - base.generalProperties = append(base.generalProperties, - propertyStructs...) + base.generalProperties = m.GetProperties() for _, properties := range base.generalProperties { propertiesValue := reflect.ValueOf(properties) @@ -524,17 +521,13 @@ func InitArchModule(m Module, } } - var allProperties []interface{} - allProperties = append(allProperties, base.generalProperties...) for _, asp := range base.archProperties { if asp != nil { - allProperties = append(allProperties, asp) + m.AddProperties(asp) } } - base.customizableProperties = allProperties - - return m, allProperties + base.customizableProperties = m.GetProperties() } var variantReplacer = strings.NewReplacer("-", "_", ".", "_") diff --git a/android/defaults.go b/android/defaults.go index df1409e8d..0776405fa 100644 --- a/android/defaults.go +++ b/android/defaults.go @@ -50,14 +50,11 @@ type Defaultable interface { var _ Defaultable = (*DefaultableModule)(nil) -func InitDefaultableModule(module Module, d Defaultable, - props ...interface{}) (blueprint.Module, []interface{}) { +func InitDefaultableModule(module Module, d Defaultable) { - d.setProperties(props) + d.setProperties(module.GetProperties()) - props = append(props, d.defaults()) - - return module, props + module.AddProperties(d.defaults()) } type DefaultsModule struct { @@ -79,21 +76,18 @@ func (d *DefaultsModule) properties() []interface{} { return d.defaultableProperties } -func InitDefaultsModule(module Module, d Defaults, props ...interface{}) (blueprint.Module, []interface{}) { - props = append(props, +func InitDefaultsModule(module Module, d Defaults) { + module.AddProperties( &hostAndDeviceProperties{}, &commonProperties{}, &variableProperties{}) - _, props = InitArchModule(module, props...) + InitArchModule(module) + InitDefaultableModule(module, d) - _, props = InitDefaultableModule(module, d, props...) - - props = append(props, &module.base().nameProperties) + module.AddProperties(&module.base().nameProperties) module.base().module = module - - return module, props } var _ Defaults = (*DefaultsModule)(nil) diff --git a/android/module.go b/android/module.go index 8f8f34b33..18810fb8f 100644 --- a/android/module.go +++ b/android/module.go @@ -108,6 +108,9 @@ type Module interface { InstallInData() bool InstallInSanitizerDir() bool SkipInstall() + + AddProperties(props ...interface{}) + GetProperties() []interface{} } type nameProperties struct { @@ -194,24 +197,18 @@ const ( NeitherHostNorDeviceSupported ) -func InitAndroidModule(m Module, - propertyStructs ...interface{}) (blueprint.Module, []interface{}) { - +func InitAndroidModule(m Module) { base := m.base() base.module = m - propertyStructs = append(propertyStructs, + m.AddProperties( &base.nameProperties, &base.commonProperties, &base.variableProperties) - - return m, propertyStructs } -func InitAndroidArchModule(m Module, hod HostOrDeviceSupported, defaultMultilib Multilib, - propertyStructs ...interface{}) (blueprint.Module, []interface{}) { - - _, propertyStructs = InitAndroidModule(m, propertyStructs...) +func InitAndroidArchModule(m Module, hod HostOrDeviceSupported, defaultMultilib Multilib) { + InitAndroidModule(m) base := m.base() base.commonProperties.HostOrDeviceSupported = hod @@ -225,10 +222,10 @@ func InitAndroidArchModule(m Module, hod HostOrDeviceSupported, defaultMultilib base.hostAndDeviceProperties.Device_supported = boolPtr(true) fallthrough case HostAndDeviceDefault: - propertyStructs = append(propertyStructs, &base.hostAndDeviceProperties) + m.AddProperties(&base.hostAndDeviceProperties) } - return InitArchModule(m, propertyStructs...) + InitArchModule(m) } // A ModuleBase object contains the properties that are common to all Android @@ -250,7 +247,6 @@ func InitAndroidArchModule(m Module, hod HostOrDeviceSupported, defaultMultilib // // import ( // "android/soong/android" -// "github.com/google/blueprint" // ) // // type myModule struct { @@ -260,9 +256,11 @@ func InitAndroidArchModule(m Module, hod HostOrDeviceSupported, defaultMultilib // } // } // -// func NewMyModule() (blueprint.Module, []interface{}) { +// func NewMyModule() android.Module) { // m := &myModule{} -// return android.InitAndroidModule(m, &m.properties) +// m.AddProperties(&m.properties) +// android.InitAndroidModule(m) +// return m // } // // func (m *myModule) GenerateAndroidBuildActions(ctx android.ModuleContext) { @@ -274,6 +272,7 @@ func InitAndroidArchModule(m Module, hod HostOrDeviceSupported, defaultMultilib type ModuleBase struct { // Putting the curiously recurring thing pointing to the thing that contains // the thing pattern to good use. + // TODO: remove this module Module nameProperties nameProperties @@ -295,6 +294,16 @@ type ModuleBase struct { blueprintDir string hooks hooks + + registerProps []interface{} +} + +func (a *ModuleBase) AddProperties(props ...interface{}) { + a.registerProps = append(a.registerProps, props...) +} + +func (a *ModuleBase) GetProperties() []interface{} { + return a.registerProps } // Name returns the name of the module. It may be overridden by individual module types, for diff --git a/android/prebuilt_test.go b/android/prebuilt_test.go index d09518b44..5fa20326f 100644 --- a/android/prebuilt_test.go +++ b/android/prebuilt_test.go @@ -123,8 +123,8 @@ func TestPrebuilts(t *testing.T) { for _, test := range prebuiltsTests { t.Run(test.name, func(t *testing.T) { ctx := NewContext() - ctx.RegisterModuleType("prebuilt", newPrebuiltModule) - ctx.RegisterModuleType("source", newSourceModule) + ctx.RegisterModuleType("prebuilt", ModuleFactoryAdaptor(newPrebuiltModule)) + ctx.RegisterModuleType("source", ModuleFactoryAdaptor(newSourceModule)) ctx.MockFileSystem(map[string][]byte{ "Blueprints": []byte(` source { @@ -183,9 +183,11 @@ type prebuiltModule struct { prebuilt Prebuilt } -func newPrebuiltModule() (blueprint.Module, []interface{}) { +func newPrebuiltModule() Module { m := &prebuiltModule{} - return InitAndroidModule(m, &m.prebuilt.Properties) + m.AddProperties(&m.prebuilt.Properties) + InitAndroidModule(m) + return m } func (p *prebuiltModule) Name() string { @@ -210,9 +212,11 @@ type sourceModule struct { dependsOnSourceModule, dependsOnPrebuiltModule bool } -func newSourceModule() (blueprint.Module, []interface{}) { +func newSourceModule() Module { m := &sourceModule{} - return InitAndroidModule(m, &m.properties) + m.AddProperties(&m.properties) + InitAndroidModule(m) + return m } func (s *sourceModule) DepsMutator(ctx BottomUpMutatorContext) { diff --git a/android/register.go b/android/register.go index 939666463..76a1cc9f7 100644 --- a/android/register.go +++ b/android/register.go @@ -41,8 +41,19 @@ type mutator struct { var mutators []*mutator -func RegisterModuleType(name string, factory blueprint.ModuleFactory) { - moduleTypes = append(moduleTypes, moduleType{name, factory}) +type ModuleFactory func() Module + +// ModuleFactoryAdapter Wraps a ModuleFactory into a blueprint.ModuleFactory by converting an Module +// into a blueprint.Module and a list of property structs +func ModuleFactoryAdaptor(factory ModuleFactory) blueprint.ModuleFactory { + return func() (blueprint.Module, []interface{}) { + module := factory() + return module, module.GetProperties() + } +} + +func RegisterModuleType(name string, factory ModuleFactory) { + moduleTypes = append(moduleTypes, moduleType{name, ModuleFactoryAdaptor(factory)}) } func RegisterSingletonType(name string, factory blueprint.SingletonFactory) { diff --git a/cc/binary.go b/cc/binary.go index e98232978..f6e62b718 100644 --- a/cc/binary.go +++ b/cc/binary.go @@ -17,7 +17,6 @@ package cc import ( "path/filepath" - "github.com/google/blueprint" "github.com/google/blueprint/proptools" "android/soong/android" @@ -55,13 +54,13 @@ func init() { } // Module factory for binaries -func binaryFactory() (blueprint.Module, []interface{}) { +func binaryFactory() android.Module { module, _ := NewBinary(android.HostAndDeviceSupported) return module.Init() } // Module factory for host binaries -func binaryHostFactory() (blueprint.Module, []interface{}) { +func binaryHostFactory() android.Module { module, _ := NewBinary(android.HostSupported) return module.Init() } diff --git a/cc/cc.go b/cc/cc.go index 867b1969e..a3f4c1d22 100644 --- a/cc/cc.go +++ b/cc/cc.go @@ -304,36 +304,38 @@ type Module struct { flags Flags } -func (c *Module) Init() (blueprint.Module, []interface{}) { - props := []interface{}{&c.Properties, &c.unused} +func (c *Module) Init() android.Module { + c.AddProperties(&c.Properties, &c.unused) if c.compiler != nil { - props = append(props, c.compiler.compilerProps()...) + c.AddProperties(c.compiler.compilerProps()...) } if c.linker != nil { - props = append(props, c.linker.linkerProps()...) + c.AddProperties(c.linker.linkerProps()...) } if c.installer != nil { - props = append(props, c.installer.installerProps()...) + c.AddProperties(c.installer.installerProps()...) } if c.stl != nil { - props = append(props, c.stl.props()...) + c.AddProperties(c.stl.props()...) } if c.sanitize != nil { - props = append(props, c.sanitize.props()...) + c.AddProperties(c.sanitize.props()...) } if c.coverage != nil { - props = append(props, c.coverage.props()...) + c.AddProperties(c.coverage.props()...) } if c.sabi != nil { - props = append(props, c.sabi.props()...) + c.AddProperties(c.sabi.props()...) } for _, feature := range c.features { - props = append(props, feature.props()...) + c.AddProperties(feature.props()...) } - _, props = android.InitAndroidArchModule(c, c.hod, c.multilib, props...) + android.InitAndroidArchModule(c, c.hod, c.multilib) - return android.InitDefaultableModule(c, c, props...) + android.InitDefaultableModule(c, c) + + return c } // Returns true for dependency roots (binaries) @@ -1108,14 +1110,15 @@ func (*Defaults) GenerateAndroidBuildActions(ctx android.ModuleContext) { func (d *Defaults) DepsMutator(ctx android.BottomUpMutatorContext) { } -func defaultsFactory() (blueprint.Module, []interface{}) { +func defaultsFactory() android.Module { return DefaultsFactory() } -func DefaultsFactory(props ...interface{}) (blueprint.Module, []interface{}) { +func DefaultsFactory(props ...interface{}) android.Module { module := &Defaults{} - props = append(props, + module.AddProperties(props...) + module.AddProperties( &BaseProperties{}, &BaseCompilerProperties{}, &BaseLinkerProperties{}, @@ -1134,7 +1137,9 @@ func DefaultsFactory(props ...interface{}) (blueprint.Module, []interface{}) { &SAbiProperties{}, ) - return android.InitDefaultsModule(module, module, props...) + android.InitDefaultsModule(module, module) + + return module } const ( diff --git a/cc/coverage.go b/cc/coverage.go index b1c878372..0b4188f75 100644 --- a/cc/coverage.go +++ b/cc/coverage.go @@ -16,6 +16,7 @@ package cc import ( "android/soong/android" + "github.com/google/blueprint" ) diff --git a/cc/library.go b/cc/library.go index 016422130..c7c114266 100644 --- a/cc/library.go +++ b/cc/library.go @@ -108,41 +108,41 @@ func init() { // Module factory for combined static + shared libraries, device by default but with possible host // support -func libraryFactory() (blueprint.Module, []interface{}) { +func libraryFactory() android.Module { module, _ := NewLibrary(android.HostAndDeviceSupported) return module.Init() } // Module factory for static libraries -func libraryStaticFactory() (blueprint.Module, []interface{}) { +func libraryStaticFactory() android.Module { module, library := NewLibrary(android.HostAndDeviceSupported) library.BuildOnlyStatic() return module.Init() } // Module factory for shared libraries -func librarySharedFactory() (blueprint.Module, []interface{}) { +func librarySharedFactory() android.Module { module, library := NewLibrary(android.HostAndDeviceSupported) library.BuildOnlyShared() return module.Init() } // Module factory for host static libraries -func libraryHostStaticFactory() (blueprint.Module, []interface{}) { +func libraryHostStaticFactory() android.Module { module, library := NewLibrary(android.HostSupported) library.BuildOnlyStatic() return module.Init() } // Module factory for host shared libraries -func libraryHostSharedFactory() (blueprint.Module, []interface{}) { +func libraryHostSharedFactory() android.Module { module, library := NewLibrary(android.HostSupported) library.BuildOnlyShared() return module.Init() } // Module factory for header-only libraries -func libraryHeaderFactory() (blueprint.Module, []interface{}) { +func libraryHeaderFactory() android.Module { module, library := NewLibrary(android.HostAndDeviceSupported) library.HeaderOnly() return module.Init() diff --git a/cc/llndk_library.go b/cc/llndk_library.go index cde1bc79d..66ffc9fe7 100644 --- a/cc/llndk_library.go +++ b/cc/llndk_library.go @@ -18,8 +18,6 @@ import ( "path/filepath" "strings" - "github.com/google/blueprint" - "android/soong/android" ) @@ -136,7 +134,7 @@ func (stub *llndkStubDecorator) link(ctx ModuleContext, flags Flags, deps PathDe return stub.libraryDecorator.link(ctx, flags, deps, objs) } -func newLLndkStubLibrary() (*Module, []interface{}) { +func newLLndkStubLibrary() *Module { module, library := NewLibrary(android.DeviceSupported) library.BuildOnlyShared() module.stl = nil @@ -150,13 +148,18 @@ func newLLndkStubLibrary() (*Module, []interface{}) { module.linker = stub module.installer = nil - return module, []interface{}{&stub.Properties, &library.MutatedProperties, &library.flagExporter.Properties} + module.AddProperties( + &stub.Properties, + &library.MutatedProperties, + &library.flagExporter.Properties) + + return module } -func llndkLibraryFactory() (blueprint.Module, []interface{}) { - module, properties := newLLndkStubLibrary() - return android.InitAndroidArchModule(module, android.DeviceSupported, - android.MultilibBoth, properties...) +func llndkLibraryFactory() android.Module { + module := newLLndkStubLibrary() + android.InitAndroidArchModule(module, android.DeviceSupported, android.MultilibBoth) + return module } func init() { diff --git a/cc/ndk_headers.go b/cc/ndk_headers.go index 516f6e200..5fa323263 100644 --- a/cc/ndk_headers.go +++ b/cc/ndk_headers.go @@ -137,9 +137,11 @@ func (m *headerModule) GenerateAndroidBuildActions(ctx android.ModuleContext) { } } -func ndkHeadersFactory() (blueprint.Module, []interface{}) { +func ndkHeadersFactory() android.Module { module := &headerModule{} - return android.InitAndroidModule(module, &module.properties) + module.AddProperties(&module.properties) + android.InitAndroidModule(module) + return module } type preprocessedHeaderProperies struct { @@ -251,12 +253,16 @@ func processHeadersWithVersioner(ctx android.ModuleContext, srcDir, outDir andro return timestampFile } -func preprocessedNdkHeadersFactory() (blueprint.Module, []interface{}) { +func preprocessedNdkHeadersFactory() android.Module { module := &preprocessedHeaderModule{} + + module.AddProperties(&module.properties) + // Host module rather than device module because device module install steps // do not get run when embedded in make. We're not any of the existing // module types that can be exposed via the Android.mk exporter, so just use // a host module. - return android.InitAndroidArchModule(module, android.HostSupportedNoCross, - android.MultilibFirst, &module.properties) + android.InitAndroidArchModule(module, android.HostSupportedNoCross, android.MultilibFirst) + + return module } diff --git a/cc/ndk_library.go b/cc/ndk_library.go index d801775ce..5765aa92a 100644 --- a/cc/ndk_library.go +++ b/cc/ndk_library.go @@ -335,7 +335,7 @@ func (stub *stubDecorator) install(ctx ModuleContext, path android.Path) { stub.installPath = ctx.InstallFile(installDir, path).String() } -func newStubLibrary() (*Module, []interface{}) { +func newStubLibrary() *Module { module, library := NewLibrary(android.DeviceSupported) library.BuildOnlyShared() module.stl = nil @@ -349,11 +349,13 @@ func newStubLibrary() (*Module, []interface{}) { module.linker = stub module.installer = stub - return module, []interface{}{&stub.properties, &library.MutatedProperties} + module.AddProperties(&stub.properties, &library.MutatedProperties) + + return module } -func ndkLibraryFactory() (blueprint.Module, []interface{}) { - module, properties := newStubLibrary() - return android.InitAndroidArchModule(module, android.DeviceSupported, - android.MultilibBoth, properties...) +func ndkLibraryFactory() android.Module { + module := newStubLibrary() + android.InitAndroidArchModule(module, android.DeviceSupported, android.MultilibBoth) + return module } diff --git a/cc/ndk_prebuilt.go b/cc/ndk_prebuilt.go index 15a9d288c..13424e3cf 100644 --- a/cc/ndk_prebuilt.go +++ b/cc/ndk_prebuilt.go @@ -18,8 +18,6 @@ import ( "fmt" "strings" - "github.com/google/blueprint" - "android/soong/android" "android/soong/cc/config" ) @@ -67,7 +65,7 @@ func (*ndkPrebuiltObjectLinker) linkerDeps(ctx DepsContext, deps Deps) Deps { return deps } -func ndkPrebuiltObjectFactory() (blueprint.Module, []interface{}) { +func ndkPrebuiltObjectFactory() android.Module { module := newBaseModule(android.DeviceSupported, android.MultilibBoth) module.linker = &ndkPrebuiltObjectLinker{ objectLinker: objectLinker{ @@ -101,7 +99,7 @@ func (*ndkPrebuiltLibraryLinker) linkerDeps(ctx DepsContext, deps Deps) Deps { return deps } -func ndkPrebuiltLibraryFactory() (blueprint.Module, []interface{}) { +func ndkPrebuiltLibraryFactory() android.Module { module, library := NewLibrary(android.DeviceSupported) library.BuildOnlyShared() linker := &ndkPrebuiltLibraryLinker{ @@ -132,7 +130,7 @@ type ndkPrebuiltStlLinker struct { ndkPrebuiltLibraryLinker } -func ndkPrebuiltSharedStlFactory() (blueprint.Module, []interface{}) { +func ndkPrebuiltSharedStlFactory() android.Module { module, library := NewLibrary(android.DeviceSupported) library.BuildOnlyShared() linker := &ndkPrebuiltStlLinker{ @@ -147,7 +145,7 @@ func ndkPrebuiltSharedStlFactory() (blueprint.Module, []interface{}) { return module.Init() } -func ndkPrebuiltStaticStlFactory() (blueprint.Module, []interface{}) { +func ndkPrebuiltStaticStlFactory() android.Module { module, library := NewLibrary(android.DeviceSupported) library.BuildOnlyStatic() linker := &ndkPrebuiltStlLinker{ diff --git a/cc/object.go b/cc/object.go index eaddd890a..14789081a 100644 --- a/cc/object.go +++ b/cc/object.go @@ -17,8 +17,6 @@ package cc import ( "fmt" - "github.com/google/blueprint" - "android/soong/android" ) @@ -35,7 +33,7 @@ type objectLinker struct { Properties ObjectLinkerProperties } -func objectFactory() (blueprint.Module, []interface{}) { +func objectFactory() android.Module { module := newBaseModule(android.HostAndDeviceSupported, android.MultilibBoth) module.linker = &objectLinker{ baseLinker: NewBaseLinker(), diff --git a/cc/prebuilt.go b/cc/prebuilt.go index d064a4655..ac05df01c 100644 --- a/cc/prebuilt.go +++ b/cc/prebuilt.go @@ -16,8 +16,6 @@ package cc import ( "android/soong/android" - - "github.com/google/blueprint" ) func init() { @@ -65,7 +63,7 @@ func (p *prebuiltLibraryLinker) link(ctx ModuleContext, return nil } -func prebuiltSharedLibraryFactory() (blueprint.Module, []interface{}) { +func prebuiltSharedLibraryFactory() android.Module { module, _ := NewPrebuiltSharedLibrary(android.HostAndDeviceSupported) return module.Init() } @@ -83,7 +81,7 @@ func NewPrebuiltSharedLibrary(hod android.HostOrDeviceSupported) (*Module, *libr return module, library } -func prebuiltStaticLibraryFactory() (blueprint.Module, []interface{}) { +func prebuiltStaticLibraryFactory() android.Module { module, _ := NewPrebuiltStaticLibrary(android.HostAndDeviceSupported) return module.Init() } @@ -124,7 +122,7 @@ func (p *prebuiltBinaryLinker) link(ctx ModuleContext, return nil } -func prebuiltBinaryFactory() (blueprint.Module, []interface{}) { +func prebuiltBinaryFactory() android.Module { module, _ := NewPrebuiltBinary(android.HostAndDeviceSupported) return module.Init() } diff --git a/cc/sabi.go b/cc/sabi.go index 92fc7cf06..9aff738b1 100644 --- a/cc/sabi.go +++ b/cc/sabi.go @@ -17,9 +17,9 @@ package cc import ( "strings" - "android/soong/android" "github.com/google/blueprint" + "android/soong/android" "android/soong/cc/config" ) diff --git a/cc/test.go b/cc/test.go index 448f089b2..ea05ba5ab 100644 --- a/cc/test.go +++ b/cc/test.go @@ -20,8 +20,6 @@ import ( "strings" "android/soong/android" - - "github.com/google/blueprint" ) type TestProperties struct { @@ -57,31 +55,31 @@ func init() { } // Module factory for tests -func testFactory() (blueprint.Module, []interface{}) { +func testFactory() android.Module { module := NewTest(android.HostAndDeviceSupported) return module.Init() } // Module factory for test libraries -func testLibraryFactory() (blueprint.Module, []interface{}) { +func testLibraryFactory() android.Module { module := NewTestLibrary(android.HostAndDeviceSupported) return module.Init() } // Module factory for benchmarks -func benchmarkFactory() (blueprint.Module, []interface{}) { +func benchmarkFactory() android.Module { module := NewBenchmark(android.HostAndDeviceSupported) return module.Init() } // Module factory for host tests -func testHostFactory() (blueprint.Module, []interface{}) { +func testHostFactory() android.Module { module := NewTest(android.HostSupported) return module.Init() } // Module factory for host benchmarks -func benchmarkHostFactory() (blueprint.Module, []interface{}) { +func benchmarkHostFactory() android.Module { module := NewBenchmark(android.HostSupported) return module.Init() } diff --git a/cc/test_data_test.go b/cc/test_data_test.go index 9b5a85a76..a798919f8 100644 --- a/cc/test_data_test.go +++ b/cc/test_data_test.go @@ -131,8 +131,10 @@ func TestDataTests(t *testing.T) { "dir/baz": nil, "dir/bar/baz": nil, }) - ctx.RegisterModuleType("filegroup", genrule.FileGroupFactory) - ctx.RegisterModuleType("test", newTest) + ctx.RegisterModuleType("filegroup", + android.ModuleFactoryAdaptor(genrule.FileGroupFactory)) + ctx.RegisterModuleType("test", + android.ModuleFactoryAdaptor(newTest)) _, errs := ctx.ParseBlueprintsFiles("Blueprints") fail(t, errs) @@ -175,9 +177,11 @@ type testDataTest struct { } } -func newTest() (blueprint.Module, []interface{}) { +func newTest() android.Module { m := &testDataTest{} - return android.InitAndroidModule(m, &m.Properties) + m.AddProperties(&m.Properties) + android.InitAndroidModule(m) + return m } func (test *testDataTest) DepsMutator(ctx android.BottomUpMutatorContext) { diff --git a/cc/toolchain_library.go b/cc/toolchain_library.go index 1bbe77464..9b83f1818 100644 --- a/cc/toolchain_library.go +++ b/cc/toolchain_library.go @@ -15,7 +15,6 @@ package cc import ( - "github.com/google/blueprint" "github.com/google/blueprint/proptools" "android/soong/android" @@ -38,7 +37,7 @@ func (*toolchainLibraryDecorator) linkerDeps(ctx DepsContext, deps Deps) Deps { return deps } -func toolchainLibraryFactory() (blueprint.Module, []interface{}) { +func toolchainLibraryFactory() android.Module { module, library := NewLibrary(android.HostAndDeviceSupported) library.BuildOnlyStatic() toolchainLibrary := &toolchainLibraryDecorator{ diff --git a/genrule/filegroup.go b/genrule/filegroup.go index 71c54399a..402913474 100644 --- a/genrule/filegroup.go +++ b/genrule/filegroup.go @@ -15,8 +15,6 @@ package genrule import ( - "github.com/google/blueprint" - "android/soong/android" ) @@ -48,10 +46,11 @@ var _ android.SourceFileProducer = (*fileGroup)(nil) // filegroup modules contain a list of files, and can be used to export files across package // boundaries. filegroups (and genrules) can be referenced from srcs properties of other modules // using the syntax ":module". -func FileGroupFactory() (blueprint.Module, []interface{}) { +func FileGroupFactory() android.Module { module := &fileGroup{} - - return android.InitAndroidModule(module, &module.properties) + module.AddProperties(&module.properties) + android.InitAndroidModule(module) + return module } func (fg *fileGroup) DepsMutator(ctx android.BottomUpMutatorContext) { diff --git a/genrule/genrule.go b/genrule/genrule.go index dc4e9683f..c5de1fdcc 100644 --- a/genrule/genrule.go +++ b/genrule/genrule.go @@ -268,17 +268,20 @@ func (g *generator) generateSourceFile(ctx android.ModuleContext, task generateT } } -func generatorFactory(tasks taskFunc, props ...interface{}) (blueprint.Module, []interface{}) { +func generatorFactory(tasks taskFunc, props ...interface{}) android.Module { module := &generator{ tasks: tasks, } - props = append(props, &module.properties) + module.AddProperties(props...) + module.AddProperties(&module.properties) - return android.InitAndroidModule(module, props...) + android.InitAndroidModule(module) + + return module } -func GenSrcsFactory() (blueprint.Module, []interface{}) { +func GenSrcsFactory() android.Module { properties := &genSrcsProperties{} tasks := func(ctx android.ModuleContext, srcFiles android.Paths) []generateTask { @@ -300,7 +303,7 @@ type genSrcsProperties struct { Output_extension string } -func GenRuleFactory() (blueprint.Module, []interface{}) { +func GenRuleFactory() android.Module { properties := &genRuleProperties{} tasks := func(ctx android.ModuleContext, srcFiles android.Paths) []generateTask { diff --git a/java/app.go b/java/app.go index f6ccd3442..2f2b899d1 100644 --- a/java/app.go +++ b/java/app.go @@ -274,13 +274,16 @@ func (a *AndroidApp) aaptFlags(ctx android.ModuleContext) ([]string, android.Pat return aaptFlags, aaptDeps, hasResources } -func AndroidAppFactory() (blueprint.Module, []interface{}) { +func AndroidAppFactory() android.Module { module := &AndroidApp{} module.deviceProperties.Dex = true - return android.InitAndroidArchModule(module, android.DeviceSupported, android.MultilibCommon, + module.AddProperties( &module.Module.properties, &module.Module.deviceProperties, &module.appProperties) + + android.InitAndroidArchModule(module, android.DeviceSupported, android.MultilibCommon) + return module } diff --git a/java/java.go b/java/java.go index 20661c479..3cc552f0a 100644 --- a/java/java.go +++ b/java/java.go @@ -418,21 +418,26 @@ func (j *JavaLibrary) DepsMutator(ctx android.BottomUpMutatorContext) { j.deps(ctx) } -func JavaLibraryFactory() (blueprint.Module, []interface{}) { +func JavaLibraryFactory() android.Module { module := &JavaLibrary{} module.deviceProperties.Dex = true - return android.InitAndroidArchModule(module, android.HostAndDeviceSupported, android.MultilibCommon, + module.AddProperties( &module.Module.properties, &module.Module.deviceProperties) + + android.InitAndroidArchModule(module, android.HostAndDeviceSupported, android.MultilibCommon) + return module } -func JavaLibraryHostFactory() (blueprint.Module, []interface{}) { +func JavaLibraryHostFactory() android.Module { module := &JavaLibrary{} - return android.InitAndroidArchModule(module, android.HostSupported, android.MultilibCommon, - &module.Module.properties) + module.AddProperties(&module.Module.properties) + + android.InitAndroidArchModule(module, android.HostSupported, android.MultilibCommon) + return module } // @@ -463,24 +468,30 @@ func (j *JavaBinary) DepsMutator(ctx android.BottomUpMutatorContext) { j.deps(ctx) } -func JavaBinaryFactory() (blueprint.Module, []interface{}) { +func JavaBinaryFactory() android.Module { module := &JavaBinary{} module.deviceProperties.Dex = true - return android.InitAndroidArchModule(module, android.HostAndDeviceSupported, android.MultilibCommon, + module.AddProperties( &module.Module.properties, &module.Module.deviceProperties, &module.binaryProperties) + + android.InitAndroidArchModule(module, android.HostAndDeviceSupported, android.MultilibCommon) + return module } -func JavaBinaryHostFactory() (blueprint.Module, []interface{}) { +func JavaBinaryHostFactory() android.Module { module := &JavaBinary{} - return android.InitAndroidArchModule(module, android.HostSupported, android.MultilibCommon, + module.AddProperties( &module.Module.properties, &module.Module.deviceProperties, &module.binaryProperties) + + android.InitAndroidArchModule(module, android.HostSupported, android.MultilibCommon) + return module } // @@ -536,11 +547,13 @@ func (j *JavaPrebuilt) AidlIncludeDirs() android.Paths { return nil } -func JavaPrebuiltFactory() (blueprint.Module, []interface{}) { +func JavaPrebuiltFactory() android.Module { module := &JavaPrebuilt{} - return android.InitAndroidArchModule(module, android.HostAndDeviceSupported, - android.MultilibCommon, &module.properties) + module.AddProperties(&module.properties) + + android.InitAndroidArchModule(module, android.HostAndDeviceSupported, android.MultilibCommon) + return module } // @@ -576,11 +589,15 @@ func (j *sdkPrebuilt) AidlPreprocessed() android.OptionalPath { return j.aidlPreprocessed } -func SdkPrebuiltFactory() (blueprint.Module, []interface{}) { +func SdkPrebuiltFactory() android.Module { module := &sdkPrebuilt{} - return android.InitAndroidArchModule(module, android.HostAndDeviceSupported, - android.MultilibCommon, &module.properties, &module.sdkProperties) + module.AddProperties( + &module.properties, + &module.sdkProperties) + + android.InitAndroidArchModule(module, android.HostAndDeviceSupported, android.MultilibCommon) + return module } func inList(s string, l []string) bool { diff --git a/phony/phony.go b/phony/phony.go index c405af8a3..79f3a1ba8 100644 --- a/phony/phony.go +++ b/phony/phony.go @@ -19,8 +19,6 @@ import ( "io" "strings" - "github.com/google/blueprint" - "android/soong/android" ) @@ -33,10 +31,11 @@ type phony struct { requiredModuleNames []string } -func phonyFactory() (blueprint.Module, []interface{}) { +func phonyFactory() android.Module { module := &phony{} - return android.InitAndroidModule(module) + android.InitAndroidModule(module) + return module } func (p *phony) DepsMutator(ctx android.BottomUpMutatorContext) { diff --git a/python/binary.go b/python/binary.go index 81e8bd944..ae2693b98 100644 --- a/python/binary.go +++ b/python/binary.go @@ -21,8 +21,6 @@ import ( "path/filepath" "strings" - "github.com/google/blueprint" - "android/soong/android" ) @@ -74,15 +72,16 @@ var ( stubTemplateHost = "build/soong/python/scripts/stub_template_host.txt" ) -func PythonBinaryHostFactory() (blueprint.Module, []interface{}) { +func PythonBinaryHostFactory() android.Module { decorator := &pythonBinaryHostDecorator{ pythonDecorator: pythonDecorator{baseInstaller: NewPythonInstaller("bin")}} module := &PythonBinaryHost{} module.pythonBaseModule.installer = decorator + module.AddProperties(&module.binaryProperties) return InitPythonBaseModule(&module.pythonBinaryBase.pythonBaseModule, - &module.pythonBinaryBase, android.HostSupportedNoCross, &module.binaryProperties) + &module.pythonBinaryBase, android.HostSupportedNoCross) } func (p *pythonBinaryBase) GeneratePythonBuildActions(ctx android.ModuleContext) android.OptionalPath { diff --git a/python/library.go b/python/library.go index 0b7075667..2039e561b 100644 --- a/python/library.go +++ b/python/library.go @@ -17,8 +17,6 @@ package python // This file contains the module types for building Python library. import ( - "github.com/google/blueprint" - "android/soong/android" ) @@ -32,7 +30,7 @@ type PythonLibrary struct { var _ PythonSubModule = (*PythonLibrary)(nil) -func PythonLibraryHostFactory() (blueprint.Module, []interface{}) { +func PythonLibraryHostFactory() android.Module { module := &PythonLibrary{} return InitPythonBaseModule(&module.pythonBaseModule, module, android.HostSupportedNoCross) diff --git a/python/python.go b/python/python.go index ab80e4d2b..df5999d8a 100644 --- a/python/python.go +++ b/python/python.go @@ -152,14 +152,15 @@ var _ PythonDependency = (*pythonBaseModule)(nil) var _ android.AndroidMkDataProvider = (*pythonBaseModule)(nil) func InitPythonBaseModule(baseModule *pythonBaseModule, subModule PythonSubModule, - hod android.HostOrDeviceSupported, - props ...interface{}) (blueprint.Module, []interface{}) { + hod android.HostOrDeviceSupported) android.Module { baseModule.subModule = subModule - props = append(props, &baseModule.properties) + baseModule.AddProperties(&baseModule.properties) - return android.InitAndroidArchModule(baseModule, hod, android.MultilibCommon, props...) + android.InitAndroidArchModule(baseModule, hod, android.MultilibCommon) + + return baseModule } // the tag used to mark dependencies within "py_libs" attribute. diff --git a/python/python_test.go b/python/python_test.go index bb407e465..57aaa344d 100644 --- a/python/python_test.go +++ b/python/python_test.go @@ -313,8 +313,10 @@ func TestPythonModule(t *testing.T) { t.Run(d.desc, func(t *testing.T) { ctx := blueprint.NewContext() android.RegisterTestMutators(ctx) - ctx.RegisterModuleType("python_library_host", PythonLibraryHostFactory) - ctx.RegisterModuleType("python_binary_host", PythonBinaryHostFactory) + ctx.RegisterModuleType("python_library_host", + android.ModuleFactoryAdaptor(PythonLibraryHostFactory)) + ctx.RegisterModuleType("python_binary_host", + android.ModuleFactoryAdaptor(PythonBinaryHostFactory)) ctx.MockFileSystem(d.mockFiles) _, testErrs := ctx.ParseBlueprintsFiles(bpFile) fail(t, testErrs) diff --git a/python/test.go b/python/test.go index 831843832..837eb259e 100644 --- a/python/test.go +++ b/python/test.go @@ -17,8 +17,6 @@ package python import ( "android/soong/android" "path/filepath" - - "github.com/google/blueprint" ) // This file contains the module types for building Python test. @@ -42,13 +40,15 @@ func (p *pythonTestHostDecorator) install(ctx android.ModuleContext, file androi p.pythonDecorator.baseInstaller.install(ctx, file) } -func PythonTestHostFactory() (blueprint.Module, []interface{}) { +func PythonTestHostFactory() android.Module { decorator := &pythonTestHostDecorator{ pythonDecorator: pythonDecorator{baseInstaller: NewPythonInstaller("nativetest")}} module := &PythonBinaryHost{} module.pythonBaseModule.installer = decorator + module.AddProperties(&module.binaryProperties) + return InitPythonBaseModule(&module.pythonBinaryBase.pythonBaseModule, - &module.pythonBinaryBase, android.HostSupportedNoCross, &module.binaryProperties) + &module.pythonBinaryBase, android.HostSupportedNoCross) }