url="https://www.kernel.org"
description="The 5.10 longterm support Linux Kernel version"

packager="Tnut <tnut@nutyx.org>"

makedepends=(bison flex perl)
run=(nutyx kmod busybox)

PKGMK_IGNORE_UNPACK="yes"
PKGMK_NO_STRIP="yes"
PKGMK_GROUPS=(devel doc)

name=kernel-510
version=5.10.169

alias=(linux-5.10)
INITRD="initrd-${name/*-/}"
KERNEL=${name}

_version=${version:0:4}

# Linux patch version
[ "${_version}" != "${version}" ] && patchname="patch-$version.xz"

## Download all the sources
#

source=(fix_virtualbox.patch
	$url/pub/linux/kernel/v5.x/linux-${_version}.tar.xz config_64)

[ -z $patchname ] || source+=" $url/pub/linux/kernel/v5.x/$patchname"
## Time to build everything
#

build(){

bsdtar -p -o -C $SRC -xf linux-${_version}.tar.xz

cd linux-${_version}

if [ -f $SRC/patch-$version.xz ]; then
	xz -d -c  $SRC/patch-$version.xz | patch -Np1
fi

patch -Np1 -i ../fix_virtualbox.patch

make mrproper
cp $SRC/config_64 ./.config

# make menuconfig

make

cp .config $SRC/config_64

## Modules
#
# Kernel modules
cd $SRC/linux-${_version}
make INSTALL_MOD_PATH=$PKG modules_install

KERNEL_VERSION="$(basename $PKG/lib/modules/*)"

# depmod needed
depmod -b $PKG -a ${KERNEL_VERSION}

# Install config and kernel files
cd $SRC/linux-${_version}

mkdir -p $PKG/boot

cp  System.map \
$PKG/boot/System_64.map-${KERNEL_VERSION}
cp  .config    \
$PKG/boot/config_64-${KERNEL_VERSION}
cp  arch/x86_64/boot/bzImage \
$PKG/boot/$KERNEL

# Reorgenise the sources
cd $PKG/lib/modules/${KERNEL_VERSION}/

mkdir -p $PKG/usr/src

mv $SRC/linux-${_version} $PKG/usr/src/
rm {build,source}

ln -sv /usr/src/linux-${_version} build
ln -sv /usr/src/linux-${_version} source

mkdir $SRC/linux-${_version}
mv $PKG/usr/src/linux-${_version}/Documentation \
$SRC/linux-${_version}

# Firmware are in linux-firmware
rm -rf $PKG/lib/firmware

# post-install autogen
echo "if [ -f boot/$INITRD ]; then
    mkinitramfs ${KERNEL_VERSION}
    rm boot/$INITRD
    mv boot/initrd-${KERNEL_VERSION} boot/$INITRD
fi" > $PKGMK_ROOT/$name.post-install

}
devel() {

cd $PKG
rm -r usr/src/linux-${_version}/{block,fs,ipc,init,drivers,mm,net,samples,security,sound,virt}
find  usr/src/linux-${_version}/ -type f -name "*.o"  \
-o -name "*.ko" -o -name "*.cmd" -o -name "*.gcno" -delete

mv usr/src/linux-${_version}/arch/x86 \
usr/src/linux-${_version}/arch/.x86
rm -rf usr/src/linux-${_version}/arch/*
mv usr/src/linux-${_version}/arch/.x86 \
usr/src/linux-${_version}/arch/x86

bsdtar -cf \
$PKGMK_PACKAGE_DIR/$name.devel${PKGMK_BUILDVER}any.${PKGMK_PACKAGE_EXT} \
usr/src/linux-${_version}

rm -r usr
}

doc() {

cd $PKG
mkdir -p usr/share/doc
mv $SRC/linux-${_version}/Documentation \
usr/share/doc/linux-$version

bsdtar -cf \
$PKGMK_PACKAGE_DIR/$name.doc${PKGMK_BUILDVER}any.${PKGMK_PACKAGE_EXT} \
usr/share/doc/linux-$version

rm -r usr
}
