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 }