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