blob: ca0ece325d80e5ac599dcab1413cdc990f8670cc [file] [log] [blame]
#
# 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="Mellanox NNT-Linux-driver (NVIDIA® networking tools driver)"
HOMEPAGE="https://github.com/Mellanox/NNT-Linux-driver"
REPO="NNT-Linux-driver"
MY_TAR="Mellanox-${REPO}-eff51062532f3bf356027deea484f2739567f737.tar.xz"
SRC_URI="gs://chromeos-localmirror/distfiles/${MY_TAR} -> ${PN}-${PV}.tar.xz"
LICENSE="BSD-Google"
SLOT="vanilla"
case "${RT}" in
r)
SLOT="rt"
;;
*)
;;
esac
KEYWORDS="*"
IUSE=""
RESTRICT="mirror"
DEPEND="virtual/linux-sources"
RDEPEND="${DEPEND}"
SRC_DIR="${WORKDIR}/${REPO}/mst_backward_compatibility"
S="${SRC_DIR}"
libdir="kernel/drivers/pci"
MODULES="mst_pci mst_pciconf"
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() {
# This abuses the linux-mod eclass, mostly because the kernel config does
# not live in the KERNEL_DIR.
for i in ${MODULES}; do
S="${SRC_DIR}/$i"
MODULE_NAMES="$i(${libdir}:${S})"
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"
BUILD_TARGETS="modules"
linux-mod_src_compile
done
}
src_install() {
# Sign the module first.
for i in ${MODULES}; do
S="${SRC_DIR}/$i"
cd ${S}
MODULE_NAMES="$i(${libdir}:${S})"
MODULE_OBJECT="$i.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"
# Do not strip the module signature.
dostrip -x "/lib/modules/${KV_FULL}/${libdir}/${MODULE_OBJECT}"
linux-mod_src_install
done
# Need to make sure we don't install file twice
# for vanilla and rt, or else the files will collide.
if [[ ${RT} = "v" ]]; then
insinto /etc/modprobe.d
doins ${FILESDIR}/mellanox-nnt-linux-driver.conf
fi
}