}{
{"cmd/go", []string{
"zdefaultcc.go",
+ "zosarch.go",
}},
{"runtime/internal/sys", []string{
"zversion.go",
gen func(string, string)
}{
{"zdefaultcc.go", mkzdefaultcc},
+ {"zosarch.go", mkzosarch},
{"zversion.go", mkzversion},
{"zcgo.go", mkzcgo},
// It is invoked to write cmd/go/zdefaultcc.go
// but we also write cmd/cgo/zdefaultcc.go
func mkzdefaultcc(dir, file string) {
- var out string
-
- out = fmt.Sprintf(
+ out := fmt.Sprintf(
"// auto generated by go tool dist\n"+
"\n"+
"package main\n"+
writefile(out, file, writeSkipSame)
}
-// mkzcgo writes zcgo.go for go/build package:
+// mkzcgo writes zosarch.go for cmd/go.
+func mkzosarch(dir, file string) {
+ var buf bytes.Buffer
+ buf.WriteString("// auto generated by go tool dist\n\n")
+ buf.WriteString("package main\n\n")
+ fmt.Fprintf(&buf, "var osArchSupportsCgo = %#v", cgoEnabled)
+ writefile(buf.String(), file, writeSkipSame)
+}
+
+// mkzcgo writes zcgo.go for the go/build package:
//
// package build
// var cgoEnabled = map[string]bool{}
func init() {
goarch = buildContext.GOARCH
goos = buildContext.GOOS
+
+ if _, ok := osArchSupportsCgo[goos+"/"+goarch]; !ok {
+ fmt.Fprintf(os.Stderr, "cmd/go: unsupported GOOS/GOARCH pair %s/%s\n", goos, goarch)
+ os.Exit(2)
+ }
+
if goos == "windows" {
exeSuffix = ".exe"
}