#!/bin/bash
# Copyright (c) 2000-2016 Synology Inc. All rights reserved.

source "${ScriptsDir}/include/exports"

if [ "linux-5.10.x" = "${SYNO_KERNEL_VERSION}" ]; then
		SkipThisProject
		return
fi

BACKPORTS_VERSION="$(< VERSION)"

BACKPORTS_VERSION_MAJOR=`echo $BACKPORTS_VERSION | sed -e 's/^v*//' | cut -d. -f1`
BACKPORTS_VERSION_MINOR=`echo $BACKPORTS_VERSION | cut -d. -f2`
export DVB_MODULES_DIR=DVB/3.10.x

case "$BUILD_TARGET" in
	MARVELL_ARMADAXP|MARVELL_ARMADA370|MARVELL_ARMADA375|STM_MONACO|\
	MINDSPEED_COMCERTO2K|ALPINE|MARVELL_ARMADA38X)
		CFLAGS=""
		;;
	X64|BROMOLOW|GRANTLEY|CEDARVIEW|AVOTON|BROMOLOWESM|BRASWELL|APOLLOLAKE|\
	BROADWELL|KVMX64|KVMX64SOFS|KVMX64V2|DENVERTON|BROADWELLNK|PURLEY|COFFEELAKE|BROADWELLNTB|\
	NEXTKVMX64|GEMINILAKE|GEMINILAKENK|SKYLAKED|V1000|V1000NK|V1000SOFS|BROADWELLNTBAP|KVMCLOUD|EPYC7002|EPYC7002SOFS|R1000|R1000NK|ICELAKED|BROADWELLNKV2|RYZEN5K|GEMINILAKEVS|\
	EPYC7003NTB|RAPTORLAKES|RAPTORLAKEU)
		CFLAGS="-I/usr/local/x86_64-linux-gnu/include"
		;;
	REALTEK_RTD1296|MARVELL_ARMADA37XX|REALTEK_RTD1619)
		CFLAGS="-I/usr/local/aarch64-unknown-linux-gnueabi/include -DSYNO_NEED_IP6CKSUM"
		;;
esac

export KLIB_BUILD="$KSRC"
export ARCH=${ARCH}

case "$BUILD_TARGET" in
	X64|BROMOLOW|GRANTLEY|CEDARVIEW|AVOTON|BROMOLOWESM|BRASWELL|\
	APOLLOLAKE|BROADWELL|KVMX64|KVMX64SOFS|KVMX64V2|DENVERTON|REALTEK_RTD1296|\
	BROADWELLNK|MARVELL_ARMADA37XX|PURLEY|COFFEELAKE|BROADWELLNTB|NEXTKVMX64|GEMINILAKE|GEMINILAKENK|\
	REALTEK_RTD1619|SKYLAKED|V1000|V1000NK|V1000SOFS|BROADWELLNTBAP|KVMCLOUD|EPYC7002|EPYC7002SOFS|R1000|R1000NK|ICELAKED|BROADWELLNKV2|RYZEN5K|GEMINILAKEVS|\
	EPYC7003NTB|RAPTORLAKES|RAPTORLAKEU)
		export CROSS_COMPILE=${ToolChainPrefix64}
		KERNEL_CC=${CC64}
		;;
	*)
		export CROSS_COMPILE=${ToolChainPrefix}
		KERNEL_CC=${CC}
		;;
esac

case "$BUILD_TARGET" in
	APOLLOLAKE|DENVERTON|KVMX64|KVMX64SOFS|KVMX64V2|REALTEK_RTD1296|BROADWELL|BROADWELLNK|\
	MARVELL_ARMADA37XX|PURLEY|COFFEELAKE|BROADWELLNTB|NEXTKVMX64|\
	GEMINILAKE|GEMINILAKENK|REALTEK_RTD1619|SKYLAKED|V1000|V1000NK|V1000SOFS|BROADWELLNTBAP|KVMCLOUD|\
	EPYC7002|EPYC7002SOFS|R1000|R1000NK|ICELAKED|BROADWELLNKV2|RYZEN5K|GEMINILAKE|EPYC7003NTB|RAPTORLAKES|RAPTORLAKEU)
		SkipThisProject
		return
		if [ "linux-4.4.x" = "${SYNO_KERNEL_SOURCE_DIR}" -o \
			 "linux-4.4.x-glk" = "${SYNO_KERNEL_SOURCE_DIR}" ]; then
			cd v4.4.x/
			case ${MakeClean} in
				[Yy][Ee][Ss])
					make clean
					;;
			esac
			/usr/bin/make ARCH=${ARCH} CROSS_COMPILE=${CROSS_COMPILE} ${MAKE_FLAGS} KSRC="$KSRC"
			cd ../
			return
		fi
		;;
	X64|BROMOLOW|GRANTLEY|CEDARVIEW|AVOTON|BROMOLOWESM|BRASWELL)
		SkipThisProject
		return
		;;
	ALPINE|STM_MONACO|MARVELL_ARMADA38X)
		SkipThisProject
		return
		;;
	DOCKERX64)
		# No need to build for docker DSM
		SkipThisProject
		return
		;;
	HISILICON_HI3536)
		# No need to build for Surveillance platform
		SkipThisProject
		return
		;;
	*)# platforms use kernel 3.x and 2.6.32 should build compat-wireless
		SkipThisProject
		return
		;;
esac

cd ${BACKPORTS_VERSION}

. include/linux/syno_backports_def.config
if [ "$BUILD_TARGET" = "PPC_853X" ]; then
	export syno_flags="${syno_flags} -DSYNO_FIX_PPC853X_TRAMPOLINE_SETUP"
fi
# For DVB driver, compat.ko, to identify if it exports backport_dependency_symbol.
if checkPlatformFunction SYNO_PLAT_EXT_PCIE_SLOT ; then
	syno_flags="${syno_flags} -DSYNO_PLAT_EXT_PCIE_SLOT"
fi
export CFLAGS="${CFLAGS} ${syno_flags}"

if [ ${BACKPORTS_VERSION_MAJOR} -eq 3 -a ${BACKPORTS_VERSION_MINOR} -ge 10 ]; then
		cp -f synoconfigs/$BUILD_TARGET .config
		/usr/bin/make ARCH=${ARCH} CROSS_COMPILE=${CROSS_COMPILE} ${MAKE_FLAGS}

		if [ "$BUILD_TARGET" = "STM_MONACO" ]; then
			# STM_MONACO uses the DVB drivers from linux-3.10.x-bsp instead of from backports.
			# Thus, the dependency table would be generated by linux-3.10.x-bsp directly,
			# don't need to generate it here.
			cd ../
			exit
		fi

		if [ -d "$DVB_MODULES_DIR" ]; then
			rm -rf ${DVB_MODULES_DIR}
		fi

		mkdir -p ${DVB_MODULES_DIR}

		find drivers/media -name '*.ko' -exec cp {} ${DVB_MODULES_DIR}/ \;
		cp compat/compat.ko ${DVB_MODULES_DIR}/
		cd DVB
		./generate_dependency_table.py
		./generate_VIDPID_table.py
		./generate_cleanuped_dependency_table.py
		cd ..

	cd ../
	exit
fi

./scripts/synoscript restore

case ${MakeClean} in
	[Yy][Ee][Ss])
		make clean
		;;
esac

case ${CleanOnly} in
	[Yy][Ee][Ss])
		cd ../
		return
		;;
esac
