File kernel-asahi.spec of Package kernel-asahi
%define _rcver 6.17
%define _subver 4
%define _asahirel 2
%define patchversion %{_rcver}.%{_subver}
%define _tag_id asahi-%{_rcver}.%{_subver}-%{_asahirel}
Name: kernel-asahi
Summary: The Linux Kernel
Version: %{patchversion}
Release: 1
License: GPL-2.0-only
Group: System Environment/Kernel
Vendor: asahi-opensuse
URL: https://www.kernel.org
Source0: https://github.com/AsahiLinux/linux/archive/refs/tags/%{_tag_id}.tar.gz
Source1: config-asahi
# Compressed patch files from kernel-source repo
Source2: patches.rpmify.tar.bz2
Source3: patches.suse.tar.bz2
Source5: apply-patches
Source6: guards
Source7: series.conf
Requires(pre): suse-kernel-rpm-scriptlets
Requires(post): suse-kernel-rpm-scriptlets
Requires: suse-kernel-rpm-scriptlets
Requires(preun): suse-kernel-rpm-scriptlets
Requires(postun): suse-kernel-rpm-scriptlets
Requires(pre): coreutils awk
Requires(post): suse-module-tools
Requires: suse-module-tools
BuildRequires: bash-sh bc bison coreutils flex libopenssl-devel
BuildRequires: modutils python3-base openssl pesign-obs-integration
BuildRequires: dwarves >= 1.22
BuildRequires: libelf-devel elfutils u-boot-tools
BuildRequires: rust1.86 rust1.86-src rust-bindgen
BuildRequires: gcc clang20 llvm20
BuildRequires: linux-glibc-devel
Provides: %{name} = %{version}-%{_asahirel}
Provides: %{name}-%{version}-%{_asahirel}
Provides: %{name}_%{_target_cpu} = %{version}-%{_asahirel}
Provides: kernel-base = %{version}-%{_asahirel}
Provides: kernel-default = %{version}-%{_asahirel}
Provides: kernel-default-base = %{version}-%{_asahirel}
Provides: %{name}-base = %{version}-%{_asahirel}
Provides: kernel = %{version}-%{_asahirel}
Provides: multiversion(kernel)
Provides: kernel-default
Provides: kernel-default-base
Conflicts: filesystem < 16
Obsoletes: microcode_ctl < 1.18
Requires(post): modutils
BuildRequires: zstd
Requires(post): kmod-zstd
Requires(post): perl-Bootloader >= 0.4.15
Requires(post): dracut
Requires(post): distribution-release
BuildArch: aarch64
%description
The standard kernel for both uniprocessor and multiprocessor systems.
# how the kernel release string (uname -r) should look like
%define source_rel %{release}
%define source_rel %(echo %release | sed -r 's/\\.[0-9]+($|\\.[^.]*[^.0-9][^.]*$)/\\1/')
%define unametag -%{source_rel}-asahi
%define kernelrelease %{patchversion}%{unametag}
%define dtbdir /boot/dtb-%{kernelrelease}
%define usrmerged 1
%define kernel_module_directory /usr/lib/modules
%(chmod +x %{_sourcedir}/apply-patches)
%(chmod +x %{_sourcedir}/guards)
%prep
%setup -n linux-%{_tag_id} -q
# Extract then apply additional patches
tar xvf %{S:2}
tar xvf %{S:3}
%{_sourcedir}/apply-patches %{_sourcedir}/series.conf .
rm -rf patches.suse/ patches.rpmify/
# uname -r value
echo %{unametag} > localversion.05-asahi
cp %{S:1} .config
%build
make olddefconfig prepare rustavailable
make %{?_smp_mflags} ARCH=arm64 vmlinux modules dtbs Image
%install
mkdir -p %{buildroot}/boot
cp arch/arm64/boot/Image %{buildroot}/boot/Image-%{kernelrelease}
make %{?_smp_mflags} ARCH=arm64 INSTALL_MOD_PATH=%{buildroot} modules_install
cp System.map %{buildroot}/boot/System.map-%{kernelrelease}
cp .config %{buildroot}/boot/config-%{kernelrelease}
rm -f %{buildroot}/usr/lib/modules/%{kernelrelease}/build
make INSTALL_PATH=. dtbs_install
install -Dpm 755 -t %{buildroot}%{dtbdir}/apple/ $(find dtbs/ -type f)
%post
# Check if running in OBS
if [ ! -e /.buildenv ]; then
if [ -x /usr/lib/module-init-tools/weak-modules2 ]; then
/usr/lib/module-init-tools/weak-modules2 --add-kernel "%{kernelrelease}"
fi
if [ -x /usr/lib/bootloader/bootloader_entry ]; then
/usr/lib/bootloader/bootloader_entry add "asahi" "%{kernelrelease}" "Image-%{kernelrelease}" "initrd-%{kernelrelease}"
fi
fi
%postun
# Check if running in OBS
if [ ! -e /.buildenv ]; then
if [ -x /usr/lib/module-init-tools/weak-modules2 ]; then
/usr/lib/module-init-tools/weak-modules2 --remove-kernel "%{kernelrelease}"
fi
if [ -x /usr/lib/bootloader/bootloader_entry ]; then
/usr/lib/bootloader/bootloader_entry remove "asahi" "%{kernelrelease}" "Image-%{kernelrelease}" "initrd-%{kernelrelease}"
fi
fi
%files
%defattr (-, root, root)
/boot/config-%{kernelrelease}
/boot/Image-%{kernelrelease}
/boot/System.map-%{kernelrelease}
/usr/lib/modules/%{kernelrelease}
%package -n dtb-apple
Summary: Apple Silicon SOC based arm64 systems
Group: System/Boot
Provides: multiversion(dtb)
Requires(post): coreutils
%description -n dtb-apple
Device Tree files for Apple Silicon SOC based arm64 systems
%post -n dtb-apple
cd /boot
# If /boot/dtb is a symlink, remove it, so that we can replace it.
[ -d dtb ] && [ -L dtb ] && rm -f dtb
# Unless /boot/dtb exists as real directory, create a symlink.
[ -d dtb ] || ln -sf dtb-%{kernelrelease} dtb
%files -n dtb-apple
%defattr(-,root,root)
%ghost /boot/dtb
%dir %{dtbdir}
%dir %{dtbdir}/apple
%{dtbdir}/apple/*.dtb
%changelog