%undefine _include_frame_pointers %global debug_package %{nil} %bcond lto 1 %bcond modprobedb 0 # TODO enable secrue %bcond secure 0 # Versions ## Check for updates on https://cdn.kernel.org/pub/linux/kernel/v6.x/ %global _bigkver 6.x %global _basekver 6.19 %global _stablekver 3 ## Check for updates on https://github.com/NVIDIA/open-gpu-kernel-modules %global _nv_ver 590.48.01 ## Check for updates on https://evilpiepirate.org/bcachefs-tools %global _bch_ver 1.36.1 # Macros %global _distro_name chlor %global _pkg_desc My custom kernel. Based on cachyos pacthes. %define _rpmver %{version}-%{release} %define _kver %{_rpmver}.%{_arch} %define _nv_pkg open-gpu-kernel-modules-%{_nv_ver} %define _kernel_dir /lib/modules/%{_kver} %define _devel_dir %{_usrsrc}/kernels/%{_kver} %if %{_stablekver} == 0 %define _tarkver %{_basekver} %else %define _tarkver %{version} %endif %if %{with lto} %define _lto_args CC=clang CXX=clang++ LD=ld.lld LLVM=1 LLVM_IAS=1 %endif %define _module_args KERNEL_UNAME=%{_kver} SYSSRC=%{_builddir}/linux-%{_tarkver} SYSOUT=%{_builddir}/linux-%{_tarkver} # Options %define _x86_64_lvl 4 Name: kernel Summary: %{_pkg_desc} Version: %{_basekver}.%{_stablekver} Release: %{_distro_name}%{?dist} License: GPL-2.0-only ExclusiveArch: x86_64 Requires: kernel-core = %{_kver} Requires: kernel-modules = %{_kver} Provides: kernel Provides: installonlypkg(kernel) BuildRequires: bc BuildRequires: bison BuildRequires: dwarves BuildRequires: elfutils-devel BuildRequires: flex BuildRequires: gcc BuildRequires: gettext-devel BuildRequires: kmod BuildRequires: make BuildRequires: sed BuildRequires: zstd BuildRequires: rsync BuildRequires: openssl BuildRequires: openssl-devel BuildRequires: perl-Carp BuildRequires: perl-devel BuildRequires: perl-generators BuildRequires: perl-interpreter BuildRequires: python3-devel BuildRequires: python3-pyyaml BuildRequires: python-srpm-macros BuildRequires: gcc-c++ %if %{with lto} BuildRequires: clang BuildRequires: lld BuildRequires: llvm %endif # Kernel Source0: https://cdn.kernel.org/pub/linux/kernel/v%{_bigkver}/linux-%{_tarkver}.tar.xz Patch0: https://raw.githubusercontent.com/CachyOS/kernel-patches/refs/heads/master/%{_basekver}/all/0001-cachyos-base-all.patch Patch1: https://raw.githubusercontent.com/CachyOS/kernel-patches/refs/heads/master/%{_basekver}/sched/0001-bore-cachy.patch Source1: config %if %{with lto} Patch9: https://raw.githubusercontent.com/CachyOS/kernel-patches/refs/heads/master/%{_basekver}/misc/dkms-clang.patch %endif %if %{with modprobedb} Source9: https://raw.githubusercontent.com/Frogging-Family/linux-tkg/master/linux-tkg-config/%{_basekver}/minimal-modprobed.db %endif Source10: https://evilpiepirate.org/bcachefs-tools/bcachefs-tools-%{_bch_ver}.tar.zst Patch10: https://gist.githubusercontent.com/chlorodose/ca5f30bef576da5dd425ad540d942788/raw/16aac3ace0e1e7a3c3c4f20ff973a6f0ca1d08a1/0001-Bcachefs-add-selinux-support.patch Source20: https://github.com/NVIDIA/open-gpu-kernel-modules/archive/refs/tags/%{_nv_ver}.tar.gz Patch20: https://raw.githubusercontent.com/CachyOS/kernel-patches/refs/heads/master/%{_basekver}/misc/nvidia/0001-Enable-atomic-kernel-modesetting-by-default.patch Patch22: https://raw.githubusercontent.com/CachyOS/kernel-patches/refs/heads/master/%{_basekver}/misc/nvidia/0003-Fix-compile-for-6.19.patch Source100: detect-x86_64-version.c %description The meta package for kernel. %prep %setup -q -b 20 -n linux-%{_tarkver} rm -rf fs/bcachefs mkdir -p fs/bcachefs tar -C fs/bcachefs --zstd --strip-components=2 -xf "%{SOURCE10}" "bcachefs-tools-%{_bch_ver}/libbcachefs" if ! grep -q "fs/bcachefs/Kconfig" "fs/Kconfig"; then sed -i '/source "fs\/btrfs\/Kconfig"/a source "fs/bcachefs/Kconfig"' 'fs/Kconfig' fi if ! grep -q "bcachefs/" "fs/Makefile"; then sed -i '/obj-$(CONFIG_BTRFS_FS).*+= btrfs\//a obj-$(CONFIG_BCACHEFS_FS) += bcachefs/' 'fs/Makefile' fi %autopatch -p1 -m0 -M10 pushd "%{_builddir}/open-gpu-kernel-modules-%{_nv_ver}" %patch -p1 22 pushd kernel-open %patch -p1 20 popd popd cp "%{SOURCE1}" .config %{build_cc} %{build_cflags} %{SOURCE100} -o detect-x86_64-version X86_64_VERSION="$(./detect-x86_64-version)" rm detect-x86_64-version echo "Using x86_64_${X86_64_VERSION}" >&2 scripts/config --set-val X86_64_VERSION "${X86_64_VERSION}" %if %{with modprobedb} %make_build LSMOD=%{SOURCE2} localmodconfig %endif %if %{with lto} scripts/config -e LTO_CLANG_THIN %endif make olddefconfig %build echo "----------------Building Kernel----------------" >&2 %make_build EXTRAVERSION=-%{release}.%{_arch} zstd -19 symvers.zst echo "----------------Building NVIDIA----------------" >&2 pushd "%{_builddir}/open-gpu-kernel-modules-%{_nv_ver}" CFLAGS= CXXFLAGS= LDFLAGS= %make_build %{_module_args} IGNORE_CC_MISMATCH=yes modules popd %install echo "Installing kernel..." >&2 install -Dm644 "$(%make_build -s image_name)" "%{buildroot}%{_kernel_dir}/vmlinuz" install -Dm 644 .config %{buildroot}%{_kernel_dir}/config install -Dm 644 symvers.zst %{buildroot}%{_kernel_dir} install -Dm 600 System.map %{buildroot}%{_kernel_dir}/System.map echo "Installing modules..." >&2 %make_build "INSTALL_MOD_PATH=%{buildroot}" INSTALL_MOD_STRIP=1 DEPMOD=/doesnt/exist ZSTD_CLEVEL=19 modules_install rm "%{buildroot}%{_kernel_dir}/build" pushd "%{_builddir}/open-gpu-kernel-modules-%{_nv_ver}" install -Dt %{buildroot}%{_kernel_dir}/nvidia -m644 kernel-open/*.ko find %{buildroot}%{_kernel_dir}/nvidia -name '*.ko' -exec zstd --rm -19 {} \; popd # TODO echo "Installing headers..." >&2 # %make_build "INSTALL_HDR_PATH=%{buildroot}%{_prefix}" headers_install %package core Summary: %{_pkg_desc} AutoReq: no Provides: kernel = %{_rpmver} Provides: kernel-core = %{_rpmver} Provides: installonlypkg(kernel) Requires(pre): coreutils Requires(pre): systemd Requires(preun):systemd Recommends: linux-firmware Recommends: dracut Recommends: /usr/bin/kernel-install %description core The kernel package contains the Linux kernel (vmlinuz), the core of any Linux operating system. The kernel handles the basic functions of the operating system: memory allocation, process allocation, device input and output, etc. %post core mkdir -p %{_localstatedir}/lib/rpm-state/%{name} touch %{_localstatedir}/lib/rpm-state/%{name}/installing_core_%{_kver} %posttrans core rm -f %{_localstatedir}/lib/rpm-state/%{name}/installing_core_%{_kver} if command -v kernel-install &>/dev/null; then kernel-install add %{_kver} %{_kernel_dir}/vmlinuz fi %preun core if command -v kernel-install &>/dev/null; then kernel-install remove %{_kver} fi if [ -x /usr/sbin/weak-modules ]; then /usr/sbin/weak-modules --remove-kernel %{_kver} fi %files core %license COPYING %dir %{_kernel_dir} %{_kernel_dir}/vmlinuz %{_kernel_dir}/modules.builtin %{_kernel_dir}/modules.builtin.modinfo %{_kernel_dir}/symvers.zst %{_kernel_dir}/config %{_kernel_dir}/System.map %package modules Summary: Kernel modules package for %{name} Requires(post): kmod Provides: kernel-modules = %{_rpmver} Provides: kernel-modules-core = %{_rpmver} Provides: kernel-modules-extra = %{_rpmver} Provides: installonlypkg(kernel-module) %description modules This package provides kernel modules for the kernel package. %post modules if [ ! -f %{_localstatedir}/lib/rpm-state/%{name}/installing_core_%{_kver} ]; then mkdir -p %{_localstatedir}/lib/rpm-state/%{name} touch %{_localstatedir}/lib/rpm-state/%{name}/need_to_run_dracut_%{_kver} fi /sbin/depmod -a "%{_kver}" %posttrans modules rm -f %{_localstatedir}/lib/rpm-state/%{name}/need_to_run_dracut_%{_kver} /sbin/depmod -a %{_kver} if [ ! -e /run/ostree-booted ]; then if [ -f %{_localstatedir}/lib/rpm-state/%{name}/need_to_run_dracut_%{_kver} ]; then echo "Running: dracut -f --kver %{_kver}" dracut -f --kver "%{_kver}" || exit $? fi fi %files modules %dir %{_kernel_dir} %ghost %attr(0644, root, root) %{_kernel_dir}/modules.alias %ghost %attr(0644, root, root) %{_kernel_dir}/modules.alias.bin %ghost %attr(0644, root, root) %{_kernel_dir}/modules.builtin.alias.bin %ghost %attr(0644, root, root) %{_kernel_dir}/modules.builtin.bin %ghost %attr(0644, root, root) %{_kernel_dir}/modules.dep %ghost %attr(0644, root, root) %{_kernel_dir}/modules.dep.bin %ghost %attr(0644, root, root) %{_kernel_dir}/modules.devname %ghost %attr(0644, root, root) %{_kernel_dir}/modules.softdep %ghost %attr(0644, root, root) %{_kernel_dir}/modules.symbols %ghost %attr(0644, root, root) %{_kernel_dir}/modules.symbols.bin %ghost %attr(0644, root, root) %{_kernel_dir}/modules.weakdep %{_kernel_dir}/modules.order %{_kernel_dir}/kernel %{_kernel_dir}/nvidia %changelog %autochangelog