2
0
mirror of synced 2025-02-23 23:08:14 +00:00

cmd/gomobile: fix the error when specifying -target=ios with Go 1.15

Go 1.15 no longer supports darwin/arm. This CL fixes by replacing
'allArchs' variable with a function taking a target OS, and excludes
'arm' when the target OS is iOS.

Updates golang/go#39575

Change-Id: I0623ed4cda2c679d2762fd80a7919f24dd5ce016
Reviewed-on: https://go-review.googlesource.com/c/mobile/+/243477
Run-TryBot: Hajime Hoshi <hajimehoshi@gmail.com>
Reviewed-by: Hyang-Ah Hana Kim <hyangah@gmail.com>
This commit is contained in:
Hajime Hoshi 2020-07-19 13:20:01 +09:00
parent 33b8054058
commit 588b2b2fb0
5 changed files with 59 additions and 21 deletions

View File

@ -216,6 +216,36 @@ mkdir -p {{.Output}}.framework/Versions/A/Modules
ln -s Versions/Current/Modules {{.Output}}.framework/Modules ln -s Versions/Current/Modules {{.Output}}.framework/Modules
`)) `))
func TestBindIOSAll(t *testing.T) {
if !xcodeAvailable() {
t.Skip("Xcode is missing")
}
defer func() {
xout = os.Stderr
buildN = false
buildX = false
buildO = ""
buildTarget = ""
bindPrefix = ""
}()
buildN = true
buildX = true
buildO = "Asset.framework"
buildTarget = "ios"
buf := new(bytes.Buffer)
xout = buf
gopath = filepath.SplitList(goEnv("GOPATH"))[0]
if goos == "windows" {
os.Setenv("HOMEDRIVE", "C:")
}
cmdBind.flag.Parse([]string{"golang.org/x/mobile/asset"})
if err := runBind(cmdBind); err != nil {
t.Log(buf.String())
t.Fatal(err)
}
}
func TestBindWithGoModules(t *testing.T) { func TestBindWithGoModules(t *testing.T) {
if runtime.GOOS == "android" { if runtime.GOOS == "android" {
t.Skipf("gomobile and gobind are not available on %s", runtime.GOOS) t.Skipf("gomobile and gobind are not available on %s", runtime.GOOS)

View File

@ -358,8 +358,8 @@ func parseBuildTarget(buildTarget string) (os string, archs []string, _ error) {
} }
// verify all archs are supported one while deduping. // verify all archs are supported one while deduping.
isSupported := func(arch string) bool { isSupported := func(os, arch string) bool {
for _, a := range allArchs { for _, a := range allArchs(os) {
if a == arch { if a == arch {
return true return true
} }
@ -367,12 +367,17 @@ func parseBuildTarget(buildTarget string) (os string, archs []string, _ error) {
return false return false
} }
targetOS := os
if os == "ios" {
targetOS = "darwin"
}
seen := map[string]bool{} seen := map[string]bool{}
for _, arch := range archNames { for _, arch := range archNames {
if _, ok := seen[arch]; ok { if _, ok := seen[arch]; ok {
continue continue
} }
if !isSupported(arch) { if !isSupported(os, arch) {
return "", nil, fmt.Errorf(`unsupported arch: %q`, arch) return "", nil, fmt.Errorf(`unsupported arch: %q`, arch)
} }
@ -380,12 +385,8 @@ func parseBuildTarget(buildTarget string) (os string, archs []string, _ error) {
archs = append(archs, arch) archs = append(archs, arch)
} }
targetOS := os
if os == "ios" {
targetOS = "darwin"
}
if all { if all {
return targetOS, allArchs, nil return targetOS, allArchs(os), nil
} }
return targetOS, archs, nil return targetOS, archs, nil
} }

View File

@ -115,7 +115,8 @@ GOOS=android GOARCH=arm CC=$NDK_PATH/toolchains/llvm/prebuilt/{{.NDKARCH}}/bin/a
`)) `))
func TestParseBuildTargetFlag(t *testing.T) { func TestParseBuildTargetFlag(t *testing.T) {
archs := strings.Join(allArchs, ",") androidArchs := strings.Join(allArchs("android"), ",")
iosArchs := strings.Join(allArchs("ios"), ",")
tests := []struct { tests := []struct {
in string in string
@ -123,13 +124,13 @@ func TestParseBuildTargetFlag(t *testing.T) {
wantOS string wantOS string
wantArchs string wantArchs string
}{ }{
{"android", false, "android", archs}, {"android", false, "android", androidArchs},
{"android,android/arm", false, "android", archs}, {"android,android/arm", false, "android", androidArchs},
{"android/arm", false, "android", "arm"}, {"android/arm", false, "android", "arm"},
{"ios", false, "darwin", archs}, {"ios", false, "darwin", iosArchs},
{"ios,ios/arm", false, "darwin", archs}, {"ios,ios/arm64", false, "darwin", iosArchs},
{"ios/arm", false, "darwin", "arm"}, {"ios/arm64", false, "darwin", "arm64"},
{"ios/amd64", false, "darwin", "amd64"}, {"ios/amd64", false, "darwin", "amd64"},
{"", true, "", ""}, {"", true, "", ""},

View File

@ -22,11 +22,20 @@ var (
androidArmNM string androidArmNM string
darwinArmNM string darwinArmNM string
allArchs = []string{"arm", "arm64", "386", "amd64"}
bitcodeEnabled bool bitcodeEnabled bool
) )
func allArchs(targetOS string) []string {
switch targetOS {
case "ios":
return []string{"arm64", "386", "amd64"}
case "android":
return []string{"arm", "arm64", "386", "amd64"}
default:
panic(fmt.Sprintf("unexpected target OS: %s", targetOS))
}
}
func buildEnvInit() (cleanup func(), err error) { func buildEnvInit() (cleanup func(), err error) {
// Find gomobilepath. // Find gomobilepath.
gopath := goEnv("GOPATH") gopath := goEnv("GOPATH")
@ -132,14 +141,11 @@ func envInit() (err error) {
darwinArmNM = "nm" darwinArmNM = "nm"
darwinEnv = make(map[string][]string) darwinEnv = make(map[string][]string)
for _, arch := range allArchs { for _, arch := range allArchs("ios") {
var env []string var env []string
var err error var err error
var clang, cflags string var clang, cflags string
switch arch { switch arch {
case "arm":
env = append(env, "GOARM=7")
fallthrough
case "arm64": case "arm64":
clang, cflags, err = envClang("iphoneos") clang, cflags, err = envClang("iphoneos")
cflags += " -miphoneos-version-min=" + buildIOSVersion cflags += " -miphoneos-version-min=" + buildIOSVersion

View File

@ -167,7 +167,7 @@ func installOpenAL(gomobilepath string) error {
} }
} }
for _, arch := range allArchs { for _, arch := range allArchs("android") {
t := ndk[arch] t := ndk[arch]
abi := t.arch abi := t.arch
if abi == "arm" { if abi == "arm" {