1 | #!/usr/bin/env bash
|
---|
2 | # Copyright 2009 The Go Authors. All rights reserved.
|
---|
3 | # Use of this source code is governed by a BSD-style
|
---|
4 | # license that can be found in the LICENSE file.
|
---|
5 |
|
---|
6 | # This script runs or (given -n) prints suggested commands to generate files for
|
---|
7 | # the Architecture/OS specified by the GOARCH and GOOS environment variables.
|
---|
8 | # See README.md for more information about how the build system works.
|
---|
9 |
|
---|
10 | GOOSARCH="${GOOS}_${GOARCH}"
|
---|
11 |
|
---|
12 | # defaults
|
---|
13 | mksyscall="go run mksyscall.go"
|
---|
14 | mkerrors="./mkerrors.sh"
|
---|
15 | zerrors="zerrors_$GOOSARCH.go"
|
---|
16 | mksysctl=""
|
---|
17 | zsysctl="zsysctl_$GOOSARCH.go"
|
---|
18 | mksysnum=
|
---|
19 | mktypes=
|
---|
20 | mkasm=
|
---|
21 | run="sh"
|
---|
22 | cmd=""
|
---|
23 |
|
---|
24 | case "$1" in
|
---|
25 | -syscalls)
|
---|
26 | for i in zsyscall*go
|
---|
27 | do
|
---|
28 | # Run the command line that appears in the first line
|
---|
29 | # of the generated file to regenerate it.
|
---|
30 | sed 1q $i | sed 's;^// ;;' | sh > _$i && gofmt < _$i > $i
|
---|
31 | rm _$i
|
---|
32 | done
|
---|
33 | exit 0
|
---|
34 | ;;
|
---|
35 | -n)
|
---|
36 | run="cat"
|
---|
37 | cmd="echo"
|
---|
38 | shift
|
---|
39 | esac
|
---|
40 |
|
---|
41 | case "$#" in
|
---|
42 | 0)
|
---|
43 | ;;
|
---|
44 | *)
|
---|
45 | echo 'usage: mkall.sh [-n]' 1>&2
|
---|
46 | exit 2
|
---|
47 | esac
|
---|
48 |
|
---|
49 | if [[ "$GOOS" = "linux" ]]; then
|
---|
50 | # Use the Docker-based build system
|
---|
51 | # Files generated through docker (use $cmd so you can Ctl-C the build or run)
|
---|
52 | $cmd docker build --tag generate:$GOOS $GOOS
|
---|
53 | $cmd docker run --interactive --tty --volume $(cd -- "$(dirname -- "$0")/.." && /bin/pwd):/build generate:$GOOS
|
---|
54 | exit
|
---|
55 | fi
|
---|
56 |
|
---|
57 | GOOSARCH_in=syscall_$GOOSARCH.go
|
---|
58 | case "$GOOSARCH" in
|
---|
59 | _* | *_ | _)
|
---|
60 | echo 'undefined $GOOS_$GOARCH:' "$GOOSARCH" 1>&2
|
---|
61 | exit 1
|
---|
62 | ;;
|
---|
63 | aix_ppc)
|
---|
64 | mkerrors="$mkerrors -maix32"
|
---|
65 | mksyscall="go run mksyscall_aix_ppc.go -aix"
|
---|
66 | mktypes="GOARCH=$GOARCH go tool cgo -godefs"
|
---|
67 | ;;
|
---|
68 | aix_ppc64)
|
---|
69 | mkerrors="$mkerrors -maix64"
|
---|
70 | mksyscall="go run mksyscall_aix_ppc64.go -aix"
|
---|
71 | mktypes="GOARCH=$GOARCH go tool cgo -godefs"
|
---|
72 | ;;
|
---|
73 | darwin_amd64)
|
---|
74 | mkerrors="$mkerrors -m64"
|
---|
75 | mktypes="GOARCH=$GOARCH go tool cgo -godefs"
|
---|
76 | mkasm="go run mkasm_darwin.go"
|
---|
77 | ;;
|
---|
78 | darwin_arm64)
|
---|
79 | mkerrors="$mkerrors -m64"
|
---|
80 | mktypes="GOARCH=$GOARCH go tool cgo -godefs"
|
---|
81 | mkasm="go run mkasm_darwin.go"
|
---|
82 | ;;
|
---|
83 | dragonfly_amd64)
|
---|
84 | mkerrors="$mkerrors -m64"
|
---|
85 | mksyscall="go run mksyscall.go -dragonfly"
|
---|
86 | mksysnum="go run mksysnum.go 'https://gitweb.dragonflybsd.org/dragonfly.git/blob_plain/HEAD:/sys/kern/syscalls.master'"
|
---|
87 | mktypes="GOARCH=$GOARCH go tool cgo -godefs"
|
---|
88 | ;;
|
---|
89 | freebsd_386)
|
---|
90 | mkerrors="$mkerrors -m32"
|
---|
91 | mksyscall="go run mksyscall.go -l32"
|
---|
92 | mksysnum="go run mksysnum.go 'https://cgit.freebsd.org/src/plain/sys/kern/syscalls.master?h=stable/12'"
|
---|
93 | mktypes="GOARCH=$GOARCH go tool cgo -godefs"
|
---|
94 | ;;
|
---|
95 | freebsd_amd64)
|
---|
96 | mkerrors="$mkerrors -m64"
|
---|
97 | mksysnum="go run mksysnum.go 'https://cgit.freebsd.org/src/plain/sys/kern/syscalls.master?h=stable/12'"
|
---|
98 | mktypes="GOARCH=$GOARCH go tool cgo -godefs"
|
---|
99 | ;;
|
---|
100 | freebsd_arm)
|
---|
101 | mkerrors="$mkerrors"
|
---|
102 | mksyscall="go run mksyscall.go -l32 -arm"
|
---|
103 | mksysnum="go run mksysnum.go 'https://cgit.freebsd.org/src/plain/sys/kern/syscalls.master?h=stable/12'"
|
---|
104 | # Let the type of C char be signed for making the bare syscall
|
---|
105 | # API consistent across platforms.
|
---|
106 | mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char"
|
---|
107 | ;;
|
---|
108 | freebsd_arm64)
|
---|
109 | mkerrors="$mkerrors -m64"
|
---|
110 | mksysnum="go run mksysnum.go 'https://cgit.freebsd.org/src/plain/sys/kern/syscalls.master?h=stable/12'"
|
---|
111 | mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char"
|
---|
112 | ;;
|
---|
113 | freebsd_riscv64)
|
---|
114 | mkerrors="$mkerrors -m64"
|
---|
115 | mksysnum="go run mksysnum.go 'https://cgit.freebsd.org/src/plain/sys/kern/syscalls.master?h=stable/12'"
|
---|
116 | mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char"
|
---|
117 | ;;
|
---|
118 | netbsd_386)
|
---|
119 | mkerrors="$mkerrors -m32"
|
---|
120 | mksyscall="go run mksyscall.go -l32 -netbsd"
|
---|
121 | mksysnum="go run mksysnum.go 'http://cvsweb.netbsd.org/bsdweb.cgi/~checkout~/src/sys/kern/syscalls.master'"
|
---|
122 | mktypes="GOARCH=$GOARCH go tool cgo -godefs"
|
---|
123 | ;;
|
---|
124 | netbsd_amd64)
|
---|
125 | mkerrors="$mkerrors -m64"
|
---|
126 | mksyscall="go run mksyscall.go -netbsd"
|
---|
127 | mksysnum="go run mksysnum.go 'http://cvsweb.netbsd.org/bsdweb.cgi/~checkout~/src/sys/kern/syscalls.master'"
|
---|
128 | mktypes="GOARCH=$GOARCH go tool cgo -godefs"
|
---|
129 | ;;
|
---|
130 | netbsd_arm)
|
---|
131 | mkerrors="$mkerrors"
|
---|
132 | mksyscall="go run mksyscall.go -l32 -netbsd -arm"
|
---|
133 | mksysnum="go run mksysnum.go 'http://cvsweb.netbsd.org/bsdweb.cgi/~checkout~/src/sys/kern/syscalls.master'"
|
---|
134 | # Let the type of C char be signed for making the bare syscall
|
---|
135 | # API consistent across platforms.
|
---|
136 | mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char"
|
---|
137 | ;;
|
---|
138 | netbsd_arm64)
|
---|
139 | mkerrors="$mkerrors -m64"
|
---|
140 | mksyscall="go run mksyscall.go -netbsd"
|
---|
141 | mksysnum="go run mksysnum.go 'http://cvsweb.netbsd.org/bsdweb.cgi/~checkout~/src/sys/kern/syscalls.master'"
|
---|
142 | mktypes="GOARCH=$GOARCH go tool cgo -godefs"
|
---|
143 | ;;
|
---|
144 | openbsd_386)
|
---|
145 | mkerrors="$mkerrors -m32"
|
---|
146 | mksyscall="go run mksyscall.go -l32 -openbsd"
|
---|
147 | mksysctl="go run mksysctl_openbsd.go"
|
---|
148 | mksysnum="go run mksysnum.go 'https://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/sys/kern/syscalls.master'"
|
---|
149 | mktypes="GOARCH=$GOARCH go tool cgo -godefs"
|
---|
150 | ;;
|
---|
151 | openbsd_amd64)
|
---|
152 | mkerrors="$mkerrors -m64"
|
---|
153 | mksyscall="go run mksyscall.go -openbsd"
|
---|
154 | mksysctl="go run mksysctl_openbsd.go"
|
---|
155 | mksysnum="go run mksysnum.go 'https://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/sys/kern/syscalls.master'"
|
---|
156 | mktypes="GOARCH=$GOARCH go tool cgo -godefs"
|
---|
157 | ;;
|
---|
158 | openbsd_arm)
|
---|
159 | mkerrors="$mkerrors"
|
---|
160 | mksyscall="go run mksyscall.go -l32 -openbsd -arm"
|
---|
161 | mksysctl="go run mksysctl_openbsd.go"
|
---|
162 | mksysnum="go run mksysnum.go 'https://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/sys/kern/syscalls.master'"
|
---|
163 | # Let the type of C char be signed for making the bare syscall
|
---|
164 | # API consistent across platforms.
|
---|
165 | mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char"
|
---|
166 | ;;
|
---|
167 | openbsd_arm64)
|
---|
168 | mkerrors="$mkerrors -m64"
|
---|
169 | mksyscall="go run mksyscall.go -openbsd"
|
---|
170 | mksysctl="go run mksysctl_openbsd.go"
|
---|
171 | mksysnum="go run mksysnum.go 'https://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/sys/kern/syscalls.master'"
|
---|
172 | # Let the type of C char be signed for making the bare syscall
|
---|
173 | # API consistent across platforms.
|
---|
174 | mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char"
|
---|
175 | ;;
|
---|
176 | openbsd_mips64)
|
---|
177 | mkerrors="$mkerrors -m64"
|
---|
178 | mksyscall="go run mksyscall.go -openbsd"
|
---|
179 | mksysctl="go run mksysctl_openbsd.go"
|
---|
180 | mksysnum="go run mksysnum.go 'https://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/sys/kern/syscalls.master'"
|
---|
181 | # Let the type of C char be signed for making the bare syscall
|
---|
182 | # API consistent across platforms.
|
---|
183 | mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char"
|
---|
184 | ;;
|
---|
185 | solaris_amd64)
|
---|
186 | mksyscall="go run mksyscall_solaris.go"
|
---|
187 | mkerrors="$mkerrors -m64"
|
---|
188 | mksysnum=
|
---|
189 | mktypes="GOARCH=$GOARCH go tool cgo -godefs"
|
---|
190 | ;;
|
---|
191 | illumos_amd64)
|
---|
192 | mksyscall="go run mksyscall_solaris.go"
|
---|
193 | mkerrors=
|
---|
194 | mksysnum=
|
---|
195 | mktypes="GOARCH=$GOARCH go tool cgo -godefs"
|
---|
196 | ;;
|
---|
197 | *)
|
---|
198 | echo 'unrecognized $GOOS_$GOARCH: ' "$GOOSARCH" 1>&2
|
---|
199 | exit 1
|
---|
200 | ;;
|
---|
201 | esac
|
---|
202 |
|
---|
203 | (
|
---|
204 | if [ -n "$mkerrors" ]; then echo "$mkerrors |gofmt >$zerrors"; fi
|
---|
205 | case "$GOOS" in
|
---|
206 | *)
|
---|
207 | syscall_goos="syscall_$GOOS.go"
|
---|
208 | case "$GOOS" in
|
---|
209 | darwin | dragonfly | freebsd | netbsd | openbsd)
|
---|
210 | syscall_goos="syscall_bsd.go $syscall_goos"
|
---|
211 | ;;
|
---|
212 | esac
|
---|
213 | if [ -n "$mksyscall" ]; then
|
---|
214 | if [ "$GOOSARCH" == "aix_ppc64" ]; then
|
---|
215 | # aix/ppc64 script generates files instead of writing to stdin.
|
---|
216 | echo "$mksyscall -tags $GOOS,$GOARCH $syscall_goos $GOOSARCH_in && gofmt -w zsyscall_$GOOSARCH.go && gofmt -w zsyscall_"$GOOSARCH"_gccgo.go && gofmt -w zsyscall_"$GOOSARCH"_gc.go " ;
|
---|
217 | elif [ "$GOOS" == "darwin" ]; then
|
---|
218 | # 1.12 and later, syscalls via libSystem
|
---|
219 | echo "$mksyscall -tags $GOOS,$GOARCH,go1.12 $syscall_goos $GOOSARCH_in |gofmt >zsyscall_$GOOSARCH.go";
|
---|
220 | # 1.13 and later, syscalls via libSystem (including syscallPtr)
|
---|
221 | echo "$mksyscall -tags $GOOS,$GOARCH,go1.13 syscall_darwin.1_13.go |gofmt >zsyscall_$GOOSARCH.1_13.go";
|
---|
222 | elif [ "$GOOS" == "illumos" ]; then
|
---|
223 | # illumos code generation requires a --illumos switch
|
---|
224 | echo "$mksyscall -illumos -tags illumos,$GOARCH syscall_illumos.go |gofmt > zsyscall_illumos_$GOARCH.go";
|
---|
225 | # illumos implies solaris, so solaris code generation is also required
|
---|
226 | echo "$mksyscall -tags solaris,$GOARCH syscall_solaris.go syscall_solaris_$GOARCH.go |gofmt >zsyscall_solaris_$GOARCH.go";
|
---|
227 | else
|
---|
228 | echo "$mksyscall -tags $GOOS,$GOARCH $syscall_goos $GOOSARCH_in |gofmt >zsyscall_$GOOSARCH.go";
|
---|
229 | fi
|
---|
230 | fi
|
---|
231 | esac
|
---|
232 | if [ -n "$mksysctl" ]; then echo "$mksysctl |gofmt >$zsysctl"; fi
|
---|
233 | if [ -n "$mksysnum" ]; then echo "$mksysnum |gofmt >zsysnum_$GOOSARCH.go"; fi
|
---|
234 | if [ -n "$mktypes" ]; then echo "$mktypes types_$GOOS.go | go run mkpost.go > ztypes_$GOOSARCH.go"; fi
|
---|
235 | if [ -n "$mkasm" ]; then echo "$mkasm $GOARCH"; fi
|
---|
236 | ) | $run
|
---|