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 = http://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
63 kernel_arch = %{DISTRO_PLATFORM}
64 kernel_target = bzImage
65 kernel_image = arch/%{kernel_arch}/boot/%{kernel_target}
67 if "%{DISTRO_ARCH}" == "aarch64"
69 kernel_target = Image.gz
73 # Disable the colorize plugin.
74 # It's generally very nice but it clutters our
76 sed -e "/^COLORIZE_PLUGIN_CFLAGS/d" \
79 sed -e "s/\$(HOST_LFS_CFLAGS)/& -fPIC/g" -i Makefile
81 # Get rid of unwanted files resulting from patch fuzz.
82 find . \( -name "*.orig" -o -name "*~" \) -exec rm -f {} \; >/dev/null
84 # Remove unnecessary SCM files.
85 find . -name .gitignore -exec rm -f {} \; >/dev/null
87 # This prevents scripts/setlocalversion from mucking with our version numbers.
96 if [ "${flavour}" != "generic" ]; then
100 bash scripts/configure --kernel-dir=%{DIR_APP} \
101 merge %{DISTRO_ARCH} ${flavour} %{DIR_APP}/configs/config.${flavour}
104 # Generate configuration files for all kernels we are going to
106 configure_kernel "generic"
113 local localversion="%{localversion}"
114 local fullversion="%{fullver}"
115 if [ "${flavour}" != "generic" ]; then
117 localversion="${localversion}.${flavour}"
118 fullversion="${fullversion}.${flavour}"
123 -e "s/^EXTRAVERSION.*/EXTRAVERSION = -${localversion}/"
125 # Clean up the source tree.
128 # Install configuration file.
129 cp configs/config.${flavour} .config
133 make ARCH=%{kernel_arch} olddefconfig >/dev/null
134 make ARCH=%{kernel_arch} %{kernel_target} modules \
135 KERNELRELEASE=${fullversion} %{PARALLELISMFLAGS}
137 # Compile Flattened Device Tree database
138 case "${DISTRO_ARCH}" in
140 make ARCH=%{kernel_arch} dtbs
142 mkdir -pv %{BUILDROOT}/boot/dtb-${fullversion}
143 for file in arch/arm/boot/dts/*.dtb; do
144 [ -e "${file}" ] || continue
146 install -m 644 ${file} %{BUILDROOT}/boot/dtb-${fullversion} || exit 1
152 # Install the results.
153 mkdir -pv %{BUILDROOT}/boot %{BUILDROOT}/usr/lib/modules/${fullversion}
154 install -m 755 %{kernel_image} %{BUILDROOT}/boot/vmlinuz-${fullversion}
155 install -m 644 .config %{BUILDROOT}/boot/config-${fullversion}
156 install -m 644 System.map %{BUILDROOT}/boot/System.map-${fullversion}
158 # Create empty initramfs (20M).
159 dd if=/dev/zero of=%{BUILDROOT}/boot/initramfs-${fullversion}.img bs=1M count=20
162 make ARCH=%{kernel_arch} INSTALL_MOD_PATH=%{BUILDROOT}/usr mod-fw= V=1 \
163 KERNELRELEASE=${fullversion} modules_install
165 # And now the scary looking part.
167 # Recreate source and build links.
168 rm -f %{BUILDROOT}/usr/lib/modules/${fullversion}/{build,source}
169 mkdir -p %{BUILDROOT}/usr/lib/modules/${fullversion}/build
170 ln -sf build %{BUILDROOT}/usr/lib/modules/${fullversion}/source
172 # Create dirs for extra modules.
173 mkdir -p %{BUILDROOT}/usr/lib/modules/${fullversion}/extra
175 cp --parents $(find -type f -name "Makefile*" -o -name "Kconfig*") \
176 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
177 cp Module.symvers System.map \
178 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
179 rm -rf %{BUILDROOT}/usr/lib/modules/${fullversion}/build/{Documentation,scripts,include}
181 cp .config %{BUILDROOT}/usr/lib/modules/${fullversion}/build
182 cp -a scripts %{BUILDROOT}/usr/lib/modules/${fullversion}/build
183 find %{BUILDROOT}/usr/lib/modules/${fullversion}/build/scripts -name "*.o" \
186 cp -a --parents arch/%{kernel_arch}/include \
187 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
188 cp -a include %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include
190 # Make sure we can build external modules.
191 touch -r %{BUILDROOT}/usr/lib/modules/${fullversion}/build/Makefile \
192 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include/linux/version.h
193 touch -r %{BUILDROOT}/usr/lib/modules/${fullversion}/build/.config \
194 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/autoconf.h
195 cp %{BUILDROOT}/usr/lib/modules/${fullversion}/build/.config \
196 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include/config/auto.conf
198 find %{BUILDROOT}/usr/lib/modules/${fullversion} -name "*.ko" -type f | \
199 xargs --no-run-if-empty chmod u+x
201 # Move all development files to /usr/src.
202 mkdir -p %{BUILDROOT}/usr/src/kernels
203 mv %{BUILDROOT}/usr/lib/modules/${fullversion}/build \
204 %{BUILDROOT}/usr/src/kernels/${fullversion}
205 ln -sf ../../../src/kernels/${fullversion} \
206 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
209 find %{BUILDROOT}/usr/src/kernels -name "modules.order" \
210 -exec chmod 644 {} \;
212 find %{BUILDROOT}/usr/src/kernels -name ".*.cmd" -exec rm -f {} \;
214 # remove device tree compiler because there are dead links
215 rm -rf %{BUILDROOT}/usr/src/kernels/*/scripts/dtc
219 build_kernel "generic"
222 chmod +x tools/power/cpupower/utils/version-gen.sh
223 make -C tools/power/cpupower CPUFREQ_BENCH=false %{PARALLELISMFLAGS}
225 pushd tools/thermal/tmon
231 # When no kernels are configured, we create a default config
232 # which enables us to install at least the header files.
233 [ -n "%{kernels}" ] || make ARCH=%{kernel_arch} defconfig
235 # Install the header files
236 make ARCH=%{kernel_arch} INSTALL_HDR_PATH=dest headers_install
237 mkdir -pv %{BUILDROOT}/usr/include
238 find dest/include \( -name .install -o -name ..install.cmd \) -delete
239 cp -rv dest/include/* %{BUILDROOT}/usr/include
241 # Glibc provides these headers
242 rm -rfv %{BUILDROOT}/usr/include/scsi \
243 %{BUILDROOT}/usr/include/asm*/atomic.h \
244 %{BUILDROOT}/usr/include/asm*/io.h \
245 %{BUILDROOT}/usr/include/asm*/irq.h
247 # Remove all firmware files which are distributed by linux-firmware
248 rm -rfv %{BUILDROOT}/lib/firmware
252 make -C tools/power/cpupower DESTDIR=%{BUILDROOT} libdir=%{libdir} \
253 mandir=%{mandir} CPUFREQ_BENCH=false install
255 chmod 0755 %{BUILDROOT}%{libdir}/libcpupower.so*
258 pushd tools/thermal/tmon
259 make INSTALL_ROOT=%{BUILDROOT} install
266 summary = Assortment of tools for the Linux kernel.
267 description = %{summary}
274 package kernel-tools-debuginfo
279 summary = The Linux kernel %{fullver}
298 /boot/System.map-%{fullver}
300 /boot/vmlinuz-%{fullver}
301 /boot/initramfs-%{fullver}.img
302 /usr/lib/modules/%{fullver}
306 kernel-updater install %{fullver}
318 kernel-updater uninstall %{fullver}
323 summary = Development files of kernel-%{fullver}
327 Install this package in order to compile modules for
328 kernel release %{fullver}.
332 kernel-devel = %{thisver}
340 /usr/lib/modules/%{fullver}/build
341 /usr/lib/modules/%{fullver}/source
342 /usr/src/kernels/%{fullver}
346 package kernel-headers
347 summary = Header files of the kernel release %{fullver}
348 desciption = %{summary}