--- /dev/null
+#!/bin/bash
+
+# Usage: buildall [-e] [-nocmp] [-work]
+#
+# Builds everything (std) for every GOOS/GOARCH combination but installs nothing.
+#
+# By default, runs the builds with -toolexec 'toolstash -cmp', to test that the
+# toolchain is producing bit identical output to a previous known good toolchain.
+#
+# Options:
+# -e: stop at first failure
+# -nocmp: turn off toolstash -cmp; just check that ordinary builds succeed
+# -work: pass -work to go command
+
+sete=false
+if [ "$1" = "-e" ]; then
+ sete=true
+ shift
+fi
+
+cmp=true
+if [ "$1" = "-nocmp" ]; then
+ cmp=false
+ shift
+fi
+
+work=""
+if [ "$1" = "-work" ]; then
+ work="-work"
+ shift
+fi
+
+cd $(go env GOROOT)/src
+go install cmd/compile cmd/link cmd/asm || exit 1
+pattern="$1"
+if [ "$pattern" = "" ]; then
+ pattern=.
+fi
+
+targets="$(go tool dist list; echo linux/386/387)"
+targets="$(echo "$targets" | tr '/' '-' | sort | egrep "$pattern" | egrep -v 'android-arm|darwin-arm')"
+
+# put linux, nacl first in the target list to get all the architectures up front.
+targets="$(echo "$targets" | egrep 'linux|nacl') $(echo "$targets" | egrep -v 'linux|nacl')"
+
+if [ "$sete" = true ]; then
+ set -e
+fi
+for target in $targets
+do
+ echo $target
+ export GOOS=$(echo $target | sed 's/-.*//')
+ export GOARCH=$(echo $target | sed 's/.*-//')
+ unset GO386
+ if [ "$GOARCH" = "387" ]; then
+ export GOARCH=386
+ export GO386=387
+ fi
+ if $cmp; then
+ if [ "$GOOS" = "android" ]; then
+ go build $work -a -toolexec 'toolstash -cmp' std
+ else
+ go build $work -a -toolexec 'toolstash -cmp' std cmd
+ fi
+ else
+ go build $work -a std
+ fi
+done