file string
gen func(dir, file string)
}{
- {"go/build", "zcgo.go", mkzcgo},
{"cmd/go/internal/cfg", "zdefaultcc.go", mkzdefaultcc},
{"internal/runtime/sys", "zversion.go", mkzversion},
{"time/tzdata", "zzipdata.go", mktzdata},
import (
"fmt"
"io"
- "os"
"path/filepath"
"sort"
"strings"
return buf.String()
}
-// mkzcgo writes zcgo.go for the go/build package:
-//
-// package build
-// const defaultCGO_ENABLED = <CGO_ENABLED>
-//
-// It is invoked to write go/build/zcgo.go.
-func mkzcgo(dir, file string) {
- var buf strings.Builder
- writeHeader(&buf)
- fmt.Fprintf(&buf, "package build\n")
- fmt.Fprintln(&buf)
- fmt.Fprintf(&buf, "const defaultCGO_ENABLED = %s\n", quote(os.Getenv("CGO_ENABLED")))
-
- writefile(buf.String(), file, writeSkipSame)
-}
-
// mktzdata src/time/tzdata/zzipdata.go:
//
// package tzdata
import (
"fmt"
+ "os"
"strings"
)
fmt.Fprintf(&buf, "const defaultGOOS = runtime.GOOS\n")
fmt.Fprintf(&buf, "const defaultGOARCH = runtime.GOARCH\n")
fmt.Fprintf(&buf, "const DefaultGOFIPS140 = `%s`\n", gofips140)
+ fmt.Fprintf(&buf, "const DefaultCGO_ENABLED = %s\n", quote(os.Getenv("CGO_ENABLED")))
writefile(buf.String(), file, writeSkipSame)
}
"go/build"
"internal/buildcfg"
"internal/cfg"
+ "internal/platform"
"io"
"io/fs"
"os"
// Recreate that logic here with the new GOOS/GOARCH setting.
// We need to run steps 2 and 3 to determine what the default value
// of CgoEnabled would be for computing CGOChanged.
- defaultCgoEnabled := ctxt.CgoEnabled
- if ctxt.GOOS != runtime.GOOS || ctxt.GOARCH != runtime.GOARCH {
- defaultCgoEnabled = false
- } else {
+ defaultCgoEnabled := false
+ if buildcfg.DefaultCGO_ENABLED == "1" {
+ defaultCgoEnabled = true
+ } else if buildcfg.DefaultCGO_ENABLED == "0" {
+ } else if runtime.GOARCH == ctxt.GOARCH && runtime.GOOS == ctxt.GOOS {
+ defaultCgoEnabled = platform.CgoSupported(ctxt.GOOS, ctxt.GOARCH)
// Use built-in default cgo setting for GOOS/GOARCH.
// Note that ctxt.GOOS/GOARCH are derived from the preference list
// (1) environment, (2) go/env file, (3) runtime constants,
env CGO_CFLAGS=nodefault
env CGO_CPPFLAGS=nodefault
env GOFIPS140=latest
+[cgo] env CGO_ENABLED=0
go env -changed
# linux output like GOTOOLCHAIN='local'
stdout 'CGO_CFLAGS=''?nodefault''?'
stdout 'CGO_CPPFLAGS=''?nodefault''?'
stdout 'GOFIPS140=''?latest''?'
+[cgo] stdout 'CGO_ENABLED=''?0''?'
go env -changed -json
stdout '"GOTOOLCHAIN": "local"'
stdout '"CGO_CFLAGS": "nodefault"'
stdout '"CGO_CPPFLAGS": "nodefault"'
stdout '"GOFIPS140": "latest"'
+[cgo] stdout '"CGO_ENABLED": "0"'
[GOOS:windows] env GOOS=linux
[!GOOS:windows] env GOOS=windows
env := os.Getenv("CGO_ENABLED")
if env == "" {
- env = defaultCGO_ENABLED
+ env = buildcfg.DefaultCGO_ENABLED
}
switch env {
case "1":