bind,cmd/gomobile: require Go 1.7

Bump the minimum required version of Go to 1.7.

This removes version specific code and makes sure users have the
latest mobile related fixes to Go applied. Also, this change is
necessary when runtime.KeepAlive is introduced in a later CL.

Change-Id: I8441a28aef7f645379fbd8f00edabe3c3fb219de
Reviewed-on: https://go-review.googlesource.com/35953
Reviewed-by: David Crawshaw <crawshaw@golang.org>
This commit is contained in:
Elias Naur
2017-01-30 19:32:33 +00:00
parent e7109766ab
commit 44ced21510
11 changed files with 24 additions and 64 deletions
-15
View File
@@ -371,21 +371,6 @@ func basicParamName(params *types.Tuple, pos int) string {
return name
}
func constExactString(o *types.Const) string {
// TODO(hyangah): this is a temporary fix for golang.org/issues/14615.
// Clean this up when we can require at least go 1.6 or above.
type exactStringer interface {
ExactString() string
}
v := o.Val()
if v, ok := v.(exactStringer); ok {
return v.ExactString()
}
// TODO: warning?
return v.String()
}
func lowerFirst(s string) string {
if s == "" {
return ""
+1 -1
View File
@@ -983,7 +983,7 @@ func (g *JavaGen) genConst(o *types.Const) {
// TODO(hyangah): should const names use upper cases + "_"?
// TODO(hyangah): check invalid names.
jType := g.javaType(o.Type())
val := constExactString(o)
val := o.Val().ExactString()
switch b := o.Type().(*types.Basic); b.Kind() {
case types.Int64, types.UntypedInt:
i, exact := constant.Int64Val(o.Val())
+1 -1
View File
@@ -368,7 +368,7 @@ func (g *ObjcGen) genConstM(o *types.Const) {
g.Printf("const BOOL %s = %s;\n", cName, v)
case types.String, types.UntypedString:
g.Printf("NSString* const %s = @%s;\n", cName, constExactString(o))
g.Printf("NSString* const %s = @%s;\n", cName, o.Val().ExactString())
case types.Int, types.Int8, types.Int16, types.Int32:
g.Printf("const %s %s = %s;\n", objcType, cName, o.Val())
+3 -6
View File
@@ -21,12 +21,9 @@ func goAndroidBind(pkgs []*build.Package, androidArchs []string) error {
if sdkDir := os.Getenv("ANDROID_HOME"); sdkDir == "" {
return fmt.Errorf("this command requires ANDROID_HOME environment variable (path to the Android SDK)")
}
var androidArgs []string
if goVersion == go1_6 {
// Ideally this would be -buildmode=c-shared.
// https://golang.org/issue/13234.
androidArgs = []string{"-gcflags=-shared", "-ldflags=-shared"}
}
// Ideally this would be -buildmode=c-shared.
// https://golang.org/issue/13234.
androidArgs := []string{"-gcflags=-shared", "-ldflags=-shared"}
paths := make([]string, len(pkgs))
for i, p := range pkgs {
+2 -2
View File
@@ -36,7 +36,7 @@ func TestBindAndroid(t *testing.T) {
buildN = true
buildX = true
buildO = "asset.aar"
buildTarget = "android"
buildTarget = "android/arm"
ndkRoot = "/NDK"
tests := []struct {
@@ -107,7 +107,7 @@ mkdir -p $WORK/gomobile_bind
mkdir -p $WORK/gomobile_bind
mkdir -p $WORK/gomobile_bind
mkdir -p $WORK/gen/src/Java
GOOS=android GOARCH=arm CC=/NDK/toolchains/llvm/prebuilt/{{.GOOS}}-{{.NDKARCH}}/bin/clang{{.EXE}} CXX=/NDK/toolchains/llvm/prebuilt/{{.GOOS}}-{{.NDKARCH}}/bin/clang++{{.EXE}} CGO_CFLAGS=-target armv7a-none-linux-androideabi --sysroot /NDK/platforms/android-15/arch-arm -gcc-toolchain /NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/{{.GOOS}}-{{.NDKARCH}} -I$GOMOBILE/include CGO_CPPFLAGS=-target armv7a-none-linux-androideabi --sysroot /NDK/platforms/android-15/arch-arm -gcc-toolchain /NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/{{.GOOS}}-{{.NDKARCH}} -I$GOMOBILE/include CGO_LDFLAGS=-target armv7a-none-linux-androideabi --sysroot /NDK/platforms/android-15/arch-arm -gcc-toolchain /NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/{{.GOOS}}-{{.NDKARCH}} -L/NDK/platforms/android-15/arch-arm/usr/lib -L$GOMOBILE/lib/arm CGO_ENABLED=1 GOARM=7 GOPATH=$WORK/gen:$GOPATH go install -pkgdir=$GOMOBILE/pkg_android_arm -x golang.org/x/mobile/asset
GOOS=android GOARCH=arm CC=/NDK/toolchains/llvm/prebuilt/{{.GOOS}}-{{.NDKARCH}}/bin/clang{{.EXE}} CXX=/NDK/toolchains/llvm/prebuilt/{{.GOOS}}-{{.NDKARCH}}/bin/clang++{{.EXE}} CGO_CFLAGS=-target armv7a-none-linux-androideabi --sysroot /NDK/platforms/android-15/arch-arm -gcc-toolchain /NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/{{.GOOS}}-{{.NDKARCH}} -I$GOMOBILE/include CGO_CPPFLAGS=-target armv7a-none-linux-androideabi --sysroot /NDK/platforms/android-15/arch-arm -gcc-toolchain /NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/{{.GOOS}}-{{.NDKARCH}} -I$GOMOBILE/include CGO_LDFLAGS=-target armv7a-none-linux-androideabi --sysroot /NDK/platforms/android-15/arch-arm -gcc-toolchain /NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/{{.GOOS}}-{{.NDKARCH}} -L/NDK/platforms/android-15/arch-arm/usr/lib -L$GOMOBILE/lib/arm CGO_ENABLED=1 GOARM=7 GOPATH=$WORK/gen:$GOPATH go install -pkgdir=$GOMOBILE/pkg_android_arm -x -gcflags=-shared -ldflags=-shared 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
+1 -5
View File
@@ -330,11 +330,7 @@ func parseBuildTarget(buildTarget string) (os string, archs []string, _ error) {
case "ios":
supported = []string{"arm", "arm64", "amd64"}
case "android":
for arch, tc := range ndk {
if tc.minGoVer <= goVersion {
supported = append(supported, arch)
}
}
supported = []string{"arm", "arm64", "386", "amd64"}
}
isSupported := func(arch string) bool {
+2 -2
View File
@@ -75,7 +75,7 @@ func TestAndroidBuild(t *testing.T) {
buildN = true
buildX = true
buildO = "basic.apk"
buildTarget = "android"
buildTarget = "android/arm"
ndkRoot = "/NDK"
gopath = filepath.ToSlash(filepath.SplitList(os.Getenv("GOPATH"))[0])
if goos == "windows" {
@@ -105,7 +105,7 @@ GOOS=android GOARCH=arm CC=/NDK/toolchains/llvm/prebuilt/{{.GOOS}}-{{.NDKARCH}}/
`))
func TestParseBuildTargetFlag(t *testing.T) {
androidArchs := "arm"
androidArchs := "arm,arm64,386,amd64"
iosArchs := "arm,arm64,amd64"
tests := []struct {
+1 -10
View File
@@ -116,10 +116,6 @@ func envInit() (err error) {
if ndkRoot != "" {
androidEnv = make(map[string][]string)
for arch, toolchain := range ndk {
if goVersion < toolchain.minGoVer {
continue
}
// Emulate the flags in the clang wrapper scripts generated
// by make_standalone_toolchain.py
s := strings.SplitN(toolchain.toolPrefix, "-", 3)
@@ -313,7 +309,6 @@ type ndkToolchain struct {
platform string
gcc string
toolPrefix string
minGoVer goToolVersion
}
func (tc *ndkToolchain) Path(toolName string) string {
@@ -337,7 +332,7 @@ type ndkConfig map[string]ndkToolchain // map: GOOS->androidConfig.
func (nc ndkConfig) Toolchain(arch string) ndkToolchain {
tc, ok := nc[arch]
if !ok || tc.minGoVer > goVersion {
if !ok {
panic(`unsupported architecture: ` + arch)
}
return tc
@@ -350,7 +345,6 @@ var ndk = ndkConfig{
platform: "android-15",
gcc: "arm-linux-androideabi-4.9",
toolPrefix: "arm-linux-androideabi",
minGoVer: go1_5,
},
"arm64": {
arch: "arm64",
@@ -358,7 +352,6 @@ var ndk = ndkConfig{
platform: "android-21",
gcc: "aarch64-linux-android-4.9",
toolPrefix: "aarch64-linux-android",
minGoVer: go1_6,
},
"386": {
@@ -367,7 +360,6 @@ var ndk = ndkConfig{
platform: "android-15",
gcc: "x86-4.9",
toolPrefix: "i686-linux-android",
minGoVer: go1_6,
},
"amd64": {
arch: "x86_64",
@@ -375,7 +367,6 @@ var ndk = ndkConfig{
platform: "android-21",
gcc: "x86_64-4.9",
toolPrefix: "x86_64-linux-android",
minGoVer: go1_6,
},
}
+5 -7
View File
@@ -158,13 +158,11 @@ func runInit(cmd *command) error {
// Install standard libraries for cross compilers.
start := time.Now()
var androidArgs []string
if goVersion == go1_6 {
// Ideally this would be -buildmode=c-shared.
// https://golang.org/issue/13234.
androidArgs = []string{"-gcflags=-shared", "-ldflags=-shared"}
}
for _, env := range androidEnv {
// Ideally this would be -buildmode=c-shared.
// https://golang.org/issue/13234.
androidArgs := []string{"-gcflags=-shared", "-ldflags=-shared"}
for _, arch := range archs {
env := androidEnv[arch]
if err := installStd(env, androidArgs...); err != nil {
return err
}
+4 -1
View File
@@ -106,7 +106,10 @@ WORK={{.GOPATH}}/pkg/gomobile/work{{if eq .GOOS "darwin"}}
go install -x golang.org/x/mobile/gl
go install -x golang.org/x/mobile/app
go install -x golang.org/x/mobile/exp/app/debug{{end}}
GOOS=android GOARCH=arm CC=$NDK_PATH/toolchains/llvm/prebuilt/{{.GOOS}}-{{.NDKARCH}}/bin/clang{{.EXE}} CXX=$NDK_PATH/toolchains/llvm/prebuilt/{{.GOOS}}-{{.NDKARCH}}/bin/clang++{{.EXE}} CGO_CFLAGS=-target armv7a-none-linux-androideabi --sysroot $NDK_PATH/platforms/android-15/arch-arm -gcc-toolchain $NDK_PATH/toolchains/arm-linux-androideabi-4.9/prebuilt/{{.GOOS}}-{{.NDKARCH}} -I$GOMOBILE/include CGO_CPPFLAGS=-target armv7a-none-linux-androideabi --sysroot $NDK_PATH/platforms/android-15/arch-arm -gcc-toolchain $NDK_PATH/toolchains/arm-linux-androideabi-4.9/prebuilt/{{.GOOS}}-{{.NDKARCH}} -I$GOMOBILE/include CGO_LDFLAGS=-target armv7a-none-linux-androideabi --sysroot $NDK_PATH/platforms/android-15/arch-arm -gcc-toolchain $NDK_PATH/toolchains/arm-linux-androideabi-4.9/prebuilt/{{.GOOS}}-{{.NDKARCH}} -L$NDK_PATH/platforms/android-15/arch-arm/usr/lib -L$GOMOBILE/lib/arm CGO_ENABLED=1 GOARM=7 go install -pkgdir=$GOMOBILE/pkg_android_arm -x std
GOOS=android GOARCH=arm CC=$NDK_PATH/toolchains/llvm/prebuilt/{{.GOOS}}-{{.NDKARCH}}/bin/clang{{.EXE}} CXX=$NDK_PATH/toolchains/llvm/prebuilt/{{.GOOS}}-{{.NDKARCH}}/bin/clang++{{.EXE}} CGO_CFLAGS=-target armv7a-none-linux-androideabi --sysroot $NDK_PATH/platforms/android-15/arch-arm -gcc-toolchain $NDK_PATH/toolchains/arm-linux-androideabi-4.9/prebuilt/{{.GOOS}}-{{.NDKARCH}} -I$GOMOBILE/include CGO_CPPFLAGS=-target armv7a-none-linux-androideabi --sysroot $NDK_PATH/platforms/android-15/arch-arm -gcc-toolchain $NDK_PATH/toolchains/arm-linux-androideabi-4.9/prebuilt/{{.GOOS}}-{{.NDKARCH}} -I$GOMOBILE/include CGO_LDFLAGS=-target armv7a-none-linux-androideabi --sysroot $NDK_PATH/platforms/android-15/arch-arm -gcc-toolchain $NDK_PATH/toolchains/arm-linux-androideabi-4.9/prebuilt/{{.GOOS}}-{{.NDKARCH}} -L$NDK_PATH/platforms/android-15/arch-arm/usr/lib -L$GOMOBILE/lib/arm CGO_ENABLED=1 GOARM=7 go install -gcflags=-shared -ldflags=-shared -pkgdir=$GOMOBILE/pkg_android_arm -x std
GOOS=android GOARCH=arm64 CC=$NDK_PATH/toolchains/llvm/prebuilt/{{.GOOS}}-{{.NDKARCH}}/bin/clang{{.EXE}} CXX=$NDK_PATH/toolchains/llvm/prebuilt/{{.GOOS}}-{{.NDKARCH}}/bin/clang++{{.EXE}} CGO_CFLAGS=-target aarch64-none-linux-android --sysroot $NDK_PATH/platforms/android-21/arch-arm64 -gcc-toolchain $NDK_PATH/toolchains/aarch64-linux-android-4.9/prebuilt/{{.GOOS}}-{{.NDKARCH}} -I$GOMOBILE/include CGO_CPPFLAGS=-target aarch64-none-linux-android --sysroot $NDK_PATH/platforms/android-21/arch-arm64 -gcc-toolchain $NDK_PATH/toolchains/aarch64-linux-android-4.9/prebuilt/{{.GOOS}}-{{.NDKARCH}} -I$GOMOBILE/include CGO_LDFLAGS=-target aarch64-none-linux-android --sysroot $NDK_PATH/platforms/android-21/arch-arm64 -gcc-toolchain $NDK_PATH/toolchains/aarch64-linux-android-4.9/prebuilt/{{.GOOS}}-{{.NDKARCH}} -L$NDK_PATH/platforms/android-21/arch-arm64/usr/lib -L$GOMOBILE/lib/arm64 CGO_ENABLED=1 go install -gcflags=-shared -ldflags=-shared -pkgdir=$GOMOBILE/pkg_android_arm64 -x std
GOOS=android GOARCH=386 CC=$NDK_PATH/toolchains/llvm/prebuilt/{{.GOOS}}-{{.NDKARCH}}/bin/clang{{.EXE}} CXX=$NDK_PATH/toolchains/llvm/prebuilt/{{.GOOS}}-{{.NDKARCH}}/bin/clang++{{.EXE}} CGO_CFLAGS=-target i686-none-linux-android --sysroot $NDK_PATH/platforms/android-15/arch-x86 -gcc-toolchain $NDK_PATH/toolchains/x86-4.9/prebuilt/{{.GOOS}}-{{.NDKARCH}} -I$GOMOBILE/include CGO_CPPFLAGS=-target i686-none-linux-android --sysroot $NDK_PATH/platforms/android-15/arch-x86 -gcc-toolchain $NDK_PATH/toolchains/x86-4.9/prebuilt/{{.GOOS}}-{{.NDKARCH}} -I$GOMOBILE/include CGO_LDFLAGS=-target i686-none-linux-android --sysroot $NDK_PATH/platforms/android-15/arch-x86 -gcc-toolchain $NDK_PATH/toolchains/x86-4.9/prebuilt/{{.GOOS}}-{{.NDKARCH}} -L$NDK_PATH/platforms/android-15/arch-x86/usr/lib -L$GOMOBILE/lib/386 CGO_ENABLED=1 go install -gcflags=-shared -ldflags=-shared -pkgdir=$GOMOBILE/pkg_android_386 -x std
GOOS=android GOARCH=amd64 CC=$NDK_PATH/toolchains/llvm/prebuilt/{{.GOOS}}-{{.NDKARCH}}/bin/clang{{.EXE}} CXX=$NDK_PATH/toolchains/llvm/prebuilt/{{.GOOS}}-{{.NDKARCH}}/bin/clang++{{.EXE}} CGO_CFLAGS=-target x86_64-none-linux-android --sysroot $NDK_PATH/platforms/android-21/arch-x86_64 -gcc-toolchain $NDK_PATH/toolchains/x86_64-4.9/prebuilt/{{.GOOS}}-{{.NDKARCH}} -I$GOMOBILE/include CGO_CPPFLAGS=-target x86_64-none-linux-android --sysroot $NDK_PATH/platforms/android-21/arch-x86_64 -gcc-toolchain $NDK_PATH/toolchains/x86_64-4.9/prebuilt/{{.GOOS}}-{{.NDKARCH}} -I$GOMOBILE/include CGO_LDFLAGS=-target x86_64-none-linux-android --sysroot $NDK_PATH/platforms/android-21/arch-x86_64 -gcc-toolchain $NDK_PATH/toolchains/x86_64-4.9/prebuilt/{{.GOOS}}-{{.NDKARCH}} -L$NDK_PATH/platforms/android-21/arch-x86_64/usr/lib -L$GOMOBILE/lib/amd64 CGO_ENABLED=1 go install -gcflags=-shared -ldflags=-shared -pkgdir=$GOMOBILE/pkg_android_amd64 -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 -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 -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 -tags=ios -pkgdir=$GOMOBILE/pkg_darwin_amd64 -x std
+4 -14
View File
@@ -25,7 +25,6 @@ import (
var (
gomobileName = "gomobile"
goVersionOut = []byte(nil)
goVersion = go1_5
)
func printUsage(w io.Writer) {
@@ -85,13 +84,6 @@ func main() {
os.Exit(2)
}
type goToolVersion int
const (
go1_5 goToolVersion = iota
go1_6
)
func determineGoVersion() error {
gobin, err := exec.LookPath("go")
if err != nil {
@@ -102,12 +94,10 @@ func determineGoVersion() error {
return fmt.Errorf("'go version' failed: %v, %s", err, goVersionOut)
}
switch {
case bytes.HasPrefix(goVersionOut, []byte("go version go1.4")):
return errors.New("Go 1.5 or newer is required")
case bytes.HasPrefix(goVersionOut, []byte("go version go1.5")):
goVersion = go1_5
default:
goVersion = go1_6 // assume developers are working at tip
case bytes.HasPrefix(goVersionOut, []byte("go version go1.4")),
bytes.HasPrefix(goVersionOut, []byte("go version go1.5")),
bytes.HasPrefix(goVersionOut, []byte("go version go1.6")):
return errors.New("Go 1.7 or newer is required")
}
return nil
}