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