#!/bin/bash

set -euo pipefail

if [[ $# -ne 3 ]]; then
	echo "" 1>&2
	echo "Cross-compiler for a Go PACKAGE producing GOOS/OONIARCH binaries." 1>&2
	echo "" 1>&2
	echo "usage: $0 GOOS OONIARCH PACKAGE" 1>&2
	echo "" 1>&2
	echo "GOOS must be one of: android, darwin, linux, windows." 1>&2
	echo "" 1>&2
	echo "OONIARCH must be one of: 386, amd64, arm64, armv6, armv7." 1>&2
	echo "" 1>&2
	echo "Features:" 1>&2
	echo "" 1>&2
	echo "* automatically sets -tags=ooni_psiphon_config when possible;" 1>&2
	echo "" 1>&2
	echo "* if GOLANG_EXTRA_FLAGS is set, pass it to the Go compiler." 1>&2
	echo "" 1>&2
	echo "Example:" 1>&2
	echo "" 1>&2
	echo "  ./CLI/go-build-cross linux armv7 ./internal/cmd/miniooni" 1>&2
	echo "" 1>&2
	exit 1
fi

GOOS=$1
OONIARCH=$2
PACKAGE=$3

if [[ $OONIARCH == armv7 ]]; then
	GOARCH=arm
	GOARM=7
elif [[ $OONIARCH == armv6 ]]; then
	GOARCH=arm
	GOARM=6
else
	GOARCH=$OONIARCH
	GOARM=
fi

if [[ -f ./internal/engine/psiphon-config.json.age &&
	-f ./internal/engine/psiphon-config.key ]]; then
	OONI_PSIPHON_TAGS=ooni_psiphon_config
else
	OONI_PSIPHON_TAGS=""
fi

EXT=
if [[ $GOOS == "windows" ]]; then
	EXT=.exe
fi

PRODUCT=$(basename $PACKAGE)

set -x
export CGO_ENABLED=0
export GOOS=$GOOS
export GOARCH=$GOARCH
export GOARM=$GOARM
go build -tags=$OONI_PSIPHON_TAGS -ldflags="-s -w" \
	-o ./CLI/$PRODUCT-$GOOS-$OONIARCH$EXT ${GOLANG_EXTRA_FLAGS:-} \
	$PACKAGE