#!/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 brezza"

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

###################################################
# 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

kver=5.4
tool_path=${CROSS_COMPILER_DIR}
kernel_path=$(readlink -e ${sdk_top_dir}/../kernel)

makeflags="KVER=${kver} TOOL_PATH=${tool_path} SYS_PATH=${kernel_path} TOOLPREFIX=${CROSS_COMPILE} CHIP_TYPE=MP ISISC_ENABLE=enable HK_CHIP=enable"

##################################################
# Build Kernel Module
##################################################
function BuildKModule() {
    # make kernel module
    echo "Build qca-ssdk"
    ${CROSS_MAKE} ${makeflags} 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
    make ${makeflags} clean

    # build module
    BuildKModule

    # install module
    echo "Install qca-ssdk.ko"
    local module_target_dir="$(GetModulePath ${eureka_src_path} ${product})"
    mkdir -p ${module_target_dir}
    cp -f build/bin/qca-ssdk.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
