#
# Copyright 2021 Google LLC
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# version 2 as published by the Free Software Foundation.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#

EAPI="7"

inherit linux-mod

# Get realtime / vanilla kernel indicator after numeric version digits. e.g. "v" or "r".
RT=$(ver_cut 4 ${PV})
# Get pure digit version number e.g. from ice-1.3.2v we will get "1.3.2".
PV=$(ver_cut 1-3)

DESCRIPTION="Intel ice driver ${PV} kernel module."
HOMEPAGE="https://www.intel.com/content/www/us/en/download/19630/30303/intel-network-adapter-driver-for-e810-series-devices-under-linux.html"
SRC_URI="gs://chromeos-localmirror/distfiles/ice-${PV}.tar.gz"

LICENSE="BSD-Google LICENSE.ice"
SLOT="vanilla"
case "${RT}" in
	r)
		SLOT="rt"
		;;
	*)
		;;
esac
KEYWORDS="*"
IUSE=""
RESTRICT="mirror"

DEPEND="virtual/linux-sources"
RDEPEND="${DEPEND}"

S="${WORKDIR}/ice-${PV}/src"

libdir="kernel/drivers/net/ethernet/intel/ice"
MODULE_NAMES="ice(${libdir}:${S}:${S})"
FIRMWARE_INSTALL_ROOT="/lib/firmware"

pkg_setup() {
	ls "${ROOT}/usr/src"
	# We cannot rely on auto detection because we have two kernels installed.
	local KERNEL_PREFIX="lakitu-kernel"
	case "${RT}" in
		r)
			KERNEL_PREFIX+="-rt"
			;;
		*)
			;;
	esac
	KERNEL_DIR="$(find "${ROOT}/usr/src" -maxdepth 1 -name "${KERNEL_PREFIX}-[0-9]*")"
	KBUILD_OUTPUT="${KERNEL_DIR}/build"
	linux-mod_pkg_setup
}

src_compile() {
	LIBELF="$("${CBUILD}-pkg-config" libelf --libs 2>/dev/null || echo -lelf)"
	BUILD_PARAMS="HOST_LIBELF_LIBS=${LIBELF} CC=${CC}"
	BUILD_PARAMS+=" -C ${KBUILD_OUTPUT} M=${S} LLVM=1 LLVM_IAS=1 CONFIG_ICE=m"
	BUILD_TARGETS="modules"
	linux-mod_src_compile
}

src_install() {
	# Sign the module first.
	MODULE_OBJECT=ice.ko
	cp ${MODULE_OBJECT} ${MODULE_OBJECT}.orig
	"${KBUILD_OUTPUT}"/scripts/sign-file \
		sha256 \
		"${KBUILD_OUTPUT}"/certs/signing_key.pem \
		"${KBUILD_OUTPUT}"/certs/signing_key.x509 \
		${MODULE_OBJECT} || die "signing failed"

	dostrip -x "/lib/modules/${KV_FULL}/${libdir}/${MODULE_OBJECT}"
	linux-mod_src_install

	# Install the firmware. Need to make sure we don't install firmware twice
	# for vanilla and rt, or else the files will collide.
	if [[ ${RT} = "v" ]]; then
		insinto "${FIRMWARE_INSTALL_ROOT}/intel/ice/ddp"
		doins ../ddp/*pkg
		dosym ../ddp/*pkg "${FIRMWARE_INSTALL_ROOT}/intel/ice/ddp/ice.pkg"
	fi
}
