mkall.sh (8312B)
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 set -e 53 $cmd docker build --tag generate:$GOOS $GOOS 54 $cmd docker run --interactive --tty --volume $(cd -- "$(dirname -- "$0")/.." && pwd):/build generate:$GOOS 55 exit 56 fi 57 58 GOOSARCH_in=syscall_$GOOSARCH.go 59 case "$GOOSARCH" in 60 _* | *_ | _) 61 echo 'undefined $GOOS_$GOARCH:' "$GOOSARCH" 1>&2 62 exit 1 63 ;; 64 aix_ppc) 65 mkerrors="$mkerrors -maix32" 66 mksyscall="go run mksyscall_aix_ppc.go -aix" 67 mktypes="GOARCH=$GOARCH go tool cgo -godefs" 68 ;; 69 aix_ppc64) 70 mkerrors="$mkerrors -maix64" 71 mksyscall="go run mksyscall_aix_ppc64.go -aix" 72 mktypes="GOARCH=$GOARCH go tool cgo -godefs" 73 ;; 74 darwin_amd64) 75 mkerrors="$mkerrors -m64" 76 mktypes="GOARCH=$GOARCH go tool cgo -godefs" 77 mkasm="go run mkasm.go" 78 ;; 79 darwin_arm64) 80 mkerrors="$mkerrors -m64" 81 mktypes="GOARCH=$GOARCH go tool cgo -godefs" 82 mkasm="go run mkasm.go" 83 ;; 84 dragonfly_amd64) 85 mkerrors="$mkerrors -m64" 86 mksyscall="go run mksyscall.go -dragonfly" 87 mksysnum="go run mksysnum.go 'https://gitweb.dragonflybsd.org/dragonfly.git/blob_plain/HEAD:/sys/kern/syscalls.master'" 88 mktypes="GOARCH=$GOARCH go tool cgo -godefs" 89 ;; 90 freebsd_386) 91 mkerrors="$mkerrors -m32" 92 mksyscall="go run mksyscall.go -l32" 93 mksysnum="go run mksysnum.go 'https://cgit.freebsd.org/src/plain/sys/kern/syscalls.master?h=stable/12'" 94 mktypes="GOARCH=$GOARCH go tool cgo -godefs" 95 ;; 96 freebsd_amd64) 97 mkerrors="$mkerrors -m64" 98 mksysnum="go run mksysnum.go 'https://cgit.freebsd.org/src/plain/sys/kern/syscalls.master?h=stable/12'" 99 mktypes="GOARCH=$GOARCH go tool cgo -godefs" 100 ;; 101 freebsd_arm) 102 mkerrors="$mkerrors" 103 mksyscall="go run mksyscall.go -l32 -arm" 104 mksysnum="go run mksysnum.go 'https://cgit.freebsd.org/src/plain/sys/kern/syscalls.master?h=stable/12'" 105 # Let the type of C char be signed for making the bare syscall 106 # API consistent across platforms. 107 mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char" 108 ;; 109 freebsd_arm64) 110 mkerrors="$mkerrors -m64" 111 mksysnum="go run mksysnum.go 'https://cgit.freebsd.org/src/plain/sys/kern/syscalls.master?h=stable/12'" 112 mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char" 113 ;; 114 freebsd_riscv64) 115 mkerrors="$mkerrors -m64" 116 mksysnum="go run mksysnum.go 'https://cgit.freebsd.org/src/plain/sys/kern/syscalls.master?h=stable/12'" 117 mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char" 118 ;; 119 netbsd_386) 120 mkerrors="$mkerrors -m32" 121 mksyscall="go run mksyscall.go -l32 -netbsd" 122 mksysnum="go run mksysnum.go 'http://cvsweb.netbsd.org/bsdweb.cgi/~checkout~/src/sys/kern/syscalls.master'" 123 mktypes="GOARCH=$GOARCH go tool cgo -godefs" 124 ;; 125 netbsd_amd64) 126 mkerrors="$mkerrors -m64" 127 mksyscall="go run mksyscall.go -netbsd" 128 mksysnum="go run mksysnum.go 'http://cvsweb.netbsd.org/bsdweb.cgi/~checkout~/src/sys/kern/syscalls.master'" 129 mktypes="GOARCH=$GOARCH go tool cgo -godefs" 130 ;; 131 netbsd_arm) 132 mkerrors="$mkerrors" 133 mksyscall="go run mksyscall.go -l32 -netbsd -arm" 134 mksysnum="go run mksysnum.go 'http://cvsweb.netbsd.org/bsdweb.cgi/~checkout~/src/sys/kern/syscalls.master'" 135 # Let the type of C char be signed for making the bare syscall 136 # API consistent across platforms. 137 mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char" 138 ;; 139 netbsd_arm64) 140 mkerrors="$mkerrors -m64" 141 mksyscall="go run mksyscall.go -netbsd" 142 mksysnum="go run mksysnum.go 'http://cvsweb.netbsd.org/bsdweb.cgi/~checkout~/src/sys/kern/syscalls.master'" 143 mktypes="GOARCH=$GOARCH go tool cgo -godefs" 144 ;; 145 openbsd_386) 146 mkasm="go run mkasm.go" 147 mkerrors="$mkerrors -m32" 148 mksyscall="go run mksyscall.go -l32 -openbsd -libc" 149 mksysctl="go run mksysctl_openbsd.go" 150 mktypes="GOARCH=$GOARCH go tool cgo -godefs" 151 ;; 152 openbsd_amd64) 153 mkasm="go run mkasm.go" 154 mkerrors="$mkerrors -m64" 155 mksyscall="go run mksyscall.go -openbsd -libc" 156 mksysctl="go run mksysctl_openbsd.go" 157 mktypes="GOARCH=$GOARCH go tool cgo -godefs" 158 ;; 159 openbsd_arm) 160 mkasm="go run mkasm.go" 161 mkerrors="$mkerrors" 162 mksyscall="go run mksyscall.go -l32 -openbsd -arm -libc" 163 mksysctl="go run mksysctl_openbsd.go" 164 # Let the type of C char be signed for making the bare syscall 165 # API consistent across platforms. 166 mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char" 167 ;; 168 openbsd_arm64) 169 mkasm="go run mkasm.go" 170 mkerrors="$mkerrors -m64" 171 mksyscall="go run mksyscall.go -openbsd -libc" 172 mksysctl="go run mksysctl_openbsd.go" 173 # Let the type of C char be signed for making the bare syscall 174 # API consistent across platforms. 175 mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char" 176 ;; 177 openbsd_mips64) 178 mkasm="go run mkasm.go" 179 mkerrors="$mkerrors -m64" 180 mksyscall="go run mksyscall.go -openbsd -libc" 181 mksysctl="go run mksysctl_openbsd.go" 182 # Let the type of C char be signed for making the bare syscall 183 # API consistent across platforms. 184 mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char" 185 ;; 186 openbsd_ppc64) 187 mkasm="go run mkasm.go" 188 mkerrors="$mkerrors -m64" 189 mksyscall="go run mksyscall.go -openbsd -libc" 190 mksysctl="go run mksysctl_openbsd.go" 191 # Let the type of C char be signed for making the bare syscall 192 # API consistent across platforms. 193 mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char" 194 ;; 195 openbsd_riscv64) 196 mkasm="go run mkasm.go" 197 mkerrors="$mkerrors -m64" 198 mksyscall="go run mksyscall.go -openbsd -libc" 199 mksysctl="go run mksysctl_openbsd.go" 200 # Let the type of C char be signed for making the bare syscall 201 # API consistent across platforms. 202 mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char" 203 ;; 204 solaris_amd64) 205 mksyscall="go run mksyscall_solaris.go" 206 mkerrors="$mkerrors -m64" 207 mksysnum= 208 mktypes="GOARCH=$GOARCH go tool cgo -godefs" 209 ;; 210 illumos_amd64) 211 mksyscall="go run mksyscall_solaris.go" 212 mkerrors= 213 mksysnum= 214 mktypes="GOARCH=$GOARCH go tool cgo -godefs" 215 ;; 216 *) 217 echo 'unrecognized $GOOS_$GOARCH: ' "$GOOSARCH" 1>&2 218 exit 1 219 ;; 220 esac 221 222 ( 223 if [ -n "$mkerrors" ]; then echo "$mkerrors |gofmt >$zerrors"; fi 224 case "$GOOS" in 225 *) 226 syscall_goos="syscall_$GOOS.go" 227 case "$GOOS" in 228 darwin | dragonfly | freebsd | netbsd | openbsd) 229 syscall_goos="syscall_bsd.go $syscall_goos" 230 ;; 231 esac 232 if [ -n "$mksyscall" ]; then 233 if [ "$GOOSARCH" == "aix_ppc64" ]; then 234 # aix/ppc64 script generates files instead of writing to stdin. 235 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 " ; 236 elif [ "$GOOS" == "illumos" ]; then 237 # illumos code generation requires a --illumos switch 238 echo "$mksyscall -illumos -tags illumos,$GOARCH syscall_illumos.go |gofmt > zsyscall_illumos_$GOARCH.go"; 239 # illumos implies solaris, so solaris code generation is also required 240 echo "$mksyscall -tags solaris,$GOARCH syscall_solaris.go syscall_solaris_$GOARCH.go |gofmt >zsyscall_solaris_$GOARCH.go"; 241 else 242 echo "$mksyscall -tags $GOOS,$GOARCH $syscall_goos $GOOSARCH_in |gofmt >zsyscall_$GOOSARCH.go"; 243 fi 244 fi 245 esac 246 if [ -n "$mksysctl" ]; then echo "$mksysctl |gofmt >$zsysctl"; fi 247 if [ -n "$mksysnum" ]; then echo "$mksysnum |gofmt >zsysnum_$GOOSARCH.go"; fi 248 if [ -n "$mktypes" ]; then echo "$mktypes types_$GOOS.go | go run mkpost.go > ztypes_$GOOSARCH.go"; fi 249 if [ -n "$mkasm" ]; then echo "$mkasm $GOOS $GOARCH"; fi 250 ) | $run