mkall.sh raw

   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
 251