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:
parent
33b8054058
commit
588b2b2fb0
@ -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)
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
|
@ -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, "", ""},
|
||||||
|
@ -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
|
||||||
|
@ -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" {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user