]> git.ipfire.org Git - ipfire-3.x.git/blob - kernel/kernel.nm
c205dc857e9e98104e3c3d59feaa2665b8913cef
[ipfire-3.x.git] / kernel / kernel.nm
1 ###############################################################################
2 # IPFire.org - An Open Source Firewall Solution #
3 # Copyright (C) - IPFire Development Team <info@ipfire.org> #
4 ###############################################################################
5
6 name = kernel
7 version = 6.4.3
8 release = 2
9 thisapp = linux-%{version}
10
11 maintainer = Arne Fitzenreiter <arne.fitzenreiter@ipfire.org>
12 groups = System/Kernels
13 url = https://www.kernel.org/
14 license = GPLv2
15 summary = The Linux kernel.
16
17 description
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.
22 end
23
24 # Version helper variables.
25 localversion = %{release}.%{DISTRO_DISTTAG}.%{DISTRO_ARCH}
26 fullver = %{version}-%{localversion}
27
28 source_dl = https://www.kernel.org/pub/linux/kernel/v6.x/
29 sources = %{thisapp}.tar.xz
30
31 build
32 requires
33 asciidoc
34 bc
35 binutils >= 2.25
36 binutils-devel
37 bison
38 elfutils-devel
39 flex
40 gcc >= 8
41 gcc-plugin-devel
42 gettext
43 hostname
44 libunwind-devel
45 ncurses-devel
46 newt-devel
47 openssl
48 /usr/bin/openssl
49 pciutils-devel
50 perl
51 python3-devel
52 rsync
53 openssl-devel
54 slang-devel
55 xmlto
56 xz
57 zstd
58
59 /sbin/depmod
60 end
61
62 kernel_arch = %{DISTRO_PLATFORM}
63 kernel_target = bzImage
64 kernel_image = arch/%{kernel_arch}/boot/%{kernel_target}
65
66 if "%{DISTRO_ARCH}" == "aarch64"
67 kernel_arch = arm64
68 kernel_target = Image.gz
69 end
70
71 prepare_cmds
72 # Disable the colorize plugin.
73 # It's generally very nice but it clutters our
74 # logfiles.
75 sed -e "/^COLORIZE_PLUGIN_CFLAGS/d" \
76 -i Makefile
77
78 # Use our linker flags while building the compiler plugins.
79 sed -i '/^plugin_ldflags\s\+=/ s/$/ %{LDFLAGS}/' \
80 scripts/gcc-plugins/Makefile
81
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
86
87 # Get rid of unwanted files resulting from patch fuzz.
88 find . \( -name "*.orig" -o -name "*~" \) -exec rm -f {} \; >/dev/null
89
90 # Remove unnecessary SCM files.
91 find . -name .gitignore -exec rm -f {} \; >/dev/null
92
93 # This prevents scripts/setlocalversion from mucking with our version numbers.
94 touch .scmversion
95
96 mkdir -pv configs
97
98 cd %{DIR_SOURCE}
99 configure_kernel() {
100 local flavour=${1}
101 local suffix
102 if [ "${flavour}" != "generic" ]; then
103 suffix="-${flavour}"
104 fi
105
106 bash scripts/configure --kernel-dir=%{DIR_APP} \
107 merge %{DISTRO_ARCH} ${flavour} %{DIR_APP}/configs/config.${flavour}
108 }
109
110 # Generate configuration files for all kernels we are going to
111 # build.
112 configure_kernel "generic"
113 end
114
115 build
116 build_kernel() {
117 local flavour=${1}
118 local suffix
119 local localversion="%{localversion}"
120 local fullversion="%{fullver}"
121 if [ "${flavour}" != "generic" ]; then
122 suffix="-${flavour}"
123 localversion="${localversion}.${flavour}"
124 fullversion="${fullversion}.${flavour}"
125 fi
126
127 # Label the build.
128 sed -i Makefile \
129 -e "s/^EXTRAVERSION.*/EXTRAVERSION = -${localversion}/"
130
131 # Clean up the source tree.
132 make mrproper
133
134 # Install configuration file.
135 cp configs/config.${flavour} .config
136 cat .config
137
138 # Run the build.
139 make ARCH=%{kernel_arch} HOSTCFLAGS="%{CFLAGS}" \
140 HOSTLDFLAGS="%{LDFLAGS}" olddefconfig >/dev/null
141
142 make ARCH=%{kernel_arch} %{kernel_target} modules \
143 KERNELRELEASE=${fullversion} HOSTCFLAGS="%{CFLAGS}" \
144 HOSTLDFLAGS="%{LDFLAGS}" %{PARALLELISMFLAGS}
145
146 # Compile Flattened Device Tree database
147 case "${DISTRO_ARCH}" in
148 aarch64)
149 make ARCH=%{kernel_arch} dtbs
150
151 mkdir -pv %{BUILDROOT}/boot/dtb-${fullversion}
152 for file in arch/arm/boot/dts/*.dtb; do
153 [ -e "${file}" ] || continue
154
155 install -m 644 ${file} %{BUILDROOT}/boot/dtb-${fullversion} || exit 1
156 rm -f ${file}
157 done
158 ;;
159 esac
160
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}
166
167 # Create empty initramfs (20M).
168 dd if=/dev/zero of=%{BUILDROOT}/boot/initramfs-${fullversion}.img bs=1M count=20
169
170 # Install modules.
171 make ARCH=%{kernel_arch} INSTALL_MOD_PATH=%{BUILDROOT}/usr mod-fw= V=1 \
172 KERNELRELEASE=${fullversion} modules_install
173
174 # And now the scary looking part.
175 #
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
180
181 # Create dirs for extra modules.
182 mkdir -p %{BUILDROOT}/usr/lib/modules/${fullversion}/extra
183
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}
189
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" \
193 -exec rm -vf {} \;
194
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
198
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
206
207 find %{BUILDROOT}/usr/lib/modules/${fullversion} -name "*.ko" -type f | \
208 xargs --no-run-if-empty chmod u+x
209
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
216
217 # Fix permissions.
218 find %{BUILDROOT}/usr/src/kernels -name "modules.order" \
219 -exec chmod 644 {} \;
220
221 find %{BUILDROOT}/usr/src/kernels -name ".*.cmd" -exec rm -f {} \;
222
223 # remove device tree compiler because there are dead links
224 rm -rf %{BUILDROOT}/usr/src/kernels/*/scripts/dtc
225 }
226
227 # Build the kernel
228 build_kernel "generic"
229
230 # cpupower
231 chmod +x tools/power/cpupower/utils/version-gen.sh
232 make -C tools/power/cpupower CPUFREQ_BENCH=false %{PARALLELISMFLAGS}
233
234 pushd tools/thermal/tmon
235 make
236 popd
237 end
238
239 install
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
243
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
249
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
255
256 # Remove all firmware files which are distributed by linux-firmware
257 rm -rfv %{BUILDROOT}/lib/firmware
258
259 # Install tools.
260 # cpupower
261 make -C tools/power/cpupower DESTDIR=%{BUILDROOT} libdir=%{libdir} \
262 mandir=%{mandir} CPUFREQ_BENCH=false install
263
264 chmod 0755 %{BUILDROOT}%{libdir}/libcpupower.so*
265
266 # tmon
267 pushd tools/thermal/tmon
268 make INSTALL_ROOT=%{BUILDROOT} install
269 popd
270 end
271 end
272
273 packages
274 package kernel-tools
275 summary = Assortment of tools for the Linux kernel.
276 description = %{summary}
277
278 filter_requires
279 perl>=[0-9]\:.*
280 end
281 end
282
283 package kernel-tools-debuginfo
284 template DEBUGINFO
285 end
286
287 package kernel
288 summary = The Linux kernel %{fullver}
289
290 prerequires
291 /sbin/depmod
292 end
293
294 provides
295 kernel = %{fullver}
296 end
297
298 requires
299 dracut
300 kernel-updater
301 linux-firmware
302 wireless-regdb
303
304 # Install intel-microcode only on x86_64
305 (intel-microcode if arch(x86_64))
306 end
307
308 files
309 /boot/System.map-%{fullver}
310 /boot/dtb-%{fullver}
311 /boot/vmlinuz-%{fullver}
312 /boot/initramfs-%{fullver}.img
313 /usr/lib/modules/%{fullver}
314 end
315
316 _posttrans
317 kernel-updater install %{fullver}
318 end
319
320 script posttransin
321 %{_posttrans}
322 end
323
324 script posttransup
325 %{_posttrans}
326 end
327
328 script postun
329 kernel-updater uninstall %{fullver}
330 end
331 end
332
333 package kernel-devel
334 summary = Development files of kernel-%{fullver}
335 description
336 %{summary}
337
338 Install this package in order to compile modules for
339 kernel release %{fullver}.
340 end
341
342 provides
343 kernel-devel = %{thisver}
344 end
345
346 filter_requires
347 perl>=[0-9]\:.*
348 end
349
350 files
351 /usr/lib/modules/%{fullver}/build
352 /usr/lib/modules/%{fullver}/source
353 /usr/src/kernels/%{fullver}
354 end
355 end
356
357 package kernel-headers
358 summary = Header files of the kernel release %{fullver}
359 desciption = %{summary}
360
361 files
362 /usr/include
363 end
364 end
365 end