# Maintainer: Milan P. Stanić _flavor=edge pkgname=linux-${_flavor} # NOTE: this kernel is intended for testing # please resist urge to upgrade it blindly pkgver=6.2.2 case $pkgver in *.*.*) _kernver=${pkgver%.*};; *.*) _kernver=$pkgver;; esac pkgrel=0 pkgdesc="Linux latest stable kernel" url="https://www.kernel.org" depends="initramfs-generator" _depends_dev="perl gmp-dev elfutils-dev bash flex bison" makedepends="$_depends_dev sed installkernel bc linux-headers linux-firmware-any openssl-dev diffutils findutils xz" options="!strip !check" # no tests _config=${config:-config-edge.${CARCH}} install= subpackages="$pkgname-dev:_dev:$CBUILD_ARCH $pkgname-doc:_doc" source="https://cdn.kernel.org/pub/linux/kernel/v${pkgver%%.*}.x/linux-$_kernver.tar.xz" case $pkgver in *.*.0) source="$source";; *.*.*) source="$source https://cdn.kernel.org/pub/linux/kernel/v${pkgver%%.*}.x/patch-$pkgver.xz" ;; esac source="$source config-edge.aarch64 config-edge.armv7 config-edge.x86_64 config-edge.riscv64 " builddir="$srcdir/linux-${_kernver}" arch="armv7 aarch64 x86_64 riscv64" license="GPL-2.0" _flavors= for _i in $source; do case $_i in config-*.$CARCH) _f=${_i%.$CARCH} _f=${_f#config-} _flavors="$_flavors ${_f}" if [ "linux-$_f" != "$pkgname" ]; then subpackages="$subpackages linux-${_f}::$CBUILD_ARCH linux-${_f}-dev:_dev:$CBUILD_ARCH" fi ;; esac done _carch=${CARCH} case "$_carch" in aarch64*) _carch="arm64" ;; arm*) _carch="arm" ;; riscv64) _carch="riscv" ;; esac prepare() { local _patch_failed= cd $builddir case $pkgver in *.*.0);; *) msg "Applying patch-$pkgver.xz" unxz -c < "$srcdir"/patch-$pkgver.xz | patch -p1 -N ;; esac # first apply patches in specified order for i in $source; do case $i in *.patch) msg "Applying $i..." if ! patch -s -p1 -N -i "$srcdir"/$i; then echo $i >>failed _patch_failed=1 fi ;; esac done if ! [ -z "$_patch_failed" ]; then error "The following patches failed:" cat failed return 1 fi # remove localversion from patch if any rm -f localversion* oldconfig } oldconfig() { for i in $_flavors; do local _config=config-$i.${CARCH} mkdir -p "$builddir" echo "-$pkgrel-$i" > "$builddir"/localversion-alpine \ || return 1 cp "$srcdir"/$_config "$builddir"/.config make -C $builddir \ O="$builddir" \ ARCH="$_carch" \ listnewconfig oldconfig done } build() { unset LDFLAGS export KBUILD_BUILD_TIMESTAMP="$(date -Ru${SOURCE_DATE_EPOCH:+d @$SOURCE_DATE_EPOCH})" for i in $_flavors; do cd "$builddir" make ARCH="$_carch" DTC_FLAGS="-@" CC="${CC:-gcc}" \ KBUILD_BUILD_VERSION="$((pkgrel + 1 ))-Alpine" done } _package() { local _buildflavor="$1" _outdir="$2" local _abi_release=${pkgver}-${pkgrel}-${_buildflavor} export KBUILD_BUILD_TIMESTAMP="$(date -Ru${SOURCE_DATE_EPOCH:+d @$SOURCE_DATE_EPOCH})" cd "$builddir" # modules_install seems to regenerate a defect Modules.symvers on s390x. Work # around it by backing it up and restore it after modules_install cp Module.symvers Module.symvers.backup mkdir -p "$_outdir"/boot "$_outdir"/lib/modules local _install case "$CARCH" in arm*|aarch64) _install="zinstall dtbs_install";; riscv64) _install="install dtbs_install";; *) _install=install;; esac make -j1 modules_install $_install \ ARCH="$_carch" \ INSTALL_MOD_PATH="$_outdir" \ INSTALL_PATH="$_outdir"/boot \ INSTALL_DTBS_PATH="$_outdir/boot/dtbs-$_buildflavor" cp Module.symvers.backup Module.symvers rm -f "$_outdir"/lib/modules/${_abi_release}/build \ "$_outdir"/lib/modules/${_abi_release}/source rm -rf "$_outdir"/lib/firmware install -D -m644 include/config/kernel.release \ "$_outdir"/usr/share/kernel/$_buildflavor/kernel.release } # main flavor installs in $pkgdir package() { depends="$depends linux-firmware-any" _package edge "$pkgdir" } _dev() { local _flavor=$(echo $subpkgname | sed -E 's/(^linux-|-dev$)//g') local _abi_release=${pkgver}-${pkgrel}-$_flavor # copy the only the parts that we really need for build 3rd party # kernel modules and install those as /usr/src/linux-headers, # simlar to what ubuntu does # # this way you dont need to install the 300-400 kernel sources to # build a tiny kernel module # pkgdesc="Headers and script for third party modules for $_flavor kernel" depends="$_depends_dev" local dir="$subpkgdir"/usr/src/linux-headers-${_abi_release} export KBUILD_BUILD_TIMESTAMP="$(date -Ru${SOURCE_DATE_EPOCH:+d @$SOURCE_DATE_EPOCH})" # first we import config, run prepare to set up for building # external modules, and create the scripts mkdir -p "$dir" cp "$srcdir"/config-$_flavor.${CARCH} "$dir"/.config echo "-$pkgrel-$_flavor" > "$dir"/localversion-alpine cd $builddir echo "Installing headers..." case "$_carch" in x86_64) _carch="x86" install -Dt "${dir}/tools/objtool" $builddir/tools/objtool/objtool ;; esac cp -t "$dir" -a $builddir/include install -Dt "${dir}" -m644 $builddir/Makefile install -Dt "${dir}" -m644 $builddir/Module.symvers install -Dt "${dir}" -m644 $builddir/System.map cp -t "$dir" -a $builddir/scripts install -Dt "${dir}/arch/${_carch}" -m644 $builddir/arch/${_carch}/Makefile install -Dt "${dir}/arch/${_carch}/kernel" -m644 $builddir/arch/${_carch}/kernel/asm-offsets.s cp -t "${dir}/arch/${_carch}" -a $builddir/arch/${_carch}/include install -Dt "$dir/drivers/md" -m644 drivers/md/*.h install -Dt "$dir/net/mac80211" -m644 net/mac80211/*.h # https://bugs.archlinux.org/task/13146 install -Dt "$dir/drivers/media/i2c" -m644 drivers/media/i2c/msp3400-driver.h # https://bugs.archlinux.org/task/20402 install -Dt "$dir/drivers/media/usb/dvb-usb" -m644 drivers/media/usb/dvb-usb/*.h install -Dt "$dir/drivers/media/dvb-frontends" -m644 drivers/media/dvb-frontends/*.h install -Dt "$dir/drivers/media/tuners" -m644 drivers/media/tuners/*.h # https://bugs.archlinux.org/task/71392 install -Dt "$dir/drivers/iio/common/hid-sensors" -m644 drivers/iio/common/hid-sensors/*.h echo "Installing KConfig files..." find . -name 'Kconfig*' -exec install -Dm644 {} "$builddir/{}" \; echo "Removing unneeded architectures..." local arch for arch in "$dir"/arch/*/; do case $(basename "$arch") in $_carch) continue ;; esac echo "Removing $(basename "$arch")" rm -r "$arch" done echo "Removing broken symlinks..." find -L "$builddir" -type l -printf 'Removing %P\n' -delete echo "Removing loose objects..." find "$builddir" -type f -name '*.o' -printf 'Removing %P\n' -delete echo "Stripping build tools..." local file while read -rd '' file; do case "$(file -bi "$file")" in application/x-sharedlib\;*) # Libraries (.so) strip -v $STRIP_SHARED "$file" ;; application/x-archive\;*) # Libraries (.a) strip -v $STRIP_STATIC "$file" ;; application/x-executable\;*) # Binaries strip -v $STRIP_BINARIES "$file" ;; application/x-pie-executable\;*) # Relocatable binaries strip -v $STRIP_SHARED "$file" ;; esac done < <(find "$builddir" -type f -perm -u+x ! -name vmlinux -print0) echo "Stripping vmlinux..." strip -v $STRIP_STATIC "$builddir/vmlinux" echo "Adding symlink..." mkdir -p "$subpkgdir"/lib/modules/${_abi_release} ln -sf /usr/src/linux-headers-${_abi_release} \ "$subpkgdir"/lib/modules/${_abi_release}/build } _doc() { pkgdesc="documentation for $_flavor kernel" mkdir -p "$subpkgdir"/usr/share/doc/linux-edge-doc cp -r "$builddir"/Documentation \ "$subpkgdir"/usr/share/doc/linux-edge-doc/ } sha512sums=" a01bee0b968b95183934fe3504516be7ef5811944a061f5aed05ecebaa27b5eb64e33232fd0a8dd622b3c8743bfe462ef7e464d381734d111a0ad6a6d9f66ddd linux-6.2.tar.xz 0b6c6786bf7867d521f26e72f2b5cf9f968e88df84cb4cbf3786ee0f975e97681764a58fe8acfc9090fea68e80799389de66c8251f10cf4edb2c36559cd991dd patch-6.2.2.xz 88899848e102eb8cad08419e3d28955bb27b472f07051d47505299866af38b6a6df37a846a8a63aee3e8ab202993ce2d7e8db72f18bdc1223769c3ae26dde73e config-edge.aarch64 354d701211e1e08dcf8d39042f7471e378af7550627242266369bd0b0f7477cd4e9264c0380639eb3e0716036612e74b0cf0143c8a3ec8851a56a9e6dd86c5ec config-edge.armv7 bbc538427e2feb86b0a37f49107439877d86b519cde241b2407d2394a1f40e8418b41e430cba11653f6106f59c3b5e4ac1cca8bfcd92ed20c04c00a5800f7add config-edge.x86_64 2452725d93986c31d12171cbd36ddb6057985db15c3ab30fd3f9894ac7d38e52c8cbd61cf3000ea2e5d6975e54fb533c31e1596e4cf2a9289560c965110155f3 config-edge.riscv64 "