Skip to content

Commit 74ee969

Browse files
committed
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 <[email protected]> Reviewed-by: Elias Naur <[email protected]>
1 parent 3e83050 commit 74ee969

File tree

7 files changed

+48
-9
lines changed

7 files changed

+48
-9
lines changed

app/internal/callfn/callfn.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
// license that can be found in the LICENSE file.
44

55
// +build android
6-
// +build arm 386 amd64
6+
// +build arm 386 amd64 arm64
77

88
// Package callfn provides an android entry point.
99
//

app/internal/callfn/callfn_arm64.s

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

cmd/gomobile/build_androidapp.go

+2
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,8 @@ func goAndroidBuild(pkg *build.Package, androidArchs []string) (map[string]bool,
173173
src := dst
174174
if arch == "arm" {
175175
src = "lib/armeabi/libopenal.so"
176+
} else if arch == "arm64" {
177+
src = "lib/arm64/libopenal.so"
176178
}
177179
if err := apkwWriteFile(dst, filepath.Join(ndk.Root(), "openal/"+src)); err != nil {
178180
return nil, err

cmd/gomobile/env.go

+8
Original file line numberDiff line numberDiff line change
@@ -291,6 +291,14 @@ var ndk = ndkConfig{
291291
toolPrefix: "arm-linux-androideabi",
292292
minGoVer: go1_5,
293293
},
294+
"arm64": {
295+
arch: "arm64",
296+
abi: "arm64-v8a",
297+
platform: "android-21",
298+
gcc: "aarch64-linux-android-4.9",
299+
toolPrefix: "aarch64-linux-android",
300+
minGoVer: go1_6,
301+
},
294302

295303
"386": {
296304
arch: "x86",

cmd/gomobile/hashes.go

+6-6
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,14 @@ package main
88

99
var fetchHashes = map[string]string{
1010
"android-ndk-r10e-darwin-x86_64.bin": "728c309e606f63101f1258c9d3d579b80ac74fe74c511ebb71f460ce5c5d084e",
11-
"gomobile-ndk-r10e-darwin-x86_64.tar.gz": "9185a734b1b3d8dd29f3bc3c55cf03e397414e656345b7ed835879ee8eb76ebb",
11+
"gomobile-ndk-r10e-darwin-x86_64.tar.gz": "e8bff8a56f5688ec849a95a4e85130ce02eff5c2d54e361103777c396db8d308",
1212
"android-ndk-r10e-linux-x86.bin": "92b07d25aaad9b341a7f2b2a62402d508e948bf2dea3ee7b65a6aeb18bca7df5",
13-
"gomobile-ndk-r10e-linux-x86.tar.gz": "eafb03ba5cf4712673f44a0991579c235774ff185dd846c1c5ecb3527acac22b",
13+
"gomobile-ndk-r10e-linux-x86.tar.gz": "4cc1dd2a1bdf4d81618223d6b25a9d5b5673389c5977a7bff85a89a15afd36a2",
1414
"android-ndk-r10e-linux-x86_64.bin": "102d6723f67ff1384330d12c45854315d6452d6510286f4e5891e00a5a8f1d5a",
15-
"gomobile-ndk-r10e-linux-x86_64.tar.gz": "709d96f5234c224e4b72254fd2e196d0e1486b8d943e972ed98cf14e3ca7bdde",
15+
"gomobile-ndk-r10e-linux-x86_64.tar.gz": "bacfed664a7b69b1b693f246ea49a85f04f502bd1ae723351c5345ab5b2ba850",
1616
"android-ndk-r10e-windows-x86.exe": "5378a60a796de75a2d609b76f5c56df7a343511ec36a823bae8c7423591cc8f5",
17-
"gomobile-ndk-r10e-windows-x86.tar.gz": "5a2da001af85d2b9baf257c556159dc3e0a92f115d2e3d290894dcd8dfe9552e",
17+
"gomobile-ndk-r10e-windows-x86.tar.gz": "4c0d647519a5d254d39a13f8ec85951ca378d8eb8463fdcde5c46490b1f2c382",
1818
"android-ndk-r10e-windows-x86_64.exe": "9bc55ea4b3ad38dcd34157528760e62183b63ebc4a38a6ca478889ff7583d9c1",
19-
"gomobile-ndk-r10e-windows-x86_64.tar.gz": "0c964522f25a27192c4facd7264e71e395d1c383b09276cf3617a02e77af3a74",
20-
"gomobile-openal-soft-1.16.0.1.tar.gz": "df8492a31030c4a940aa17602ea7ce56eb0759be9235f68fcce4c51150e49881",
19+
"gomobile-ndk-r10e-windows-x86_64.tar.gz": "582cc90605c8cc026be0d70ccf58d2ec44373f7e855fbb2faee59c2cf2f7121e",
20+
"gomobile-openal-soft-1.16.0.1.tar.gz": "ff7ff835355a1158001e6b6cc03d3a65abb508abc34a5f19ae9af0bdeadd978b",
2121
}

cmd/gomobile/init.go

+19-2
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,6 @@
44

55
package main
66

7-
// TODO(crawshaw): android/{386,arm64}
8-
97
import (
108
"archive/tar"
119
"bytes"
@@ -426,6 +424,25 @@ func fetchNDK() error {
426424
return err
427425
}
428426

427+
// ndk-r10e arm64 toolchain has a bug in ld.bfd and for aarch64
428+
// ld.bfd is the default linker. Workaround by switching the
429+
// default to ld.gold.
430+
// TODO(hyangah): remove this when using the new version of ndk.
431+
if toolchain.arch == "arm64" {
432+
ld := filepath.Join(dst, "bin/aarch64-linux-android-ld")
433+
ldgold := ld + ".gold"
434+
if goos == "windows" {
435+
ld += ".exe"
436+
ldgold += ".exe"
437+
}
438+
if err := rm(ld); err != nil {
439+
return err
440+
}
441+
if err := symlink(ldgold, ld); err != nil {
442+
return err
443+
}
444+
}
445+
429446
linkpath := filepath.Join(dst, toolchain.toolPrefix+"/bin")
430447
if err := mkdir(linkpath); err != nil {
431448
return err

cmd/gomobile/release.go

+1
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ type target struct {
5353

5454
var targets = []target{
5555
{"arm", "android-15", "arm-linux-androideabi-4.8", "arm-linux-androideabi"},
56+
{"arm64", "android-21", "aarch64-linux-android-4.9", "aarch64-linux-android"},
5657
{"x86", "android-15", "x86-4.8", "i686-linux-android"},
5758
{"x86_64", "android-21", "x86_64-4.9", "x86_64-linux-android"},
5859
}

0 commit comments

Comments
 (0)