From 44ced21510005539fed8e6a5589aba6187879a0b Mon Sep 17 00:00:00 2001 From: Elias Naur Date: Sun, 29 Jan 2017 12:51:07 +0100 Subject: [PATCH] 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 --- bind/gen.go | 15 --------------- bind/genjava.go | 2 +- bind/genobjc.go | 2 +- cmd/gomobile/bind_androidapp.go | 9 +++------ cmd/gomobile/bind_test.go | 4 ++-- cmd/gomobile/build.go | 6 +----- cmd/gomobile/build_test.go | 4 ++-- cmd/gomobile/env.go | 11 +---------- cmd/gomobile/init.go | 12 +++++------- cmd/gomobile/init_test.go | 5 ++++- cmd/gomobile/main.go | 18 ++++-------------- 11 files changed, 24 insertions(+), 64 deletions(-) diff --git a/bind/gen.go b/bind/gen.go index 519d1e3..546c5cf 100644 --- a/bind/gen.go +++ b/bind/gen.go @@ -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 "" diff --git a/bind/genjava.go b/bind/genjava.go index 3080fa1..ee45c20 100644 --- a/bind/genjava.go +++ b/bind/genjava.go @@ -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()) diff --git a/bind/genobjc.go b/bind/genobjc.go index 32ec399..4485dcf 100644 --- a/bind/genobjc.go +++ b/bind/genobjc.go @@ -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()) diff --git a/cmd/gomobile/bind_androidapp.go b/cmd/gomobile/bind_androidapp.go index cb86f00..59ad764 100644 --- a/cmd/gomobile/bind_androidapp.go +++ b/cmd/gomobile/bind_androidapp.go @@ -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 { diff --git a/cmd/gomobile/bind_test.go b/cmd/gomobile/bind_test.go index d2f4d1c..0e3abae 100644 --- a/cmd/gomobile/bind_test.go +++ b/cmd/gomobile/bind_test.go @@ -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 diff --git a/cmd/gomobile/build.go b/cmd/gomobile/build.go index c1e9957..423da7f 100644 --- a/cmd/gomobile/build.go +++ b/cmd/gomobile/build.go @@ -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 { diff --git a/cmd/gomobile/build_test.go b/cmd/gomobile/build_test.go index 569441e..1257c6a 100644 --- a/cmd/gomobile/build_test.go +++ b/cmd/gomobile/build_test.go @@ -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 { diff --git a/cmd/gomobile/env.go b/cmd/gomobile/env.go index e96848b..bda72ec 100644 --- a/cmd/gomobile/env.go +++ b/cmd/gomobile/env.go @@ -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, }, } diff --git a/cmd/gomobile/init.go b/cmd/gomobile/init.go index 120a9bb..4452c37 100644 --- a/cmd/gomobile/init.go +++ b/cmd/gomobile/init.go @@ -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 } diff --git a/cmd/gomobile/init_test.go b/cmd/gomobile/init_test.go index 43384ce..eb8221e 100644 --- a/cmd/gomobile/init_test.go +++ b/cmd/gomobile/init_test.go @@ -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 diff --git a/cmd/gomobile/main.go b/cmd/gomobile/main.go index 4e0e184..b855a35 100644 --- a/cmd/gomobile/main.go +++ b/cmd/gomobile/main.go @@ -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 }