66
|
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
|