]> git.ipfire.org Git - ipfire-3.x.git/blob - kernel/kernel.nm
kernel: remover perf
[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 = 4.12.4
8 release = 2
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 = http://www.kernel.org/pub/linux/kernel/v4.x/
29 sources = %{thisapp}.tar.xz
30
31 build
32 kernel_logo = /usr/share/pixmaps/kernel-logo.ppm
33
34 requires
35 asciidoc
36 audit-devel
37 bc
38 binutils >= 2.25
39 binutils-devel
40 bison
41 elfutils-devel
42 flex
43 gcc >= 4.9
44 gcc-plugin-devel
45 gettext
46 hostname
47 libunwind-devel
48 ncurses-devel
49 net-tools
50 newt-devel
51 pciutils-devel
52 perl
53 python-devel
54 openssl-devel
55 slang-devel
56 xmlto
57 xz
58
59 /sbin/depmod
60 %{kernel_logo}
61 end
62
63 # A list of kernels to build.
64 kernels =
65
66 # Arguments that are passed to the kernel build command
67 # Clearning any host CFLAGS or LDFLAGS for kernel build
68 kernel_build_flags = CFLAGS= LDFLAGS=
69
70 kernel_arch = %{DISTRO_PLATFORM}
71 kernel_target = bzImage
72 kernel_image = arch/%{kernel_arch}/boot/%{kernel_target}
73
74 if "%{DISTRO_ARCH}" == "x86_64"
75 build_kernel_default = 1
76 end
77
78 if "%{DISTRO_ARCH}" == "aarch64"
79 build_kernel_default = 1
80
81 kernel_arch = arm64
82 kernel_target = Image.gz
83 end
84
85 if "%{DISTRO_ARCH}" == "armv7hl"
86 # Build the default unified kernel.
87 build_kernel_default = 1
88
89 kernel_target = zImage
90 end
91
92 # mkimage is a requirement to build uImage images.
93 if "%{kernel_target}" == "uImage"
94 requires += u-boot-tools
95 end
96
97 # Build default kernel.
98 if "%{build_kernel_default}" == "1"
99 kernels += default
100 end
101
102 prepare_cmds
103 # Disable the colorize plugin.
104 # It's generally very nice but it clutters our
105 # logfiles.
106 sed -e "/^COLORIZE_PLUGIN_CFLAGS/d" \
107 -i Makefile
108
109 sed -e "s/^HOSTCFLAGS.*=.*/& -fPIC/g" -i Makefile
110
111 cp -vf %{kernel_logo} \
112 drivers/video/logo/logo_linux_clut224.ppm
113
114 # Get rid of unwanted files resulting from patch fuzz.
115 find . \( -name "*.orig" -o -name "*~" \) -exec rm -f {} \; >/dev/null
116
117 # Remove unnecessary SCM files.
118 find . -name .gitignore -exec rm -f {} \; >/dev/null
119
120 # This prevents scripts/setlocalversion from mucking with our version numbers.
121 touch .scmversion
122
123 mkdir -pv configs
124
125 cd %{DIR_SOURCE}
126 configure_kernel() {
127 local flavour=${1}
128 local suffix
129 if [ "${flavour}" != "default" ]; then
130 suffix="-${flavour}"
131 fi
132
133 scripts/configure --kernel-dir=%{DIR_APP} \
134 merge %{DISTRO_ARCH} ${flavour} %{DIR_APP}/configs/config.${flavour}
135 }
136
137 # Generate configuration files for all kernels we are going to
138 # build.
139 for kernel in %{kernels}; do
140 configure_kernel ${kernel}
141 done
142
143 end
144
145 build
146 build_kernel() {
147 local flavour=${1}
148 local suffix
149 local localversion="%{localversion}"
150 local fullversion="%{fullver}"
151 if [ "${flavour}" != "default" ]; then
152 suffix="-${flavour}"
153 localversion="${localversion}.${flavour}"
154 fullversion="${fullversion}.${flavour}"
155 fi
156
157 # Label the build.
158 sed -i Makefile \
159 -e "s/^EXTRAVERSION.*/EXTRAVERSION = -${localversion}/"
160
161 # Clean up the source tree.
162 make mrproper
163
164 # Install configuration file.
165 cp configs/config.${flavour} .config
166 cat .config
167
168 # Run the build.
169 make ARCH=%{kernel_arch} oldnoconfig >/dev/null
170 make ARCH=%{kernel_arch} CC="gcc -fno-PIE" %{kernel_target} modules \
171 %{kernel_build_flags} %{PARALLELISMFLAGS}
172
173 # Compile Flattened Device Tree database
174 case "${DISTRO_ARCH}" in
175 aarch64|arm*)
176 make ARCH=%{kernel_arch} dtbs
177
178 mkdir -pv %{BUILDROOT}/boot/dtb-${fullversion}
179 for file in arch/arm/boot/dts/*.dtb; do
180 [ -e "${file}" ] || continue
181
182 install -m 644 ${file} %{BUILDROOT}/boot/dtb-${fullversion} || exit 1
183 rm -f ${file}
184 done
185 ;;
186 esac
187
188 # Install the results.
189 mkdir -pv %{BUILDROOT}/boot %{BUILDROOT}/usr/lib/modules/${fullversion}
190 install -m 755 %{kernel_image} %{BUILDROOT}/boot/vmlinuz-${fullversion}
191 install -m 644 .config %{BUILDROOT}/boot/config-${fullversion}
192 install -m 644 System.map %{BUILDROOT}/boot/System.map-${fullversion}
193
194 # Create empty initramfs (20M).
195 dd if=/dev/zero of=%{BUILDROOT}/boot/initramfs-${fullversion}.img bs=1M count=20
196
197 # Install modules.
198 make ARCH=%{kernel_arch} INSTALL_MOD_PATH=%{BUILDROOT}/usr mod-fw= V=1 \
199 KERNELRELEASE=${fullversion} modules_install
200
201 # Create an empty settings file for dracut
202 mkdir -p %{BUILDROOT}/etc/ld.so.conf.d
203 echo "# Placeholder file, no vDSO hwcap entries used in this kernel." \
204 > %{BUILDROOT}/etc/ld.so.conf.d/kernel-${fullversion}.conf
205
206 # And now the scary looking part.
207 #
208 # Recreate source and build links.
209 rm -f %{BUILDROOT}/usr/lib/modules/${fullversion}/{build,source}
210 mkdir -p %{BUILDROOT}/usr/lib/modules/${fullversion}/build
211 ln -sf build %{BUILDROOT}/usr/lib/modules/${fullversion}/source
212
213 # Create dirs for extra modules.
214 mkdir -p %{BUILDROOT}/usr/lib/modules/${fullversion}/extra
215
216 cp --parents $(find -type f -name "Makefile*" -o -name "Kconfig*") \
217 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
218 cp Module.symvers System.map \
219 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
220 rm -rf %{BUILDROOT}/usr/lib/modules/${fullversion}/build/{Documentation,scripts,include}
221
222 cp .config %{BUILDROOT}/usr/lib/modules/${fullversion}/build
223 cp -a scripts %{BUILDROOT}/usr/lib/modules/${fullversion}/build
224 find %{BUILDROOT}/usr/lib/modules/${fullversion}/build/scripts -name "*.o" \
225 -exec rm -vf {} \;
226
227 cp -a --parents arch/%{kernel_arch}/include \
228 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
229 cp -a include %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include
230
231 # Make sure we can build external modules.
232 touch -r %{BUILDROOT}/usr/lib/modules/${fullversion}/build/Makefile \
233 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include/linux/version.h
234 touch -r %{BUILDROOT}/usr/lib/modules/${fullversion}/build/.config \
235 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/autoconf.h
236 cp %{BUILDROOT}/usr/lib/modules/${fullversion}/build/.config \
237 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include/config/auto.conf
238
239 find %{BUILDROOT}/usr/lib/modules/${fullversion} -name "*.ko" -type f | \
240 xargs --no-run-if-empty chmod u+x
241
242 # Move all development files to /usr/src.
243 mkdir -p %{BUILDROOT}/usr/src/kernels
244 mv %{BUILDROOT}/usr/lib/modules/${fullversion}/build \
245 %{BUILDROOT}/usr/src/kernels/${fullversion}
246 ln -sf ../../../src/kernels/${fullversion} \
247 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
248
249 # Fix permissions.
250 find %{BUILDROOT}/usr/src/kernels -name "modules.order" \
251 -exec chmod 644 {} \;
252
253 find %{BUILDROOT}/usr/src/kernels -name ".*.cmd" -exec rm -f {} \;
254
255 # remove device tree compiler because there are dead links
256 rm -rf %{BUILDROOT}/usr/src/kernels/*/scripts/dtc
257 }
258
259 for kernel in %{kernels}; do
260 build_kernel ${kernel}
261 done
262
263 # cpupower
264 chmod +x tools/power/cpupower/utils/version-gen.sh
265 make -C tools/power/cpupower CPUFREQ_BENCH=false %{PARALLELISMFLAGS}
266
267 pushd tools/thermal/tmon
268 make
269 popd
270 end
271
272 install
273 # When no kernels are configured, we create a default config
274 # which enables us to install at least the header files.
275 [ -n "%{kernels}" ] || make ARCH=%{kernel_arch} defconfig
276
277 # Install the header files
278 make ARCH=%{kernel_arch} INSTALL_HDR_PATH=dest headers_install
279 mkdir -pv %{BUILDROOT}/usr/include
280 find dest/include \( -name .install -o -name ..install.cmd \) -delete
281 cp -rv dest/include/* %{BUILDROOT}/usr/include
282
283 # Glibc provides these headers
284 rm -rfv %{BUILDROOT}/usr/include/scsi \
285 %{BUILDROOT}/usr/include/asm*/atomic.h \
286 %{BUILDROOT}/usr/include/asm*/io.h \
287 %{BUILDROOT}/usr/include/asm*/irq.h
288
289 # Remove all firmware files which are distributed by linux-firmware
290 rm -rfv %{BUILDROOT}/lib/firmware
291
292 # Install tools.
293 # cpupower
294 make -C tools/power/cpupower DESTDIR=%{BUILDROOT} libdir=%{libdir} \
295 mandir=%{mandir} CPUFREQ_BENCH=false install
296
297 chmod 0755 %{BUILDROOT}%{libdir}/libcpupower.so*
298
299 # tmon
300 pushd tools/thermal/tmon
301 make INSTALL_ROOT=%{BUILDROOT} install
302 popd
303 end
304 end
305
306 packages
307 template KERNEL
308 kernel_name = kernel
309 kernel_release = %{fullver}
310
311 summary = The Linux kernel %{kernel_release}.
312
313 prerequires
314 /sbin/depmod
315 end
316
317 provides
318 kernel=%{kernel_release}
319 end
320
321 requires
322 dracut
323 grubby
324 linux-firmware
325 end
326
327 files
328 /boot/System.map-%{kernel_release}
329 /boot/dtb-%{kernel_release}
330 /boot/vmlinuz-%{kernel_release}
331 /boot/initramfs-%{kernel_release}.img
332 /etc/ld.so.conf.d/kernel-%{kernel_release}.conf
333 /usr/lib/modules/%{kernel_release}
334 end
335
336 _posttrans
337 /sbin/new-kernel-pkg --package %{kernel_name} --mkinitrd --dracut --depmod --update %{kernel_release}
338 /sbin/new-kernel-pkg --package %{kernel_name} --rpmposttrans %{kernel_release}
339 end
340
341 script posttransin
342 %{_posttrans}
343 end
344
345 script posttransup
346 %{_posttrans}
347 end
348
349 script postin
350 /sbin/new-kernel-pkg --package %{kernel_name} --install %{kernel_release}
351 end
352
353 script postup
354 /sbin/new-kernel-pkg --package %{kernel_name} --install %{kernel_release}
355 end
356
357 script preun
358 /sbin/new-kernel-pkg --rminitrd --rmmoddep --remove %{kernel_release}
359 end
360 end
361
362 template KERNELDEVEL
363 kernel_release = %{fullver}
364
365 summary = Development files of kernel-%{kernel_release}.
366 description
367 %{summary}
368
369 Install this package in order to compile modules for
370 kernel release %{kernel_release}.
371 end
372
373 provides
374 kernel-devel = %{thisver}
375 end
376
377 filter_requires
378 perl>=[0-9]\:.*
379 end
380
381 files
382 /usr/lib/modules/%{kernel_release}/build
383 /usr/lib/modules/%{kernel_release}/source
384 /usr/src/kernels/%{kernel_release}
385 end
386 end
387
388 if "%{build_kernel_default}" == "1"
389 if "%{DISTRO_ARCH}" == "armv7hl"
390 package kernel
391 template KERNEL
392
393 kernel_name = kernel
394 kernel_release = %{fullver}
395
396 # Replace the Exynos kernel.
397 obsoletes += kernel-exynos < %{kernel_release}
398 conflicts += kernel-exynos < %{kernel_release}
399
400 # Replace the OMAP kernel.
401 obsoletes += kernel-omap < %{kernel_release}
402 conflicts += kernel-omap < %{kernel_release}
403 end
404
405 package kernel-devel
406 template KERNELDEVEL
407
408 kernel_name = kernel
409 kernel_release = %{fullver}
410
411 # Replace the Exynos kernel.
412 obsoletes += kernel-exynos-devel < %{kernel_release}
413 conflicts += kernel-exynos-devel < %{kernel_release}
414
415 # Replace the OMAP kernel.
416 obsoletes += kernel-omap-devel < %{kernel_release}
417 conflicts += kernel-omap-devel < %{kernel_release}
418 end
419
420 else
421 package kernel
422 template KERNEL
423
424 kernel_name = kernel
425 kernel_release = %{fullver}
426 end
427
428 package kernel-devel
429 template KERNELDEVEL
430
431 kernel_name = kernel
432 kernel_release = %{fullver}
433 end
434 end
435 end
436
437 package kernel-headers
438 summary = Header files of the kernel release %{fullver}.
439 desciption = %{summary}
440
441 files
442 /usr/include
443 end
444 end
445
446 package kernel-tools
447 summary = Assortment of tools for the Linux kernel.
448 description = %{summary}
449
450 filter_requires
451 perl>=[0-9]\:.*
452 end
453
454 files
455 /
456 !/boot
457 !/usr/include
458 !/usr/lib/modules
459 !/usr/src
460 !/usr/src/debug
461 !/usr/lib/debug
462 end
463 end
464 end