mobile/cmd/gomobile: upgrade to NDK r12b and add nm

gomobile build uses the nm tool which was missing from the NDK r12
upgrade. I missed it because gomobile bind works without it.

Make release.go include nm and upgrade to NDK r12b to make avoid
name clashes with the already released, but inadequate, NDK r12
files.

Finally, update the cmd/gomobile tests to match the new clang
reality.

Fixes golang/go#16268

Change-Id: Ic0cbf75785baace1fe6e88c8dc72d83ce2e13b35
Reviewed-on: https://go-review.googlesource.com/24724
Reviewed-by: Hyang-Ah Hana Kim <hyangah@gmail.com>
diff --git a/cmd/gomobile/bind_test.go b/cmd/gomobile/bind_test.go
index 51d7d60..96ca518 100644
--- a/cmd/gomobile/bind_test.go
+++ b/cmd/gomobile/bind_test.go
@@ -101,7 +101,7 @@
 
 var bindAndroidTmpl = template.Must(template.New("output").Parse(`GOMOBILE={{.GOPATH}}/pkg/gomobile
 WORK=$WORK
-GOOS=android GOARCH=arm CC=$GOMOBILE/android-ndk-r11c/arm/bin/arm-linux-androideabi-gcc CXX=$GOMOBILE/android-ndk-r11c/arm/bin/arm-linux-androideabi-g++ CGO_ENABLED=1 GOARM=7 go install -p={{.NumCPU}} -pkgdir=$GOMOBILE/pkg_android_arm -tags="" -x golang.org/x/mobile/asset
+GOOS=android GOARCH=arm CC=$GOMOBILE/android-{{.NDK}}/arm/bin/arm-linux-androideabi-clang CXX=$GOMOBILE/android-{{.NDK}}/arm/bin/arm-linux-androideabi-clang++ CGO_CFLAGS=-target armv7a-none-linux-androideabi --sysroot $GOMOBILE/android-{{.NDK}}/arm/sysroot CGO_CPPFLAGS=-target armv7a-none-linux-androideabi --sysroot $GOMOBILE/android-{{.NDK}}/arm/sysroot CGO_LDFLAGS=-target armv7a-none-linux-androideabi --sysroot $GOMOBILE/android-{{.NDK}}/arm/sysroot CGO_ENABLED=1 GOARM=7 go install -p={{.NumCPU}} -pkgdir=$GOMOBILE/pkg_android_arm -tags="" -x golang.org/x/mobile/asset
 rm -r -f "$WORK/fakegopath"
 mkdir -p $WORK/fakegopath/pkg
 cp $GOMOBILE/pkg_android_arm/golang.org/x/mobile/asset.a $WORK/fakegopath/pkg/android_arm/golang.org/x/mobile/asset.a
@@ -128,7 +128,7 @@
 cp $GOPATH/src/golang.org/x/mobile/bind/seq.go.support $WORK/gomobile_bind/seq.go
 mkdir -p $WORK/gomobile_bind
 mkdir -p $WORK/android/src/main/java/go
-GOOS=android GOARCH=arm CC=$GOMOBILE/android-{{.NDK}}/arm/bin/arm-linux-androideabi-gcc{{.EXE}} CXX=$GOMOBILE/android-{{.NDK}}/arm/bin/arm-linux-androideabi-g++{{.EXE}} CGO_ENABLED=1 GOARM=7 go build -p={{.NumCPU}} -pkgdir=$GOMOBILE/pkg_android_arm -tags="" -x -buildmode=c-shared -o=$WORK/android/src/main/jniLibs/armeabi-v7a/libgojni.so $WORK/androidlib/main.go
+GOOS=android GOARCH=arm CC=$GOMOBILE/android-{{.NDK}}/arm/bin/arm-linux-androideabi-clang{{.EXE}} CXX=$GOMOBILE/android-{{.NDK}}/arm/bin/arm-linux-androideabi-clang++{{.EXE}} CGO_CFLAGS=-target armv7a-none-linux-androideabi --sysroot $GOMOBILE/android-{{.NDK}}/arm/sysroot CGO_CPPFLAGS=-target armv7a-none-linux-androideabi --sysroot $GOMOBILE/android-{{.NDK}}/arm/sysroot CGO_LDFLAGS=-target armv7a-none-linux-androideabi --sysroot $GOMOBILE/android-{{.NDK}}/arm/sysroot CGO_ENABLED=1 GOARM=7 go build -p={{.NumCPU}} -pkgdir=$GOMOBILE/pkg_android_arm -tags="" -x -buildmode=c-shared -o=$WORK/android/src/main/jniLibs/armeabi-v7a/libgojni.so $WORK/androidlib/main.go
 rm $WORK/android/src/main/java/go/Seq.java
 ln -s $GOPATH/src/golang.org/x/mobile/bind/java/Seq.java $WORK/android/src/main/java/go/Seq.java
 rm $WORK/android/src/main/java/go/LoadJNI.java
diff --git a/cmd/gomobile/build_test.go b/cmd/gomobile/build_test.go
index 43e9b17..7b808cd 100644
--- a/cmd/gomobile/build_test.go
+++ b/cmd/gomobile/build_test.go
@@ -100,7 +100,7 @@
 var androidBuildTmpl = template.Must(template.New("output").Parse(`GOMOBILE={{.GOPATH}}/pkg/gomobile
 WORK=$WORK
 mkdir -p $WORK/lib/armeabi-v7a
-GOOS=android GOARCH=arm CC=$GOMOBILE/android-{{.NDK}}/arm/bin/arm-linux-androideabi-gcc{{.EXE}} CXX=$GOMOBILE/android-{{.NDK}}/arm/bin/arm-linux-androideabi-g++{{.EXE}} CGO_ENABLED=1 GOARM=7 go build -p={{.NumCPU}} -pkgdir=$GOMOBILE/pkg_android_arm -tags="tag1" -x -buildmode=c-shared -o $WORK/lib/armeabi-v7a/libbasic.so golang.org/x/mobile/example/basic
+GOOS=android GOARCH=arm CC=$GOMOBILE/android-{{.NDK}}/arm/bin/arm-linux-androideabi-clang{{.EXE}} CXX=$GOMOBILE/android-{{.NDK}}/arm/bin/arm-linux-androideabi-clang++{{.EXE}} CGO_CFLAGS=-target armv7a-none-linux-androideabi --sysroot $GOMOBILE/android-{{.NDK}}/arm/sysroot CGO_CPPFLAGS=-target armv7a-none-linux-androideabi --sysroot $GOMOBILE/android-{{.NDK}}/arm/sysroot CGO_LDFLAGS=-target armv7a-none-linux-androideabi --sysroot $GOMOBILE/android-{{.NDK}}/arm/sysroot CGO_ENABLED=1 GOARM=7 go build -p={{.NumCPU}} -pkgdir=$GOMOBILE/pkg_android_arm -tags="tag1" -x -buildmode=c-shared -o $WORK/lib/armeabi-v7a/libbasic.so golang.org/x/mobile/example/basic
 `))
 
 func TestParseBuildTargetFlag(t *testing.T) {
diff --git a/cmd/gomobile/hashes.go b/cmd/gomobile/hashes.go
index 41e8f9e..f2fec62 100644
--- a/cmd/gomobile/hashes.go
+++ b/cmd/gomobile/hashes.go
@@ -7,13 +7,13 @@
 // Hashes were computed with 'go run release.go'
 
 var fetchHashes = map[string]string{
-	"android-ndk-r12-darwin-x86_64.zip":            "fe10b64a65f3e818b852862975ea7b5896295cd1301d1acdbeb1294d9592fb19",
-	"gomobile-ndk-r12-darwin-x86_64.tar.gz":        "861c5b6d464923f4bac16f47999d838a6a15184b17f5482049e52949dfece44c",
-	"android-ndk-r12-linux-x86_64.zip":             "7876e3b99f3596a3215ecf4e9f152d24b82dfdf2bbe7d3a38c423ae6a3edee79",
-	"gomobile-ndk-r12-linux-x86_64.tar.gz":         "ffa4b99736b8df22f26027167ab5e6e3d1d74aaf838622009134cd022b9bc9e2",
-	"android-ndk-r12-windows-x86.zip":              "72a18b670086601e827f6fe4f49e31239f969138ddc9468800e64d6a4fc5bd81",
-	"gomobile-ndk-r12-windows-x86.tar.gz":          "ed201197b87bb1ed830d5ac5cdbccf65b1833d8b338a82804e7d6a3dc8da80cd",
-	"android-ndk-r12-windows-x86_64.zip":           "85c5d6d43a04b43cd004771394db37e8f7a7a074ce4c7db7476880cc1a41607f",
-	"gomobile-ndk-r12-windows-x86_64.tar.gz":       "f9ccdf1687a41a4dddf221c451f43fb8cd5729d8a40d9c61da3d8c86b352b1b0",
-	"gomobile-openal-soft-1.16.0.1-ndk-r12.tar.gz": "ede844ee14491a45686657998a12ccb591e7958332fb099581018a11697ffbb2",
+	"android-ndk-r12b-darwin-x86_64.zip":            "2bdef9143a2c7680fcb7c9fd54fe85013d591f106aea43831eba5e13e10db77e",
+	"gomobile-ndk-r12b-darwin-x86_64.tar.gz":        "2c4365d033fc3c9e1fbeeb6c2773f75116a0c76000ebf0dab7290506ba9acb07",
+	"android-ndk-r12b-linux-x86_64.zip":             "eafae2d614e5475a3bcfd7c5f201db5b963cc1290ee3e8ae791ff0c66757781e",
+	"gomobile-ndk-r12b-linux-x86_64.tar.gz":         "3eaeb237f89fa7ca44dbc760085a79a1efe9c6e830f3bedf68e5473bbd716fed",
+	"android-ndk-r12b-windows-x86.zip":              "4b3b522775858bdf4e5e8f7365e06fdabb9913fb7b9f45d7010232f8271fb42c",
+	"gomobile-ndk-r12b-windows-x86.tar.gz":          "2108256dac7fe7499c139915672c0f68eca1bcfe3d9660b1ef0f9c3e776459ee",
+	"android-ndk-r12b-windows-x86_64.zip":           "a201b9dad71802464823dcfc77f61445ec1bbd8a29baa154d0a6ed84f50298ae",
+	"gomobile-ndk-r12b-windows-x86_64.tar.gz":       "558b124266add3bced8591596911862fdf7949f689a79f612c3f9e48ef8a2199",
+	"gomobile-openal-soft-1.16.0.1-ndk-r12b.tar.gz": "848307aa48311a2d4f6cd05661724b121c8f8663d616dfc8c573f9e5d926cf1d",
 }
diff --git a/cmd/gomobile/init.go b/cmd/gomobile/init.go
index 3dcea9b..bde3eca 100644
--- a/cmd/gomobile/init.go
+++ b/cmd/gomobile/init.go
@@ -30,7 +30,7 @@
 // There is a significant size different (400MB compared to 30MB).
 var useStrippedNDK = true
 
-const ndkVersion = "ndk-r12"
+const ndkVersion = "ndk-r12b"
 const openALVersion = "openal-soft-1.16.0.1-" + ndkVersion
 
 var (
@@ -445,7 +445,7 @@
 			return err
 		}
 
-		for _, name := range []string{"ld", "as"} {
+		for _, name := range []string{"ld", "as", "nm"} {
 			if goos == "windows" {
 				name += ".exe"
 			}
diff --git a/cmd/gomobile/init_test.go b/cmd/gomobile/init_test.go
index c6678b8..c89db9c 100644
--- a/cmd/gomobile/init_test.go
+++ b/cmd/gomobile/init_test.go
@@ -113,26 +113,30 @@
 mkdir -p $GOMOBILE/dl
 curl -o$GOMOBILE/dl/gomobile-{{.NDK}}-{{.GOOS}}-{{.NDKARCH}}.tar.gz https://dl.google.com/go/mobile/gomobile-{{.NDK}}-{{.GOOS}}-{{.NDKARCH}}.tar.gz
 tar xfz $GOMOBILE/dl/gomobile-{{.NDK}}-{{.GOOS}}-{{.NDKARCH}}.tar.gz
+mkdir -p $GOMOBILE/android-{{.NDK}}/llvm/bin
+mv $WORK/android-{{.NDK}}/toolchains/llvm/prebuilt/linux-x86_64/bin/clang $GOMOBILE/android-{{.NDK}}/llvm/bin/clang
+mv $WORK/android-{{.NDK}}/toolchains/llvm/prebuilt/linux-x86_64/bin/clang++ $GOMOBILE/android-{{.NDK}}/llvm/bin/clang++
+mv $WORK/android-{{.NDK}}/toolchains/llvm/prebuilt/linux-x86_64/lib64 $GOMOBILE/android-{{.NDK}}/llvm/lib64
 mkdir -p $GOMOBILE/android-{{.NDK}}/arm/sysroot
 mv $WORK/android-{{.NDK}}/platforms/android-15/arch-arm/usr $GOMOBILE/android-{{.NDK}}/arm/sysroot/usr
 mv $WORK/android-{{.NDK}}/toolchains/arm-linux-androideabi-4.9/prebuilt/{{.GOOS}}-{{.NDKARCH}}/bin $GOMOBILE/android-{{.NDK}}/arm/bin
 mv $WORK/android-{{.NDK}}/toolchains/arm-linux-androideabi-4.9/prebuilt/{{.GOOS}}-{{.NDKARCH}}/lib $GOMOBILE/android-{{.NDK}}/arm/lib
-mv $WORK/android-{{.NDK}}/toolchains/arm-linux-androideabi-4.9/prebuilt/{{.GOOS}}-{{.NDKARCH}}/libexec $GOMOBILE/android-{{.NDK}}/arm/libexec
 mkdir -p $GOMOBILE/android-{{.NDK}}/arm/arm-linux-androideabi/bin
 ln -s $GOMOBILE/android-{{.NDK}}/arm/bin/arm-linux-androideabi-ld{{.EXE}} $GOMOBILE/android-{{.NDK}}/arm/arm-linux-androideabi/bin/ld{{.EXE}}
 ln -s $GOMOBILE/android-{{.NDK}}/arm/bin/arm-linux-androideabi-as{{.EXE}} $GOMOBILE/android-{{.NDK}}/arm/arm-linux-androideabi/bin/as{{.EXE}}
-ln -s $GOMOBILE/android-{{.NDK}}/arm/bin/arm-linux-androideabi-gcc{{.EXE}} $GOMOBILE/android-{{.NDK}}/arm/arm-linux-androideabi/bin/gcc{{.EXE}}
-ln -s $GOMOBILE/android-{{.NDK}}/arm/bin/arm-linux-androideabi-g++{{.EXE}} $GOMOBILE/android-{{.NDK}}/arm/arm-linux-androideabi/bin/g++{{.EXE}}
+ln -s $GOMOBILE/android-{{.NDK}}/arm/bin/arm-linux-androideabi-nm{{.EXE}} $GOMOBILE/android-{{.NDK}}/arm/arm-linux-androideabi/bin/nm{{.EXE}}
+ln -s $GOMOBILE/android-{{.NDK}}/llvm/bin/clang $GOMOBILE/android-{{.NDK}}/arm/bin/arm-linux-androideabi-clang
+ln -s $GOMOBILE/android-{{.NDK}}/llvm/bin/clang++ $GOMOBILE/android-{{.NDK}}/arm/bin/arm-linux-androideabi-clang++
 mkdir -p $GOMOBILE/dl
-curl -o$GOMOBILE/dl/gomobile-openal-soft-1.16.0.1.tar.gz https://dl.google.com/go/mobile/gomobile-openal-soft-1.16.0.1.tar.gz
-tar xfz $GOMOBILE/dl/gomobile-openal-soft-1.16.0.1.tar.gz
+curl -o$GOMOBILE/dl/gomobile-openal-soft-1.16.0.1-{{.NDK}}.tar.gz https://dl.google.com/go/mobile/gomobile-openal-soft-1.16.0.1-{{.NDK}}.tar.gz
+tar xfz $GOMOBILE/dl/gomobile-openal-soft-1.16.0.1-{{.NDK}}.tar.gz
 cp -r $WORK/openal/include/AL $GOMOBILE/android-{{.NDK}}/arm/sysroot/usr/include/AL
 mkdir -p $GOMOBILE/android-{{.NDK}}/openal
 mv $WORK/openal/lib $GOMOBILE/android-{{.NDK}}/openal/lib{{if eq .GOOS "darwin"}}
 go install -p={{.NumCPU}} -x golang.org/x/mobile/gl
 go install -p={{.NumCPU}} -x golang.org/x/mobile/app
 go install -p={{.NumCPU}} -x golang.org/x/mobile/exp/app/debug{{end}}
-GOOS=android GOARCH=arm CC=$GOMOBILE/android-{{.NDK}}/arm/bin/arm-linux-androideabi-gcc{{.EXE}} CXX=$GOMOBILE/android-{{.NDK}}/arm/bin/arm-linux-androideabi-g++{{.EXE}} CGO_ENABLED=1 GOARM=7 go install -p={{.NumCPU}} -pkgdir=$GOMOBILE/pkg_android_arm -x std
+GOOS=android GOARCH=arm CC=$GOMOBILE/android-{{.NDK}}/arm/bin/arm-linux-androideabi-clang{{.EXE}} CXX=$GOMOBILE/android-{{.NDK}}/arm/bin/arm-linux-androideabi-clang++{{.EXE}} CGO_CFLAGS=-target armv7a-none-linux-androideabi --sysroot $GOMOBILE/android-{{.NDK}}/arm/sysroot CGO_CPPFLAGS=-target armv7a-none-linux-androideabi --sysroot $GOMOBILE/android-{{.NDK}}/arm/sysroot CGO_LDFLAGS=-target armv7a-none-linux-androideabi --sysroot $GOMOBILE/android-{{.NDK}}/arm/sysroot CGO_ENABLED=1 GOARM=7 go install -p={{.NumCPU}} -pkgdir=$GOMOBILE/pkg_android_arm -x std
 {{if eq .GOOS "darwin"}}GOOS=darwin GOARCH=arm GOARM=7 CC=clang-iphoneos CXX=clang-iphoneos CGO_CFLAGS=-isysroot=iphoneos -miphoneos-version-min=6.1 -arch armv7 CGO_LDFLAGS=-isysroot=iphoneos -miphoneos-version-min=6.1 -arch armv7 CGO_ENABLED=1 go install -p={{.NumCPU}} -pkgdir=$GOMOBILE/pkg_darwin_arm -x std
 GOOS=darwin GOARCH=arm64 CC=clang-iphoneos CXX=clang-iphoneos CGO_CFLAGS=-isysroot=iphoneos -miphoneos-version-min=6.1 -arch arm64 CGO_LDFLAGS=-isysroot=iphoneos -miphoneos-version-min=6.1 -arch arm64 CGO_ENABLED=1 go install -p={{.NumCPU}} -pkgdir=$GOMOBILE/pkg_darwin_arm64 -x std
 GOOS=darwin GOARCH=amd64 CC=clang-iphonesimulator CXX=clang-iphonesimulator CGO_CFLAGS=-isysroot=iphonesimulator -mios-simulator-version-min=6.1 -arch x86_64 CGO_LDFLAGS=-isysroot=iphonesimulator -mios-simulator-version-min=6.1 -arch x86_64 CGO_ENABLED=1 go install -p={{.NumCPU}} -tags=ios -pkgdir=$GOMOBILE/pkg_darwin_amd64 -x std
diff --git a/cmd/gomobile/release.go b/cmd/gomobile/release.go
index 6dfac02..589a124 100644
--- a/cmd/gomobile/release.go
+++ b/cmd/gomobile/release.go
@@ -31,7 +31,7 @@
 	"strconv"
 )
 
-const ndkVersion = "ndk-r12"
+const ndkVersion = "ndk-r12b"
 
 type version struct {
 	os   string
@@ -265,7 +265,7 @@
 		if err := move(dst+"/"+gcc, src+"/"+gcc, "lib", "COPYING", "COPYING.LIB"); err != nil {
 			return err
 		}
-		for _, exe := range []string{"as", "ld"} {
+		for _, exe := range []string{"as", "ld", "nm"} {
 			if host.os == "windows" {
 				exe += ".exe"
 			}