#!/bin/bash

set -e

top_dir=$(readlink -e $(dirname $0)/../../)

declare -A PRODUCT_LIST=([sirocco]="sirocco-p1 sirocco-b1 sirocco-b3 sirocco-b4")

function Help() {
  echo "Usage: $0  <eureka_workspace> <product/board> [optional build number] [other options]"
  echo "  valid product : sirocco"
  echo "  available options: --venv_root=<venv_root>"
}

function parse_args() {
  readonly eureka_src_path="$( cd "$( dirname "${1}" )" && pwd )/$(basename $1)"
  # Set the target profile as per SOC
  product=""
  revision=""
  # Check if user specify product or board
  if [[ "$2" =~ ^.+-[pb][0-9]$ ]]; then
    product=`echo $2 | cut -d "-" -f1`
    revision=`echo $2 | cut -d "-" -f2`
  else
    product=$2
  fi
  readonly product
  readonly revision

  deterministic_build=""

  shift # product
  shift # eureka_src_path

  for arg in "$@"
  do
    case $arg in
      --venv_root=*)
        pyvenv_path="${arg#*=}"
        shift # past argument=value
      ;;
      *[!0-9]* | '') # not a number
        echo "unknown option ${arg}"
      ;;
      *)
        build_number=$arg
        shift
      ;;
    esac
  done

  if [ -z "$build_number" ]; then
    build_number="${USER}-private_build"
  else
    # If we were supplied a build number, this is probably a build server build so
    # build kernel deterministically
    deterministic_build="-d"
  fi
}

function setup_pyvenv() {
  if [ -d "${pyvenv_path}" -a -f "${pyvenv_path}/bin/activate" ]; then
    source ${pyvenv_path}/bin/activate
    echo "activated virtual environment at ${pyvenv_path}"
  fi
}

function IsProductValid() {
  local available_product
  local ret=1

  for available_product in ${!PRODUCT_LIST[@]}; do
    if [ "${available_product}" == "$1" ]; then
      ret=0
      break
    fi
  done

  return ${ret}
}

function build_for_board() {
  board=$1

  # Build kernel
  pushd ${top_dir}/kernel
  echo "Build kernel for ${board}..."
  ./build.sh ${deterministic_build} ${board} ${eureka_src_path}
  popd

  # Build u-boot
  pushd ${top_dir}/bootloader
  echo "Build bootloader for ${board}..."
  ./build.sh ${deterministic_build} ${board} ${eureka_src_path}
  popd
}

function BuildAll() {
  if [ -z ${eureka_src_path} ]; then
    echo "eureka_src_path doesn't exist"
    exit 1
  fi

  if ! IsProductValid ${product}; then
    echo "Invalid product: $product"
    Help
    exit 1
  fi


  if [ $revision ]; then
    echo "Build for board ${product}-${revision}"
    build_for_board $product-$revision
  else
    echo "Build for all board revisions for product: ${product}"
    for board in ${PRODUCT_LIST[${product}]}; do
      build_for_board $board
    done
  fi

  # Build sdk modules
  pushd ${top_dir}/sdk/qca-ssdk
  ./build.sh ${product} ${eureka_src_path}
  popd

  pushd ${top_dir}/sdk/qca-nss-dp
  ./build.sh ${product} ${eureka_src_path}
  popd

  pushd ${top_dir}/sdk/nat46
  ./build.sh ${product} ${eureka_src_path}
  popd

  pushd ${top_dir}/sdk/qca-nss-sfe
  ./build.sh ${product} ${eureka_src_path}
  popd

  pushd ${top_dir}/sdk/qca-nss-ecm
  ./build.sh ${product} ${eureka_src_path}
  popd
}

#########################
####### Main Entry ######
#########################
if [[ "$#" -lt 2 ]] || [[ "$#" -gt 4 ]]; then
  echo "Error: Incorrect arguments."
  Help
  exit 1
fi

parse_args $@

# Create SDK Version number
mkdir -p ${eureka_src_path}/vendor/qualcomm/${product}
sdk_version_manifest=${eureka_src_path}/vendor/qualcomm/${product}/SDK_VERSION
echo "Build #${build_number}|$(TZ='America/Los_Angeles' date)" > $sdk_version_manifest

setup_pyvenv

BuildAll
