Skip to content

Commit 588b2b2

Browse files
committed
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>
1 parent 33b8054 commit 588b2b2

File tree

5 files changed

+59
-21
lines changed

5 files changed

+59
-21
lines changed

cmd/gomobile/bind_test.go

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -216,6 +216,36 @@ mkdir -p {{.Output}}.framework/Versions/A/Modules
216216
ln -s Versions/Current/Modules {{.Output}}.framework/Modules
217217
`))
218218

219+
func TestBindIOSAll(t *testing.T) {
220+
if !xcodeAvailable() {
221+
t.Skip("Xcode is missing")
222+
}
223+
defer func() {
224+
xout = os.Stderr
225+
buildN = false
226+
buildX = false
227+
buildO = ""
228+
buildTarget = ""
229+
bindPrefix = ""
230+
}()
231+
buildN = true
232+
buildX = true
233+
buildO = "Asset.framework"
234+
buildTarget = "ios"
235+
236+
buf := new(bytes.Buffer)
237+
xout = buf
238+
gopath = filepath.SplitList(goEnv("GOPATH"))[0]
239+
if goos == "windows" {
240+
os.Setenv("HOMEDRIVE", "C:")
241+
}
242+
cmdBind.flag.Parse([]string{"golang.org/x/mobile/asset"})
243+
if err := runBind(cmdBind); err != nil {
244+
t.Log(buf.String())
245+
t.Fatal(err)
246+
}
247+
}
248+
219249
func TestBindWithGoModules(t *testing.T) {
220250
if runtime.GOOS == "android" {
221251
t.Skipf("gomobile and gobind are not available on %s", runtime.GOOS)

cmd/gomobile/build.go

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -358,34 +358,35 @@ func parseBuildTarget(buildTarget string) (os string, archs []string, _ error) {
358358
}
359359

360360
// verify all archs are supported one while deduping.
361-
isSupported := func(arch string) bool {
362-
for _, a := range allArchs {
361+
isSupported := func(os, arch string) bool {
362+
for _, a := range allArchs(os) {
363363
if a == arch {
364364
return true
365365
}
366366
}
367367
return false
368368
}
369369

370+
targetOS := os
371+
if os == "ios" {
372+
targetOS = "darwin"
373+
}
374+
370375
seen := map[string]bool{}
371376
for _, arch := range archNames {
372377
if _, ok := seen[arch]; ok {
373378
continue
374379
}
375-
if !isSupported(arch) {
380+
if !isSupported(os, arch) {
376381
return "", nil, fmt.Errorf(`unsupported arch: %q`, arch)
377382
}
378383

379384
seen[arch] = true
380385
archs = append(archs, arch)
381386
}
382387

383-
targetOS := os
384-
if os == "ios" {
385-
targetOS = "darwin"
386-
}
387388
if all {
388-
return targetOS, allArchs, nil
389+
return targetOS, allArchs(os), nil
389390
}
390391
return targetOS, archs, nil
391392
}

cmd/gomobile/build_test.go

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -115,21 +115,22 @@ GOOS=android GOARCH=arm CC=$NDK_PATH/toolchains/llvm/prebuilt/{{.NDKARCH}}/bin/a
115115
`))
116116

117117
func TestParseBuildTargetFlag(t *testing.T) {
118-
archs := strings.Join(allArchs, ",")
118+
androidArchs := strings.Join(allArchs("android"), ",")
119+
iosArchs := strings.Join(allArchs("ios"), ",")
119120

120121
tests := []struct {
121122
in string
122123
wantErr bool
123124
wantOS string
124125
wantArchs string
125126
}{
126-
{"android", false, "android", archs},
127-
{"android,android/arm", false, "android", archs},
127+
{"android", false, "android", androidArchs},
128+
{"android,android/arm", false, "android", androidArchs},
128129
{"android/arm", false, "android", "arm"},
129130

130-
{"ios", false, "darwin", archs},
131-
{"ios,ios/arm", false, "darwin", archs},
132-
{"ios/arm", false, "darwin", "arm"},
131+
{"ios", false, "darwin", iosArchs},
132+
{"ios,ios/arm64", false, "darwin", iosArchs},
133+
{"ios/arm64", false, "darwin", "arm64"},
133134
{"ios/amd64", false, "darwin", "amd64"},
134135

135136
{"", true, "", ""},

cmd/gomobile/env.go

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,20 @@ var (
2222
androidArmNM string
2323
darwinArmNM string
2424

25-
allArchs = []string{"arm", "arm64", "386", "amd64"}
26-
2725
bitcodeEnabled bool
2826
)
2927

28+
func allArchs(targetOS string) []string {
29+
switch targetOS {
30+
case "ios":
31+
return []string{"arm64", "386", "amd64"}
32+
case "android":
33+
return []string{"arm", "arm64", "386", "amd64"}
34+
default:
35+
panic(fmt.Sprintf("unexpected target OS: %s", targetOS))
36+
}
37+
}
38+
3039
func buildEnvInit() (cleanup func(), err error) {
3140
// Find gomobilepath.
3241
gopath := goEnv("GOPATH")
@@ -132,14 +141,11 @@ func envInit() (err error) {
132141

133142
darwinArmNM = "nm"
134143
darwinEnv = make(map[string][]string)
135-
for _, arch := range allArchs {
144+
for _, arch := range allArchs("ios") {
136145
var env []string
137146
var err error
138147
var clang, cflags string
139148
switch arch {
140-
case "arm":
141-
env = append(env, "GOARM=7")
142-
fallthrough
143149
case "arm64":
144150
clang, cflags, err = envClang("iphoneos")
145151
cflags += " -miphoneos-version-min=" + buildIOSVersion

cmd/gomobile/init.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,7 @@ func installOpenAL(gomobilepath string) error {
167167
}
168168
}
169169

170-
for _, arch := range allArchs {
170+
for _, arch := range allArchs("android") {
171171
t := ndk[arch]
172172
abi := t.arch
173173
if abi == "arm" {

0 commit comments

Comments
 (0)