#!/usr/bin/env bash

# Copyright 2016 The Fuchsia Authors
# Copyright (c) 2008 Travis Geiselbrecht
#
# 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 arg              : Pass arg to make"
    echo "-f                  : Exit on first failure"
    echo "-m                  : Build zircon targets only"
    echo "-r                  : Also build release mode builds"
    echo "-c                  : Also build with clang"
    echo "-A                  : Also build with ASan"
    echo "-q                  : Build quietly"
    echo "-h for help"
    exit 1
}

FAIL_FAST=0
DO_RELEASE=0
DO_CLANG=0
DO_ASAN=0
ZIRCON_ONLY=0
MAKE_ARGS=
QUIET=0

while getopts Aa:fhmrcq FLAG; do
    case $FLAG in
        A) DO_ASAN=1;;
        a) MAKE_ARGS="${MAKE_ARGS} ${OPTARG}";;
        f) FAIL_FAST=1;;
        h) HELP;;
        r) DO_RELEASE=1;;
        c) DO_CLANG=1;;
        m) ZIRCON_ONLY=1;;
        q) QUIET=1;;
        \?)
            echo unrecognized option
            HELP
    esac
done
shift $((OPTIND-1))

if [ "$ZIRCON_ONLY" -eq 1 ]; then
    # build everything in the projects directory
    PROJECTS=`echo kernel/project/zircon*.mk | xargs -n1 basename | sed 's/\.mk//'`
else
    PROJECTS=`echo kernel/project/*.mk | xargs -n1 basename | sed 's/\.mk//'`
fi
FAILED=""

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

for p in $PROJECTS; do
  echo building $p
  nice $DIR/make-parallel $p ${MAKE_ARGS}
  STATUS=$?
  if [ "$STATUS" -ne 0 ]; then
    FAILED="$FAILED $p"
    if [ "$FAIL_FAST" -eq 1 ]; then
      break
    fi
  fi

  if [ "$DO_CLANG" -eq 1 ]; then
    echo building $p with clang
    nice $DIR/make-parallel $p ${MAKE_ARGS} USE_CLANG=true
    STATUS=$?
    if [ "$STATUS" -ne 0 ]; then
      FAILED="$FAILED $p-clang"
      if [ "$FAIL_FAST" -eq 1 ]; then
        break
      fi
    fi
  fi

  if [ "$DO_ASAN" -eq 1 ]; then
    echo building $p with ASan
    nice $DIR/make-parallel $p ${MAKE_ARGS} USE_ASAN=true
    STATUS=$?
    if [ "$STATUS" -ne 0 ]; then
      FAILED="$FAILED $p-asan"
      if [ "$FAIL_FAST" -eq 1 ]; then
        break
      fi
    fi
  fi

  if [ "$DO_RELEASE" -eq 1 ]; then
    echo building $p with release
    nice $DIR/make-release $p ${MAKE_ARGS}
    STATUS=$?
    if [ "$STATUS" -ne 0 ]; then
      FAILED="$FAILED $p-release"
      if [ "$FAIL_FAST" -eq 1 ]; then
        break
      fi
    fi
    if [ "$DO_CLANG" -eq 1 ]; then
      echo building $p with release and clang
      nice $DIR/make-release $p ${MAKE_ARGS} USE_CLANG=true
      STATUS=$?
      if [ "$STATUS" -ne 0 ]; then
        FAILED="$FAILED $p-clang-release"
        if [ "$FAIL_FAST" -eq 1 ]; then
          break
        fi
      fi
    fi
  fi
done

if [ "$FAILED" != "" ]; then
  echo
  echo some projects have failed to build:
  echo $FAILED
fi

exit $STATUS
