2
0
mirror of synced 2025-02-23 14:58:12 +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
`))
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) {
if runtime.GOOS == "android" {
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.
isSupported := func(arch string) bool {
for _, a := range allArchs {
isSupported := func(os, arch string) bool {
for _, a := range allArchs(os) {
if a == arch {
return true
}
@ -367,12 +367,17 @@ func parseBuildTarget(buildTarget string) (os string, archs []string, _ error) {
return false
}
targetOS := os
if os == "ios" {
targetOS = "darwin"
}
seen := map[string]bool{}
for _, arch := range archNames {
if _, ok := seen[arch]; ok {
continue
}
if !isSupported(arch) {
if !isSupported(os, 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)
}
targetOS := os
if os == "ios" {
targetOS = "darwin"
}
if all {
return targetOS, allArchs, nil
return targetOS, allArchs(os), 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) {
archs := strings.Join(allArchs, ",")
androidArchs := strings.Join(allArchs("android"), ",")
iosArchs := strings.Join(allArchs("ios"), ",")
tests := []struct {
in string
@ -123,13 +124,13 @@ func TestParseBuildTargetFlag(t *testing.T) {
wantOS string
wantArchs string
}{
{"android", false, "android", archs},
{"android,android/arm", false, "android", archs},
{"android", false, "android", androidArchs},
{"android,android/arm", false, "android", androidArchs},
{"android/arm", false, "android", "arm"},
{"ios", false, "darwin", archs},
{"ios,ios/arm", false, "darwin", archs},
{"ios/arm", false, "darwin", "arm"},
{"ios", false, "darwin", iosArchs},
{"ios,ios/arm64", false, "darwin", iosArchs},
{"ios/arm64", false, "darwin", "arm64"},
{"ios/amd64", false, "darwin", "amd64"},
{"", true, "", ""},

View File

@ -22,11 +22,20 @@ var (
androidArmNM string
darwinArmNM string
allArchs = []string{"arm", "arm64", "386", "amd64"}
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) {
// Find gomobilepath.
gopath := goEnv("GOPATH")
@ -132,14 +141,11 @@ func envInit() (err error) {
darwinArmNM = "nm"
darwinEnv = make(map[string][]string)
for _, arch := range allArchs {
for _, arch := range allArchs("ios") {
var env []string
var err error
var clang, cflags string
switch arch {
case "arm":
env = append(env, "GOARM=7")
fallthrough
case "arm64":
clang, cflags, err = envClang("iphoneos")
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]
abi := t.arch
if abi == "arm" {