212 lines
6.9 KiB
PHP
212 lines
6.9 KiB
PHP
%global KVERREL %{version}-%{release}.%{_target_cpu}
|
|
|
|
# disable the '-debug{info,source}' pkgs
|
|
%define debug_package %{nil}
|
|
# also disable packaging files in '/usr/lib/.build-id/'
|
|
%define _build_id_links none
|
|
|
|
Name: kernel-%{kname}-tfg
|
|
Summary: The Linux Kernel
|
|
License: GPL
|
|
URL: https://www.kernel.org
|
|
Provides: kernel-%{kname}-tfg = %{KVERREL}
|
|
BuildRequires: bc binutils bison dwarves
|
|
BuildRequires: elfutils-libelf-devel flex
|
|
BuildRequires: make openssl openssl-devel perl python3 rsync
|
|
BuildRequires: clang lld llvm llvm-devel
|
|
BuildRequires: opencsd-devel
|
|
BuildRequires: kmod
|
|
BuildRequires: /usr/bin/pathfix.py
|
|
Requires: coreutils systemd dracut
|
|
Requires: /usr/bin/kernel-install
|
|
Requires: /usr/sbin/installkernel
|
|
Requires: linux-firmware
|
|
|
|
%ifarch aarch64
|
|
%global build_arch arm64
|
|
%global make_targets olddefconfig Image.gz modules dtbs
|
|
%endif
|
|
|
|
%ifarch riscv64
|
|
%global build_arch riscv64
|
|
%global make_targets olddefconfig Image.gz modules dtbs
|
|
%endif
|
|
|
|
%global make make -j$(( $(nproc) + 2 )) KERNELRELEASE=%{KVERREL}
|
|
|
|
Source2: https://git.resf.org/thefossguy/kernel-tfg/archive/master.tar.gz
|
|
Source3: config
|
|
|
|
%description
|
|
The Linux Kernel, the operating system core itself
|
|
|
|
%package headers
|
|
Summary: Header files for the Linux kernel for use by glibc
|
|
Obsoletes: kernel-%{kname}-headers-tfg
|
|
Provides: kernel-%{kname}-headers-tfg = %{KVERREL}
|
|
%description headers
|
|
Kernel-headers includes the C header files that specify the interface
|
|
between the Linux kernel and userspace libraries and programs. The
|
|
header files define structures and constants that are needed for
|
|
building most standard programs and are also needed for rebuilding the
|
|
glibc package
|
|
|
|
%package devel
|
|
Summary: Development package for building kernel modules to match the kernel
|
|
Provides: kernel-%{kname}-devel-tfg = %{KVERREL}
|
|
AutoReqProv: no
|
|
%description devel
|
|
This package provides kernel headers and makefiles sufficient to build modules
|
|
against the kernel package.
|
|
|
|
%prep
|
|
if [ -f ../SOURCES/linux-%{version}.tar.sign ]; then
|
|
[ -f ../SOURCES/linux-%{version}.tar ] || gzip --decompress --keep %{SOURCE0}
|
|
gpg2 --locate-keys torvalds@kernel.org gregkh@kernel.org
|
|
gpg2 --verify %{SOURCE99} || exit 1
|
|
|
|
# not needed anymore, might as well delete it to make space for the
|
|
# build and install phases
|
|
rm -vf linux-%{version}.tar
|
|
fi
|
|
%setup -q -n %{src_dir}
|
|
find ../../SOURCES -type f -name "patch-*.patch" -print0 | sort -z | xargs --no-run-if-empty -t -0 -n 1 patch -p1 -i
|
|
|
|
# Mangle all Python shebangs to be Python 3 explicitly.
|
|
# -i specifies the interpreter for the shebang
|
|
# -n prevents creating ~backup files
|
|
# -p preserves timestamps
|
|
# This fixes errors such as
|
|
# *** ERROR: ambiguous python shebang in /usr/bin/kvm_stat: #!/usr/bin/python. Change it to python3 (or python2) explicitly.
|
|
# Process all files in the Documentation, scripts and tools directories.
|
|
pathfix.py -i "%{__python3} %{py3_shbang_opts}" -n -p \
|
|
tools/kvm/kvm_stat/kvm_stat \
|
|
scripts/show_delta \
|
|
scripts/jobserver-exec \
|
|
scripts/diffconfig \
|
|
scripts/clang-tools \
|
|
scripts/bloat-o-meter \
|
|
tools \
|
|
scripts \
|
|
Documentation \
|
|
drivers >/dev/null 2>&1
|
|
|
|
export LLVM=1 AR=llvm-ar CC=clang HOSTAR=llvm-ar HOSTCC=clang HOSTCXX=clang++ HOSTLD=ld.lld LD=ld.lld NM=llvm-nm OBJCOPY=llvm-objcopy OBJDUMP=llvm-objdump READELF=llvm-readelf STRIP=llvm-strip
|
|
[ -f .config ] && rm -vf .config*
|
|
%{make} distclean
|
|
|
|
cp %{SOURCE3} .config
|
|
|
|
tar -xf %{SOURCE2} -C .
|
|
cp -vr kernel-tfg/{configure-linux.sh,extra-configs} .
|
|
rm -rf kernel-tfg/
|
|
./configure-linux.sh
|
|
|
|
%build
|
|
%{make} PYTHON=%{__python3} %{make_targets}
|
|
|
|
%install
|
|
rm -rf %{buildroot}
|
|
mkdir -p %{buildroot}
|
|
|
|
# install the kernel
|
|
mkdir -p %{buildroot}/boot
|
|
cp $(%{make} -s image_name) %{buildroot}/boot/vmlinuz-%{KVERREL}
|
|
chmod 755 %{buildroot}/boot/vmlinuz-%{KVERREL}
|
|
|
|
# install DTBs
|
|
%ifarch aarch64 || riscv64
|
|
%{make} INSTALL_DTBS_PATH=%{buildroot}/boot/dtb-%{KVERREL} dtbs_install
|
|
# delete "arch/%{build_arch}/boot/dts" because "$PWD" will be packaged in "%devel"
|
|
find arch/%{build_arch}/boot/dts -name '*.dtb' -type f -delete
|
|
%endif
|
|
|
|
# install modules
|
|
# '$(mod-fw)' is overridden because there is no reason to install any firmware
|
|
# since we already have 'linux-firmware' package as the dependency of this package.
|
|
%{make} INSTALL_MOD_STRIP=1 INSTALL_MOD_PATH=%{buildroot} mod-fw= modules_install
|
|
|
|
# install headers
|
|
%{make} INSTALL_HDR_PATH=%{buildroot}/usr headers_install
|
|
|
|
# install other key files too
|
|
install -m 644 .config %{buildroot}/boot/config-%{KVERREL}
|
|
install -m 644 .config %{buildroot}/lib/modules/%{KVERREL}/config
|
|
install -m 644 System.map %{buildroot}/boot/System.map-%{KVERREL}
|
|
install -m 644 System.map %{buildroot}/lib/modules/%{KVERREL}/System.map
|
|
|
|
# fix links
|
|
rm -rf %{buildroot}/lib/modules/%{KVERREL}/build
|
|
rm -rf %{buildroot}/lib/modules/%{KVERREL}/source
|
|
ln -fns /usr/src/kernels/%{KVERREL} %{buildroot}/lib/modules/%{KVERREL}/build
|
|
ln -fns /usr/src/kernels/%{KVERREL} %{buildroot}/lib/modules/%{KVERREL}/source
|
|
|
|
# install actual Linux src to /usr/src/kernels/%{KVERREL}
|
|
mkdir -p %{buildroot}/usr/src/kernels/%{KVERREL}
|
|
if [ -f scripts/package/install-extmod-build ]; then
|
|
%{make} run-command KBUILD_RUN_COMMAND='%{_builddir}/%{src_dir}/scripts/package/install-extmod-build %{buildroot}/usr/src/kernels/%{KVERREL}'
|
|
else
|
|
touch %{buildroot}/usr/src/kernels/%{KVERREL}/MAYBE_THIS_WORKS
|
|
fi
|
|
|
|
%clean
|
|
rm -rf %{buildroot}
|
|
|
|
%post
|
|
set -xeuf -o pipefail
|
|
|
|
if [ -x /sbin/installkernel -a -r /boot/vmlinuz-%{KVERREL} -a -r /boot/System.map-%{KVERREL} ]; then
|
|
cp /boot/vmlinuz-%{KVERREL} /boot/.vmlinuz-%{KVERREL}-rpm
|
|
cp /boot/System.map-%{KVERREL} /boot/.System.map-%{KVERREL}-rpm
|
|
rm -f /boot/vmlinuz-%{KVERREL} /boot/System.map-%{KVERREL}
|
|
/sbin/installkernel %{KVERREL} /boot/.vmlinuz-%{KVERREL}-rpm /boot/.System.map-%{KVERREL}-rpm
|
|
rm -f /boot/.vmlinuz-%{KVERREL}-rpm /boot/.System.map-%{KVERREL}-rpm
|
|
fi
|
|
|
|
# we pushd into /boot because we want our symlinks to be
|
|
# vmlinuz -> vmlinuz-6.6.0-20231004.6.el9.aarch64
|
|
# and not
|
|
# vmlinuz -> /boot/vmlinuz-6.6.0-20231004.6.el9.aarch64
|
|
pushd /boot
|
|
rm -rvf dtb initramfs.img System.map vmlinuz
|
|
ln -s dtb-%{KVERREL} dtb
|
|
ln -s initramfs-%{KVERREL}.img initramfs.img
|
|
ln -s System.map-%{KVERREL} System.map
|
|
ln -s vmlinuz-%{KVERREL} vmlinuz
|
|
popd
|
|
|
|
%preun
|
|
# remove symlinks
|
|
rm -vf /boot/initramfs.img
|
|
rm -vf /boot/System.map
|
|
rm -vf /boot/vmlinuz
|
|
|
|
if [ -x /sbin/new-kernel-pkg ]; then
|
|
new-kernel-pkg --remove %{KVERREL} --rminitrd --initrdfile=/boot/initramfs-%{KVERREL}.img
|
|
elif [ -x /usr/bin/kernel-install ]; then
|
|
kernel-install remove %{KVERREL}
|
|
fi
|
|
|
|
%postun
|
|
if [ -x /sbin/update-bootloader ]; then
|
|
/sbin/update-bootloader --remove %{KVERREL}
|
|
fi
|
|
[ -d /boot/dtb ] && rm -rf /boot/dtb
|
|
|
|
%files headers
|
|
%defattr (-, root, root)
|
|
/usr/include
|
|
|
|
%files devel
|
|
%defattr (-, root, root)
|
|
/usr/src/kernels/%{KVERREL}
|
|
/lib/modules/%{KVERREL}/build
|
|
/lib/modules/%{KVERREL}/source
|
|
|
|
%files
|
|
%defattr (-, root, root)
|
|
%exclude /lib/modules/%{KVERREL}/build
|
|
%exclude /lib/modules/%{KVERREL}/source
|
|
/lib/modules/%{KVERREL}
|
|
/boot/*
|