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 sed -e "s/\$(HOST_LFS_CFLAGS)/& -fPIC/g" -i Makefile
80 # Get rid of unwanted files resulting from patch fuzz.
81 find . \( -name "*.orig" -o -name "*~" \) -exec rm -f {} \; >/dev/null
83 # Remove unnecessary SCM files.
84 find . -name .gitignore -exec rm -f {} \; >/dev/null
86 # This prevents scripts/setlocalversion from mucking with our version numbers.
95 if [ "${flavour}" != "generic" ]; then
99 bash scripts/configure --kernel-dir=%{DIR_APP} \
100 merge %{DISTRO_ARCH} ${flavour} %{DIR_APP}/configs/config.${flavour}
103 # Generate configuration files for all kernels we are going to
105 configure_kernel "generic"
112 local localversion="%{localversion}"
113 local fullversion="%{fullver}"
114 if [ "${flavour}" != "generic" ]; then
116 localversion="${localversion}.${flavour}"
117 fullversion="${fullversion}.${flavour}"
122 -e "s/^EXTRAVERSION.*/EXTRAVERSION = -${localversion}/"
124 # Clean up the source tree.
127 # Install configuration file.
128 cp configs/config.${flavour} .config
132 make ARCH=%{kernel_arch} olddefconfig >/dev/null
133 make ARCH=%{kernel_arch} %{kernel_target} modules \
134 KERNELRELEASE=${fullversion} %{PARALLELISMFLAGS}
136 # Compile Flattened Device Tree database
137 case "${DISTRO_ARCH}" in
139 make ARCH=%{kernel_arch} dtbs
141 mkdir -pv %{BUILDROOT}/boot/dtb-${fullversion}
142 for file in arch/arm/boot/dts/*.dtb; do
143 [ -e "${file}" ] || continue
145 install -m 644 ${file} %{BUILDROOT}/boot/dtb-${fullversion} || exit 1
151 # Install the results.
152 mkdir -pv %{BUILDROOT}/boot %{BUILDROOT}/usr/lib/modules/${fullversion}
153 install -m 755 %{kernel_image} %{BUILDROOT}/boot/vmlinuz-${fullversion}
154 install -m 644 .config %{BUILDROOT}/boot/config-${fullversion}
155 install -m 644 System.map %{BUILDROOT}/boot/System.map-${fullversion}
157 # Create empty initramfs (20M).
158 dd if=/dev/zero of=%{BUILDROOT}/boot/initramfs-${fullversion}.img bs=1M count=20
161 make ARCH=%{kernel_arch} INSTALL_MOD_PATH=%{BUILDROOT}/usr mod-fw= V=1 \
162 KERNELRELEASE=${fullversion} modules_install
164 # And now the scary looking part.
166 # Recreate source and build links.
167 rm -f %{BUILDROOT}/usr/lib/modules/${fullversion}/{build,source}
168 mkdir -p %{BUILDROOT}/usr/lib/modules/${fullversion}/build
169 ln -sf build %{BUILDROOT}/usr/lib/modules/${fullversion}/source
171 # Create dirs for extra modules.
172 mkdir -p %{BUILDROOT}/usr/lib/modules/${fullversion}/extra
174 cp --parents $(find -type f -name "Makefile*" -o -name "Kconfig*") \
175 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
176 cp Module.symvers System.map \
177 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
178 rm -rf %{BUILDROOT}/usr/lib/modules/${fullversion}/build/{Documentation,scripts,include}
180 cp .config %{BUILDROOT}/usr/lib/modules/${fullversion}/build
181 cp -a scripts %{BUILDROOT}/usr/lib/modules/${fullversion}/build
182 find %{BUILDROOT}/usr/lib/modules/${fullversion}/build/scripts -name "*.o" \
185 cp -a --parents arch/%{kernel_arch}/include \
186 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
187 cp -a include %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include
189 # Make sure we can build external modules.
190 touch -r %{BUILDROOT}/usr/lib/modules/${fullversion}/build/Makefile \
191 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include/linux/version.h
192 touch -r %{BUILDROOT}/usr/lib/modules/${fullversion}/build/.config \
193 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/autoconf.h
194 cp %{BUILDROOT}/usr/lib/modules/${fullversion}/build/.config \
195 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include/config/auto.conf
197 find %{BUILDROOT}/usr/lib/modules/${fullversion} -name "*.ko" -type f | \
198 xargs --no-run-if-empty chmod u+x
200 # Move all development files to /usr/src.
201 mkdir -p %{BUILDROOT}/usr/src/kernels
202 mv %{BUILDROOT}/usr/lib/modules/${fullversion}/build \
203 %{BUILDROOT}/usr/src/kernels/${fullversion}
204 ln -sf ../../../src/kernels/${fullversion} \
205 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
208 find %{BUILDROOT}/usr/src/kernels -name "modules.order" \
209 -exec chmod 644 {} \;
211 find %{BUILDROOT}/usr/src/kernels -name ".*.cmd" -exec rm -f {} \;
213 # remove device tree compiler because there are dead links
214 rm -rf %{BUILDROOT}/usr/src/kernels/*/scripts/dtc
218 build_kernel "generic"
221 chmod +x tools/power/cpupower/utils/version-gen.sh
222 make -C tools/power/cpupower CPUFREQ_BENCH=false %{PARALLELISMFLAGS}
224 pushd tools/thermal/tmon
230 # When no kernels are configured, we create a default config
231 # which enables us to install at least the header files.
232 [ -n "%{kernels}" ] || make ARCH=%{kernel_arch} defconfig
234 # Install the header files
235 make ARCH=%{kernel_arch} INSTALL_HDR_PATH=dest headers_install
236 mkdir -pv %{BUILDROOT}/usr/include
237 find dest/include \( -name .install -o -name ..install.cmd \) -delete
238 cp -rv dest/include/* %{BUILDROOT}/usr/include
240 # Glibc provides these headers
241 rm -rfv %{BUILDROOT}/usr/include/scsi \
242 %{BUILDROOT}/usr/include/asm*/atomic.h \
243 %{BUILDROOT}/usr/include/asm*/io.h \
244 %{BUILDROOT}/usr/include/asm*/irq.h
246 # Remove all firmware files which are distributed by linux-firmware
247 rm -rfv %{BUILDROOT}/lib/firmware
251 make -C tools/power/cpupower DESTDIR=%{BUILDROOT} libdir=%{libdir} \
252 mandir=%{mandir} CPUFREQ_BENCH=false install
254 chmod 0755 %{BUILDROOT}%{libdir}/libcpupower.so*
257 pushd tools/thermal/tmon
258 make INSTALL_ROOT=%{BUILDROOT} install
265 summary = Assortment of tools for the Linux kernel.
266 description = %{summary}
273 package kernel-tools-debuginfo
278 summary = The Linux kernel %{fullver}
294 # Install intel-microcode only on x86_64
295 (intel-microcode if arch(x86_64))
299 /boot/System.map-%{fullver}
301 /boot/vmlinuz-%{fullver}
302 /boot/initramfs-%{fullver}.img
303 /usr/lib/modules/%{fullver}
307 kernel-updater install %{fullver}
319 kernel-updater uninstall %{fullver}
324 summary = Development files of kernel-%{fullver}
328 Install this package in order to compile modules for
329 kernel release %{fullver}.
333 kernel-devel = %{thisver}
341 /usr/lib/modules/%{fullver}/build
342 /usr/lib/modules/%{fullver}/source
343 /usr/src/kernels/%{fullver}
347 package kernel-headers
348 summary = Header files of the kernel release %{fullver}
349 desciption = %{summary}