#!/bin/bash

set -e
set -o errtrace
trap 'echo Fatal error: script $0 aborting at line $LINENO, command \"$BASH_COMMAND\" returned $?; exit 1' ERR

PRODUCT_LIST="sirocco"

NUM_JOBS=$(grep -c processor /proc/cpuinfo)

MODULE_NAME="qca-ovsmgr"
###################################################
# Setup build toollchain
###################################################
sdk_top_dir=$(readlink -e $(dirname $0)/..)
TOP_DIR=$(readlink -e ${sdk_top_dir}/..)

#export ARCH and build related envs.
source ${TOP_DIR}/sdk/build_scripts/setup_env.sh

kernel_path=$(readlink -e ${sdk_top_dir}/../kernel)
soc_type=ipq50xx
extra_cflags="-I${sdk_top_dir}/${MODULE_NAME}/exports -I${kernel_path}/net/openvswitch"

##################################################
# Build Kernel Module
##################################################
function BuildKModule() {
    # make kernel module
    echo "Build ${MODULE_NAME}"
    ${CROSS_MAKE} -C ${kernel_path} M=${sdk_top_dir}/${MODULE_NAME} SoC=${soc_type} EXTRA_CFLAGS="${extra_cflags}" V=1
}

##################################################
# Build & Install
##################################################
function BuildAndInstall() {
    local product=$1
    local eureka_src_path=$(readlink -e $2)
    if [ -z ${eureka_src_path} ]; then
      echo "eureka_src_path doesn't exist"
      exit 1
    fi

    # clean previous build
    find . -name "*.o" -delete
    find . -name "*.cmd" -delete
    find . -name "*.ko" -delete
    find . -name "*.mod.*" -delete
    find . -name "*.mod" -delete
    find . -name Module.symvers -delete

    # build module
    BuildKModule

    # install module
    echo "Install ${MODULE_NAME}.ko"
    local module_target_dir="$(GetModulePath ${eureka_src_path} ${product})"
    mkdir -p ${module_target_dir}
    cp -f ${MODULE_NAME}.ko ${module_target_dir}/.
}

function Usage() {
    cat << EOF
Usage:
    $0 <product> <eureka_src_path>
    Valid products: ${PRODUCT_LIST}
EOF
}

function IsProductValid() {
  local product
  local ret=1

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

  return ${ret}
}

#########################
####### Main Entry ######
#########################
if (( $# < 2 )); then
  Usage
else
  if IsProductValid $1; then
    BuildAndInstall $1 $2
  else
    echo "$1 is a invalid product"
    Usage
  fi
fi
