mobile/cmd/gomobile: upgrade to ndk-r11c
Update gcc version to 4.9 everywhere. NDK r11 stopped support
for gcc 4.8.
Switch from bin/exe format to zip format.
Drop support for linux/x86, since r11c no longer supports it.
Change the NDK URLs from http://dl.google.com/android/ndk/ to
https://dl.google.com/android/repository/.
Add a flag, -ndkdir, to specify where the downloaded NDK files for
processing are found and downloaded.
Check the status code from the http.Get that fetches the NDK files.
Change-Id: I836de6611bd04f5220e01937a3288a91604b8999
Reviewed-on: https://go-review.googlesource.com/23592
Reviewed-by: Hyang-Ah Hana Kim <hyangah@gmail.com>
diff --git a/cmd/gomobile/bind_test.go b/cmd/gomobile/bind_test.go
index 09a89d1..d0b7736 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-r10e/arm/bin/arm-linux-androideabi-gcc CXX=$GOMOBILE/android-ndk-r10e/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-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
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
diff --git a/cmd/gomobile/env.go b/cmd/gomobile/env.go
index dbfa852..4c65a65 100644
--- a/cmd/gomobile/env.go
+++ b/cmd/gomobile/env.go
@@ -287,7 +287,7 @@
arch: "arm",
abi: "armeabi-v7a",
platform: "android-15",
- gcc: "arm-linux-androideabi-4.8",
+ gcc: "arm-linux-androideabi-4.9",
toolPrefix: "arm-linux-androideabi",
minGoVer: go1_5,
},
@@ -304,7 +304,7 @@
arch: "x86",
abi: "x86",
platform: "android-15",
- gcc: "x86-4.8",
+ gcc: "x86-4.9",
toolPrefix: "i686-linux-android",
minGoVer: go1_6,
},
diff --git a/cmd/gomobile/hashes.go b/cmd/gomobile/hashes.go
index 871bf70..0771196 100644
--- a/cmd/gomobile/hashes.go
+++ b/cmd/gomobile/hashes.go
@@ -7,15 +7,13 @@
// Hashes were computed with 'go run release.go'
var fetchHashes = map[string]string{
- "android-ndk-r10e-darwin-x86_64.bin": "728c309e606f63101f1258c9d3d579b80ac74fe74c511ebb71f460ce5c5d084e",
- "gomobile-ndk-r10e-darwin-x86_64.tar.gz": "e8bff8a56f5688ec849a95a4e85130ce02eff5c2d54e361103777c396db8d308",
- "android-ndk-r10e-linux-x86.bin": "92b07d25aaad9b341a7f2b2a62402d508e948bf2dea3ee7b65a6aeb18bca7df5",
- "gomobile-ndk-r10e-linux-x86.tar.gz": "4cc1dd2a1bdf4d81618223d6b25a9d5b5673389c5977a7bff85a89a15afd36a2",
- "android-ndk-r10e-linux-x86_64.bin": "102d6723f67ff1384330d12c45854315d6452d6510286f4e5891e00a5a8f1d5a",
- "gomobile-ndk-r10e-linux-x86_64.tar.gz": "bacfed664a7b69b1b693f246ea49a85f04f502bd1ae723351c5345ab5b2ba850",
- "android-ndk-r10e-windows-x86.exe": "5378a60a796de75a2d609b76f5c56df7a343511ec36a823bae8c7423591cc8f5",
- "gomobile-ndk-r10e-windows-x86.tar.gz": "4c0d647519a5d254d39a13f8ec85951ca378d8eb8463fdcde5c46490b1f2c382",
- "android-ndk-r10e-windows-x86_64.exe": "9bc55ea4b3ad38dcd34157528760e62183b63ebc4a38a6ca478889ff7583d9c1",
- "gomobile-ndk-r10e-windows-x86_64.tar.gz": "582cc90605c8cc026be0d70ccf58d2ec44373f7e855fbb2faee59c2cf2f7121e",
- "gomobile-openal-soft-1.16.0.1.tar.gz": "ff7ff835355a1158001e6b6cc03d3a65abb508abc34a5f19ae9af0bdeadd978b",
+ "android-ndk-r11c-darwin-x86_64.zip": "fe2f8986074717240df45f03e93a4436dac2040dc12fecee4853953d584424b3",
+ "gomobile-ndk-r11c-darwin-x86_64.tar.gz": "1d563c5c27dcb3643eb3cbd4e44b535aec052c600350d6203374e0100b1d75ff",
+ "android-ndk-r11c-linux-x86_64.zip": "ba85dbe4d370e4de567222f73a3e034d85fc3011b3cbd90697f3e8dcace3ad94",
+ "gomobile-ndk-r11c-linux-x86_64.tar.gz": "eb0a657e03dad70dce33281414d2fdf38f2b313a8a1a4323d0648e9d16198d74",
+ "android-ndk-r11c-windows-x86.zip": "eea7d148cf046baad2b8f3fd8e4a27d3695964079db0da6b9fca08051bb4dccb",
+ "gomobile-ndk-r11c-windows-x86.tar.gz": "7f6b53f55993aa0deccace0ab2829ebb0e93d6bf2196a964f63bfde46da95d9e",
+ "android-ndk-r11c-windows-x86_64.zip": "55c69f1d5a3602b3f6d6cea280b16938f17d6a4b509af01641d4db1280088d90",
+ "gomobile-ndk-r11c-windows-x86_64.tar.gz": "b3e1e17ec6d19b7512e6b5277fccc3a61e4c4b6bab6c4a3874d856c0332a61db",
+ "gomobile-openal-soft-1.16.0.1.tar.gz": "84c9361734902df622dd49a8c0cfb0090fd7743a2cbf927a9ae85c4826beb173",
}
diff --git a/cmd/gomobile/init.go b/cmd/gomobile/init.go
index d976dd5..ef52e19 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-r10e"
+const ndkVersion = "ndk-r11c"
const openALVersion = "openal-soft-1.16.0.1"
var (
diff --git a/cmd/gomobile/init_test.go b/cmd/gomobile/init_test.go
index 6fe8f5d..c6678b8 100644
--- a/cmd/gomobile/init_test.go
+++ b/cmd/gomobile/init_test.go
@@ -115,9 +115,9 @@
tar xfz $GOMOBILE/dl/gomobile-{{.NDK}}-{{.GOOS}}-{{.NDKARCH}}.tar.gz
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.8/prebuilt/{{.GOOS}}-{{.NDKARCH}}/bin $GOMOBILE/android-{{.NDK}}/arm/bin
-mv $WORK/android-{{.NDK}}/toolchains/arm-linux-androideabi-4.8/prebuilt/{{.GOOS}}-{{.NDKARCH}}/lib $GOMOBILE/android-{{.NDK}}/arm/lib
-mv $WORK/android-{{.NDK}}/toolchains/arm-linux-androideabi-4.8/prebuilt/{{.GOOS}}-{{.NDKARCH}}/libexec $GOMOBILE/android-{{.NDK}}/arm/libexec
+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}}
diff --git a/cmd/gomobile/release.go b/cmd/gomobile/release.go
index 9e7f2ab..54288b1 100644
--- a/cmd/gomobile/release.go
+++ b/cmd/gomobile/release.go
@@ -17,6 +17,7 @@
"compress/gzip"
"crypto/sha256"
"encoding/hex"
+ "flag"
"fmt"
"hash"
"io"
@@ -29,7 +30,7 @@
"runtime"
)
-const ndkVersion = "ndk-r10e"
+const ndkVersion = "ndk-r11c"
type version struct {
os string
@@ -38,7 +39,6 @@
var hosts = []version{
{"darwin", "x86_64"},
- {"linux", "x86"},
{"linux", "x86_64"},
{"windows", "x86"},
{"windows", "x86_64"},
@@ -52,15 +52,19 @@
}
var targets = []target{
- {"arm", "android-15", "arm-linux-androideabi-4.8", "arm-linux-androideabi"},
+ {"arm", "android-15", "arm-linux-androideabi-4.9", "arm-linux-androideabi"},
{"arm64", "android-21", "aarch64-linux-android-4.9", "aarch64-linux-android"},
- {"x86", "android-15", "x86-4.8", "i686-linux-android"},
+ {"x86", "android-15", "x86-4.9", "i686-linux-android"},
{"x86_64", "android-21", "x86_64-4.9", "x86_64-linux-android"},
}
-var tmpdir string
+var (
+ ndkdir = flag.String("ndkdir", "", "Directory for the downloaded NDKs for caching")
+ tmpdir string
+)
func main() {
+ flag.Parse()
var err error
tmpdir, err = ioutil.TempDir("", "gomobile-release-")
if err != nil {
@@ -187,15 +191,14 @@
}
func fetchNDK(host version) (binPath, url string, err error) {
- ndkName := "android-" + ndkVersion + "-" + host.os + "-" + host.arch + "."
- if host.os == "windows" {
- ndkName += "exe"
- } else {
- ndkName += "bin"
- }
+ ndkName := "android-" + ndkVersion + "-" + host.os + "-" + host.arch + ".zip"
- url = "http://dl.google.com/android/ndk/" + ndkName
- binPath = tmpdir + "/" + ndkName
+ url = "https://dl.google.com/android/repository/" + ndkName
+ binPath = *ndkdir
+ if binPath == "" {
+ binPath = tmpdir
+ }
+ binPath += "/" + ndkName
if _, err := os.Stat(binPath); err == nil {
log.Printf("\t%q: using cached NDK\n", ndkName)
@@ -336,6 +339,9 @@
if err != nil {
return "", err
}
+ if sc := resp.StatusCode; sc != http.StatusOK {
+ return "", fmt.Errorf("invalid HTTP status %d", sc)
+ }
hashw := sha256.New()
_, err = io.Copy(io.MultiWriter(hashw, f), resp.Body)
err2 := resp.Body.Close()
@@ -353,11 +359,8 @@
}
func inflate(dst, path string) error {
- p7zip := "7z"
- if runtime.GOOS == "darwin" {
- p7zip = "/Applications/Keka.app/Contents/Resources/keka7z"
- }
- cmd := exec.Command(p7zip, "x", path)
+ unzip := "unzip"
+ cmd := exec.Command(unzip, path)
cmd.Dir = dst
out, err := cmd.CombinedOutput()
if err != nil {