blob: 0e20ea01c82514f61eb8edb3b2051e4378b92ed4 [file] [log] [blame]
#!/bin/bash
# Copyright 2019 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
set -o errexit # exit when a command fails
set -o nounset # error when an undefined variable is referenced
set -o pipefail # error if the input command to a pipe fails
readonly SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"
readonly FUCHSIA_ROOT="$(dirname "$(dirname "$SCRIPT_DIR")")"
print_usage_and_exit() {
readonly exit_code=$1
# In the case of a non-zero exit, redirect the stdout below to stderr.
if [[ $exit_code -ne 0 ]]; then
exec 1 >&2
fi
echo ""
echo "Used to bootstrap the \"fint\" tool, which provides the platform's"
echo '"integration interface".'
echo "See //tools/integration/README.md for more details."
echo ""
echo "usage: $(basename "$0") (-o <path>)"
echo ""
echo "options:"
echo "-o: points to a file path at which to output fint; if unsupplied, it"
echo " will be output to the current working directory."
echo ""
exit "$exit_code"
}
###############################################################################
# Returns the host platform, of the form <OS>-<architecture>.
# Globals:
# None
# Arguments:
# None
# Returns:
# The host platform, if successful.
###############################################################################
host_platform() {
readonly uname="$(uname -s -m)"
case "${uname}" in
"Linux x86_64") echo linux-x64 ;;
"Darwin x86_64") echo mac-x64 ;;
*)
echo "unsupported infrastructure platform: ${uname}" 1>&2
exit 1
;;
esac
}
# The `realpath` command is not available on all systems, so we reimplement it
# here in pure bash. It converts relative paths to absolute, and leaves
# absolute paths as-is.
realpath() {
[[ $1 == /* ]] && echo "$1" || echo "$PWD/${1#./}"
}
main() {
local output
output="$(pwd)/fint"
while getopts 'ho:' opt; do
case "$opt" in
h) print_usage_and_exit 0 ;;
o) output=$(realpath "${OPTARG}") ;;
?) print_usage_and_exit 1 ;;
esac
done
# Build in a temporary directory where we can arrange the module. Use `mktemp`
# instead of directly referencing $TMPDIR or a similar environment variable
# that may not be set on all platforms.
BUILD_DIR=$(mktemp -d)
trap 'rm -rf $BUILD_DIR' EXIT
cd "$BUILD_DIR"
for target in go.{mod,sum} vendor; do
ln -s "$FUCHSIA_ROOT"/third_party/golibs/$target .
done
ln -s "$FUCHSIA_ROOT"/tools .
GOCACHE_DIR=$(mktemp -d)
trap 'rm -rf $GOCACHE_DIR' EXIT
readonly go_bin="$FUCHSIA_ROOT/prebuilt/third_party/go/$(host_platform)/bin/go"
GOCACHE="$GOCACHE_DIR" GOPROXY=off $go_bin build \
-o "$output" ./tools/integration/fint/cmd/fint
}
main "$@"