@@ -6,6 +6,7 @@ package main
6
6
7
7
import (
8
8
"bytes"
9
+ "encoding/json"
9
10
"flag"
10
11
"fmt"
11
12
"os"
@@ -937,6 +938,7 @@ func usage() {
937
938
"clean deletes all built files\n " +
938
939
"env [-p] print environment (-p: include $PATH)\n " +
939
940
"install [dir] install individual directory\n " +
941
+ "list [-json] list all supported platforms\n " +
940
942
"test [-h] run Go test(s)\n " +
941
943
"version print Go version\n " +
942
944
"\n " +
@@ -1068,6 +1070,10 @@ func cmdbootstrap() {
1068
1070
// Cannot use go/build directly because cmd/dist for a new release
1069
1071
// builds against an old release's go/build, which may be out of sync.
1070
1072
// To reduce duplication, we generate the list for go/build from this.
1073
+ //
1074
+ // We list all supported platforms in this list, so that this is the
1075
+ // single point of truth for supported platforms. This list is used
1076
+ // by 'go tool dist list'.
1071
1077
var cgoEnabled = map [string ]bool {
1072
1078
"darwin/386" : true ,
1073
1079
"darwin/amd64" : true ,
@@ -1076,19 +1082,31 @@ var cgoEnabled = map[string]bool{
1076
1082
"dragonfly/amd64" : true ,
1077
1083
"freebsd/386" : true ,
1078
1084
"freebsd/amd64" : true ,
1085
+ "freebsd/arm" : false ,
1079
1086
"linux/386" : true ,
1080
1087
"linux/amd64" : true ,
1081
1088
"linux/arm" : true ,
1082
1089
"linux/arm64" : true ,
1090
+ "linux/ppc64" : false ,
1083
1091
"linux/ppc64le" : true ,
1092
+ "linux/mips64" : false ,
1093
+ "linux/mips64le" : false ,
1084
1094
"android/386" : true ,
1085
1095
"android/amd64" : true ,
1086
1096
"android/arm" : true ,
1097
+ "android/arm64" : true ,
1098
+ "nacl/386" : false ,
1099
+ "nacl/amd64p32" : false ,
1100
+ "nacl/arm" : false ,
1087
1101
"netbsd/386" : true ,
1088
1102
"netbsd/amd64" : true ,
1089
1103
"netbsd/arm" : true ,
1090
1104
"openbsd/386" : true ,
1091
1105
"openbsd/amd64" : true ,
1106
+ "openbsd/arm" : false ,
1107
+ "plan9/386" : false ,
1108
+ "plan9/amd64" : false ,
1109
+ "plan9/arm" : false ,
1092
1110
"solaris/amd64" : true ,
1093
1111
"windows/386" : true ,
1094
1112
"windows/amd64" : true ,
@@ -1199,3 +1217,43 @@ func cmdversion() {
1199
1217
xflagparse (0 )
1200
1218
xprintf ("%s\n " , findgoversion ())
1201
1219
}
1220
+
1221
+ // cmdlist lists all supported platforms.
1222
+ func cmdlist () {
1223
+ jsonFlag := flag .Bool ("json" , false , "produce JSON output" )
1224
+ xflagparse (0 )
1225
+
1226
+ var plats []string
1227
+ for p := range cgoEnabled {
1228
+ plats = append (plats , p )
1229
+ }
1230
+ sort .Strings (plats )
1231
+
1232
+ if ! * jsonFlag {
1233
+ for _ , p := range plats {
1234
+ xprintf ("%s\n " , p )
1235
+ }
1236
+ return
1237
+ }
1238
+
1239
+ type jsonResult struct {
1240
+ GOOS string
1241
+ GOARCH string
1242
+ CgoSupported bool
1243
+ }
1244
+ var results []jsonResult
1245
+ for _ , p := range plats {
1246
+ fields := strings .Split (p , "/" )
1247
+ results = append (results , jsonResult {
1248
+ GOOS : fields [0 ],
1249
+ GOARCH : fields [1 ],
1250
+ CgoSupported : cgoEnabled [p ]})
1251
+ }
1252
+ out , err := json .MarshalIndent (results , "" , "\t " )
1253
+ if err != nil {
1254
+ fatal ("json marshal error: %v" , err )
1255
+ }
1256
+ if _ , err := os .Stdout .Write (out ); err != nil {
1257
+ fatal ("write failed: %v" , err )
1258
+ }
1259
+ }
0 commit comments