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/common/arch.go b/common/arch.go
index 6865904..c0e63eb 100644
--- a/common/arch.go
+++ b/common/arch.go
@@ -20,10 +20,17 @@
 	"runtime"
 	"strings"
 
+	"android/soong"
+
 	"github.com/google/blueprint"
 	"github.com/google/blueprint/proptools"
 )
 
+func init() {
+	soong.RegisterEarlyMutator("host_or_device", HostOrDeviceMutator)
+	soong.RegisterEarlyMutator("arch", ArchMutator)
+}
+
 var (
 	Arm    = newArch("arm", "lib32")
 	Arm64  = newArch("arm64", "lib64")
diff --git a/common/env.go b/common/env.go
index e33a025..3214baa 100644
--- a/common/env.go
+++ b/common/env.go
@@ -15,6 +15,7 @@
 package common
 
 import (
+	"android/soong"
 	"android/soong/env"
 
 	"github.com/google/blueprint"
@@ -27,6 +28,10 @@
 // compare the contents of the environment variables, rewriting the file if necessary to cause
 // a manifest regeneration.
 
+func init() {
+	soong.RegisterSingletonType("env", EnvSingleton)
+}
+
 func EnvSingleton() blueprint.Singleton {
 	return &envSingleton{}
 }
diff --git a/common/module.go b/common/module.go
index 1d17de1..b19b6d1 100644
--- a/common/module.go
+++ b/common/module.go
@@ -15,6 +15,7 @@
 package common
 
 import (
+	"android/soong"
 	"path/filepath"
 	"runtime"
 	"sort"
@@ -520,6 +521,10 @@
 	return ret
 }
 
+func init() {
+	soong.RegisterSingletonType("buildtarget", BuildTargetSingleton)
+}
+
 func BuildTargetSingleton() blueprint.Singleton {
 	return &buildTargetSingleton{}
 }