1
2
3
4
5
6
7
8
9
10
11
12 package buildcfg
13
14 import (
15 "fmt"
16 "os"
17 "path/filepath"
18 "strings"
19 )
20
21 var (
22 defaultGOROOT string
23
24 GOROOT = envOr("GOROOT", defaultGOROOT)
25 GOARCH = envOr("GOARCH", defaultGOARCH)
26 GOOS = envOr("GOOS", defaultGOOS)
27 GO386 = envOr("GO386", defaultGO386)
28 GOARM = goarm()
29 GOMIPS = gomips()
30 GOMIPS64 = gomips64()
31 GOPPC64 = goppc64()
32 GOWASM = gowasm()
33 GO_LDSO = defaultGO_LDSO
34 Version = version
35 )
36
37
38 var Error error
39
40
41 func Check() {
42 if Error != nil {
43 fmt.Fprintf(os.Stderr, "%s: %v\n", filepath.Base(os.Args[0]), Error)
44 os.Exit(2)
45 }
46 }
47
48 func envOr(key, value string) string {
49 if x := os.Getenv(key); x != "" {
50 return x
51 }
52 return value
53 }
54
55 func goarm() int {
56 def := defaultGOARM
57 if GOOS == "android" && GOARCH == "arm" {
58
59 def = "7"
60 }
61 switch v := envOr("GOARM", def); v {
62 case "5":
63 return 5
64 case "6":
65 return 6
66 case "7":
67 return 7
68 }
69 Error = fmt.Errorf("invalid GOARM: must be 5, 6, 7")
70 return int(def[0] - '0')
71 }
72
73 func gomips() string {
74 switch v := envOr("GOMIPS", defaultGOMIPS); v {
75 case "hardfloat", "softfloat":
76 return v
77 }
78 Error = fmt.Errorf("invalid GOMIPS: must be hardfloat, softfloat")
79 return defaultGOMIPS
80 }
81
82 func gomips64() string {
83 switch v := envOr("GOMIPS64", defaultGOMIPS64); v {
84 case "hardfloat", "softfloat":
85 return v
86 }
87 Error = fmt.Errorf("invalid GOMIPS64: must be hardfloat, softfloat")
88 return defaultGOMIPS64
89 }
90
91 func goppc64() int {
92 switch v := envOr("GOPPC64", defaultGOPPC64); v {
93 case "power8":
94 return 8
95 case "power9":
96 return 9
97 }
98 Error = fmt.Errorf("invalid GOPPC64: must be power8, power9")
99 return int(defaultGOPPC64[len("power")] - '0')
100 }
101
102 type gowasmFeatures struct {
103 SignExt bool
104 SatConv bool
105 }
106
107 func (f gowasmFeatures) String() string {
108 var flags []string
109 if f.SatConv {
110 flags = append(flags, "satconv")
111 }
112 if f.SignExt {
113 flags = append(flags, "signext")
114 }
115 return strings.Join(flags, ",")
116 }
117
118 func gowasm() (f gowasmFeatures) {
119 for _, opt := range strings.Split(envOr("GOWASM", ""), ",") {
120 switch opt {
121 case "satconv":
122 f.SatConv = true
123 case "signext":
124 f.SignExt = true
125 case "":
126
127 default:
128 Error = fmt.Errorf("invalid GOWASM: no such feature %q", opt)
129 }
130 }
131 return
132 }
133
134 func Getgoextlinkenabled() string {
135 return envOr("GO_EXTLINK_ENABLED", defaultGO_EXTLINK_ENABLED)
136 }
137
View as plain text