]> git.ipfire.org Git - people/arne_f/ipfire-3.x.git/blame - kernel/kernel.nm
kernel: Update to 4.4.10
[people/arne_f/ipfire-3.x.git] / kernel / kernel.nm
CommitLineData
166a6c21 1###############################################################################
802ea3af
MT
2# IPFire.org - An Open Source Firewall Solution #
3# Copyright (C) - IPFire Development Team <info@ipfire.org> #
166a6c21
MT
4###############################################################################
5
15a11c5b 6name = kernel
8e496662 7version = 4.4.10
364d5655 8release = 1
15a11c5b 9thisapp = linux-%{version}
166a6c21 10
81bb0557 11maintainer = Arne Fitzenreiter <arne.fitzenreiter@ipfire.org>
802ea3af
MT
12groups = System/Kernels
13url = http://www.kernel.org/
14license = GPLv2
15summary = The Linux kernel.
166a6c21 16
802ea3af 17description
4c928ab7
MT
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
166a6c21 21 input and output, etc.
802ea3af 22end
166a6c21 23
802ea3af 24# Version helper variables.
bcf38aec
MT
25localversion = %{release}.%{DISTRO_DISTTAG}.%{DISTRO_ARCH}
26fullver = %{version}-%{localversion}
802ea3af 27
94cce289 28source_dl = http://www.kernel.org/pub/linux/kernel/v4.x/
fe014038 29sources = %{thisapp}.tar.xz
802ea3af
MT
30
31build
6b6a8ff6
MT
32 kernel_logo = /usr/share/pixmaps/kernel-logo.ppm
33
802ea3af 34 requires
662414a4 35 asciidoc
81bb0557 36 audit-devel
7f6f4de5 37 bc
849a0073 38 binutils >= 2.25
bcf38aec 39 binutils-devel
c6e2a6c8 40 bison
bcf38aec 41 elfutils-devel
c6e2a6c8 42 flex
461b7e77 43 gcc >= 4.9
fe2de317 44 gcc-plugin-devel
6e9df6a3 45 gettext
849a0073 46 hostname
81bb0557 47 libunwind-devel
802ea3af 48 ncurses-devel
ebeed08a 49 net-tools
7c69f2c2
MT
50 newt-devel
51 pciutils-devel
802ea3af 52 perl
bcf38aec 53 python-devel
849a0073 54 openssl-devel
7c69f2c2 55 slang-devel
662414a4 56 xmlto
bf6ee3f7 57 xz
4c928ab7
MT
58
59 /sbin/depmod
6b6a8ff6 60 %{kernel_logo}
bcf38aec
MT
61 end
62
7c69f2c2
MT
63 # i686 needs librmi for cpupower.
64 if "%{DISTRO_ARCH}" == "i686"
65 requires += liblrmi-devel
13c9d848
MT
66 end
67
bcf38aec 68 # A list of kernels to build.
45088e83 69 kernels =
bcf38aec 70
572b4308
MT
71 # Arguments that are passed to the kernel build command.
72 kernel_build_flags =
73
34520606 74 kernel_arch = %{DISTRO_PLATFORM}
45088e83 75 kernel_target = bzImage
967da24b
MT
76 kernel_image = arch/%{kernel_arch}/boot/%{kernel_target}
77
bcf38aec 78 if "%{DISTRO_ARCH}" == "i686"
1c9b6c79 79 # Build a default and legacy kernel for the
45088e83
MT
80 # i686 architecture.
81 build_kernel_default = 1
1c9b6c79 82 build_kernel_legacy = 1
45088e83
MT
83 end
84
c112b2e3
MT
85 if "%{DISTRO_ARCH}" == "x86_64"
86 build_kernel_default = 1
c112b2e3
MT
87 end
88
d5383c43
MT
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
13c9d848 97 if "%{DISTRO_ARCH}" == "armv7hl"
7f6f4de5
MT
98 # Build the default unified kernel.
99 build_kernel_default = 1
100
7f6f4de5 101 kernel_target = zImage
967da24b
MT
102 end
103
104 # mkimage is a requirement to build uImage images.
105 if "%{kernel_target}" == "uImage"
106 requires += u-boot-tools
13c9d848
MT
107 end
108
45088e83
MT
109 # Build default kernel.
110 if "%{build_kernel_default}" == "1"
111 kernels += default
112 end
113
1c9b6c79
MT
114 # Build legacy kernel.
115 if "%{build_kernel_legacy}" == "1"
116 kernels += legacy
45088e83
MT
117 end
118
302e8df8
MT
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
802ea3af 123 prepare_cmds
5e856224
MT
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
802ea3af
MT
130 sed -e "s/^HOSTCFLAGS.*=.*/& -fPIC/g" -i Makefile
131
6b6a8ff6 132 cp -vf %{kernel_logo} \
802ea3af
MT
133 drivers/video/logo/logo_linux_clut224.ppm
134
bcf38aec
MT
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
ebeed08a
MT
141 # This prevents scripts/setlocalversion from mucking with our version numbers.
142 touch .scmversion
143
bcf38aec 144 mkdir -pv configs
4c928ab7
MT
145
146 cd %{DIR_SOURCE}
bcf38aec
MT
147 configure_kernel() {
148 local flavour=${1}
149 local suffix
150 if [ "${flavour}" != "default" ]; then
151 suffix="-${flavour}"
152 fi
153
4c928ab7
MT
154 scripts/configure --kernel-dir=%{DIR_APP} \
155 merge %{DISTRO_ARCH} ${flavour} %{DIR_APP}/configs/config.${flavour}
bcf38aec
MT
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
302e8df8
MT
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"
802ea3af
MT
167 end
168
169 build
bcf38aec
MT
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
802ea3af 180
ebeed08a
MT
181 # Label the build.
182 sed -i Makefile \
183 -e "s/^EXTRAVERSION.*/EXTRAVERSION = -${localversion}/"
184
bcf38aec
MT
185 # Clean up the source tree.
186 make mrproper
802ea3af 187
bcf38aec
MT
188 # Install configuration file.
189 cp configs/config.${flavour} .config
c6e2a6c8 190 cat .config
802ea3af 191
bcf38aec 192 # Run the build.
ebeed08a 193 make ARCH=%{kernel_arch} oldnoconfig >/dev/null
572b4308
MT
194 make ARCH=%{kernel_arch} CC="gcc -fno-PIE" %{kernel_target} modules \
195 %{kernel_build_flags} %{PARALLELISMFLAGS}
bcf38aec 196
9d4be168
MT
197 # Compile Flattened Device Tree database
198 case "${DISTRO_ARCH}" in
d5383c43 199 aarch64|arm*)
9d4be168
MT
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
bcf38aec 212 # Install the results.
c4ef5c45 213 mkdir -pv %{BUILDROOT}/boot %{BUILDROOT}/usr/lib/modules/${fullversion}
bcf38aec
MT
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.
81bb0557 222 make ARCH=%{kernel_arch} INSTALL_MOD_PATH=%{BUILDROOT}/usr mod-fw= V=1 \
bcf38aec 223 KERNELRELEASE=${fullversion} modules_install
c8f122e5
MT
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
802ea3af 232
bcf38aec 233 # Create an empty settings file for dracut
7c69f2c2 234 mkdir -p %{BUILDROOT}/etc/ld.so.conf.d
bcf38aec
MT
235 echo "# Placeholder file, no vDSO hwcap entries used in this kernel." \
236 > %{BUILDROOT}/etc/ld.so.conf.d/kernel-${fullversion}.conf
802ea3af 237
bcf38aec
MT
238 # And now the scary looking part.
239 #
240 # Recreate source and build links.
7c69f2c2
MT
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
802ea3af 244
bcf38aec 245 # Create dirs for extra modules.
7c69f2c2 246 mkdir -p %{BUILDROOT}/usr/lib/modules/${fullversion}/extra
802ea3af 247
7c69f2c2 248 cp --parents $(find -type f -name "Makefile*" -o -name "Kconfig*") \
c4ef5c45 249 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
7c69f2c2 250 cp Module.symvers System.map \
c4ef5c45 251 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
7c69f2c2 252 rm -rf %{BUILDROOT}/usr/lib/modules/${fullversion}/build/{Documentation,scripts,include}
bcf38aec 253
7c69f2c2
MT
254 cp .config %{BUILDROOT}/usr/lib/modules/${fullversion}/build
255 cp -a scripts %{BUILDROOT}/usr/lib/modules/${fullversion}/build
c4ef5c45 256 find %{BUILDROOT}/usr/lib/modules/${fullversion}/build/scripts -name "*.o" \
bcf38aec
MT
257 -exec rm -vf {} \;
258
7c69f2c2 259 cp -a --parents arch/%{kernel_arch}/include \
c4ef5c45 260 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
7c69f2c2 261 cp -a include %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include
bcf38aec
MT
262
263 # Make sure we can build external modules.
c4ef5c45
MT
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
7c69f2c2 268 cp %{BUILDROOT}/usr/lib/modules/${fullversion}/build/.config \
c4ef5c45
MT
269 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include/config/auto.conf
270
271 find %{BUILDROOT}/usr/lib/modules/${fullversion} -name "*.ko" -type f | \
bf6ee3f7 272 xargs --no-run-if-empty chmod u+x
bcf38aec 273
bcf38aec 274 # Move all development files to /usr/src.
7c69f2c2
MT
275 mkdir -p %{BUILDROOT}/usr/src/kernels
276 mv %{BUILDROOT}/usr/lib/modules/${fullversion}/build \
bcf38aec 277 %{BUILDROOT}/usr/src/kernels/${fullversion}
7c69f2c2 278 ln -sf ../../../src/kernels/${fullversion} \
c4ef5c45 279 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
bcf38aec 280
81bb0557
MT
281 # Fix permissions.
282 find %{BUILDROOT}/usr/src/kernels -name "modules.order" \
283 -exec chmod 644 {} \;
284
bcf38aec
MT
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
6e9df6a3
MT
291
292 # Build tools.
302e8df8
MT
293 # perf
294 %{perf_make} DESTDIR=%{BUILDROOT} all
295
6e9df6a3 296 # cpupower
7c69f2c2
MT
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
302e8df8 302 make %{MAKETUNING} centrino-decode powernow-k8-decode
7c69f2c2
MT
303 popd
304 elif [ "%{DISTRO_ARCH}" = "i686" ]; then
305 pushd tools/power/cpupower/debug/i386
302e8df8 306 make %{MAKETUNING} centrino-decode powernow-k8-decode
7c69f2c2 307 popd
45088e83 308 fi
302e8df8
MT
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
bcf38aec
MT
330 end
331
332 install
4c928ab7
MT
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
802ea3af 337 # Install the header files
c8f122e5 338 make ARCH=%{kernel_arch} INSTALL_HDR_PATH=dest headers_install
802ea3af
MT
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
15a11c5b
MT
349 # Remove all firmware files which are distributed by linux-firmware
350 rm -rfv %{BUILDROOT}/lib/firmware
bcf38aec
MT
351
352 # Install tools.
302e8df8 353 %{perf_make} DESTDIR=%{BUILDROOT} install-bin install-python_ext
6e9df6a3
MT
354
355 # cpupower
7c69f2c2
MT
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
45088e83 373 fi
7c69f2c2
MT
374
375 chmod 0755 %{BUILDROOT}%{libdir}/libcpupower.so*
302e8df8
MT
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
802ea3af
MT
394 end
395end
396
397packages
bcf38aec 398 template KERNEL
aa3ab846 399 kernel_name = kernel
bcf38aec
MT
400 kernel_release = %{fullver}
401
402 summary = The Linux kernel %{kernel_release}.
403
1c9b6c79 404 prerequires
4c928ab7 405 /sbin/depmod
1c9b6c79
MT
406 end
407
408 provides
409 kernel=%{kernel_release}
410 end
411
802ea3af 412 requires
4c928ab7
MT
413 dracut
414 grubby
802ea3af
MT
415 linux-firmware
416 end
ad1ea534 417
bcf38aec
MT
418 files
419 /boot/System.map-%{kernel_release}
9d4be168 420 /boot/dtb-%{kernel_release}
bcf38aec
MT
421 /boot/vmlinuz-%{kernel_release}
422 /boot/initramfs-%{kernel_release}.img
423 /etc/ld.so.conf.d/kernel-%{kernel_release}.conf
c4ef5c45 424 /usr/lib/modules/%{kernel_release}
bcf38aec
MT
425 end
426
aa3ab846 427 _posttrans
c8f9fe35
MT
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}
aa3ab846
MT
430 end
431
ad1ea534 432 script posttransin
aa3ab846
MT
433 %{_posttrans}
434 end
435
436 script posttransup
437 %{_posttrans}
438 end
439
440 script postin
c8f9fe35 441 /sbin/new-kernel-pkg --package %{kernel_name} --install %{kernel_release}
aa3ab846
MT
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}
bcf38aec
MT
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
10756fd5
MT
464 provides
465 kernel-devel = %{thisver}
466 end
467
bcf38aec
MT
468 filter_requires
469 perl>=[0-9]\:.*
ad1ea534
MT
470 end
471
bcf38aec 472 files
c4ef5c45
MT
473 /usr/lib/modules/%{kernel_release}/build
474 /usr/lib/modules/%{kernel_release}/source
bcf38aec 475 /usr/src/kernels/%{kernel_release}
ad1ea534 476 end
802ea3af 477 end
bcf38aec 478
45088e83 479 if "%{build_kernel_default}" == "1"
7f6f4de5
MT
480 if "%{DISTRO_ARCH}" == "armv7hl"
481 package kernel
482 template KERNEL
58dc2060 483
7f6f4de5
MT
484 kernel_name = kernel
485 kernel_release = %{fullver}
bcf38aec 486
0db4b328
MT
487 # Replace the Exynos kernel.
488 obsoletes += kernel-exynos < %{kernel_release}
489 conflicts += kernel-exynos < %{kernel_release}
490
7f6f4de5
MT
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
0db4b328
MT
502 # Replace the Exynos kernel.
503 obsoletes += kernel-exynos-devel < %{kernel_release}
504 conflicts += kernel-exynos-devel < %{kernel_release}
505
7f6f4de5
MT
506 # Replace the OMAP kernel.
507 obsoletes += kernel-omap-devel < %{kernel_release}
508 conflicts += kernel-omap-devel < %{kernel_release}
509 end
58dc2060 510
7f6f4de5
MT
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
45088e83 525 end
bcf38aec 526 end
81bb0557 527
1c9b6c79
MT
528 if "%{build_kernel_legacy}" == "1"
529 package kernel-legacy
45088e83 530 template KERNEL
bcf38aec 531
1c9b6c79
MT
532 kernel_name = kernel-legacy
533 kernel_release = %{fullver}.legacy
45088e83
MT
534 end
535
1c9b6c79 536 package kernel-legacy-devel
45088e83
MT
537 template KERNELDEVEL
538
1c9b6c79
MT
539 kernel_name = kernel-legacy
540 kernel_release = %{fullver}.legacy
45088e83 541 end
bcf38aec
MT
542 end
543
802ea3af 544 package kernel-headers
802ea3af
MT
545 summary = Header files of the kernel release %{fullver}.
546 desciption = %{summary}
c698e4be
MT
547
548 files
549 /usr/include
550 end
802ea3af 551 end
bcf38aec 552
ebeed08a
MT
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
ebeed08a 564 !/usr/include
c4ef5c45 565 !/usr/lib/modules
ebeed08a 566 !/usr/src
fe2de317
MT
567 !/usr/src/debug
568 !/usr/lib/debug
ebeed08a
MT
569 end
570 end
802ea3af 571end