| #!/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-nss-ecm" |
| ################################################### |
| # 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) |
| qca_sfe_path=$(readlink -e ${sdk_top_dir}/qca-nss-sfe/) |
| soc_type=ipq50xx |
| extra_cflags="-I${qca_sfe_path}/exports" |
| |
| build_flags="ECM_CLASSIFIER_HYFI_ENABLE=n ECM_MULTICAST_ENABLE=n ECM_INTERFACE_IPSEC_ENABLE=n ECM_INTERFACE_PPTP_ENABLE=n ECM_INTERFACE_L2TPV2_ENABLE=n ECM_INTERFACE_GRE_TAP_ENABLE=n ECM_INTERFACE_GRE_TUN_ENABLE=n ECM_INTERFACE_SIT_ENABLE=n ECM_INTERFACE_TUNIPIP6_ENABLE=n ECM_INTERFACE_RAWIP_ENABLE=n ECM_INTERFACE_BOND_ENABLE=n ECM_XFRM_ENABLE=n ECM_FRONT_END_SFE_ENABLE=y ECM_NON_PORTED_SUPPORT_ENABLE=n ECM_INTERFACE_MAP_T_ENABLE=n ECM_INTERFACE_VXLAN_ENABLE=n ECM_INTERFACE_OVS_BRIDGE_ENABLE=n ECM_CLASSIFIER_OVS_ENABLE=n ECM_CLASSIFIER_DSCP_IGS=n ECM_IPV6_ENABLE=y ECM_FRONT_END_NSS_ENABLE=n EXAMPLES_BUILD_OVS=n" |
| |
| ################################################## |
| # Build Kernel Module |
| ################################################## |
| function BuildKModule() { |
| # make kernel module |
| echo "Build ${MODULE_NAME}" |
| ${CROSS_MAKE} -C ${kernel_path} M=${sdk_top_dir}/${MODULE_NAME} ${build_flags} SoC=${soc_type} EXTRA_CFLAGS="${extra_cflags}" \ |
| KBUILD_EXTRA_SYMBOLS="${qca_sfe_path}/Module.symvers" 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 ecm.ko ${module_target_dir}/${MODULE_NAME}.ko |
| cp -f examples/ecm_sfe_l2.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 |