Make BottomUpMutators parallel

Append .Parallel() to all of the RegisterBottomUpMutator calls to tell
Blueprint it can run them in parallel.

Test: identical build.ninja, passes race detector
Change-Id: I969a0689522d4cba7c8ff51e2aa00fe2fd338a89
diff --git a/cc/ndk_library.go b/cc/ndk_library.go
index fe52b0e..b0fd398 100644
--- a/cc/ndk_library.go
+++ b/cc/ndk_library.go
@@ -18,6 +18,7 @@
 	"fmt"
 	"strconv"
 	"strings"
+	"sync"
 
 	"github.com/google/blueprint"
 
@@ -58,7 +59,8 @@
 
 	// These libraries have migrated over to the new ndk_library, which is added
 	// as a variation dependency via depsMutator.
-	ndkMigratedLibs = []string{}
+	ndkMigratedLibs     = []string{}
+	ndkMigratedLibsLock sync.Mutex // protects ndkMigratedLibs writes during parallel beginMutator
 )
 
 // Creates a stub shared library based on the provided version file.
@@ -177,6 +179,8 @@
 	c.baseCompiler.compilerInit(ctx)
 
 	name := strings.TrimSuffix(ctx.ModuleName(), ".ndk")
+	ndkMigratedLibsLock.Lock()
+	defer ndkMigratedLibsLock.Unlock()
 	for _, lib := range ndkMigratedLibs {
 		if lib == name {
 			return