#!/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 "-G                   : build gcc 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=()
GN_ARGS=()
NINJA_ARGS=()
VARIANT=clang
BUILDDIR=
BUILDDIR_SUFFIX=
ARCH=

while getopts a:ACdGhj:lLo:PqrtvX FLAG; do
    case $FLAG in
        a) NINJA_ARGS+=("$OPTARG") ARCH="$OPTARG" ;;
        A) VARIANT=asan ;;
        C) VARIANT=clang ;;
        d) VARIANT=noopt ;;
        G) VARIANT=gcc ;;
        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 "$ARCH" ]]; then
    GN_SWITCHES+=(--export-compile-commands)
else
    GN_SWITCHES+=(--export-compile-commands="$ARCH")
fi

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[@]}"
