#!/bin/bash

# Created by jiaqiang.ye@lnxall.com
# Simple Module list for LNXALL WooLinkOS core
# 2022/06/28

lcore_dummy_config() {
    : Welcome to WooLinkOS by Lnxall
    return 0
}

lcore_common_clean() {
    make CC=${LNX_CC} CFLAGS="${LNX_CFLAGS}" LDFLAGS="${LNX_LDFLAGS}" clean
    return $?
}

libipc_session_build() {
	make V=1 -j1 CC=${LNX_CC} CFLAGS="${LNX_CFLAGS} -I${LNXDESTPFX}/include" \
		LDFLAGS="${LNX_LDFLAGS} -Wl,-rpath-link=${LNXDESTPFX}/lib"
	[ $? -ne 0 ] && return 1

	mkdir -p "${LNXDESTPFX}"/{include/dy_utils,lib}
	cp -v -P ./include/* "${LNXDESTPFX}/include/dy_utils/" && \
		cp -v -P *.so "${LNXDESTPFX}/lib/"
	[ $? -ne 0 ] && return 2

	local pkg_ver=$(version-lnxget "${IPKG_VERFILE}" 0.1.0)
	lnxbf_ipkg_init libipc_session "${pkg_ver}"
	[ $? -ne 0 ] && return 3

	local LPKGDIR="ipkg-dir${LNX_PREFIX}"
	mkdir -p "${LPKGDIR}/lib"
	cp -v -P -f *.so* "${LPKGDIR}/lib/"
	[ $? -ne 0 ] && return 4

	if [ -f ./install.sh ] ; then
		FTPIDX=${FTPIDX} bash ./install.sh "${LPKGDIR}"
		[ $? -ne 0 ] && return 5
	fi
	lnxbf_ipkg_generate libipc_session "${pkg_ver}"
	return $?
}

libipc_session_clean() {
	lnxbf_package_clean
	rm -rf -v "${FINSTALL_DIR}/packages"/libipc_session*.ipk
	return 0
}

libdyutils_build() {
	local CFLAGS="${LNX_CFLAGS} -I${LNXDESTPFX}/include/dy_utils -I${LNXDESTPFX}/include"
	make V=1 -j1 CC="${LNX_CC}" CFLAGS="${CFLAGS}" \
		LDFLAGS="${LNX_LDFLAGS} -Wl,-rpath-link=${LNXDESTPFX}/lib" SUPPORT_LED=1
	[ $? -ne 0 ] && return 1

	mkdir -p "${LNXDESTPFX}"/{include/dy_utils,lib}
	cp -r -v -P ./include/* "${LNXDESTPFX}/include/dy_utils/" && \
		cp -v -P *.so "${LNXDESTPFX}/lib/"
	[ $? -ne 0 ] && return 2

	local pkg_ver=0.1.0
	lnxbf_ipkg_init libdyutils "${pkg_ver}"
	[ $? -ne 0 ] && return 3

	local LPKGDIR="ipkg-dir${LNX_PREFIX}"
	mkdir -p "${LPKGDIR}/lib"
	cp -v -P -f *.so "${LPKGDIR}/lib/"
	[ $? -ne 0 ] && return 4

	lnxbf_ipkg_generate libdyutils "${pkg_ver}"
	return $?
}

libdyutils_clean() {
	lnxbf_package_clean
	rm -rf -v "${FINSTALL_DIR}/packages"/libdyutils*.ipk
	return 0
}

lua_apputils_build() {
	make CC=${LNX_CC} LDFLAGS="${LNX_LDFLAGS}" \
		CFLAGS="${LNX_CFLAGS} -I${LNXDESTPFX}/include/dy_utils -I${LNXDESTPFX}/include"
	[ $? -ne 0 ] && return 1

	local pkg_ver=$(version-lnxget "${IPKG_VERFILE}" 0.1.0)
	lnxbf_ipkg_init lua-apputils "${pkg_ver}"
	[ $? -ne 0 ] && return 2

	local LPKGDIR="ipkg-dir${LNX_PREFIX}"
	mkdir -p "${LPKGDIR}/lib/lua"
	cp -v -P -f *.so ./files/*.lua "${LPKGDIR}/lib/lua/"
	[ $? -ne 0 ] && return 3

	if [ -f ./install.sh ] ; then
		FTPIDX=${FTPIDX} bash ./install.sh "${LPKGDIR}"
		[ $? -ne 0 ] && return 4
	fi
	lnxbf_ipkg_generate lua-apputils "${pkg_ver}"
	return $?
}

lua_apputils_clean() {
	lnxbf_package_clean
	rm -rf -v "${FINSTALL_DIR}/packages"/lua-apputils*.ipk
	return 0
}

iec104_server_new_build() {
	local CFLAGS="${LNX_CFLAGS} -I${LNXDESTPFX}/include/dy_utils -I${LNXDESTPFX}/include"
	make V=1 -j1 CC="${LNX_CC}" CFLAGS="${CFLAGS}" \
		LDFLAGS="${LNX_LDFLAGS} -Wl,-rpath-link=${LNXDESTPFX}/lib" SUPPORT_LED=1
    [ $? -ne 0 ] && return 1

    cp -v -f iec104_server_new "${LNXDESTPFX}/bin/"
	[ $? -ne 0 ] && return 2

	local pkg_ver=0.1.0
	lnxbf_ipkg_init iec104_server_new "${pkg_ver}"
	[ $? -ne 0 ] && return 3

	local LPKGDIR="ipkg-dir${LNX_PREFIX}"
	mkdir -p "${LPKGDIR}/bin"
	cp -v -f iec104_server_new "${LPKGDIR}/bin/"
	[ $? -ne 0 ] && return 4

	lnxbf_ipkg_generate iec104_server_new "${pkg_ver}"
	return $?
}

iec104_server_new_clean() {
	lnxbf_package_clean
	rm -rf -v "${FINSTALL_DIR}/packages"/iec104_server_new*.ipk
	return 0
}

modbus_tcp_slave_build() {
	local CFLAGS="${LNX_CFLAGS} -I${LNXDESTPFX}/include/dy_utils -I${LNXDESTPFX}/include"
	make V=1 -j1 CC="${LNX_CC}" CFLAGS="${CFLAGS}" \
		LDFLAGS="${LNX_LDFLAGS} -Wl,-rpath-link=${LNXDESTPFX}/lib" SUPPORT_LED=1
    [ $? -ne 0 ] && return 1

    cp -v -f modbus_tcp_slave "${LNXDESTPFX}/bin/"
	[ $? -ne 0 ] && return 2

	local pkg_ver=0.1.0
	lnxbf_ipkg_init modbus_tcp_slave "${pkg_ver}"
	[ $? -ne 0 ] && return 3

	local LPKGDIR="ipkg-dir${LNX_PREFIX}"
	mkdir -p "${LPKGDIR}/bin"
	cp -v -f modbus_tcp_slave "${LPKGDIR}/bin/"
	[ $? -ne 0 ] && return 4

    lnxbf_ipkg_generate modbus_tcp_slave "${pkg_ver}"
}

modbus_tcp_slave_clean() {
	lnxbf_package_clean
	rm -rf -v "${FINSTALL_DIR}/packages"/modbus_tcp_slave*.ipk
	return 0
}

libgpiod_032_config() {
	echo ${LNXDESTPFX}	# /home/gaoyang/bcu_b30/wlos_core/target/install/opt/lnxall_app
	echo ${LNX_TCP}		# aarch64-buildroot-linux-gnu
	echo ${LNX_CC}		# aarch64-buildroot-linux-gnu-gcc
	echo ${LNX_CXX}	 # aarch64-buildroot-linux-gnu-g++

	./configure --prefix=${LNXDESTPFX} --target=${LNX_TCP} --host=${LNX_TCP} --build=x86_64-pc-linux-gnu ac_cv_func_malloc_0_nonnull=yes \
		 --disable-static --enable-shared  --disable-tools \
		--disable-gtk-doc --disable-gtk-doc-html --disable-doc --disable-docs --disable-documentation --with-xmlto=no --with-fop=no \
		--disable-dependency-tracking --enable-ipv6 --disable-nls \
        CC=${LNX_CC} \
        CXX=${LNX_CXX}
	return $?
}

libgpiod_032_build() {
    make  V=1 -j${OJOBN:-8}
	[ $? -ne 0 ] && return 1
	cp -v -f ./src/lib/.libs/* "${LNXDESTPFX}/lib/" && \
		cp -v -arf ./include/gpiod.h "${LNXDESTPFX}/include"
	[ $? -ne 0 ] && return 2

	local pkg_ver=0.3.2
	lnxbf_ipkg_init libgpiod_032 "${pkg_ver}"
	[ $? -ne 0 ] && return 3

	local LPKGDIR="ipkg-dir${LNX_PREFIX}"
	mkdir -p "${LPKGDIR}/lib"
	cp -v -P -f ./src/lib/.libs/libgpiod.so* "${LPKGDIR}/lib/"
	[ $? -ne 0 ] && return 4

	lnxbf_ipkg_generate libgpiod_032 "${pkg_ver}"
	return $?
}

libgpiod_032_clean() {
	lnxbf_package_clean
	rm -rf -v "${FINSTALL_DIR}/packages"/libgpiod_032*.ipk
	return 0
}

dido_modbus_tcp_build() {
	make CC=${LNX_CC} LDFLAGS="${LNX_LDFLAGS} -Wl,-rpath-link=${LNXDESTPFX}/lib" \
		CFLAGS="${LNX_CFLAGS} -I${LNXDESTPFX}/include -I${LNXDESTPFX}/include/dy_utils -I${LNXDESTPFX}/include/modbus"
	[ $? -ne 0 ] && return 1

	local pkg_ver=$(version-lnxget "${IPKG_VERFILE}" 0.1.0)
	lnxbf_ipkg_init dido_modbus_tcp "${pkg_ver}"
	[ $? -ne 0 ] && return 2

	local LPKGDIR="ipkg-dir${LNX_PREFIX}"
	FTPIDX=${FTPIDX} bash ./install.sh "${LPKGDIR}"
	[ $? -ne 0 ] && return 3

	lnxbf_ipkg_generate dido_modbus_tcp "${pkg_ver}"
	return $?
}

dido_modbus_tcp_clean() {
	lnxbf_package_clean
	rm -rf -v "${FINSTALL_DIR}/packages"/dido_modbus_tcp*.ipk
	return 0
}

register_source 'package_repos/libipc_session/src' \
	lcore_dummy_config libipc_session_build libipc_session_clean

register_source 'package_repos/libdyutils/src' \
	lcore_dummy_config libdyutils_build libdyutils_clean

register_source 'lnxall_core/lua-apputils' \
	lcore_dummy_config lua_apputils_build lua_apputils_clean

srcpkg_enabled libgpiod_032 && \
	register_source 'package_repos/libgpiod_032' \
		libgpiod_032_config libgpiod_032_build libgpiod_032_clean

srcpkg_enabled iec104_server_new && \
	register_source 'package_repos/iec104_server_new/src' \
		lcore_dummy_config iec104_server_new_build iec104_server_new_clean

srcpkg_enabled modbus_tcp_slave && \
	register_source 'package_repos/modbus_tcp_slave/src' \
		lcore_dummy_config modbus_tcp_slave_build modbus_tcp_slave_clean

srcpkg_enabled dido_modbus_tcp && \
	register_source 'package_repos/dido_modbus_tcp/src' \
		lcore_dummy_config dido_modbus_tcp_build dido_modbus_tcp_clean
