1
2
3
4
5
6
7 package main
8
9 import (
10 "bytes"
11 "fmt"
12 "log"
13 "os"
14 "strings"
15 )
16
17 var goarches []string
18
19 func main() {
20 data, err := os.ReadFile("../../internal/syslist/syslist.go")
21 if err != nil {
22 log.Fatal(err)
23 }
24 const goarchPrefix = `var KnownArch = map[string]bool{`
25 inGOARCH := false
26 for _, line := range strings.Split(string(data), "\n") {
27 if strings.HasPrefix(line, goarchPrefix) {
28 inGOARCH = true
29 } else if inGOARCH && strings.HasPrefix(line, "}") {
30 break
31 } else if inGOARCH {
32 goarch := strings.Fields(line)[0]
33 goarch = strings.TrimPrefix(goarch, `"`)
34 goarch = strings.TrimSuffix(goarch, `":`)
35 goarches = append(goarches, goarch)
36 }
37 }
38
39 for _, target := range goarches {
40 if target == "amd64p32" {
41 continue
42 }
43 var buf bytes.Buffer
44 fmt.Fprintf(&buf, "// Code generated by gengoarch.go using 'go generate'. DO NOT EDIT.\n\n")
45 fmt.Fprintf(&buf, "//go:build %s\n\n", target)
46 fmt.Fprintf(&buf, "package goarch\n\n")
47 fmt.Fprintf(&buf, "const GOARCH = `%s`\n\n", target)
48 for _, goarch := range goarches {
49 value := 0
50 if goarch == target {
51 value = 1
52 }
53 fmt.Fprintf(&buf, "const Is%s = %d\n", strings.Title(goarch), value)
54 }
55 err := os.WriteFile("zgoarch_"+target+".go", buf.Bytes(), 0666)
56 if err != nil {
57 log.Fatal(err)
58 }
59 }
60 }
61
View as plain text