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