Merge changes I7e9440a0,I7f1a4b64,If5d6fdac
* changes:
Dedup cc prebuilts module type registration
Detect registration of duplicate module/singleton types
Dedup prebuilt apis module type/mutator registration
diff --git a/android/register.go b/android/register.go
index 86943f2..e7efe47 100644
--- a/android/register.go
+++ b/android/register.go
@@ -15,6 +15,8 @@
package android
import (
+ "fmt"
+
"github.com/google/blueprint"
)
@@ -122,6 +124,7 @@
type RegistrationContext interface {
RegisterModuleType(name string, factory ModuleFactory)
RegisterSingletonType(name string, factory SingletonFactory)
+ PreArchMutators(f RegisterMutatorFunc)
}
// Used to register build components from an init() method, e.g.
@@ -140,17 +143,35 @@
//
// ctx := android.NewTestContext()
// RegisterBuildComponents(ctx)
-var InitRegistrationContext RegistrationContext = initRegistrationContext{}
+var InitRegistrationContext RegistrationContext = &initRegistrationContext{
+ moduleTypes: make(map[string]ModuleFactory),
+ singletonTypes: make(map[string]SingletonFactory),
+}
// Make sure the TestContext implements RegistrationContext.
var _ RegistrationContext = (*TestContext)(nil)
-type initRegistrationContext struct{}
+type initRegistrationContext struct {
+ moduleTypes map[string]ModuleFactory
+ singletonTypes map[string]SingletonFactory
+}
-func (ctx initRegistrationContext) RegisterModuleType(name string, factory ModuleFactory) {
+func (ctx *initRegistrationContext) RegisterModuleType(name string, factory ModuleFactory) {
+ if _, present := ctx.moduleTypes[name]; present {
+ panic(fmt.Sprintf("module type %q is already registered", name))
+ }
+ ctx.moduleTypes[name] = factory
RegisterModuleType(name, factory)
}
-func (ctx initRegistrationContext) RegisterSingletonType(name string, factory SingletonFactory) {
+func (ctx *initRegistrationContext) RegisterSingletonType(name string, factory SingletonFactory) {
+ if _, present := ctx.singletonTypes[name]; present {
+ panic(fmt.Sprintf("singleton type %q is already registered", name))
+ }
+ ctx.singletonTypes[name] = factory
RegisterSingletonType(name, factory)
}
+
+func (ctx *initRegistrationContext) PreArchMutators(f RegisterMutatorFunc) {
+ PreArchMutators(f)
+}
diff --git a/apex/apex_test.go b/apex/apex_test.go
index bb6e026..035a553 100644
--- a/apex/apex_test.go
+++ b/apex/apex_test.go
@@ -289,8 +289,7 @@
ctx.RegisterModuleType("cc_library", cc.LibraryFactory)
ctx.RegisterModuleType("cc_library_shared", cc.LibrarySharedFactory)
ctx.RegisterModuleType("cc_library_headers", cc.LibraryHeaderFactory)
- ctx.RegisterModuleType("cc_prebuilt_library_shared", cc.PrebuiltSharedLibraryFactory)
- ctx.RegisterModuleType("cc_prebuilt_library_static", cc.PrebuiltStaticLibraryFactory)
+ cc.RegisterPrebuiltBuildComponents(ctx)
ctx.RegisterModuleType("cc_binary", cc.BinaryFactory)
ctx.RegisterModuleType("cc_object", cc.ObjectFactory)
ctx.RegisterModuleType("cc_defaults", func() android.Module {
diff --git a/cc/prebuilt.go b/cc/prebuilt.go
index f20616f..b0cf489 100644
--- a/cc/prebuilt.go
+++ b/cc/prebuilt.go
@@ -19,9 +19,13 @@
)
func init() {
- android.RegisterModuleType("cc_prebuilt_library_shared", PrebuiltSharedLibraryFactory)
- android.RegisterModuleType("cc_prebuilt_library_static", PrebuiltStaticLibraryFactory)
- android.RegisterModuleType("cc_prebuilt_binary", prebuiltBinaryFactory)
+ RegisterPrebuiltBuildComponents(android.InitRegistrationContext)
+}
+
+func RegisterPrebuiltBuildComponents(ctx android.RegistrationContext) {
+ ctx.RegisterModuleType("cc_prebuilt_library_shared", PrebuiltSharedLibraryFactory)
+ ctx.RegisterModuleType("cc_prebuilt_library_static", PrebuiltStaticLibraryFactory)
+ ctx.RegisterModuleType("cc_prebuilt_binary", prebuiltBinaryFactory)
}
type prebuiltLinkerInterface interface {
diff --git a/cc/prebuilt_test.go b/cc/prebuilt_test.go
index 31db2df..658cef0 100644
--- a/cc/prebuilt_test.go
+++ b/cc/prebuilt_test.go
@@ -72,9 +72,7 @@
ctx := CreateTestContext()
- ctx.RegisterModuleType("cc_prebuilt_library_shared", PrebuiltSharedLibraryFactory)
- ctx.RegisterModuleType("cc_prebuilt_library_static", PrebuiltStaticLibraryFactory)
- ctx.RegisterModuleType("cc_prebuilt_binary", prebuiltBinaryFactory)
+ RegisterPrebuiltBuildComponents(ctx)
ctx.PreArchMutators(android.RegisterPrebuiltsPreArchMutators)
ctx.PostDepsMutators(android.RegisterPrebuiltsPostDepsMutators)
diff --git a/java/java_test.go b/java/java_test.go
index adc5ad1..1f25962 100644
--- a/java/java_test.go
+++ b/java/java_test.go
@@ -74,13 +74,12 @@
RegisterDocsBuildComponents(ctx)
RegisterStubsBuildComponents(ctx)
RegisterSdkLibraryBuildComponents(ctx)
- ctx.RegisterModuleType("prebuilt_apis", PrebuiltApisFactory)
ctx.PreArchMutators(android.RegisterPrebuiltsPreArchMutators)
ctx.PreArchMutators(android.RegisterPrebuiltsPostDepsMutators)
ctx.PreArchMutators(android.RegisterDefaultsPreArchMutators)
- ctx.PreArchMutators(func(ctx android.RegisterMutatorsContext) {
- ctx.TopDown("prebuilt_apis", PrebuiltApisMutator).Parallel()
- })
+
+ RegisterPrebuiltApisBuildComponents(ctx)
+
ctx.PostDepsMutators(android.RegisterOverridePostDepsMutators)
ctx.RegisterPreSingletonType("overlay", android.SingletonFactoryAdaptor(OverlaySingletonFactory))
ctx.RegisterPreSingletonType("sdk_versions", android.SingletonFactoryAdaptor(sdkPreSingletonFactory))
diff --git a/java/prebuilt_apis.go b/java/prebuilt_apis.go
index 0d5e31f..cb17fee 100644
--- a/java/prebuilt_apis.go
+++ b/java/prebuilt_apis.go
@@ -23,9 +23,13 @@
)
func init() {
- android.RegisterModuleType("prebuilt_apis", PrebuiltApisFactory)
+ RegisterPrebuiltApisBuildComponents(android.InitRegistrationContext)
+}
- android.PreArchMutators(func(ctx android.RegisterMutatorsContext) {
+func RegisterPrebuiltApisBuildComponents(ctx android.RegistrationContext) {
+ ctx.RegisterModuleType("prebuilt_apis", PrebuiltApisFactory)
+
+ ctx.PreArchMutators(func(ctx android.RegisterMutatorsContext) {
ctx.TopDown("prebuilt_apis", PrebuiltApisMutator).Parallel()
})
}
diff --git a/sdk/testing.go b/sdk/testing.go
index 0aac1a4..61043f3 100644
--- a/sdk/testing.go
+++ b/sdk/testing.go
@@ -87,8 +87,7 @@
ctx.RegisterModuleType("cc_library_shared", cc.LibrarySharedFactory)
ctx.RegisterModuleType("cc_library_static", cc.LibraryStaticFactory)
ctx.RegisterModuleType("cc_object", cc.ObjectFactory)
- ctx.RegisterModuleType("cc_prebuilt_library_shared", cc.PrebuiltSharedLibraryFactory)
- ctx.RegisterModuleType("cc_prebuilt_library_static", cc.PrebuiltStaticLibraryFactory)
+ cc.RegisterPrebuiltBuildComponents(ctx)
ctx.RegisterModuleType("llndk_library", cc.LlndkLibraryFactory)
ctx.RegisterModuleType("toolchain_library", cc.ToolchainLibraryFactory)
ctx.PreDepsMutators(func(ctx android.RegisterMutatorsContext) {