]> git.ipfire.org Git - ipfire-3.x.git/blob - kernel/kernel.nm
kernel: Create a -debuginfo package for the tools
[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.0.6
8 release = 1
9 thisapp = linux-%{version}
10
11 maintainer = Arne Fitzenreiter <arne.fitzenreiter@ipfire.org>
12 groups = System/Kernels
13 url = http://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 net-tools
47 newt-devel
48 openssl
49 /usr/bin/openssl
50 pciutils-devel
51 perl
52 python3
53 python-devel
54 rsync
55 openssl-devel
56 slang-devel
57 xmlto
58 xz
59 zstd
60
61 /sbin/depmod
62 end
63
64 kernel_arch = %{DISTRO_PLATFORM}
65 kernel_target = bzImage
66 kernel_image = arch/%{kernel_arch}/boot/%{kernel_target}
67
68 if "%{DISTRO_ARCH}" == "aarch64"
69 kernel_arch = arm64
70 kernel_target = Image.gz
71 end
72
73 prepare_cmds
74 # Disable the colorize plugin.
75 # It's generally very nice but it clutters our
76 # logfiles.
77 sed -e "/^COLORIZE_PLUGIN_CFLAGS/d" \
78 -i Makefile
79
80 sed -e "s/\$(HOST_LFS_CFLAGS)/& -fPIC/g" -i Makefile
81
82 # Get rid of unwanted files resulting from patch fuzz.
83 find . \( -name "*.orig" -o -name "*~" \) -exec rm -f {} \; >/dev/null
84
85 # Remove unnecessary SCM files.
86 find . -name .gitignore -exec rm -f {} \; >/dev/null
87
88 # This prevents scripts/setlocalversion from mucking with our version numbers.
89 touch .scmversion
90
91 mkdir -pv configs
92
93 cd %{DIR_SOURCE}
94 configure_kernel() {
95 local flavour=${1}
96 local suffix
97 if [ "${flavour}" != "generic" ]; then
98 suffix="-${flavour}"
99 fi
100
101 bash scripts/configure --kernel-dir=%{DIR_APP} \
102 merge %{DISTRO_ARCH} ${flavour} %{DIR_APP}/configs/config.${flavour}
103 }
104
105 # Generate configuration files for all kernels we are going to
106 # build.
107 configure_kernel "generic"
108 end
109
110 build
111 build_kernel() {
112 local flavour=${1}
113 local suffix
114 local localversion="%{localversion}"
115 local fullversion="%{fullver}"
116 if [ "${flavour}" != "generic" ]; then
117 suffix="-${flavour}"
118 localversion="${localversion}.${flavour}"
119 fullversion="${fullversion}.${flavour}"
120 fi
121
122 # Label the build.
123 sed -i Makefile \
124 -e "s/^EXTRAVERSION.*/EXTRAVERSION = -${localversion}/"
125
126 # Clean up the source tree.
127 make mrproper
128
129 # Install configuration file.
130 cp configs/config.${flavour} .config
131 cat .config
132
133 # Run the build.
134 make ARCH=%{kernel_arch} olddefconfig >/dev/null
135 make ARCH=%{kernel_arch} %{kernel_target} modules \
136 KERNELRELEASE=${fullversion} %{PARALLELISMFLAGS}
137
138 # Compile Flattened Device Tree database
139 case "${DISTRO_ARCH}" in
140 aarch64)
141 make ARCH=%{kernel_arch} dtbs
142
143 mkdir -pv %{BUILDROOT}/boot/dtb-${fullversion}
144 for file in arch/arm/boot/dts/*.dtb; do
145 [ -e "${file}" ] || continue
146
147 install -m 644 ${file} %{BUILDROOT}/boot/dtb-${fullversion} || exit 1
148 rm -f ${file}
149 done
150 ;;
151 esac
152
153 # Install the results.
154 mkdir -pv %{BUILDROOT}/boot %{BUILDROOT}/usr/lib/modules/${fullversion}
155 install -m 755 %{kernel_image} %{BUILDROOT}/boot/vmlinuz-${fullversion}
156 install -m 644 .config %{BUILDROOT}/boot/config-${fullversion}
157 install -m 644 System.map %{BUILDROOT}/boot/System.map-${fullversion}
158
159 # Create empty initramfs (20M).
160 dd if=/dev/zero of=%{BUILDROOT}/boot/initramfs-${fullversion}.img bs=1M count=20
161
162 # Install modules.
163 make ARCH=%{kernel_arch} INSTALL_MOD_PATH=%{BUILDROOT}/usr mod-fw= V=1 \
164 KERNELRELEASE=${fullversion} modules_install
165
166 # And now the scary looking part.
167 #
168 # Recreate source and build links.
169 rm -f %{BUILDROOT}/usr/lib/modules/${fullversion}/{build,source}
170 mkdir -p %{BUILDROOT}/usr/lib/modules/${fullversion}/build
171 ln -sf build %{BUILDROOT}/usr/lib/modules/${fullversion}/source
172
173 # Create dirs for extra modules.
174 mkdir -p %{BUILDROOT}/usr/lib/modules/${fullversion}/extra
175
176 cp --parents $(find -type f -name "Makefile*" -o -name "Kconfig*") \
177 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
178 cp Module.symvers System.map \
179 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
180 rm -rf %{BUILDROOT}/usr/lib/modules/${fullversion}/build/{Documentation,scripts,include}
181
182 cp .config %{BUILDROOT}/usr/lib/modules/${fullversion}/build
183 cp -a scripts %{BUILDROOT}/usr/lib/modules/${fullversion}/build
184 find %{BUILDROOT}/usr/lib/modules/${fullversion}/build/scripts -name "*.o" \
185 -exec rm -vf {} \;
186
187 cp -a --parents arch/%{kernel_arch}/include \
188 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
189 cp -a include %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include
190
191 # Make sure we can build external modules.
192 touch -r %{BUILDROOT}/usr/lib/modules/${fullversion}/build/Makefile \
193 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include/linux/version.h
194 touch -r %{BUILDROOT}/usr/lib/modules/${fullversion}/build/.config \
195 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/autoconf.h
196 cp %{BUILDROOT}/usr/lib/modules/${fullversion}/build/.config \
197 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include/config/auto.conf
198
199 find %{BUILDROOT}/usr/lib/modules/${fullversion} -name "*.ko" -type f | \
200 xargs --no-run-if-empty chmod u+x
201
202 # Move all development files to /usr/src.
203 mkdir -p %{BUILDROOT}/usr/src/kernels
204 mv %{BUILDROOT}/usr/lib/modules/${fullversion}/build \
205 %{BUILDROOT}/usr/src/kernels/${fullversion}
206 ln -sf ../../../src/kernels/${fullversion} \
207 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
208
209 # Fix permissions.
210 find %{BUILDROOT}/usr/src/kernels -name "modules.order" \
211 -exec chmod 644 {} \;
212
213 find %{BUILDROOT}/usr/src/kernels -name ".*.cmd" -exec rm -f {} \;
214
215 # remove device tree compiler because there are dead links
216 rm -rf %{BUILDROOT}/usr/src/kernels/*/scripts/dtc
217 }
218
219 # Build the kernel
220 build_kernel "generic"
221
222 # cpupower
223 chmod +x tools/power/cpupower/utils/version-gen.sh
224 make -C tools/power/cpupower CPUFREQ_BENCH=false %{PARALLELISMFLAGS}
225
226 pushd tools/thermal/tmon
227 make
228 popd
229 end
230
231 install
232 # When no kernels are configured, we create a default config
233 # which enables us to install at least the header files.
234 [ -n "%{kernels}" ] || make ARCH=%{kernel_arch} defconfig
235
236 # Install the header files
237 make ARCH=%{kernel_arch} INSTALL_HDR_PATH=dest headers_install
238 mkdir -pv %{BUILDROOT}/usr/include
239 find dest/include \( -name .install -o -name ..install.cmd \) -delete
240 cp -rv dest/include/* %{BUILDROOT}/usr/include
241
242 # Glibc provides these headers
243 rm -rfv %{BUILDROOT}/usr/include/scsi \
244 %{BUILDROOT}/usr/include/asm*/atomic.h \
245 %{BUILDROOT}/usr/include/asm*/io.h \
246 %{BUILDROOT}/usr/include/asm*/irq.h
247
248 # Remove all firmware files which are distributed by linux-firmware
249 rm -rfv %{BUILDROOT}/lib/firmware
250
251 # Install tools.
252 # cpupower
253 make -C tools/power/cpupower DESTDIR=%{BUILDROOT} libdir=%{libdir} \
254 mandir=%{mandir} CPUFREQ_BENCH=false install
255
256 chmod 0755 %{BUILDROOT}%{libdir}/libcpupower.so*
257
258 # tmon
259 pushd tools/thermal/tmon
260 make INSTALL_ROOT=%{BUILDROOT} install
261 popd
262 end
263 end
264
265 packages
266 package kernel-tools
267 summary = Assortment of tools for the Linux kernel.
268 description = %{summary}
269
270 filter_requires
271 perl>=[0-9]\:.*
272 end
273 end
274
275 package kernel-tools-debuginfo
276 template DEBUGINFO
277 end
278
279 package kernel
280 summary = The Linux kernel %{fullver}
281
282 prerequires
283 /sbin/depmod
284 end
285
286 provides
287 kernel = %{fullver}
288 end
289
290 requires
291 dracut
292 kernel-updater
293 linux-firmware
294 intel-microcode
295 end
296
297 files
298 /boot/System.map-%{fullver}
299 /boot/dtb-%{fullver}
300 /boot/vmlinuz-%{fullver}
301 /boot/initramfs-%{fullver}.img
302 /usr/lib/modules/%{fullver}
303 end
304
305 _posttrans
306 kernel-updater install %{fullver}
307 end
308
309 script posttransin
310 %{_posttrans}
311 end
312
313 script posttransup
314 %{_posttrans}
315 end
316
317 script postun
318 kernel-updater uninstall %{fullver}
319 end
320 end
321
322 package kernel-devel
323 summary = Development files of kernel-%{fullver}
324 description
325 %{summary}
326
327 Install this package in order to compile modules for
328 kernel release %{fullver}.
329 end
330
331 provides
332 kernel-devel = %{thisver}
333 end
334
335 filter_requires
336 perl>=[0-9]\:.*
337 end
338
339 files
340 /usr/lib/modules/%{fullver}/build
341 /usr/lib/modules/%{fullver}/source
342 /usr/src/kernels/%{fullver}
343 end
344 end
345
346 package kernel-headers
347 summary = Header files of the kernel release %{fullver}
348 desciption = %{summary}
349
350 files
351 /usr/include
352 end
353 end
354 end