#!/bin/sh
#
# Creates a dkms.conf file

PKG_NAME="intel-i915-dkms-prerelease"
PKG_VER="1.0"
REL_NAME="1"
REL_TYPE=""
BUILD_TYPE=""
DEP_PKG_NAME=""
I915_CONFIG=""
PMT_VSEC_SELECTION="auto"
RHEL_84_KV="4.18.0-305"

helpFunction()
{
	echo ""
	echo "Usage: $0 -n packagename -v packageversion -r releaseversion -p prerelease/opensource -s buildversion"
	echo -e "\t-n packagename"
	echo -e "\t-v packageversion"
	echo -e "\t-r releaseversion"
	echo -e "\t-p prerelease/opensource"
	echo -e "\t-s buildversion"
	echo -e "\t-t custom kernel id"
	exit 1
}

while getopts "n:v:r:p:s:t:" opt
do
	case "$opt" in
		n ) PKG_NAME="$OPTARG" ;;
		v ) PKG_VER="$OPTARG" ;;
		r ) REL_NAME="$OPTARG" ;;
		p ) REL_TYPE="$OPTARG" ;;
		s ) BUILD_TYPE="$OPTARG" ;;
		t ) CUSTOM_KERN_ID="$OPTARG" ;;
		? ) helpFunction ;;
	esac
done

if [ "$REL_TYPE" = "opensource" ]; then
	DEP_PKG_NAME="intel-dmabuf-dkms"
else
	DEP_PKG_NAME="intel-dmabuf-dkms-$REL_TYPE"
fi

if [ "$BUILD_TYPE" != "nodrm" ]; then
	NO_DRM=
	if [ "$BUILD_TYPE" = "pmt" ]; then
		PMT_VSEC_SELECTION="pmt"
	fi
else
	NO_DRM=DEL
fi

# Control below line by conditionally adding DEL at the beginning of line
# those lines will be disabled by sed
#
sed -e '/^DEL/d' -e 's/^\t*//' <<EOF
	PACKAGE_NAME="$PKG_NAME"
	PACKAGE_VERSION="$PKG_VER-$REL_NAME"
	AUTOINSTALL="yes"

	BUILT_MODULE_NAME[0]="i915-compat"
	BUILT_MODULE_LOCATION[0]="compat"
	DEST_MODULE_LOCATION[0]="/updates"

	BUILT_MODULE_NAME[1]="i915"
	BUILT_MODULE_LOCATION[1]="drivers/gpu/drm/i915"
	DEST_MODULE_LOCATION[1]="/updates"

$NO_DRM	BUILT_MODULE_NAME[15]="drm_kms_helper"
$NO_DRM	BUILT_MODULE_LOCATION[15]="drivers/gpu/drm/"
$NO_DRM	DEST_MODULE_LOCATION[15]="/updates"

$NO_DRM	BUILT_MODULE_NAME[16]="drm"
$NO_DRM	BUILT_MODULE_LOCATION[16]="drivers/gpu/drm/"
$NO_DRM	DEST_MODULE_LOCATION[16]="/updates"

$NO_DRM	BUILT_MODULE_NAME[17]="drm_panel_orientation_quirks"
$NO_DRM	BUILT_MODULE_LOCATION[17]="drivers/gpu/drm/"
$NO_DRM	DEST_MODULE_LOCATION[17]="/updates"

$NO_DRM	BUILT_MODULE_NAME[18]="vgem"
$NO_DRM	BUILT_MODULE_LOCATION[18]="drivers/gpu/drm/vgem"
$NO_DRM	DEST_MODULE_LOCATION[18]="/updates"

	# Find out how many CPU cores can be use if we pass appropriate -j option to make.
       	# DKMS could use all cores on multicore systems to build the kernel module.
       	num_cpu_cores()
       	{
		if [ -x /usr/bin/nproc ]; then
			np=\$(nproc)
			if [ "\$np" -le "64" ]; then
				echo "\$np"
			else
				echo "64"
			fi
		else
			echo "1"
		fi
	}
	
	select_kernel_version()
	{
		echo "\$kernelver" | cut -d '.' -f 1-3
		return \$?
	}
	
	select_sles_15sp2_kv()
	{
		cat /boot/config-\$kernelver | grep 'CONFIG_SUSE_PATCHLEVEL=2' | cut -d '=' -f 2
		return \$?
	}
	if [ "$BUILD_TYPE" == "nodrm" ]; then
		I915_CONFIG="i915_only"
	else
		if [ "\$(select_kernel_version)" != "$RHEL_84_KV" ] && [ "\$(select_sles_15sp2_kv)" != "2" ]; then
			I915_CONFIG="i915"
		else
			I915_CONFIG="i915_disable_svm"
		fi
	fi
	
	if [ -n "$CUSTOM_KERN_ID" ]; then
	MAKE="export LEX=flex; export YACC=bison; cp defconfigs/\$I915_CONFIG .config; 'make' -j\$(num_cpu_cores) KLIB=/lib/modules/\$kernelver olddefconfig; 'make' -j\$(num_cpu_cores) KLIB=/lib/modules/\$kernelver BUILD_CONFIG=$BUILD_TYPE CUSTOM_KERN_ID=$CUSTOM_KERN_ID"
	else
	MAKE="export LEX=flex; export YACC=bison; cp defconfigs/\$I915_CONFIG .config; 'make' -j\$(num_cpu_cores) KLIB=/lib/modules/\$kernelver olddefconfig; 'make' -j\$(num_cpu_cores) KLIB=/lib/modules/\$kernelver BUILD_CONFIG=$BUILD_TYPE"
	fi

	CLEAN="export LEX=flex; export YACC=bison; 'make' clean"

EOF
