package buildcfg
import (
"fmt"
"os"
"path/filepath"
"strings"
)
var (
defaultGOROOT string
GOROOT = envOr ("GOROOT" , defaultGOROOT )
GOARCH = envOr ("GOARCH" , defaultGOARCH )
GOOS = envOr ("GOOS" , defaultGOOS )
GO386 = envOr ("GO386" , defaultGO386 )
GOAMD64 = goamd64 ()
GOARM = goarm ()
GOMIPS = gomips ()
GOMIPS64 = gomips64 ()
GOPPC64 = goppc64 ()
GOWASM = gowasm ()
GO_LDSO = defaultGO_LDSO
Version = version
)
var Error error
func Check () {
if Error != nil {
fmt .Fprintf (os .Stderr , "%s: %v\n" , filepath .Base (os .Args [0 ]), Error )
os .Exit (2 )
}
}
func envOr (key , value string ) string {
if x := os .Getenv (key ); x != "" {
return x
}
return value
}
func goamd64 () int {
switch v := envOr ("GOAMD64" , defaultGOAMD64 ); v {
case "v1" :
return 1
case "v2" :
return 2
case "v3" :
return 3
case "v4" :
return 4
}
Error = fmt .Errorf ("invalid GOAMD64: must be v1, v2, v3, v4" )
return int (defaultGOAMD64 [len ("v" )] - '0' )
}
func goarm () int {
def := defaultGOARM
if GOOS == "android" && GOARCH == "arm" {
def = "7"
}
switch v := envOr ("GOARM" , def ); v {
case "5" :
return 5
case "6" :
return 6
case "7" :
return 7
}
Error = fmt .Errorf ("invalid GOARM: must be 5, 6, 7" )
return int (def [0 ] - '0' )
}
func gomips () string {
switch v := envOr ("GOMIPS" , defaultGOMIPS ); v {
case "hardfloat" , "softfloat" :
return v
}
Error = fmt .Errorf ("invalid GOMIPS: must be hardfloat, softfloat" )
return defaultGOMIPS
}
func gomips64 () string {
switch v := envOr ("GOMIPS64" , defaultGOMIPS64 ); v {
case "hardfloat" , "softfloat" :
return v
}
Error = fmt .Errorf ("invalid GOMIPS64: must be hardfloat, softfloat" )
return defaultGOMIPS64
}
func goppc64 () int {
switch v := envOr ("GOPPC64" , defaultGOPPC64 ); v {
case "power8" :
return 8
case "power9" :
return 9
}
Error = fmt .Errorf ("invalid GOPPC64: must be power8, power9" )
return int (defaultGOPPC64 [len ("power" )] - '0' )
}
type gowasmFeatures struct {
SignExt bool
SatConv bool
}
func (f gowasmFeatures ) String () string {
var flags []string
if f .SatConv {
flags = append (flags , "satconv" )
}
if f .SignExt {
flags = append (flags , "signext" )
}
return strings .Join (flags , "," )
}
func gowasm () (f gowasmFeatures ) {
for _ , opt := range strings .Split (envOr ("GOWASM" , "" ), "," ) {
switch opt {
case "satconv" :
f .SatConv = true
case "signext" :
f .SignExt = true
case "" :
default :
Error = fmt .Errorf ("invalid GOWASM: no such feature %q" , opt )
}
}
return
}
func Getgoextlinkenabled () string {
return envOr ("GO_EXTLINK_ENABLED" , defaultGO_EXTLINK_ENABLED )
}