use init functions to register module types, etc.

Instead of putting all the blueprint registrations in soong_build,
put them all in init() functions.  This puts the registration next
to the implementation.

Change-Id: Ide1a749518f5e9d1367a18ab3bb1d91da3310c76
diff --git a/cmd/soong_build/main.go b/cmd/soong_build/main.go
index 9ef0d06..94fb6e7 100644
--- a/cmd/soong_build/main.go
+++ b/cmd/soong_build/main.go
@@ -20,14 +20,16 @@
 	"os"
 	"path/filepath"
 
-	"github.com/google/blueprint"
 	"github.com/google/blueprint/bootstrap"
 
-	"android/soong/art"
-	"android/soong/cc"
+	"android/soong"
+
+	// These imports cause the modules to register their ModuleTypes, etc. with the soong package
+	_ "android/soong/art"
+	_ "android/soong/cc"
 	"android/soong/common"
-	"android/soong/genrule"
-	"android/soong/java"
+	_ "android/soong/genrule"
+	_ "android/soong/java"
 )
 
 func main() {
@@ -36,54 +38,7 @@
 	// The top-level Blueprints file is passed as the first argument.
 	srcDir := filepath.Dir(flag.Arg(0))
 
-	ctx := blueprint.NewContext()
-
-	// Module types
-	ctx.RegisterModuleType("cc_library_static", cc.CCLibraryStaticFactory)
-	ctx.RegisterModuleType("cc_library_shared", cc.CCLibrarySharedFactory)
-	ctx.RegisterModuleType("cc_library", cc.CCLibraryFactory)
-	ctx.RegisterModuleType("cc_object", cc.CCObjectFactory)
-	ctx.RegisterModuleType("cc_binary", cc.CCBinaryFactory)
-	ctx.RegisterModuleType("cc_test", cc.CCTestFactory)
-	ctx.RegisterModuleType("cc_benchmark", cc.CCBenchmarkFactory)
-
-	ctx.RegisterModuleType("toolchain_library", cc.ToolchainLibraryFactory)
-	ctx.RegisterModuleType("ndk_prebuilt_library", cc.NdkPrebuiltLibraryFactory)
-	ctx.RegisterModuleType("ndk_prebuilt_object", cc.NdkPrebuiltObjectFactory)
-	ctx.RegisterModuleType("ndk_prebuilt_static_stl", cc.NdkPrebuiltStaticStlFactory)
-	ctx.RegisterModuleType("ndk_prebuilt_shared_stl", cc.NdkPrebuiltSharedStlFactory)
-
-	ctx.RegisterModuleType("cc_library_host_static", cc.CCLibraryHostStaticFactory)
-	ctx.RegisterModuleType("cc_library_host_shared", cc.CCLibraryHostSharedFactory)
-	ctx.RegisterModuleType("cc_binary_host", cc.CCBinaryHostFactory)
-	ctx.RegisterModuleType("cc_test_host", cc.CCTestHostFactory)
-	ctx.RegisterModuleType("cc_benchmark_host", cc.CCBenchmarkHostFactory)
-
-	ctx.RegisterModuleType("gensrcs", genrule.GenSrcsFactory)
-	ctx.RegisterModuleType("genrule", genrule.GenRuleFactory)
-
-	ctx.RegisterModuleType("art_cc_library", art.ArtCCLibraryFactory)
-	ctx.RegisterModuleType("art_cc_binary", art.ArtCCBinaryFactory)
-
-	ctx.RegisterModuleType("java_library", java.JavaLibraryFactory)
-	ctx.RegisterModuleType("java_library_static", java.JavaLibraryFactory)
-	ctx.RegisterModuleType("java_library_host", java.JavaLibraryHostFactory)
-	ctx.RegisterModuleType("java_binary", java.JavaBinaryFactory)
-	ctx.RegisterModuleType("java_binary_host", java.JavaBinaryHostFactory)
-	ctx.RegisterModuleType("prebuilt_java_library", java.JavaPrebuiltFactory)
-	ctx.RegisterModuleType("prebuilt_sdk", java.SdkPrebuiltFactory)
-	ctx.RegisterModuleType("android_app", java.AndroidAppFactory)
-
-	// Mutators
-	ctx.RegisterEarlyMutator("host_or_device", common.HostOrDeviceMutator)
-	ctx.RegisterEarlyMutator("arch", common.ArchMutator)
-	ctx.RegisterEarlyMutator("link", cc.LinkageMutator)
-	ctx.RegisterEarlyMutator("test_per_src", cc.TestPerSrcMutator)
-
-	// Singletons
-	ctx.RegisterSingletonType("buildtarget", common.BuildTargetSingleton)
-	ctx.RegisterSingletonType("env", common.EnvSingleton)
-	ctx.RegisterSingletonType("logtags", java.LogtagsSingleton)
+	ctx := soong.NewContext()
 
 	configuration, err := common.NewConfig(srcDir)
 	if err != nil {