#!/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="nat46"
###################################################
# 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
nat64_version="1.0"
extra_cflags=-D"NAT46_VERSION='\"1.0\"'"
if [ "${ENABLE_64BIT_BUILD}" == "false" ]; then
  extra_cflags="${extra_cflags} -mlong-calls"
fi

##################################################
# Build Kernel Module
##################################################
function BuildKModule() {
    # make kernel module
    echo "Build ${MODULE_NAME}"
    ${CROSS_MAKE} -C ${kernel_path} M=${sdk_top_dir}/${MODULE_NAME}/${MODULE_NAME}/modules 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}/modules/${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
