cmd/gomobile: add support for android/arm64

forked from https://golang.org/cl/20434

- added app/internal/callfn package update.

- changed hashes.go because -for some reason- the generated hashes don't match.

- build_androidapp.go had to be changed to deal with openal package.

Fixes golang/go#10743

Change-Id: Iaa3f55d80c5fd184338d27832dc5c90cb772bd6a
Reviewed-on: https://go-review.googlesource.com/20707
Reviewed-by: David Crawshaw <crawshaw@golang.org>
Reviewed-by: Elias Naur <elias.naur@gmail.com>
This commit is contained in:
Hyang-Ah Hana Kim
2016-03-14 17:47:25 -04:00
parent 3e830506b0
commit 74ee969d3f
7 changed files with 48 additions and 9 deletions

View File

@ -3,7 +3,7 @@
// license that can be found in the LICENSE file.
// +build android
// +build arm 386 amd64
// +build arm 386 amd64 arm64
// Package callfn provides an android entry point.
//

View File

@ -0,0 +1,11 @@
// Copyright 2016 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
#include "textflag.h"
#include "funcdata.h"
TEXT ·CallFn(SB),$0-8
MOVD fn+0(FP), R0
BL (R0)
RET

View File

@ -173,6 +173,8 @@ func goAndroidBuild(pkg *build.Package, androidArchs []string) (map[string]bool,
src := dst
if arch == "arm" {
src = "lib/armeabi/libopenal.so"
} else if arch == "arm64" {
src = "lib/arm64/libopenal.so"
}
if err := apkwWriteFile(dst, filepath.Join(ndk.Root(), "openal/"+src)); err != nil {
return nil, err

View File

@ -291,6 +291,14 @@ var ndk = ndkConfig{
toolPrefix: "arm-linux-androideabi",
minGoVer: go1_5,
},
"arm64": {
arch: "arm64",
abi: "arm64-v8a",
platform: "android-21",
gcc: "aarch64-linux-android-4.9",
toolPrefix: "aarch64-linux-android",
minGoVer: go1_6,
},
"386": {
arch: "x86",

View File

@ -8,14 +8,14 @@ package main
var fetchHashes = map[string]string{
"android-ndk-r10e-darwin-x86_64.bin": "728c309e606f63101f1258c9d3d579b80ac74fe74c511ebb71f460ce5c5d084e",
"gomobile-ndk-r10e-darwin-x86_64.tar.gz": "9185a734b1b3d8dd29f3bc3c55cf03e397414e656345b7ed835879ee8eb76ebb",
"gomobile-ndk-r10e-darwin-x86_64.tar.gz": "e8bff8a56f5688ec849a95a4e85130ce02eff5c2d54e361103777c396db8d308",
"android-ndk-r10e-linux-x86.bin": "92b07d25aaad9b341a7f2b2a62402d508e948bf2dea3ee7b65a6aeb18bca7df5",
"gomobile-ndk-r10e-linux-x86.tar.gz": "eafb03ba5cf4712673f44a0991579c235774ff185dd846c1c5ecb3527acac22b",
"gomobile-ndk-r10e-linux-x86.tar.gz": "4cc1dd2a1bdf4d81618223d6b25a9d5b5673389c5977a7bff85a89a15afd36a2",
"android-ndk-r10e-linux-x86_64.bin": "102d6723f67ff1384330d12c45854315d6452d6510286f4e5891e00a5a8f1d5a",
"gomobile-ndk-r10e-linux-x86_64.tar.gz": "709d96f5234c224e4b72254fd2e196d0e1486b8d943e972ed98cf14e3ca7bdde",
"gomobile-ndk-r10e-linux-x86_64.tar.gz": "bacfed664a7b69b1b693f246ea49a85f04f502bd1ae723351c5345ab5b2ba850",
"android-ndk-r10e-windows-x86.exe": "5378a60a796de75a2d609b76f5c56df7a343511ec36a823bae8c7423591cc8f5",
"gomobile-ndk-r10e-windows-x86.tar.gz": "5a2da001af85d2b9baf257c556159dc3e0a92f115d2e3d290894dcd8dfe9552e",
"gomobile-ndk-r10e-windows-x86.tar.gz": "4c0d647519a5d254d39a13f8ec85951ca378d8eb8463fdcde5c46490b1f2c382",
"android-ndk-r10e-windows-x86_64.exe": "9bc55ea4b3ad38dcd34157528760e62183b63ebc4a38a6ca478889ff7583d9c1",
"gomobile-ndk-r10e-windows-x86_64.tar.gz": "0c964522f25a27192c4facd7264e71e395d1c383b09276cf3617a02e77af3a74",
"gomobile-openal-soft-1.16.0.1.tar.gz": "df8492a31030c4a940aa17602ea7ce56eb0759be9235f68fcce4c51150e49881",
"gomobile-ndk-r10e-windows-x86_64.tar.gz": "582cc90605c8cc026be0d70ccf58d2ec44373f7e855fbb2faee59c2cf2f7121e",
"gomobile-openal-soft-1.16.0.1.tar.gz": "ff7ff835355a1158001e6b6cc03d3a65abb508abc34a5f19ae9af0bdeadd978b",
}

View File

@ -4,8 +4,6 @@
package main
// TODO(crawshaw): android/{386,arm64}
import (
"archive/tar"
"bytes"
@ -426,6 +424,25 @@ func fetchNDK() error {
return err
}
// ndk-r10e arm64 toolchain has a bug in ld.bfd and for aarch64
// ld.bfd is the default linker. Workaround by switching the
// default to ld.gold.
// TODO(hyangah): remove this when using the new version of ndk.
if toolchain.arch == "arm64" {
ld := filepath.Join(dst, "bin/aarch64-linux-android-ld")
ldgold := ld + ".gold"
if goos == "windows" {
ld += ".exe"
ldgold += ".exe"
}
if err := rm(ld); err != nil {
return err
}
if err := symlink(ldgold, ld); err != nil {
return err
}
}
linkpath := filepath.Join(dst, toolchain.toolPrefix+"/bin")
if err := mkdir(linkpath); err != nil {
return err

View File

@ -53,6 +53,7 @@ type target struct {
var targets = []target{
{"arm", "android-15", "arm-linux-androideabi-4.8", "arm-linux-androideabi"},
{"arm64", "android-21", "aarch64-linux-android-4.9", "aarch64-linux-android"},
{"x86", "android-15", "x86-4.8", "i686-linux-android"},
{"x86_64", "android-21", "x86_64-4.9", "x86_64-linux-android"},
}