1 ###############################################################################
2 # IPFire.org - An Open Source Firewall Solution #
3 # Copyright (C) - IPFire Development Team <info@ipfire.org> #
4 ###############################################################################
9 thisapp = linux-%{version}
11 maintainer = Arne Fitzenreiter <arne.fitzenreiter@ipfire.org>
12 groups = System/Kernels
13 url = https://www.kernel.org/
15 summary = The Linux kernel.
18 The kernel package contains the Linux kernel (vmlinuz), the core of any
19 Linux operating system. The kernel handles the basic functions
20 of the operating system: memory allocation, process allocation, device
21 input and output, etc.
24 # Version helper variables.
25 localversion = %{release}.%{DISTRO_DISTTAG}.%{DISTRO_ARCH}
26 fullver = %{version}-%{localversion}
28 source_dl = https://www.kernel.org/pub/linux/kernel/v6.x/
29 sources = %{thisapp}.tar.xz
62 kernel_arch = %{DISTRO_PLATFORM}
63 kernel_target = bzImage
64 kernel_image = arch/%{kernel_arch}/boot/%{kernel_target}
66 if "%{DISTRO_ARCH}" == "aarch64"
68 kernel_target = Image.gz
72 # Disable the colorize plugin.
73 # It's generally very nice but it clutters our
75 sed -e "/^COLORIZE_PLUGIN_CFLAGS/d" \
78 # Use our linker flags while building the compiler plugins.
79 sed -i '/^plugin_ldflags\s\+=/ s/$/ %{LDFLAGS}/' \
80 scripts/gcc-plugins/Makefile
82 # Remove Python 2 interpreter from a few scripts
83 sed -e "s@^#!.*python@#!%{python3}@" \
84 -i scripts/show_delta \
85 -i scripts/tracing/draw_functrace.py
87 # Get rid of unwanted files resulting from patch fuzz.
88 find . \( -name "*.orig" -o -name "*~" \) -exec rm -f {} \; >/dev/null
90 # Remove unnecessary SCM files.
91 find . -name .gitignore -exec rm -f {} \; >/dev/null
93 # This prevents scripts/setlocalversion from mucking with our version numbers.
102 if [ "${flavour}" != "generic" ]; then
106 bash scripts/configure --kernel-dir=%{DIR_APP} \
107 merge %{DISTRO_ARCH} ${flavour} %{DIR_APP}/configs/config.${flavour}
110 # Generate configuration files for all kernels we are going to
112 configure_kernel "generic"
119 local localversion="%{localversion}"
120 local fullversion="%{fullver}"
121 if [ "${flavour}" != "generic" ]; then
123 localversion="${localversion}.${flavour}"
124 fullversion="${fullversion}.${flavour}"
129 -e "s/^EXTRAVERSION.*/EXTRAVERSION = -${localversion}/"
131 # Clean up the source tree.
134 # Install configuration file.
135 cp configs/config.${flavour} .config
139 make ARCH=%{kernel_arch} HOSTCFLAGS="%{CFLAGS}" \
140 HOSTLDFLAGS="%{LDFLAGS}" olddefconfig >/dev/null
142 make ARCH=%{kernel_arch} %{kernel_target} modules \
143 KERNELRELEASE=${fullversion} HOSTCFLAGS="%{CFLAGS}" \
144 HOSTLDFLAGS="%{LDFLAGS}" %{PARALLELISMFLAGS}
146 # Compile Flattened Device Tree database
147 case "${DISTRO_ARCH}" in
149 make ARCH=%{kernel_arch} dtbs
151 mkdir -pv %{BUILDROOT}/boot/dtb-${fullversion}
152 for file in arch/arm/boot/dts/*.dtb; do
153 [ -e "${file}" ] || continue
155 install -m 644 ${file} %{BUILDROOT}/boot/dtb-${fullversion} || exit 1
161 # Install the results.
162 mkdir -pv %{BUILDROOT}/boot %{BUILDROOT}/usr/lib/modules/${fullversion}
163 install -m 755 %{kernel_image} %{BUILDROOT}/boot/vmlinuz-${fullversion}
164 install -m 644 .config %{BUILDROOT}/boot/config-${fullversion}
165 install -m 644 System.map %{BUILDROOT}/boot/System.map-${fullversion}
167 # Create empty initramfs (20M).
168 dd if=/dev/zero of=%{BUILDROOT}/boot/initramfs-${fullversion}.img bs=1M count=20
171 make ARCH=%{kernel_arch} INSTALL_MOD_PATH=%{BUILDROOT}/usr mod-fw= V=1 \
172 KERNELRELEASE=${fullversion} modules_install
174 # And now the scary looking part.
176 # Recreate source and build links.
177 rm -f %{BUILDROOT}/usr/lib/modules/${fullversion}/{build,source}
178 mkdir -p %{BUILDROOT}/usr/lib/modules/${fullversion}/build
179 ln -sf build %{BUILDROOT}/usr/lib/modules/${fullversion}/source
181 # Create dirs for extra modules.
182 mkdir -p %{BUILDROOT}/usr/lib/modules/${fullversion}/extra
184 cp --parents $(find -type f -name "Makefile*" -o -name "Kconfig*") \
185 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
186 cp Module.symvers System.map \
187 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
188 rm -rf %{BUILDROOT}/usr/lib/modules/${fullversion}/build/{Documentation,scripts,include}
190 cp .config %{BUILDROOT}/usr/lib/modules/${fullversion}/build
191 cp -a scripts %{BUILDROOT}/usr/lib/modules/${fullversion}/build
192 find %{BUILDROOT}/usr/lib/modules/${fullversion}/build/scripts -name "*.o" \
195 cp -a --parents arch/%{kernel_arch}/include \
196 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
197 cp -a include %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include
199 # Make sure we can build external modules.
200 touch -r %{BUILDROOT}/usr/lib/modules/${fullversion}/build/Makefile \
201 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include/linux/version.h
202 touch -r %{BUILDROOT}/usr/lib/modules/${fullversion}/build/.config \
203 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/autoconf.h
204 cp %{BUILDROOT}/usr/lib/modules/${fullversion}/build/.config \
205 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include/config/auto.conf
207 find %{BUILDROOT}/usr/lib/modules/${fullversion} -name "*.ko" -type f | \
208 xargs --no-run-if-empty chmod u+x
210 # Move all development files to /usr/src.
211 mkdir -p %{BUILDROOT}/usr/src/kernels
212 mv %{BUILDROOT}/usr/lib/modules/${fullversion}/build \
213 %{BUILDROOT}/usr/src/kernels/${fullversion}
214 ln -sf ../../../src/kernels/${fullversion} \
215 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
218 find %{BUILDROOT}/usr/src/kernels -name "modules.order" \
219 -exec chmod 644 {} \;
221 find %{BUILDROOT}/usr/src/kernels -name ".*.cmd" -exec rm -f {} \;
223 # remove device tree compiler because there are dead links
224 rm -rf %{BUILDROOT}/usr/src/kernels/*/scripts/dtc
228 build_kernel "generic"
231 chmod +x tools/power/cpupower/utils/version-gen.sh
232 make -C tools/power/cpupower CPUFREQ_BENCH=false %{PARALLELISMFLAGS}
234 pushd tools/thermal/tmon
240 # When no kernels are configured, we create a default config
241 # which enables us to install at least the header files.
242 [ -n "%{kernels}" ] || make ARCH=%{kernel_arch} defconfig
244 # Install the header files
245 make ARCH=%{kernel_arch} INSTALL_HDR_PATH=dest headers_install
246 mkdir -pv %{BUILDROOT}/usr/include
247 find dest/include \( -name .install -o -name ..install.cmd \) -delete
248 cp -rv dest/include/* %{BUILDROOT}/usr/include
250 # Glibc provides these headers
251 rm -rfv %{BUILDROOT}/usr/include/scsi \
252 %{BUILDROOT}/usr/include/asm*/atomic.h \
253 %{BUILDROOT}/usr/include/asm*/io.h \
254 %{BUILDROOT}/usr/include/asm*/irq.h
256 # Remove all firmware files which are distributed by linux-firmware
257 rm -rfv %{BUILDROOT}/lib/firmware
261 make -C tools/power/cpupower DESTDIR=%{BUILDROOT} libdir=%{libdir} \
262 mandir=%{mandir} CPUFREQ_BENCH=false install
264 chmod 0755 %{BUILDROOT}%{libdir}/libcpupower.so*
267 pushd tools/thermal/tmon
268 make INSTALL_ROOT=%{BUILDROOT} install
275 summary = Assortment of tools for the Linux kernel.
276 description = %{summary}
283 package kernel-tools-debuginfo
288 summary = The Linux kernel %{fullver}
304 # Install intel-microcode only on x86_64
305 (intel-microcode if arch(x86_64))
309 /boot/System.map-%{fullver}
311 /boot/vmlinuz-%{fullver}
312 /boot/initramfs-%{fullver}.img
313 /usr/lib/modules/%{fullver}
317 kernel-updater install %{fullver}
329 kernel-updater uninstall %{fullver}
334 summary = Development files of kernel-%{fullver}
338 Install this package in order to compile modules for
339 kernel release %{fullver}.
343 kernel-devel = %{thisver}
351 /usr/lib/modules/%{fullver}/build
352 /usr/lib/modules/%{fullver}/source
353 /usr/src/kernels/%{fullver}
357 package kernel-headers
358 summary = Header files of the kernel release %{fullver}
359 desciption = %{summary}