]> git.ipfire.org Git - ipfire-3.x.git/blob - kernel/kernel.nm
kernel: Remove ARM LPAE image
[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.1.7
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 = 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.23.51.0.3-3
39 binutils-devel
40 bison
41 elfutils-devel
42 flex
43 gcc >= 4.9
44 gcc-plugin-devel
45 gettext
46 libunwind-devel
47 ncurses-devel
48 net-tools
49 newt-devel
50 pciutils-devel
51 perl
52 python-devel
53 slang-devel
54 xmlto
55 xz
56
57 /sbin/depmod
58 %{kernel_logo}
59 end
60
61 # i686 needs librmi for cpupower.
62 if "%{DISTRO_ARCH}" == "i686"
63 requires += liblrmi-devel
64 end
65
66 # A list of kernels to build.
67 kernels =
68
69 # Arguments that are passed to the kernel build command.
70 kernel_build_flags =
71
72 kernel_arch = %{DISTRO_PLATFORM}
73 kernel_target = bzImage
74 kernel_image = arch/%{kernel_arch}/boot/%{kernel_target}
75
76 if "%{DISTRO_ARCH}" == "i686"
77 # Build a default and legacy kernel for the
78 # i686 architecture.
79 build_kernel_default = 1
80 build_kernel_legacy = 1
81 end
82
83 if "%{DISTRO_ARCH}" == "x86_64"
84 build_kernel_default = 1
85 end
86
87 if "%{DISTRO_ARCH}" == "aarch64"
88 # Disable for now because it won't compile
89 build_kernel_default = 0
90
91 kernel_arch = arm64
92 kernel_target = Image.gz
93 end
94
95 if "%{DISTRO_ARCH}" == "armv7hl"
96 # Build the default unified kernel.
97 build_kernel_default = 1
98
99 kernel_target = zImage
100 end
101
102 # mkimage is a requirement to build uImage images.
103 if "%{kernel_target}" == "uImage"
104 requires += u-boot-tools
105 end
106
107 # Build default kernel.
108 if "%{build_kernel_default}" == "1"
109 kernels += default
110 end
111
112 # Build legacy kernel.
113 if "%{build_kernel_legacy}" == "1"
114 kernels += legacy
115 end
116
117 perf_make = make %{MAKETUNING} -C tools/perf V=1 WERROR=0 \
118 NO_LIBUNWIND=1 HAVE_CPLUS_DEMANGLE=1 NO_GTK2=1 NO_LIBNUMA=1 \
119 NO_STRLCPY=1 NO_BIONIC=1 prefix=%{prefix} perfexecdir=lib/perf-core
120
121 prepare_cmds
122 rm -f %{DIR_APP}/localversion-grsec
123
124 # Remove -Werror flag to fix ARMv5 build.
125 sed -e "s/-Werror//g" -i grsecurity/Makefile || :
126
127 # Disable the colorize plugin.
128 # It's generally very nice but it clutters our
129 # logfiles.
130 sed -e "/^COLORIZE_PLUGIN_CFLAGS/d" \
131 -i Makefile
132
133 sed -e "s/^HOSTCFLAGS.*=.*/& -fPIC/g" -i Makefile
134
135 cp -vf %{kernel_logo} \
136 drivers/video/logo/logo_linux_clut224.ppm
137
138 # Get rid of unwanted files resulting from patch fuzz.
139 find . \( -name "*.orig" -o -name "*~" \) -exec rm -f {} \; >/dev/null
140
141 # Remove unnecessary SCM files.
142 find . -name .gitignore -exec rm -f {} \; >/dev/null
143
144 # This prevents scripts/setlocalversion from mucking with our version numbers.
145 touch .scmversion
146
147 mkdir -pv configs
148
149 cd %{DIR_SOURCE}
150 configure_kernel() {
151 local flavour=${1}
152 local suffix
153 if [ "${flavour}" != "default" ]; then
154 suffix="-${flavour}"
155 fi
156
157 scripts/configure --kernel-dir=%{DIR_APP} \
158 merge %{DISTRO_ARCH} ${flavour} %{DIR_APP}/configs/config.${flavour}
159 }
160
161 # Generate configuration files for all kernels we are going to
162 # build.
163 for kernel in %{kernels}; do
164 configure_kernel ${kernel}
165 done
166
167 # Tools
168 # Prevent perf from installing any files in /usr/libexec
169 sed -i %{DIR_APP}/tools/perf/config/Makefile -e "s/libexec/lib/g"
170 end
171
172 build
173 build_kernel() {
174 local flavour=${1}
175 local suffix
176 local localversion="%{localversion}"
177 local fullversion="%{fullver}"
178 if [ "${flavour}" != "default" ]; then
179 suffix="-${flavour}"
180 localversion="${localversion}.${flavour}"
181 fullversion="${fullversion}.${flavour}"
182 fi
183
184 # Label the build.
185 sed -i Makefile \
186 -e "s/^EXTRAVERSION.*/EXTRAVERSION = -${localversion}/"
187
188 # Clean up the source tree.
189 make mrproper
190
191 # Install configuration file.
192 cp configs/config.${flavour} .config
193 cat .config
194
195 # Run the build.
196 make ARCH=%{kernel_arch} oldnoconfig >/dev/null
197 make ARCH=%{kernel_arch} CC="gcc -fno-PIE" %{kernel_target} modules \
198 %{kernel_build_flags} %{PARALLELISMFLAGS}
199
200 # Compile Flattened Device Tree database
201 case "${DISTRO_ARCH}" in
202 aarch64|arm*)
203 make ARCH=%{kernel_arch} dtbs
204
205 mkdir -pv %{BUILDROOT}/boot/dtb-${fullversion}
206 for file in arch/arm/boot/dts/*.dtb; do
207 [ -e "${file}" ] || continue
208
209 install -m 644 ${file} %{BUILDROOT}/boot/dtb-${fullversion} || exit 1
210 rm -f ${file}
211 done
212 ;;
213 esac
214
215 # Install the results.
216 mkdir -pv %{BUILDROOT}/boot %{BUILDROOT}/usr/lib/modules/${fullversion}
217 install -m 755 %{kernel_image} %{BUILDROOT}/boot/vmlinuz-${fullversion}
218 install -m 644 .config %{BUILDROOT}/boot/config-${fullversion}
219 install -m 644 System.map %{BUILDROOT}/boot/System.map-${fullversion}
220
221 # Create empty initramfs (20M).
222 dd if=/dev/zero of=%{BUILDROOT}/boot/initramfs-${fullversion}.img bs=1M count=20
223
224 # Install modules.
225 make ARCH=%{kernel_arch} INSTALL_MOD_PATH=%{BUILDROOT}/usr mod-fw= V=1 \
226 KERNELRELEASE=${fullversion} modules_install
227
228 # Install vdso.
229 case "%{DISTRO_ARCH}" in
230 i686)
231 make ARCH=%{kernel_arch} INSTALL_MOD_PATH=%{BUILDROOT} \
232 KERNELRELEASE=${fullversion} vdso_install
233 ;;
234 esac
235
236 # Create an empty settings file for dracut
237 mkdir -p %{BUILDROOT}/etc/ld.so.conf.d
238 echo "# Placeholder file, no vDSO hwcap entries used in this kernel." \
239 > %{BUILDROOT}/etc/ld.so.conf.d/kernel-${fullversion}.conf
240
241 # And now the scary looking part.
242 #
243 # Recreate source and build links.
244 rm -f %{BUILDROOT}/usr/lib/modules/${fullversion}/{build,source}
245 mkdir -p %{BUILDROOT}/usr/lib/modules/${fullversion}/build
246 ln -sf build %{BUILDROOT}/usr/lib/modules/${fullversion}/source
247
248 # Create dirs for extra modules.
249 mkdir -p %{BUILDROOT}/usr/lib/modules/${fullversion}/extra
250
251 cp --parents $(find -type f -name "Makefile*" -o -name "Kconfig*") \
252 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
253 cp Module.symvers System.map \
254 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
255 rm -rf %{BUILDROOT}/usr/lib/modules/${fullversion}/build/{Documentation,scripts,include}
256
257 cp .config %{BUILDROOT}/usr/lib/modules/${fullversion}/build
258 cp -a scripts %{BUILDROOT}/usr/lib/modules/${fullversion}/build
259 find %{BUILDROOT}/usr/lib/modules/${fullversion}/build/scripts -name "*.o" \
260 -exec rm -vf {} \;
261
262 cp -a --parents arch/%{kernel_arch}/include \
263 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
264 cp -a include %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include
265
266 # Make sure we can build external modules.
267 touch -r %{BUILDROOT}/usr/lib/modules/${fullversion}/build/Makefile \
268 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include/linux/version.h
269 touch -r %{BUILDROOT}/usr/lib/modules/${fullversion}/build/.config \
270 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/autoconf.h
271 cp %{BUILDROOT}/usr/lib/modules/${fullversion}/build/.config \
272 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include/config/auto.conf
273
274 find %{BUILDROOT}/usr/lib/modules/${fullversion} -name "*.ko" -type f | \
275 xargs --no-run-if-empty chmod u+x
276
277 # Move all development files to /usr/src.
278 mkdir -p %{BUILDROOT}/usr/src/kernels
279 mv %{BUILDROOT}/usr/lib/modules/${fullversion}/build \
280 %{BUILDROOT}/usr/src/kernels/${fullversion}
281 ln -sf ../../../src/kernels/${fullversion} \
282 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
283
284 # Fix permissions.
285 find %{BUILDROOT}/usr/src/kernels -name "modules.order" \
286 -exec chmod 644 {} \;
287
288 find %{BUILDROOT}/usr/src/kernels -name ".*.cmd" -exec rm -f {} \;
289 }
290
291 for kernel in %{kernels}; do
292 build_kernel ${kernel}
293 done
294
295 # Build tools.
296 # perf
297 %{perf_make} DESTDIR=%{BUILDROOT} all
298
299 # cpupower
300 chmod +x tools/power/cpupower/utils/version-gen.sh
301 make -C tools/power/cpupower CPUFREQ_BENCH=false %{PARALLELISMFLAGS}
302
303 if [ "%{DISTRO_ARCH}" = "x86_64" ]; then
304 pushd tools/power/cpupower/debug/x86_64
305 make %{MAKETUNING} centrino-decode powernow-k8-decode
306 popd
307 elif [ "%{DISTRO_ARCH}" = "i686" ]; then
308 pushd tools/power/cpupower/debug/i386
309 make %{MAKETUNING} centrino-decode powernow-k8-decode
310 popd
311 fi
312
313 # Should be built for all x86 architectures
314 if [ "%{DISTRO_ARCH}" = "x86_64" ]; then
315 # Won't compile on i686
316 # x86_energy_perf_policy.c: In function ‘validate_cpuid’:
317 # x86_energy_perf_policy.c:154:2: error: PIC register clobbered by ‘ebx’ in ‘asm’
318 # asm("cpuid" : "=a" (fms), "=c" (ecx), "=d" (edx) : "a" (1) : "ebx");
319 # ^
320 pushd tools/power/x86/x86_energy_perf_policy
321 make
322 popd
323
324 # Same as above
325 pushd tools/power/x86/turbostat
326 make
327 popd
328 fi
329
330 pushd tools/thermal/tmon
331 make
332 popd
333 end
334
335 install
336 # When no kernels are configured, we create a default config
337 # which enables us to install at least the header files.
338 [ -n "%{kernels}" ] || make ARCH=%{kernel_arch} defconfig
339
340 # Install the header files
341 make ARCH=%{kernel_arch} INSTALL_HDR_PATH=dest headers_install
342 mkdir -pv %{BUILDROOT}/usr/include
343 find dest/include \( -name .install -o -name ..install.cmd \) -delete
344 cp -rv dest/include/* %{BUILDROOT}/usr/include
345
346 # Glibc provides these headers
347 rm -rfv %{BUILDROOT}/usr/include/scsi \
348 %{BUILDROOT}/usr/include/asm*/atomic.h \
349 %{BUILDROOT}/usr/include/asm*/io.h \
350 %{BUILDROOT}/usr/include/asm*/irq.h
351
352 # Remove all firmware files which are distributed by linux-firmware
353 rm -rfv %{BUILDROOT}/lib/firmware
354
355 # Install tools.
356 %{perf_make} DESTDIR=%{BUILDROOT} install-bin install-python_ext
357
358 # cpupower
359 make -C tools/power/cpupower DESTDIR=%{BUILDROOT} libdir=%{libdir} \
360 mandir=%{mandir} CPUFREQ_BENCH=false install
361
362 if [ "%{DISTRO_ARCH}" = "x86_64" ]; then
363 pushd tools/power/cpupower/debug/x86_64
364 install -m 755 centrino-decode \
365 %{BUILDROOT}/usr/bin/centrino-decode
366 install -m 755 powernow-k8-decode \
367 %{BUILDROOT}/usr/bin/powernow-k8-decode
368 popd
369 elif [ "%{DISTRO_ARCH}" = "i686" ]; then
370 pushd tools/power/cpupower/debug/i386
371 install -m 755 centrino-decode \
372 %{BUILDROOT}/usr/bin/centrino-decode
373 install -m 755 powernow-k8-decode \
374 %{BUILDROOT}/usr/bin/powernow-k8-decode
375 popd
376 fi
377
378 chmod 0755 %{BUILDROOT}%{libdir}/libcpupower.so*
379
380 # This should be built for all x86 architectures
381 if [ "%{DISTRO_ARCH}" = "x86_64" ]; then
382 mkdir -pv %{BUILDROOT}%{mandir}/man8
383
384 pushd tools/power/x86/x86_energy_perf_policy
385 make DESTDIR=%{BUILDROOT} install
386 popd
387
388 pushd tools/power/x86/turbostat
389 make DESTDIR=%{BUILDROOT} install
390 popd
391 fi
392
393 # tmon
394 pushd tools/thermal/tmon
395 make INSTALL_ROOT=%{BUILDROOT} install
396 popd
397 end
398 end
399
400 packages
401 template KERNEL
402 kernel_name = kernel
403 kernel_release = %{fullver}
404
405 summary = The Linux kernel %{kernel_release}.
406
407 prerequires
408 /sbin/depmod
409 end
410
411 provides
412 kernel=%{kernel_release}
413 end
414
415 requires
416 dracut
417 grubby
418 linux-firmware
419 end
420
421 files
422 /boot/System.map-%{kernel_release}
423 /boot/dtb-%{kernel_release}
424 /boot/vmlinuz-%{kernel_release}
425 /boot/initramfs-%{kernel_release}.img
426 /etc/ld.so.conf.d/kernel-%{kernel_release}.conf
427 /usr/lib/modules/%{kernel_release}
428 end
429
430 _posttrans
431 /sbin/new-kernel-pkg --package %{kernel_name} --mkinitrd --dracut --depmod --update %{kernel_release}
432 /sbin/new-kernel-pkg --package %{kernel_name} --rpmposttrans %{kernel_release}
433 end
434
435 script posttransin
436 %{_posttrans}
437 end
438
439 script posttransup
440 %{_posttrans}
441 end
442
443 script postin
444 /sbin/new-kernel-pkg --package %{kernel_name} --install %{kernel_release}
445 end
446
447 script postup
448 /sbin/new-kernel-pkg --package %{kernel_name} --install %{kernel_release}
449 end
450
451 script preun
452 /sbin/new-kernel-pkg --rminitrd --rmmoddep --remove %{kernel_release}
453 end
454 end
455
456 template KERNELDEVEL
457 kernel_release = %{fullver}
458
459 summary = Development files of kernel-%{kernel_release}.
460 description
461 %{summary}
462
463 Install this package in order to compile modules for
464 kernel release %{kernel_release}.
465 end
466
467 provides
468 kernel-devel = %{thisver}
469 end
470
471 filter_requires
472 perl>=[0-9]\:.*
473 end
474
475 files
476 /usr/lib/modules/%{kernel_release}/build
477 /usr/lib/modules/%{kernel_release}/source
478 /usr/src/kernels/%{kernel_release}
479 end
480 end
481
482 if "%{build_kernel_default}" == "1"
483 if "%{DISTRO_ARCH}" == "armv7hl"
484 package kernel
485 template KERNEL
486
487 kernel_name = kernel
488 kernel_release = %{fullver}
489
490 # Replace the Exynos kernel.
491 obsoletes += kernel-exynos < %{kernel_release}
492 conflicts += kernel-exynos < %{kernel_release}
493
494 # Replace the OMAP kernel.
495 obsoletes += kernel-omap < %{kernel_release}
496 conflicts += kernel-omap < %{kernel_release}
497 end
498
499 package kernel-devel
500 template KERNELDEVEL
501
502 kernel_name = kernel
503 kernel_release = %{fullver}
504
505 # Replace the Exynos kernel.
506 obsoletes += kernel-exynos-devel < %{kernel_release}
507 conflicts += kernel-exynos-devel < %{kernel_release}
508
509 # Replace the OMAP kernel.
510 obsoletes += kernel-omap-devel < %{kernel_release}
511 conflicts += kernel-omap-devel < %{kernel_release}
512 end
513
514 else
515 package kernel
516 template KERNEL
517
518 kernel_name = kernel
519 kernel_release = %{fullver}
520 end
521
522 package kernel-devel
523 template KERNELDEVEL
524
525 kernel_name = kernel
526 kernel_release = %{fullver}
527 end
528 end
529 end
530
531 if "%{build_kernel_legacy}" == "1"
532 package kernel-legacy
533 template KERNEL
534
535 kernel_name = kernel-legacy
536 kernel_release = %{fullver}.legacy
537 end
538
539 package kernel-legacy-devel
540 template KERNELDEVEL
541
542 kernel_name = kernel-legacy
543 kernel_release = %{fullver}.legacy
544 end
545 end
546
547 package kernel-headers
548 summary = Header files of the kernel release %{fullver}.
549 desciption = %{summary}
550
551 files
552 /usr/include
553 end
554 end
555
556 package kernel-tools
557 summary = Assortment of tools for the Linux kernel.
558 description = %{summary}
559
560 filter_requires
561 perl>=[0-9]\:.*
562 end
563
564 files
565 /
566 !/boot
567 !/usr/include
568 !/usr/lib/modules
569 !/usr/src
570 !/usr/src/debug
571 !/usr/lib/debug
572 end
573 end
574 end