]> git.ipfire.org Git - ipfire-3.x.git/blob - kernel/kernel.nm
kernel: Set all options as systemd wants them
[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 = 6
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 wireless-regdb
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