#!/bin/sh

opt_disable=false

for opt in "$@"; do
	case $opt in
		--disable)
			opt_disable=true
			;;
	esac
done

LIBPATH="/usr/lib/aarch64-linux-gnu"
LIBMALI=$(find ${LIBPATH} -maxdepth 1 -type f -name lib[mM]ali.so* | sort -rV | head -1)
LDCONFIG=/etc/ld.so.conf.d/00-aarch64-mali.conf

LIBS="libEGL.so.1 libGLESv1_CM.so.1 libGLESv2.so.2"
grep gbm ${LIBMALI} >/dev/null && LIBS="${LIBS} libgbm.so.1"
grep wayland ${LIBMALI} >/dev/null && LIBWAYLAND="libwayland-egl.so.1"

GPUINFO=$(find /sys/devices/platform -name gpuinfo)

do_install()
{
	umount $2 2>/dev/null || true
	if [ "x$opt_disable" = "xfalse" ]; then
		[ -f $2 ] && mount --bind $1 $2 2>/dev/null
	fi
}

do_mount_mali_driver()
{
	case "${1}" in
		Mali-G52*0x7402 | Mali-G52*0x07040002 \
			| Mali-G610*0xA867 | Mali-G610*0x0A080607)
			# ODROID-M1/M1S/M2
			for lib in $LIBS; do
				do_install $LIBMALI $LIBPATH/$lib
			done
			for lib in $LIBWAYLAND; do
				do_install $LIBMALI $LIBPATH/$lib
				do_install $LIBMALI $LIBPATH/mali/$lib
			done
			do_install $LIBMALI $LIBPATH/mali/libEGL.so.1
			;;
		Mali-G52*0x0702)
			for lib in $LIBS; do
				do_install $LIBPATH/mali/$lib $LIBPATH/$lib
			done
			;;
		Mali-G310*0xAC74 | Mali-G310*0x0A0C0704*)
			# ODROID-C5
			for lib in $LIBS $LIBWAYLAND; do
				do_install $LIBMALI $LIBPATH/$lib
			done
			;;
		*)
			echo ${1}
			;;
	esac
}

case ${GPUINFO} in
	/sys/devices/platform/fde60000.gpu/gpuinfo \
		| /sys/devices/platform/fb000000.gpu/gpuinfo)
		cat>${LDCONFIG}<<__EOF
/usr/lib/aarch64-linux-gnu/mali
__EOF
		MALI=$(cat ${GPUINFO})
		do_mount_mali_driver "${MALI}"
		;;
	/sys/devices/platform/fd000000.valhall/gpuinfo)
		MALI=$(cat ${GPUINFO})
		do_mount_mali_driver "${MALI}"
		;;
	*)
		rm -f ${LDCONFIG}
		;;
esac

ldconfig
