#!/bin/bash

SRCPKG_ucinet=y
SRCPKG_openssl=y
SRCPKG_libcurl=y
SRCPKG_python3=y
SRCPKG_cloud_mqtt=y
SRCPKG_cloud_conn_dayun=y
SRCPKG_pp_device_monitor=y
SRCPKG_pp_upgrade=y
SRCPKG_newdiags=y
SRCPKG_librdkafka=y
SRCPKG_tdengine=n
SRCPKG_deb4gnet=y
#SRCPKG_proto_forward=y
SRCPKG_rathole_config=y
SRCPKG_frpc_lnxall=y
SRCPKG_rk3568_dido=y
SRCPKG_modbus_tcp=y
SRCPKG_libmodbus_dy=y
SRCPKG_factory_info=y
SRCPKG_gpio_powerchk=y
SRCPKG_rs485=y
SRCPKG_protocol_parser=y
SRCPKG_data_reporter=y
SRCPKG_dido_modbus_tcp=y
SRCPKG_youcan=y
SRCPKG_config_manager=y
SRCPKG_sdmount=y

# load opensource build script
source "${FTOPDIR}/opensource/sources.sh"
source "${FTOPDIR}/base_openwrt/sources.sh"
source "${FTOPDIR}/lnxall_core/sources.sh"

imx6ull_dummy_config() {
	return 0
}

imx6ull_dummy_clean() {
	return 0
}

imx6ull_override_files() {
	local OLDDIR="$PWD"
	cp -r -p -P -v * "${LNXDESTPFX}/"
	return $?
}

generate_version_issue() {
	# generate /lib/dyiot/issue
	local major="$(($(date +%Y) - 2018))"
	local minor="$(date +%V%u)"
	local revision="$(date +%H%M)"
	ISSUE_DATE="v2-${major}.${minor}.${revision}"
	echo  "${ISSUE_DATE}" > './lib/dyiot/issue'
	return $?
}

# generate build_info.txt
generate_build_info() {
	local bfile=./build_info.txt
	echo "issue=$1" > ${bfile}
	echo "product=$2" >> ${bfile}
	echo "build_date=$(date '+%Y-%m-%d')" >> ${bfile}
}

imx6ull_firmware_build() {
	local OLDDIR="${PWD}"
	local STRIP="${LNX_TCP}-strip"

	cd "${LNXDESTPFX}/" || return 1

	# generate /lib/dyiot/issue for non-openwrt systems
	local ISSUE_DATE='' # variable set in function `generate_version_issue
	generate_version_issue
	[ -z "${ISSUE_DATE}" ] && ISSUE_DATE="$(date +%Y%m%d-%H%M)"

	# backup binaries with debugging symbols:
	rm -rf ../lnxall_app-symbols/*
	mkdir -p ../lnxall_app-symbols
	cp -r -p -P * ../lnxall_app-symbols/

	# firstly strip binary
	"${STRIP}" -s bin/* sbin/*
	"${STRIP}" -s lib/lua/*.so lib/*.so*
	"${STRIP}" -s lib/*/*.so lib/lua/*/*.so

	# thirdly, remove unwanted files
	rm -rf ./share/man ./share/doc ./share/licenses ./man

	cd "${LNXDESTDIR}/opt" || return 2
	local CURDIR="${PWD}"

	rm -rf *.tar *.tar.* # remove existing tarballs

	# next create tarball
	tar --numeric-owner --owner=0 --group=0 --exclude=include \
		'--exclude=*.a' '--exclude=*.la' \
		-cf lnxall_app.tar lnxall_app && xz -z -v -9 lnxall_app.tar
	if [ $? -ne 0 ] ; then
		rm -rf *.tar *.tar.*
		echo "Error, failed to create firmware tarball" 1>&2
		return 3
	fi

	# goto firmware upgrade package generation directory
	local fwup_dir="${FTOPDIR}/lnxall_core/fwupgrade"
	cd "${fwup_dir}" || return 4

	rm -rf *.bin *.sh *.elf *.out fwupgrade # remove old files
	generate_build_info "${ISSUE_DATE}" emu

	ln -sv "${CURDIR}/lnxall_app.tar.xz" firmware.bin && \
		ln -sv "${OLDDIR}/fwscript.sh" fwscript.sh
	if [ $? -ne 0 ] ; then
		echo "Error, failed to symlink for firmware and upgrade script" 1>&2
		return 5
	fi

	# invoke make to compile `fwupgrade package
	make TARGET_CC="${LNX_CC}" TARGET_CFLAGS="${LNX_CFLAGS}" TARGET_STRIP="${LNX_TCP}-strip"
	if [ $? -ne 0 ] ; then
		rm -rf target *.bin *.sh
		return 6
	fi

	local fwfile="LNXALL_APP_ARMHF_fwupgrade.elf"
	mv -f -v fwupgrade "${fwfile}" && ls -lh "${fwfile}"

	# append signed certificate to the END of ELF file:
	${FTOPDIR}/scripts/append-verify-data.sh "${fwfile}"
	cd "${OLDDIR}"
	return 0
}

register_source 'target_iMX6ULL_glibc_ems1.0/override-files' \
	imx6ull_dummy_config imx6ull_override_files imx6ull_dummy_clean

register_source 'target_iMX6ULL_glibc_ems1.0/gen_fw' \
	imx6ull_dummy_config imx6ull_firmware_build imx6ull_dummy_clean
