#!/bin/bash

if [ ${#} -ne 1 ]; then
	echo "Usage: $(basename ${0}) ENVCFG_FILE" >&2
	exit 1
fi

. ${1} || exit 1

I="kernel"

if [ ${CREATE_PLATFORM} -eq 1 ]; then
	echo "${I}: platform creation is not supported yet" >&2
	exit 1
fi

BASE_PLATFORM_UPPER=$(echo ${BASE_PLATFORM} | tr 'a-z' 'A-Z')
TARGET_PLATFORM_UPPER=$(echo ${TARGET_PLATFORM} | tr 'a-z' 'A-Z')

################################################################################
# dws
################################################################################
BASE_DWS_FILE="drivers/misc/mediatek/dws/${BASE_PLATFORM}/${BASE_PROJECT_NAME}.dws"
TARGET_DWS_FILE="drivers/misc/mediatek/dws/${TARGET_PLATFORM}/${TARGET_PROJECT_NAME}.dws"

DWS_CP_CMD="cp -f ${BASE_DWS_FILE} ${TARGET_DWS_FILE}"
echo "${I}: dws cloning command: ${DWS_CP_CMD}"
eval ${DWS_CP_CMD} || exit 1

if [ "${BASE_PLATFORM}" != "${TARGET_PLATFORM}" ]; then
	echo "${I}: update <proj> of target dws ${TARGET_DWS_FILE}"
	sed -ri "s#(^[[:space:]]*<proj>)${BASE_PLATFORM_UPPER}</proj>#\1${TARGET_PLATFORM_UPPER}</proj>#g" ${TARGET_DWS_FILE}
fi

################################################################################
# dts and dtb registration
################################################################################
case "${BASE_ARCH}" in
	'arm')
		BASE_DTS_FILE="arch/${BASE_ARCH}/boot/dts/${BASE_PROJECT_NAME}.dts"
		;;
	'arm64')
		BASE_DTS_FILE="arch/${BASE_ARCH}/boot/dts/mediatek/${BASE_PROJECT_NAME}.dts"
		;;
	*)
		echo "${I}: invalid base arch ${BASE_ARCH}" >&2
		exit 1
esac

case "${TARGET_ARCH}" in
	'arm')
		TARGET_DTS_FILE="arch/${TARGET_ARCH}/boot/dts/${TARGET_PROJECT_NAME}.dts"
		DTB_MAKEFILE="arch/${TARGET_ARCH}/boot/dts/Makefile"
		# TODO: register ${TARGET_PROJECT_NAME}/dtb in ${DTB_MAKEFILE}
		echo "DTC_FLAGS_${TARGET_PROJECT_NAME} += -@" >> ${DTB_MAKEFILE} || exit 1
		;;
	'arm64')
		TARGET_DTS_FILE="arch/${TARGET_ARCH}/boot/dts/mediatek/${TARGET_PROJECT_NAME}.dts"
		DTB_MAKEFILE="arch/${TARGET_ARCH}/boot/dts/mediatek/Makefile"
		if ! egrep -q "${TARGET_PROJECT_NAME}.dtb" ${DTB_MAKEFILE}; then
			echo "${I}: add ${TARGET_PROJECT_NAME}.dtb in ${DTB_MAKEFILE}"
			echo "dtb-\$(CONFIG_ARCH_MEDIATEK) += ${TARGET_PROJECT_NAME}.dtb" >> ${DTB_MAKEFILE} || exit 1
			echo "DTC_FLAGS_${TARGET_PROJECT_NAME} += -@" >> ${DTB_MAKEFILE} || exit 1
		fi
		;;
	*)
		echo "${I}: invalid target arch ${TARGET_ARCH}" >&2
		exit 1
esac

DTS_CP_CMD="cp -f ${BASE_DTS_FILE} ${TARGET_DTS_FILE}"
echo "${I}: dts cloning command: ${DTS_CP_CMD}"
eval ${DTS_CP_CMD} || exit 1

echo "${I}: update dts file ${TARGET_DTS_FILE}"
sed -ri "s/${BASE_PROJECT_NAME}/${TARGET_PROJECT_NAME}/g" ${TARGET_DTS_FILE} || exit 1

################################################################################
# defconfig
################################################################################
if [ -f arch/${BASE_ARCH}/configs/${BASE_PROJECT_NAME}_defconfig ]; then
	DEFCONFIG_CP_CMD="cp -f arch/${BASE_ARCH}/configs/${BASE_PROJECT_NAME}_defconfig arch/${TARGET_ARCH}/configs/${TARGET_PROJECT_NAME}_defconfig"
	echo "${I}: defconfig copy command: ${DEFCONFIG_CP_CMD}"
	eval ${DEFCONFIG_CP_CMD} || exit 1
fi

if [ -f arch/${BASE_ARCH}/configs/${BASE_PROJECT_NAME}_debug_defconfig ]; then
	DEBUG_DEFCONFIG_CP_CMD="cp -f arch/${BASE_ARCH}/configs/${BASE_PROJECT_NAME}_debug_defconfig arch/${TARGET_ARCH}/configs/${TARGET_PROJECT_NAME}_debug_defconfig"
	echo "${I}: debug_defconfig copy command: ${DEBUG_DEFCONFIG_CP_CMD}"
	eval ${DEBUG_DEFCONFIG_CP_CMD} || exit 1
fi

exit 0
