#!/usr/bin/env bash

# Copyright 2018 The Fuchsia Authors
#
# Use of this source code is governed by a MIT-style
# license that can be found in the LICENSE file or at
# https://opensource.org/licenses/MIT

function HELP {
    echo "help:"
    echo "-a <arch>            : build just one architecture (default: both)"
    echo "-A                   : build asan variant"
    echo "-C                   : build clang variant"
    echo "-l                   : build thinlto variant"
    echo "-L                   : build lto variant"
    echo "-X                   : build xray variant"
    echo "-P                   : build profile variant"
    echo "-o <dir>             : build in <dir> (default build-VARIANT)"
    echo "-j N                 : passed on to Ninja"
    echo "-q                   : build quietly (pass -q to gn)"
    echo "-v                   : build verbosely (pass -v to ninja)"
    echo "-r                   : build release build"
    echo "-d                   : build unoptimized, with full debug symbols"
    echo "-t                   : build with tests disabled (for targets with small boot partitions)"
    echo "-h for help"
    echo "all arguments after -- become GN build arguments"
    exit 1
}

DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"

GN_SWITCHES=(--export-compile-commands)
GN_ARGS=()
NINJA_ARGS=()
VARIANT=gcc
BUILDDIR=
BUILDDIR_SUFFIX=

while getopts a:ACdhj:lLo:PqrtvX FLAG; do
    case $FLAG in
        a) NINJA_ARGS+=("$OPTARG") ;;
        A) VARIANT=asan ;;
        C) VARIANT=clang ;;
        d) VARIANT=noopt ;;
        j) NINJA_ARGS+=(-j "$OPTARG") ;;
        l) VARIANT=thinlto ;;
        L) VARIANT=lto ;;
        o) BUILDDIR="$OPTARG" ;;
        P) VARIANT=profile ;;
        q) GN_SWITCHES+=(-q) ;;
        r) BUILDDIR_SUFFIX=-release GN_ARGS+=(assert_level=0) ;;
        t) GN_ARGS+=(tests_in_image=false) ;;
        v) NINJA_ARGS+=(-v) ;;
        X) VARIANT=xray ;;
        h) HELP ;;
        \?)
            echo unrecognized option
            HELP
    esac
done
shift $((OPTIND-1))

set -e

if [[ -z "$BUILDDIR" ]]; then
    BUILDDIR="build-$VARIANT$BUILDDIR_SUFFIX"
fi

# Generate args.gn, but only touch it if the contents have changed to avoid
# unnecessarily regenerating on no-op builds.
mkdir -p $BUILDDIR
echo "variants = [ \"$VARIANT\" ] $GN_ARGS $*" | "$DIR/gn" format --stdin > "$BUILDDIR/args.gn.tmp"

if cmp -s "$BUILDDIR/args.gn" "$BUILDDIR/args.gn.tmp"; then
  rm -f "$BUILDDIR/args.gn.tmp"
else
  mv -f "$BUILDDIR/args.gn.tmp" "$BUILDDIR/args.gn"
  "$DIR/gn" gen "${GN_SWITCHES[@]}" "$BUILDDIR"
fi

exec "$DIR/ninja" -C "$BUILDDIR" "${NINJA_ARGS[@]}"
