summaryrefslogtreecommitdiffstats
path: root/src/buildall.bash
diff options
context:
space:
mode:
Diffstat (limited to 'src/buildall.bash')
-rwxr-xr-xsrc/buildall.bash87
1 files changed, 87 insertions, 0 deletions
diff --git a/src/buildall.bash b/src/buildall.bash
new file mode 100755
index 0000000..7b3751f
--- /dev/null
+++ b/src/buildall.bash
@@ -0,0 +1,87 @@
+#!/usr/bin/env bash
+# Copyright 2015 The Go Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style
+# license that can be found in the LICENSE file.
+
+# Usage: buildall.bash [-e] [pattern]
+#
+# buildall.bash builds the standard library for all Go-supported
+# architectures. It is used by the "misc-compile" trybot builders,
+# as a smoke test to quickly flag portability issues.
+#
+# Options:
+# -e: stop at first failure
+
+if [ ! -f run.bash ]; then
+ echo 'buildall.bash must be run from $GOROOT/src' 1>&2
+ exit 1
+fi
+
+sete=false
+if [ "$1" = "-e" ]; then
+ sete=true
+ shift
+fi
+
+if [ "$sete" = true ]; then
+ set -e
+fi
+
+pattern="$1"
+if [ "$pattern" = "" ]; then
+ pattern=.
+fi
+
+./make.bash || exit 1
+GOROOT="$(cd .. && pwd)"
+
+gettargets() {
+ ../bin/go tool dist list | sed -e 's|/|-|'
+ echo linux-arm-arm5
+}
+
+selectedtargets() {
+ gettargets | egrep "$pattern"
+}
+
+# put linux first in the target list to get all the architectures up front.
+linux_targets() {
+ selectedtargets | grep 'linux' | sort
+}
+
+non_linux_targets() {
+ selectedtargets | grep -v 'linux' | sort
+}
+
+# Note words in $targets are separated by both newlines and spaces.
+targets="$(linux_targets) $(non_linux_targets)"
+
+failed=false
+for target in $targets
+do
+ echo ""
+ echo "### Building $target"
+ export GOOS=$(echo $target | sed 's/-.*//')
+ export GOARCH=$(echo $target | sed 's/.*-//')
+ unset GOARM
+ if [ "$GOARCH" = "arm5" ]; then
+ export GOARCH=arm
+ export GOARM=5
+ fi
+
+ # Build and vet everything.
+ # cmd/go/internal/work/exec.go enables the same vet flags during go test of std cmd
+ # and should be kept in sync with any vet flag changes here.
+ if ! "$GOROOT/bin/go" build std cmd || ! "$GOROOT/bin/go" vet -unsafeptr=false std cmd; then
+ failed=true
+ if $sete; then
+ exit 1
+ fi
+ fi
+done
+
+if [ "$failed" = "true" ]; then
+ echo "" 1>&2
+ echo "Build(s) failed." 1>&2
+ exit 1
+fi