#!/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
