Skip to content

Commit b90cb3f

Browse files
committed
cmd/go: fail with nice error message on bad GOOS/GOARCH pair
Fixes #12272 Change-Id: I2115ec62ed4061084c482eb385a583a1c1909888 Reviewed-on: https://go-review.googlesource.com/22838 Reviewed-by: Ian Lance Taylor <[email protected]> Reviewed-by: Minux Ma <[email protected]>
1 parent 30bfafc commit b90cb3f

File tree

4 files changed

+20
-4
lines changed

4 files changed

+20
-4
lines changed

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ misc/cgo/stdio/run.out
2626
misc/cgo/testso/main
2727
src/cmd/cgo/zdefaultcc.go
2828
src/cmd/go/zdefaultcc.go
29+
src/cmd/go/zosarch.go
2930
src/cmd/internal/obj/zbootstrap.go
3031
src/go/build/zcgo.go
3132
src/go/doc/headscan

src/cmd/dist/build.go

+2
Original file line numberDiff line numberDiff line change
@@ -464,6 +464,7 @@ var deptab = []struct {
464464
}{
465465
{"cmd/go", []string{
466466
"zdefaultcc.go",
467+
"zosarch.go",
467468
}},
468469
{"runtime/internal/sys", []string{
469470
"zversion.go",
@@ -485,6 +486,7 @@ var gentab = []struct {
485486
gen func(string, string)
486487
}{
487488
{"zdefaultcc.go", mkzdefaultcc},
489+
{"zosarch.go", mkzosarch},
488490
{"zversion.go", mkzversion},
489491
{"zcgo.go", mkzcgo},
490492

src/cmd/dist/buildgo.go

+11-4
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,7 @@ import (
2323
// It is invoked to write cmd/go/zdefaultcc.go
2424
// but we also write cmd/cgo/zdefaultcc.go
2525
func mkzdefaultcc(dir, file string) {
26-
var out string
27-
28-
out = fmt.Sprintf(
26+
out := fmt.Sprintf(
2927
"// auto generated by go tool dist\n"+
3028
"\n"+
3129
"package main\n"+
@@ -42,7 +40,16 @@ func mkzdefaultcc(dir, file string) {
4240
writefile(out, file, writeSkipSame)
4341
}
4442

45-
// mkzcgo writes zcgo.go for go/build package:
43+
// mkzcgo writes zosarch.go for cmd/go.
44+
func mkzosarch(dir, file string) {
45+
var buf bytes.Buffer
46+
buf.WriteString("// auto generated by go tool dist\n\n")
47+
buf.WriteString("package main\n\n")
48+
fmt.Fprintf(&buf, "var osArchSupportsCgo = %#v", cgoEnabled)
49+
writefile(buf.String(), file, writeSkipSame)
50+
}
51+
52+
// mkzcgo writes zcgo.go for the go/build package:
4653
//
4754
// package build
4855
// var cgoEnabled = map[string]bool{}

src/cmd/go/build.go

+6
Original file line numberDiff line numberDiff line change
@@ -669,6 +669,12 @@ var (
669669
func init() {
670670
goarch = buildContext.GOARCH
671671
goos = buildContext.GOOS
672+
673+
if _, ok := osArchSupportsCgo[goos+"/"+goarch]; !ok {
674+
fmt.Fprintf(os.Stderr, "cmd/go: unsupported GOOS/GOARCH pair %s/%s\n", goos, goarch)
675+
os.Exit(2)
676+
}
677+
672678
if goos == "windows" {
673679
exeSuffix = ".exe"
674680
}

0 commit comments

Comments
 (0)