<?xml version="1.0"?>
<package name="linux">
	<description>Linux Kernel</description>
	<releases>
		<release version="20161010" revision="1">
			<deps>
				<dep name="linux" tag="$LINUX_VERSION"/>
				<dep name="linux" tag="firmware"/>
			</deps>
		</release>
		<release version="6.19.7" revision="1" tag="$LINUX_VERSION">
			<settings>
				<keep>yes</keep>
				<variable name="LINUXFIRMWAREVERSION">20260226</variable>
			</settings>
			<deps>
				<dep name="kmod"/>
				<dep name="kbd"/>
				<dep name="flex"/>
				<dep name="gzip"/>
				<dep name="findutils"/>
				<dep name="intel-ucode"/>
				<dep name="klibc"/>
				<dep name="util-linux"/><!-- losetup for initramfs -->
				<dep name="systemd"/>
				<dep name="mdadm"/>
				<dep name="btrfs-progs"/>
				<dep name="autoconf"/>
				<dep name="automake"/>
				<dep name="rustc"/>
				<dep name="rust-bindgen"/>
			</deps>
			<preinst>
				<cmd>BOOT_AVAIL_DISKSPACE=$(df -B 1048576 --output=avail /boot | tail -n 1)</cmd>
				<cmd>[ "$BOOT_AVAIL_DISKSPACE" -ge 100 ]</cmd>
			</preinst>
			<build>
				<script>
					<!-- KERNEL -->
					<archive name="linux-6.19" srcdir="linux-$TAG">
						<patch name="linux-$VERSION"/>

						<!-- do not declare unreleased firmware versions in MODULE_FIRMWARE -->
						<cmd>sed -i -e '/IWL6000_UCODE_API_MAX/s/6$/4/' drivers/net/wireless/intel/iwlwifi/cfg/6000.c</cmd>

						<!-- config -->
						<cmd>sed -i -e 's/EXTRAVERSION =.*/&amp;-paldo$REVISION-$ARCH/' Makefile</cmd>
						<cmd>make mrproper</cmd>
						<install name="config-$VERSION-paldo$REVISION" dest=".config"/>
						<cmd>[ "$ARCH" = "x86_64" ] || echo "# CONFIG_64BIT is not set" &gt;&gt; .config</cmd>
						<cmd>make olddefconfig</cmd>

						<!-- update deps to enable parallel build -->
						<cmd>make syncconfig</cmd>

						<!-- verify that rust is available -->
						<cmd>make rustavailable</cmd>

						<!-- build and install modules but without firmware -->
						<cmd>make</cmd>
						<cmd>make modules_install mod-fw=</cmd>

						<!-- install bzImage -->
						<cmd>cp arch/$LINUX_ARCH/boot/bzImage /boot/linux-$TAG</cmd>
						<cmd>cp System.map /boot/System.map-$TAG</cmd>
						<cmd>cp .config /boot/config-$TAG</cmd>

						<!-- generate modules.dep, needed by modprobe show-depends -->
						<cmd>depmod $TAG</cmd>

						<!-- save headers and build system to build external modules -->
						<cmd>rm -vf /lib/modules/$TAG/{build,source}</cmd>
						<cmd>mkdir -p /lib/modules/$TAG/source</cmd>
						<cmd>ln -svf source /lib/modules/$TAG/build</cmd>
						<cmd>cp --parents $(find  -type f -name "Makefile*" -o -name "Kconfig*") /lib/modules/$TAG/source</cmd>
						<cmd>rm -rf /lib/modules/$TAG/source/{Documentation,scripts,include}</cmd>
						<cmd>cp -a Module.symvers .config scripts /lib/modules/$TAG/source</cmd>
						<cmd>cp -a tools/objtool /lib/modules/$TAG/source/tools/</cmd>
						<cmd>[ ! -d arch/$LINUX_ARCH/scripts ] || cp -a arch/$LINUX_ARCH/scripts /lib/modules/$TAG/source/arch/$LINUX_ARCH</cmd>
						<cmd>[ ! -f arch/$LINUX_ARCH/*lds ] || cp -a arch/$LINUX_ARCH/*lds /lib/modules/$TAG/source/arch/$LINUX_ARCH</cmd>
						<cmd>rm -f /lib/modules/$TAG/source/scripts/*.o</cmd>
						<cmd>rm -f /lib/modules/$TAG/source/scripts/*/*.o</cmd>
						<cmd>cp -a arch/$LINUX_ARCH/include /lib/modules/$TAG/source/arch/$LINUX_ARCH</cmd>
						<cmd>mkdir -p /lib/modules/$TAG/source/include</cmd>
						<cmd>cd include</cmd>
						<cmd>cp -a $(ls -1 | grep -v Kbuild) /lib/modules/$TAG/source/include</cmd>
						<cmd>touch -r /lib/modules/$TAG/source/Makefile /lib/modules/$TAG/source/include/generated/uapi/linux/version.h</cmd>
						<cmd>touch -r /lib/modules/$TAG/source/.config /lib/modules/$TAG/source/include/linux/autoconf.h</cmd>
						<cmd>cp /lib/modules/$TAG/source/.config /lib/modules/$TAG/source/include/config/auto.conf</cmd>
					</archive>
					<!-- END KERNEL -->

					<!-- CPU MICROCODE -->
					<cmd>rm -rf microcode-$TAG</cmd>
					<cmd>mkdir -p microcode-$TAG</cmd>
					<cmd>pushd microcode-$TAG</cmd>

					<cmd>mkdir -p kernel/x86/microcode</cmd>

					<archive name="linux-firmware-$LINUXFIRMWAREVERSION">
						<cmd>cat amd-ucode/microcode_amd*.bin &gt; ../kernel/x86/microcode/AuthenticAMD.bin</cmd>
					</archive>

					<cmd>cat /lib/firmware/intel-ucode/* &gt; kernel/x86/microcode/GenuineIntel.bin</cmd>

					<cmd>find | cpio -o -H newc &gt; /boot/initramfs-$TAG</cmd>
					<cmd>popd</cmd>
					<cmd>rm -rf microcode-$TAG</cmd>
					<!-- END CPU MICROCODE -->

					<!-- INITRAMFS -->
					<cmd>rm -rf initramfs-$TAG</cmd>
					<cmd>mkdir -p initramfs-$TAG</cmd>
					<cmd>pushd initramfs-$TAG</cmd>

					<cmd>mkdir -p initramfs/{dev,etc/udev/rules.d,proc,root,run,usr/{bin,lib/{systemd,udev/rules.d}},sys}</cmd>
					<cmd>ln -svf usr/bin initramfs/bin</cmd>
					<cmd>ln -svf usr/bin initramfs/sbin</cmd>
					<cmd>ln -svf usr/lib initramfs/lib</cmd>

					<!-- klibc -->
					<cmd>install -s /usr/lib/klibc/lib/*.so initramfs/usr/lib</cmd>
					<cmd>install -s -m 0755 /usr/lib/klibc/bin/* initramfs/usr/bin</cmd>

					<!-- glibc -->
					<cmd>[ "$ARCH" = "x86_64" ] || install -v /lib/ld-linux.so.? initramfs/lib</cmd>
					<cmd>[ "$ARCH" != "x86_64" ] || install -v /lib/ld-linux-x86-64.so.2 initramfs/lib</cmd>
					<cmd>install -s -v /lib/libc.so.6 /lib/libpthread.so.0 /lib/librt.so.1 /lib/libdl.so.2 /lib/libm.so.6 initramfs/lib</cmd>

					<!-- libgcc -->
					<cmd>install -v /lib/libgcc_s.so.1 initramfs/lib</cmd>

					<!-- modprobe -->
					<cmd>install -v /usr/lib/libkmod.so.2 initramfs/usr/lib</cmd>
					<cmd>install -v -m 0755 /usr/bin/kmod initramfs/usr/bin</cmd>
					<cmd>ln -sv kmod initramfs/usr/bin/modprobe</cmd>

					<!-- blkid (required by udev) -->
					<cmd>install -v -m 0755 /sbin/blkid initramfs/sbin</cmd>
					<cmd>install -v -m 0755 /lib/libblkid.so.1 initramfs/lib</cmd>
					<cmd>install -v -m 0755 /lib/libuuid.so.1 initramfs/lib</cmd>

					<!-- losetup -->
					<cmd>install -v -m 0755 /sbin/losetup initramfs/sbin</cmd>
					<cmd>install -v -m 0755 /usr/lib/libsmartcols.so.1 initramfs/usr/lib</cmd>

					<!-- libacl (required by udev) -->
					<cmd>install -v -m 0755 /usr/lib/libacl.so.1 initramfs/usr/lib</cmd>
					<cmd>install -v -m 0755 /usr/lib/libattr.so.1 initramfs/usr/lib</cmd>

					<!-- libcap (required by udev) -->
					<cmd>install -v -m 0755 /usr/lib/libcap.so.2 initramfs/usr/lib</cmd>

					<!-- libmount (required by udev) -->
					<cmd>install -v -m 0755 /usr/lib/libmount.so.1 initramfs/usr/lib</cmd>

					<!-- libxcrypt (required by udev) -->
					<cmd>install -v -m 0755 /usr/lib/libcrypt.so.* initramfs/usr/lib</cmd>

					<!-- udev -->
					<cmd>install -v -m 0755 /usr/bin/udevadm initramfs/usr/bin</cmd>
					<cmd>install -v -m 0755 /usr/lib/libudev.so.1 initramfs/usr/lib</cmd>
					<cmd>install -v -m 0755 /usr/lib/systemd/systemd-udevd initramfs/usr/lib/systemd</cmd>
					<cmd>install -v -m 0755 /usr/lib/udev/{ata_id,cdrom_id,scsi_id} initramfs/usr/lib/udev</cmd>
					<cmd>install -v /usr/lib/udev/rules.d/{50-udev-default,60-block,60-cdrom_id,60-persistent-storage,80-drivers}.rules initramfs/usr/lib/udev/rules.d/</cmd>

					<!-- mdadm -->
					<cmd>install -v -m 0755 /sbin/mdadm initramfs/sbin</cmd>
					<cmd>install -v /usr/lib/udev/rules.d/{63-md-raid-arrays,64-md-raid-assembly}.rules initramfs/usr/lib/udev/rules.d/</cmd>

					<!-- openssl (required by cryptsetup) -->
					<cmd>install -v -m 0755 /usr/lib/libcrypto.so.* initramfs/usr/lib</cmd>
					<cmd>install -v -m 0755 /usr/lib/libssl.so.* initramfs/usr/lib</cmd>

					<!-- libdevmapper (required by cryptsetup) -->
					<cmd>install -v -m 0755 /usr/bin/dmsetup initramfs/usr/bin</cmd>
					<cmd>install -v -m 0755 /usr/lib/libdevmapper.so.* initramfs/usr/lib</cmd>
					<cmd>install -v /usr/lib/udev/rules.d/??-dm*.rules initramfs/usr/lib/udev/rules.d/</cmd>
					<!-- DM device state needs to persist in the udev database on transition from initramfs -->
					<text dest="./initramfs/usr/lib/udev/rules.d/11-dm.rules">
SUBSYSTEM!="block", GOTO="dm_end"
KERNEL!="dm-[0-9]*", GOTO="dm_end"
ACTION!="add|change", GOTO="dm_end"
OPTIONS+="db_persist"
LABEL="dm_end"
</text>

					<!-- systemd-run is not available in initramfs, run commands as foreground tasks -->
					<cmd>sed -i -e 's@/usr/bin/systemd-run .* /@/@' initramfs/usr/lib/udev/rules.d/*.rules</cmd>

					<!-- json-c (required by cryptsetup) -->
					<cmd>install -v -m 0755 /usr/lib/libjson-c.so.? initramfs/usr/lib</cmd>

					<!-- popt (required by cryptsetup) -->
					<cmd>install -v -m 0755 /usr/lib/libpopt.so.0 initramfs/usr/lib</cmd>

					<!-- cryptsetup and integritysetup -->
					<cmd>install -v -m 0755 /usr/bin/{crypt,integrity}setup initramfs/usr/bin</cmd>
					<cmd>install -v -m 0755 /usr/lib/libcryptsetup.so.?? initramfs/usr/lib</cmd>

					<!-- btrfs -->
					<cmd>install -v -m 0755 /usr/lib/lib{z.so.1,lzo2.so.2,zstd.so.1} initramfs/usr/lib</cmd>
					<cmd>install -v -m 0755 /usr/bin/btrfs initramfs/usr/bin</cmd>
					<cmd>install -v /usr/lib/udev/rules.d/??-btrfs*.rules initramfs/usr/lib/udev/rules.d/</cmd>

					<install name="initramfs-init-20201016" dest="initramfs/init" mode="0755"/>

					<cmd>pushd initramfs</cmd>

					<!-- copy modules for block devices, file systems, and keyboards -->
					<cmd>echo 9p 9pnet_virtio btrfs cdrom ext4 isofs overlay squashfs udf vfat virtio_blk virtiofs virtio_net virtio_pci xfs &gt; modules</cmd>
					<cmd>find /lib/modules/$TAG/kernel/{drivers/{ata,hid,md,message/fusion,net/ethernet/{intel,realtek},net/phy/realtek,scsi,usb/storage},fs/nls} -name "*.ko" | xargs -n 1 -I {} basename {} .ko &gt;&gt; modules</cmd>
					<cmd>cat modules | xargs -n 1 modprobe -S $TAG --ignore-install --show-depends | cut -d ' ' -f 2 | sort -u | cpio -p --make-directories --verbose .</cmd>
					<cmd>rm -f modules</cmd>
					<cmd>depmod -b $PWD $TAG</cmd>

					<!-- copy firmware needed by the copied modules -->
					<archive name="linux-firmware-$LINUXFIRMWAREVERSION">
						<!-- create symlinks listed in WHENCE file -->
						<cmd>grep -E '^Link:' WHENCE | sed -e's/^Link: *//g' -e's/-> //g' | while read f d; do test -L "$f" || ln -sf "$d" "$f"; done</cmd>

						<cmd check="no">find .. -name "*.ko" | xargs modinfo -F firmware | sort -u | cpio -p --link --make-directories --verbose ../lib/firmware</cmd>
					</archive>

					<cmd>find | cpio -o -H newc | gzip -9 &gt;&gt; /boot/initramfs-$TAG</cmd>
					<cmd>popd</cmd>
					<cmd>popd</cmd>
					<cmd>rm -rf initramfs-$TAG</cmd>
					<!-- END INITRAMFS -->
				</script>
			</build>
			<postinst>
				<cmd>mkdir -p /boot/loader/entries</cmd>

				<!-- create /etc/kernel/cmdline if it doesn't exist yet -->
				<cmd>if [ ! -e /etc/kernel/cmdline ] ; then
	CMDLINE="root=@ROOTDEV@"
	[ ! -e /etc/default/grub ] || . /etc/default/grub
	echo "$CMDLINE" &gt; /etc/kernel/cmdline
	unset CMDLINE GRUBDEV BOOTDIR
	[ ! -e /etc/default/grub ] || sed -i -e '/^CMDLINE=/d' /etc/default/grub
fi</cmd>

				<cmd>CMDLINE=`head -n 1 /etc/kernel/cmdline`</cmd>

				<text dest="/boot/loader/entries/$TAG.conf" environment="expand">
title paldo $BRANCH (linux $TAG)
options $CMDLINE
linux /linux-$TAG
initrd /initramfs-$TAG
</text>

				<cmd>if [ -f /etc/kernel/initrd.local ] ; then
	echo "initrd $(head -n 1 /etc/kernel/initrd.local)" >> /boot/loader/entries/$TAG.conf
fi</cmd>

				<!-- support boot counting -->
				<cmd check="no">if [ -f /etc/kernel/tries ] ; then</cmd>
				<cmd>read -r TRIES &lt; /etc/kernel/tries</cmd>
				<cmd>! [[ "$TRIES" =~ ^[0-9]+$ ]] || mv /boot/loader/entries/$TAG{,+$TRIES}.conf</cmd>
				<cmd check="no">fi</cmd>

				<!-- GRUB entry only for upgrades of old installations -->
				<cmd check="no">if [ -e /boot/grub/menu.lst ] ; then</cmd>
				<cmd>BOOTDIR=/boot</cmd>
				<cmd>[ ! -e /etc/default/grub ] || . /etc/default/grub</cmd>
				<text dest="/boot/grub/menu.lst" append="yes" environment="expand">
title paldo $BRANCH (linux $TAG)
kernel $GRUBDEV$BOOTDIR/linux-$TAG $CMDLINE
initrd $GRUBDEV$BOOTDIR/initramfs-$TAG
savedefault
</text>
				<cmd>[ ! -x /sbin/grub-set-default ] || grub-set-default $(($(grep ^title /boot/grub/menu.lst | wc -l) - 1))</cmd>
				<cmd check="no">fi</cmd>
			</postinst>
			<prerm>
				<cmd>rm -vf /boot/loader/entries/$TAG.conf</cmd>
				<cmd>rm -vf /boot/loader/entries/$TAG+*.conf</cmd>
				<cmd>[ ! -e /boot/grub/menu.lst ] || sed -i -e '/^title paldo $BRANCH (linux $TAG)/,/^savedefault/d' /boot/grub/menu.lst</cmd>
			</prerm>
		</release>
		<release version="20260226" revision="1" tag="firmware">
			<deps>
				<dep name="cpio"/>
				<dep name="findutils"/>
				<dep name="kmod"/>
				<dep name="linux" tag="$LINUX_VERSION"/>
			</deps>
			<build>
				<script>
					<archive name="linux-firmware-$VERSION">
						<cmd>install -dv $DOCDIR</cmd>
						<cmd>install -v GPL* LICENSE* WHENCE $DOCDIR</cmd>

						<cmd>install -dv /lib/firmware</cmd>

						<!-- create symlinks listed in WHENCE file -->
						<cmd>grep -E '^Link:' WHENCE | sed -e's/^Link: *//g' -e's/-> //g' | while read f d; do mkdir -p "`dirname "$f"`" &amp;&amp; test -L "$f" || ln -svf "$d" "$f"; done</cmd>

						<!-- install all firmware files required by installed kernel modules -->
						<cmd check="no">find /lib/modules/$LINUX_VERSION/kernel -name "*.ko" | xargs modinfo -F firmware | sort -u | cpio -p --link --make-directories --verbose --unconditional /lib/firmware</cmd>

						<!-- install firmware files required by Intel 22000 or AX210
						     (RF drivers declare higher API version than what the base supports)  -->
						<cmd>cp -ndv iwlwifi*-{77,89}.ucode /lib/firmware/</cmd>

						<!-- install firmware files for Intel Bluetooth (not declared in driver) -->
						<cmd>install -dv /lib/firmware/intel</cmd>
						<cmd>install -v -m 0644 intel/ibt-*.{ddc,sfi,bseq} /lib/firmware/intel/</cmd>

						<!-- install firmware files for ath11k (not declared in driver) -->
						<cmd>cp -dRv ath11k /lib/firmware/</cmd>

						<!-- install firmware files for Qualcomm Atheros Bluetooth (not declared in driver) -->
						<cmd>cp -dRv qca /lib/firmware/</cmd>

						<!-- install microcode for AMD CPUs -->
						<cmd>install -dv /lib/firmware/amd-ucode</cmd>
						<cmd>install -v -m 0644 amd-ucode/*.bin /lib/firmware/amd-ucode/</cmd>

						<!-- install missing symlink targets -->
						<cmd>install -dv /lib/firmware/intel/iwlwifi</cmd>
						<cmd check="no">find /lib/firmware/ -xtype l | xargs readlink -f | sed -e 's /usr/lib/firmware/  ' | sort -u | cpio -p --make-directories --verbose --unconditional /lib/firmware</cmd>
					</archive>
				</script>
			</build>
		</release>
	</releases>
</package>
