From: Prarit Bhargava <prarit@xxxxxxxxxx> redhat/self-test: Update data set The previous commit changes the specfile output to only look at the information affected by the Makefile variables. Update the dataset. Signed-off-by: Prarit Bhargava <prarit@xxxxxxxxxx> diff --git a/redhat/self-test/data/centos-2585cf9dfaad.el7.spec b/redhat/self-test/data/centos-2585cf9dfaad.el7.spec index blahblah..blahblah 100755 --- a/redhat/self-test/data/centos-2585cf9dfaad.el7.spec +++ b/redhat/self-test/data/centos-2585cf9dfaad.el7.spec @@ -1,3050 +1,13 @@ -# All Global changes to build and install go here. -# Per the below section about __spec_install_pre, any rpm -# environment changes that affect %%install need to go -# here before the %%install macro is pre-built. - -# Disable LTO in userspace packages. -%global _lto_cflags %{nil} - -# Option to enable compiling with clang instead of gcc. -%bcond_with toolchain_clang - -%if %{with toolchain_clang} -%global toolchain clang -%endif - -# Compile the kernel with LTO (only supported when building with clang). -%bcond_with clang_lto - -%if %{with clang_lto} && %{without toolchain_clang} -{error:clang_lto requires --with toolchain_clang} -%endif - -# Cross compile on copr for arm -# See https://bugzilla.redhat.com/1879599 -%if 0%{?_with_cross_arm:1} -%global _target_cpu armv7hl -%global _arch arm -%global _build_arch arm -%global _with_cross 1 -%endif - -# The kernel's %%install section is special -# Normally the %%install section starts by cleaning up the BUILD_ROOT -# like so: -# -# %%__spec_install_pre %%{___build_pre}\ -# [ "$RPM_BUILD_ROOT" != "/" ] && rm -rf "${RPM_BUILD_ROOT}"\ -# mkdir -p `dirname "$RPM_BUILD_ROOT"`\ -# mkdir "$RPM_BUILD_ROOT"\ -# %%{nil} -# -# But because of kernel variants, the %%build section, specifically -# BuildKernel(), moves each variant to its final destination as the -# variant is built. This violates the expectation of the %%install -# section. As a result we snapshot the current env variables and -# purposely leave out the removal section. All global wide changes -# should be added above this line otherwise the %%install section -# will not see them. -%global __spec_install_pre %{___build_pre} - -# At the time of this writing (2019-03), RHEL8 packages use w2.xzdio -# compression for rpms (xz, level 2). -# Kernel has several large (hundreds of mbytes) rpms, they take ~5 mins -# to compress by single-threaded xz. Switch to threaded compression, -# and from level 2 to 3 to keep compressed sizes close to "w2" results. -# -# NB: if default compression in /usr/lib/rpm/redhat/macros ever changes, -# this one might need tweaking (e.g. if default changes to w3.xzdio, -# change below to w4T.xzdio): -# -# This is disabled on i686 as it triggers oom errors - -%ifnarch i686 -%define _binary_payload w3T.xzdio -%endif - -Summary: The Linux kernel -%if 0%{?fedora} -%define secure_boot_arch x86_64 -%else -%define secure_boot_arch x86_64 aarch64 s390x ppc64le -%endif - -# Signing for secure boot authentication -%ifarch %{secure_boot_arch} -%global signkernel 1 -%else -%global signkernel 0 -%endif - -# Sign modules on all arches -%global signmodules 1 - -# Compress modules only for architectures that build modules -%ifarch noarch -%global zipmodules 0 -%else -%global zipmodules 1 -%endif - -%if %{zipmodules} -%global zipsed -e 's/\.ko$/\.ko.xz/' -# for parallel xz processes, replace with 1 to go back to single process -%endif - -%if 0%{?fedora} -%define primary_target fedora -%else -%define primary_target rhel -%endif - -# -# genspec.sh variables -# - -# Include Fedora files %global include_fedora 1 -# Include RHEL files %global include_rhel 1 -# Provide Patchlist.changelog file %global patchlist_changelog 1 -# Set released_kernel to 1 when the upstream source tarball contains a -# kernel release. (This includes prepatch or "rc" releases.) -# Set released_kernel to 0 when the upstream source tarball contains an -# unreleased kernel development snapshot. %global released_kernel 0 -# Set debugbuildsenabled to 1 to build separate base and debug kernels -# (on supported architectures). The kernel-debug-* subpackages will -# contain the debug kernel. -# Set debugbuildsenabled to 0 to not build a separate debug kernel, but -# to build the base kernel using the debug configuration. (Specifying -# the --with-release option overrides this setting.) -%define debugbuildsenabled 1 %define buildid .test %define specversion 5.16.0 %define patchversion 5.16 %define pkgrelease 0.rc5.6.test %define kversion 5 %define tarfile_release 5.16.0-0.rc5.6.test -# This is needed to do merge window version magic %define patchlevel 16 -# allow pkg_release to have configurable %%{?dist} tag %define specrelease 0.rc5.6%{?buildid}%{?dist} - -# -# End of genspec.sh variables -# - -%define pkg_release %{specrelease} - -# libexec dir is not used by the linker, so the shared object there -# should not be exported to RPM provides -%global __provides_exclude_from ^%{_libexecdir}/kselftests - -# The following build options are enabled by default, but may become disabled -# by later architecture-specific checks. These can also be disabled by using -# --without <opt> in the rpmbuild command, or by forcing these values to 0. -# -# standard kernel -%define with_up %{?_without_up: 0} %{?!_without_up: 1} -# kernel PAE (only valid for ARM (lpae)) -%define with_pae %{?_without_pae: 0} %{?!_without_pae: 1} -# kernel-debug -%define with_debug %{?_without_debug: 0} %{?!_without_debug: 1} -# kernel-zfcpdump (s390 specific kernel for zfcpdump) -%define with_zfcpdump %{?_without_zfcpdump: 0} %{?!_without_zfcpdump: 1} -# kernel-doc -%define with_doc %{?_without_doc: 0} %{?!_without_doc: 1} -# kernel-headers -%define with_headers %{?_without_headers: 0} %{?!_without_headers: 1} -%define with_cross_headers %{?_without_cross_headers: 0} %{?!_without_cross_headers: 1} -# perf -%define with_perf %{?_without_perf: 0} %{?!_without_perf: 1} -# tools -%define with_tools %{?_without_tools: 0} %{?!_without_tools: 1} -# bpf tool -%define with_bpftool %{?_without_bpftool: 0} %{?!_without_bpftool: 1} -# kernel-debuginfo -%define with_debuginfo %{?_without_debuginfo: 0} %{?!_without_debuginfo: 1} -# kernel-abi-stablelists -%define with_kernel_abi_stablelists %{?_without_kernel_abi_stablelists: 0} %{?!_without_kernel_abi_stablelists: 1} -# internal samples and selftests -%define with_selftests %{?_without_selftests: 0} %{?!_without_selftests: 1} -# -# Additional options for user-friendly one-off kernel building: -# -# Only build the base kernel (--with baseonly): -%define with_baseonly %{?_with_baseonly: 1} %{?!_with_baseonly: 0} -# Only build the pae kernel (--with paeonly): -%define with_paeonly %{?_with_paeonly: 1} %{?!_with_paeonly: 0} -# Only build the debug kernel (--with dbgonly): -%define with_dbgonly %{?_with_dbgonly: 1} %{?!_with_dbgonly: 0} -# Control whether we perform a compat. check against published ABI. -%define with_kabichk %{?_without_kabichk: 0} %{?!_without_kabichk: 1} -# Temporarily disable kabi checks until RC. -%define with_kabichk 0 -# Control whether we perform a compat. check against DUP ABI. -%define with_kabidupchk %{?_with_kabidupchk: 1} %{?!_with_kabidupchk: 0} -# -# Control whether to run an extensive DWARF based kABI check. -# Note that this option needs to have baseline setup in SOURCE300. -%define with_kabidwchk %{?_without_kabidwchk: 0} %{?!_without_kabidwchk: 1} -%define with_kabidw_base %{?_with_kabidw_base: 1} %{?!_with_kabidw_base: 0} -# -# Control whether to install the vdso directories. -%define with_vdso_install %{?_without_vdso_install: 0} %{?!_without_vdso_install: 1} -# -# should we do C=1 builds with sparse -%define with_sparse %{?_with_sparse: 1} %{?!_with_sparse: 0} -# -# Cross compile requested? -%define with_cross %{?_with_cross: 1} %{?!_with_cross: 0} -# -# build a release kernel on rawhide -%define with_release %{?_with_release: 1} %{?!_with_release: 0} - -# verbose build, i.e. no silent rules and V=1 -%define with_verbose %{?_with_verbose: 1} %{?!_with_verbose: 0} - -# -# check for mismatched config options -%define with_configchecks %{?_without_configchecks: 0} %{?!_without_configchecks: 1} - -# -# gcov support -%define with_gcov %{?_with_gcov:1}%{?!_with_gcov:0} - -# -# ipa_clone support -%define with_ipaclones %{?_without_ipaclones: 0} %{?!_without_ipaclones: 1} - -# Want to build a vanilla kernel build without any non-upstream patches? -%define with_vanilla %{?_with_vanilla: 1} %{?!_with_vanilla: 0} - -%if 0%{?fedora} -# Kernel headers are being split out into a separate package -%define with_headers 0 -%define with_cross_headers 0 -# no ipa_clone for now -%define with_ipaclones 0 -# no stablelist -%define with_kernel_abi_stablelists 0 -# Fedora builds these separately -%define with_perf 0 -%define with_tools 0 -%define with_bpftool 0 -# selftests turns on bpftool -%define with_selftests 0 -%endif - -%if %{with_verbose} -%define make_opts V=1 -%else -%define make_opts -s -%endif - -%if %{with toolchain_clang} -%ifarch s390x ppc64le -%global llvm_ias 0 -%else -%global llvm_ias 1 -%endif -%global clang_make_opts HOSTCC=clang CC=clang LLVM_IAS=%{llvm_ias} -%if %{with clang_lto} -%global clang_make_opts %{clang_make_opts} LD=ld.lld HOSTLD=ld.lld AR=llvm-ar NM=llvm-nm HOSTAR=llvm-ar HOSTNM=llvm-nm -%endif -%global make_opts %{make_opts} %{clang_make_opts} -# clang does not support the -fdump-ipa-clones option -%global with_ipaclones 0 -%endif - -# turn off debug kernel and kabichk for gcov builds -%if %{with_gcov} -%define with_debug 0 -%define with_kabichk 0 -%define with_kabidupchk 0 -%define with_kabidwchk 0 -%define with_kabidw_base 0 -%define with_kernel_abi_stablelists 0 -%endif - -# turn off kABI DWARF-based check if we're generating the base dataset -%if %{with_kabidw_base} -%define with_kabidwchk 0 -%endif - -# kpatch_kcflags are extra compiler flags applied to base kernel -# -fdump-ipa-clones is enabled only for base kernels on selected arches -%if %{with_ipaclones} -%ifarch x86_64 ppc64le -%define kpatch_kcflags -fdump-ipa-clones -%else -%define with_ipaclones 0 -%endif -%endif - -%define make_target bzImage -%define image_install_path boot - -%define KVERREL %{version}-%{release}.%{_target_cpu} -%define KVERREL_RE %(echo %KVERREL | sed 's/+/[+]/g') -%define hdrarch %_target_cpu -%define asmarch %_target_cpu - -%if 0%{!?nopatches:1} -%define nopatches 0 -%endif - -%if %{with_vanilla} -%define nopatches 1 -%endif - -%if %{with_release} -%define debugbuildsenabled 1 -%endif - -%if !%{with_debuginfo} -%define _enable_debug_packages 0 -%endif -%define debuginfodir /usr/lib/debug -# Needed because we override almost everything involving build-ids -# and debuginfo generation. Currently we rely on the old alldebug setting. -%global _build_id_links alldebug - -# kernel PAE is only built on ARMv7 -%ifnarch armv7hl -%define with_pae 0 -%endif - -# if requested, only build base kernel -%if %{with_baseonly} -%define with_pae 0 -%define with_debug 0 -%define with_vdso_install 0 -%define with_perf 0 -%define with_tools 0 -%define with_bpftool 0 -%define with_kernel_abi_stablelists 0 -%define with_selftests 0 -%define with_cross 0 -%define with_cross_headers 0 -%define with_ipaclones 0 -%endif - -# if requested, only build pae kernel -%if %{with_paeonly} -%define with_up 0 -%define with_debug 0 -%endif - -# if requested, only build debug kernel -%if %{with_dbgonly} -%define with_up 0 -%define with_vdso_install 0 -%define with_perf 0 -%define with_tools 0 -%define with_bpftool 0 -%define with_kernel_abi_stablelists 0 -%define with_selftests 0 -%define with_cross 0 -%define with_cross_headers 0 -%define with_ipaclones 0 -%endif - -# turn off kABI DUP check and DWARF-based check if kABI check is disabled -%if !%{with_kabichk} -%define with_kabidupchk 0 -%define with_kabidwchk 0 -%endif - -%if %{with_vdso_install} -%define use_vdso 1 -%endif - -# selftests require bpftool to be built -%if %{with_selftests} -%define with_bpftool 1 -%endif - -%ifnarch noarch -%define with_kernel_abi_stablelists 0 -%endif - -# Overrides for generic default options - -# only package docs noarch -%ifnarch noarch -%define with_doc 0 -%define doc_build_fail true -%endif - -%if 0%{?fedora} -# don't do debug builds on anything but i686 and x86_64 -%ifnarch i686 x86_64 -%define with_debug 0 -%endif -%endif - -# don't build noarch kernels or headers (duh) -%ifarch noarch -%define with_up 0 -%define with_headers 0 -%define with_cross_headers 0 -%define with_tools 0 -%define with_perf 0 -%define with_bpftool 0 -%define with_selftests 0 -%define with_debug 0 -%define all_arch_configs kernel-%{version}-*.config -%endif - -# sparse blows up on ppc -%ifnarch ppc64le -%define with_sparse 0 -%endif - -# zfcpdump mechanism is s390 only -%ifnarch s390x -%define with_zfcpdump 0 -%endif - -%if 0%{?fedora} -# This is not for Fedora -%define with_zfcpdump 0 -%endif - -# Per-arch tweaks - -%ifarch i686 -%define asmarch x86 -%define hdrarch i386 -%define all_arch_configs kernel-%{version}-i?86*.config -%define kernel_image arch/x86/boot/bzImage -%endif - -%ifarch x86_64 -%define asmarch x86 -%define all_arch_configs kernel-%{version}-x86_64*.config -%define kernel_image arch/x86/boot/bzImage -%endif - -%ifarch ppc64le -%define asmarch powerpc -%define hdrarch powerpc -%define make_target vmlinux -%define kernel_image vmlinux -%define kernel_image_elf 1 -%define use_vdso 0 -%define all_arch_configs kernel-%{version}-ppc64le*.config -%endif - -%ifarch s390x -%define asmarch s390 -%define hdrarch s390 -%define all_arch_configs kernel-%{version}-s390x.config -%define kernel_image arch/s390/boot/bzImage -%define vmlinux_decompressor arch/s390/boot/compressed/vmlinux -%endif - -%ifarch %{arm} -%define all_arch_configs kernel-%{version}-arm*.config -%define skip_nonpae_vdso 1 -%define asmarch arm -%define hdrarch arm -%define make_target bzImage -%define kernel_image arch/arm/boot/zImage -# http://lists.infradead.org/pipermail/linux-arm-kernel/2012-March/091404.html -%define kernel_mflags KALLSYMS_EXTRA_PASS=1 -# we only build headers/perf/tools on the base arm arches -# just like we used to only build them on i386 for x86 -%ifnarch armv7hl -%define with_headers 0 -%define with_cross_headers 0 -%endif -# These currently don't compile on armv7 -%define with_selftests 0 -%endif - -%ifarch aarch64 -%define all_arch_configs kernel-%{version}-aarch64*.config -%define asmarch arm64 -%define hdrarch arm64 -%define make_target Image.gz -%define kernel_image arch/arm64/boot/Image.gz -%endif - -# Should make listnewconfig fail if there's config options -# printed out? -%if %{nopatches} -%define with_configchecks 0 -%endif - -# To temporarily exclude an architecture from being built, add it to -# %%nobuildarches. Do _NOT_ use the ExclusiveArch: line, because if we -# don't build kernel-headers then the new build system will no longer let -# us use the previous build of that package -- it'll just be completely AWOL. -# Which is a BadThing(tm). - -# We only build kernel-headers on the following... -%if 0%{?fedora} -%define nobuildarches i386 -%else -%define nobuildarches i386 i686 %{arm} -%endif - -%ifarch %nobuildarches -# disable BuildKernel commands -%define with_up 0 -%define with_debug 0 -%define with_pae 0 -%define with_zfcpdump 0 - -%define with_debuginfo 0 -%define with_perf 0 -%define with_tools 0 -%define with_bpftool 0 -%define with_selftests 0 -%define _enable_debug_packages 0 -%endif - -# Architectures we build tools/cpupower on -%if 0%{?fedora} -%define cpupowerarchs %{ix86} x86_64 ppc64le %{arm} aarch64 -%else -%define cpupowerarchs i686 x86_64 ppc64le aarch64 -%endif - -%if 0%{?use_vdso} - -%if 0%{?skip_nonpae_vdso} -%define _use_vdso 0 -%else -%define _use_vdso 1 -%endif - -%else -%define _use_vdso 0 -%endif - -# If build of debug packages is disabled, we need to know if we want to create -# meta debug packages or not, after we define with_debug for all specific cases -# above. So this must be at the end here, after all cases of with_debug or not. -%define with_debug_meta 0 -%if !%{debugbuildsenabled} -%if %{with_debug} -%define with_debug_meta 1 -%endif -%define with_debug 0 -%endif - - -# -# Packages that need to be installed before the kernel is, because the %%post -# scripts use them. -# -%define kernel_prereq coreutils, systemd >= 203-2, /usr/bin/kernel-install -%define initrd_prereq dracut >= 027 - - -Name: kernel -License: GPLv2 and Redistributable, no modification permitted -URL: https://www.kernel.org/ -Version: %{specversion} -Release: %{pkg_release} -# DO NOT CHANGE THE 'ExclusiveArch' LINE TO TEMPORARILY EXCLUDE AN ARCHITECTURE BUILD. -# SET %%nobuildarches (ABOVE) INSTEAD -%if 0%{?fedora} -ExclusiveArch: noarch x86_64 s390x %{arm} aarch64 ppc64le -%else -ExclusiveArch: noarch i386 i686 x86_64 s390x %{arm} aarch64 ppc64le -%endif -ExclusiveOS: Linux -%ifnarch %{nobuildarches} -Requires: kernel-core-uname-r = %{KVERREL} -Requires: kernel-modules-uname-r = %{KVERREL} -%endif - - -# -# List the packages used during the kernel build -# -BuildRequires: kmod, patch, bash, coreutils, tar, git-core, which -BuildRequires: bzip2, xz, findutils, gzip, m4, perl-interpreter, perl-Carp, perl-devel, perl-generators, make, diffutils, gawk -BuildRequires: gcc, binutils, redhat-rpm-config, hmaccalc, bison, flex, gcc-c++ -BuildRequires: net-tools, hostname, bc, elfutils-devel -BuildRequires: dwarves -BuildRequires: python3-devel -BuildRequires: gcc-plugin-devel -# glibc-static is required for a consistent build environment (specifically -# CONFIG_CC_CAN_LINK_STATIC=y). -BuildRequires: glibc-static -%ifnarch %{nobuildarches} noarch -BuildRequires: bpftool -%endif -%if %{with_headers} -BuildRequires: rsync -%endif -%if %{with_doc} -BuildRequires: xmlto, asciidoc, python3-sphinx, python3-sphinx_rtd_theme -%endif -%if %{with_sparse} -BuildRequires: sparse -%endif -%if %{with_perf} -BuildRequires: zlib-devel binutils-devel newt-devel perl(ExtUtils::Embed) bison flex xz-devel -BuildRequires: audit-libs-devel -BuildRequires: java-devel -BuildRequires: libbpf-devel -BuildRequires: libbabeltrace-devel -BuildRequires: libtraceevent-devel -%ifnarch %{arm} s390x -BuildRequires: numactl-devel -%endif -%ifarch aarch64 -BuildRequires: opencsd-devel >= 1.0.0 -%endif -%endif -%if %{with_tools} -BuildRequires: gettext ncurses-devel -BuildRequires: libcap-devel libcap-ng-devel -%ifnarch s390x -BuildRequires: pciutils-devel -%endif -%ifarch i686 x86_64 -BuildRequires: libnl3-devel -%endif -%endif -%if %{with_tools} || %{signmodules} || %{signkernel} -BuildRequires: openssl-devel -%endif -%if %{with_bpftool} -BuildRequires: python3-docutils -BuildRequires: zlib-devel binutils-devel -%endif -%if %{with_selftests} -BuildRequires: clang llvm -%ifnarch %{arm} -BuildRequires: numactl-devel -%endif -BuildRequires: libcap-devel libcap-ng-devel rsync libmnl-devel -%endif -BuildConflicts: rhbuildsys(DiskFree) < 500Mb -%if %{with_debuginfo} -BuildRequires: rpm-build, elfutils -BuildConflicts: rpm < 4.13.0.1-19 -BuildConflicts: dwarves < 1.13 -# Most of these should be enabled after more investigation -%undefine _include_minidebuginfo -%undefine _find_debuginfo_dwz_opts -%undefine _unique_build_ids -%undefine _unique_debug_names -%undefine _unique_debug_srcs -%undefine _debugsource_packages -%undefine _debuginfo_subpackages -%global _find_debuginfo_opts -r -%global _missing_build_ids_terminate_build 1 -%global _no_recompute_build_ids 1 -%endif -%if %{with_kabidwchk} || %{with_kabidw_base} -BuildRequires: kabi-dw -%endif - -%if %{signkernel}%{signmodules} -BuildRequires: openssl -%if %{signkernel} -# ELN uses Fedora signing process, so exclude -%if 0%{?rhel}%{?centos} && !0%{?eln} -BuildRequires: system-sb-certs -%endif -%ifarch x86_64 aarch64 -BuildRequires: nss-tools -BuildRequires: pesign >= 0.10-4 -%endif -%endif -%endif - -%if %{with_cross} -BuildRequires: binutils-%{_build_arch}-linux-gnu, gcc-%{_build_arch}-linux-gnu -%define cross_opts CROSS_COMPILE=%{_build_arch}-linux-gnu- -%define __strip %{_build_arch}-linux-gnu-strip -%endif - -# These below are required to build man pages -%if %{with_perf} -BuildRequires: xmlto -%endif -%if %{with_perf} || %{with_tools} -BuildRequires: asciidoc -%endif - -%if %{with toolchain_clang} -BuildRequires: clang -%endif - -%if %{with clang_lto} -BuildRequires: llvm -BuildRequires: lld -%endif - -# Because this is the kernel, it's hard to get a single upstream URL -# to represent the base without needing to do a bunch of patching. This -# tarball is generated from a src-git tree. If you want to see the -# exact git commit you can run -# -# xzcat -qq ${TARBALL} | git get-tar-commit-id -Source0: linux-%{tarfile_release}.tar.xz - -Source1: Makefile.rhelver - - -# Name of the packaged file containing signing key -%ifarch ppc64le -%define signing_key_filename kernel-signing-ppc.cer -%endif -%ifarch s390x -%define signing_key_filename kernel-signing-s390.cer -%endif - -%if %{?released_kernel} - -Source10: redhatsecurebootca5.cer -Source11: redhatsecurebootca1.cer -Source12: redhatsecureboot501.cer -Source13: redhatsecureboot301.cer -Source14: secureboot_s390.cer -Source15: secureboot_ppc.cer - -%define secureboot_ca_1 %{SOURCE10} -%define secureboot_ca_0 %{SOURCE11} -%ifarch x86_64 aarch64 -%define secureboot_key_1 %{SOURCE12} -%define pesign_name_1 redhatsecureboot501 -%define secureboot_key_0 %{SOURCE13} -%define pesign_name_0 redhatsecureboot301 -%endif -%ifarch s390x -%define secureboot_key_0 %{SOURCE14} -%define pesign_name_0 redhatsecureboot302 -%endif -%ifarch ppc64le -%define secureboot_key_0 %{SOURCE15} -%define pesign_name_0 redhatsecureboot303 -%endif - -# released_kernel -%else - -Source10: redhatsecurebootca4.cer -Source11: redhatsecurebootca2.cer -Source12: redhatsecureboot401.cer -Source13: redhatsecureboot003.cer - -%define secureboot_ca_1 %{SOURCE10} -%define secureboot_ca_0 %{SOURCE11} -%define secureboot_key_1 %{SOURCE12} -%define pesign_name_1 redhatsecureboot401 -%define secureboot_key_0 %{SOURCE13} -%define pesign_name_0 redhatsecureboot003 - -# released_kernel -%endif - -Source20: mod-denylist.sh -Source21: mod-sign.sh -Source22: parallel_xz.sh - -%define modsign_cmd %{SOURCE21} - -%if 0%{?include_rhel} -Source23: x509.genkey.rhel - -Source24: kernel-aarch64-rhel.config -Source25: kernel-aarch64-debug-rhel.config -Source26: mod-extra.list.rhel - -Source27: kernel-ppc64le-rhel.config -Source28: kernel-ppc64le-debug-rhel.config -Source29: kernel-s390x-rhel.config -Source30: kernel-s390x-debug-rhel.config -Source31: kernel-s390x-zfcpdump-rhel.config -Source32: kernel-x86_64-rhel.config -Source33: kernel-x86_64-debug-rhel.config - -Source34: filter-x86_64.sh.rhel -Source35: filter-armv7hl.sh.rhel -Source37: filter-aarch64.sh.rhel -Source38: filter-ppc64le.sh.rhel -Source39: filter-s390x.sh.rhel -Source40: filter-modules.sh.rhel - -Source41: x509.genkey.centos -%endif - -%if 0%{?include_fedora} -Source50: x509.genkey.fedora -Source51: mod-extra.list.fedora - -Source52: kernel-aarch64-fedora.config -Source53: kernel-aarch64-debug-fedora.config -Source54: kernel-armv7hl-fedora.config -Source55: kernel-armv7hl-debug-fedora.config -Source56: kernel-armv7hl-lpae-fedora.config -Source57: kernel-armv7hl-lpae-debug-fedora.config -Source60: kernel-ppc64le-fedora.config -Source61: kernel-ppc64le-debug-fedora.config -Source62: kernel-s390x-fedora.config -Source63: kernel-s390x-debug-fedora.config -Source64: kernel-x86_64-fedora.config -Source65: kernel-x86_64-debug-fedora.config - -Source67: filter-x86_64.sh.fedora -Source68: filter-armv7hl.sh.fedora -Source70: filter-aarch64.sh.fedora -Source71: filter-ppc64le.sh.fedora -Source72: filter-s390x.sh.fedora -Source73: filter-modules.sh.fedora -%endif - -Source75: partial-kgcov-snip.config -Source80: generate_all_configs.sh -Source81: process_configs.sh - -Source82: update_scripts.sh - -Source84: mod-internal.list - -Source100: rheldup3.x509 -Source101: rhelkpatch1.x509 - -Source200: check-kabi - -Source201: Module.kabi_aarch64 -Source202: Module.kabi_ppc64le -Source203: Module.kabi_s390x -Source204: Module.kabi_x86_64 - -Source210: Module.kabi_dup_aarch64 -Source211: Module.kabi_dup_ppc64le -Source212: Module.kabi_dup_s390x -Source213: Module.kabi_dup_x86_64 - -Source300: kernel-abi-stablelists-%{specversion}-%{pkgrelease}.tar.bz2 -Source301: kernel-kabi-dw-%{specversion}-%{pkgrelease}.tar.bz2 - -# Sources for kernel-tools -Source2000: cpupower.service -Source2001: cpupower.config -Source2002: kvm_stat.logrotate - -# Some people enjoy building customized kernels from the dist-git in Fedora and -# use this to override configuration options. One day they may all use the -# source tree, but in the mean time we carry this to support the legacy workflow -Source3000: merge.pl -Source3001: kernel-local -%if %{patchlist_changelog} -Source3002: Patchlist.changelog -%endif - -Source4000: README.rst -Source4001: rpminspect.yaml -Source4002: gating.yaml - -## Patches needed for building this package - -%if !%{nopatches} - -Patch1: patch-%{patchversion}-redhat.patch -%endif - -# empty final patch to facilitate testing of kernel patches -Patch999999: linux-kernel-test.patch - -# END OF PATCH DEFINITIONS - -%description -The kernel meta package - -# -# This macro does requires, provides, conflicts, obsoletes for a kernel package. -# %%kernel_reqprovconf <subpackage> -# It uses any kernel_<subpackage>_conflicts and kernel_<subpackage>_obsoletes -# macros defined above. -# -%define kernel_reqprovconf \ -Provides: kernel = %{specversion}-%{pkg_release}\ -Provides: kernel-%{_target_cpu} = %{specversion}-%{pkg_release}%{?1:+%{1}}\ -Provides: kernel-drm-nouveau = 16\ -Provides: kernel-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires(pre): %{kernel_prereq}\ -Requires(pre): %{initrd_prereq}\ -Requires(pre): ((linux-firmware >= 20150904-56.git6ebf5d57) if linux-firmware)\ -Recommends: linux-firmware\ -Requires(preun): systemd >= 200\ -Conflicts: xfsprogs < 4.3.0-1\ -Conflicts: xorg-x11-drv-vmmouse < 13.0.99\ -%{expand:%%{?kernel%{?1:_%{1}}_conflicts:Conflicts: %%{kernel%{?1:_%{1}}_conflicts}}}\ -%{expand:%%{?kernel%{?1:_%{1}}_obsoletes:Obsoletes: %%{kernel%{?1:_%{1}}_obsoletes}}}\ -%{expand:%%{?kernel%{?1:_%{1}}_provides:Provides: %%{kernel%{?1:_%{1}}_provides}}}\ -# We can't let RPM do the dependencies automatic because it'll then pick up\ -# a correct but undesirable perl dependency from the module headers which\ -# isn't required for the kernel proper to function\ -AutoReq: no\ -AutoProv: yes\ -%{nil} - - -%package doc -Summary: Various documentation bits found in the kernel source -Group: Documentation -%description doc -This package contains documentation files from the kernel -source. Various bits of information about the Linux kernel and the -device drivers shipped with it are documented in these files. - -You'll want to install this package if you need a reference to the -options that can be passed to Linux kernel modules at load time. - - -%package headers -Summary: Header files for the Linux kernel for use by glibc -Obsoletes: glibc-kernheaders < 3.0-46 -Provides: glibc-kernheaders = 3.0-46 -%description headers -Kernel-headers includes the C header files that specify the interface -between the Linux kernel and userspace libraries and programs. The -header files define structures and constants that are needed for -building most standard programs and are also needed for rebuilding the -glibc package. - -%package cross-headers -Summary: Header files for the Linux kernel for use by cross-glibc -%description cross-headers -Kernel-cross-headers includes the C header files that specify the interface -between the Linux kernel and userspace libraries and programs. The -header files define structures and constants that are needed for -building most standard programs and are also needed for rebuilding the -cross-glibc package. - - -%package debuginfo-common-%{_target_cpu} -Summary: Kernel source files used by %{name}-debuginfo packages -Provides: installonlypkg(kernel) -%description debuginfo-common-%{_target_cpu} -This package is required by %{name}-debuginfo subpackages. -It provides the kernel source files common to all builds. - -%if %{with_perf} -%package -n perf -Summary: Performance monitoring for the Linux kernel -Requires: bzip2 -License: GPLv2 -%description -n perf -This package contains the perf tool, which enables performance monitoring -of the Linux kernel. - -%package -n perf-debuginfo -Summary: Debug information for package perf -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release} -AutoReqProv: no -%description -n perf-debuginfo -This package provides debug information for the perf package. - -# Note that this pattern only works right to match the .build-id -# symlinks because of the trailing nonmatching alternation and -# the leading .*, because of find-debuginfo.sh's buggy handling -# of matching the pattern against the symlinks file. -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{_bindir}/perf(\.debug)?|.*%%{_libexecdir}/perf-core/.*|.*%%{_libdir}/libperf-jvmti.so(\.debug)?|XXX' -o perf-debuginfo.list} - -%package -n python3-perf -Summary: Python bindings for apps which will manipulate perf events -%description -n python3-perf -The python3-perf package contains a module that permits applications -written in the Python programming language to use the interface -to manipulate perf events. - -%package -n python3-perf-debuginfo -Summary: Debug information for package perf python bindings -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release} -AutoReqProv: no -%description -n python3-perf-debuginfo -This package provides debug information for the perf python bindings. - -# the python_sitearch macro should already be defined from above -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{python3_sitearch}/perf.*so(\.debug)?|XXX' -o python3-perf-debuginfo.list} - -# with_perf -%endif - -%if %{with_tools} -%package -n kernel-tools -Summary: Assortment of tools for the Linux kernel -License: GPLv2 -%ifarch %{cpupowerarchs} -Provides: cpupowerutils = 1:009-0.6.p1 -Obsoletes: cpupowerutils < 1:009-0.6.p1 -Provides: cpufreq-utils = 1:009-0.6.p1 -Provides: cpufrequtils = 1:009-0.6.p1 -Obsoletes: cpufreq-utils < 1:009-0.6.p1 -Obsoletes: cpufrequtils < 1:009-0.6.p1 -Obsoletes: cpuspeed < 1:1.5-16 -Requires: kernel-tools-libs = %{version}-%{release} -%endif -%define __requires_exclude ^%{_bindir}/python -%description -n kernel-tools -This package contains the tools/ directory from the kernel source -and the supporting documentation. - -%package -n kernel-tools-libs -Summary: Libraries for the kernels-tools -License: GPLv2 -%description -n kernel-tools-libs -This package contains the libraries built from the tools/ directory -from the kernel source. - -%package -n kernel-tools-libs-devel -Summary: Assortment of tools for the Linux kernel -License: GPLv2 -Requires: kernel-tools = %{version}-%{release} -%ifarch %{cpupowerarchs} -Provides: cpupowerutils-devel = 1:009-0.6.p1 -Obsoletes: cpupowerutils-devel < 1:009-0.6.p1 -%endif -Requires: kernel-tools-libs = %{version}-%{release} -Provides: kernel-tools-devel -%description -n kernel-tools-libs-devel -This package contains the development files for the tools/ directory from -the kernel source. - -%package -n kernel-tools-debuginfo -Summary: Debug information for package kernel-tools -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release} -AutoReqProv: no -%description -n kernel-tools-debuginfo -This package provides debug information for package kernel-tools. - -# Note that this pattern only works right to match the .build-id -# symlinks because of the trailing nonmatching alternation and -# the leading .*, because of find-debuginfo.sh's buggy handling -# of matching the pattern against the symlinks file. -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{_bindir}/centrino-decode(\.debug)?|.*%%{_bindir}/powernow-k8-decode(\.debug)?|.*%%{_bindir}/cpupower(\.debug)?|.*%%{_libdir}/libcpupower.*|.*%%{_bindir}/turbostat(\.debug)?|.*%%{_bindir}/x86_energy_perf_policy(\.debug)?|.*%%{_bindir}/tmon(\.debug)?|.*%%{_bindir}/lsgpio(\.debug)?|.*%%{_bindir}/gpio-hammer(\.debug)?|.*%%{_bindir}/gpio-event-mon(\.debug)?|.*%%{_bindir}/gpio-watch(\.debug)?|.*%%{_bindir}/iio_event_monitor(\.debug)?|.*%%{_bindir}/iio_generic_buffer(\.debug)?|.*%%{_bindir}/lsiio(\.debug)?|.*%%{_bindir}/intel-speed-select(\.debug)?|.*%%{_bindir}/page_owner_sort(\.debug)?|.*%%{_bindir}/slabinfo(\.debug)?|.*%%{_sbindir}/intel_sdsi(\.debug)?|XXX' -o kernel-tools-debuginfo.list} - -# with_tools -%endif - -%if %{with_bpftool} - -%package -n bpftool -Summary: Inspection and simple manipulation of eBPF programs and maps -License: GPLv2 -%description -n bpftool -This package contains the bpftool, which allows inspection and simple -manipulation of eBPF programs and maps. - -%package -n bpftool-debuginfo -Summary: Debug information for package bpftool -Group: Development/Debug -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release} -AutoReqProv: no -%description -n bpftool-debuginfo -This package provides debug information for the bpftool package. - -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{_sbindir}/bpftool(\.debug)?|XXX' -o bpftool-debuginfo.list} - -# with_bpftool -%endif - -%if %{with_selftests} - -%package selftests-internal -Summary: Kernel samples and selftests -License: GPLv2 -Requires: binutils, bpftool, iproute-tc, nmap-ncat, python3 -%description selftests-internal -Kernel sample programs and selftests. - -# Note that this pattern only works right to match the .build-id -# symlinks because of the trailing nonmatching alternation and -# the leading .*, because of find-debuginfo.sh's buggy handling -# of matching the pattern against the symlinks file. -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{_libexecdir}/(ksamples|kselftests)/.*|XXX' -o selftests-debuginfo.list} - -# with_selftests -%endif - -%if %{with_gcov} -%package gcov -Summary: gcov graph and source files for coverage data collection. -%description gcov -kernel-gcov includes the gcov graph and source files for gcov coverage collection. -%endif - -%package -n kernel-abi-stablelists -Summary: The Red Hat Enterprise Linux kernel ABI symbol stablelists -AutoReqProv: no -%description -n kernel-abi-stablelists -The kABI package contains information pertaining to the Red Hat Enterprise -Linux kernel ABI, including lists of kernel symbols that are needed by -external Linux kernel modules, and a yum plugin to aid enforcement. - -%if %{with_kabidw_base} -%package kernel-kabidw-base-internal -Summary: The baseline dataset for kABI verification using DWARF data -Group: System Environment/Kernel -AutoReqProv: no -%description kernel-kabidw-base-internal -The package contains data describing the current ABI of the Red Hat Enterprise -Linux kernel, suitable for the kabi-dw tool. -%endif - -# -# This macro creates a kernel-<subpackage>-debuginfo package. -# %%kernel_debuginfo_package <subpackage> -# -# Explanation of the find_debuginfo_opts: We build multiple kernels (debug -# pae etc.) so the regex filters those kernels appropriately. We also -# have to package several binaries as part of kernel-devel but getting -# unique build-ids is tricky for these userspace binaries. We don't really -# care about debugging those so we just filter those out and remove it. -%define kernel_debuginfo_package() \ -%package %{?1:%{1}-}debuginfo\ -Summary: Debug information for package %{name}%{?1:-%{1}}\ -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release}\ -Provides: %{name}%{?1:-%{1}}-debuginfo-%{_target_cpu} = %{version}-%{release}\ -Provides: installonlypkg(kernel)\ -AutoReqProv: no\ -%description %{?1:%{1}-}debuginfo\ -This package provides debug information for package %{name}%{?1:-%{1}}.\ -This is required to use SystemTap with %{name}%{?1:-%{1}}-%{KVERREL}.\ -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} --keep-section '.BTF' -p '.*\/usr\/src\/kernels/.*|XXX' -o ignored-debuginfo.list -p '/.*/%%{KVERREL_RE}%{?1:[+]%{1}}/.*|/.*%%{KVERREL_RE}%{?1:\+%{1}}(\.debug)?' -o debuginfo%{?1}.list}\ -%{nil} - -# -# This macro creates a kernel-<subpackage>-devel package. -# %%kernel_devel_package [-m] <subpackage> <pretty-name> -# -%define kernel_devel_package(m) \ -%package %{?1:%{1}-}devel\ -Summary: Development package for building kernel modules to match the %{?2:%{2} }kernel\ -Provides: kernel%{?1:-%{1}}-devel-%{_target_cpu} = %{version}-%{release}\ -Provides: kernel-devel-%{_target_cpu} = %{version}-%{release}%{?1:+%{1}}\ -Provides: kernel-devel-uname-r = %{KVERREL}%{?1:+%{1}}\ -Provides: installonlypkg(kernel)\ -AutoReqProv: no\ -Requires(pre): findutils\ -Requires: findutils\ -Requires: perl-interpreter\ -Requires: openssl-devel\ -Requires: elfutils-libelf-devel\ -Requires: bison\ -Requires: flex\ -Requires: make\ -Requires: gcc\ -%if %{-m:1}%{!-m:0}\ -Requires: kernel-devel-uname-r = %{KVERREL}\ -%endif\ -%description %{?1:%{1}-}devel\ -This package provides kernel headers and makefiles sufficient to build modules\ -against the %{?2:%{2} }kernel package.\ -%{nil} - -# -# This macro creates an empty kernel-<subpackage>-devel-matched package that -# requires both the core and devel packages locked on the same version. -# %%kernel_devel_matched_package [-m] <subpackage> <pretty-name> -# -%define kernel_devel_matched_package(m) \ -%package %{?1:%{1}-}devel-matched\ -Summary: Meta package to install matching core and devel packages for a given %{?2:%{2} }kernel\ -Requires: kernel%{?1:-%{1}}-devel = %{version}-%{release}\ -Requires: kernel%{?1:-%{1}}-core = %{version}-%{release}\ -%description %{?1:%{1}-}devel-matched\ -This meta package is used to install matching core and devel packages for a given %{?2:%{2} }kernel.\ -%{nil} - -# -# kernel-<variant>-ipaclones-internal package -# -%define kernel_ipaclones_package() \ -%package %{?1:%{1}-}ipaclones-internal\ -Summary: *.ipa-clones files generated by -fdump-ipa-clones for kernel%{?1:-%{1}}\ -Group: System Environment/Kernel\ -AutoReqProv: no\ -%description %{?1:%{1}-}ipaclones-internal\ -This package provides *.ipa-clones files.\ -%{nil} - -# -# This macro creates a kernel-<subpackage>-modules-internal package. -# %%kernel_modules_internal_package <subpackage> <pretty-name> -# -%define kernel_modules_internal_package() \ -%package %{?1:%{1}-}modules-internal\ -Summary: Extra kernel modules to match the %{?2:%{2} }kernel\ -Group: System Environment/Kernel\ -Provides: kernel%{?1:-%{1}}-modules-internal-%{_target_cpu} = %{version}-%{release}\ -Provides: kernel%{?1:-%{1}}-modules-internal-%{_target_cpu} = %{version}-%{release}%{?1:+%{1}}\ -Provides: kernel%{?1:-%{1}}-modules-internal = %{version}-%{release}%{?1:+%{1}}\ -Provides: installonlypkg(kernel-module)\ -Provides: kernel%{?1:-%{1}}-modules-internal-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel%{?1:-%{1}}-modules-uname-r = %{KVERREL}%{?1:+%{1}}\ -AutoReq: no\ -AutoProv: yes\ -%description %{?1:%{1}-}modules-internal\ -This package provides kernel modules for the %{?2:%{2} }kernel package for Red Hat internal usage.\ -%{nil} - -# -# This macro creates a kernel-<subpackage>-modules-extra package. -# %%kernel_modules_extra_package [-m] <subpackage> <pretty-name> -# -%define kernel_modules_extra_package(m) \ -%package %{?1:%{1}-}modules-extra\ -Summary: Extra kernel modules to match the %{?2:%{2} }kernel\ -Provides: kernel%{?1:-%{1}}-modules-extra-%{_target_cpu} = %{version}-%{release}\ -Provides: kernel%{?1:-%{1}}-modules-extra-%{_target_cpu} = %{version}-%{release}%{?1:+%{1}}\ -Provides: kernel%{?1:-%{1}}-modules-extra = %{version}-%{release}%{?1:+%{1}}\ -Provides: installonlypkg(kernel-module)\ -Provides: kernel%{?1:-%{1}}-modules-extra-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel%{?1:-%{1}}-modules-uname-r = %{KVERREL}%{?1:+%{1}}\ -%if %{-m:1}%{!-m:0}\ -Requires: kernel-modules-extra-uname-r = %{KVERREL}\ -%endif\ -AutoReq: no\ -AutoProv: yes\ -%description %{?1:%{1}-}modules-extra\ -This package provides less commonly used kernel modules for the %{?2:%{2} }kernel package.\ -%{nil} - -# -# This macro creates a kernel-<subpackage>-modules package. -# %%kernel_modules_package [-m] <subpackage> <pretty-name> -# -%define kernel_modules_package(m) \ -%package %{?1:%{1}-}modules\ -Summary: kernel modules to match the %{?2:%{2}-}core kernel\ -Provides: kernel%{?1:-%{1}}-modules-%{_target_cpu} = %{version}-%{release}\ -Provides: kernel-modules-%{_target_cpu} = %{version}-%{release}%{?1:+%{1}}\ -Provides: kernel-modules = %{version}-%{release}%{?1:+%{1}}\ -Provides: installonlypkg(kernel-module)\ -Provides: kernel%{?1:-%{1}}-modules-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel-uname-r = %{KVERREL}%{?1:+%{1}}\ -%if %{-m:1}%{!-m:0}\ -Requires: kernel-modules-uname-r = %{KVERREL}\ -%endif\ -AutoReq: no\ -AutoProv: yes\ -%description %{?1:%{1}-}modules\ -This package provides commonly used kernel modules for the %{?2:%{2}-}core kernel package.\ -%{nil} - -# -# this macro creates a kernel-<subpackage> meta package. -# %%kernel_meta_package <subpackage> -# -%define kernel_meta_package() \ -%package %{1}\ -summary: kernel meta-package for the %{1} kernel\ -Requires: kernel-%{1}-core-uname-r = %{KVERREL}+%{1}\ -Requires: kernel-%{1}-modules-uname-r = %{KVERREL}+%{1}\ -Provides: installonlypkg(kernel)\ -%description %{1}\ -The meta-package for the %{1} kernel\ -%{nil} - -# -# This macro creates a kernel-<subpackage> and its -devel and -debuginfo too. -# %%define variant_summary The Linux kernel compiled for <configuration> -# %%kernel_variant_package [-n <pretty-name>] [-m] <subpackage> -# -%define kernel_variant_package(n:m) \ -%package %{?1:%{1}-}core\ -Summary: %{variant_summary}\ -Provides: kernel-%{?1:%{1}-}core-uname-r = %{KVERREL}%{?1:+%{1}}\ -Provides: installonlypkg(kernel)\ -%if %{-m:1}%{!-m:0}\ -Requires: kernel-core-uname-r = %{KVERREL}\ -%endif\ -%{expand:%%kernel_reqprovconf}\ -%if %{?1:1} %{!?1:0} \ -%{expand:%%kernel_meta_package %{?1:%{1}}}\ -%endif\ -%{expand:%%kernel_devel_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}} %{-m:%{-m}}}\ -%{expand:%%kernel_devel_matched_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}} %{-m:%{-m}}}\ -%{expand:%%kernel_modules_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}} %{-m:%{-m}}}\ -%{expand:%%kernel_modules_extra_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}} %{-m:%{-m}}}\ -%if %{-m:0}%{!-m:1}\ -%{expand:%%kernel_modules_internal_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}}}\ -%{expand:%%kernel_debuginfo_package %{?1:%{1}}}\ -%endif\ -%{nil} - -# Now, each variant package. - -%if %{with_pae} -%define variant_summary The Linux kernel compiled for Cortex-A15 -%kernel_variant_package lpae -%description lpae-core -This package includes a version of the Linux kernel with support for -Cortex-A15 devices with LPAE and HW virtualisation support -%endif - -%if %{with_zfcpdump} -%define variant_summary The Linux kernel compiled for zfcpdump usage -%kernel_variant_package zfcpdump -%description zfcpdump-core -The kernel package contains the Linux kernel (vmlinuz) for use by the -zfcpdump infrastructure. -# with_zfcpdump -%endif - -%define variant_summary The Linux kernel compiled with extra debugging enabled -%if !%{debugbuildsenabled} -%kernel_variant_package -m debug -%else -%kernel_variant_package debug -%endif -%description debug-core -The kernel package contains the Linux kernel (vmlinuz), the core of any -Linux operating system. The kernel handles the basic functions -of the operating system: memory allocation, process allocation, device -input and output, etc. - -This variant of the kernel has numerous debugging options enabled. -It should only be installed when trying to gather additional information -on kernel bugs, as some of these options impact performance noticably. - -# And finally the main -core package - -%define variant_summary The Linux kernel -%kernel_variant_package -%description core -The kernel package contains the Linux kernel (vmlinuz), the core of any -Linux operating system. The kernel handles the basic functions -of the operating system: memory allocation, process allocation, device -input and output, etc. - -%if %{with_ipaclones} -%kernel_ipaclones_package -%endif - -%prep -# do a few sanity-checks for --with *only builds -%if %{with_baseonly} -%if !%{with_up} -echo "Cannot build --with baseonly, up build is disabled" -exit 1 -%endif -%endif - -# more sanity checking; do it quietly -if [ "%{patches}" != "%%{patches}" ] ; then - for patch in %{patches} ; do - if [ ! -f $patch ] ; then - echo "ERROR: Patch ${patch##/*/} listed in specfile but is missing" - exit 1 - fi - done -fi 2>/dev/null - -patch_command='patch -p1 -F1 -s' -ApplyPatch() -{ - local patch=$1 - shift - if [ ! -f $RPM_SOURCE_DIR/$patch ]; then - exit 1 - fi - if ! grep -E "^Patch[0-9]+: $patch\$" %{_specdir}/${RPM_PACKAGE_NAME}.spec ; then - if [ "${patch:0:8}" != "patch-%{kversion}." ] ; then - echo "ERROR: Patch $patch not listed as a source patch in specfile" - exit 1 - fi - fi 2>/dev/null - case "$patch" in - *.bz2) bunzip2 < "$RPM_SOURCE_DIR/$patch" | $patch_command ${1+"$@"} ;; - *.gz) gunzip < "$RPM_SOURCE_DIR/$patch" | $patch_command ${1+"$@"} ;; - *.xz) unxz < "$RPM_SOURCE_DIR/$patch" | $patch_command ${1+"$@"} ;; - *) $patch_command ${1+"$@"} < "$RPM_SOURCE_DIR/$patch" ;; - esac -} - -# don't apply patch if it's empty -ApplyOptionalPatch() -{ - local patch=$1 - shift - if [ ! -f $RPM_SOURCE_DIR/$patch ]; then - exit 1 - fi - local C=$(wc -l $RPM_SOURCE_DIR/$patch | awk '{print $1}') - if [ "$C" -gt 9 ]; then - ApplyPatch $patch ${1+"$@"} - fi -} - -%setup -q -n kernel-%{tarfile_release} -c -mv linux-%{tarfile_release} linux-%{KVERREL} - -cd linux-%{KVERREL} -cp -a %{SOURCE1} . - -%if !%{nopatches} - -ApplyOptionalPatch patch-%{patchversion}-redhat.patch -%endif - -ApplyOptionalPatch linux-kernel-test.patch - -# END OF PATCH APPLICATIONS - -# Any further pre-build tree manipulations happen here. - -chmod +x scripts/checkpatch.pl -mv COPYING COPYING-%{version}-%{release} - -# This Prevents scripts/setlocalversion from mucking with our version numbers. -touch .scmversion - -# Mangle /usr/bin/python shebangs to /usr/bin/python3 -# Mangle all Python shebangs to be Python 3 explicitly -# -p preserves timestamps -# -n prevents creating ~backup files -# -i specifies the interpreter for the shebang -# This fixes errors such as -# *** ERROR: ambiguous python shebang in /usr/bin/kvm_stat: #!/usr/bin/python. Change it to python3 (or python2) explicitly. -# We patch all sources below for which we got a report/error. -pathfix.py -i "%{__python3} %{py3_shbang_opts}" -p -n \ - tools/kvm/kvm_stat/kvm_stat \ - scripts/show_delta \ - scripts/diffconfig \ - scripts/bloat-o-meter \ - scripts/jobserver-exec \ - tools \ - Documentation \ - scripts/clang-tools - -# only deal with configs if we are going to build for the arch -%ifnarch %nobuildarches - -if [ -L configs ]; then - rm -f configs -fi -mkdir configs -cd configs - -# Drop some necessary files from the source dir into the buildroot -cp $RPM_SOURCE_DIR/kernel-*.config . -cp %{SOURCE80} . -# merge.pl -cp %{SOURCE3000} . -# kernel-local -cp %{SOURCE3001} . -FLAVOR=%{primary_target} SPECVERSION=%{version} ./generate_all_configs.sh %{debugbuildsenabled} - -# Merge in any user-provided local config option changes -%ifnarch %nobuildarches -for i in %{all_arch_configs} -do - mv $i $i.tmp - ./merge.pl %{SOURCE3001} $i.tmp > $i -%if %{with_gcov} - echo "Merging with gcov options" - cat %{SOURCE75} - mv $i $i.tmp - ./merge.pl %{SOURCE75} $i.tmp > $i -%endif - rm $i.tmp -done -%endif - -%if %{with clang_lto} -for i in *aarch64*.config *x86_64*.config; do - sed -i 's/# CONFIG_LTO_CLANG_THIN is not set/CONFIG_LTO_CLANG_THIN=y/' $i - sed -i 's/CONFIG_LTO_NONE=y/# CONFIG_LTO_NONE is not set/' $i -done -%endif - -# Add DUP and kpatch certificates to system trusted keys for RHEL -%if 0%{?rhel} -%if %{signkernel}%{signmodules} -openssl x509 -inform der -in %{SOURCE100} -out rheldup3.pem -openssl x509 -inform der -in %{SOURCE101} -out rhelkpatch1.pem -cat rheldup3.pem rhelkpatch1.pem > ../certs/rhel.pem -%ifarch s390x ppc64le -openssl x509 -inform der -in %{secureboot_ca_0} -out secureboot.pem -cat secureboot.pem >> ../certs/rhel.pem -%endif -for i in *.config; do - sed -i 's@CONFIG_SYSTEM_TRUSTED_KEYS=""@CONFIG_SYSTEM_TRUSTED_KEYS="certs/rhel.pem"@' $i -done -%endif -%endif - -cp %{SOURCE81} . -OPTS="" -%if %{with_configchecks} - OPTS="$OPTS -w -n -c" -%endif -%if %{with clang_lto} -for opt in %{clang_make_opts}; do - OPTS="$OPTS -m $opt" -done -%endif -RHJOBS=$RPM_BUILD_NCPUS PACKAGE_NAME=kernel ./process_configs.sh $OPTS ${specversion} - -cp %{SOURCE82} . -RPM_SOURCE_DIR=$RPM_SOURCE_DIR ./update_scripts.sh %{primary_target} - -# We may want to override files from the primary target in case of building -# against a flavour of it (eg. centos not rhel), thus override it here if -# necessary -if [ "%{primary_target}" == "rhel" ]; then -%if 0%{?centos} - echo "Updating scripts/sources to centos version" - RPM_SOURCE_DIR=$RPM_SOURCE_DIR ./update_scripts.sh centos -%else - echo "Not updating scripts/sources to centos version" -%endif -fi - -# end of kernel config -%endif - -cd .. -# # End of Configs stuff - -# get rid of unwanted files resulting from patch fuzz -find . \( -name "*.orig" -o -name "*~" \) -delete >/dev/null - -# remove unnecessary SCM files -find . -name .gitignore -delete >/dev/null - -cd .. - -### -### build -### -%build - -%if %{with_sparse} -%define sparse_mflags C=1 -%endif - -cp_vmlinux() -{ - eu-strip --remove-comment -o "$2" "$1" -} - -# Note we need to disable these flags for cross builds because the flags -# from redhat-rpm-config assume that host == target so target arch -# flags cause issues with the host compiler. -%if !%{with_cross} -%define build_hostcflags %{?build_cflags} -%define build_hostldflags %{?build_ldflags} -%endif - -%define make %{__make} %{?cross_opts} %{?make_opts} HOSTCFLAGS="%{?build_hostcflags}" HOSTLDFLAGS="%{?build_hostldflags}" - -InitBuildVars() { - # Initialize the kernel .config file and create some variables that are - # needed for the actual build process. - - Variant=$1 - - # Pick the right kernel config file - Config=kernel-%{version}-%{_target_cpu}${Variant:+-${Variant}}.config - DevelDir=/usr/src/kernels/%{KVERREL}${Variant:++${Variant}} - - KernelVer=%{version}-%{release}.%{_target_cpu}${Variant:++${Variant}} - - # make sure EXTRAVERSION says what we want it to say - # Trim the release if this is a CI build, since KERNELVERSION is limited to 64 characters - ShortRel=$(perl -e "print \"%{release}\" =~ s/\.pr\.[0-9A-Fa-f]{32}//r") - perl -p -i -e "s/^EXTRAVERSION.*/EXTRAVERSION = -${ShortRel}.%{_target_cpu}${Variant:++${Variant}}/" Makefile - - # if pre-rc1 devel kernel, must fix up PATCHLEVEL for our versioning scheme - # if we are post rc1 this should match anyway so this won't matter - perl -p -i -e 's/^PATCHLEVEL.*/PATCHLEVEL = %{patchlevel}/' Makefile - - %{make} %{?_smp_mflags} mrproper - cp configs/$Config .config - - %if %{signkernel}%{signmodules} - cp configs/x509.genkey certs/. - %endif - - Arch=`head -1 .config | cut -b 3-` - echo USING ARCH=$Arch - - KCFLAGS="%{?kcflags}" - - # add kpatch flags for base kernel - if [ "$Variant" == "" ]; then - KCFLAGS="$KCFLAGS %{?kpatch_kcflags}" - fi -} - -BuildKernel() { - MakeTarget=$1 - KernelImage=$2 - DoVDSO=$3 - Variant=$4 - InstallName=${5:-vmlinuz} - - DoModules=1 - if [ "$Variant" = "zfcpdump" ]; then - DoModules=0 - fi - - # When the bootable image is just the ELF kernel, strip it. - # We already copy the unstripped file into the debuginfo package. - if [ "$KernelImage" = vmlinux ]; then - CopyKernel=cp_vmlinux - else - CopyKernel=cp - fi - - InitBuildVars $Variant - - echo BUILDING A KERNEL FOR ${Variant} %{_target_cpu}... - - %{make} ARCH=$Arch olddefconfig >/dev/null - - # This ensures build-ids are unique to allow parallel debuginfo - perl -p -i -e "s/^CONFIG_BUILD_SALT.*/CONFIG_BUILD_SALT=\"%{KVERREL}\"/" .config - %{make} ARCH=$Arch KCFLAGS="$KCFLAGS" WITH_GCOV="%{?with_gcov}" %{?_smp_mflags} $MakeTarget %{?sparse_mflags} %{?kernel_mflags} - if [ $DoModules -eq 1 ]; then - %{make} ARCH=$Arch KCFLAGS="$KCFLAGS" WITH_GCOV="%{?with_gcov}" %{?_smp_mflags} modules %{?sparse_mflags} || exit 1 - fi - - mkdir -p $RPM_BUILD_ROOT/%{image_install_path} - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/systemtap -%if %{with_debuginfo} - mkdir -p $RPM_BUILD_ROOT%{debuginfodir}/%{image_install_path} -%endif - -%ifarch %{arm} aarch64 - %{make} ARCH=$Arch dtbs INSTALL_DTBS_PATH=$RPM_BUILD_ROOT/%{image_install_path}/dtb-$KernelVer - %{make} ARCH=$Arch dtbs_install INSTALL_DTBS_PATH=$RPM_BUILD_ROOT/%{image_install_path}/dtb-$KernelVer - cp -r $RPM_BUILD_ROOT/%{image_install_path}/dtb-$KernelVer $RPM_BUILD_ROOT/lib/modules/$KernelVer/dtb - find arch/$Arch/boot/dts -name '*.dtb' -type f -delete -%endif - - # Start installing the results - install -m 644 .config $RPM_BUILD_ROOT/boot/config-$KernelVer - install -m 644 .config $RPM_BUILD_ROOT/lib/modules/$KernelVer/config - install -m 644 System.map $RPM_BUILD_ROOT/boot/System.map-$KernelVer - install -m 644 System.map $RPM_BUILD_ROOT/lib/modules/$KernelVer/System.map - - # We estimate the size of the initramfs because rpm needs to take this size - # into consideration when performing disk space calculations. (See bz #530778) - dd if=/dev/zero of=$RPM_BUILD_ROOT/boot/initramfs-$KernelVer.img bs=1M count=20 - - if [ -f arch/$Arch/boot/zImage.stub ]; then - cp arch/$Arch/boot/zImage.stub $RPM_BUILD_ROOT/%{image_install_path}/zImage.stub-$KernelVer || : - cp arch/$Arch/boot/zImage.stub $RPM_BUILD_ROOT/lib/modules/$KernelVer/zImage.stub-$KernelVer || : - fi - - %if %{signkernel} - if [ "$KernelImage" = vmlinux ]; then - # We can't strip and sign $KernelImage in place, because - # we need to preserve original vmlinux for debuginfo. - # Use a copy for signing. - $CopyKernel $KernelImage $KernelImage.tosign - KernelImage=$KernelImage.tosign - CopyKernel=cp - fi - - # Sign the image if we're using EFI - # aarch64 kernels are gziped EFI images - KernelExtension=${KernelImage##*.} - if [ "$KernelExtension" == "gz" ]; then - SignImage=${KernelImage%.*} - else - SignImage=$KernelImage - fi - - %ifarch x86_64 aarch64 - %pesign -s -i $SignImage -o vmlinuz.tmp -a %{secureboot_ca_0} -c %{secureboot_key_0} -n %{pesign_name_0} - %pesign -s -i vmlinuz.tmp -o vmlinuz.signed -a %{secureboot_ca_1} -c %{secureboot_key_1} -n %{pesign_name_1} - rm vmlinuz.tmp - %endif - %ifarch s390x ppc64le - if [ -x /usr/bin/rpm-sign ]; then - rpm-sign --key "%{pesign_name_0}" --lkmsign $SignImage --output vmlinuz.signed - elif [ $DoModules -eq 1 ]; then - chmod +x scripts/sign-file - ./scripts/sign-file -p sha256 certs/signing_key.pem certs/signing_key.x509 $SignImage vmlinuz.signed - else - mv $SignImage vmlinuz.signed - fi - %endif - - if [ ! -s vmlinuz.signed ]; then - echo "pesigning failed" - exit 1 - fi - mv vmlinuz.signed $SignImage - if [ "$KernelExtension" == "gz" ]; then - gzip -f9 $SignImage - fi - # signkernel - %endif - - $CopyKernel $KernelImage \ - $RPM_BUILD_ROOT/%{image_install_path}/$InstallName-$KernelVer - chmod 755 $RPM_BUILD_ROOT/%{image_install_path}/$InstallName-$KernelVer - cp $RPM_BUILD_ROOT/%{image_install_path}/$InstallName-$KernelVer $RPM_BUILD_ROOT/lib/modules/$KernelVer/$InstallName - - # hmac sign the kernel for FIPS - echo "Creating hmac file: $RPM_BUILD_ROOT/%{image_install_path}/.vmlinuz-$KernelVer.hmac" - ls -l $RPM_BUILD_ROOT/%{image_install_path}/$InstallName-$KernelVer - (cd $RPM_BUILD_ROOT/%{image_install_path} && sha512hmac $InstallName-$KernelVer) > $RPM_BUILD_ROOT/%{image_install_path}/.vmlinuz-$KernelVer.hmac; - cp $RPM_BUILD_ROOT/%{image_install_path}/.vmlinuz-$KernelVer.hmac $RPM_BUILD_ROOT/lib/modules/$KernelVer/.vmlinuz.hmac - - if [ $DoModules -eq 1 ]; then - # Override $(mod-fw) because we don't want it to install any firmware - # we'll get it from the linux-firmware package and we don't want conflicts - %{make} %{?_smp_mflags} ARCH=$Arch INSTALL_MOD_PATH=$RPM_BUILD_ROOT %{?_smp_mflags} modules_install KERNELRELEASE=$KernelVer mod-fw= - fi - -%if %{with_gcov} - # install gcov-needed files to $BUILDROOT/$BUILD/...: - # gcov_info->filename is absolute path - # gcno references to sources can use absolute paths (e.g. in out-of-tree builds) - # sysfs symlink targets (set up at compile time) use absolute paths to BUILD dir - find . \( -name '*.gcno' -o -name '*.[chS]' \) -exec install -D '{}' "$RPM_BUILD_ROOT/$(pwd)/{}" \; -%endif - - # add an a noop %%defattr statement 'cause rpm doesn't like empty file list files - echo '%%defattr(-,-,-)' > ../kernel${Variant:+-${Variant}}-ldsoconf.list - if [ $DoVDSO -ne 0 ]; then - %{make} ARCH=$Arch INSTALL_MOD_PATH=$RPM_BUILD_ROOT vdso_install KERNELRELEASE=$KernelVer - if [ -s ldconfig-kernel.conf ]; then - install -D -m 444 ldconfig-kernel.conf \ - $RPM_BUILD_ROOT/etc/ld.so.conf.d/kernel-$KernelVer.conf - echo /etc/ld.so.conf.d/kernel-$KernelVer.conf >> ../kernel${Variant:+-${Variant}}-ldsoconf.list - fi - - rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/vdso/.build-id - fi - - # And save the headers/makefiles etc for building modules against - # - # This all looks scary, but the end result is supposed to be: - # * all arch relevant include/ files - # * all Makefile/Kconfig files - # * all script/ files - - rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/source - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - (cd $RPM_BUILD_ROOT/lib/modules/$KernelVer ; ln -s build source) - # dirs for additional modules per module-init-tools, kbuild/modules.txt - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/updates - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/weak-updates - # CONFIG_KERNEL_HEADER_TEST generates some extra files in the process of - # testing so just delete - find . -name *.h.s -delete - # first copy everything - cp --parents `find -type f -name "Makefile*" -o -name "Kconfig*"` $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - if [ ! -e Module.symvers ]; then - touch Module.symvers - fi - cp Module.symvers $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp System.map $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - if [ -s Module.markers ]; then - cp Module.markers $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - fi - - # create the kABI metadata for use in packaging - # NOTENOTE: the name symvers is used by the rpm backend - # NOTENOTE: to discover and run the /usr/lib/rpm/fileattrs/kabi.attr - # NOTENOTE: script which dynamically adds exported kernel symbol - # NOTENOTE: checksums to the rpm metadata provides list. - # NOTENOTE: if you change the symvers name, update the backend too - echo "**** GENERATING kernel ABI metadata ****" - gzip -c9 < Module.symvers > $RPM_BUILD_ROOT/boot/symvers-$KernelVer.gz - cp $RPM_BUILD_ROOT/boot/symvers-$KernelVer.gz $RPM_BUILD_ROOT/lib/modules/$KernelVer/symvers.gz - -%if %{with_kabichk} - echo "**** kABI checking is enabled in kernel SPEC file. ****" - chmod 0755 $RPM_SOURCE_DIR/check-kabi - if [ -e $RPM_SOURCE_DIR/Module.kabi_%{_target_cpu}$Variant ]; then - cp $RPM_SOURCE_DIR/Module.kabi_%{_target_cpu}$Variant $RPM_BUILD_ROOT/Module.kabi - $RPM_SOURCE_DIR/check-kabi -k $RPM_BUILD_ROOT/Module.kabi -s Module.symvers || exit 1 - # for now, don't keep it around. - rm $RPM_BUILD_ROOT/Module.kabi - else - echo "**** NOTE: Cannot find reference Module.kabi file. ****" - fi -%endif - -%if %{with_kabidupchk} - echo "**** kABI DUP checking is enabled in kernel SPEC file. ****" - if [ -e $RPM_SOURCE_DIR/Module.kabi_dup_%{_target_cpu}$Variant ]; then - cp $RPM_SOURCE_DIR/Module.kabi_dup_%{_target_cpu}$Variant $RPM_BUILD_ROOT/Module.kabi - $RPM_SOURCE_DIR/check-kabi -k $RPM_BUILD_ROOT/Module.kabi -s Module.symvers || exit 1 - # for now, don't keep it around. - rm $RPM_BUILD_ROOT/Module.kabi - else - echo "**** NOTE: Cannot find DUP reference Module.kabi file. ****" - fi -%endif - -%if %{with_kabidw_base} - # Don't build kabi base for debug kernels - if [ "$Variant" != "zfcpdump" -a "$Variant" != "debug" ]; then - mkdir -p $RPM_BUILD_ROOT/kabi-dwarf - tar xjvf %{SOURCE301} -C $RPM_BUILD_ROOT/kabi-dwarf - - mkdir -p $RPM_BUILD_ROOT/kabi-dwarf/stablelists - tar xjvf %{SOURCE300} -C $RPM_BUILD_ROOT/kabi-dwarf/stablelists - - echo "**** GENERATING DWARF-based kABI baseline dataset ****" - chmod 0755 $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh - $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh generate \ - "$RPM_BUILD_ROOT/kabi-dwarf/stablelists/kabi-current/kabi_stablelist_%{_target_cpu}" \ - "$(pwd)" \ - "$RPM_BUILD_ROOT/kabidw-base/%{_target_cpu}${Variant:+.${Variant}}" || : - - rm -rf $RPM_BUILD_ROOT/kabi-dwarf - fi -%endif - -%if %{with_kabidwchk} - if [ "$Variant" != "zfcpdump" ]; then - mkdir -p $RPM_BUILD_ROOT/kabi-dwarf - tar xjvf %{SOURCE301} -C $RPM_BUILD_ROOT/kabi-dwarf - if [ -d "$RPM_BUILD_ROOT/kabi-dwarf/base/%{_target_cpu}${Variant:+.${Variant}}" ]; then - mkdir -p $RPM_BUILD_ROOT/kabi-dwarf/stablelists - tar xjvf %{SOURCE300} -C $RPM_BUILD_ROOT/kabi-dwarf/stablelists - - echo "**** GENERATING DWARF-based kABI dataset ****" - chmod 0755 $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh - $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh generate \ - "$RPM_BUILD_ROOT/kabi-dwarf/stablelists/kabi-current/kabi_stablelist_%{_target_cpu}" \ - "$(pwd)" \ - "$RPM_BUILD_ROOT/kabi-dwarf/base/%{_target_cpu}${Variant:+.${Variant}}.tmp" || : - - echo "**** kABI DWARF-based comparison report ****" - $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh compare \ - "$RPM_BUILD_ROOT/kabi-dwarf/base/%{_target_cpu}${Variant:+.${Variant}}" \ - "$RPM_BUILD_ROOT/kabi-dwarf/base/%{_target_cpu}${Variant:+.${Variant}}.tmp" || : - echo "**** End of kABI DWARF-based comparison report ****" - else - echo "**** Baseline dataset for kABI DWARF-BASED comparison report not found ****" - fi - - rm -rf $RPM_BUILD_ROOT/kabi-dwarf - fi -%endif - - # then drop all but the needed Makefiles/Kconfig files - rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts - rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include - cp .config $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a scripts $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts/tracing - rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts/spdxcheck.py - -%ifarch s390x - # CONFIG_EXPOLINE_EXTERN=y produces arch/s390/lib/expoline.o - # which is needed during external module build. - if [ -f arch/s390/lib/expoline.o ]; then - cp -a --parents arch/s390/lib/expoline.o $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - fi -%endif - - # Files for 'make scripts' to succeed with kernel-devel. - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/security/selinux/include - cp -a --parents security/selinux/include/classmap.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents security/selinux/include/initial_sid_to_string.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/tools/include/tools - cp -a --parents tools/include/tools/be_byteshift.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/tools/le_byteshift.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - - # Files for 'make prepare' to succeed with kernel-devel. - cp -a --parents tools/include/linux/compiler* $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/linux/types.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/build/Build.include $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/build/Build $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/build/fixdep.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/objtool/sync-check.sh $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/bpf/resolve_btfids $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - - cp --parents security/selinux/include/policycap_names.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents security/selinux/include/policycap.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - - cp -a --parents tools/include/asm-generic $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/linux $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/uapi/asm $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/uapi/asm-generic $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/uapi/linux $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/vdso $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/scripts/utilities.mak $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/lib/subcmd $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/lib/*.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/objtool/*.[ch] $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/objtool/Build $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/objtool/include/objtool/*.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/lib/bpf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/lib/bpf/Build $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - - if [ -f tools/objtool/objtool ]; then - cp -a tools/objtool/objtool $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/tools/objtool/ || : - fi - if [ -f tools/objtool/fixdep ]; then - cp -a tools/objtool/fixdep $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/tools/objtool/ || : - fi - if [ -d arch/$Arch/scripts ]; then - cp -a arch/$Arch/scripts $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/arch/%{_arch} || : - fi - if [ -f arch/$Arch/*lds ]; then - cp -a arch/$Arch/*lds $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/arch/%{_arch}/ || : - fi - if [ -f arch/%{asmarch}/kernel/module.lds ]; then - cp -a --parents arch/%{asmarch}/kernel/module.lds $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - fi - find $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts \( -iname "*.o" -o -iname "*.cmd" \) -exec rm -f {} + -%ifarch ppc64le - cp -a --parents arch/powerpc/lib/crtsavres.[So] $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ -%endif - if [ -d arch/%{asmarch}/include ]; then - cp -a --parents arch/%{asmarch}/include $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - fi -%ifarch aarch64 - # arch/arm64/include/asm/xen references arch/arm - cp -a --parents arch/arm/include/asm/xen $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - # arch/arm64/include/asm/opcodes.h references arch/arm - cp -a --parents arch/arm/include/asm/opcodes.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ -%endif - # include the machine specific headers for ARM variants, if available. -%ifarch %{arm} - if [ -d arch/%{asmarch}/mach-${Variant}/include ]; then - cp -a --parents arch/%{asmarch}/mach-${Variant}/include $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - fi - # include a few files for 'make prepare' - cp -a --parents arch/arm/tools/gen-mach-types $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/arm/tools/mach-types $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - -%endif - cp -a include $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include -%ifarch i686 x86_64 - # files for 'make prepare' to succeed with kernel-devel - cp -a --parents arch/x86/entry/syscalls/syscall_32.tbl $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/entry/syscalls/syscall_64.tbl $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs_32.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs_64.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs_common.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/purgatory/purgatory.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/purgatory/stack.S $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/purgatory/setup-x86_64.S $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/purgatory/entry64.S $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/boot/string.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/boot/string.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/boot/ctype.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - - cp -a --parents scripts/syscalltbl.sh $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents scripts/syscallhdr.sh $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - - cp -a --parents tools/arch/x86/include/asm $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/arch/x86/include/uapi/asm $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/objtool/arch/x86/lib $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/arch/x86/lib/ $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/arch/x86/tools/gen-insn-attr-x86.awk $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/objtool/arch/x86/ $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - -%endif - # Clean up intermediate tools files - find $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/tools \( -iname "*.o" -o -iname "*.cmd" \) -exec rm -f {} + - - # Make sure the Makefile, version.h, and auto.conf have a matching - # timestamp so that external modules can be built - touch -r $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/Makefile \ - $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include/generated/uapi/linux/version.h \ - $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include/config/auto.conf - -%if %{with_debuginfo} - eu-readelf -n vmlinux | grep "Build ID" | awk '{print $NF}' > vmlinux.id - cp vmlinux.id $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/vmlinux.id - - # - # save the vmlinux file for kernel debugging into the kernel-debuginfo rpm - # - mkdir -p $RPM_BUILD_ROOT%{debuginfodir}/lib/modules/$KernelVer - cp vmlinux $RPM_BUILD_ROOT%{debuginfodir}/lib/modules/$KernelVer - if [ -n "%{vmlinux_decompressor}" ]; then - eu-readelf -n %{vmlinux_decompressor} | grep "Build ID" | awk '{print $NF}' > vmlinux.decompressor.id - # Without build-id the build will fail. But for s390 the build-id - # wasn't added before 5.11. In case it is missing prefer not - # packaging the debuginfo over a build failure. - if [ -s vmlinux.decompressor.id ]; then - cp vmlinux.decompressor.id $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/vmlinux.decompressor.id - cp %{vmlinux_decompressor} $RPM_BUILD_ROOT%{debuginfodir}/lib/modules/$KernelVer/vmlinux.decompressor - fi - fi -%endif - - find $RPM_BUILD_ROOT/lib/modules/$KernelVer -name "*.ko" -type f >modnames - - # mark modules executable so that strip-to-file can strip them - xargs --no-run-if-empty chmod u+x < modnames - - # Generate a list of modules for block and networking. - - grep -F /drivers/ modnames | xargs --no-run-if-empty nm -upA | - sed -n 's,^.*/\([^/]*\.ko\): *U \(.*\)$,\1 \2,p' > drivers.undef - - collect_modules_list() - { - sed -r -n -e "s/^([^ ]+) \\.?($2)\$/\\1/p" drivers.undef | - LC_ALL=C sort -u > $RPM_BUILD_ROOT/lib/modules/$KernelVer/modules.$1 - if [ ! -z "$3" ]; then - sed -r -e "/^($3)\$/d" -i $RPM_BUILD_ROOT/lib/modules/$KernelVer/modules.$1 - fi - } - - collect_modules_list networking \ - 'register_netdev|ieee80211_register_hw|usbnet_probe|phy_driver_register|rt(l_|2x00)(pci|usb)_probe|register_netdevice' - collect_modules_list block \ - 'ata_scsi_ioctl|scsi_add_host|scsi_add_host_with_dma|blk_alloc_queue|blk_init_queue|register_mtd_blktrans|scsi_esp_register|scsi_register_device_handler|blk_queue_physical_block_size' 'pktcdvd.ko|dm-mod.ko' - collect_modules_list drm \ - 'drm_open|drm_init' - collect_modules_list modesetting \ - 'drm_crtc_init' - - # detect missing or incorrect license tags - ( find $RPM_BUILD_ROOT/lib/modules/$KernelVer -name '*.ko' | xargs /sbin/modinfo -l | \ - grep -E -v 'GPL( v2)?$|Dual BSD/GPL$|Dual MPL/GPL$|GPL and additional rights$' ) && exit 1 - - remove_depmod_files() - { - # remove files that will be auto generated by depmod at rpm -i time - pushd $RPM_BUILD_ROOT/lib/modules/$KernelVer/ - rm -f modules.{alias,alias.bin,builtin.alias.bin,builtin.bin} \ - modules.{dep,dep.bin,devname,softdep,symbols,symbols.bin} - popd - } - - remove_depmod_files - - # Identify modules in the kernel-modules-extras package - %{SOURCE20} $RPM_BUILD_ROOT lib/modules/$KernelVer $(realpath configs/mod-extra.list) - # Identify modules in the kernel-modules-extras package - %{SOURCE20} $RPM_BUILD_ROOT lib/modules/$KernelVer %{SOURCE84} internal - - # - # Generate the kernel-core and kernel-modules files lists - # - - # Copy the System.map file for depmod to use, and create a backup of the - # full module tree so we can restore it after we're done filtering - cp System.map $RPM_BUILD_ROOT/. - cp configs/filter-*.sh $RPM_BUILD_ROOT/. - pushd $RPM_BUILD_ROOT - mkdir restore - cp -r lib/modules/$KernelVer/* restore/. - - # don't include anything going into kernel-modules-extra in the file lists - xargs rm -rf < mod-extra.list - # don't include anything going int kernel-modules-internal in the file lists - xargs rm -rf < mod-internal.list - - if [ $DoModules -eq 1 ]; then - # Find all the module files and filter them out into the core and - # modules lists. This actually removes anything going into -modules - # from the dir. - find lib/modules/$KernelVer/kernel -name *.ko | sort -n > modules.list - ./filter-modules.sh modules.list %{_target_cpu} - rm filter-*.sh - - # Run depmod on the resulting module tree and make sure it isn't broken - depmod -b . -aeF ./System.map $KernelVer &> depmod.out - if [ -s depmod.out ]; then - echo "Depmod failure" - cat depmod.out - exit 1 - else - rm depmod.out - fi - else - # Ensure important files/directories exist to let the packaging succeed - echo '%%defattr(-,-,-)' > modules.list - echo '%%defattr(-,-,-)' > k-d.list - mkdir -p lib/modules/$KernelVer/kernel - # Add files usually created by make modules, needed to prevent errors - # thrown by depmod during package installation - touch lib/modules/$KernelVer/modules.order - touch lib/modules/$KernelVer/modules.builtin - fi - - remove_depmod_files - - # Go back and find all of the various directories in the tree. We use this - # for the dir lists in kernel-core - find lib/modules/$KernelVer/kernel -mindepth 1 -type d | sort -n > module-dirs.list - - # Cleanup - rm System.map - # Just "cp -r" can be very slow: here, it rewrites _existing files_ - # with open(O_TRUNC). Many filesystems synchronously wait for metadata - # update for such file rewrites (seen in strace as final close syscall - # taking a long time). On a rotational disk, cp was observed to take - # more than 5 minutes on ext4 and more than 15 minutes (!) on xfs. - # With --remove-destination, we avoid this, and copying - # (with enough RAM to cache it) takes 5 seconds: - cp -r --remove-destination restore/* lib/modules/$KernelVer/. - rm -rf restore - popd - - # Make sure the files lists start with absolute paths or rpmbuild fails. - # Also add in the dir entries - sed -e 's/^lib*/\/lib/' %{?zipsed} $RPM_BUILD_ROOT/k-d.list > ../kernel${Variant:+-${Variant}}-modules.list - sed -e 's/^lib*/%dir \/lib/' %{?zipsed} $RPM_BUILD_ROOT/module-dirs.list > ../kernel${Variant:+-${Variant}}-core.list - sed -e 's/^lib*/\/lib/' %{?zipsed} $RPM_BUILD_ROOT/modules.list >> ../kernel${Variant:+-${Variant}}-core.list - sed -e 's/^lib*/\/lib/' %{?zipsed} $RPM_BUILD_ROOT/mod-extra.list >> ../kernel${Variant:+-${Variant}}-modules-extra.list - sed -e 's/^lib*/\/lib/' %{?zipsed} $RPM_BUILD_ROOT/mod-internal.list >> ../kernel${Variant:+-${Variant}}-modules-internal.list - - # Cleanup - rm -f $RPM_BUILD_ROOT/k-d.list - rm -f $RPM_BUILD_ROOT/modules.list - rm -f $RPM_BUILD_ROOT/module-dirs.list - rm -f $RPM_BUILD_ROOT/mod-extra.list - rm -f $RPM_BUILD_ROOT/mod-internal.list - -%if %{signmodules} - if [ $DoModules -eq 1 ]; then - # Save the signing keys so we can sign the modules in __modsign_install_post - cp certs/signing_key.pem certs/signing_key.pem.sign${Variant:++${Variant}} - cp certs/signing_key.x509 certs/signing_key.x509.sign${Variant:++${Variant}} - fi -%endif - - # Move the devel headers out of the root file system - mkdir -p $RPM_BUILD_ROOT/usr/src/kernels - mv $RPM_BUILD_ROOT/lib/modules/$KernelVer/build $RPM_BUILD_ROOT/$DevelDir - - # This is going to create a broken link during the build, but we don't use - # it after this point. We need the link to actually point to something - # when kernel-devel is installed, and a relative link doesn't work across - # the F17 UsrMove feature. - ln -sf $DevelDir $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - -%ifnarch armv7hl - # Generate vmlinux.h and put it to kernel-devel path - bpftool btf dump file vmlinux format c > $RPM_BUILD_ROOT/$DevelDir/vmlinux.h -%endif - - # prune junk from kernel-devel - find $RPM_BUILD_ROOT/usr/src/kernels -name ".*.cmd" -delete - - # Red Hat UEFI Secure Boot CA cert, which can be used to authenticate the kernel - mkdir -p $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer - %ifarch x86_64 aarch64 - install -m 0644 %{secureboot_ca_0} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca-20200609.cer - install -m 0644 %{secureboot_ca_1} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca-20140212.cer - ln -s kernel-signing-ca-20200609.cer $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca.cer - %else - install -m 0644 %{secureboot_ca_0} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca.cer - %endif - %ifarch s390x ppc64le - if [ $DoModules -eq 1 ]; then - if [ -x /usr/bin/rpm-sign ]; then - install -m 0644 %{secureboot_key_0} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/%{signing_key_filename} - else - install -m 0644 certs/signing_key.x509.sign${Variant:++${Variant}} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca.cer - openssl x509 -in certs/signing_key.pem.sign${Variant:++${Variant}} -outform der -out $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/%{signing_key_filename} - chmod 0644 $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/%{signing_key_filename} - fi - fi - %endif - -%if %{with_ipaclones} - MAXPROCS=$(echo %{?_smp_mflags} | sed -n 's/-j\s*\([0-9]\+\)/\1/p') - if [ -z "$MAXPROCS" ]; then - MAXPROCS=1 - fi - if [ "$Variant" == "" ]; then - mkdir -p $RPM_BUILD_ROOT/$DevelDir-ipaclones - find . -name '*.ipa-clones' | xargs -i{} -r -n 1 -P $MAXPROCS install -m 644 -D "{}" "$RPM_BUILD_ROOT/$DevelDir-ipaclones/{}" - fi -%endif - -} - -### -# DO it... -### - -# prepare directories -rm -rf $RPM_BUILD_ROOT -mkdir -p $RPM_BUILD_ROOT/boot -mkdir -p $RPM_BUILD_ROOT%{_libexecdir} - -cd linux-%{KVERREL} - - -%if %{with_debug} -BuildKernel %make_target %kernel_image %{_use_vdso} debug -%endif - -%if %{with_zfcpdump} -BuildKernel %make_target %kernel_image %{_use_vdso} zfcpdump -%endif - -%if %{with_pae} -BuildKernel %make_target %kernel_image %{use_vdso} lpae -%endif - -%if %{with_up} -BuildKernel %make_target %kernel_image %{_use_vdso} -%endif - -%ifnarch noarch i686 -%if !%{with_debug} && !%{with_zfcpdump} && !%{with_pae} && !%{with_up} -# If only building the user space tools, then initialize the build environment -# and some variables so that the various userspace tools can be built. -InitBuildVars -%endif -%endif - -%ifarch aarch64 -%global perf_build_extra_opts CORESIGHT=1 -%endif -%global perf_make \ - %{__make} %{?make_opts} EXTRA_CFLAGS="${RPM_OPT_FLAGS}" LDFLAGS="%{__global_ldflags}" %{?cross_opts} -C tools/perf V=1 NO_PERF_READ_VDSO32=1 NO_PERF_READ_VDSOX32=1 WERROR=0 NO_LIBUNWIND=1 HAVE_CPLUS_DEMANGLE=1 NO_GTK2=1 NO_STRLCPY=1 NO_BIONIC=1 LIBBPF_DYNAMIC=1 LIBTRACEEVENT_DYNAMIC=1 %{?perf_build_extra_opts} prefix=%{_prefix} PYTHON=%{__python3} -%if %{with_perf} -# perf -# make sure check-headers.sh is executable -chmod +x tools/perf/check-headers.sh -%{perf_make} DESTDIR=$RPM_BUILD_ROOT all -%endif - -%global tools_make \ - CFLAGS="${RPM_OPT_FLAGS}" LDFLAGS="%{__global_ldflags}" %{make} %{?make_opts} - -%if %{with_tools} -%ifarch %{cpupowerarchs} -# cpupower -# make sure version-gen.sh is executable. -chmod +x tools/power/cpupower/utils/version-gen.sh -%{tools_make} %{?_smp_mflags} -C tools/power/cpupower CPUFREQ_BENCH=false DEBUG=false -%ifarch x86_64 - pushd tools/power/cpupower/debug/x86_64 - %{tools_make} %{?_smp_mflags} centrino-decode powernow-k8-decode - popd -%endif -%ifarch x86_64 - pushd tools/power/x86/x86_energy_perf_policy/ - %{tools_make} - popd - pushd tools/power/x86/turbostat - %{tools_make} - popd - pushd tools/power/x86/intel-speed-select - %{tools_make} - popd - pushd tools/arch/x86/intel_sdsi - %{tools_make} CFLAGS="${RPM_OPT_FLAGS}" - popd -%endif -%endif -pushd tools/thermal/tmon/ -%{tools_make} -popd -pushd tools/iio/ -%{tools_make} -popd -pushd tools/gpio/ -%{tools_make} -popd -# build VM tools -pushd tools/vm/ -%{tools_make} slabinfo page_owner_sort -popd -%endif - -if [ -f $DevelDir/vmlinux.h ]; then - RPM_VMLINUX_H=$DevelDir/vmlinux.h -fi - -%global bpftool_make \ - %{__make} EXTRA_CFLAGS="${RPM_OPT_FLAGS}" EXTRA_LDFLAGS="%{__global_ldflags}" DESTDIR=$RPM_BUILD_ROOT %{?make_opts} VMLINUX_H="${RPM_VMLINUX_H}" V=1 -%if %{with_bpftool} -pushd tools/bpf/bpftool -%{bpftool_make} -popd -%endif - -%if %{with_selftests} -# Unfortunately, samples/bpf/Makefile expects that the headers are installed -# in the source tree. We installed them previously to $RPM_BUILD_ROOT/usr -# but there's no way to tell the Makefile to take them from there. -%{make} %{?_smp_mflags} headers_install -%{make} %{?_smp_mflags} ARCH=$Arch V=1 M=samples/bpf/ || true - -# Prevent bpf selftests to build bpftool repeatedly: -export BPFTOOL=$(pwd)/tools/bpf/bpftool/bpftool - -pushd tools/testing/selftests -# We need to install here because we need to call make with ARCH set which -# doesn't seem possible to do in the install section. -%{make} %{?_smp_mflags} ARCH=$Arch V=1 TARGETS="bpf vm livepatch net net/forwarding net/mptcp netfilter tc-testing" SKIP_TARGETS="" INSTALL_PATH=%{buildroot}%{_libexecdir}/kselftests VMLINUX_H="${RPM_VMLINUX_H}" install - -# 'make install' for bpf is broken and upstream refuses to fix it. -# Install the needed files manually. -for dir in bpf bpf/no_alu32 bpf/progs; do - # In ARK, the rpm build continues even if some of the selftests - # cannot be built. It's not always possible to build selftests, - # as upstream sometimes dependens on too new llvm version or has - # other issues. If something did not get built, just skip it. - test -d $dir || continue - mkdir -p %{buildroot}%{_libexecdir}/kselftests/$dir - find $dir -maxdepth 1 -type f \( -executable -o -name '*.py' -o -name settings -o \ - -name 'btf_dump_test_case_*.c' -o -name '*.ko' -o \ - -name '*.o' -exec sh -c 'readelf -h "{}" | grep -q "^ Machine:.*BPF"' \; \) -print0 | \ - xargs -0 cp -t %{buildroot}%{_libexecdir}/kselftests/$dir || true -done -popd -export -n BPFTOOL -%endif - -%if %{with_doc} -# Make the HTML pages. -%{__make} PYTHON=/usr/bin/python3 htmldocs || %{doc_build_fail} - -# sometimes non-world-readable files sneak into the kernel source tree -chmod -R a=rX Documentation -find Documentation -type d | xargs chmod u+w -%endif - -# In the modsign case, we do 3 things. 1) We check the "variant" and hard -# code the value in the following invocations. This is somewhat sub-optimal -# but we're doing this inside of an RPM macro and it isn't as easy as it -# could be because of that. 2) We restore the .tmp_versions/ directory from -# the one we saved off in BuildKernel above. This is to make sure we're -# signing the modules we actually built/installed in that variant. 3) We -# grab the arch and invoke mod-sign.sh command to actually sign the modules. -# -# We have to do all of those things _after_ find-debuginfo runs, otherwise -# that will strip the signature off of the modules. -# -# Don't sign modules for the zfcpdump variant as it is monolithic. - -%define __modsign_install_post \ - if [ "%{signmodules}" -eq "1" ]; then \ - if [ "%{with_pae}" -ne "0" ]; then \ - %{modsign_cmd} certs/signing_key.pem.sign+lpae certs/signing_key.x509.sign+lpae $RPM_BUILD_ROOT/lib/modules/%{KVERREL}+lpae/ \ - fi \ - if [ "%{with_debug}" -ne "0" ]; then \ - %{modsign_cmd} certs/signing_key.pem.sign+debug certs/signing_key.x509.sign+debug $RPM_BUILD_ROOT/lib/modules/%{KVERREL}+debug/ \ - fi \ - if [ "%{with_up}" -ne "0" ]; then \ - %{modsign_cmd} certs/signing_key.pem.sign certs/signing_key.x509.sign $RPM_BUILD_ROOT/lib/modules/%{KVERREL}/ \ - fi \ - fi \ - if [ "%{zipmodules}" -eq "1" ]; then \ - find $RPM_BUILD_ROOT/lib/modules/ -type f -name '*.ko' | xargs -P${RPM_BUILD_NCPUS} -r xz; \ - fi \ -%{nil} - -### -### Special hacks for debuginfo subpackages. -### - -# This macro is used by %%install, so we must redefine it before that. -%define debug_package %{nil} - -%if %{with_debuginfo} - -%ifnarch noarch -%global __debug_package 1 -%files -f debugfiles.list debuginfo-common-%{_target_cpu} -%endif - -%endif - -# We don't want to package debuginfo for self-tests and samples but -# we have to delete them to avoid an error messages about unpackaged -# files. -# Delete the debuginfo for kernel-devel files -%define __remove_unwanted_dbginfo_install_post \ - if [ "%{with_selftests}" -ne "0" ]; then \ - rm -rf $RPM_BUILD_ROOT/usr/lib/debug/usr/libexec/ksamples; \ - rm -rf $RPM_BUILD_ROOT/usr/lib/debug/usr/libexec/kselftests; \ - fi \ - rm -rf $RPM_BUILD_ROOT/usr/lib/debug/usr/src; \ -%{nil} - -# -# Disgusting hack alert! We need to ensure we sign modules *after* all -# invocations of strip occur, which is in __debug_install_post if -# find-debuginfo.sh runs, and __os_install_post if not. -# -%define __spec_install_post \ - %{?__debug_package:%{__debug_install_post}}\ - %{__arch_install_post}\ - %{__os_install_post}\ - %{__remove_unwanted_dbginfo_install_post}\ - %{__modsign_install_post} - -### -### install -### - -%install - -cd linux-%{KVERREL} - -%if %{with_doc} -docdir=$RPM_BUILD_ROOT%{_datadir}/doc/kernel-doc-%{specversion}-%{pkgrelease} - -# copy the source over -mkdir -p $docdir -tar -h -f - --exclude=man --exclude='.*' -c Documentation | tar xf - -C $docdir - -# with_doc -%endif - -# We have to do the headers install before the tools install because the -# kernel headers_install will remove any header files in /usr/include that -# it doesn't install itself. - -%if %{with_headers} -# Install kernel headers -%{__make} ARCH=%{hdrarch} INSTALL_HDR_PATH=$RPM_BUILD_ROOT/usr headers_install - -find $RPM_BUILD_ROOT/usr/include \ - \( -name .install -o -name .check -o \ - -name ..install.cmd -o -name ..check.cmd \) -delete - -%endif - -%if %{with_cross_headers} -%if 0%{?fedora} -HDR_ARCH_LIST='arm arm64 powerpc s390 x86' -%else -HDR_ARCH_LIST='arm64 powerpc s390 x86' -%endif -mkdir -p $RPM_BUILD_ROOT/usr/tmp-headers - -for arch in $HDR_ARCH_LIST; do - mkdir $RPM_BUILD_ROOT/usr/tmp-headers/arch-${arch} - %{__make} ARCH=${arch} INSTALL_HDR_PATH=$RPM_BUILD_ROOT/usr/tmp-headers/arch-${arch} headers_install -done - -find $RPM_BUILD_ROOT/usr/tmp-headers \ - \( -name .install -o -name .check -o \ - -name ..install.cmd -o -name ..check.cmd \) -delete - -# Copy all the architectures we care about to their respective asm directories -for arch in $HDR_ARCH_LIST ; do - mkdir -p $RPM_BUILD_ROOT/usr/${arch}-linux-gnu/include - mv $RPM_BUILD_ROOT/usr/tmp-headers/arch-${arch}/include/* $RPM_BUILD_ROOT/usr/${arch}-linux-gnu/include/ -done - -rm -rf $RPM_BUILD_ROOT/usr/tmp-headers -%endif - -%if %{with_kernel_abi_stablelists} -# kabi directory -INSTALL_KABI_PATH=$RPM_BUILD_ROOT/lib/modules/ -mkdir -p $INSTALL_KABI_PATH - -# install kabi releases directories -tar xjvf %{SOURCE300} -C $INSTALL_KABI_PATH -# with_kernel_abi_stablelists -%endif - -%if %{with_perf} -# perf tool binary and supporting scripts/binaries -%{perf_make} DESTDIR=$RPM_BUILD_ROOT lib=%{_lib} install-bin -# remove the 'trace' symlink. -rm -f %{buildroot}%{_bindir}/trace - -# For both of the below, yes, this should be using a macro but right now -# it's hard coded and we don't actually want it anyway right now. -# Whoever wants examples can fix it up! - -# remove examples -rm -rf %{buildroot}/usr/lib/perf/examples -rm -rf %{buildroot}/usr/lib/perf/include - -# python-perf extension -%{perf_make} DESTDIR=$RPM_BUILD_ROOT install-python_ext - -# perf man pages (note: implicit rpm magic compresses them later) -mkdir -p %{buildroot}/%{_mandir}/man1 -%{perf_make} DESTDIR=$RPM_BUILD_ROOT install-man - -# remove any tracevent files, eg. its plugins still gets built and installed, -# even if we build against system's libtracevent during perf build (by setting -# LIBTRACEEVENT_DYNAMIC=1 above in perf_make macro). Those files should already -# ship with libtraceevent package. -rm -rf %{buildroot}%{_libdir}/traceevent -%endif - -%if %{with_tools} -%ifarch %{cpupowerarchs} -%{make} -C tools/power/cpupower DESTDIR=$RPM_BUILD_ROOT libdir=%{_libdir} mandir=%{_mandir} CPUFREQ_BENCH=false install -rm -f %{buildroot}%{_libdir}/*.{a,la} -%find_lang cpupower -mv cpupower.lang ../ -%ifarch x86_64 - pushd tools/power/cpupower/debug/x86_64 - install -m755 centrino-decode %{buildroot}%{_bindir}/centrino-decode - install -m755 powernow-k8-decode %{buildroot}%{_bindir}/powernow-k8-decode - popd -%endif -chmod 0755 %{buildroot}%{_libdir}/libcpupower.so* -mkdir -p %{buildroot}%{_unitdir} %{buildroot}%{_sysconfdir}/sysconfig -install -m644 %{SOURCE2000} %{buildroot}%{_unitdir}/cpupower.service -install -m644 %{SOURCE2001} %{buildroot}%{_sysconfdir}/sysconfig/cpupower -%endif -%ifarch x86_64 - mkdir -p %{buildroot}%{_mandir}/man8 - pushd tools/power/x86/x86_energy_perf_policy - %{tools_make} DESTDIR=%{buildroot} install - popd - pushd tools/power/x86/turbostat - %{tools_make} DESTDIR=%{buildroot} install - popd - pushd tools/power/x86/intel-speed-select - %{tools_make} DESTDIR=%{buildroot} install - popd - pushd tools/arch/x86/intel_sdsi - %{tools_make} CFLAGS="${RPM_OPT_FLAGS}" DESTDIR=%{buildroot} install - popd -%endif -pushd tools/thermal/tmon -%{tools_make} INSTALL_ROOT=%{buildroot} install -popd -pushd tools/iio -%{tools_make} DESTDIR=%{buildroot} install -popd -pushd tools/gpio -%{tools_make} DESTDIR=%{buildroot} install -popd -install -m644 -D %{SOURCE2002} %{buildroot}%{_sysconfdir}/logrotate.d/kvm_stat -pushd tools/kvm/kvm_stat -%{__make} INSTALL_ROOT=%{buildroot} install-tools -%{__make} INSTALL_ROOT=%{buildroot} install-man -install -m644 -D kvm_stat.service %{buildroot}%{_unitdir}/kvm_stat.service -popd -# install VM tools -pushd tools/vm/ -install -m755 slabinfo %{buildroot}%{_bindir}/slabinfo -install -m755 page_owner_sort %{buildroot}%{_bindir}/page_owner_sort -popd -%endif - -if [ -f $DevelDir/vmlinux.h ]; then - RPM_VMLINUX_H=$DevelDir/vmlinux.h -fi - -%if %{with_bpftool} -pushd tools/bpf/bpftool -%{bpftool_make} prefix=%{_prefix} bash_compdir=%{_sysconfdir}/bash_completion.d/ mandir=%{_mandir} install doc-install -popd -%endif - -%if %{with_selftests} -pushd samples -install -d %{buildroot}%{_libexecdir}/ksamples -# install bpf samples -pushd bpf -install -d %{buildroot}%{_libexecdir}/ksamples/bpf -find -type f -executable -exec install -m755 {} %{buildroot}%{_libexecdir}/ksamples/bpf \; -install -m755 *.sh %{buildroot}%{_libexecdir}/ksamples/bpf -# test_lwt_bpf.sh compiles test_lwt_bpf.c when run; this works only from the -# kernel tree. Just remove it. -rm %{buildroot}%{_libexecdir}/ksamples/bpf/test_lwt_bpf.sh -install -m644 *_kern.o %{buildroot}%{_libexecdir}/ksamples/bpf || true -install -m644 tcp_bpf.readme %{buildroot}%{_libexecdir}/ksamples/bpf -popd -# install pktgen samples -pushd pktgen -install -d %{buildroot}%{_libexecdir}/ksamples/pktgen -find . -type f -executable -exec install -m755 {} %{buildroot}%{_libexecdir}/ksamples/pktgen/{} \; -find . -type f ! -executable -exec install -m644 {} %{buildroot}%{_libexecdir}/ksamples/pktgen/{} \; -popd -popd -# install vm selftests -pushd tools/testing/selftests/vm -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/vm/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/vm/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/vm/{} \; -popd -# install drivers/net/mlxsw selftests -pushd tools/testing/selftests/drivers/net/mlxsw -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/drivers/net/mlxsw/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/drivers/net/mlxsw/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/drivers/net/mlxsw/{} \; -popd -# install drivers/net/netdevsim selftests -pushd tools/testing/selftests/drivers/net/netdevsim -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/drivers/net/netdevsim/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/drivers/net/netdevsim/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/drivers/net/netdevsim/{} \; -popd -# install net/forwarding selftests -pushd tools/testing/selftests/net/forwarding -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/net/forwarding/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/net/forwarding/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/net/forwarding/{} \; -popd -# install net/mptcp selftests -pushd tools/testing/selftests/net/mptcp -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/net/mptcp/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/net/mptcp/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/net/mptcp/{} \; -popd -# install tc-testing selftests -pushd tools/testing/selftests/tc-testing -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/tc-testing/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/tc-testing/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/tc-testing/{} \; -popd -# install livepatch selftests -pushd tools/testing/selftests/livepatch -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/livepatch/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/livepatch/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/livepatch/{} \; -popd -# install netfilter selftests -pushd tools/testing/selftests/netfilter -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/netfilter/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/netfilter/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/netfilter/{} \; -popd -%endif - -### -### clean -### - -### -### scripts -### - -%if %{with_tools} -%post -n kernel-tools-libs -/sbin/ldconfig - -%postun -n kernel-tools-libs -/sbin/ldconfig -%endif - -# -# This macro defines a %%post script for a kernel*-devel package. -# %%kernel_devel_post [<subpackage>] -# Note we don't run hardlink if ostree is in use, as ostree is -# a far more sophisticated hardlink implementation. -# https://github.com/projectatomic/rpm-ostree/commit/58a79056a889be8814aa51f507b2c7a4dccee526 -# -# The deletion of *.hardlink-temporary files is a temporary workaround -# for this bug in the hardlink binary (fixed in util-linux 2.38): -# https://github.com/util-linux/util-linux/issues/1602 -# -%define kernel_devel_post() \ -%{expand:%%post %{?1:%{1}-}devel}\ -if [ -f /etc/sysconfig/kernel ]\ -then\ - . /etc/sysconfig/kernel || exit $?\ -fi\ -if [ "$HARDLINK" != "no" -a -x /usr/bin/hardlink -a ! -e /run/ostree-booted ] \ -then\ - (cd /usr/src/kernels/%{KVERREL}%{?1:+%{1}} &&\ - /usr/bin/find . -type f | while read f; do\ - hardlink -c /usr/src/kernels/*%{?dist}.*/$f $f > /dev/null\ - done;\ - /usr/bin/find /usr/src/kernels -type f -name '*.hardlink-temporary' -delete\ - )\ -fi\ -%{nil} - -# -# This macro defines a %%post script for a kernel*-modules-extra package. -# It also defines a %%postun script that does the same thing. -# %%kernel_modules_extra_post [<subpackage>] -# -%define kernel_modules_extra_post() \ -%{expand:%%post %{?1:%{1}-}modules-extra}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil}\ -%{expand:%%postun %{?1:%{1}-}modules-extra}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil} - -# -# This macro defines a %%post script for a kernel*-modules-internal package. -# It also defines a %%postun script that does the same thing. -# %%kernel_modules_internal_post [<subpackage>] -# -%define kernel_modules_internal_post() \ -%{expand:%%post %{?1:%{1}-}modules-internal}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil}\ -%{expand:%%postun %{?1:%{1}-}modules-internal}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil} - -# -# This macro defines a %%post script for a kernel*-modules package. -# It also defines a %%postun script that does the same thing. -# %%kernel_modules_post [<subpackage>] -# -%define kernel_modules_post() \ -%{expand:%%post %{?1:%{1}-}modules}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -if [ ! -f %{_localstatedir}/lib/rpm-state/%{name}/installing_core_%{KVERREL}%{?1:+%{1}} ]; then\ - mkdir -p %{_localstatedir}/lib/rpm-state/%{name}\ - touch %{_localstatedir}/lib/rpm-state/%{name}/need_to_run_dracut_%{KVERREL}%{?1:+%{1}}\ -fi\ -%{nil}\ -%{expand:%%postun %{?1:%{1}-}modules}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil}\ -%{expand:%%posttrans %{?1:%{1}-}modules}\ -if [ -f %{_localstatedir}/lib/rpm-state/%{name}/need_to_run_dracut_%{KVERREL}%{?1:+%{1}} ]; then\ - rm -f %{_localstatedir}/lib/rpm-state/%{name}/need_to_run_dracut_%{KVERREL}%{?1:+%{1}}\ - echo "Running: dracut -f --kver %{KVERREL}%{?1:+%{1}}"\ - dracut -f --kver "%{KVERREL}%{?1:+%{1}}" || exit $?\ -fi\ -%{nil} - -# This macro defines a %%posttrans script for a kernel package. -# %%kernel_variant_posttrans [<subpackage>] -# More text can follow to go at the end of this variant's %%post. -# -%define kernel_variant_posttrans() \ -%{expand:%%posttrans %{?1:%{1}-}core}\ -%if 0%{!?fedora:1}\ -if [ -x %{_sbindir}/weak-modules ]\ -then\ - %{_sbindir}/weak-modules --add-kernel %{KVERREL}%{?1:+%{1}} || exit $?\ -fi\ -%endif\ -rm -f %{_localstatedir}/lib/rpm-state/%{name}/installing_core_%{KVERREL}%{?1:+%{1}}\ -/bin/kernel-install add %{KVERREL}%{?1:+%{1}} /lib/modules/%{KVERREL}%{?1:+%{1}}/vmlinuz || exit $?\ -%{nil} - -# -# This macro defines a %%post script for a kernel package and its devel package. -# %%kernel_variant_post [-v <subpackage>] [-r <replace>] -# More text can follow to go at the end of this variant's %%post. -# -%define kernel_variant_post(v:r:) \ -%{expand:%%kernel_devel_post %{?-v*}}\ -%{expand:%%kernel_modules_post %{?-v*}}\ -%{expand:%%kernel_modules_extra_post %{?-v*}}\ -%{expand:%%kernel_modules_internal_post %{?-v*}}\ -%{expand:%%kernel_variant_posttrans %{?-v*}}\ -%{expand:%%post %{?-v*:%{-v*}-}core}\ -%{-r:\ -if [ `uname -i` == "x86_64" -o `uname -i` == "i386" ] &&\ - [ -f /etc/sysconfig/kernel ]; then\ - /bin/sed -r -i -e 's/^DEFAULTKERNEL=%{-r*}$/DEFAULTKERNEL=kernel%{?-v:-%{-v*}}/' /etc/sysconfig/kernel || exit $?\ -fi}\ -mkdir -p %{_localstatedir}/lib/rpm-state/%{name}\ -touch %{_localstatedir}/lib/rpm-state/%{name}/installing_core_%{KVERREL}%{?1:+%{1}}\ -%{nil} - -# -# This macro defines a %%preun script for a kernel package. -# %%kernel_variant_preun <subpackage> -# -%define kernel_variant_preun() \ -%{expand:%%preun %{?1:%{1}-}core}\ -/bin/kernel-install remove %{KVERREL}%{?1:+%{1}} /lib/modules/%{KVERREL}%{?1:+%{1}}/vmlinuz || exit $?\ -if [ -x %{_sbindir}/weak-modules ]\ -then\ - %{_sbindir}/weak-modules --remove-kernel %{KVERREL}%{?1:+%{1}} || exit $?\ -fi\ -%{nil} - -%kernel_variant_preun -%kernel_variant_post -r kernel-smp - -%if %{with_pae} -%kernel_variant_preun lpae -%kernel_variant_post -v lpae -r (kernel|kernel-smp) -%endif - -%if %{with_debug} -%kernel_variant_preun debug -%kernel_variant_post -v debug -%endif - -%if %{with_zfcpdump} -%kernel_variant_preun zfcpdump -%kernel_variant_post -v zfcpdump -%endif - -if [ -x /sbin/ldconfig ] -then - /sbin/ldconfig -X || exit $? -fi - -### -### file lists -### - -%if %{with_headers} -%files headers -/usr/include/* -%endif - -%if %{with_cross_headers} -%files cross-headers -/usr/*-linux-gnu/include/* -%endif - -%if %{with_kernel_abi_stablelists} -%files -n kernel-abi-stablelists -/lib/modules/kabi-* -%endif - -%if %{with_kabidw_base} -%ifarch x86_64 s390x ppc64 ppc64le aarch64 -%files kernel-kabidw-base-internal -%defattr(-,root,root) -/kabidw-base/%{_target_cpu}/* -%endif -%endif - -# only some architecture builds need kernel-doc -%if %{with_doc} -%files doc -%defattr(-,root,root) -%{_datadir}/doc/kernel-doc-%{specversion}-%{pkgrelease}/Documentation/* -%dir %{_datadir}/doc/kernel-doc-%{specversion}-%{pkgrelease}/Documentation -%dir %{_datadir}/doc/kernel-doc-%{specversion}-%{pkgrelease} -%endif - -%if %{with_perf} -%files -n perf -%{_bindir}/perf -%{_libdir}/libperf-jvmti.so -%dir %{_libexecdir}/perf-core -%{_libexecdir}/perf-core/* -%{_datadir}/perf-core/* -%{_mandir}/man[1-8]/perf* -%{_sysconfdir}/bash_completion.d/perf -%doc linux-%{KVERREL}/tools/perf/Documentation/examples.txt -%{_docdir}/perf-tip/tips.txt - -%files -n python3-perf -%{python3_sitearch}/* - -%if %{with_debuginfo} -%files -f perf-debuginfo.list -n perf-debuginfo - -%files -f python3-perf-debuginfo.list -n python3-perf-debuginfo -%endif -# with_perf -%endif - -%if %{with_tools} -%ifnarch %{cpupowerarchs} -%files -n kernel-tools -%else -%files -n kernel-tools -f cpupower.lang -%{_bindir}/cpupower -%{_datadir}/bash-completion/completions/cpupower -%ifarch x86_64 -%{_bindir}/centrino-decode -%{_bindir}/powernow-k8-decode -%endif -%{_unitdir}/cpupower.service -%{_mandir}/man[1-8]/cpupower* -%config(noreplace) %{_sysconfdir}/sysconfig/cpupower -%ifarch x86_64 -%{_bindir}/x86_energy_perf_policy -%{_mandir}/man8/x86_energy_perf_policy* -%{_bindir}/turbostat -%{_mandir}/man8/turbostat* -%{_bindir}/intel-speed-select -%{_sbindir}/intel_sdsi -%endif -# cpupowerarchs -%endif -%{_bindir}/tmon -%{_bindir}/iio_event_monitor -%{_bindir}/iio_generic_buffer -%{_bindir}/lsiio -%{_bindir}/lsgpio -%{_bindir}/gpio-hammer -%{_bindir}/gpio-event-mon -%{_bindir}/gpio-watch -%{_mandir}/man1/kvm_stat* -%{_bindir}/kvm_stat -%{_unitdir}/kvm_stat.service -%config(noreplace) %{_sysconfdir}/logrotate.d/kvm_stat -%{_bindir}/page_owner_sort -%{_bindir}/slabinfo - -%if %{with_debuginfo} -%files -f kernel-tools-debuginfo.list -n kernel-tools-debuginfo -%endif - -%ifarch %{cpupowerarchs} -%files -n kernel-tools-libs -%{_libdir}/libcpupower.so.0 -%{_libdir}/libcpupower.so.0.0.1 - -%files -n kernel-tools-libs-devel -%{_libdir}/libcpupower.so -%{_includedir}/cpufreq.h -%endif -# with_tools -%endif - -%if %{with_bpftool} -%files -n bpftool -%{_sbindir}/bpftool -%{_sysconfdir}/bash_completion.d/bpftool -%{_mandir}/man8/bpftool-cgroup.8.gz -%{_mandir}/man8/bpftool-gen.8.gz -%{_mandir}/man8/bpftool-iter.8.gz -%{_mandir}/man8/bpftool-link.8.gz -%{_mandir}/man8/bpftool-map.8.gz -%{_mandir}/man8/bpftool-prog.8.gz -%{_mandir}/man8/bpftool-perf.8.gz -%{_mandir}/man8/bpftool.8.gz -%{_mandir}/man8/bpftool-net.8.gz -%{_mandir}/man8/bpftool-feature.8.gz -%{_mandir}/man8/bpftool-btf.8.gz -%{_mandir}/man8/bpftool-struct_ops.8.gz - -%if %{with_debuginfo} -%files -f bpftool-debuginfo.list -n bpftool-debuginfo -%defattr(-,root,root) -%endif -%endif - -%if %{with_selftests} -%files selftests-internal -%{_libexecdir}/ksamples -%{_libexecdir}/kselftests -%endif - -# empty meta-package -%ifnarch %nobuildarches noarch -%files -%endif - -%if %{with_gcov} -%ifnarch %nobuildarches noarch -%files gcov -%{_builddir} -%endif -%endif - -# This is %%{image_install_path} on an arch where that includes ELF files, -# or empty otherwise. -%define elf_image_install_path %{?kernel_image_elf:%{image_install_path}} - -# -# This macro defines the %%files sections for a kernel package -# and its devel and debuginfo packages. -# %%kernel_variant_files [-k vmlinux] <use_vdso> <condition> <subpackage> -# -%define kernel_variant_files(k:) \ -%if %{2}\ -%{expand:%%files -f kernel-%{?3:%{3}-}core.list %{?1:-f kernel-%{?3:%{3}-}ldsoconf.list} %{?3:%{3}-}core}\ -%{!?_licensedir:%global license %%doc}\ -%license linux-%{KVERREL}/COPYING-%{version}-%{release}\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/%{?-k:%{-k*}}%{!?-k:vmlinuz}\ -%ghost /%{image_install_path}/%{?-k:%{-k*}}%{!?-k:vmlinuz}-%{KVERREL}%{?3:+%{3}}\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/.vmlinuz.hmac \ -%ghost /%{image_install_path}/.vmlinuz-%{KVERREL}%{?3:+%{3}}.hmac \ -%ifarch %{arm} aarch64\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/dtb \ -%ghost /%{image_install_path}/dtb-%{KVERREL}%{?3:+%{3}} \ -%endif\ -%attr(0600, root, root) /lib/modules/%{KVERREL}%{?3:+%{3}}/System.map\ -%ghost %attr(0600, root, root) /boot/System.map-%{KVERREL}%{?3:+%{3}}\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/symvers.gz\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/config\ -%ghost %attr(0600, root, root) /boot/symvers-%{KVERREL}%{?3:+%{3}}.gz\ -%ghost %attr(0600, root, root) /boot/initramfs-%{KVERREL}%{?3:+%{3}}.img\ -%ghost %attr(0644, root, root) /boot/config-%{KVERREL}%{?3:+%{3}}\ -%dir /lib/modules\ -%dir /lib/modules/%{KVERREL}%{?3:+%{3}}\ -%dir /lib/modules/%{KVERREL}%{?3:+%{3}}/kernel\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/build\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/source\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/updates\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/weak-updates\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/systemtap\ -%{_datadir}/doc/kernel-keys/%{KVERREL}%{?3:+%{3}}\ -%if %{1}\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/vdso\ -%endif\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/modules.*\ -%{expand:%%files -f kernel-%{?3:%{3}-}modules.list %{?3:%{3}-}modules}\ -%{expand:%%files %{?3:%{3}-}devel}\ -%defverify(not mtime)\ -/usr/src/kernels/%{KVERREL}%{?3:+%{3}}\ -%{expand:%%files %{?3:%{3}-}devel-matched}\ -%{expand:%%files -f kernel-%{?3:%{3}-}modules-extra.list %{?3:%{3}-}modules-extra}\ -%config(noreplace) /etc/modprobe.d/*-blacklist.conf\ -%{expand:%%files -f kernel-%{?3:%{3}-}modules-internal.list %{?3:%{3}-}modules-internal}\ -%if %{with_debuginfo}\ -%ifnarch noarch\ -%{expand:%%files -f debuginfo%{?3}.list %{?3:%{3}-}debuginfo}\ -%endif\ -%endif\ -%if %{?3:1} %{!?3:0}\ -%{expand:%%files %{3}}\ -%endif\ -%endif\ -%{nil} - -%kernel_variant_files %{_use_vdso} %{with_up} -%kernel_variant_files %{_use_vdso} %{with_debug} debug -%if %{with_debug_meta} -%files debug -%files debug-core -%files debug-devel -%files debug-devel-matched -%files debug-modules -%files debug-modules-extra -%endif -%kernel_variant_files %{use_vdso} %{with_pae} lpae -%kernel_variant_files %{_use_vdso} %{with_zfcpdump} zfcpdump - -%define kernel_variant_ipaclones(k:) \ -%if %{1}\ -%if %{with_ipaclones}\ -%{expand:%%files %{?2:%{2}-}ipaclones-internal}\ -%defattr(-,root,root)\ -%defverify(not mtime)\ -/usr/src/kernels/%{KVERREL}%{?2:+%{2}}-ipaclones\ -%endif\ -%endif\ -%{nil} - -%kernel_variant_ipaclones %{with_up} - -# plz don't put in a version string unless you're going to tag -# and build. -# -# -%changelog Mon Mar 28 2022 Fedora Kernel Team <kernel-team@xxxxxxxxxxxxxxxxx> [5.16.0-0.rc5.6.test] - -### -# The following Emacs magic makes C-c C-e use UTC dates. -# Local Variables: -# rpm-change-log-uses-utc: t -# End: -### diff --git a/redhat/self-test/data/centos-2585cf9dfaad.fc25.spec b/redhat/self-test/data/centos-2585cf9dfaad.fc25.spec index blahblah..blahblah 100755 --- a/redhat/self-test/data/centos-2585cf9dfaad.fc25.spec +++ b/redhat/self-test/data/centos-2585cf9dfaad.fc25.spec @@ -1,3050 +1,13 @@ -# All Global changes to build and install go here. -# Per the below section about __spec_install_pre, any rpm -# environment changes that affect %%install need to go -# here before the %%install macro is pre-built. - -# Disable LTO in userspace packages. -%global _lto_cflags %{nil} - -# Option to enable compiling with clang instead of gcc. -%bcond_with toolchain_clang - -%if %{with toolchain_clang} -%global toolchain clang -%endif - -# Compile the kernel with LTO (only supported when building with clang). -%bcond_with clang_lto - -%if %{with clang_lto} && %{without toolchain_clang} -{error:clang_lto requires --with toolchain_clang} -%endif - -# Cross compile on copr for arm -# See https://bugzilla.redhat.com/1879599 -%if 0%{?_with_cross_arm:1} -%global _target_cpu armv7hl -%global _arch arm -%global _build_arch arm -%global _with_cross 1 -%endif - -# The kernel's %%install section is special -# Normally the %%install section starts by cleaning up the BUILD_ROOT -# like so: -# -# %%__spec_install_pre %%{___build_pre}\ -# [ "$RPM_BUILD_ROOT" != "/" ] && rm -rf "${RPM_BUILD_ROOT}"\ -# mkdir -p `dirname "$RPM_BUILD_ROOT"`\ -# mkdir "$RPM_BUILD_ROOT"\ -# %%{nil} -# -# But because of kernel variants, the %%build section, specifically -# BuildKernel(), moves each variant to its final destination as the -# variant is built. This violates the expectation of the %%install -# section. As a result we snapshot the current env variables and -# purposely leave out the removal section. All global wide changes -# should be added above this line otherwise the %%install section -# will not see them. -%global __spec_install_pre %{___build_pre} - -# At the time of this writing (2019-03), RHEL8 packages use w2.xzdio -# compression for rpms (xz, level 2). -# Kernel has several large (hundreds of mbytes) rpms, they take ~5 mins -# to compress by single-threaded xz. Switch to threaded compression, -# and from level 2 to 3 to keep compressed sizes close to "w2" results. -# -# NB: if default compression in /usr/lib/rpm/redhat/macros ever changes, -# this one might need tweaking (e.g. if default changes to w3.xzdio, -# change below to w4T.xzdio): -# -# This is disabled on i686 as it triggers oom errors - -%ifnarch i686 -%define _binary_payload w3T.xzdio -%endif - -Summary: The Linux kernel -%if 0%{?fedora} -%define secure_boot_arch x86_64 -%else -%define secure_boot_arch x86_64 aarch64 s390x ppc64le -%endif - -# Signing for secure boot authentication -%ifarch %{secure_boot_arch} -%global signkernel 1 -%else -%global signkernel 0 -%endif - -# Sign modules on all arches -%global signmodules 1 - -# Compress modules only for architectures that build modules -%ifarch noarch -%global zipmodules 0 -%else -%global zipmodules 1 -%endif - -%if %{zipmodules} -%global zipsed -e 's/\.ko$/\.ko.xz/' -# for parallel xz processes, replace with 1 to go back to single process -%endif - -%if 0%{?fedora} -%define primary_target fedora -%else -%define primary_target rhel -%endif - -# -# genspec.sh variables -# - -# Include Fedora files %global include_fedora 1 -# Include RHEL files %global include_rhel 1 -# Provide Patchlist.changelog file %global patchlist_changelog 1 -# Set released_kernel to 1 when the upstream source tarball contains a -# kernel release. (This includes prepatch or "rc" releases.) -# Set released_kernel to 0 when the upstream source tarball contains an -# unreleased kernel development snapshot. %global released_kernel 0 -# Set debugbuildsenabled to 1 to build separate base and debug kernels -# (on supported architectures). The kernel-debug-* subpackages will -# contain the debug kernel. -# Set debugbuildsenabled to 0 to not build a separate debug kernel, but -# to build the base kernel using the debug configuration. (Specifying -# the --with-release option overrides this setting.) -%define debugbuildsenabled 1 %define buildid .test %define specversion 5.16.0 %define patchversion 5.16 %define pkgrelease 0.rc5.6.test %define kversion 5 %define tarfile_release 5.16.0-0.rc5.6.test -# This is needed to do merge window version magic %define patchlevel 16 -# allow pkg_release to have configurable %%{?dist} tag %define specrelease 0.rc5.6%{?buildid}%{?dist} - -# -# End of genspec.sh variables -# - -%define pkg_release %{specrelease} - -# libexec dir is not used by the linker, so the shared object there -# should not be exported to RPM provides -%global __provides_exclude_from ^%{_libexecdir}/kselftests - -# The following build options are enabled by default, but may become disabled -# by later architecture-specific checks. These can also be disabled by using -# --without <opt> in the rpmbuild command, or by forcing these values to 0. -# -# standard kernel -%define with_up %{?_without_up: 0} %{?!_without_up: 1} -# kernel PAE (only valid for ARM (lpae)) -%define with_pae %{?_without_pae: 0} %{?!_without_pae: 1} -# kernel-debug -%define with_debug %{?_without_debug: 0} %{?!_without_debug: 1} -# kernel-zfcpdump (s390 specific kernel for zfcpdump) -%define with_zfcpdump %{?_without_zfcpdump: 0} %{?!_without_zfcpdump: 1} -# kernel-doc -%define with_doc %{?_without_doc: 0} %{?!_without_doc: 1} -# kernel-headers -%define with_headers %{?_without_headers: 0} %{?!_without_headers: 1} -%define with_cross_headers %{?_without_cross_headers: 0} %{?!_without_cross_headers: 1} -# perf -%define with_perf %{?_without_perf: 0} %{?!_without_perf: 1} -# tools -%define with_tools %{?_without_tools: 0} %{?!_without_tools: 1} -# bpf tool -%define with_bpftool %{?_without_bpftool: 0} %{?!_without_bpftool: 1} -# kernel-debuginfo -%define with_debuginfo %{?_without_debuginfo: 0} %{?!_without_debuginfo: 1} -# kernel-abi-stablelists -%define with_kernel_abi_stablelists %{?_without_kernel_abi_stablelists: 0} %{?!_without_kernel_abi_stablelists: 1} -# internal samples and selftests -%define with_selftests %{?_without_selftests: 0} %{?!_without_selftests: 1} -# -# Additional options for user-friendly one-off kernel building: -# -# Only build the base kernel (--with baseonly): -%define with_baseonly %{?_with_baseonly: 1} %{?!_with_baseonly: 0} -# Only build the pae kernel (--with paeonly): -%define with_paeonly %{?_with_paeonly: 1} %{?!_with_paeonly: 0} -# Only build the debug kernel (--with dbgonly): -%define with_dbgonly %{?_with_dbgonly: 1} %{?!_with_dbgonly: 0} -# Control whether we perform a compat. check against published ABI. -%define with_kabichk %{?_without_kabichk: 0} %{?!_without_kabichk: 1} -# Temporarily disable kabi checks until RC. -%define with_kabichk 0 -# Control whether we perform a compat. check against DUP ABI. -%define with_kabidupchk %{?_with_kabidupchk: 1} %{?!_with_kabidupchk: 0} -# -# Control whether to run an extensive DWARF based kABI check. -# Note that this option needs to have baseline setup in SOURCE300. -%define with_kabidwchk %{?_without_kabidwchk: 0} %{?!_without_kabidwchk: 1} -%define with_kabidw_base %{?_with_kabidw_base: 1} %{?!_with_kabidw_base: 0} -# -# Control whether to install the vdso directories. -%define with_vdso_install %{?_without_vdso_install: 0} %{?!_without_vdso_install: 1} -# -# should we do C=1 builds with sparse -%define with_sparse %{?_with_sparse: 1} %{?!_with_sparse: 0} -# -# Cross compile requested? -%define with_cross %{?_with_cross: 1} %{?!_with_cross: 0} -# -# build a release kernel on rawhide -%define with_release %{?_with_release: 1} %{?!_with_release: 0} - -# verbose build, i.e. no silent rules and V=1 -%define with_verbose %{?_with_verbose: 1} %{?!_with_verbose: 0} - -# -# check for mismatched config options -%define with_configchecks %{?_without_configchecks: 0} %{?!_without_configchecks: 1} - -# -# gcov support -%define with_gcov %{?_with_gcov:1}%{?!_with_gcov:0} - -# -# ipa_clone support -%define with_ipaclones %{?_without_ipaclones: 0} %{?!_without_ipaclones: 1} - -# Want to build a vanilla kernel build without any non-upstream patches? -%define with_vanilla %{?_with_vanilla: 1} %{?!_with_vanilla: 0} - -%if 0%{?fedora} -# Kernel headers are being split out into a separate package -%define with_headers 0 -%define with_cross_headers 0 -# no ipa_clone for now -%define with_ipaclones 0 -# no stablelist -%define with_kernel_abi_stablelists 0 -# Fedora builds these separately -%define with_perf 0 -%define with_tools 0 -%define with_bpftool 0 -# selftests turns on bpftool -%define with_selftests 0 -%endif - -%if %{with_verbose} -%define make_opts V=1 -%else -%define make_opts -s -%endif - -%if %{with toolchain_clang} -%ifarch s390x ppc64le -%global llvm_ias 0 -%else -%global llvm_ias 1 -%endif -%global clang_make_opts HOSTCC=clang CC=clang LLVM_IAS=%{llvm_ias} -%if %{with clang_lto} -%global clang_make_opts %{clang_make_opts} LD=ld.lld HOSTLD=ld.lld AR=llvm-ar NM=llvm-nm HOSTAR=llvm-ar HOSTNM=llvm-nm -%endif -%global make_opts %{make_opts} %{clang_make_opts} -# clang does not support the -fdump-ipa-clones option -%global with_ipaclones 0 -%endif - -# turn off debug kernel and kabichk for gcov builds -%if %{with_gcov} -%define with_debug 0 -%define with_kabichk 0 -%define with_kabidupchk 0 -%define with_kabidwchk 0 -%define with_kabidw_base 0 -%define with_kernel_abi_stablelists 0 -%endif - -# turn off kABI DWARF-based check if we're generating the base dataset -%if %{with_kabidw_base} -%define with_kabidwchk 0 -%endif - -# kpatch_kcflags are extra compiler flags applied to base kernel -# -fdump-ipa-clones is enabled only for base kernels on selected arches -%if %{with_ipaclones} -%ifarch x86_64 ppc64le -%define kpatch_kcflags -fdump-ipa-clones -%else -%define with_ipaclones 0 -%endif -%endif - -%define make_target bzImage -%define image_install_path boot - -%define KVERREL %{version}-%{release}.%{_target_cpu} -%define KVERREL_RE %(echo %KVERREL | sed 's/+/[+]/g') -%define hdrarch %_target_cpu -%define asmarch %_target_cpu - -%if 0%{!?nopatches:1} -%define nopatches 0 -%endif - -%if %{with_vanilla} -%define nopatches 1 -%endif - -%if %{with_release} -%define debugbuildsenabled 1 -%endif - -%if !%{with_debuginfo} -%define _enable_debug_packages 0 -%endif -%define debuginfodir /usr/lib/debug -# Needed because we override almost everything involving build-ids -# and debuginfo generation. Currently we rely on the old alldebug setting. -%global _build_id_links alldebug - -# kernel PAE is only built on ARMv7 -%ifnarch armv7hl -%define with_pae 0 -%endif - -# if requested, only build base kernel -%if %{with_baseonly} -%define with_pae 0 -%define with_debug 0 -%define with_vdso_install 0 -%define with_perf 0 -%define with_tools 0 -%define with_bpftool 0 -%define with_kernel_abi_stablelists 0 -%define with_selftests 0 -%define with_cross 0 -%define with_cross_headers 0 -%define with_ipaclones 0 -%endif - -# if requested, only build pae kernel -%if %{with_paeonly} -%define with_up 0 -%define with_debug 0 -%endif - -# if requested, only build debug kernel -%if %{with_dbgonly} -%define with_up 0 -%define with_vdso_install 0 -%define with_perf 0 -%define with_tools 0 -%define with_bpftool 0 -%define with_kernel_abi_stablelists 0 -%define with_selftests 0 -%define with_cross 0 -%define with_cross_headers 0 -%define with_ipaclones 0 -%endif - -# turn off kABI DUP check and DWARF-based check if kABI check is disabled -%if !%{with_kabichk} -%define with_kabidupchk 0 -%define with_kabidwchk 0 -%endif - -%if %{with_vdso_install} -%define use_vdso 1 -%endif - -# selftests require bpftool to be built -%if %{with_selftests} -%define with_bpftool 1 -%endif - -%ifnarch noarch -%define with_kernel_abi_stablelists 0 -%endif - -# Overrides for generic default options - -# only package docs noarch -%ifnarch noarch -%define with_doc 0 -%define doc_build_fail true -%endif - -%if 0%{?fedora} -# don't do debug builds on anything but i686 and x86_64 -%ifnarch i686 x86_64 -%define with_debug 0 -%endif -%endif - -# don't build noarch kernels or headers (duh) -%ifarch noarch -%define with_up 0 -%define with_headers 0 -%define with_cross_headers 0 -%define with_tools 0 -%define with_perf 0 -%define with_bpftool 0 -%define with_selftests 0 -%define with_debug 0 -%define all_arch_configs kernel-%{version}-*.config -%endif - -# sparse blows up on ppc -%ifnarch ppc64le -%define with_sparse 0 -%endif - -# zfcpdump mechanism is s390 only -%ifnarch s390x -%define with_zfcpdump 0 -%endif - -%if 0%{?fedora} -# This is not for Fedora -%define with_zfcpdump 0 -%endif - -# Per-arch tweaks - -%ifarch i686 -%define asmarch x86 -%define hdrarch i386 -%define all_arch_configs kernel-%{version}-i?86*.config -%define kernel_image arch/x86/boot/bzImage -%endif - -%ifarch x86_64 -%define asmarch x86 -%define all_arch_configs kernel-%{version}-x86_64*.config -%define kernel_image arch/x86/boot/bzImage -%endif - -%ifarch ppc64le -%define asmarch powerpc -%define hdrarch powerpc -%define make_target vmlinux -%define kernel_image vmlinux -%define kernel_image_elf 1 -%define use_vdso 0 -%define all_arch_configs kernel-%{version}-ppc64le*.config -%endif - -%ifarch s390x -%define asmarch s390 -%define hdrarch s390 -%define all_arch_configs kernel-%{version}-s390x.config -%define kernel_image arch/s390/boot/bzImage -%define vmlinux_decompressor arch/s390/boot/compressed/vmlinux -%endif - -%ifarch %{arm} -%define all_arch_configs kernel-%{version}-arm*.config -%define skip_nonpae_vdso 1 -%define asmarch arm -%define hdrarch arm -%define make_target bzImage -%define kernel_image arch/arm/boot/zImage -# http://lists.infradead.org/pipermail/linux-arm-kernel/2012-March/091404.html -%define kernel_mflags KALLSYMS_EXTRA_PASS=1 -# we only build headers/perf/tools on the base arm arches -# just like we used to only build them on i386 for x86 -%ifnarch armv7hl -%define with_headers 0 -%define with_cross_headers 0 -%endif -# These currently don't compile on armv7 -%define with_selftests 0 -%endif - -%ifarch aarch64 -%define all_arch_configs kernel-%{version}-aarch64*.config -%define asmarch arm64 -%define hdrarch arm64 -%define make_target Image.gz -%define kernel_image arch/arm64/boot/Image.gz -%endif - -# Should make listnewconfig fail if there's config options -# printed out? -%if %{nopatches} -%define with_configchecks 0 -%endif - -# To temporarily exclude an architecture from being built, add it to -# %%nobuildarches. Do _NOT_ use the ExclusiveArch: line, because if we -# don't build kernel-headers then the new build system will no longer let -# us use the previous build of that package -- it'll just be completely AWOL. -# Which is a BadThing(tm). - -# We only build kernel-headers on the following... -%if 0%{?fedora} -%define nobuildarches i386 -%else -%define nobuildarches i386 i686 %{arm} -%endif - -%ifarch %nobuildarches -# disable BuildKernel commands -%define with_up 0 -%define with_debug 0 -%define with_pae 0 -%define with_zfcpdump 0 - -%define with_debuginfo 0 -%define with_perf 0 -%define with_tools 0 -%define with_bpftool 0 -%define with_selftests 0 -%define _enable_debug_packages 0 -%endif - -# Architectures we build tools/cpupower on -%if 0%{?fedora} -%define cpupowerarchs %{ix86} x86_64 ppc64le %{arm} aarch64 -%else -%define cpupowerarchs i686 x86_64 ppc64le aarch64 -%endif - -%if 0%{?use_vdso} - -%if 0%{?skip_nonpae_vdso} -%define _use_vdso 0 -%else -%define _use_vdso 1 -%endif - -%else -%define _use_vdso 0 -%endif - -# If build of debug packages is disabled, we need to know if we want to create -# meta debug packages or not, after we define with_debug for all specific cases -# above. So this must be at the end here, after all cases of with_debug or not. -%define with_debug_meta 0 -%if !%{debugbuildsenabled} -%if %{with_debug} -%define with_debug_meta 1 -%endif -%define with_debug 0 -%endif - - -# -# Packages that need to be installed before the kernel is, because the %%post -# scripts use them. -# -%define kernel_prereq coreutils, systemd >= 203-2, /usr/bin/kernel-install -%define initrd_prereq dracut >= 027 - - -Name: kernel -License: GPLv2 and Redistributable, no modification permitted -URL: https://www.kernel.org/ -Version: %{specversion} -Release: %{pkg_release} -# DO NOT CHANGE THE 'ExclusiveArch' LINE TO TEMPORARILY EXCLUDE AN ARCHITECTURE BUILD. -# SET %%nobuildarches (ABOVE) INSTEAD -%if 0%{?fedora} -ExclusiveArch: noarch x86_64 s390x %{arm} aarch64 ppc64le -%else -ExclusiveArch: noarch i386 i686 x86_64 s390x %{arm} aarch64 ppc64le -%endif -ExclusiveOS: Linux -%ifnarch %{nobuildarches} -Requires: kernel-core-uname-r = %{KVERREL} -Requires: kernel-modules-uname-r = %{KVERREL} -%endif - - -# -# List the packages used during the kernel build -# -BuildRequires: kmod, patch, bash, coreutils, tar, git-core, which -BuildRequires: bzip2, xz, findutils, gzip, m4, perl-interpreter, perl-Carp, perl-devel, perl-generators, make, diffutils, gawk -BuildRequires: gcc, binutils, redhat-rpm-config, hmaccalc, bison, flex, gcc-c++ -BuildRequires: net-tools, hostname, bc, elfutils-devel -BuildRequires: dwarves -BuildRequires: python3-devel -BuildRequires: gcc-plugin-devel -# glibc-static is required for a consistent build environment (specifically -# CONFIG_CC_CAN_LINK_STATIC=y). -BuildRequires: glibc-static -%ifnarch %{nobuildarches} noarch -BuildRequires: bpftool -%endif -%if %{with_headers} -BuildRequires: rsync -%endif -%if %{with_doc} -BuildRequires: xmlto, asciidoc, python3-sphinx, python3-sphinx_rtd_theme -%endif -%if %{with_sparse} -BuildRequires: sparse -%endif -%if %{with_perf} -BuildRequires: zlib-devel binutils-devel newt-devel perl(ExtUtils::Embed) bison flex xz-devel -BuildRequires: audit-libs-devel -BuildRequires: java-devel -BuildRequires: libbpf-devel -BuildRequires: libbabeltrace-devel -BuildRequires: libtraceevent-devel -%ifnarch %{arm} s390x -BuildRequires: numactl-devel -%endif -%ifarch aarch64 -BuildRequires: opencsd-devel >= 1.0.0 -%endif -%endif -%if %{with_tools} -BuildRequires: gettext ncurses-devel -BuildRequires: libcap-devel libcap-ng-devel -%ifnarch s390x -BuildRequires: pciutils-devel -%endif -%ifarch i686 x86_64 -BuildRequires: libnl3-devel -%endif -%endif -%if %{with_tools} || %{signmodules} || %{signkernel} -BuildRequires: openssl-devel -%endif -%if %{with_bpftool} -BuildRequires: python3-docutils -BuildRequires: zlib-devel binutils-devel -%endif -%if %{with_selftests} -BuildRequires: clang llvm -%ifnarch %{arm} -BuildRequires: numactl-devel -%endif -BuildRequires: libcap-devel libcap-ng-devel rsync libmnl-devel -%endif -BuildConflicts: rhbuildsys(DiskFree) < 500Mb -%if %{with_debuginfo} -BuildRequires: rpm-build, elfutils -BuildConflicts: rpm < 4.13.0.1-19 -BuildConflicts: dwarves < 1.13 -# Most of these should be enabled after more investigation -%undefine _include_minidebuginfo -%undefine _find_debuginfo_dwz_opts -%undefine _unique_build_ids -%undefine _unique_debug_names -%undefine _unique_debug_srcs -%undefine _debugsource_packages -%undefine _debuginfo_subpackages -%global _find_debuginfo_opts -r -%global _missing_build_ids_terminate_build 1 -%global _no_recompute_build_ids 1 -%endif -%if %{with_kabidwchk} || %{with_kabidw_base} -BuildRequires: kabi-dw -%endif - -%if %{signkernel}%{signmodules} -BuildRequires: openssl -%if %{signkernel} -# ELN uses Fedora signing process, so exclude -%if 0%{?rhel}%{?centos} && !0%{?eln} -BuildRequires: system-sb-certs -%endif -%ifarch x86_64 aarch64 -BuildRequires: nss-tools -BuildRequires: pesign >= 0.10-4 -%endif -%endif -%endif - -%if %{with_cross} -BuildRequires: binutils-%{_build_arch}-linux-gnu, gcc-%{_build_arch}-linux-gnu -%define cross_opts CROSS_COMPILE=%{_build_arch}-linux-gnu- -%define __strip %{_build_arch}-linux-gnu-strip -%endif - -# These below are required to build man pages -%if %{with_perf} -BuildRequires: xmlto -%endif -%if %{with_perf} || %{with_tools} -BuildRequires: asciidoc -%endif - -%if %{with toolchain_clang} -BuildRequires: clang -%endif - -%if %{with clang_lto} -BuildRequires: llvm -BuildRequires: lld -%endif - -# Because this is the kernel, it's hard to get a single upstream URL -# to represent the base without needing to do a bunch of patching. This -# tarball is generated from a src-git tree. If you want to see the -# exact git commit you can run -# -# xzcat -qq ${TARBALL} | git get-tar-commit-id -Source0: linux-%{tarfile_release}.tar.xz - -Source1: Makefile.rhelver - - -# Name of the packaged file containing signing key -%ifarch ppc64le -%define signing_key_filename kernel-signing-ppc.cer -%endif -%ifarch s390x -%define signing_key_filename kernel-signing-s390.cer -%endif - -%if %{?released_kernel} - -Source10: redhatsecurebootca5.cer -Source11: redhatsecurebootca1.cer -Source12: redhatsecureboot501.cer -Source13: redhatsecureboot301.cer -Source14: secureboot_s390.cer -Source15: secureboot_ppc.cer - -%define secureboot_ca_1 %{SOURCE10} -%define secureboot_ca_0 %{SOURCE11} -%ifarch x86_64 aarch64 -%define secureboot_key_1 %{SOURCE12} -%define pesign_name_1 redhatsecureboot501 -%define secureboot_key_0 %{SOURCE13} -%define pesign_name_0 redhatsecureboot301 -%endif -%ifarch s390x -%define secureboot_key_0 %{SOURCE14} -%define pesign_name_0 redhatsecureboot302 -%endif -%ifarch ppc64le -%define secureboot_key_0 %{SOURCE15} -%define pesign_name_0 redhatsecureboot303 -%endif - -# released_kernel -%else - -Source10: redhatsecurebootca4.cer -Source11: redhatsecurebootca2.cer -Source12: redhatsecureboot401.cer -Source13: redhatsecureboot003.cer - -%define secureboot_ca_1 %{SOURCE10} -%define secureboot_ca_0 %{SOURCE11} -%define secureboot_key_1 %{SOURCE12} -%define pesign_name_1 redhatsecureboot401 -%define secureboot_key_0 %{SOURCE13} -%define pesign_name_0 redhatsecureboot003 - -# released_kernel -%endif - -Source20: mod-denylist.sh -Source21: mod-sign.sh -Source22: parallel_xz.sh - -%define modsign_cmd %{SOURCE21} - -%if 0%{?include_rhel} -Source23: x509.genkey.rhel - -Source24: kernel-aarch64-rhel.config -Source25: kernel-aarch64-debug-rhel.config -Source26: mod-extra.list.rhel - -Source27: kernel-ppc64le-rhel.config -Source28: kernel-ppc64le-debug-rhel.config -Source29: kernel-s390x-rhel.config -Source30: kernel-s390x-debug-rhel.config -Source31: kernel-s390x-zfcpdump-rhel.config -Source32: kernel-x86_64-rhel.config -Source33: kernel-x86_64-debug-rhel.config - -Source34: filter-x86_64.sh.rhel -Source35: filter-armv7hl.sh.rhel -Source37: filter-aarch64.sh.rhel -Source38: filter-ppc64le.sh.rhel -Source39: filter-s390x.sh.rhel -Source40: filter-modules.sh.rhel - -Source41: x509.genkey.centos -%endif - -%if 0%{?include_fedora} -Source50: x509.genkey.fedora -Source51: mod-extra.list.fedora - -Source52: kernel-aarch64-fedora.config -Source53: kernel-aarch64-debug-fedora.config -Source54: kernel-armv7hl-fedora.config -Source55: kernel-armv7hl-debug-fedora.config -Source56: kernel-armv7hl-lpae-fedora.config -Source57: kernel-armv7hl-lpae-debug-fedora.config -Source60: kernel-ppc64le-fedora.config -Source61: kernel-ppc64le-debug-fedora.config -Source62: kernel-s390x-fedora.config -Source63: kernel-s390x-debug-fedora.config -Source64: kernel-x86_64-fedora.config -Source65: kernel-x86_64-debug-fedora.config - -Source67: filter-x86_64.sh.fedora -Source68: filter-armv7hl.sh.fedora -Source70: filter-aarch64.sh.fedora -Source71: filter-ppc64le.sh.fedora -Source72: filter-s390x.sh.fedora -Source73: filter-modules.sh.fedora -%endif - -Source75: partial-kgcov-snip.config -Source80: generate_all_configs.sh -Source81: process_configs.sh - -Source82: update_scripts.sh - -Source84: mod-internal.list - -Source100: rheldup3.x509 -Source101: rhelkpatch1.x509 - -Source200: check-kabi - -Source201: Module.kabi_aarch64 -Source202: Module.kabi_ppc64le -Source203: Module.kabi_s390x -Source204: Module.kabi_x86_64 - -Source210: Module.kabi_dup_aarch64 -Source211: Module.kabi_dup_ppc64le -Source212: Module.kabi_dup_s390x -Source213: Module.kabi_dup_x86_64 - -Source300: kernel-abi-stablelists-%{specversion}-%{pkgrelease}.tar.bz2 -Source301: kernel-kabi-dw-%{specversion}-%{pkgrelease}.tar.bz2 - -# Sources for kernel-tools -Source2000: cpupower.service -Source2001: cpupower.config -Source2002: kvm_stat.logrotate - -# Some people enjoy building customized kernels from the dist-git in Fedora and -# use this to override configuration options. One day they may all use the -# source tree, but in the mean time we carry this to support the legacy workflow -Source3000: merge.pl -Source3001: kernel-local -%if %{patchlist_changelog} -Source3002: Patchlist.changelog -%endif - -Source4000: README.rst -Source4001: rpminspect.yaml -Source4002: gating.yaml - -## Patches needed for building this package - -%if !%{nopatches} - -Patch1: patch-%{patchversion}-redhat.patch -%endif - -# empty final patch to facilitate testing of kernel patches -Patch999999: linux-kernel-test.patch - -# END OF PATCH DEFINITIONS - -%description -The kernel meta package - -# -# This macro does requires, provides, conflicts, obsoletes for a kernel package. -# %%kernel_reqprovconf <subpackage> -# It uses any kernel_<subpackage>_conflicts and kernel_<subpackage>_obsoletes -# macros defined above. -# -%define kernel_reqprovconf \ -Provides: kernel = %{specversion}-%{pkg_release}\ -Provides: kernel-%{_target_cpu} = %{specversion}-%{pkg_release}%{?1:+%{1}}\ -Provides: kernel-drm-nouveau = 16\ -Provides: kernel-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires(pre): %{kernel_prereq}\ -Requires(pre): %{initrd_prereq}\ -Requires(pre): ((linux-firmware >= 20150904-56.git6ebf5d57) if linux-firmware)\ -Recommends: linux-firmware\ -Requires(preun): systemd >= 200\ -Conflicts: xfsprogs < 4.3.0-1\ -Conflicts: xorg-x11-drv-vmmouse < 13.0.99\ -%{expand:%%{?kernel%{?1:_%{1}}_conflicts:Conflicts: %%{kernel%{?1:_%{1}}_conflicts}}}\ -%{expand:%%{?kernel%{?1:_%{1}}_obsoletes:Obsoletes: %%{kernel%{?1:_%{1}}_obsoletes}}}\ -%{expand:%%{?kernel%{?1:_%{1}}_provides:Provides: %%{kernel%{?1:_%{1}}_provides}}}\ -# We can't let RPM do the dependencies automatic because it'll then pick up\ -# a correct but undesirable perl dependency from the module headers which\ -# isn't required for the kernel proper to function\ -AutoReq: no\ -AutoProv: yes\ -%{nil} - - -%package doc -Summary: Various documentation bits found in the kernel source -Group: Documentation -%description doc -This package contains documentation files from the kernel -source. Various bits of information about the Linux kernel and the -device drivers shipped with it are documented in these files. - -You'll want to install this package if you need a reference to the -options that can be passed to Linux kernel modules at load time. - - -%package headers -Summary: Header files for the Linux kernel for use by glibc -Obsoletes: glibc-kernheaders < 3.0-46 -Provides: glibc-kernheaders = 3.0-46 -%description headers -Kernel-headers includes the C header files that specify the interface -between the Linux kernel and userspace libraries and programs. The -header files define structures and constants that are needed for -building most standard programs and are also needed for rebuilding the -glibc package. - -%package cross-headers -Summary: Header files for the Linux kernel for use by cross-glibc -%description cross-headers -Kernel-cross-headers includes the C header files that specify the interface -between the Linux kernel and userspace libraries and programs. The -header files define structures and constants that are needed for -building most standard programs and are also needed for rebuilding the -cross-glibc package. - - -%package debuginfo-common-%{_target_cpu} -Summary: Kernel source files used by %{name}-debuginfo packages -Provides: installonlypkg(kernel) -%description debuginfo-common-%{_target_cpu} -This package is required by %{name}-debuginfo subpackages. -It provides the kernel source files common to all builds. - -%if %{with_perf} -%package -n perf -Summary: Performance monitoring for the Linux kernel -Requires: bzip2 -License: GPLv2 -%description -n perf -This package contains the perf tool, which enables performance monitoring -of the Linux kernel. - -%package -n perf-debuginfo -Summary: Debug information for package perf -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release} -AutoReqProv: no -%description -n perf-debuginfo -This package provides debug information for the perf package. - -# Note that this pattern only works right to match the .build-id -# symlinks because of the trailing nonmatching alternation and -# the leading .*, because of find-debuginfo.sh's buggy handling -# of matching the pattern against the symlinks file. -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{_bindir}/perf(\.debug)?|.*%%{_libexecdir}/perf-core/.*|.*%%{_libdir}/libperf-jvmti.so(\.debug)?|XXX' -o perf-debuginfo.list} - -%package -n python3-perf -Summary: Python bindings for apps which will manipulate perf events -%description -n python3-perf -The python3-perf package contains a module that permits applications -written in the Python programming language to use the interface -to manipulate perf events. - -%package -n python3-perf-debuginfo -Summary: Debug information for package perf python bindings -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release} -AutoReqProv: no -%description -n python3-perf-debuginfo -This package provides debug information for the perf python bindings. - -# the python_sitearch macro should already be defined from above -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{python3_sitearch}/perf.*so(\.debug)?|XXX' -o python3-perf-debuginfo.list} - -# with_perf -%endif - -%if %{with_tools} -%package -n kernel-tools -Summary: Assortment of tools for the Linux kernel -License: GPLv2 -%ifarch %{cpupowerarchs} -Provides: cpupowerutils = 1:009-0.6.p1 -Obsoletes: cpupowerutils < 1:009-0.6.p1 -Provides: cpufreq-utils = 1:009-0.6.p1 -Provides: cpufrequtils = 1:009-0.6.p1 -Obsoletes: cpufreq-utils < 1:009-0.6.p1 -Obsoletes: cpufrequtils < 1:009-0.6.p1 -Obsoletes: cpuspeed < 1:1.5-16 -Requires: kernel-tools-libs = %{version}-%{release} -%endif -%define __requires_exclude ^%{_bindir}/python -%description -n kernel-tools -This package contains the tools/ directory from the kernel source -and the supporting documentation. - -%package -n kernel-tools-libs -Summary: Libraries for the kernels-tools -License: GPLv2 -%description -n kernel-tools-libs -This package contains the libraries built from the tools/ directory -from the kernel source. - -%package -n kernel-tools-libs-devel -Summary: Assortment of tools for the Linux kernel -License: GPLv2 -Requires: kernel-tools = %{version}-%{release} -%ifarch %{cpupowerarchs} -Provides: cpupowerutils-devel = 1:009-0.6.p1 -Obsoletes: cpupowerutils-devel < 1:009-0.6.p1 -%endif -Requires: kernel-tools-libs = %{version}-%{release} -Provides: kernel-tools-devel -%description -n kernel-tools-libs-devel -This package contains the development files for the tools/ directory from -the kernel source. - -%package -n kernel-tools-debuginfo -Summary: Debug information for package kernel-tools -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release} -AutoReqProv: no -%description -n kernel-tools-debuginfo -This package provides debug information for package kernel-tools. - -# Note that this pattern only works right to match the .build-id -# symlinks because of the trailing nonmatching alternation and -# the leading .*, because of find-debuginfo.sh's buggy handling -# of matching the pattern against the symlinks file. -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{_bindir}/centrino-decode(\.debug)?|.*%%{_bindir}/powernow-k8-decode(\.debug)?|.*%%{_bindir}/cpupower(\.debug)?|.*%%{_libdir}/libcpupower.*|.*%%{_bindir}/turbostat(\.debug)?|.*%%{_bindir}/x86_energy_perf_policy(\.debug)?|.*%%{_bindir}/tmon(\.debug)?|.*%%{_bindir}/lsgpio(\.debug)?|.*%%{_bindir}/gpio-hammer(\.debug)?|.*%%{_bindir}/gpio-event-mon(\.debug)?|.*%%{_bindir}/gpio-watch(\.debug)?|.*%%{_bindir}/iio_event_monitor(\.debug)?|.*%%{_bindir}/iio_generic_buffer(\.debug)?|.*%%{_bindir}/lsiio(\.debug)?|.*%%{_bindir}/intel-speed-select(\.debug)?|.*%%{_bindir}/page_owner_sort(\.debug)?|.*%%{_bindir}/slabinfo(\.debug)?|.*%%{_sbindir}/intel_sdsi(\.debug)?|XXX' -o kernel-tools-debuginfo.list} - -# with_tools -%endif - -%if %{with_bpftool} - -%package -n bpftool -Summary: Inspection and simple manipulation of eBPF programs and maps -License: GPLv2 -%description -n bpftool -This package contains the bpftool, which allows inspection and simple -manipulation of eBPF programs and maps. - -%package -n bpftool-debuginfo -Summary: Debug information for package bpftool -Group: Development/Debug -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release} -AutoReqProv: no -%description -n bpftool-debuginfo -This package provides debug information for the bpftool package. - -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{_sbindir}/bpftool(\.debug)?|XXX' -o bpftool-debuginfo.list} - -# with_bpftool -%endif - -%if %{with_selftests} - -%package selftests-internal -Summary: Kernel samples and selftests -License: GPLv2 -Requires: binutils, bpftool, iproute-tc, nmap-ncat, python3 -%description selftests-internal -Kernel sample programs and selftests. - -# Note that this pattern only works right to match the .build-id -# symlinks because of the trailing nonmatching alternation and -# the leading .*, because of find-debuginfo.sh's buggy handling -# of matching the pattern against the symlinks file. -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{_libexecdir}/(ksamples|kselftests)/.*|XXX' -o selftests-debuginfo.list} - -# with_selftests -%endif - -%if %{with_gcov} -%package gcov -Summary: gcov graph and source files for coverage data collection. -%description gcov -kernel-gcov includes the gcov graph and source files for gcov coverage collection. -%endif - -%package -n kernel-abi-stablelists -Summary: The Red Hat Enterprise Linux kernel ABI symbol stablelists -AutoReqProv: no -%description -n kernel-abi-stablelists -The kABI package contains information pertaining to the Red Hat Enterprise -Linux kernel ABI, including lists of kernel symbols that are needed by -external Linux kernel modules, and a yum plugin to aid enforcement. - -%if %{with_kabidw_base} -%package kernel-kabidw-base-internal -Summary: The baseline dataset for kABI verification using DWARF data -Group: System Environment/Kernel -AutoReqProv: no -%description kernel-kabidw-base-internal -The package contains data describing the current ABI of the Red Hat Enterprise -Linux kernel, suitable for the kabi-dw tool. -%endif - -# -# This macro creates a kernel-<subpackage>-debuginfo package. -# %%kernel_debuginfo_package <subpackage> -# -# Explanation of the find_debuginfo_opts: We build multiple kernels (debug -# pae etc.) so the regex filters those kernels appropriately. We also -# have to package several binaries as part of kernel-devel but getting -# unique build-ids is tricky for these userspace binaries. We don't really -# care about debugging those so we just filter those out and remove it. -%define kernel_debuginfo_package() \ -%package %{?1:%{1}-}debuginfo\ -Summary: Debug information for package %{name}%{?1:-%{1}}\ -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release}\ -Provides: %{name}%{?1:-%{1}}-debuginfo-%{_target_cpu} = %{version}-%{release}\ -Provides: installonlypkg(kernel)\ -AutoReqProv: no\ -%description %{?1:%{1}-}debuginfo\ -This package provides debug information for package %{name}%{?1:-%{1}}.\ -This is required to use SystemTap with %{name}%{?1:-%{1}}-%{KVERREL}.\ -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} --keep-section '.BTF' -p '.*\/usr\/src\/kernels/.*|XXX' -o ignored-debuginfo.list -p '/.*/%%{KVERREL_RE}%{?1:[+]%{1}}/.*|/.*%%{KVERREL_RE}%{?1:\+%{1}}(\.debug)?' -o debuginfo%{?1}.list}\ -%{nil} - -# -# This macro creates a kernel-<subpackage>-devel package. -# %%kernel_devel_package [-m] <subpackage> <pretty-name> -# -%define kernel_devel_package(m) \ -%package %{?1:%{1}-}devel\ -Summary: Development package for building kernel modules to match the %{?2:%{2} }kernel\ -Provides: kernel%{?1:-%{1}}-devel-%{_target_cpu} = %{version}-%{release}\ -Provides: kernel-devel-%{_target_cpu} = %{version}-%{release}%{?1:+%{1}}\ -Provides: kernel-devel-uname-r = %{KVERREL}%{?1:+%{1}}\ -Provides: installonlypkg(kernel)\ -AutoReqProv: no\ -Requires(pre): findutils\ -Requires: findutils\ -Requires: perl-interpreter\ -Requires: openssl-devel\ -Requires: elfutils-libelf-devel\ -Requires: bison\ -Requires: flex\ -Requires: make\ -Requires: gcc\ -%if %{-m:1}%{!-m:0}\ -Requires: kernel-devel-uname-r = %{KVERREL}\ -%endif\ -%description %{?1:%{1}-}devel\ -This package provides kernel headers and makefiles sufficient to build modules\ -against the %{?2:%{2} }kernel package.\ -%{nil} - -# -# This macro creates an empty kernel-<subpackage>-devel-matched package that -# requires both the core and devel packages locked on the same version. -# %%kernel_devel_matched_package [-m] <subpackage> <pretty-name> -# -%define kernel_devel_matched_package(m) \ -%package %{?1:%{1}-}devel-matched\ -Summary: Meta package to install matching core and devel packages for a given %{?2:%{2} }kernel\ -Requires: kernel%{?1:-%{1}}-devel = %{version}-%{release}\ -Requires: kernel%{?1:-%{1}}-core = %{version}-%{release}\ -%description %{?1:%{1}-}devel-matched\ -This meta package is used to install matching core and devel packages for a given %{?2:%{2} }kernel.\ -%{nil} - -# -# kernel-<variant>-ipaclones-internal package -# -%define kernel_ipaclones_package() \ -%package %{?1:%{1}-}ipaclones-internal\ -Summary: *.ipa-clones files generated by -fdump-ipa-clones for kernel%{?1:-%{1}}\ -Group: System Environment/Kernel\ -AutoReqProv: no\ -%description %{?1:%{1}-}ipaclones-internal\ -This package provides *.ipa-clones files.\ -%{nil} - -# -# This macro creates a kernel-<subpackage>-modules-internal package. -# %%kernel_modules_internal_package <subpackage> <pretty-name> -# -%define kernel_modules_internal_package() \ -%package %{?1:%{1}-}modules-internal\ -Summary: Extra kernel modules to match the %{?2:%{2} }kernel\ -Group: System Environment/Kernel\ -Provides: kernel%{?1:-%{1}}-modules-internal-%{_target_cpu} = %{version}-%{release}\ -Provides: kernel%{?1:-%{1}}-modules-internal-%{_target_cpu} = %{version}-%{release}%{?1:+%{1}}\ -Provides: kernel%{?1:-%{1}}-modules-internal = %{version}-%{release}%{?1:+%{1}}\ -Provides: installonlypkg(kernel-module)\ -Provides: kernel%{?1:-%{1}}-modules-internal-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel%{?1:-%{1}}-modules-uname-r = %{KVERREL}%{?1:+%{1}}\ -AutoReq: no\ -AutoProv: yes\ -%description %{?1:%{1}-}modules-internal\ -This package provides kernel modules for the %{?2:%{2} }kernel package for Red Hat internal usage.\ -%{nil} - -# -# This macro creates a kernel-<subpackage>-modules-extra package. -# %%kernel_modules_extra_package [-m] <subpackage> <pretty-name> -# -%define kernel_modules_extra_package(m) \ -%package %{?1:%{1}-}modules-extra\ -Summary: Extra kernel modules to match the %{?2:%{2} }kernel\ -Provides: kernel%{?1:-%{1}}-modules-extra-%{_target_cpu} = %{version}-%{release}\ -Provides: kernel%{?1:-%{1}}-modules-extra-%{_target_cpu} = %{version}-%{release}%{?1:+%{1}}\ -Provides: kernel%{?1:-%{1}}-modules-extra = %{version}-%{release}%{?1:+%{1}}\ -Provides: installonlypkg(kernel-module)\ -Provides: kernel%{?1:-%{1}}-modules-extra-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel%{?1:-%{1}}-modules-uname-r = %{KVERREL}%{?1:+%{1}}\ -%if %{-m:1}%{!-m:0}\ -Requires: kernel-modules-extra-uname-r = %{KVERREL}\ -%endif\ -AutoReq: no\ -AutoProv: yes\ -%description %{?1:%{1}-}modules-extra\ -This package provides less commonly used kernel modules for the %{?2:%{2} }kernel package.\ -%{nil} - -# -# This macro creates a kernel-<subpackage>-modules package. -# %%kernel_modules_package [-m] <subpackage> <pretty-name> -# -%define kernel_modules_package(m) \ -%package %{?1:%{1}-}modules\ -Summary: kernel modules to match the %{?2:%{2}-}core kernel\ -Provides: kernel%{?1:-%{1}}-modules-%{_target_cpu} = %{version}-%{release}\ -Provides: kernel-modules-%{_target_cpu} = %{version}-%{release}%{?1:+%{1}}\ -Provides: kernel-modules = %{version}-%{release}%{?1:+%{1}}\ -Provides: installonlypkg(kernel-module)\ -Provides: kernel%{?1:-%{1}}-modules-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel-uname-r = %{KVERREL}%{?1:+%{1}}\ -%if %{-m:1}%{!-m:0}\ -Requires: kernel-modules-uname-r = %{KVERREL}\ -%endif\ -AutoReq: no\ -AutoProv: yes\ -%description %{?1:%{1}-}modules\ -This package provides commonly used kernel modules for the %{?2:%{2}-}core kernel package.\ -%{nil} - -# -# this macro creates a kernel-<subpackage> meta package. -# %%kernel_meta_package <subpackage> -# -%define kernel_meta_package() \ -%package %{1}\ -summary: kernel meta-package for the %{1} kernel\ -Requires: kernel-%{1}-core-uname-r = %{KVERREL}+%{1}\ -Requires: kernel-%{1}-modules-uname-r = %{KVERREL}+%{1}\ -Provides: installonlypkg(kernel)\ -%description %{1}\ -The meta-package for the %{1} kernel\ -%{nil} - -# -# This macro creates a kernel-<subpackage> and its -devel and -debuginfo too. -# %%define variant_summary The Linux kernel compiled for <configuration> -# %%kernel_variant_package [-n <pretty-name>] [-m] <subpackage> -# -%define kernel_variant_package(n:m) \ -%package %{?1:%{1}-}core\ -Summary: %{variant_summary}\ -Provides: kernel-%{?1:%{1}-}core-uname-r = %{KVERREL}%{?1:+%{1}}\ -Provides: installonlypkg(kernel)\ -%if %{-m:1}%{!-m:0}\ -Requires: kernel-core-uname-r = %{KVERREL}\ -%endif\ -%{expand:%%kernel_reqprovconf}\ -%if %{?1:1} %{!?1:0} \ -%{expand:%%kernel_meta_package %{?1:%{1}}}\ -%endif\ -%{expand:%%kernel_devel_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}} %{-m:%{-m}}}\ -%{expand:%%kernel_devel_matched_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}} %{-m:%{-m}}}\ -%{expand:%%kernel_modules_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}} %{-m:%{-m}}}\ -%{expand:%%kernel_modules_extra_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}} %{-m:%{-m}}}\ -%if %{-m:0}%{!-m:1}\ -%{expand:%%kernel_modules_internal_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}}}\ -%{expand:%%kernel_debuginfo_package %{?1:%{1}}}\ -%endif\ -%{nil} - -# Now, each variant package. - -%if %{with_pae} -%define variant_summary The Linux kernel compiled for Cortex-A15 -%kernel_variant_package lpae -%description lpae-core -This package includes a version of the Linux kernel with support for -Cortex-A15 devices with LPAE and HW virtualisation support -%endif - -%if %{with_zfcpdump} -%define variant_summary The Linux kernel compiled for zfcpdump usage -%kernel_variant_package zfcpdump -%description zfcpdump-core -The kernel package contains the Linux kernel (vmlinuz) for use by the -zfcpdump infrastructure. -# with_zfcpdump -%endif - -%define variant_summary The Linux kernel compiled with extra debugging enabled -%if !%{debugbuildsenabled} -%kernel_variant_package -m debug -%else -%kernel_variant_package debug -%endif -%description debug-core -The kernel package contains the Linux kernel (vmlinuz), the core of any -Linux operating system. The kernel handles the basic functions -of the operating system: memory allocation, process allocation, device -input and output, etc. - -This variant of the kernel has numerous debugging options enabled. -It should only be installed when trying to gather additional information -on kernel bugs, as some of these options impact performance noticably. - -# And finally the main -core package - -%define variant_summary The Linux kernel -%kernel_variant_package -%description core -The kernel package contains the Linux kernel (vmlinuz), the core of any -Linux operating system. The kernel handles the basic functions -of the operating system: memory allocation, process allocation, device -input and output, etc. - -%if %{with_ipaclones} -%kernel_ipaclones_package -%endif - -%prep -# do a few sanity-checks for --with *only builds -%if %{with_baseonly} -%if !%{with_up} -echo "Cannot build --with baseonly, up build is disabled" -exit 1 -%endif -%endif - -# more sanity checking; do it quietly -if [ "%{patches}" != "%%{patches}" ] ; then - for patch in %{patches} ; do - if [ ! -f $patch ] ; then - echo "ERROR: Patch ${patch##/*/} listed in specfile but is missing" - exit 1 - fi - done -fi 2>/dev/null - -patch_command='patch -p1 -F1 -s' -ApplyPatch() -{ - local patch=$1 - shift - if [ ! -f $RPM_SOURCE_DIR/$patch ]; then - exit 1 - fi - if ! grep -E "^Patch[0-9]+: $patch\$" %{_specdir}/${RPM_PACKAGE_NAME}.spec ; then - if [ "${patch:0:8}" != "patch-%{kversion}." ] ; then - echo "ERROR: Patch $patch not listed as a source patch in specfile" - exit 1 - fi - fi 2>/dev/null - case "$patch" in - *.bz2) bunzip2 < "$RPM_SOURCE_DIR/$patch" | $patch_command ${1+"$@"} ;; - *.gz) gunzip < "$RPM_SOURCE_DIR/$patch" | $patch_command ${1+"$@"} ;; - *.xz) unxz < "$RPM_SOURCE_DIR/$patch" | $patch_command ${1+"$@"} ;; - *) $patch_command ${1+"$@"} < "$RPM_SOURCE_DIR/$patch" ;; - esac -} - -# don't apply patch if it's empty -ApplyOptionalPatch() -{ - local patch=$1 - shift - if [ ! -f $RPM_SOURCE_DIR/$patch ]; then - exit 1 - fi - local C=$(wc -l $RPM_SOURCE_DIR/$patch | awk '{print $1}') - if [ "$C" -gt 9 ]; then - ApplyPatch $patch ${1+"$@"} - fi -} - -%setup -q -n kernel-%{tarfile_release} -c -mv linux-%{tarfile_release} linux-%{KVERREL} - -cd linux-%{KVERREL} -cp -a %{SOURCE1} . - -%if !%{nopatches} - -ApplyOptionalPatch patch-%{patchversion}-redhat.patch -%endif - -ApplyOptionalPatch linux-kernel-test.patch - -# END OF PATCH APPLICATIONS - -# Any further pre-build tree manipulations happen here. - -chmod +x scripts/checkpatch.pl -mv COPYING COPYING-%{version}-%{release} - -# This Prevents scripts/setlocalversion from mucking with our version numbers. -touch .scmversion - -# Mangle /usr/bin/python shebangs to /usr/bin/python3 -# Mangle all Python shebangs to be Python 3 explicitly -# -p preserves timestamps -# -n prevents creating ~backup files -# -i specifies the interpreter for the shebang -# This fixes errors such as -# *** ERROR: ambiguous python shebang in /usr/bin/kvm_stat: #!/usr/bin/python. Change it to python3 (or python2) explicitly. -# We patch all sources below for which we got a report/error. -pathfix.py -i "%{__python3} %{py3_shbang_opts}" -p -n \ - tools/kvm/kvm_stat/kvm_stat \ - scripts/show_delta \ - scripts/diffconfig \ - scripts/bloat-o-meter \ - scripts/jobserver-exec \ - tools \ - Documentation \ - scripts/clang-tools - -# only deal with configs if we are going to build for the arch -%ifnarch %nobuildarches - -if [ -L configs ]; then - rm -f configs -fi -mkdir configs -cd configs - -# Drop some necessary files from the source dir into the buildroot -cp $RPM_SOURCE_DIR/kernel-*.config . -cp %{SOURCE80} . -# merge.pl -cp %{SOURCE3000} . -# kernel-local -cp %{SOURCE3001} . -FLAVOR=%{primary_target} SPECVERSION=%{version} ./generate_all_configs.sh %{debugbuildsenabled} - -# Merge in any user-provided local config option changes -%ifnarch %nobuildarches -for i in %{all_arch_configs} -do - mv $i $i.tmp - ./merge.pl %{SOURCE3001} $i.tmp > $i -%if %{with_gcov} - echo "Merging with gcov options" - cat %{SOURCE75} - mv $i $i.tmp - ./merge.pl %{SOURCE75} $i.tmp > $i -%endif - rm $i.tmp -done -%endif - -%if %{with clang_lto} -for i in *aarch64*.config *x86_64*.config; do - sed -i 's/# CONFIG_LTO_CLANG_THIN is not set/CONFIG_LTO_CLANG_THIN=y/' $i - sed -i 's/CONFIG_LTO_NONE=y/# CONFIG_LTO_NONE is not set/' $i -done -%endif - -# Add DUP and kpatch certificates to system trusted keys for RHEL -%if 0%{?rhel} -%if %{signkernel}%{signmodules} -openssl x509 -inform der -in %{SOURCE100} -out rheldup3.pem -openssl x509 -inform der -in %{SOURCE101} -out rhelkpatch1.pem -cat rheldup3.pem rhelkpatch1.pem > ../certs/rhel.pem -%ifarch s390x ppc64le -openssl x509 -inform der -in %{secureboot_ca_0} -out secureboot.pem -cat secureboot.pem >> ../certs/rhel.pem -%endif -for i in *.config; do - sed -i 's@CONFIG_SYSTEM_TRUSTED_KEYS=""@CONFIG_SYSTEM_TRUSTED_KEYS="certs/rhel.pem"@' $i -done -%endif -%endif - -cp %{SOURCE81} . -OPTS="" -%if %{with_configchecks} - OPTS="$OPTS -w -n -c" -%endif -%if %{with clang_lto} -for opt in %{clang_make_opts}; do - OPTS="$OPTS -m $opt" -done -%endif -RHJOBS=$RPM_BUILD_NCPUS PACKAGE_NAME=kernel ./process_configs.sh $OPTS ${specversion} - -cp %{SOURCE82} . -RPM_SOURCE_DIR=$RPM_SOURCE_DIR ./update_scripts.sh %{primary_target} - -# We may want to override files from the primary target in case of building -# against a flavour of it (eg. centos not rhel), thus override it here if -# necessary -if [ "%{primary_target}" == "rhel" ]; then -%if 0%{?centos} - echo "Updating scripts/sources to centos version" - RPM_SOURCE_DIR=$RPM_SOURCE_DIR ./update_scripts.sh centos -%else - echo "Not updating scripts/sources to centos version" -%endif -fi - -# end of kernel config -%endif - -cd .. -# # End of Configs stuff - -# get rid of unwanted files resulting from patch fuzz -find . \( -name "*.orig" -o -name "*~" \) -delete >/dev/null - -# remove unnecessary SCM files -find . -name .gitignore -delete >/dev/null - -cd .. - -### -### build -### -%build - -%if %{with_sparse} -%define sparse_mflags C=1 -%endif - -cp_vmlinux() -{ - eu-strip --remove-comment -o "$2" "$1" -} - -# Note we need to disable these flags for cross builds because the flags -# from redhat-rpm-config assume that host == target so target arch -# flags cause issues with the host compiler. -%if !%{with_cross} -%define build_hostcflags %{?build_cflags} -%define build_hostldflags %{?build_ldflags} -%endif - -%define make %{__make} %{?cross_opts} %{?make_opts} HOSTCFLAGS="%{?build_hostcflags}" HOSTLDFLAGS="%{?build_hostldflags}" - -InitBuildVars() { - # Initialize the kernel .config file and create some variables that are - # needed for the actual build process. - - Variant=$1 - - # Pick the right kernel config file - Config=kernel-%{version}-%{_target_cpu}${Variant:+-${Variant}}.config - DevelDir=/usr/src/kernels/%{KVERREL}${Variant:++${Variant}} - - KernelVer=%{version}-%{release}.%{_target_cpu}${Variant:++${Variant}} - - # make sure EXTRAVERSION says what we want it to say - # Trim the release if this is a CI build, since KERNELVERSION is limited to 64 characters - ShortRel=$(perl -e "print \"%{release}\" =~ s/\.pr\.[0-9A-Fa-f]{32}//r") - perl -p -i -e "s/^EXTRAVERSION.*/EXTRAVERSION = -${ShortRel}.%{_target_cpu}${Variant:++${Variant}}/" Makefile - - # if pre-rc1 devel kernel, must fix up PATCHLEVEL for our versioning scheme - # if we are post rc1 this should match anyway so this won't matter - perl -p -i -e 's/^PATCHLEVEL.*/PATCHLEVEL = %{patchlevel}/' Makefile - - %{make} %{?_smp_mflags} mrproper - cp configs/$Config .config - - %if %{signkernel}%{signmodules} - cp configs/x509.genkey certs/. - %endif - - Arch=`head -1 .config | cut -b 3-` - echo USING ARCH=$Arch - - KCFLAGS="%{?kcflags}" - - # add kpatch flags for base kernel - if [ "$Variant" == "" ]; then - KCFLAGS="$KCFLAGS %{?kpatch_kcflags}" - fi -} - -BuildKernel() { - MakeTarget=$1 - KernelImage=$2 - DoVDSO=$3 - Variant=$4 - InstallName=${5:-vmlinuz} - - DoModules=1 - if [ "$Variant" = "zfcpdump" ]; then - DoModules=0 - fi - - # When the bootable image is just the ELF kernel, strip it. - # We already copy the unstripped file into the debuginfo package. - if [ "$KernelImage" = vmlinux ]; then - CopyKernel=cp_vmlinux - else - CopyKernel=cp - fi - - InitBuildVars $Variant - - echo BUILDING A KERNEL FOR ${Variant} %{_target_cpu}... - - %{make} ARCH=$Arch olddefconfig >/dev/null - - # This ensures build-ids are unique to allow parallel debuginfo - perl -p -i -e "s/^CONFIG_BUILD_SALT.*/CONFIG_BUILD_SALT=\"%{KVERREL}\"/" .config - %{make} ARCH=$Arch KCFLAGS="$KCFLAGS" WITH_GCOV="%{?with_gcov}" %{?_smp_mflags} $MakeTarget %{?sparse_mflags} %{?kernel_mflags} - if [ $DoModules -eq 1 ]; then - %{make} ARCH=$Arch KCFLAGS="$KCFLAGS" WITH_GCOV="%{?with_gcov}" %{?_smp_mflags} modules %{?sparse_mflags} || exit 1 - fi - - mkdir -p $RPM_BUILD_ROOT/%{image_install_path} - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/systemtap -%if %{with_debuginfo} - mkdir -p $RPM_BUILD_ROOT%{debuginfodir}/%{image_install_path} -%endif - -%ifarch %{arm} aarch64 - %{make} ARCH=$Arch dtbs INSTALL_DTBS_PATH=$RPM_BUILD_ROOT/%{image_install_path}/dtb-$KernelVer - %{make} ARCH=$Arch dtbs_install INSTALL_DTBS_PATH=$RPM_BUILD_ROOT/%{image_install_path}/dtb-$KernelVer - cp -r $RPM_BUILD_ROOT/%{image_install_path}/dtb-$KernelVer $RPM_BUILD_ROOT/lib/modules/$KernelVer/dtb - find arch/$Arch/boot/dts -name '*.dtb' -type f -delete -%endif - - # Start installing the results - install -m 644 .config $RPM_BUILD_ROOT/boot/config-$KernelVer - install -m 644 .config $RPM_BUILD_ROOT/lib/modules/$KernelVer/config - install -m 644 System.map $RPM_BUILD_ROOT/boot/System.map-$KernelVer - install -m 644 System.map $RPM_BUILD_ROOT/lib/modules/$KernelVer/System.map - - # We estimate the size of the initramfs because rpm needs to take this size - # into consideration when performing disk space calculations. (See bz #530778) - dd if=/dev/zero of=$RPM_BUILD_ROOT/boot/initramfs-$KernelVer.img bs=1M count=20 - - if [ -f arch/$Arch/boot/zImage.stub ]; then - cp arch/$Arch/boot/zImage.stub $RPM_BUILD_ROOT/%{image_install_path}/zImage.stub-$KernelVer || : - cp arch/$Arch/boot/zImage.stub $RPM_BUILD_ROOT/lib/modules/$KernelVer/zImage.stub-$KernelVer || : - fi - - %if %{signkernel} - if [ "$KernelImage" = vmlinux ]; then - # We can't strip and sign $KernelImage in place, because - # we need to preserve original vmlinux for debuginfo. - # Use a copy for signing. - $CopyKernel $KernelImage $KernelImage.tosign - KernelImage=$KernelImage.tosign - CopyKernel=cp - fi - - # Sign the image if we're using EFI - # aarch64 kernels are gziped EFI images - KernelExtension=${KernelImage##*.} - if [ "$KernelExtension" == "gz" ]; then - SignImage=${KernelImage%.*} - else - SignImage=$KernelImage - fi - - %ifarch x86_64 aarch64 - %pesign -s -i $SignImage -o vmlinuz.tmp -a %{secureboot_ca_0} -c %{secureboot_key_0} -n %{pesign_name_0} - %pesign -s -i vmlinuz.tmp -o vmlinuz.signed -a %{secureboot_ca_1} -c %{secureboot_key_1} -n %{pesign_name_1} - rm vmlinuz.tmp - %endif - %ifarch s390x ppc64le - if [ -x /usr/bin/rpm-sign ]; then - rpm-sign --key "%{pesign_name_0}" --lkmsign $SignImage --output vmlinuz.signed - elif [ $DoModules -eq 1 ]; then - chmod +x scripts/sign-file - ./scripts/sign-file -p sha256 certs/signing_key.pem certs/signing_key.x509 $SignImage vmlinuz.signed - else - mv $SignImage vmlinuz.signed - fi - %endif - - if [ ! -s vmlinuz.signed ]; then - echo "pesigning failed" - exit 1 - fi - mv vmlinuz.signed $SignImage - if [ "$KernelExtension" == "gz" ]; then - gzip -f9 $SignImage - fi - # signkernel - %endif - - $CopyKernel $KernelImage \ - $RPM_BUILD_ROOT/%{image_install_path}/$InstallName-$KernelVer - chmod 755 $RPM_BUILD_ROOT/%{image_install_path}/$InstallName-$KernelVer - cp $RPM_BUILD_ROOT/%{image_install_path}/$InstallName-$KernelVer $RPM_BUILD_ROOT/lib/modules/$KernelVer/$InstallName - - # hmac sign the kernel for FIPS - echo "Creating hmac file: $RPM_BUILD_ROOT/%{image_install_path}/.vmlinuz-$KernelVer.hmac" - ls -l $RPM_BUILD_ROOT/%{image_install_path}/$InstallName-$KernelVer - (cd $RPM_BUILD_ROOT/%{image_install_path} && sha512hmac $InstallName-$KernelVer) > $RPM_BUILD_ROOT/%{image_install_path}/.vmlinuz-$KernelVer.hmac; - cp $RPM_BUILD_ROOT/%{image_install_path}/.vmlinuz-$KernelVer.hmac $RPM_BUILD_ROOT/lib/modules/$KernelVer/.vmlinuz.hmac - - if [ $DoModules -eq 1 ]; then - # Override $(mod-fw) because we don't want it to install any firmware - # we'll get it from the linux-firmware package and we don't want conflicts - %{make} %{?_smp_mflags} ARCH=$Arch INSTALL_MOD_PATH=$RPM_BUILD_ROOT %{?_smp_mflags} modules_install KERNELRELEASE=$KernelVer mod-fw= - fi - -%if %{with_gcov} - # install gcov-needed files to $BUILDROOT/$BUILD/...: - # gcov_info->filename is absolute path - # gcno references to sources can use absolute paths (e.g. in out-of-tree builds) - # sysfs symlink targets (set up at compile time) use absolute paths to BUILD dir - find . \( -name '*.gcno' -o -name '*.[chS]' \) -exec install -D '{}' "$RPM_BUILD_ROOT/$(pwd)/{}" \; -%endif - - # add an a noop %%defattr statement 'cause rpm doesn't like empty file list files - echo '%%defattr(-,-,-)' > ../kernel${Variant:+-${Variant}}-ldsoconf.list - if [ $DoVDSO -ne 0 ]; then - %{make} ARCH=$Arch INSTALL_MOD_PATH=$RPM_BUILD_ROOT vdso_install KERNELRELEASE=$KernelVer - if [ -s ldconfig-kernel.conf ]; then - install -D -m 444 ldconfig-kernel.conf \ - $RPM_BUILD_ROOT/etc/ld.so.conf.d/kernel-$KernelVer.conf - echo /etc/ld.so.conf.d/kernel-$KernelVer.conf >> ../kernel${Variant:+-${Variant}}-ldsoconf.list - fi - - rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/vdso/.build-id - fi - - # And save the headers/makefiles etc for building modules against - # - # This all looks scary, but the end result is supposed to be: - # * all arch relevant include/ files - # * all Makefile/Kconfig files - # * all script/ files - - rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/source - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - (cd $RPM_BUILD_ROOT/lib/modules/$KernelVer ; ln -s build source) - # dirs for additional modules per module-init-tools, kbuild/modules.txt - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/updates - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/weak-updates - # CONFIG_KERNEL_HEADER_TEST generates some extra files in the process of - # testing so just delete - find . -name *.h.s -delete - # first copy everything - cp --parents `find -type f -name "Makefile*" -o -name "Kconfig*"` $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - if [ ! -e Module.symvers ]; then - touch Module.symvers - fi - cp Module.symvers $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp System.map $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - if [ -s Module.markers ]; then - cp Module.markers $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - fi - - # create the kABI metadata for use in packaging - # NOTENOTE: the name symvers is used by the rpm backend - # NOTENOTE: to discover and run the /usr/lib/rpm/fileattrs/kabi.attr - # NOTENOTE: script which dynamically adds exported kernel symbol - # NOTENOTE: checksums to the rpm metadata provides list. - # NOTENOTE: if you change the symvers name, update the backend too - echo "**** GENERATING kernel ABI metadata ****" - gzip -c9 < Module.symvers > $RPM_BUILD_ROOT/boot/symvers-$KernelVer.gz - cp $RPM_BUILD_ROOT/boot/symvers-$KernelVer.gz $RPM_BUILD_ROOT/lib/modules/$KernelVer/symvers.gz - -%if %{with_kabichk} - echo "**** kABI checking is enabled in kernel SPEC file. ****" - chmod 0755 $RPM_SOURCE_DIR/check-kabi - if [ -e $RPM_SOURCE_DIR/Module.kabi_%{_target_cpu}$Variant ]; then - cp $RPM_SOURCE_DIR/Module.kabi_%{_target_cpu}$Variant $RPM_BUILD_ROOT/Module.kabi - $RPM_SOURCE_DIR/check-kabi -k $RPM_BUILD_ROOT/Module.kabi -s Module.symvers || exit 1 - # for now, don't keep it around. - rm $RPM_BUILD_ROOT/Module.kabi - else - echo "**** NOTE: Cannot find reference Module.kabi file. ****" - fi -%endif - -%if %{with_kabidupchk} - echo "**** kABI DUP checking is enabled in kernel SPEC file. ****" - if [ -e $RPM_SOURCE_DIR/Module.kabi_dup_%{_target_cpu}$Variant ]; then - cp $RPM_SOURCE_DIR/Module.kabi_dup_%{_target_cpu}$Variant $RPM_BUILD_ROOT/Module.kabi - $RPM_SOURCE_DIR/check-kabi -k $RPM_BUILD_ROOT/Module.kabi -s Module.symvers || exit 1 - # for now, don't keep it around. - rm $RPM_BUILD_ROOT/Module.kabi - else - echo "**** NOTE: Cannot find DUP reference Module.kabi file. ****" - fi -%endif - -%if %{with_kabidw_base} - # Don't build kabi base for debug kernels - if [ "$Variant" != "zfcpdump" -a "$Variant" != "debug" ]; then - mkdir -p $RPM_BUILD_ROOT/kabi-dwarf - tar xjvf %{SOURCE301} -C $RPM_BUILD_ROOT/kabi-dwarf - - mkdir -p $RPM_BUILD_ROOT/kabi-dwarf/stablelists - tar xjvf %{SOURCE300} -C $RPM_BUILD_ROOT/kabi-dwarf/stablelists - - echo "**** GENERATING DWARF-based kABI baseline dataset ****" - chmod 0755 $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh - $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh generate \ - "$RPM_BUILD_ROOT/kabi-dwarf/stablelists/kabi-current/kabi_stablelist_%{_target_cpu}" \ - "$(pwd)" \ - "$RPM_BUILD_ROOT/kabidw-base/%{_target_cpu}${Variant:+.${Variant}}" || : - - rm -rf $RPM_BUILD_ROOT/kabi-dwarf - fi -%endif - -%if %{with_kabidwchk} - if [ "$Variant" != "zfcpdump" ]; then - mkdir -p $RPM_BUILD_ROOT/kabi-dwarf - tar xjvf %{SOURCE301} -C $RPM_BUILD_ROOT/kabi-dwarf - if [ -d "$RPM_BUILD_ROOT/kabi-dwarf/base/%{_target_cpu}${Variant:+.${Variant}}" ]; then - mkdir -p $RPM_BUILD_ROOT/kabi-dwarf/stablelists - tar xjvf %{SOURCE300} -C $RPM_BUILD_ROOT/kabi-dwarf/stablelists - - echo "**** GENERATING DWARF-based kABI dataset ****" - chmod 0755 $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh - $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh generate \ - "$RPM_BUILD_ROOT/kabi-dwarf/stablelists/kabi-current/kabi_stablelist_%{_target_cpu}" \ - "$(pwd)" \ - "$RPM_BUILD_ROOT/kabi-dwarf/base/%{_target_cpu}${Variant:+.${Variant}}.tmp" || : - - echo "**** kABI DWARF-based comparison report ****" - $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh compare \ - "$RPM_BUILD_ROOT/kabi-dwarf/base/%{_target_cpu}${Variant:+.${Variant}}" \ - "$RPM_BUILD_ROOT/kabi-dwarf/base/%{_target_cpu}${Variant:+.${Variant}}.tmp" || : - echo "**** End of kABI DWARF-based comparison report ****" - else - echo "**** Baseline dataset for kABI DWARF-BASED comparison report not found ****" - fi - - rm -rf $RPM_BUILD_ROOT/kabi-dwarf - fi -%endif - - # then drop all but the needed Makefiles/Kconfig files - rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts - rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include - cp .config $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a scripts $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts/tracing - rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts/spdxcheck.py - -%ifarch s390x - # CONFIG_EXPOLINE_EXTERN=y produces arch/s390/lib/expoline.o - # which is needed during external module build. - if [ -f arch/s390/lib/expoline.o ]; then - cp -a --parents arch/s390/lib/expoline.o $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - fi -%endif - - # Files for 'make scripts' to succeed with kernel-devel. - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/security/selinux/include - cp -a --parents security/selinux/include/classmap.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents security/selinux/include/initial_sid_to_string.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/tools/include/tools - cp -a --parents tools/include/tools/be_byteshift.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/tools/le_byteshift.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - - # Files for 'make prepare' to succeed with kernel-devel. - cp -a --parents tools/include/linux/compiler* $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/linux/types.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/build/Build.include $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/build/Build $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/build/fixdep.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/objtool/sync-check.sh $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/bpf/resolve_btfids $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - - cp --parents security/selinux/include/policycap_names.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents security/selinux/include/policycap.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - - cp -a --parents tools/include/asm-generic $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/linux $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/uapi/asm $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/uapi/asm-generic $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/uapi/linux $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/vdso $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/scripts/utilities.mak $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/lib/subcmd $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/lib/*.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/objtool/*.[ch] $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/objtool/Build $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/objtool/include/objtool/*.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/lib/bpf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/lib/bpf/Build $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - - if [ -f tools/objtool/objtool ]; then - cp -a tools/objtool/objtool $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/tools/objtool/ || : - fi - if [ -f tools/objtool/fixdep ]; then - cp -a tools/objtool/fixdep $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/tools/objtool/ || : - fi - if [ -d arch/$Arch/scripts ]; then - cp -a arch/$Arch/scripts $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/arch/%{_arch} || : - fi - if [ -f arch/$Arch/*lds ]; then - cp -a arch/$Arch/*lds $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/arch/%{_arch}/ || : - fi - if [ -f arch/%{asmarch}/kernel/module.lds ]; then - cp -a --parents arch/%{asmarch}/kernel/module.lds $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - fi - find $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts \( -iname "*.o" -o -iname "*.cmd" \) -exec rm -f {} + -%ifarch ppc64le - cp -a --parents arch/powerpc/lib/crtsavres.[So] $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ -%endif - if [ -d arch/%{asmarch}/include ]; then - cp -a --parents arch/%{asmarch}/include $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - fi -%ifarch aarch64 - # arch/arm64/include/asm/xen references arch/arm - cp -a --parents arch/arm/include/asm/xen $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - # arch/arm64/include/asm/opcodes.h references arch/arm - cp -a --parents arch/arm/include/asm/opcodes.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ -%endif - # include the machine specific headers for ARM variants, if available. -%ifarch %{arm} - if [ -d arch/%{asmarch}/mach-${Variant}/include ]; then - cp -a --parents arch/%{asmarch}/mach-${Variant}/include $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - fi - # include a few files for 'make prepare' - cp -a --parents arch/arm/tools/gen-mach-types $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/arm/tools/mach-types $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - -%endif - cp -a include $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include -%ifarch i686 x86_64 - # files for 'make prepare' to succeed with kernel-devel - cp -a --parents arch/x86/entry/syscalls/syscall_32.tbl $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/entry/syscalls/syscall_64.tbl $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs_32.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs_64.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs_common.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/purgatory/purgatory.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/purgatory/stack.S $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/purgatory/setup-x86_64.S $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/purgatory/entry64.S $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/boot/string.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/boot/string.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/boot/ctype.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - - cp -a --parents scripts/syscalltbl.sh $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents scripts/syscallhdr.sh $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - - cp -a --parents tools/arch/x86/include/asm $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/arch/x86/include/uapi/asm $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/objtool/arch/x86/lib $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/arch/x86/lib/ $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/arch/x86/tools/gen-insn-attr-x86.awk $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/objtool/arch/x86/ $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - -%endif - # Clean up intermediate tools files - find $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/tools \( -iname "*.o" -o -iname "*.cmd" \) -exec rm -f {} + - - # Make sure the Makefile, version.h, and auto.conf have a matching - # timestamp so that external modules can be built - touch -r $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/Makefile \ - $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include/generated/uapi/linux/version.h \ - $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include/config/auto.conf - -%if %{with_debuginfo} - eu-readelf -n vmlinux | grep "Build ID" | awk '{print $NF}' > vmlinux.id - cp vmlinux.id $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/vmlinux.id - - # - # save the vmlinux file for kernel debugging into the kernel-debuginfo rpm - # - mkdir -p $RPM_BUILD_ROOT%{debuginfodir}/lib/modules/$KernelVer - cp vmlinux $RPM_BUILD_ROOT%{debuginfodir}/lib/modules/$KernelVer - if [ -n "%{vmlinux_decompressor}" ]; then - eu-readelf -n %{vmlinux_decompressor} | grep "Build ID" | awk '{print $NF}' > vmlinux.decompressor.id - # Without build-id the build will fail. But for s390 the build-id - # wasn't added before 5.11. In case it is missing prefer not - # packaging the debuginfo over a build failure. - if [ -s vmlinux.decompressor.id ]; then - cp vmlinux.decompressor.id $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/vmlinux.decompressor.id - cp %{vmlinux_decompressor} $RPM_BUILD_ROOT%{debuginfodir}/lib/modules/$KernelVer/vmlinux.decompressor - fi - fi -%endif - - find $RPM_BUILD_ROOT/lib/modules/$KernelVer -name "*.ko" -type f >modnames - - # mark modules executable so that strip-to-file can strip them - xargs --no-run-if-empty chmod u+x < modnames - - # Generate a list of modules for block and networking. - - grep -F /drivers/ modnames | xargs --no-run-if-empty nm -upA | - sed -n 's,^.*/\([^/]*\.ko\): *U \(.*\)$,\1 \2,p' > drivers.undef - - collect_modules_list() - { - sed -r -n -e "s/^([^ ]+) \\.?($2)\$/\\1/p" drivers.undef | - LC_ALL=C sort -u > $RPM_BUILD_ROOT/lib/modules/$KernelVer/modules.$1 - if [ ! -z "$3" ]; then - sed -r -e "/^($3)\$/d" -i $RPM_BUILD_ROOT/lib/modules/$KernelVer/modules.$1 - fi - } - - collect_modules_list networking \ - 'register_netdev|ieee80211_register_hw|usbnet_probe|phy_driver_register|rt(l_|2x00)(pci|usb)_probe|register_netdevice' - collect_modules_list block \ - 'ata_scsi_ioctl|scsi_add_host|scsi_add_host_with_dma|blk_alloc_queue|blk_init_queue|register_mtd_blktrans|scsi_esp_register|scsi_register_device_handler|blk_queue_physical_block_size' 'pktcdvd.ko|dm-mod.ko' - collect_modules_list drm \ - 'drm_open|drm_init' - collect_modules_list modesetting \ - 'drm_crtc_init' - - # detect missing or incorrect license tags - ( find $RPM_BUILD_ROOT/lib/modules/$KernelVer -name '*.ko' | xargs /sbin/modinfo -l | \ - grep -E -v 'GPL( v2)?$|Dual BSD/GPL$|Dual MPL/GPL$|GPL and additional rights$' ) && exit 1 - - remove_depmod_files() - { - # remove files that will be auto generated by depmod at rpm -i time - pushd $RPM_BUILD_ROOT/lib/modules/$KernelVer/ - rm -f modules.{alias,alias.bin,builtin.alias.bin,builtin.bin} \ - modules.{dep,dep.bin,devname,softdep,symbols,symbols.bin} - popd - } - - remove_depmod_files - - # Identify modules in the kernel-modules-extras package - %{SOURCE20} $RPM_BUILD_ROOT lib/modules/$KernelVer $(realpath configs/mod-extra.list) - # Identify modules in the kernel-modules-extras package - %{SOURCE20} $RPM_BUILD_ROOT lib/modules/$KernelVer %{SOURCE84} internal - - # - # Generate the kernel-core and kernel-modules files lists - # - - # Copy the System.map file for depmod to use, and create a backup of the - # full module tree so we can restore it after we're done filtering - cp System.map $RPM_BUILD_ROOT/. - cp configs/filter-*.sh $RPM_BUILD_ROOT/. - pushd $RPM_BUILD_ROOT - mkdir restore - cp -r lib/modules/$KernelVer/* restore/. - - # don't include anything going into kernel-modules-extra in the file lists - xargs rm -rf < mod-extra.list - # don't include anything going int kernel-modules-internal in the file lists - xargs rm -rf < mod-internal.list - - if [ $DoModules -eq 1 ]; then - # Find all the module files and filter them out into the core and - # modules lists. This actually removes anything going into -modules - # from the dir. - find lib/modules/$KernelVer/kernel -name *.ko | sort -n > modules.list - ./filter-modules.sh modules.list %{_target_cpu} - rm filter-*.sh - - # Run depmod on the resulting module tree and make sure it isn't broken - depmod -b . -aeF ./System.map $KernelVer &> depmod.out - if [ -s depmod.out ]; then - echo "Depmod failure" - cat depmod.out - exit 1 - else - rm depmod.out - fi - else - # Ensure important files/directories exist to let the packaging succeed - echo '%%defattr(-,-,-)' > modules.list - echo '%%defattr(-,-,-)' > k-d.list - mkdir -p lib/modules/$KernelVer/kernel - # Add files usually created by make modules, needed to prevent errors - # thrown by depmod during package installation - touch lib/modules/$KernelVer/modules.order - touch lib/modules/$KernelVer/modules.builtin - fi - - remove_depmod_files - - # Go back and find all of the various directories in the tree. We use this - # for the dir lists in kernel-core - find lib/modules/$KernelVer/kernel -mindepth 1 -type d | sort -n > module-dirs.list - - # Cleanup - rm System.map - # Just "cp -r" can be very slow: here, it rewrites _existing files_ - # with open(O_TRUNC). Many filesystems synchronously wait for metadata - # update for such file rewrites (seen in strace as final close syscall - # taking a long time). On a rotational disk, cp was observed to take - # more than 5 minutes on ext4 and more than 15 minutes (!) on xfs. - # With --remove-destination, we avoid this, and copying - # (with enough RAM to cache it) takes 5 seconds: - cp -r --remove-destination restore/* lib/modules/$KernelVer/. - rm -rf restore - popd - - # Make sure the files lists start with absolute paths or rpmbuild fails. - # Also add in the dir entries - sed -e 's/^lib*/\/lib/' %{?zipsed} $RPM_BUILD_ROOT/k-d.list > ../kernel${Variant:+-${Variant}}-modules.list - sed -e 's/^lib*/%dir \/lib/' %{?zipsed} $RPM_BUILD_ROOT/module-dirs.list > ../kernel${Variant:+-${Variant}}-core.list - sed -e 's/^lib*/\/lib/' %{?zipsed} $RPM_BUILD_ROOT/modules.list >> ../kernel${Variant:+-${Variant}}-core.list - sed -e 's/^lib*/\/lib/' %{?zipsed} $RPM_BUILD_ROOT/mod-extra.list >> ../kernel${Variant:+-${Variant}}-modules-extra.list - sed -e 's/^lib*/\/lib/' %{?zipsed} $RPM_BUILD_ROOT/mod-internal.list >> ../kernel${Variant:+-${Variant}}-modules-internal.list - - # Cleanup - rm -f $RPM_BUILD_ROOT/k-d.list - rm -f $RPM_BUILD_ROOT/modules.list - rm -f $RPM_BUILD_ROOT/module-dirs.list - rm -f $RPM_BUILD_ROOT/mod-extra.list - rm -f $RPM_BUILD_ROOT/mod-internal.list - -%if %{signmodules} - if [ $DoModules -eq 1 ]; then - # Save the signing keys so we can sign the modules in __modsign_install_post - cp certs/signing_key.pem certs/signing_key.pem.sign${Variant:++${Variant}} - cp certs/signing_key.x509 certs/signing_key.x509.sign${Variant:++${Variant}} - fi -%endif - - # Move the devel headers out of the root file system - mkdir -p $RPM_BUILD_ROOT/usr/src/kernels - mv $RPM_BUILD_ROOT/lib/modules/$KernelVer/build $RPM_BUILD_ROOT/$DevelDir - - # This is going to create a broken link during the build, but we don't use - # it after this point. We need the link to actually point to something - # when kernel-devel is installed, and a relative link doesn't work across - # the F17 UsrMove feature. - ln -sf $DevelDir $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - -%ifnarch armv7hl - # Generate vmlinux.h and put it to kernel-devel path - bpftool btf dump file vmlinux format c > $RPM_BUILD_ROOT/$DevelDir/vmlinux.h -%endif - - # prune junk from kernel-devel - find $RPM_BUILD_ROOT/usr/src/kernels -name ".*.cmd" -delete - - # Red Hat UEFI Secure Boot CA cert, which can be used to authenticate the kernel - mkdir -p $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer - %ifarch x86_64 aarch64 - install -m 0644 %{secureboot_ca_0} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca-20200609.cer - install -m 0644 %{secureboot_ca_1} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca-20140212.cer - ln -s kernel-signing-ca-20200609.cer $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca.cer - %else - install -m 0644 %{secureboot_ca_0} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca.cer - %endif - %ifarch s390x ppc64le - if [ $DoModules -eq 1 ]; then - if [ -x /usr/bin/rpm-sign ]; then - install -m 0644 %{secureboot_key_0} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/%{signing_key_filename} - else - install -m 0644 certs/signing_key.x509.sign${Variant:++${Variant}} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca.cer - openssl x509 -in certs/signing_key.pem.sign${Variant:++${Variant}} -outform der -out $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/%{signing_key_filename} - chmod 0644 $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/%{signing_key_filename} - fi - fi - %endif - -%if %{with_ipaclones} - MAXPROCS=$(echo %{?_smp_mflags} | sed -n 's/-j\s*\([0-9]\+\)/\1/p') - if [ -z "$MAXPROCS" ]; then - MAXPROCS=1 - fi - if [ "$Variant" == "" ]; then - mkdir -p $RPM_BUILD_ROOT/$DevelDir-ipaclones - find . -name '*.ipa-clones' | xargs -i{} -r -n 1 -P $MAXPROCS install -m 644 -D "{}" "$RPM_BUILD_ROOT/$DevelDir-ipaclones/{}" - fi -%endif - -} - -### -# DO it... -### - -# prepare directories -rm -rf $RPM_BUILD_ROOT -mkdir -p $RPM_BUILD_ROOT/boot -mkdir -p $RPM_BUILD_ROOT%{_libexecdir} - -cd linux-%{KVERREL} - - -%if %{with_debug} -BuildKernel %make_target %kernel_image %{_use_vdso} debug -%endif - -%if %{with_zfcpdump} -BuildKernel %make_target %kernel_image %{_use_vdso} zfcpdump -%endif - -%if %{with_pae} -BuildKernel %make_target %kernel_image %{use_vdso} lpae -%endif - -%if %{with_up} -BuildKernel %make_target %kernel_image %{_use_vdso} -%endif - -%ifnarch noarch i686 -%if !%{with_debug} && !%{with_zfcpdump} && !%{with_pae} && !%{with_up} -# If only building the user space tools, then initialize the build environment -# and some variables so that the various userspace tools can be built. -InitBuildVars -%endif -%endif - -%ifarch aarch64 -%global perf_build_extra_opts CORESIGHT=1 -%endif -%global perf_make \ - %{__make} %{?make_opts} EXTRA_CFLAGS="${RPM_OPT_FLAGS}" LDFLAGS="%{__global_ldflags}" %{?cross_opts} -C tools/perf V=1 NO_PERF_READ_VDSO32=1 NO_PERF_READ_VDSOX32=1 WERROR=0 NO_LIBUNWIND=1 HAVE_CPLUS_DEMANGLE=1 NO_GTK2=1 NO_STRLCPY=1 NO_BIONIC=1 LIBBPF_DYNAMIC=1 LIBTRACEEVENT_DYNAMIC=1 %{?perf_build_extra_opts} prefix=%{_prefix} PYTHON=%{__python3} -%if %{with_perf} -# perf -# make sure check-headers.sh is executable -chmod +x tools/perf/check-headers.sh -%{perf_make} DESTDIR=$RPM_BUILD_ROOT all -%endif - -%global tools_make \ - CFLAGS="${RPM_OPT_FLAGS}" LDFLAGS="%{__global_ldflags}" %{make} %{?make_opts} - -%if %{with_tools} -%ifarch %{cpupowerarchs} -# cpupower -# make sure version-gen.sh is executable. -chmod +x tools/power/cpupower/utils/version-gen.sh -%{tools_make} %{?_smp_mflags} -C tools/power/cpupower CPUFREQ_BENCH=false DEBUG=false -%ifarch x86_64 - pushd tools/power/cpupower/debug/x86_64 - %{tools_make} %{?_smp_mflags} centrino-decode powernow-k8-decode - popd -%endif -%ifarch x86_64 - pushd tools/power/x86/x86_energy_perf_policy/ - %{tools_make} - popd - pushd tools/power/x86/turbostat - %{tools_make} - popd - pushd tools/power/x86/intel-speed-select - %{tools_make} - popd - pushd tools/arch/x86/intel_sdsi - %{tools_make} CFLAGS="${RPM_OPT_FLAGS}" - popd -%endif -%endif -pushd tools/thermal/tmon/ -%{tools_make} -popd -pushd tools/iio/ -%{tools_make} -popd -pushd tools/gpio/ -%{tools_make} -popd -# build VM tools -pushd tools/vm/ -%{tools_make} slabinfo page_owner_sort -popd -%endif - -if [ -f $DevelDir/vmlinux.h ]; then - RPM_VMLINUX_H=$DevelDir/vmlinux.h -fi - -%global bpftool_make \ - %{__make} EXTRA_CFLAGS="${RPM_OPT_FLAGS}" EXTRA_LDFLAGS="%{__global_ldflags}" DESTDIR=$RPM_BUILD_ROOT %{?make_opts} VMLINUX_H="${RPM_VMLINUX_H}" V=1 -%if %{with_bpftool} -pushd tools/bpf/bpftool -%{bpftool_make} -popd -%endif - -%if %{with_selftests} -# Unfortunately, samples/bpf/Makefile expects that the headers are installed -# in the source tree. We installed them previously to $RPM_BUILD_ROOT/usr -# but there's no way to tell the Makefile to take them from there. -%{make} %{?_smp_mflags} headers_install -%{make} %{?_smp_mflags} ARCH=$Arch V=1 M=samples/bpf/ || true - -# Prevent bpf selftests to build bpftool repeatedly: -export BPFTOOL=$(pwd)/tools/bpf/bpftool/bpftool - -pushd tools/testing/selftests -# We need to install here because we need to call make with ARCH set which -# doesn't seem possible to do in the install section. -%{make} %{?_smp_mflags} ARCH=$Arch V=1 TARGETS="bpf vm livepatch net net/forwarding net/mptcp netfilter tc-testing" SKIP_TARGETS="" INSTALL_PATH=%{buildroot}%{_libexecdir}/kselftests VMLINUX_H="${RPM_VMLINUX_H}" install - -# 'make install' for bpf is broken and upstream refuses to fix it. -# Install the needed files manually. -for dir in bpf bpf/no_alu32 bpf/progs; do - # In ARK, the rpm build continues even if some of the selftests - # cannot be built. It's not always possible to build selftests, - # as upstream sometimes dependens on too new llvm version or has - # other issues. If something did not get built, just skip it. - test -d $dir || continue - mkdir -p %{buildroot}%{_libexecdir}/kselftests/$dir - find $dir -maxdepth 1 -type f \( -executable -o -name '*.py' -o -name settings -o \ - -name 'btf_dump_test_case_*.c' -o -name '*.ko' -o \ - -name '*.o' -exec sh -c 'readelf -h "{}" | grep -q "^ Machine:.*BPF"' \; \) -print0 | \ - xargs -0 cp -t %{buildroot}%{_libexecdir}/kselftests/$dir || true -done -popd -export -n BPFTOOL -%endif - -%if %{with_doc} -# Make the HTML pages. -%{__make} PYTHON=/usr/bin/python3 htmldocs || %{doc_build_fail} - -# sometimes non-world-readable files sneak into the kernel source tree -chmod -R a=rX Documentation -find Documentation -type d | xargs chmod u+w -%endif - -# In the modsign case, we do 3 things. 1) We check the "variant" and hard -# code the value in the following invocations. This is somewhat sub-optimal -# but we're doing this inside of an RPM macro and it isn't as easy as it -# could be because of that. 2) We restore the .tmp_versions/ directory from -# the one we saved off in BuildKernel above. This is to make sure we're -# signing the modules we actually built/installed in that variant. 3) We -# grab the arch and invoke mod-sign.sh command to actually sign the modules. -# -# We have to do all of those things _after_ find-debuginfo runs, otherwise -# that will strip the signature off of the modules. -# -# Don't sign modules for the zfcpdump variant as it is monolithic. - -%define __modsign_install_post \ - if [ "%{signmodules}" -eq "1" ]; then \ - if [ "%{with_pae}" -ne "0" ]; then \ - %{modsign_cmd} certs/signing_key.pem.sign+lpae certs/signing_key.x509.sign+lpae $RPM_BUILD_ROOT/lib/modules/%{KVERREL}+lpae/ \ - fi \ - if [ "%{with_debug}" -ne "0" ]; then \ - %{modsign_cmd} certs/signing_key.pem.sign+debug certs/signing_key.x509.sign+debug $RPM_BUILD_ROOT/lib/modules/%{KVERREL}+debug/ \ - fi \ - if [ "%{with_up}" -ne "0" ]; then \ - %{modsign_cmd} certs/signing_key.pem.sign certs/signing_key.x509.sign $RPM_BUILD_ROOT/lib/modules/%{KVERREL}/ \ - fi \ - fi \ - if [ "%{zipmodules}" -eq "1" ]; then \ - find $RPM_BUILD_ROOT/lib/modules/ -type f -name '*.ko' | xargs -P${RPM_BUILD_NCPUS} -r xz; \ - fi \ -%{nil} - -### -### Special hacks for debuginfo subpackages. -### - -# This macro is used by %%install, so we must redefine it before that. -%define debug_package %{nil} - -%if %{with_debuginfo} - -%ifnarch noarch -%global __debug_package 1 -%files -f debugfiles.list debuginfo-common-%{_target_cpu} -%endif - -%endif - -# We don't want to package debuginfo for self-tests and samples but -# we have to delete them to avoid an error messages about unpackaged -# files. -# Delete the debuginfo for kernel-devel files -%define __remove_unwanted_dbginfo_install_post \ - if [ "%{with_selftests}" -ne "0" ]; then \ - rm -rf $RPM_BUILD_ROOT/usr/lib/debug/usr/libexec/ksamples; \ - rm -rf $RPM_BUILD_ROOT/usr/lib/debug/usr/libexec/kselftests; \ - fi \ - rm -rf $RPM_BUILD_ROOT/usr/lib/debug/usr/src; \ -%{nil} - -# -# Disgusting hack alert! We need to ensure we sign modules *after* all -# invocations of strip occur, which is in __debug_install_post if -# find-debuginfo.sh runs, and __os_install_post if not. -# -%define __spec_install_post \ - %{?__debug_package:%{__debug_install_post}}\ - %{__arch_install_post}\ - %{__os_install_post}\ - %{__remove_unwanted_dbginfo_install_post}\ - %{__modsign_install_post} - -### -### install -### - -%install - -cd linux-%{KVERREL} - -%if %{with_doc} -docdir=$RPM_BUILD_ROOT%{_datadir}/doc/kernel-doc-%{specversion}-%{pkgrelease} - -# copy the source over -mkdir -p $docdir -tar -h -f - --exclude=man --exclude='.*' -c Documentation | tar xf - -C $docdir - -# with_doc -%endif - -# We have to do the headers install before the tools install because the -# kernel headers_install will remove any header files in /usr/include that -# it doesn't install itself. - -%if %{with_headers} -# Install kernel headers -%{__make} ARCH=%{hdrarch} INSTALL_HDR_PATH=$RPM_BUILD_ROOT/usr headers_install - -find $RPM_BUILD_ROOT/usr/include \ - \( -name .install -o -name .check -o \ - -name ..install.cmd -o -name ..check.cmd \) -delete - -%endif - -%if %{with_cross_headers} -%if 0%{?fedora} -HDR_ARCH_LIST='arm arm64 powerpc s390 x86' -%else -HDR_ARCH_LIST='arm64 powerpc s390 x86' -%endif -mkdir -p $RPM_BUILD_ROOT/usr/tmp-headers - -for arch in $HDR_ARCH_LIST; do - mkdir $RPM_BUILD_ROOT/usr/tmp-headers/arch-${arch} - %{__make} ARCH=${arch} INSTALL_HDR_PATH=$RPM_BUILD_ROOT/usr/tmp-headers/arch-${arch} headers_install -done - -find $RPM_BUILD_ROOT/usr/tmp-headers \ - \( -name .install -o -name .check -o \ - -name ..install.cmd -o -name ..check.cmd \) -delete - -# Copy all the architectures we care about to their respective asm directories -for arch in $HDR_ARCH_LIST ; do - mkdir -p $RPM_BUILD_ROOT/usr/${arch}-linux-gnu/include - mv $RPM_BUILD_ROOT/usr/tmp-headers/arch-${arch}/include/* $RPM_BUILD_ROOT/usr/${arch}-linux-gnu/include/ -done - -rm -rf $RPM_BUILD_ROOT/usr/tmp-headers -%endif - -%if %{with_kernel_abi_stablelists} -# kabi directory -INSTALL_KABI_PATH=$RPM_BUILD_ROOT/lib/modules/ -mkdir -p $INSTALL_KABI_PATH - -# install kabi releases directories -tar xjvf %{SOURCE300} -C $INSTALL_KABI_PATH -# with_kernel_abi_stablelists -%endif - -%if %{with_perf} -# perf tool binary and supporting scripts/binaries -%{perf_make} DESTDIR=$RPM_BUILD_ROOT lib=%{_lib} install-bin -# remove the 'trace' symlink. -rm -f %{buildroot}%{_bindir}/trace - -# For both of the below, yes, this should be using a macro but right now -# it's hard coded and we don't actually want it anyway right now. -# Whoever wants examples can fix it up! - -# remove examples -rm -rf %{buildroot}/usr/lib/perf/examples -rm -rf %{buildroot}/usr/lib/perf/include - -# python-perf extension -%{perf_make} DESTDIR=$RPM_BUILD_ROOT install-python_ext - -# perf man pages (note: implicit rpm magic compresses them later) -mkdir -p %{buildroot}/%{_mandir}/man1 -%{perf_make} DESTDIR=$RPM_BUILD_ROOT install-man - -# remove any tracevent files, eg. its plugins still gets built and installed, -# even if we build against system's libtracevent during perf build (by setting -# LIBTRACEEVENT_DYNAMIC=1 above in perf_make macro). Those files should already -# ship with libtraceevent package. -rm -rf %{buildroot}%{_libdir}/traceevent -%endif - -%if %{with_tools} -%ifarch %{cpupowerarchs} -%{make} -C tools/power/cpupower DESTDIR=$RPM_BUILD_ROOT libdir=%{_libdir} mandir=%{_mandir} CPUFREQ_BENCH=false install -rm -f %{buildroot}%{_libdir}/*.{a,la} -%find_lang cpupower -mv cpupower.lang ../ -%ifarch x86_64 - pushd tools/power/cpupower/debug/x86_64 - install -m755 centrino-decode %{buildroot}%{_bindir}/centrino-decode - install -m755 powernow-k8-decode %{buildroot}%{_bindir}/powernow-k8-decode - popd -%endif -chmod 0755 %{buildroot}%{_libdir}/libcpupower.so* -mkdir -p %{buildroot}%{_unitdir} %{buildroot}%{_sysconfdir}/sysconfig -install -m644 %{SOURCE2000} %{buildroot}%{_unitdir}/cpupower.service -install -m644 %{SOURCE2001} %{buildroot}%{_sysconfdir}/sysconfig/cpupower -%endif -%ifarch x86_64 - mkdir -p %{buildroot}%{_mandir}/man8 - pushd tools/power/x86/x86_energy_perf_policy - %{tools_make} DESTDIR=%{buildroot} install - popd - pushd tools/power/x86/turbostat - %{tools_make} DESTDIR=%{buildroot} install - popd - pushd tools/power/x86/intel-speed-select - %{tools_make} DESTDIR=%{buildroot} install - popd - pushd tools/arch/x86/intel_sdsi - %{tools_make} CFLAGS="${RPM_OPT_FLAGS}" DESTDIR=%{buildroot} install - popd -%endif -pushd tools/thermal/tmon -%{tools_make} INSTALL_ROOT=%{buildroot} install -popd -pushd tools/iio -%{tools_make} DESTDIR=%{buildroot} install -popd -pushd tools/gpio -%{tools_make} DESTDIR=%{buildroot} install -popd -install -m644 -D %{SOURCE2002} %{buildroot}%{_sysconfdir}/logrotate.d/kvm_stat -pushd tools/kvm/kvm_stat -%{__make} INSTALL_ROOT=%{buildroot} install-tools -%{__make} INSTALL_ROOT=%{buildroot} install-man -install -m644 -D kvm_stat.service %{buildroot}%{_unitdir}/kvm_stat.service -popd -# install VM tools -pushd tools/vm/ -install -m755 slabinfo %{buildroot}%{_bindir}/slabinfo -install -m755 page_owner_sort %{buildroot}%{_bindir}/page_owner_sort -popd -%endif - -if [ -f $DevelDir/vmlinux.h ]; then - RPM_VMLINUX_H=$DevelDir/vmlinux.h -fi - -%if %{with_bpftool} -pushd tools/bpf/bpftool -%{bpftool_make} prefix=%{_prefix} bash_compdir=%{_sysconfdir}/bash_completion.d/ mandir=%{_mandir} install doc-install -popd -%endif - -%if %{with_selftests} -pushd samples -install -d %{buildroot}%{_libexecdir}/ksamples -# install bpf samples -pushd bpf -install -d %{buildroot}%{_libexecdir}/ksamples/bpf -find -type f -executable -exec install -m755 {} %{buildroot}%{_libexecdir}/ksamples/bpf \; -install -m755 *.sh %{buildroot}%{_libexecdir}/ksamples/bpf -# test_lwt_bpf.sh compiles test_lwt_bpf.c when run; this works only from the -# kernel tree. Just remove it. -rm %{buildroot}%{_libexecdir}/ksamples/bpf/test_lwt_bpf.sh -install -m644 *_kern.o %{buildroot}%{_libexecdir}/ksamples/bpf || true -install -m644 tcp_bpf.readme %{buildroot}%{_libexecdir}/ksamples/bpf -popd -# install pktgen samples -pushd pktgen -install -d %{buildroot}%{_libexecdir}/ksamples/pktgen -find . -type f -executable -exec install -m755 {} %{buildroot}%{_libexecdir}/ksamples/pktgen/{} \; -find . -type f ! -executable -exec install -m644 {} %{buildroot}%{_libexecdir}/ksamples/pktgen/{} \; -popd -popd -# install vm selftests -pushd tools/testing/selftests/vm -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/vm/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/vm/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/vm/{} \; -popd -# install drivers/net/mlxsw selftests -pushd tools/testing/selftests/drivers/net/mlxsw -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/drivers/net/mlxsw/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/drivers/net/mlxsw/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/drivers/net/mlxsw/{} \; -popd -# install drivers/net/netdevsim selftests -pushd tools/testing/selftests/drivers/net/netdevsim -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/drivers/net/netdevsim/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/drivers/net/netdevsim/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/drivers/net/netdevsim/{} \; -popd -# install net/forwarding selftests -pushd tools/testing/selftests/net/forwarding -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/net/forwarding/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/net/forwarding/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/net/forwarding/{} \; -popd -# install net/mptcp selftests -pushd tools/testing/selftests/net/mptcp -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/net/mptcp/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/net/mptcp/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/net/mptcp/{} \; -popd -# install tc-testing selftests -pushd tools/testing/selftests/tc-testing -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/tc-testing/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/tc-testing/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/tc-testing/{} \; -popd -# install livepatch selftests -pushd tools/testing/selftests/livepatch -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/livepatch/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/livepatch/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/livepatch/{} \; -popd -# install netfilter selftests -pushd tools/testing/selftests/netfilter -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/netfilter/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/netfilter/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/netfilter/{} \; -popd -%endif - -### -### clean -### - -### -### scripts -### - -%if %{with_tools} -%post -n kernel-tools-libs -/sbin/ldconfig - -%postun -n kernel-tools-libs -/sbin/ldconfig -%endif - -# -# This macro defines a %%post script for a kernel*-devel package. -# %%kernel_devel_post [<subpackage>] -# Note we don't run hardlink if ostree is in use, as ostree is -# a far more sophisticated hardlink implementation. -# https://github.com/projectatomic/rpm-ostree/commit/58a79056a889be8814aa51f507b2c7a4dccee526 -# -# The deletion of *.hardlink-temporary files is a temporary workaround -# for this bug in the hardlink binary (fixed in util-linux 2.38): -# https://github.com/util-linux/util-linux/issues/1602 -# -%define kernel_devel_post() \ -%{expand:%%post %{?1:%{1}-}devel}\ -if [ -f /etc/sysconfig/kernel ]\ -then\ - . /etc/sysconfig/kernel || exit $?\ -fi\ -if [ "$HARDLINK" != "no" -a -x /usr/bin/hardlink -a ! -e /run/ostree-booted ] \ -then\ - (cd /usr/src/kernels/%{KVERREL}%{?1:+%{1}} &&\ - /usr/bin/find . -type f | while read f; do\ - hardlink -c /usr/src/kernels/*%{?dist}.*/$f $f > /dev/null\ - done;\ - /usr/bin/find /usr/src/kernels -type f -name '*.hardlink-temporary' -delete\ - )\ -fi\ -%{nil} - -# -# This macro defines a %%post script for a kernel*-modules-extra package. -# It also defines a %%postun script that does the same thing. -# %%kernel_modules_extra_post [<subpackage>] -# -%define kernel_modules_extra_post() \ -%{expand:%%post %{?1:%{1}-}modules-extra}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil}\ -%{expand:%%postun %{?1:%{1}-}modules-extra}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil} - -# -# This macro defines a %%post script for a kernel*-modules-internal package. -# It also defines a %%postun script that does the same thing. -# %%kernel_modules_internal_post [<subpackage>] -# -%define kernel_modules_internal_post() \ -%{expand:%%post %{?1:%{1}-}modules-internal}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil}\ -%{expand:%%postun %{?1:%{1}-}modules-internal}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil} - -# -# This macro defines a %%post script for a kernel*-modules package. -# It also defines a %%postun script that does the same thing. -# %%kernel_modules_post [<subpackage>] -# -%define kernel_modules_post() \ -%{expand:%%post %{?1:%{1}-}modules}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -if [ ! -f %{_localstatedir}/lib/rpm-state/%{name}/installing_core_%{KVERREL}%{?1:+%{1}} ]; then\ - mkdir -p %{_localstatedir}/lib/rpm-state/%{name}\ - touch %{_localstatedir}/lib/rpm-state/%{name}/need_to_run_dracut_%{KVERREL}%{?1:+%{1}}\ -fi\ -%{nil}\ -%{expand:%%postun %{?1:%{1}-}modules}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil}\ -%{expand:%%posttrans %{?1:%{1}-}modules}\ -if [ -f %{_localstatedir}/lib/rpm-state/%{name}/need_to_run_dracut_%{KVERREL}%{?1:+%{1}} ]; then\ - rm -f %{_localstatedir}/lib/rpm-state/%{name}/need_to_run_dracut_%{KVERREL}%{?1:+%{1}}\ - echo "Running: dracut -f --kver %{KVERREL}%{?1:+%{1}}"\ - dracut -f --kver "%{KVERREL}%{?1:+%{1}}" || exit $?\ -fi\ -%{nil} - -# This macro defines a %%posttrans script for a kernel package. -# %%kernel_variant_posttrans [<subpackage>] -# More text can follow to go at the end of this variant's %%post. -# -%define kernel_variant_posttrans() \ -%{expand:%%posttrans %{?1:%{1}-}core}\ -%if 0%{!?fedora:1}\ -if [ -x %{_sbindir}/weak-modules ]\ -then\ - %{_sbindir}/weak-modules --add-kernel %{KVERREL}%{?1:+%{1}} || exit $?\ -fi\ -%endif\ -rm -f %{_localstatedir}/lib/rpm-state/%{name}/installing_core_%{KVERREL}%{?1:+%{1}}\ -/bin/kernel-install add %{KVERREL}%{?1:+%{1}} /lib/modules/%{KVERREL}%{?1:+%{1}}/vmlinuz || exit $?\ -%{nil} - -# -# This macro defines a %%post script for a kernel package and its devel package. -# %%kernel_variant_post [-v <subpackage>] [-r <replace>] -# More text can follow to go at the end of this variant's %%post. -# -%define kernel_variant_post(v:r:) \ -%{expand:%%kernel_devel_post %{?-v*}}\ -%{expand:%%kernel_modules_post %{?-v*}}\ -%{expand:%%kernel_modules_extra_post %{?-v*}}\ -%{expand:%%kernel_modules_internal_post %{?-v*}}\ -%{expand:%%kernel_variant_posttrans %{?-v*}}\ -%{expand:%%post %{?-v*:%{-v*}-}core}\ -%{-r:\ -if [ `uname -i` == "x86_64" -o `uname -i` == "i386" ] &&\ - [ -f /etc/sysconfig/kernel ]; then\ - /bin/sed -r -i -e 's/^DEFAULTKERNEL=%{-r*}$/DEFAULTKERNEL=kernel%{?-v:-%{-v*}}/' /etc/sysconfig/kernel || exit $?\ -fi}\ -mkdir -p %{_localstatedir}/lib/rpm-state/%{name}\ -touch %{_localstatedir}/lib/rpm-state/%{name}/installing_core_%{KVERREL}%{?1:+%{1}}\ -%{nil} - -# -# This macro defines a %%preun script for a kernel package. -# %%kernel_variant_preun <subpackage> -# -%define kernel_variant_preun() \ -%{expand:%%preun %{?1:%{1}-}core}\ -/bin/kernel-install remove %{KVERREL}%{?1:+%{1}} /lib/modules/%{KVERREL}%{?1:+%{1}}/vmlinuz || exit $?\ -if [ -x %{_sbindir}/weak-modules ]\ -then\ - %{_sbindir}/weak-modules --remove-kernel %{KVERREL}%{?1:+%{1}} || exit $?\ -fi\ -%{nil} - -%kernel_variant_preun -%kernel_variant_post -r kernel-smp - -%if %{with_pae} -%kernel_variant_preun lpae -%kernel_variant_post -v lpae -r (kernel|kernel-smp) -%endif - -%if %{with_debug} -%kernel_variant_preun debug -%kernel_variant_post -v debug -%endif - -%if %{with_zfcpdump} -%kernel_variant_preun zfcpdump -%kernel_variant_post -v zfcpdump -%endif - -if [ -x /sbin/ldconfig ] -then - /sbin/ldconfig -X || exit $? -fi - -### -### file lists -### - -%if %{with_headers} -%files headers -/usr/include/* -%endif - -%if %{with_cross_headers} -%files cross-headers -/usr/*-linux-gnu/include/* -%endif - -%if %{with_kernel_abi_stablelists} -%files -n kernel-abi-stablelists -/lib/modules/kabi-* -%endif - -%if %{with_kabidw_base} -%ifarch x86_64 s390x ppc64 ppc64le aarch64 -%files kernel-kabidw-base-internal -%defattr(-,root,root) -/kabidw-base/%{_target_cpu}/* -%endif -%endif - -# only some architecture builds need kernel-doc -%if %{with_doc} -%files doc -%defattr(-,root,root) -%{_datadir}/doc/kernel-doc-%{specversion}-%{pkgrelease}/Documentation/* -%dir %{_datadir}/doc/kernel-doc-%{specversion}-%{pkgrelease}/Documentation -%dir %{_datadir}/doc/kernel-doc-%{specversion}-%{pkgrelease} -%endif - -%if %{with_perf} -%files -n perf -%{_bindir}/perf -%{_libdir}/libperf-jvmti.so -%dir %{_libexecdir}/perf-core -%{_libexecdir}/perf-core/* -%{_datadir}/perf-core/* -%{_mandir}/man[1-8]/perf* -%{_sysconfdir}/bash_completion.d/perf -%doc linux-%{KVERREL}/tools/perf/Documentation/examples.txt -%{_docdir}/perf-tip/tips.txt - -%files -n python3-perf -%{python3_sitearch}/* - -%if %{with_debuginfo} -%files -f perf-debuginfo.list -n perf-debuginfo - -%files -f python3-perf-debuginfo.list -n python3-perf-debuginfo -%endif -# with_perf -%endif - -%if %{with_tools} -%ifnarch %{cpupowerarchs} -%files -n kernel-tools -%else -%files -n kernel-tools -f cpupower.lang -%{_bindir}/cpupower -%{_datadir}/bash-completion/completions/cpupower -%ifarch x86_64 -%{_bindir}/centrino-decode -%{_bindir}/powernow-k8-decode -%endif -%{_unitdir}/cpupower.service -%{_mandir}/man[1-8]/cpupower* -%config(noreplace) %{_sysconfdir}/sysconfig/cpupower -%ifarch x86_64 -%{_bindir}/x86_energy_perf_policy -%{_mandir}/man8/x86_energy_perf_policy* -%{_bindir}/turbostat -%{_mandir}/man8/turbostat* -%{_bindir}/intel-speed-select -%{_sbindir}/intel_sdsi -%endif -# cpupowerarchs -%endif -%{_bindir}/tmon -%{_bindir}/iio_event_monitor -%{_bindir}/iio_generic_buffer -%{_bindir}/lsiio -%{_bindir}/lsgpio -%{_bindir}/gpio-hammer -%{_bindir}/gpio-event-mon -%{_bindir}/gpio-watch -%{_mandir}/man1/kvm_stat* -%{_bindir}/kvm_stat -%{_unitdir}/kvm_stat.service -%config(noreplace) %{_sysconfdir}/logrotate.d/kvm_stat -%{_bindir}/page_owner_sort -%{_bindir}/slabinfo - -%if %{with_debuginfo} -%files -f kernel-tools-debuginfo.list -n kernel-tools-debuginfo -%endif - -%ifarch %{cpupowerarchs} -%files -n kernel-tools-libs -%{_libdir}/libcpupower.so.0 -%{_libdir}/libcpupower.so.0.0.1 - -%files -n kernel-tools-libs-devel -%{_libdir}/libcpupower.so -%{_includedir}/cpufreq.h -%endif -# with_tools -%endif - -%if %{with_bpftool} -%files -n bpftool -%{_sbindir}/bpftool -%{_sysconfdir}/bash_completion.d/bpftool -%{_mandir}/man8/bpftool-cgroup.8.gz -%{_mandir}/man8/bpftool-gen.8.gz -%{_mandir}/man8/bpftool-iter.8.gz -%{_mandir}/man8/bpftool-link.8.gz -%{_mandir}/man8/bpftool-map.8.gz -%{_mandir}/man8/bpftool-prog.8.gz -%{_mandir}/man8/bpftool-perf.8.gz -%{_mandir}/man8/bpftool.8.gz -%{_mandir}/man8/bpftool-net.8.gz -%{_mandir}/man8/bpftool-feature.8.gz -%{_mandir}/man8/bpftool-btf.8.gz -%{_mandir}/man8/bpftool-struct_ops.8.gz - -%if %{with_debuginfo} -%files -f bpftool-debuginfo.list -n bpftool-debuginfo -%defattr(-,root,root) -%endif -%endif - -%if %{with_selftests} -%files selftests-internal -%{_libexecdir}/ksamples -%{_libexecdir}/kselftests -%endif - -# empty meta-package -%ifnarch %nobuildarches noarch -%files -%endif - -%if %{with_gcov} -%ifnarch %nobuildarches noarch -%files gcov -%{_builddir} -%endif -%endif - -# This is %%{image_install_path} on an arch where that includes ELF files, -# or empty otherwise. -%define elf_image_install_path %{?kernel_image_elf:%{image_install_path}} - -# -# This macro defines the %%files sections for a kernel package -# and its devel and debuginfo packages. -# %%kernel_variant_files [-k vmlinux] <use_vdso> <condition> <subpackage> -# -%define kernel_variant_files(k:) \ -%if %{2}\ -%{expand:%%files -f kernel-%{?3:%{3}-}core.list %{?1:-f kernel-%{?3:%{3}-}ldsoconf.list} %{?3:%{3}-}core}\ -%{!?_licensedir:%global license %%doc}\ -%license linux-%{KVERREL}/COPYING-%{version}-%{release}\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/%{?-k:%{-k*}}%{!?-k:vmlinuz}\ -%ghost /%{image_install_path}/%{?-k:%{-k*}}%{!?-k:vmlinuz}-%{KVERREL}%{?3:+%{3}}\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/.vmlinuz.hmac \ -%ghost /%{image_install_path}/.vmlinuz-%{KVERREL}%{?3:+%{3}}.hmac \ -%ifarch %{arm} aarch64\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/dtb \ -%ghost /%{image_install_path}/dtb-%{KVERREL}%{?3:+%{3}} \ -%endif\ -%attr(0600, root, root) /lib/modules/%{KVERREL}%{?3:+%{3}}/System.map\ -%ghost %attr(0600, root, root) /boot/System.map-%{KVERREL}%{?3:+%{3}}\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/symvers.gz\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/config\ -%ghost %attr(0600, root, root) /boot/symvers-%{KVERREL}%{?3:+%{3}}.gz\ -%ghost %attr(0600, root, root) /boot/initramfs-%{KVERREL}%{?3:+%{3}}.img\ -%ghost %attr(0644, root, root) /boot/config-%{KVERREL}%{?3:+%{3}}\ -%dir /lib/modules\ -%dir /lib/modules/%{KVERREL}%{?3:+%{3}}\ -%dir /lib/modules/%{KVERREL}%{?3:+%{3}}/kernel\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/build\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/source\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/updates\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/weak-updates\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/systemtap\ -%{_datadir}/doc/kernel-keys/%{KVERREL}%{?3:+%{3}}\ -%if %{1}\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/vdso\ -%endif\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/modules.*\ -%{expand:%%files -f kernel-%{?3:%{3}-}modules.list %{?3:%{3}-}modules}\ -%{expand:%%files %{?3:%{3}-}devel}\ -%defverify(not mtime)\ -/usr/src/kernels/%{KVERREL}%{?3:+%{3}}\ -%{expand:%%files %{?3:%{3}-}devel-matched}\ -%{expand:%%files -f kernel-%{?3:%{3}-}modules-extra.list %{?3:%{3}-}modules-extra}\ -%config(noreplace) /etc/modprobe.d/*-blacklist.conf\ -%{expand:%%files -f kernel-%{?3:%{3}-}modules-internal.list %{?3:%{3}-}modules-internal}\ -%if %{with_debuginfo}\ -%ifnarch noarch\ -%{expand:%%files -f debuginfo%{?3}.list %{?3:%{3}-}debuginfo}\ -%endif\ -%endif\ -%if %{?3:1} %{!?3:0}\ -%{expand:%%files %{3}}\ -%endif\ -%endif\ -%{nil} - -%kernel_variant_files %{_use_vdso} %{with_up} -%kernel_variant_files %{_use_vdso} %{with_debug} debug -%if %{with_debug_meta} -%files debug -%files debug-core -%files debug-devel -%files debug-devel-matched -%files debug-modules -%files debug-modules-extra -%endif -%kernel_variant_files %{use_vdso} %{with_pae} lpae -%kernel_variant_files %{_use_vdso} %{with_zfcpdump} zfcpdump - -%define kernel_variant_ipaclones(k:) \ -%if %{1}\ -%if %{with_ipaclones}\ -%{expand:%%files %{?2:%{2}-}ipaclones-internal}\ -%defattr(-,root,root)\ -%defverify(not mtime)\ -/usr/src/kernels/%{KVERREL}%{?2:+%{2}}-ipaclones\ -%endif\ -%endif\ -%{nil} - -%kernel_variant_ipaclones %{with_up} - -# plz don't put in a version string unless you're going to tag -# and build. -# -# -%changelog Mon Mar 28 2022 Fedora Kernel Team <kernel-team@xxxxxxxxxxxxxxxxx> [5.16.0-0.rc5.6.test] - -### -# The following Emacs magic makes C-c C-e use UTC dates. -# Local Variables: -# rpm-change-log-uses-utc: t -# End: -### diff --git a/redhat/self-test/data/centos-78e36f3b0dae.el7.spec b/redhat/self-test/data/centos-78e36f3b0dae.el7.spec index blahblah..blahblah 100755 --- a/redhat/self-test/data/centos-78e36f3b0dae.el7.spec +++ b/redhat/self-test/data/centos-78e36f3b0dae.el7.spec @@ -1,125 +1,7 @@ -# All Global changes to build and install go here. -# Per the below section about __spec_install_pre, any rpm -# environment changes that affect %%install need to go -# here before the %%install macro is pre-built. - -# Disable LTO in userspace packages. -%global _lto_cflags %{nil} - -# Option to enable compiling with clang instead of gcc. -%bcond_with toolchain_clang - -%if %{with toolchain_clang} -%global toolchain clang -%endif - -# Compile the kernel with LTO (only supported when building with clang). -%bcond_with clang_lto - -%if %{with clang_lto} && %{without toolchain_clang} -{error:clang_lto requires --with toolchain_clang} -%endif - -# Cross compile on copr for arm -# See https://bugzilla.redhat.com/1879599 -%if 0%{?_with_cross_arm:1} -%global _target_cpu armv7hl -%global _arch arm -%global _build_arch arm -%global _with_cross 1 -%endif - -# The kernel's %%install section is special -# Normally the %%install section starts by cleaning up the BUILD_ROOT -# like so: -# -# %%__spec_install_pre %%{___build_pre}\ -# [ "$RPM_BUILD_ROOT" != "/" ] && rm -rf "${RPM_BUILD_ROOT}"\ -# mkdir -p `dirname "$RPM_BUILD_ROOT"`\ -# mkdir "$RPM_BUILD_ROOT"\ -# %%{nil} -# -# But because of kernel variants, the %%build section, specifically -# BuildKernel(), moves each variant to its final destination as the -# variant is built. This violates the expectation of the %%install -# section. As a result we snapshot the current env variables and -# purposely leave out the removal section. All global wide changes -# should be added above this line otherwise the %%install section -# will not see them. -%global __spec_install_pre %{___build_pre} - -# At the time of this writing (2019-03), RHEL8 packages use w2.xzdio -# compression for rpms (xz, level 2). -# Kernel has several large (hundreds of mbytes) rpms, they take ~5 mins -# to compress by single-threaded xz. Switch to threaded compression, -# and from level 2 to 3 to keep compressed sizes close to "w2" results. -# -# NB: if default compression in /usr/lib/rpm/redhat/macros ever changes, -# this one might need tweaking (e.g. if default changes to w3.xzdio, -# change below to w4T.xzdio): -# -# This is disabled on i686 as it triggers oom errors - -%ifnarch i686 -%define _binary_payload w3T.xzdio -%endif - -Summary: The Linux kernel -%if 0%{?fedora} -%define secure_boot_arch x86_64 -%else -%define secure_boot_arch x86_64 aarch64 s390x ppc64le -%endif - -# Signing for secure boot authentication -%ifarch %{secure_boot_arch} -%global signkernel 1 -%else -%global signkernel 0 -%endif - -# Sign modules on all arches -%global signmodules 1 - -# Compress modules only for architectures that build modules -%ifarch noarch -%global zipmodules 0 -%else -%global zipmodules 1 -%endif - -%if %{zipmodules} -%global zipsed -e 's/\.ko$/\.ko.xz/' -# for parallel xz processes, replace with 1 to go back to single process -%endif - -%if 0%{?fedora} -%define primary_target fedora -%else -%define primary_target rhel -%endif - -# -# genspec.sh variables -# - -# Include Fedora files %global include_fedora 1 -# Include RHEL files %global include_rhel 1 -# Provide Patchlist.changelog file %global patchlist_changelog 1 -# Set released_kernel to 1 when the upstream source tarball contains a -# kernel release. (This includes prepatch or "rc" releases.) -# Set released_kernel to 0 when the upstream source tarball contains an -# unreleased kernel development snapshot. %global released_kernel 0 -# Set debugbuildsenabled to 1 to build separate base and debug kernels -# (on supported architectures). The kernel-debug-* subpackages will -# contain the debug kernel. -# Set debugbuildsenabled to 0 to not build a separate debug kernel, but -# to build the base kernel using the debug configuration. (Specifying -# the --with-release option overrides this setting.) %define debugbuildsenabled 0 %define buildid .test %define specversion 5.17.0 @@ -127,2924 +9,6 @@ Summary: The Linux kernel %define pkgrelease 0.rc0.78e36f3b0dae.6.test %define kversion 5 %define tarfile_release 5.17.0-0.rc0.78e36f3b0dae.6.test -# This is needed to do merge window version magic %define patchlevel 17 -# allow pkg_release to have configurable %%{?dist} tag %define specrelease 0.rc0.78e36f3b0dae.6%{?buildid}%{?dist} - -# -# End of genspec.sh variables -# - -%define pkg_release %{specrelease} - -# libexec dir is not used by the linker, so the shared object there -# should not be exported to RPM provides -%global __provides_exclude_from ^%{_libexecdir}/kselftests - -# The following build options are enabled by default, but may become disabled -# by later architecture-specific checks. These can also be disabled by using -# --without <opt> in the rpmbuild command, or by forcing these values to 0. -# -# standard kernel -%define with_up %{?_without_up: 0} %{?!_without_up: 1} -# kernel PAE (only valid for ARM (lpae)) -%define with_pae %{?_without_pae: 0} %{?!_without_pae: 1} -# kernel-debug -%define with_debug %{?_without_debug: 0} %{?!_without_debug: 1} -# kernel-zfcpdump (s390 specific kernel for zfcpdump) -%define with_zfcpdump %{?_without_zfcpdump: 0} %{?!_without_zfcpdump: 1} -# kernel-doc -%define with_doc %{?_without_doc: 0} %{?!_without_doc: 1} -# kernel-headers -%define with_headers %{?_without_headers: 0} %{?!_without_headers: 1} -%define with_cross_headers %{?_without_cross_headers: 0} %{?!_without_cross_headers: 1} -# perf -%define with_perf %{?_without_perf: 0} %{?!_without_perf: 1} -# tools -%define with_tools %{?_without_tools: 0} %{?!_without_tools: 1} -# bpf tool -%define with_bpftool %{?_without_bpftool: 0} %{?!_without_bpftool: 1} -# kernel-debuginfo -%define with_debuginfo %{?_without_debuginfo: 0} %{?!_without_debuginfo: 1} -# kernel-abi-stablelists -%define with_kernel_abi_stablelists %{?_without_kernel_abi_stablelists: 0} %{?!_without_kernel_abi_stablelists: 1} -# internal samples and selftests -%define with_selftests %{?_without_selftests: 0} %{?!_without_selftests: 1} -# -# Additional options for user-friendly one-off kernel building: -# -# Only build the base kernel (--with baseonly): -%define with_baseonly %{?_with_baseonly: 1} %{?!_with_baseonly: 0} -# Only build the pae kernel (--with paeonly): -%define with_paeonly %{?_with_paeonly: 1} %{?!_with_paeonly: 0} -# Only build the debug kernel (--with dbgonly): -%define with_dbgonly %{?_with_dbgonly: 1} %{?!_with_dbgonly: 0} -# Control whether we perform a compat. check against published ABI. -%define with_kabichk %{?_without_kabichk: 0} %{?!_without_kabichk: 1} -# Temporarily disable kabi checks until RC. -%define with_kabichk 0 -# Control whether we perform a compat. check against DUP ABI. -%define with_kabidupchk %{?_with_kabidupchk: 1} %{?!_with_kabidupchk: 0} -# -# Control whether to run an extensive DWARF based kABI check. -# Note that this option needs to have baseline setup in SOURCE300. -%define with_kabidwchk %{?_without_kabidwchk: 0} %{?!_without_kabidwchk: 1} -%define with_kabidw_base %{?_with_kabidw_base: 1} %{?!_with_kabidw_base: 0} -# -# Control whether to install the vdso directories. -%define with_vdso_install %{?_without_vdso_install: 0} %{?!_without_vdso_install: 1} -# -# should we do C=1 builds with sparse -%define with_sparse %{?_with_sparse: 1} %{?!_with_sparse: 0} -# -# Cross compile requested? -%define with_cross %{?_with_cross: 1} %{?!_with_cross: 0} -# -# build a release kernel on rawhide -%define with_release %{?_with_release: 1} %{?!_with_release: 0} - -# verbose build, i.e. no silent rules and V=1 -%define with_verbose %{?_with_verbose: 1} %{?!_with_verbose: 0} - -# -# check for mismatched config options -%define with_configchecks %{?_without_configchecks: 0} %{?!_without_configchecks: 1} - -# -# gcov support -%define with_gcov %{?_with_gcov:1}%{?!_with_gcov:0} - -# -# ipa_clone support -%define with_ipaclones %{?_without_ipaclones: 0} %{?!_without_ipaclones: 1} - -# Want to build a vanilla kernel build without any non-upstream patches? -%define with_vanilla %{?_with_vanilla: 1} %{?!_with_vanilla: 0} - -%if 0%{?fedora} -# Kernel headers are being split out into a separate package -%define with_headers 0 -%define with_cross_headers 0 -# no ipa_clone for now -%define with_ipaclones 0 -# no stablelist -%define with_kernel_abi_stablelists 0 -# Fedora builds these separately -%define with_perf 0 -%define with_tools 0 -%define with_bpftool 0 -# selftests turns on bpftool -%define with_selftests 0 -%endif - -%if %{with_verbose} -%define make_opts V=1 -%else -%define make_opts -s -%endif - -%if %{with toolchain_clang} -%ifarch s390x ppc64le -%global llvm_ias 0 -%else -%global llvm_ias 1 -%endif -%global clang_make_opts HOSTCC=clang CC=clang LLVM_IAS=%{llvm_ias} -%if %{with clang_lto} -%global clang_make_opts %{clang_make_opts} LD=ld.lld HOSTLD=ld.lld AR=llvm-ar NM=llvm-nm HOSTAR=llvm-ar HOSTNM=llvm-nm -%endif -%global make_opts %{make_opts} %{clang_make_opts} -# clang does not support the -fdump-ipa-clones option -%global with_ipaclones 0 -%endif - -# turn off debug kernel and kabichk for gcov builds -%if %{with_gcov} -%define with_debug 0 -%define with_kabichk 0 -%define with_kabidupchk 0 -%define with_kabidwchk 0 -%define with_kabidw_base 0 -%define with_kernel_abi_stablelists 0 -%endif - -# turn off kABI DWARF-based check if we're generating the base dataset -%if %{with_kabidw_base} -%define with_kabidwchk 0 -%endif - -# kpatch_kcflags are extra compiler flags applied to base kernel -# -fdump-ipa-clones is enabled only for base kernels on selected arches -%if %{with_ipaclones} -%ifarch x86_64 ppc64le -%define kpatch_kcflags -fdump-ipa-clones -%else -%define with_ipaclones 0 -%endif -%endif - -%define make_target bzImage -%define image_install_path boot - -%define KVERREL %{version}-%{release}.%{_target_cpu} -%define KVERREL_RE %(echo %KVERREL | sed 's/+/[+]/g') -%define hdrarch %_target_cpu -%define asmarch %_target_cpu - -%if 0%{!?nopatches:1} -%define nopatches 0 -%endif - -%if %{with_vanilla} -%define nopatches 1 -%endif - -%if %{with_release} -%define debugbuildsenabled 1 -%endif - -%if !%{with_debuginfo} -%define _enable_debug_packages 0 -%endif -%define debuginfodir /usr/lib/debug -# Needed because we override almost everything involving build-ids -# and debuginfo generation. Currently we rely on the old alldebug setting. -%global _build_id_links alldebug - -# kernel PAE is only built on ARMv7 -%ifnarch armv7hl -%define with_pae 0 -%endif - -# if requested, only build base kernel -%if %{with_baseonly} -%define with_pae 0 -%define with_debug 0 -%define with_vdso_install 0 -%define with_perf 0 -%define with_tools 0 -%define with_bpftool 0 -%define with_kernel_abi_stablelists 0 -%define with_selftests 0 -%define with_cross 0 -%define with_cross_headers 0 -%define with_ipaclones 0 -%endif - -# if requested, only build pae kernel -%if %{with_paeonly} -%define with_up 0 -%define with_debug 0 -%endif - -# if requested, only build debug kernel -%if %{with_dbgonly} -%define with_up 0 -%define with_vdso_install 0 -%define with_perf 0 -%define with_tools 0 -%define with_bpftool 0 -%define with_kernel_abi_stablelists 0 -%define with_selftests 0 -%define with_cross 0 -%define with_cross_headers 0 -%define with_ipaclones 0 -%endif - -# turn off kABI DUP check and DWARF-based check if kABI check is disabled -%if !%{with_kabichk} -%define with_kabidupchk 0 -%define with_kabidwchk 0 -%endif - -%if %{with_vdso_install} -%define use_vdso 1 -%endif - -# selftests require bpftool to be built -%if %{with_selftests} -%define with_bpftool 1 -%endif - -%ifnarch noarch -%define with_kernel_abi_stablelists 0 -%endif - -# Overrides for generic default options - -# only package docs noarch -%ifnarch noarch -%define with_doc 0 -%define doc_build_fail true -%endif - -%if 0%{?fedora} -# don't do debug builds on anything but i686 and x86_64 -%ifnarch i686 x86_64 -%define with_debug 0 -%endif -%endif - -# don't build noarch kernels or headers (duh) -%ifarch noarch -%define with_up 0 -%define with_headers 0 -%define with_cross_headers 0 -%define with_tools 0 -%define with_perf 0 -%define with_bpftool 0 -%define with_selftests 0 -%define with_debug 0 -%define all_arch_configs kernel-%{version}-*.config -%endif - -# sparse blows up on ppc -%ifnarch ppc64le -%define with_sparse 0 -%endif - -# zfcpdump mechanism is s390 only -%ifnarch s390x -%define with_zfcpdump 0 -%endif - -%if 0%{?fedora} -# This is not for Fedora -%define with_zfcpdump 0 -%endif - -# Per-arch tweaks - -%ifarch i686 -%define asmarch x86 -%define hdrarch i386 -%define all_arch_configs kernel-%{version}-i?86*.config -%define kernel_image arch/x86/boot/bzImage -%endif - -%ifarch x86_64 -%define asmarch x86 -%define all_arch_configs kernel-%{version}-x86_64*.config -%define kernel_image arch/x86/boot/bzImage -%endif - -%ifarch ppc64le -%define asmarch powerpc -%define hdrarch powerpc -%define make_target vmlinux -%define kernel_image vmlinux -%define kernel_image_elf 1 -%define use_vdso 0 -%define all_arch_configs kernel-%{version}-ppc64le*.config -%endif - -%ifarch s390x -%define asmarch s390 -%define hdrarch s390 -%define all_arch_configs kernel-%{version}-s390x.config -%define kernel_image arch/s390/boot/bzImage -%define vmlinux_decompressor arch/s390/boot/compressed/vmlinux -%endif - -%ifarch %{arm} -%define all_arch_configs kernel-%{version}-arm*.config -%define skip_nonpae_vdso 1 -%define asmarch arm -%define hdrarch arm -%define make_target bzImage -%define kernel_image arch/arm/boot/zImage -# http://lists.infradead.org/pipermail/linux-arm-kernel/2012-March/091404.html -%define kernel_mflags KALLSYMS_EXTRA_PASS=1 -# we only build headers/perf/tools on the base arm arches -# just like we used to only build them on i386 for x86 -%ifnarch armv7hl -%define with_headers 0 -%define with_cross_headers 0 -%endif -# These currently don't compile on armv7 -%define with_selftests 0 -%endif - -%ifarch aarch64 -%define all_arch_configs kernel-%{version}-aarch64*.config -%define asmarch arm64 -%define hdrarch arm64 -%define make_target Image.gz -%define kernel_image arch/arm64/boot/Image.gz -%endif - -# Should make listnewconfig fail if there's config options -# printed out? -%if %{nopatches} -%define with_configchecks 0 -%endif - -# To temporarily exclude an architecture from being built, add it to -# %%nobuildarches. Do _NOT_ use the ExclusiveArch: line, because if we -# don't build kernel-headers then the new build system will no longer let -# us use the previous build of that package -- it'll just be completely AWOL. -# Which is a BadThing(tm). - -# We only build kernel-headers on the following... -%if 0%{?fedora} -%define nobuildarches i386 -%else -%define nobuildarches i386 i686 %{arm} -%endif - -%ifarch %nobuildarches -# disable BuildKernel commands -%define with_up 0 -%define with_debug 0 -%define with_pae 0 -%define with_zfcpdump 0 - -%define with_debuginfo 0 -%define with_perf 0 -%define with_tools 0 -%define with_bpftool 0 -%define with_selftests 0 -%define _enable_debug_packages 0 -%endif - -# Architectures we build tools/cpupower on -%if 0%{?fedora} -%define cpupowerarchs %{ix86} x86_64 ppc64le %{arm} aarch64 -%else -%define cpupowerarchs i686 x86_64 ppc64le aarch64 -%endif - -%if 0%{?use_vdso} - -%if 0%{?skip_nonpae_vdso} -%define _use_vdso 0 -%else -%define _use_vdso 1 -%endif - -%else -%define _use_vdso 0 -%endif - -# If build of debug packages is disabled, we need to know if we want to create -# meta debug packages or not, after we define with_debug for all specific cases -# above. So this must be at the end here, after all cases of with_debug or not. -%define with_debug_meta 0 -%if !%{debugbuildsenabled} -%if %{with_debug} -%define with_debug_meta 1 -%endif -%define with_debug 0 -%endif - - -# -# Packages that need to be installed before the kernel is, because the %%post -# scripts use them. -# -%define kernel_prereq coreutils, systemd >= 203-2, /usr/bin/kernel-install -%define initrd_prereq dracut >= 027 - - -Name: kernel -License: GPLv2 and Redistributable, no modification permitted -URL: https://www.kernel.org/ -Version: %{specversion} -Release: %{pkg_release} -# DO NOT CHANGE THE 'ExclusiveArch' LINE TO TEMPORARILY EXCLUDE AN ARCHITECTURE BUILD. -# SET %%nobuildarches (ABOVE) INSTEAD -%if 0%{?fedora} -ExclusiveArch: noarch x86_64 s390x %{arm} aarch64 ppc64le -%else -ExclusiveArch: noarch i386 i686 x86_64 s390x %{arm} aarch64 ppc64le -%endif -ExclusiveOS: Linux -%ifnarch %{nobuildarches} -Requires: kernel-core-uname-r = %{KVERREL} -Requires: kernel-modules-uname-r = %{KVERREL} -%endif - - -# -# List the packages used during the kernel build -# -BuildRequires: kmod, patch, bash, coreutils, tar, git-core, which -BuildRequires: bzip2, xz, findutils, gzip, m4, perl-interpreter, perl-Carp, perl-devel, perl-generators, make, diffutils, gawk -BuildRequires: gcc, binutils, redhat-rpm-config, hmaccalc, bison, flex, gcc-c++ -BuildRequires: net-tools, hostname, bc, elfutils-devel -BuildRequires: dwarves -BuildRequires: python3-devel -BuildRequires: gcc-plugin-devel -# glibc-static is required for a consistent build environment (specifically -# CONFIG_CC_CAN_LINK_STATIC=y). -BuildRequires: glibc-static -%ifnarch %{nobuildarches} noarch -BuildRequires: bpftool -%endif -%if %{with_headers} -BuildRequires: rsync -%endif -%if %{with_doc} -BuildRequires: xmlto, asciidoc, python3-sphinx, python3-sphinx_rtd_theme -%endif -%if %{with_sparse} -BuildRequires: sparse -%endif -%if %{with_perf} -BuildRequires: zlib-devel binutils-devel newt-devel perl(ExtUtils::Embed) bison flex xz-devel -BuildRequires: audit-libs-devel -BuildRequires: java-devel -BuildRequires: libbpf-devel -BuildRequires: libbabeltrace-devel -BuildRequires: libtraceevent-devel -%ifnarch %{arm} s390x -BuildRequires: numactl-devel -%endif -%ifarch aarch64 -BuildRequires: opencsd-devel >= 1.0.0 -%endif -%endif -%if %{with_tools} -BuildRequires: gettext ncurses-devel -BuildRequires: libcap-devel libcap-ng-devel -%ifnarch s390x -BuildRequires: pciutils-devel -%endif -%ifarch i686 x86_64 -BuildRequires: libnl3-devel -%endif -%endif -%if %{with_tools} || %{signmodules} || %{signkernel} -BuildRequires: openssl-devel -%endif -%if %{with_bpftool} -BuildRequires: python3-docutils -BuildRequires: zlib-devel binutils-devel -%endif -%if %{with_selftests} -BuildRequires: clang llvm -%ifnarch %{arm} -BuildRequires: numactl-devel -%endif -BuildRequires: libcap-devel libcap-ng-devel rsync libmnl-devel -%endif -BuildConflicts: rhbuildsys(DiskFree) < 500Mb -%if %{with_debuginfo} -BuildRequires: rpm-build, elfutils -BuildConflicts: rpm < 4.13.0.1-19 -BuildConflicts: dwarves < 1.13 -# Most of these should be enabled after more investigation -%undefine _include_minidebuginfo -%undefine _find_debuginfo_dwz_opts -%undefine _unique_build_ids -%undefine _unique_debug_names -%undefine _unique_debug_srcs -%undefine _debugsource_packages -%undefine _debuginfo_subpackages -%global _find_debuginfo_opts -r -%global _missing_build_ids_terminate_build 1 -%global _no_recompute_build_ids 1 -%endif -%if %{with_kabidwchk} || %{with_kabidw_base} -BuildRequires: kabi-dw -%endif - -%if %{signkernel}%{signmodules} -BuildRequires: openssl -%if %{signkernel} -# ELN uses Fedora signing process, so exclude -%if 0%{?rhel}%{?centos} && !0%{?eln} -BuildRequires: system-sb-certs -%endif -%ifarch x86_64 aarch64 -BuildRequires: nss-tools -BuildRequires: pesign >= 0.10-4 -%endif -%endif -%endif - -%if %{with_cross} -BuildRequires: binutils-%{_build_arch}-linux-gnu, gcc-%{_build_arch}-linux-gnu -%define cross_opts CROSS_COMPILE=%{_build_arch}-linux-gnu- -%define __strip %{_build_arch}-linux-gnu-strip -%endif - -# These below are required to build man pages -%if %{with_perf} -BuildRequires: xmlto -%endif -%if %{with_perf} || %{with_tools} -BuildRequires: asciidoc -%endif - -%if %{with toolchain_clang} -BuildRequires: clang -%endif - -%if %{with clang_lto} -BuildRequires: llvm -BuildRequires: lld -%endif - -# Because this is the kernel, it's hard to get a single upstream URL -# to represent the base without needing to do a bunch of patching. This -# tarball is generated from a src-git tree. If you want to see the -# exact git commit you can run -# -# xzcat -qq ${TARBALL} | git get-tar-commit-id -Source0: linux-%{tarfile_release}.tar.xz - -Source1: Makefile.rhelver - - -# Name of the packaged file containing signing key -%ifarch ppc64le -%define signing_key_filename kernel-signing-ppc.cer -%endif -%ifarch s390x -%define signing_key_filename kernel-signing-s390.cer -%endif - -%if %{?released_kernel} - -Source10: redhatsecurebootca5.cer -Source11: redhatsecurebootca1.cer -Source12: redhatsecureboot501.cer -Source13: redhatsecureboot301.cer -Source14: secureboot_s390.cer -Source15: secureboot_ppc.cer - -%define secureboot_ca_1 %{SOURCE10} -%define secureboot_ca_0 %{SOURCE11} -%ifarch x86_64 aarch64 -%define secureboot_key_1 %{SOURCE12} -%define pesign_name_1 redhatsecureboot501 -%define secureboot_key_0 %{SOURCE13} -%define pesign_name_0 redhatsecureboot301 -%endif -%ifarch s390x -%define secureboot_key_0 %{SOURCE14} -%define pesign_name_0 redhatsecureboot302 -%endif -%ifarch ppc64le -%define secureboot_key_0 %{SOURCE15} -%define pesign_name_0 redhatsecureboot303 -%endif - -# released_kernel -%else - -Source10: redhatsecurebootca4.cer -Source11: redhatsecurebootca2.cer -Source12: redhatsecureboot401.cer -Source13: redhatsecureboot003.cer - -%define secureboot_ca_1 %{SOURCE10} -%define secureboot_ca_0 %{SOURCE11} -%define secureboot_key_1 %{SOURCE12} -%define pesign_name_1 redhatsecureboot401 -%define secureboot_key_0 %{SOURCE13} -%define pesign_name_0 redhatsecureboot003 - -# released_kernel -%endif - -Source20: mod-denylist.sh -Source21: mod-sign.sh -Source22: parallel_xz.sh - -%define modsign_cmd %{SOURCE21} - -%if 0%{?include_rhel} -Source23: x509.genkey.rhel - -Source24: kernel-aarch64-rhel.config -Source25: kernel-aarch64-debug-rhel.config -Source26: mod-extra.list.rhel - -Source27: kernel-ppc64le-rhel.config -Source28: kernel-ppc64le-debug-rhel.config -Source29: kernel-s390x-rhel.config -Source30: kernel-s390x-debug-rhel.config -Source31: kernel-s390x-zfcpdump-rhel.config -Source32: kernel-x86_64-rhel.config -Source33: kernel-x86_64-debug-rhel.config - -Source34: filter-x86_64.sh.rhel -Source35: filter-armv7hl.sh.rhel -Source37: filter-aarch64.sh.rhel -Source38: filter-ppc64le.sh.rhel -Source39: filter-s390x.sh.rhel -Source40: filter-modules.sh.rhel - -Source41: x509.genkey.centos -%endif - -%if 0%{?include_fedora} -Source50: x509.genkey.fedora -Source51: mod-extra.list.fedora - -Source52: kernel-aarch64-fedora.config -Source53: kernel-aarch64-debug-fedora.config -Source54: kernel-armv7hl-fedora.config -Source55: kernel-armv7hl-debug-fedora.config -Source56: kernel-armv7hl-lpae-fedora.config -Source57: kernel-armv7hl-lpae-debug-fedora.config -Source60: kernel-ppc64le-fedora.config -Source61: kernel-ppc64le-debug-fedora.config -Source62: kernel-s390x-fedora.config -Source63: kernel-s390x-debug-fedora.config -Source64: kernel-x86_64-fedora.config -Source65: kernel-x86_64-debug-fedora.config - -Source67: filter-x86_64.sh.fedora -Source68: filter-armv7hl.sh.fedora -Source70: filter-aarch64.sh.fedora -Source71: filter-ppc64le.sh.fedora -Source72: filter-s390x.sh.fedora -Source73: filter-modules.sh.fedora -%endif - -Source75: partial-kgcov-snip.config -Source80: generate_all_configs.sh -Source81: process_configs.sh - -Source82: update_scripts.sh - -Source84: mod-internal.list - -Source100: rheldup3.x509 -Source101: rhelkpatch1.x509 - -Source200: check-kabi - -Source201: Module.kabi_aarch64 -Source202: Module.kabi_ppc64le -Source203: Module.kabi_s390x -Source204: Module.kabi_x86_64 - -Source210: Module.kabi_dup_aarch64 -Source211: Module.kabi_dup_ppc64le -Source212: Module.kabi_dup_s390x -Source213: Module.kabi_dup_x86_64 - -Source300: kernel-abi-stablelists-%{specversion}-%{pkgrelease}.tar.bz2 -Source301: kernel-kabi-dw-%{specversion}-%{pkgrelease}.tar.bz2 - -# Sources for kernel-tools -Source2000: cpupower.service -Source2001: cpupower.config -Source2002: kvm_stat.logrotate - -# Some people enjoy building customized kernels from the dist-git in Fedora and -# use this to override configuration options. One day they may all use the -# source tree, but in the mean time we carry this to support the legacy workflow -Source3000: merge.pl -Source3001: kernel-local -%if %{patchlist_changelog} -Source3002: Patchlist.changelog -%endif - -Source4000: README.rst -Source4001: rpminspect.yaml -Source4002: gating.yaml - -## Patches needed for building this package - -%if !%{nopatches} - -Patch1: patch-%{patchversion}-redhat.patch -%endif - -# empty final patch to facilitate testing of kernel patches -Patch999999: linux-kernel-test.patch - -# END OF PATCH DEFINITIONS - -%description -The kernel meta package - -# -# This macro does requires, provides, conflicts, obsoletes for a kernel package. -# %%kernel_reqprovconf <subpackage> -# It uses any kernel_<subpackage>_conflicts and kernel_<subpackage>_obsoletes -# macros defined above. -# -%define kernel_reqprovconf \ -Provides: kernel = %{specversion}-%{pkg_release}\ -Provides: kernel-%{_target_cpu} = %{specversion}-%{pkg_release}%{?1:+%{1}}\ -Provides: kernel-drm-nouveau = 16\ -Provides: kernel-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires(pre): %{kernel_prereq}\ -Requires(pre): %{initrd_prereq}\ -Requires(pre): ((linux-firmware >= 20150904-56.git6ebf5d57) if linux-firmware)\ -Recommends: linux-firmware\ -Requires(preun): systemd >= 200\ -Conflicts: xfsprogs < 4.3.0-1\ -Conflicts: xorg-x11-drv-vmmouse < 13.0.99\ -%{expand:%%{?kernel%{?1:_%{1}}_conflicts:Conflicts: %%{kernel%{?1:_%{1}}_conflicts}}}\ -%{expand:%%{?kernel%{?1:_%{1}}_obsoletes:Obsoletes: %%{kernel%{?1:_%{1}}_obsoletes}}}\ -%{expand:%%{?kernel%{?1:_%{1}}_provides:Provides: %%{kernel%{?1:_%{1}}_provides}}}\ -# We can't let RPM do the dependencies automatic because it'll then pick up\ -# a correct but undesirable perl dependency from the module headers which\ -# isn't required for the kernel proper to function\ -AutoReq: no\ -AutoProv: yes\ -%{nil} - - -%package doc -Summary: Various documentation bits found in the kernel source -Group: Documentation -%description doc -This package contains documentation files from the kernel -source. Various bits of information about the Linux kernel and the -device drivers shipped with it are documented in these files. - -You'll want to install this package if you need a reference to the -options that can be passed to Linux kernel modules at load time. - - -%package headers -Summary: Header files for the Linux kernel for use by glibc -Obsoletes: glibc-kernheaders < 3.0-46 -Provides: glibc-kernheaders = 3.0-46 -%description headers -Kernel-headers includes the C header files that specify the interface -between the Linux kernel and userspace libraries and programs. The -header files define structures and constants that are needed for -building most standard programs and are also needed for rebuilding the -glibc package. - -%package cross-headers -Summary: Header files for the Linux kernel for use by cross-glibc -%description cross-headers -Kernel-cross-headers includes the C header files that specify the interface -between the Linux kernel and userspace libraries and programs. The -header files define structures and constants that are needed for -building most standard programs and are also needed for rebuilding the -cross-glibc package. - - -%package debuginfo-common-%{_target_cpu} -Summary: Kernel source files used by %{name}-debuginfo packages -Provides: installonlypkg(kernel) -%description debuginfo-common-%{_target_cpu} -This package is required by %{name}-debuginfo subpackages. -It provides the kernel source files common to all builds. - -%if %{with_perf} -%package -n perf -Summary: Performance monitoring for the Linux kernel -Requires: bzip2 -License: GPLv2 -%description -n perf -This package contains the perf tool, which enables performance monitoring -of the Linux kernel. - -%package -n perf-debuginfo -Summary: Debug information for package perf -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release} -AutoReqProv: no -%description -n perf-debuginfo -This package provides debug information for the perf package. - -# Note that this pattern only works right to match the .build-id -# symlinks because of the trailing nonmatching alternation and -# the leading .*, because of find-debuginfo.sh's buggy handling -# of matching the pattern against the symlinks file. -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{_bindir}/perf(\.debug)?|.*%%{_libexecdir}/perf-core/.*|.*%%{_libdir}/libperf-jvmti.so(\.debug)?|XXX' -o perf-debuginfo.list} - -%package -n python3-perf -Summary: Python bindings for apps which will manipulate perf events -%description -n python3-perf -The python3-perf package contains a module that permits applications -written in the Python programming language to use the interface -to manipulate perf events. - -%package -n python3-perf-debuginfo -Summary: Debug information for package perf python bindings -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release} -AutoReqProv: no -%description -n python3-perf-debuginfo -This package provides debug information for the perf python bindings. - -# the python_sitearch macro should already be defined from above -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{python3_sitearch}/perf.*so(\.debug)?|XXX' -o python3-perf-debuginfo.list} - -# with_perf -%endif - -%if %{with_tools} -%package -n kernel-tools -Summary: Assortment of tools for the Linux kernel -License: GPLv2 -%ifarch %{cpupowerarchs} -Provides: cpupowerutils = 1:009-0.6.p1 -Obsoletes: cpupowerutils < 1:009-0.6.p1 -Provides: cpufreq-utils = 1:009-0.6.p1 -Provides: cpufrequtils = 1:009-0.6.p1 -Obsoletes: cpufreq-utils < 1:009-0.6.p1 -Obsoletes: cpufrequtils < 1:009-0.6.p1 -Obsoletes: cpuspeed < 1:1.5-16 -Requires: kernel-tools-libs = %{version}-%{release} -%endif -%define __requires_exclude ^%{_bindir}/python -%description -n kernel-tools -This package contains the tools/ directory from the kernel source -and the supporting documentation. - -%package -n kernel-tools-libs -Summary: Libraries for the kernels-tools -License: GPLv2 -%description -n kernel-tools-libs -This package contains the libraries built from the tools/ directory -from the kernel source. - -%package -n kernel-tools-libs-devel -Summary: Assortment of tools for the Linux kernel -License: GPLv2 -Requires: kernel-tools = %{version}-%{release} -%ifarch %{cpupowerarchs} -Provides: cpupowerutils-devel = 1:009-0.6.p1 -Obsoletes: cpupowerutils-devel < 1:009-0.6.p1 -%endif -Requires: kernel-tools-libs = %{version}-%{release} -Provides: kernel-tools-devel -%description -n kernel-tools-libs-devel -This package contains the development files for the tools/ directory from -the kernel source. - -%package -n kernel-tools-debuginfo -Summary: Debug information for package kernel-tools -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release} -AutoReqProv: no -%description -n kernel-tools-debuginfo -This package provides debug information for package kernel-tools. - -# Note that this pattern only works right to match the .build-id -# symlinks because of the trailing nonmatching alternation and -# the leading .*, because of find-debuginfo.sh's buggy handling -# of matching the pattern against the symlinks file. -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{_bindir}/centrino-decode(\.debug)?|.*%%{_bindir}/powernow-k8-decode(\.debug)?|.*%%{_bindir}/cpupower(\.debug)?|.*%%{_libdir}/libcpupower.*|.*%%{_bindir}/turbostat(\.debug)?|.*%%{_bindir}/x86_energy_perf_policy(\.debug)?|.*%%{_bindir}/tmon(\.debug)?|.*%%{_bindir}/lsgpio(\.debug)?|.*%%{_bindir}/gpio-hammer(\.debug)?|.*%%{_bindir}/gpio-event-mon(\.debug)?|.*%%{_bindir}/gpio-watch(\.debug)?|.*%%{_bindir}/iio_event_monitor(\.debug)?|.*%%{_bindir}/iio_generic_buffer(\.debug)?|.*%%{_bindir}/lsiio(\.debug)?|.*%%{_bindir}/intel-speed-select(\.debug)?|.*%%{_bindir}/page_owner_sort(\.debug)?|.*%%{_bindir}/slabinfo(\.debug)?|.*%%{_sbindir}/intel_sdsi(\.debug)?|XXX' -o kernel-tools-debuginfo.list} - -# with_tools -%endif - -%if %{with_bpftool} - -%package -n bpftool -Summary: Inspection and simple manipulation of eBPF programs and maps -License: GPLv2 -%description -n bpftool -This package contains the bpftool, which allows inspection and simple -manipulation of eBPF programs and maps. - -%package -n bpftool-debuginfo -Summary: Debug information for package bpftool -Group: Development/Debug -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release} -AutoReqProv: no -%description -n bpftool-debuginfo -This package provides debug information for the bpftool package. - -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{_sbindir}/bpftool(\.debug)?|XXX' -o bpftool-debuginfo.list} - -# with_bpftool -%endif - -%if %{with_selftests} - -%package selftests-internal -Summary: Kernel samples and selftests -License: GPLv2 -Requires: binutils, bpftool, iproute-tc, nmap-ncat, python3 -%description selftests-internal -Kernel sample programs and selftests. - -# Note that this pattern only works right to match the .build-id -# symlinks because of the trailing nonmatching alternation and -# the leading .*, because of find-debuginfo.sh's buggy handling -# of matching the pattern against the symlinks file. -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{_libexecdir}/(ksamples|kselftests)/.*|XXX' -o selftests-debuginfo.list} - -# with_selftests -%endif - -%if %{with_gcov} -%package gcov -Summary: gcov graph and source files for coverage data collection. -%description gcov -kernel-gcov includes the gcov graph and source files for gcov coverage collection. -%endif - -%package -n kernel-abi-stablelists -Summary: The Red Hat Enterprise Linux kernel ABI symbol stablelists -AutoReqProv: no -%description -n kernel-abi-stablelists -The kABI package contains information pertaining to the Red Hat Enterprise -Linux kernel ABI, including lists of kernel symbols that are needed by -external Linux kernel modules, and a yum plugin to aid enforcement. - -%if %{with_kabidw_base} -%package kernel-kabidw-base-internal -Summary: The baseline dataset for kABI verification using DWARF data -Group: System Environment/Kernel -AutoReqProv: no -%description kernel-kabidw-base-internal -The package contains data describing the current ABI of the Red Hat Enterprise -Linux kernel, suitable for the kabi-dw tool. -%endif - -# -# This macro creates a kernel-<subpackage>-debuginfo package. -# %%kernel_debuginfo_package <subpackage> -# -# Explanation of the find_debuginfo_opts: We build multiple kernels (debug -# pae etc.) so the regex filters those kernels appropriately. We also -# have to package several binaries as part of kernel-devel but getting -# unique build-ids is tricky for these userspace binaries. We don't really -# care about debugging those so we just filter those out and remove it. -%define kernel_debuginfo_package() \ -%package %{?1:%{1}-}debuginfo\ -Summary: Debug information for package %{name}%{?1:-%{1}}\ -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release}\ -Provides: %{name}%{?1:-%{1}}-debuginfo-%{_target_cpu} = %{version}-%{release}\ -Provides: installonlypkg(kernel)\ -AutoReqProv: no\ -%description %{?1:%{1}-}debuginfo\ -This package provides debug information for package %{name}%{?1:-%{1}}.\ -This is required to use SystemTap with %{name}%{?1:-%{1}}-%{KVERREL}.\ -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} --keep-section '.BTF' -p '.*\/usr\/src\/kernels/.*|XXX' -o ignored-debuginfo.list -p '/.*/%%{KVERREL_RE}%{?1:[+]%{1}}/.*|/.*%%{KVERREL_RE}%{?1:\+%{1}}(\.debug)?' -o debuginfo%{?1}.list}\ -%{nil} - -# -# This macro creates a kernel-<subpackage>-devel package. -# %%kernel_devel_package [-m] <subpackage> <pretty-name> -# -%define kernel_devel_package(m) \ -%package %{?1:%{1}-}devel\ -Summary: Development package for building kernel modules to match the %{?2:%{2} }kernel\ -Provides: kernel%{?1:-%{1}}-devel-%{_target_cpu} = %{version}-%{release}\ -Provides: kernel-devel-%{_target_cpu} = %{version}-%{release}%{?1:+%{1}}\ -Provides: kernel-devel-uname-r = %{KVERREL}%{?1:+%{1}}\ -Provides: installonlypkg(kernel)\ -AutoReqProv: no\ -Requires(pre): findutils\ -Requires: findutils\ -Requires: perl-interpreter\ -Requires: openssl-devel\ -Requires: elfutils-libelf-devel\ -Requires: bison\ -Requires: flex\ -Requires: make\ -Requires: gcc\ -%if %{-m:1}%{!-m:0}\ -Requires: kernel-devel-uname-r = %{KVERREL}\ -%endif\ -%description %{?1:%{1}-}devel\ -This package provides kernel headers and makefiles sufficient to build modules\ -against the %{?2:%{2} }kernel package.\ -%{nil} - -# -# This macro creates an empty kernel-<subpackage>-devel-matched package that -# requires both the core and devel packages locked on the same version. -# %%kernel_devel_matched_package [-m] <subpackage> <pretty-name> -# -%define kernel_devel_matched_package(m) \ -%package %{?1:%{1}-}devel-matched\ -Summary: Meta package to install matching core and devel packages for a given %{?2:%{2} }kernel\ -Requires: kernel%{?1:-%{1}}-devel = %{version}-%{release}\ -Requires: kernel%{?1:-%{1}}-core = %{version}-%{release}\ -%description %{?1:%{1}-}devel-matched\ -This meta package is used to install matching core and devel packages for a given %{?2:%{2} }kernel.\ -%{nil} - -# -# kernel-<variant>-ipaclones-internal package -# -%define kernel_ipaclones_package() \ -%package %{?1:%{1}-}ipaclones-internal\ -Summary: *.ipa-clones files generated by -fdump-ipa-clones for kernel%{?1:-%{1}}\ -Group: System Environment/Kernel\ -AutoReqProv: no\ -%description %{?1:%{1}-}ipaclones-internal\ -This package provides *.ipa-clones files.\ -%{nil} - -# -# This macro creates a kernel-<subpackage>-modules-internal package. -# %%kernel_modules_internal_package <subpackage> <pretty-name> -# -%define kernel_modules_internal_package() \ -%package %{?1:%{1}-}modules-internal\ -Summary: Extra kernel modules to match the %{?2:%{2} }kernel\ -Group: System Environment/Kernel\ -Provides: kernel%{?1:-%{1}}-modules-internal-%{_target_cpu} = %{version}-%{release}\ -Provides: kernel%{?1:-%{1}}-modules-internal-%{_target_cpu} = %{version}-%{release}%{?1:+%{1}}\ -Provides: kernel%{?1:-%{1}}-modules-internal = %{version}-%{release}%{?1:+%{1}}\ -Provides: installonlypkg(kernel-module)\ -Provides: kernel%{?1:-%{1}}-modules-internal-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel%{?1:-%{1}}-modules-uname-r = %{KVERREL}%{?1:+%{1}}\ -AutoReq: no\ -AutoProv: yes\ -%description %{?1:%{1}-}modules-internal\ -This package provides kernel modules for the %{?2:%{2} }kernel package for Red Hat internal usage.\ -%{nil} - -# -# This macro creates a kernel-<subpackage>-modules-extra package. -# %%kernel_modules_extra_package [-m] <subpackage> <pretty-name> -# -%define kernel_modules_extra_package(m) \ -%package %{?1:%{1}-}modules-extra\ -Summary: Extra kernel modules to match the %{?2:%{2} }kernel\ -Provides: kernel%{?1:-%{1}}-modules-extra-%{_target_cpu} = %{version}-%{release}\ -Provides: kernel%{?1:-%{1}}-modules-extra-%{_target_cpu} = %{version}-%{release}%{?1:+%{1}}\ -Provides: kernel%{?1:-%{1}}-modules-extra = %{version}-%{release}%{?1:+%{1}}\ -Provides: installonlypkg(kernel-module)\ -Provides: kernel%{?1:-%{1}}-modules-extra-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel%{?1:-%{1}}-modules-uname-r = %{KVERREL}%{?1:+%{1}}\ -%if %{-m:1}%{!-m:0}\ -Requires: kernel-modules-extra-uname-r = %{KVERREL}\ -%endif\ -AutoReq: no\ -AutoProv: yes\ -%description %{?1:%{1}-}modules-extra\ -This package provides less commonly used kernel modules for the %{?2:%{2} }kernel package.\ -%{nil} - -# -# This macro creates a kernel-<subpackage>-modules package. -# %%kernel_modules_package [-m] <subpackage> <pretty-name> -# -%define kernel_modules_package(m) \ -%package %{?1:%{1}-}modules\ -Summary: kernel modules to match the %{?2:%{2}-}core kernel\ -Provides: kernel%{?1:-%{1}}-modules-%{_target_cpu} = %{version}-%{release}\ -Provides: kernel-modules-%{_target_cpu} = %{version}-%{release}%{?1:+%{1}}\ -Provides: kernel-modules = %{version}-%{release}%{?1:+%{1}}\ -Provides: installonlypkg(kernel-module)\ -Provides: kernel%{?1:-%{1}}-modules-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel-uname-r = %{KVERREL}%{?1:+%{1}}\ -%if %{-m:1}%{!-m:0}\ -Requires: kernel-modules-uname-r = %{KVERREL}\ -%endif\ -AutoReq: no\ -AutoProv: yes\ -%description %{?1:%{1}-}modules\ -This package provides commonly used kernel modules for the %{?2:%{2}-}core kernel package.\ -%{nil} - -# -# this macro creates a kernel-<subpackage> meta package. -# %%kernel_meta_package <subpackage> -# -%define kernel_meta_package() \ -%package %{1}\ -summary: kernel meta-package for the %{1} kernel\ -Requires: kernel-%{1}-core-uname-r = %{KVERREL}+%{1}\ -Requires: kernel-%{1}-modules-uname-r = %{KVERREL}+%{1}\ -Provides: installonlypkg(kernel)\ -%description %{1}\ -The meta-package for the %{1} kernel\ -%{nil} - -# -# This macro creates a kernel-<subpackage> and its -devel and -debuginfo too. -# %%define variant_summary The Linux kernel compiled for <configuration> -# %%kernel_variant_package [-n <pretty-name>] [-m] <subpackage> -# -%define kernel_variant_package(n:m) \ -%package %{?1:%{1}-}core\ -Summary: %{variant_summary}\ -Provides: kernel-%{?1:%{1}-}core-uname-r = %{KVERREL}%{?1:+%{1}}\ -Provides: installonlypkg(kernel)\ -%if %{-m:1}%{!-m:0}\ -Requires: kernel-core-uname-r = %{KVERREL}\ -%endif\ -%{expand:%%kernel_reqprovconf}\ -%if %{?1:1} %{!?1:0} \ -%{expand:%%kernel_meta_package %{?1:%{1}}}\ -%endif\ -%{expand:%%kernel_devel_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}} %{-m:%{-m}}}\ -%{expand:%%kernel_devel_matched_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}} %{-m:%{-m}}}\ -%{expand:%%kernel_modules_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}} %{-m:%{-m}}}\ -%{expand:%%kernel_modules_extra_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}} %{-m:%{-m}}}\ -%if %{-m:0}%{!-m:1}\ -%{expand:%%kernel_modules_internal_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}}}\ -%{expand:%%kernel_debuginfo_package %{?1:%{1}}}\ -%endif\ -%{nil} - -# Now, each variant package. - -%if %{with_pae} -%define variant_summary The Linux kernel compiled for Cortex-A15 -%kernel_variant_package lpae -%description lpae-core -This package includes a version of the Linux kernel with support for -Cortex-A15 devices with LPAE and HW virtualisation support -%endif - -%if %{with_zfcpdump} -%define variant_summary The Linux kernel compiled for zfcpdump usage -%kernel_variant_package zfcpdump -%description zfcpdump-core -The kernel package contains the Linux kernel (vmlinuz) for use by the -zfcpdump infrastructure. -# with_zfcpdump -%endif - -%define variant_summary The Linux kernel compiled with extra debugging enabled -%if !%{debugbuildsenabled} -%kernel_variant_package -m debug -%else -%kernel_variant_package debug -%endif -%description debug-core -The kernel package contains the Linux kernel (vmlinuz), the core of any -Linux operating system. The kernel handles the basic functions -of the operating system: memory allocation, process allocation, device -input and output, etc. - -This variant of the kernel has numerous debugging options enabled. -It should only be installed when trying to gather additional information -on kernel bugs, as some of these options impact performance noticably. - -# And finally the main -core package - -%define variant_summary The Linux kernel -%kernel_variant_package -%description core -The kernel package contains the Linux kernel (vmlinuz), the core of any -Linux operating system. The kernel handles the basic functions -of the operating system: memory allocation, process allocation, device -input and output, etc. - -%if %{with_ipaclones} -%kernel_ipaclones_package -%endif - -%prep -# do a few sanity-checks for --with *only builds -%if %{with_baseonly} -%if !%{with_up} -echo "Cannot build --with baseonly, up build is disabled" -exit 1 -%endif -%endif - -# more sanity checking; do it quietly -if [ "%{patches}" != "%%{patches}" ] ; then - for patch in %{patches} ; do - if [ ! -f $patch ] ; then - echo "ERROR: Patch ${patch##/*/} listed in specfile but is missing" - exit 1 - fi - done -fi 2>/dev/null - -patch_command='patch -p1 -F1 -s' -ApplyPatch() -{ - local patch=$1 - shift - if [ ! -f $RPM_SOURCE_DIR/$patch ]; then - exit 1 - fi - if ! grep -E "^Patch[0-9]+: $patch\$" %{_specdir}/${RPM_PACKAGE_NAME}.spec ; then - if [ "${patch:0:8}" != "patch-%{kversion}." ] ; then - echo "ERROR: Patch $patch not listed as a source patch in specfile" - exit 1 - fi - fi 2>/dev/null - case "$patch" in - *.bz2) bunzip2 < "$RPM_SOURCE_DIR/$patch" | $patch_command ${1+"$@"} ;; - *.gz) gunzip < "$RPM_SOURCE_DIR/$patch" | $patch_command ${1+"$@"} ;; - *.xz) unxz < "$RPM_SOURCE_DIR/$patch" | $patch_command ${1+"$@"} ;; - *) $patch_command ${1+"$@"} < "$RPM_SOURCE_DIR/$patch" ;; - esac -} - -# don't apply patch if it's empty -ApplyOptionalPatch() -{ - local patch=$1 - shift - if [ ! -f $RPM_SOURCE_DIR/$patch ]; then - exit 1 - fi - local C=$(wc -l $RPM_SOURCE_DIR/$patch | awk '{print $1}') - if [ "$C" -gt 9 ]; then - ApplyPatch $patch ${1+"$@"} - fi -} - -%setup -q -n kernel-%{tarfile_release} -c -mv linux-%{tarfile_release} linux-%{KVERREL} - -cd linux-%{KVERREL} -cp -a %{SOURCE1} . - -%if !%{nopatches} - -ApplyOptionalPatch patch-%{patchversion}-redhat.patch -%endif - -ApplyOptionalPatch linux-kernel-test.patch - -# END OF PATCH APPLICATIONS - -# Any further pre-build tree manipulations happen here. - -chmod +x scripts/checkpatch.pl -mv COPYING COPYING-%{version}-%{release} - -# This Prevents scripts/setlocalversion from mucking with our version numbers. -touch .scmversion - -# Mangle /usr/bin/python shebangs to /usr/bin/python3 -# Mangle all Python shebangs to be Python 3 explicitly -# -p preserves timestamps -# -n prevents creating ~backup files -# -i specifies the interpreter for the shebang -# This fixes errors such as -# *** ERROR: ambiguous python shebang in /usr/bin/kvm_stat: #!/usr/bin/python. Change it to python3 (or python2) explicitly. -# We patch all sources below for which we got a report/error. -pathfix.py -i "%{__python3} %{py3_shbang_opts}" -p -n \ - tools/kvm/kvm_stat/kvm_stat \ - scripts/show_delta \ - scripts/diffconfig \ - scripts/bloat-o-meter \ - scripts/jobserver-exec \ - tools \ - Documentation \ - scripts/clang-tools - -# only deal with configs if we are going to build for the arch -%ifnarch %nobuildarches - -if [ -L configs ]; then - rm -f configs -fi -mkdir configs -cd configs - -# Drop some necessary files from the source dir into the buildroot -cp $RPM_SOURCE_DIR/kernel-*.config . -cp %{SOURCE80} . -# merge.pl -cp %{SOURCE3000} . -# kernel-local -cp %{SOURCE3001} . -FLAVOR=%{primary_target} SPECVERSION=%{version} ./generate_all_configs.sh %{debugbuildsenabled} - -# Merge in any user-provided local config option changes -%ifnarch %nobuildarches -for i in %{all_arch_configs} -do - mv $i $i.tmp - ./merge.pl %{SOURCE3001} $i.tmp > $i -%if %{with_gcov} - echo "Merging with gcov options" - cat %{SOURCE75} - mv $i $i.tmp - ./merge.pl %{SOURCE75} $i.tmp > $i -%endif - rm $i.tmp -done -%endif - -%if %{with clang_lto} -for i in *aarch64*.config *x86_64*.config; do - sed -i 's/# CONFIG_LTO_CLANG_THIN is not set/CONFIG_LTO_CLANG_THIN=y/' $i - sed -i 's/CONFIG_LTO_NONE=y/# CONFIG_LTO_NONE is not set/' $i -done -%endif - -# Add DUP and kpatch certificates to system trusted keys for RHEL -%if 0%{?rhel} -%if %{signkernel}%{signmodules} -openssl x509 -inform der -in %{SOURCE100} -out rheldup3.pem -openssl x509 -inform der -in %{SOURCE101} -out rhelkpatch1.pem -cat rheldup3.pem rhelkpatch1.pem > ../certs/rhel.pem -%ifarch s390x ppc64le -openssl x509 -inform der -in %{secureboot_ca_0} -out secureboot.pem -cat secureboot.pem >> ../certs/rhel.pem -%endif -for i in *.config; do - sed -i 's@CONFIG_SYSTEM_TRUSTED_KEYS=""@CONFIG_SYSTEM_TRUSTED_KEYS="certs/rhel.pem"@' $i -done -%endif -%endif - -cp %{SOURCE81} . -OPTS="" -%if %{with_configchecks} - OPTS="$OPTS -w -n -c" -%endif -%if %{with clang_lto} -for opt in %{clang_make_opts}; do - OPTS="$OPTS -m $opt" -done -%endif -RHJOBS=$RPM_BUILD_NCPUS PACKAGE_NAME=kernel ./process_configs.sh $OPTS ${specversion} - -cp %{SOURCE82} . -RPM_SOURCE_DIR=$RPM_SOURCE_DIR ./update_scripts.sh %{primary_target} - -# We may want to override files from the primary target in case of building -# against a flavour of it (eg. centos not rhel), thus override it here if -# necessary -if [ "%{primary_target}" == "rhel" ]; then -%if 0%{?centos} - echo "Updating scripts/sources to centos version" - RPM_SOURCE_DIR=$RPM_SOURCE_DIR ./update_scripts.sh centos -%else - echo "Not updating scripts/sources to centos version" -%endif -fi - -# end of kernel config -%endif - -cd .. -# # End of Configs stuff - -# get rid of unwanted files resulting from patch fuzz -find . \( -name "*.orig" -o -name "*~" \) -delete >/dev/null - -# remove unnecessary SCM files -find . -name .gitignore -delete >/dev/null - -cd .. - -### -### build -### -%build - -%if %{with_sparse} -%define sparse_mflags C=1 -%endif - -cp_vmlinux() -{ - eu-strip --remove-comment -o "$2" "$1" -} - -# Note we need to disable these flags for cross builds because the flags -# from redhat-rpm-config assume that host == target so target arch -# flags cause issues with the host compiler. -%if !%{with_cross} -%define build_hostcflags %{?build_cflags} -%define build_hostldflags %{?build_ldflags} -%endif - -%define make %{__make} %{?cross_opts} %{?make_opts} HOSTCFLAGS="%{?build_hostcflags}" HOSTLDFLAGS="%{?build_hostldflags}" - -InitBuildVars() { - # Initialize the kernel .config file and create some variables that are - # needed for the actual build process. - - Variant=$1 - - # Pick the right kernel config file - Config=kernel-%{version}-%{_target_cpu}${Variant:+-${Variant}}.config - DevelDir=/usr/src/kernels/%{KVERREL}${Variant:++${Variant}} - - KernelVer=%{version}-%{release}.%{_target_cpu}${Variant:++${Variant}} - - # make sure EXTRAVERSION says what we want it to say - # Trim the release if this is a CI build, since KERNELVERSION is limited to 64 characters - ShortRel=$(perl -e "print \"%{release}\" =~ s/\.pr\.[0-9A-Fa-f]{32}//r") - perl -p -i -e "s/^EXTRAVERSION.*/EXTRAVERSION = -${ShortRel}.%{_target_cpu}${Variant:++${Variant}}/" Makefile - - # if pre-rc1 devel kernel, must fix up PATCHLEVEL for our versioning scheme - # if we are post rc1 this should match anyway so this won't matter - perl -p -i -e 's/^PATCHLEVEL.*/PATCHLEVEL = %{patchlevel}/' Makefile - - %{make} %{?_smp_mflags} mrproper - cp configs/$Config .config - - %if %{signkernel}%{signmodules} - cp configs/x509.genkey certs/. - %endif - - Arch=`head -1 .config | cut -b 3-` - echo USING ARCH=$Arch - - KCFLAGS="%{?kcflags}" - - # add kpatch flags for base kernel - if [ "$Variant" == "" ]; then - KCFLAGS="$KCFLAGS %{?kpatch_kcflags}" - fi -} - -BuildKernel() { - MakeTarget=$1 - KernelImage=$2 - DoVDSO=$3 - Variant=$4 - InstallName=${5:-vmlinuz} - - DoModules=1 - if [ "$Variant" = "zfcpdump" ]; then - DoModules=0 - fi - - # When the bootable image is just the ELF kernel, strip it. - # We already copy the unstripped file into the debuginfo package. - if [ "$KernelImage" = vmlinux ]; then - CopyKernel=cp_vmlinux - else - CopyKernel=cp - fi - - InitBuildVars $Variant - - echo BUILDING A KERNEL FOR ${Variant} %{_target_cpu}... - - %{make} ARCH=$Arch olddefconfig >/dev/null - - # This ensures build-ids are unique to allow parallel debuginfo - perl -p -i -e "s/^CONFIG_BUILD_SALT.*/CONFIG_BUILD_SALT=\"%{KVERREL}\"/" .config - %{make} ARCH=$Arch KCFLAGS="$KCFLAGS" WITH_GCOV="%{?with_gcov}" %{?_smp_mflags} $MakeTarget %{?sparse_mflags} %{?kernel_mflags} - if [ $DoModules -eq 1 ]; then - %{make} ARCH=$Arch KCFLAGS="$KCFLAGS" WITH_GCOV="%{?with_gcov}" %{?_smp_mflags} modules %{?sparse_mflags} || exit 1 - fi - - mkdir -p $RPM_BUILD_ROOT/%{image_install_path} - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/systemtap -%if %{with_debuginfo} - mkdir -p $RPM_BUILD_ROOT%{debuginfodir}/%{image_install_path} -%endif - -%ifarch %{arm} aarch64 - %{make} ARCH=$Arch dtbs INSTALL_DTBS_PATH=$RPM_BUILD_ROOT/%{image_install_path}/dtb-$KernelVer - %{make} ARCH=$Arch dtbs_install INSTALL_DTBS_PATH=$RPM_BUILD_ROOT/%{image_install_path}/dtb-$KernelVer - cp -r $RPM_BUILD_ROOT/%{image_install_path}/dtb-$KernelVer $RPM_BUILD_ROOT/lib/modules/$KernelVer/dtb - find arch/$Arch/boot/dts -name '*.dtb' -type f -delete -%endif - - # Start installing the results - install -m 644 .config $RPM_BUILD_ROOT/boot/config-$KernelVer - install -m 644 .config $RPM_BUILD_ROOT/lib/modules/$KernelVer/config - install -m 644 System.map $RPM_BUILD_ROOT/boot/System.map-$KernelVer - install -m 644 System.map $RPM_BUILD_ROOT/lib/modules/$KernelVer/System.map - - # We estimate the size of the initramfs because rpm needs to take this size - # into consideration when performing disk space calculations. (See bz #530778) - dd if=/dev/zero of=$RPM_BUILD_ROOT/boot/initramfs-$KernelVer.img bs=1M count=20 - - if [ -f arch/$Arch/boot/zImage.stub ]; then - cp arch/$Arch/boot/zImage.stub $RPM_BUILD_ROOT/%{image_install_path}/zImage.stub-$KernelVer || : - cp arch/$Arch/boot/zImage.stub $RPM_BUILD_ROOT/lib/modules/$KernelVer/zImage.stub-$KernelVer || : - fi - - %if %{signkernel} - if [ "$KernelImage" = vmlinux ]; then - # We can't strip and sign $KernelImage in place, because - # we need to preserve original vmlinux for debuginfo. - # Use a copy for signing. - $CopyKernel $KernelImage $KernelImage.tosign - KernelImage=$KernelImage.tosign - CopyKernel=cp - fi - - # Sign the image if we're using EFI - # aarch64 kernels are gziped EFI images - KernelExtension=${KernelImage##*.} - if [ "$KernelExtension" == "gz" ]; then - SignImage=${KernelImage%.*} - else - SignImage=$KernelImage - fi - - %ifarch x86_64 aarch64 - %pesign -s -i $SignImage -o vmlinuz.tmp -a %{secureboot_ca_0} -c %{secureboot_key_0} -n %{pesign_name_0} - %pesign -s -i vmlinuz.tmp -o vmlinuz.signed -a %{secureboot_ca_1} -c %{secureboot_key_1} -n %{pesign_name_1} - rm vmlinuz.tmp - %endif - %ifarch s390x ppc64le - if [ -x /usr/bin/rpm-sign ]; then - rpm-sign --key "%{pesign_name_0}" --lkmsign $SignImage --output vmlinuz.signed - elif [ $DoModules -eq 1 ]; then - chmod +x scripts/sign-file - ./scripts/sign-file -p sha256 certs/signing_key.pem certs/signing_key.x509 $SignImage vmlinuz.signed - else - mv $SignImage vmlinuz.signed - fi - %endif - - if [ ! -s vmlinuz.signed ]; then - echo "pesigning failed" - exit 1 - fi - mv vmlinuz.signed $SignImage - if [ "$KernelExtension" == "gz" ]; then - gzip -f9 $SignImage - fi - # signkernel - %endif - - $CopyKernel $KernelImage \ - $RPM_BUILD_ROOT/%{image_install_path}/$InstallName-$KernelVer - chmod 755 $RPM_BUILD_ROOT/%{image_install_path}/$InstallName-$KernelVer - cp $RPM_BUILD_ROOT/%{image_install_path}/$InstallName-$KernelVer $RPM_BUILD_ROOT/lib/modules/$KernelVer/$InstallName - - # hmac sign the kernel for FIPS - echo "Creating hmac file: $RPM_BUILD_ROOT/%{image_install_path}/.vmlinuz-$KernelVer.hmac" - ls -l $RPM_BUILD_ROOT/%{image_install_path}/$InstallName-$KernelVer - (cd $RPM_BUILD_ROOT/%{image_install_path} && sha512hmac $InstallName-$KernelVer) > $RPM_BUILD_ROOT/%{image_install_path}/.vmlinuz-$KernelVer.hmac; - cp $RPM_BUILD_ROOT/%{image_install_path}/.vmlinuz-$KernelVer.hmac $RPM_BUILD_ROOT/lib/modules/$KernelVer/.vmlinuz.hmac - - if [ $DoModules -eq 1 ]; then - # Override $(mod-fw) because we don't want it to install any firmware - # we'll get it from the linux-firmware package and we don't want conflicts - %{make} %{?_smp_mflags} ARCH=$Arch INSTALL_MOD_PATH=$RPM_BUILD_ROOT %{?_smp_mflags} modules_install KERNELRELEASE=$KernelVer mod-fw= - fi - -%if %{with_gcov} - # install gcov-needed files to $BUILDROOT/$BUILD/...: - # gcov_info->filename is absolute path - # gcno references to sources can use absolute paths (e.g. in out-of-tree builds) - # sysfs symlink targets (set up at compile time) use absolute paths to BUILD dir - find . \( -name '*.gcno' -o -name '*.[chS]' \) -exec install -D '{}' "$RPM_BUILD_ROOT/$(pwd)/{}" \; -%endif - - # add an a noop %%defattr statement 'cause rpm doesn't like empty file list files - echo '%%defattr(-,-,-)' > ../kernel${Variant:+-${Variant}}-ldsoconf.list - if [ $DoVDSO -ne 0 ]; then - %{make} ARCH=$Arch INSTALL_MOD_PATH=$RPM_BUILD_ROOT vdso_install KERNELRELEASE=$KernelVer - if [ -s ldconfig-kernel.conf ]; then - install -D -m 444 ldconfig-kernel.conf \ - $RPM_BUILD_ROOT/etc/ld.so.conf.d/kernel-$KernelVer.conf - echo /etc/ld.so.conf.d/kernel-$KernelVer.conf >> ../kernel${Variant:+-${Variant}}-ldsoconf.list - fi - - rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/vdso/.build-id - fi - - # And save the headers/makefiles etc for building modules against - # - # This all looks scary, but the end result is supposed to be: - # * all arch relevant include/ files - # * all Makefile/Kconfig files - # * all script/ files - - rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/source - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - (cd $RPM_BUILD_ROOT/lib/modules/$KernelVer ; ln -s build source) - # dirs for additional modules per module-init-tools, kbuild/modules.txt - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/updates - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/weak-updates - # CONFIG_KERNEL_HEADER_TEST generates some extra files in the process of - # testing so just delete - find . -name *.h.s -delete - # first copy everything - cp --parents `find -type f -name "Makefile*" -o -name "Kconfig*"` $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - if [ ! -e Module.symvers ]; then - touch Module.symvers - fi - cp Module.symvers $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp System.map $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - if [ -s Module.markers ]; then - cp Module.markers $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - fi - - # create the kABI metadata for use in packaging - # NOTENOTE: the name symvers is used by the rpm backend - # NOTENOTE: to discover and run the /usr/lib/rpm/fileattrs/kabi.attr - # NOTENOTE: script which dynamically adds exported kernel symbol - # NOTENOTE: checksums to the rpm metadata provides list. - # NOTENOTE: if you change the symvers name, update the backend too - echo "**** GENERATING kernel ABI metadata ****" - gzip -c9 < Module.symvers > $RPM_BUILD_ROOT/boot/symvers-$KernelVer.gz - cp $RPM_BUILD_ROOT/boot/symvers-$KernelVer.gz $RPM_BUILD_ROOT/lib/modules/$KernelVer/symvers.gz - -%if %{with_kabichk} - echo "**** kABI checking is enabled in kernel SPEC file. ****" - chmod 0755 $RPM_SOURCE_DIR/check-kabi - if [ -e $RPM_SOURCE_DIR/Module.kabi_%{_target_cpu}$Variant ]; then - cp $RPM_SOURCE_DIR/Module.kabi_%{_target_cpu}$Variant $RPM_BUILD_ROOT/Module.kabi - $RPM_SOURCE_DIR/check-kabi -k $RPM_BUILD_ROOT/Module.kabi -s Module.symvers || exit 1 - # for now, don't keep it around. - rm $RPM_BUILD_ROOT/Module.kabi - else - echo "**** NOTE: Cannot find reference Module.kabi file. ****" - fi -%endif - -%if %{with_kabidupchk} - echo "**** kABI DUP checking is enabled in kernel SPEC file. ****" - if [ -e $RPM_SOURCE_DIR/Module.kabi_dup_%{_target_cpu}$Variant ]; then - cp $RPM_SOURCE_DIR/Module.kabi_dup_%{_target_cpu}$Variant $RPM_BUILD_ROOT/Module.kabi - $RPM_SOURCE_DIR/check-kabi -k $RPM_BUILD_ROOT/Module.kabi -s Module.symvers || exit 1 - # for now, don't keep it around. - rm $RPM_BUILD_ROOT/Module.kabi - else - echo "**** NOTE: Cannot find DUP reference Module.kabi file. ****" - fi -%endif - -%if %{with_kabidw_base} - # Don't build kabi base for debug kernels - if [ "$Variant" != "zfcpdump" -a "$Variant" != "debug" ]; then - mkdir -p $RPM_BUILD_ROOT/kabi-dwarf - tar xjvf %{SOURCE301} -C $RPM_BUILD_ROOT/kabi-dwarf - - mkdir -p $RPM_BUILD_ROOT/kabi-dwarf/stablelists - tar xjvf %{SOURCE300} -C $RPM_BUILD_ROOT/kabi-dwarf/stablelists - - echo "**** GENERATING DWARF-based kABI baseline dataset ****" - chmod 0755 $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh - $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh generate \ - "$RPM_BUILD_ROOT/kabi-dwarf/stablelists/kabi-current/kabi_stablelist_%{_target_cpu}" \ - "$(pwd)" \ - "$RPM_BUILD_ROOT/kabidw-base/%{_target_cpu}${Variant:+.${Variant}}" || : - - rm -rf $RPM_BUILD_ROOT/kabi-dwarf - fi -%endif - -%if %{with_kabidwchk} - if [ "$Variant" != "zfcpdump" ]; then - mkdir -p $RPM_BUILD_ROOT/kabi-dwarf - tar xjvf %{SOURCE301} -C $RPM_BUILD_ROOT/kabi-dwarf - if [ -d "$RPM_BUILD_ROOT/kabi-dwarf/base/%{_target_cpu}${Variant:+.${Variant}}" ]; then - mkdir -p $RPM_BUILD_ROOT/kabi-dwarf/stablelists - tar xjvf %{SOURCE300} -C $RPM_BUILD_ROOT/kabi-dwarf/stablelists - - echo "**** GENERATING DWARF-based kABI dataset ****" - chmod 0755 $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh - $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh generate \ - "$RPM_BUILD_ROOT/kabi-dwarf/stablelists/kabi-current/kabi_stablelist_%{_target_cpu}" \ - "$(pwd)" \ - "$RPM_BUILD_ROOT/kabi-dwarf/base/%{_target_cpu}${Variant:+.${Variant}}.tmp" || : - - echo "**** kABI DWARF-based comparison report ****" - $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh compare \ - "$RPM_BUILD_ROOT/kabi-dwarf/base/%{_target_cpu}${Variant:+.${Variant}}" \ - "$RPM_BUILD_ROOT/kabi-dwarf/base/%{_target_cpu}${Variant:+.${Variant}}.tmp" || : - echo "**** End of kABI DWARF-based comparison report ****" - else - echo "**** Baseline dataset for kABI DWARF-BASED comparison report not found ****" - fi - - rm -rf $RPM_BUILD_ROOT/kabi-dwarf - fi -%endif - - # then drop all but the needed Makefiles/Kconfig files - rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts - rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include - cp .config $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a scripts $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts/tracing - rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts/spdxcheck.py - -%ifarch s390x - # CONFIG_EXPOLINE_EXTERN=y produces arch/s390/lib/expoline.o - # which is needed during external module build. - if [ -f arch/s390/lib/expoline.o ]; then - cp -a --parents arch/s390/lib/expoline.o $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - fi -%endif - - # Files for 'make scripts' to succeed with kernel-devel. - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/security/selinux/include - cp -a --parents security/selinux/include/classmap.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents security/selinux/include/initial_sid_to_string.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/tools/include/tools - cp -a --parents tools/include/tools/be_byteshift.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/tools/le_byteshift.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - - # Files for 'make prepare' to succeed with kernel-devel. - cp -a --parents tools/include/linux/compiler* $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/linux/types.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/build/Build.include $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/build/Build $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/build/fixdep.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/objtool/sync-check.sh $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/bpf/resolve_btfids $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - - cp --parents security/selinux/include/policycap_names.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents security/selinux/include/policycap.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - - cp -a --parents tools/include/asm-generic $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/linux $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/uapi/asm $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/uapi/asm-generic $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/uapi/linux $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/vdso $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/scripts/utilities.mak $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/lib/subcmd $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/lib/*.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/objtool/*.[ch] $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/objtool/Build $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/objtool/include/objtool/*.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/lib/bpf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/lib/bpf/Build $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - - if [ -f tools/objtool/objtool ]; then - cp -a tools/objtool/objtool $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/tools/objtool/ || : - fi - if [ -f tools/objtool/fixdep ]; then - cp -a tools/objtool/fixdep $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/tools/objtool/ || : - fi - if [ -d arch/$Arch/scripts ]; then - cp -a arch/$Arch/scripts $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/arch/%{_arch} || : - fi - if [ -f arch/$Arch/*lds ]; then - cp -a arch/$Arch/*lds $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/arch/%{_arch}/ || : - fi - if [ -f arch/%{asmarch}/kernel/module.lds ]; then - cp -a --parents arch/%{asmarch}/kernel/module.lds $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - fi - find $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts \( -iname "*.o" -o -iname "*.cmd" \) -exec rm -f {} + -%ifarch ppc64le - cp -a --parents arch/powerpc/lib/crtsavres.[So] $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ -%endif - if [ -d arch/%{asmarch}/include ]; then - cp -a --parents arch/%{asmarch}/include $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - fi -%ifarch aarch64 - # arch/arm64/include/asm/xen references arch/arm - cp -a --parents arch/arm/include/asm/xen $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - # arch/arm64/include/asm/opcodes.h references arch/arm - cp -a --parents arch/arm/include/asm/opcodes.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ -%endif - # include the machine specific headers for ARM variants, if available. -%ifarch %{arm} - if [ -d arch/%{asmarch}/mach-${Variant}/include ]; then - cp -a --parents arch/%{asmarch}/mach-${Variant}/include $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - fi - # include a few files for 'make prepare' - cp -a --parents arch/arm/tools/gen-mach-types $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/arm/tools/mach-types $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - -%endif - cp -a include $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include -%ifarch i686 x86_64 - # files for 'make prepare' to succeed with kernel-devel - cp -a --parents arch/x86/entry/syscalls/syscall_32.tbl $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/entry/syscalls/syscall_64.tbl $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs_32.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs_64.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs_common.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/purgatory/purgatory.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/purgatory/stack.S $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/purgatory/setup-x86_64.S $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/purgatory/entry64.S $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/boot/string.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/boot/string.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/boot/ctype.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - - cp -a --parents scripts/syscalltbl.sh $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents scripts/syscallhdr.sh $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - - cp -a --parents tools/arch/x86/include/asm $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/arch/x86/include/uapi/asm $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/objtool/arch/x86/lib $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/arch/x86/lib/ $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/arch/x86/tools/gen-insn-attr-x86.awk $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/objtool/arch/x86/ $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - -%endif - # Clean up intermediate tools files - find $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/tools \( -iname "*.o" -o -iname "*.cmd" \) -exec rm -f {} + - - # Make sure the Makefile, version.h, and auto.conf have a matching - # timestamp so that external modules can be built - touch -r $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/Makefile \ - $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include/generated/uapi/linux/version.h \ - $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include/config/auto.conf - -%if %{with_debuginfo} - eu-readelf -n vmlinux | grep "Build ID" | awk '{print $NF}' > vmlinux.id - cp vmlinux.id $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/vmlinux.id - - # - # save the vmlinux file for kernel debugging into the kernel-debuginfo rpm - # - mkdir -p $RPM_BUILD_ROOT%{debuginfodir}/lib/modules/$KernelVer - cp vmlinux $RPM_BUILD_ROOT%{debuginfodir}/lib/modules/$KernelVer - if [ -n "%{vmlinux_decompressor}" ]; then - eu-readelf -n %{vmlinux_decompressor} | grep "Build ID" | awk '{print $NF}' > vmlinux.decompressor.id - # Without build-id the build will fail. But for s390 the build-id - # wasn't added before 5.11. In case it is missing prefer not - # packaging the debuginfo over a build failure. - if [ -s vmlinux.decompressor.id ]; then - cp vmlinux.decompressor.id $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/vmlinux.decompressor.id - cp %{vmlinux_decompressor} $RPM_BUILD_ROOT%{debuginfodir}/lib/modules/$KernelVer/vmlinux.decompressor - fi - fi -%endif - - find $RPM_BUILD_ROOT/lib/modules/$KernelVer -name "*.ko" -type f >modnames - - # mark modules executable so that strip-to-file can strip them - xargs --no-run-if-empty chmod u+x < modnames - - # Generate a list of modules for block and networking. - - grep -F /drivers/ modnames | xargs --no-run-if-empty nm -upA | - sed -n 's,^.*/\([^/]*\.ko\): *U \(.*\)$,\1 \2,p' > drivers.undef - - collect_modules_list() - { - sed -r -n -e "s/^([^ ]+) \\.?($2)\$/\\1/p" drivers.undef | - LC_ALL=C sort -u > $RPM_BUILD_ROOT/lib/modules/$KernelVer/modules.$1 - if [ ! -z "$3" ]; then - sed -r -e "/^($3)\$/d" -i $RPM_BUILD_ROOT/lib/modules/$KernelVer/modules.$1 - fi - } - - collect_modules_list networking \ - 'register_netdev|ieee80211_register_hw|usbnet_probe|phy_driver_register|rt(l_|2x00)(pci|usb)_probe|register_netdevice' - collect_modules_list block \ - 'ata_scsi_ioctl|scsi_add_host|scsi_add_host_with_dma|blk_alloc_queue|blk_init_queue|register_mtd_blktrans|scsi_esp_register|scsi_register_device_handler|blk_queue_physical_block_size' 'pktcdvd.ko|dm-mod.ko' - collect_modules_list drm \ - 'drm_open|drm_init' - collect_modules_list modesetting \ - 'drm_crtc_init' - - # detect missing or incorrect license tags - ( find $RPM_BUILD_ROOT/lib/modules/$KernelVer -name '*.ko' | xargs /sbin/modinfo -l | \ - grep -E -v 'GPL( v2)?$|Dual BSD/GPL$|Dual MPL/GPL$|GPL and additional rights$' ) && exit 1 - - remove_depmod_files() - { - # remove files that will be auto generated by depmod at rpm -i time - pushd $RPM_BUILD_ROOT/lib/modules/$KernelVer/ - rm -f modules.{alias,alias.bin,builtin.alias.bin,builtin.bin} \ - modules.{dep,dep.bin,devname,softdep,symbols,symbols.bin} - popd - } - - remove_depmod_files - - # Identify modules in the kernel-modules-extras package - %{SOURCE20} $RPM_BUILD_ROOT lib/modules/$KernelVer $(realpath configs/mod-extra.list) - # Identify modules in the kernel-modules-extras package - %{SOURCE20} $RPM_BUILD_ROOT lib/modules/$KernelVer %{SOURCE84} internal - - # - # Generate the kernel-core and kernel-modules files lists - # - - # Copy the System.map file for depmod to use, and create a backup of the - # full module tree so we can restore it after we're done filtering - cp System.map $RPM_BUILD_ROOT/. - cp configs/filter-*.sh $RPM_BUILD_ROOT/. - pushd $RPM_BUILD_ROOT - mkdir restore - cp -r lib/modules/$KernelVer/* restore/. - - # don't include anything going into kernel-modules-extra in the file lists - xargs rm -rf < mod-extra.list - # don't include anything going int kernel-modules-internal in the file lists - xargs rm -rf < mod-internal.list - - if [ $DoModules -eq 1 ]; then - # Find all the module files and filter them out into the core and - # modules lists. This actually removes anything going into -modules - # from the dir. - find lib/modules/$KernelVer/kernel -name *.ko | sort -n > modules.list - ./filter-modules.sh modules.list %{_target_cpu} - rm filter-*.sh - - # Run depmod on the resulting module tree and make sure it isn't broken - depmod -b . -aeF ./System.map $KernelVer &> depmod.out - if [ -s depmod.out ]; then - echo "Depmod failure" - cat depmod.out - exit 1 - else - rm depmod.out - fi - else - # Ensure important files/directories exist to let the packaging succeed - echo '%%defattr(-,-,-)' > modules.list - echo '%%defattr(-,-,-)' > k-d.list - mkdir -p lib/modules/$KernelVer/kernel - # Add files usually created by make modules, needed to prevent errors - # thrown by depmod during package installation - touch lib/modules/$KernelVer/modules.order - touch lib/modules/$KernelVer/modules.builtin - fi - - remove_depmod_files - - # Go back and find all of the various directories in the tree. We use this - # for the dir lists in kernel-core - find lib/modules/$KernelVer/kernel -mindepth 1 -type d | sort -n > module-dirs.list - - # Cleanup - rm System.map - # Just "cp -r" can be very slow: here, it rewrites _existing files_ - # with open(O_TRUNC). Many filesystems synchronously wait for metadata - # update for such file rewrites (seen in strace as final close syscall - # taking a long time). On a rotational disk, cp was observed to take - # more than 5 minutes on ext4 and more than 15 minutes (!) on xfs. - # With --remove-destination, we avoid this, and copying - # (with enough RAM to cache it) takes 5 seconds: - cp -r --remove-destination restore/* lib/modules/$KernelVer/. - rm -rf restore - popd - - # Make sure the files lists start with absolute paths or rpmbuild fails. - # Also add in the dir entries - sed -e 's/^lib*/\/lib/' %{?zipsed} $RPM_BUILD_ROOT/k-d.list > ../kernel${Variant:+-${Variant}}-modules.list - sed -e 's/^lib*/%dir \/lib/' %{?zipsed} $RPM_BUILD_ROOT/module-dirs.list > ../kernel${Variant:+-${Variant}}-core.list - sed -e 's/^lib*/\/lib/' %{?zipsed} $RPM_BUILD_ROOT/modules.list >> ../kernel${Variant:+-${Variant}}-core.list - sed -e 's/^lib*/\/lib/' %{?zipsed} $RPM_BUILD_ROOT/mod-extra.list >> ../kernel${Variant:+-${Variant}}-modules-extra.list - sed -e 's/^lib*/\/lib/' %{?zipsed} $RPM_BUILD_ROOT/mod-internal.list >> ../kernel${Variant:+-${Variant}}-modules-internal.list - - # Cleanup - rm -f $RPM_BUILD_ROOT/k-d.list - rm -f $RPM_BUILD_ROOT/modules.list - rm -f $RPM_BUILD_ROOT/module-dirs.list - rm -f $RPM_BUILD_ROOT/mod-extra.list - rm -f $RPM_BUILD_ROOT/mod-internal.list - -%if %{signmodules} - if [ $DoModules -eq 1 ]; then - # Save the signing keys so we can sign the modules in __modsign_install_post - cp certs/signing_key.pem certs/signing_key.pem.sign${Variant:++${Variant}} - cp certs/signing_key.x509 certs/signing_key.x509.sign${Variant:++${Variant}} - fi -%endif - - # Move the devel headers out of the root file system - mkdir -p $RPM_BUILD_ROOT/usr/src/kernels - mv $RPM_BUILD_ROOT/lib/modules/$KernelVer/build $RPM_BUILD_ROOT/$DevelDir - - # This is going to create a broken link during the build, but we don't use - # it after this point. We need the link to actually point to something - # when kernel-devel is installed, and a relative link doesn't work across - # the F17 UsrMove feature. - ln -sf $DevelDir $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - -%ifnarch armv7hl - # Generate vmlinux.h and put it to kernel-devel path - bpftool btf dump file vmlinux format c > $RPM_BUILD_ROOT/$DevelDir/vmlinux.h -%endif - - # prune junk from kernel-devel - find $RPM_BUILD_ROOT/usr/src/kernels -name ".*.cmd" -delete - - # Red Hat UEFI Secure Boot CA cert, which can be used to authenticate the kernel - mkdir -p $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer - %ifarch x86_64 aarch64 - install -m 0644 %{secureboot_ca_0} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca-20200609.cer - install -m 0644 %{secureboot_ca_1} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca-20140212.cer - ln -s kernel-signing-ca-20200609.cer $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca.cer - %else - install -m 0644 %{secureboot_ca_0} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca.cer - %endif - %ifarch s390x ppc64le - if [ $DoModules -eq 1 ]; then - if [ -x /usr/bin/rpm-sign ]; then - install -m 0644 %{secureboot_key_0} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/%{signing_key_filename} - else - install -m 0644 certs/signing_key.x509.sign${Variant:++${Variant}} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca.cer - openssl x509 -in certs/signing_key.pem.sign${Variant:++${Variant}} -outform der -out $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/%{signing_key_filename} - chmod 0644 $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/%{signing_key_filename} - fi - fi - %endif - -%if %{with_ipaclones} - MAXPROCS=$(echo %{?_smp_mflags} | sed -n 's/-j\s*\([0-9]\+\)/\1/p') - if [ -z "$MAXPROCS" ]; then - MAXPROCS=1 - fi - if [ "$Variant" == "" ]; then - mkdir -p $RPM_BUILD_ROOT/$DevelDir-ipaclones - find . -name '*.ipa-clones' | xargs -i{} -r -n 1 -P $MAXPROCS install -m 644 -D "{}" "$RPM_BUILD_ROOT/$DevelDir-ipaclones/{}" - fi -%endif - -} - -### -# DO it... -### - -# prepare directories -rm -rf $RPM_BUILD_ROOT -mkdir -p $RPM_BUILD_ROOT/boot -mkdir -p $RPM_BUILD_ROOT%{_libexecdir} - -cd linux-%{KVERREL} - - -%if %{with_debug} -BuildKernel %make_target %kernel_image %{_use_vdso} debug -%endif - -%if %{with_zfcpdump} -BuildKernel %make_target %kernel_image %{_use_vdso} zfcpdump -%endif - -%if %{with_pae} -BuildKernel %make_target %kernel_image %{use_vdso} lpae -%endif - -%if %{with_up} -BuildKernel %make_target %kernel_image %{_use_vdso} -%endif - -%ifnarch noarch i686 -%if !%{with_debug} && !%{with_zfcpdump} && !%{with_pae} && !%{with_up} -# If only building the user space tools, then initialize the build environment -# and some variables so that the various userspace tools can be built. -InitBuildVars -%endif -%endif - -%ifarch aarch64 -%global perf_build_extra_opts CORESIGHT=1 -%endif -%global perf_make \ - %{__make} %{?make_opts} EXTRA_CFLAGS="${RPM_OPT_FLAGS}" LDFLAGS="%{__global_ldflags}" %{?cross_opts} -C tools/perf V=1 NO_PERF_READ_VDSO32=1 NO_PERF_READ_VDSOX32=1 WERROR=0 NO_LIBUNWIND=1 HAVE_CPLUS_DEMANGLE=1 NO_GTK2=1 NO_STRLCPY=1 NO_BIONIC=1 LIBBPF_DYNAMIC=1 LIBTRACEEVENT_DYNAMIC=1 %{?perf_build_extra_opts} prefix=%{_prefix} PYTHON=%{__python3} -%if %{with_perf} -# perf -# make sure check-headers.sh is executable -chmod +x tools/perf/check-headers.sh -%{perf_make} DESTDIR=$RPM_BUILD_ROOT all -%endif - -%global tools_make \ - CFLAGS="${RPM_OPT_FLAGS}" LDFLAGS="%{__global_ldflags}" %{make} %{?make_opts} - -%if %{with_tools} -%ifarch %{cpupowerarchs} -# cpupower -# make sure version-gen.sh is executable. -chmod +x tools/power/cpupower/utils/version-gen.sh -%{tools_make} %{?_smp_mflags} -C tools/power/cpupower CPUFREQ_BENCH=false DEBUG=false -%ifarch x86_64 - pushd tools/power/cpupower/debug/x86_64 - %{tools_make} %{?_smp_mflags} centrino-decode powernow-k8-decode - popd -%endif -%ifarch x86_64 - pushd tools/power/x86/x86_energy_perf_policy/ - %{tools_make} - popd - pushd tools/power/x86/turbostat - %{tools_make} - popd - pushd tools/power/x86/intel-speed-select - %{tools_make} - popd - pushd tools/arch/x86/intel_sdsi - %{tools_make} CFLAGS="${RPM_OPT_FLAGS}" - popd -%endif -%endif -pushd tools/thermal/tmon/ -%{tools_make} -popd -pushd tools/iio/ -%{tools_make} -popd -pushd tools/gpio/ -%{tools_make} -popd -# build VM tools -pushd tools/vm/ -%{tools_make} slabinfo page_owner_sort -popd -%endif - -if [ -f $DevelDir/vmlinux.h ]; then - RPM_VMLINUX_H=$DevelDir/vmlinux.h -fi - -%global bpftool_make \ - %{__make} EXTRA_CFLAGS="${RPM_OPT_FLAGS}" EXTRA_LDFLAGS="%{__global_ldflags}" DESTDIR=$RPM_BUILD_ROOT %{?make_opts} VMLINUX_H="${RPM_VMLINUX_H}" V=1 -%if %{with_bpftool} -pushd tools/bpf/bpftool -%{bpftool_make} -popd -%endif - -%if %{with_selftests} -# Unfortunately, samples/bpf/Makefile expects that the headers are installed -# in the source tree. We installed them previously to $RPM_BUILD_ROOT/usr -# but there's no way to tell the Makefile to take them from there. -%{make} %{?_smp_mflags} headers_install -%{make} %{?_smp_mflags} ARCH=$Arch V=1 M=samples/bpf/ || true - -# Prevent bpf selftests to build bpftool repeatedly: -export BPFTOOL=$(pwd)/tools/bpf/bpftool/bpftool - -pushd tools/testing/selftests -# We need to install here because we need to call make with ARCH set which -# doesn't seem possible to do in the install section. -%{make} %{?_smp_mflags} ARCH=$Arch V=1 TARGETS="bpf vm livepatch net net/forwarding net/mptcp netfilter tc-testing" SKIP_TARGETS="" INSTALL_PATH=%{buildroot}%{_libexecdir}/kselftests VMLINUX_H="${RPM_VMLINUX_H}" install - -# 'make install' for bpf is broken and upstream refuses to fix it. -# Install the needed files manually. -for dir in bpf bpf/no_alu32 bpf/progs; do - # In ARK, the rpm build continues even if some of the selftests - # cannot be built. It's not always possible to build selftests, - # as upstream sometimes dependens on too new llvm version or has - # other issues. If something did not get built, just skip it. - test -d $dir || continue - mkdir -p %{buildroot}%{_libexecdir}/kselftests/$dir - find $dir -maxdepth 1 -type f \( -executable -o -name '*.py' -o -name settings -o \ - -name 'btf_dump_test_case_*.c' -o -name '*.ko' -o \ - -name '*.o' -exec sh -c 'readelf -h "{}" | grep -q "^ Machine:.*BPF"' \; \) -print0 | \ - xargs -0 cp -t %{buildroot}%{_libexecdir}/kselftests/$dir || true -done -popd -export -n BPFTOOL -%endif - -%if %{with_doc} -# Make the HTML pages. -%{__make} PYTHON=/usr/bin/python3 htmldocs || %{doc_build_fail} - -# sometimes non-world-readable files sneak into the kernel source tree -chmod -R a=rX Documentation -find Documentation -type d | xargs chmod u+w -%endif - -# In the modsign case, we do 3 things. 1) We check the "variant" and hard -# code the value in the following invocations. This is somewhat sub-optimal -# but we're doing this inside of an RPM macro and it isn't as easy as it -# could be because of that. 2) We restore the .tmp_versions/ directory from -# the one we saved off in BuildKernel above. This is to make sure we're -# signing the modules we actually built/installed in that variant. 3) We -# grab the arch and invoke mod-sign.sh command to actually sign the modules. -# -# We have to do all of those things _after_ find-debuginfo runs, otherwise -# that will strip the signature off of the modules. -# -# Don't sign modules for the zfcpdump variant as it is monolithic. - -%define __modsign_install_post \ - if [ "%{signmodules}" -eq "1" ]; then \ - if [ "%{with_pae}" -ne "0" ]; then \ - %{modsign_cmd} certs/signing_key.pem.sign+lpae certs/signing_key.x509.sign+lpae $RPM_BUILD_ROOT/lib/modules/%{KVERREL}+lpae/ \ - fi \ - if [ "%{with_debug}" -ne "0" ]; then \ - %{modsign_cmd} certs/signing_key.pem.sign+debug certs/signing_key.x509.sign+debug $RPM_BUILD_ROOT/lib/modules/%{KVERREL}+debug/ \ - fi \ - if [ "%{with_up}" -ne "0" ]; then \ - %{modsign_cmd} certs/signing_key.pem.sign certs/signing_key.x509.sign $RPM_BUILD_ROOT/lib/modules/%{KVERREL}/ \ - fi \ - fi \ - if [ "%{zipmodules}" -eq "1" ]; then \ - find $RPM_BUILD_ROOT/lib/modules/ -type f -name '*.ko' | xargs -P${RPM_BUILD_NCPUS} -r xz; \ - fi \ -%{nil} - -### -### Special hacks for debuginfo subpackages. -### - -# This macro is used by %%install, so we must redefine it before that. -%define debug_package %{nil} - -%if %{with_debuginfo} - -%ifnarch noarch -%global __debug_package 1 -%files -f debugfiles.list debuginfo-common-%{_target_cpu} -%endif - -%endif - -# We don't want to package debuginfo for self-tests and samples but -# we have to delete them to avoid an error messages about unpackaged -# files. -# Delete the debuginfo for kernel-devel files -%define __remove_unwanted_dbginfo_install_post \ - if [ "%{with_selftests}" -ne "0" ]; then \ - rm -rf $RPM_BUILD_ROOT/usr/lib/debug/usr/libexec/ksamples; \ - rm -rf $RPM_BUILD_ROOT/usr/lib/debug/usr/libexec/kselftests; \ - fi \ - rm -rf $RPM_BUILD_ROOT/usr/lib/debug/usr/src; \ -%{nil} - -# -# Disgusting hack alert! We need to ensure we sign modules *after* all -# invocations of strip occur, which is in __debug_install_post if -# find-debuginfo.sh runs, and __os_install_post if not. -# -%define __spec_install_post \ - %{?__debug_package:%{__debug_install_post}}\ - %{__arch_install_post}\ - %{__os_install_post}\ - %{__remove_unwanted_dbginfo_install_post}\ - %{__modsign_install_post} - -### -### install -### - -%install - -cd linux-%{KVERREL} - -%if %{with_doc} -docdir=$RPM_BUILD_ROOT%{_datadir}/doc/kernel-doc-%{specversion}-%{pkgrelease} - -# copy the source over -mkdir -p $docdir -tar -h -f - --exclude=man --exclude='.*' -c Documentation | tar xf - -C $docdir - -# with_doc -%endif - -# We have to do the headers install before the tools install because the -# kernel headers_install will remove any header files in /usr/include that -# it doesn't install itself. - -%if %{with_headers} -# Install kernel headers -%{__make} ARCH=%{hdrarch} INSTALL_HDR_PATH=$RPM_BUILD_ROOT/usr headers_install - -find $RPM_BUILD_ROOT/usr/include \ - \( -name .install -o -name .check -o \ - -name ..install.cmd -o -name ..check.cmd \) -delete - -%endif - -%if %{with_cross_headers} -%if 0%{?fedora} -HDR_ARCH_LIST='arm arm64 powerpc s390 x86' -%else -HDR_ARCH_LIST='arm64 powerpc s390 x86' -%endif -mkdir -p $RPM_BUILD_ROOT/usr/tmp-headers - -for arch in $HDR_ARCH_LIST; do - mkdir $RPM_BUILD_ROOT/usr/tmp-headers/arch-${arch} - %{__make} ARCH=${arch} INSTALL_HDR_PATH=$RPM_BUILD_ROOT/usr/tmp-headers/arch-${arch} headers_install -done - -find $RPM_BUILD_ROOT/usr/tmp-headers \ - \( -name .install -o -name .check -o \ - -name ..install.cmd -o -name ..check.cmd \) -delete - -# Copy all the architectures we care about to their respective asm directories -for arch in $HDR_ARCH_LIST ; do - mkdir -p $RPM_BUILD_ROOT/usr/${arch}-linux-gnu/include - mv $RPM_BUILD_ROOT/usr/tmp-headers/arch-${arch}/include/* $RPM_BUILD_ROOT/usr/${arch}-linux-gnu/include/ -done - -rm -rf $RPM_BUILD_ROOT/usr/tmp-headers -%endif - -%if %{with_kernel_abi_stablelists} -# kabi directory -INSTALL_KABI_PATH=$RPM_BUILD_ROOT/lib/modules/ -mkdir -p $INSTALL_KABI_PATH - -# install kabi releases directories -tar xjvf %{SOURCE300} -C $INSTALL_KABI_PATH -# with_kernel_abi_stablelists -%endif - -%if %{with_perf} -# perf tool binary and supporting scripts/binaries -%{perf_make} DESTDIR=$RPM_BUILD_ROOT lib=%{_lib} install-bin -# remove the 'trace' symlink. -rm -f %{buildroot}%{_bindir}/trace - -# For both of the below, yes, this should be using a macro but right now -# it's hard coded and we don't actually want it anyway right now. -# Whoever wants examples can fix it up! - -# remove examples -rm -rf %{buildroot}/usr/lib/perf/examples -rm -rf %{buildroot}/usr/lib/perf/include - -# python-perf extension -%{perf_make} DESTDIR=$RPM_BUILD_ROOT install-python_ext - -# perf man pages (note: implicit rpm magic compresses them later) -mkdir -p %{buildroot}/%{_mandir}/man1 -%{perf_make} DESTDIR=$RPM_BUILD_ROOT install-man - -# remove any tracevent files, eg. its plugins still gets built and installed, -# even if we build against system's libtracevent during perf build (by setting -# LIBTRACEEVENT_DYNAMIC=1 above in perf_make macro). Those files should already -# ship with libtraceevent package. -rm -rf %{buildroot}%{_libdir}/traceevent -%endif - -%if %{with_tools} -%ifarch %{cpupowerarchs} -%{make} -C tools/power/cpupower DESTDIR=$RPM_BUILD_ROOT libdir=%{_libdir} mandir=%{_mandir} CPUFREQ_BENCH=false install -rm -f %{buildroot}%{_libdir}/*.{a,la} -%find_lang cpupower -mv cpupower.lang ../ -%ifarch x86_64 - pushd tools/power/cpupower/debug/x86_64 - install -m755 centrino-decode %{buildroot}%{_bindir}/centrino-decode - install -m755 powernow-k8-decode %{buildroot}%{_bindir}/powernow-k8-decode - popd -%endif -chmod 0755 %{buildroot}%{_libdir}/libcpupower.so* -mkdir -p %{buildroot}%{_unitdir} %{buildroot}%{_sysconfdir}/sysconfig -install -m644 %{SOURCE2000} %{buildroot}%{_unitdir}/cpupower.service -install -m644 %{SOURCE2001} %{buildroot}%{_sysconfdir}/sysconfig/cpupower -%endif -%ifarch x86_64 - mkdir -p %{buildroot}%{_mandir}/man8 - pushd tools/power/x86/x86_energy_perf_policy - %{tools_make} DESTDIR=%{buildroot} install - popd - pushd tools/power/x86/turbostat - %{tools_make} DESTDIR=%{buildroot} install - popd - pushd tools/power/x86/intel-speed-select - %{tools_make} DESTDIR=%{buildroot} install - popd - pushd tools/arch/x86/intel_sdsi - %{tools_make} CFLAGS="${RPM_OPT_FLAGS}" DESTDIR=%{buildroot} install - popd -%endif -pushd tools/thermal/tmon -%{tools_make} INSTALL_ROOT=%{buildroot} install -popd -pushd tools/iio -%{tools_make} DESTDIR=%{buildroot} install -popd -pushd tools/gpio -%{tools_make} DESTDIR=%{buildroot} install -popd -install -m644 -D %{SOURCE2002} %{buildroot}%{_sysconfdir}/logrotate.d/kvm_stat -pushd tools/kvm/kvm_stat -%{__make} INSTALL_ROOT=%{buildroot} install-tools -%{__make} INSTALL_ROOT=%{buildroot} install-man -install -m644 -D kvm_stat.service %{buildroot}%{_unitdir}/kvm_stat.service -popd -# install VM tools -pushd tools/vm/ -install -m755 slabinfo %{buildroot}%{_bindir}/slabinfo -install -m755 page_owner_sort %{buildroot}%{_bindir}/page_owner_sort -popd -%endif - -if [ -f $DevelDir/vmlinux.h ]; then - RPM_VMLINUX_H=$DevelDir/vmlinux.h -fi - -%if %{with_bpftool} -pushd tools/bpf/bpftool -%{bpftool_make} prefix=%{_prefix} bash_compdir=%{_sysconfdir}/bash_completion.d/ mandir=%{_mandir} install doc-install -popd -%endif - -%if %{with_selftests} -pushd samples -install -d %{buildroot}%{_libexecdir}/ksamples -# install bpf samples -pushd bpf -install -d %{buildroot}%{_libexecdir}/ksamples/bpf -find -type f -executable -exec install -m755 {} %{buildroot}%{_libexecdir}/ksamples/bpf \; -install -m755 *.sh %{buildroot}%{_libexecdir}/ksamples/bpf -# test_lwt_bpf.sh compiles test_lwt_bpf.c when run; this works only from the -# kernel tree. Just remove it. -rm %{buildroot}%{_libexecdir}/ksamples/bpf/test_lwt_bpf.sh -install -m644 *_kern.o %{buildroot}%{_libexecdir}/ksamples/bpf || true -install -m644 tcp_bpf.readme %{buildroot}%{_libexecdir}/ksamples/bpf -popd -# install pktgen samples -pushd pktgen -install -d %{buildroot}%{_libexecdir}/ksamples/pktgen -find . -type f -executable -exec install -m755 {} %{buildroot}%{_libexecdir}/ksamples/pktgen/{} \; -find . -type f ! -executable -exec install -m644 {} %{buildroot}%{_libexecdir}/ksamples/pktgen/{} \; -popd -popd -# install vm selftests -pushd tools/testing/selftests/vm -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/vm/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/vm/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/vm/{} \; -popd -# install drivers/net/mlxsw selftests -pushd tools/testing/selftests/drivers/net/mlxsw -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/drivers/net/mlxsw/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/drivers/net/mlxsw/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/drivers/net/mlxsw/{} \; -popd -# install drivers/net/netdevsim selftests -pushd tools/testing/selftests/drivers/net/netdevsim -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/drivers/net/netdevsim/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/drivers/net/netdevsim/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/drivers/net/netdevsim/{} \; -popd -# install net/forwarding selftests -pushd tools/testing/selftests/net/forwarding -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/net/forwarding/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/net/forwarding/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/net/forwarding/{} \; -popd -# install net/mptcp selftests -pushd tools/testing/selftests/net/mptcp -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/net/mptcp/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/net/mptcp/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/net/mptcp/{} \; -popd -# install tc-testing selftests -pushd tools/testing/selftests/tc-testing -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/tc-testing/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/tc-testing/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/tc-testing/{} \; -popd -# install livepatch selftests -pushd tools/testing/selftests/livepatch -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/livepatch/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/livepatch/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/livepatch/{} \; -popd -# install netfilter selftests -pushd tools/testing/selftests/netfilter -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/netfilter/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/netfilter/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/netfilter/{} \; -popd -%endif - -### -### clean -### - -### -### scripts -### - -%if %{with_tools} -%post -n kernel-tools-libs -/sbin/ldconfig - -%postun -n kernel-tools-libs -/sbin/ldconfig -%endif - -# -# This macro defines a %%post script for a kernel*-devel package. -# %%kernel_devel_post [<subpackage>] -# Note we don't run hardlink if ostree is in use, as ostree is -# a far more sophisticated hardlink implementation. -# https://github.com/projectatomic/rpm-ostree/commit/58a79056a889be8814aa51f507b2c7a4dccee526 -# -# The deletion of *.hardlink-temporary files is a temporary workaround -# for this bug in the hardlink binary (fixed in util-linux 2.38): -# https://github.com/util-linux/util-linux/issues/1602 -# -%define kernel_devel_post() \ -%{expand:%%post %{?1:%{1}-}devel}\ -if [ -f /etc/sysconfig/kernel ]\ -then\ - . /etc/sysconfig/kernel || exit $?\ -fi\ -if [ "$HARDLINK" != "no" -a -x /usr/bin/hardlink -a ! -e /run/ostree-booted ] \ -then\ - (cd /usr/src/kernels/%{KVERREL}%{?1:+%{1}} &&\ - /usr/bin/find . -type f | while read f; do\ - hardlink -c /usr/src/kernels/*%{?dist}.*/$f $f > /dev/null\ - done;\ - /usr/bin/find /usr/src/kernels -type f -name '*.hardlink-temporary' -delete\ - )\ -fi\ -%{nil} - -# -# This macro defines a %%post script for a kernel*-modules-extra package. -# It also defines a %%postun script that does the same thing. -# %%kernel_modules_extra_post [<subpackage>] -# -%define kernel_modules_extra_post() \ -%{expand:%%post %{?1:%{1}-}modules-extra}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil}\ -%{expand:%%postun %{?1:%{1}-}modules-extra}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil} - -# -# This macro defines a %%post script for a kernel*-modules-internal package. -# It also defines a %%postun script that does the same thing. -# %%kernel_modules_internal_post [<subpackage>] -# -%define kernel_modules_internal_post() \ -%{expand:%%post %{?1:%{1}-}modules-internal}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil}\ -%{expand:%%postun %{?1:%{1}-}modules-internal}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil} - -# -# This macro defines a %%post script for a kernel*-modules package. -# It also defines a %%postun script that does the same thing. -# %%kernel_modules_post [<subpackage>] -# -%define kernel_modules_post() \ -%{expand:%%post %{?1:%{1}-}modules}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -if [ ! -f %{_localstatedir}/lib/rpm-state/%{name}/installing_core_%{KVERREL}%{?1:+%{1}} ]; then\ - mkdir -p %{_localstatedir}/lib/rpm-state/%{name}\ - touch %{_localstatedir}/lib/rpm-state/%{name}/need_to_run_dracut_%{KVERREL}%{?1:+%{1}}\ -fi\ -%{nil}\ -%{expand:%%postun %{?1:%{1}-}modules}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil}\ -%{expand:%%posttrans %{?1:%{1}-}modules}\ -if [ -f %{_localstatedir}/lib/rpm-state/%{name}/need_to_run_dracut_%{KVERREL}%{?1:+%{1}} ]; then\ - rm -f %{_localstatedir}/lib/rpm-state/%{name}/need_to_run_dracut_%{KVERREL}%{?1:+%{1}}\ - echo "Running: dracut -f --kver %{KVERREL}%{?1:+%{1}}"\ - dracut -f --kver "%{KVERREL}%{?1:+%{1}}" || exit $?\ -fi\ -%{nil} - -# This macro defines a %%posttrans script for a kernel package. -# %%kernel_variant_posttrans [<subpackage>] -# More text can follow to go at the end of this variant's %%post. -# -%define kernel_variant_posttrans() \ -%{expand:%%posttrans %{?1:%{1}-}core}\ -%if 0%{!?fedora:1}\ -if [ -x %{_sbindir}/weak-modules ]\ -then\ - %{_sbindir}/weak-modules --add-kernel %{KVERREL}%{?1:+%{1}} || exit $?\ -fi\ -%endif\ -rm -f %{_localstatedir}/lib/rpm-state/%{name}/installing_core_%{KVERREL}%{?1:+%{1}}\ -/bin/kernel-install add %{KVERREL}%{?1:+%{1}} /lib/modules/%{KVERREL}%{?1:+%{1}}/vmlinuz || exit $?\ -%{nil} - -# -# This macro defines a %%post script for a kernel package and its devel package. -# %%kernel_variant_post [-v <subpackage>] [-r <replace>] -# More text can follow to go at the end of this variant's %%post. -# -%define kernel_variant_post(v:r:) \ -%{expand:%%kernel_devel_post %{?-v*}}\ -%{expand:%%kernel_modules_post %{?-v*}}\ -%{expand:%%kernel_modules_extra_post %{?-v*}}\ -%{expand:%%kernel_modules_internal_post %{?-v*}}\ -%{expand:%%kernel_variant_posttrans %{?-v*}}\ -%{expand:%%post %{?-v*:%{-v*}-}core}\ -%{-r:\ -if [ `uname -i` == "x86_64" -o `uname -i` == "i386" ] &&\ - [ -f /etc/sysconfig/kernel ]; then\ - /bin/sed -r -i -e 's/^DEFAULTKERNEL=%{-r*}$/DEFAULTKERNEL=kernel%{?-v:-%{-v*}}/' /etc/sysconfig/kernel || exit $?\ -fi}\ -mkdir -p %{_localstatedir}/lib/rpm-state/%{name}\ -touch %{_localstatedir}/lib/rpm-state/%{name}/installing_core_%{KVERREL}%{?1:+%{1}}\ -%{nil} - -# -# This macro defines a %%preun script for a kernel package. -# %%kernel_variant_preun <subpackage> -# -%define kernel_variant_preun() \ -%{expand:%%preun %{?1:%{1}-}core}\ -/bin/kernel-install remove %{KVERREL}%{?1:+%{1}} /lib/modules/%{KVERREL}%{?1:+%{1}}/vmlinuz || exit $?\ -if [ -x %{_sbindir}/weak-modules ]\ -then\ - %{_sbindir}/weak-modules --remove-kernel %{KVERREL}%{?1:+%{1}} || exit $?\ -fi\ -%{nil} - -%kernel_variant_preun -%kernel_variant_post -r kernel-smp - -%if %{with_pae} -%kernel_variant_preun lpae -%kernel_variant_post -v lpae -r (kernel|kernel-smp) -%endif - -%if %{with_debug} -%kernel_variant_preun debug -%kernel_variant_post -v debug -%endif - -%if %{with_zfcpdump} -%kernel_variant_preun zfcpdump -%kernel_variant_post -v zfcpdump -%endif - -if [ -x /sbin/ldconfig ] -then - /sbin/ldconfig -X || exit $? -fi - -### -### file lists -### - -%if %{with_headers} -%files headers -/usr/include/* -%endif - -%if %{with_cross_headers} -%files cross-headers -/usr/*-linux-gnu/include/* -%endif - -%if %{with_kernel_abi_stablelists} -%files -n kernel-abi-stablelists -/lib/modules/kabi-* -%endif - -%if %{with_kabidw_base} -%ifarch x86_64 s390x ppc64 ppc64le aarch64 -%files kernel-kabidw-base-internal -%defattr(-,root,root) -/kabidw-base/%{_target_cpu}/* -%endif -%endif - -# only some architecture builds need kernel-doc -%if %{with_doc} -%files doc -%defattr(-,root,root) -%{_datadir}/doc/kernel-doc-%{specversion}-%{pkgrelease}/Documentation/* -%dir %{_datadir}/doc/kernel-doc-%{specversion}-%{pkgrelease}/Documentation -%dir %{_datadir}/doc/kernel-doc-%{specversion}-%{pkgrelease} -%endif - -%if %{with_perf} -%files -n perf -%{_bindir}/perf -%{_libdir}/libperf-jvmti.so -%dir %{_libexecdir}/perf-core -%{_libexecdir}/perf-core/* -%{_datadir}/perf-core/* -%{_mandir}/man[1-8]/perf* -%{_sysconfdir}/bash_completion.d/perf -%doc linux-%{KVERREL}/tools/perf/Documentation/examples.txt -%{_docdir}/perf-tip/tips.txt - -%files -n python3-perf -%{python3_sitearch}/* - -%if %{with_debuginfo} -%files -f perf-debuginfo.list -n perf-debuginfo - -%files -f python3-perf-debuginfo.list -n python3-perf-debuginfo -%endif -# with_perf -%endif - -%if %{with_tools} -%ifnarch %{cpupowerarchs} -%files -n kernel-tools -%else -%files -n kernel-tools -f cpupower.lang -%{_bindir}/cpupower -%{_datadir}/bash-completion/completions/cpupower -%ifarch x86_64 -%{_bindir}/centrino-decode -%{_bindir}/powernow-k8-decode -%endif -%{_unitdir}/cpupower.service -%{_mandir}/man[1-8]/cpupower* -%config(noreplace) %{_sysconfdir}/sysconfig/cpupower -%ifarch x86_64 -%{_bindir}/x86_energy_perf_policy -%{_mandir}/man8/x86_energy_perf_policy* -%{_bindir}/turbostat -%{_mandir}/man8/turbostat* -%{_bindir}/intel-speed-select -%{_sbindir}/intel_sdsi -%endif -# cpupowerarchs -%endif -%{_bindir}/tmon -%{_bindir}/iio_event_monitor -%{_bindir}/iio_generic_buffer -%{_bindir}/lsiio -%{_bindir}/lsgpio -%{_bindir}/gpio-hammer -%{_bindir}/gpio-event-mon -%{_bindir}/gpio-watch -%{_mandir}/man1/kvm_stat* -%{_bindir}/kvm_stat -%{_unitdir}/kvm_stat.service -%config(noreplace) %{_sysconfdir}/logrotate.d/kvm_stat -%{_bindir}/page_owner_sort -%{_bindir}/slabinfo - -%if %{with_debuginfo} -%files -f kernel-tools-debuginfo.list -n kernel-tools-debuginfo -%endif - -%ifarch %{cpupowerarchs} -%files -n kernel-tools-libs -%{_libdir}/libcpupower.so.0 -%{_libdir}/libcpupower.so.0.0.1 - -%files -n kernel-tools-libs-devel -%{_libdir}/libcpupower.so -%{_includedir}/cpufreq.h -%endif -# with_tools -%endif - -%if %{with_bpftool} -%files -n bpftool -%{_sbindir}/bpftool -%{_sysconfdir}/bash_completion.d/bpftool -%{_mandir}/man8/bpftool-cgroup.8.gz -%{_mandir}/man8/bpftool-gen.8.gz -%{_mandir}/man8/bpftool-iter.8.gz -%{_mandir}/man8/bpftool-link.8.gz -%{_mandir}/man8/bpftool-map.8.gz -%{_mandir}/man8/bpftool-prog.8.gz -%{_mandir}/man8/bpftool-perf.8.gz -%{_mandir}/man8/bpftool.8.gz -%{_mandir}/man8/bpftool-net.8.gz -%{_mandir}/man8/bpftool-feature.8.gz -%{_mandir}/man8/bpftool-btf.8.gz -%{_mandir}/man8/bpftool-struct_ops.8.gz - -%if %{with_debuginfo} -%files -f bpftool-debuginfo.list -n bpftool-debuginfo -%defattr(-,root,root) -%endif -%endif - -%if %{with_selftests} -%files selftests-internal -%{_libexecdir}/ksamples -%{_libexecdir}/kselftests -%endif - -# empty meta-package -%ifnarch %nobuildarches noarch -%files -%endif - -%if %{with_gcov} -%ifnarch %nobuildarches noarch -%files gcov -%{_builddir} -%endif -%endif - -# This is %%{image_install_path} on an arch where that includes ELF files, -# or empty otherwise. -%define elf_image_install_path %{?kernel_image_elf:%{image_install_path}} - -# -# This macro defines the %%files sections for a kernel package -# and its devel and debuginfo packages. -# %%kernel_variant_files [-k vmlinux] <use_vdso> <condition> <subpackage> -# -%define kernel_variant_files(k:) \ -%if %{2}\ -%{expand:%%files -f kernel-%{?3:%{3}-}core.list %{?1:-f kernel-%{?3:%{3}-}ldsoconf.list} %{?3:%{3}-}core}\ -%{!?_licensedir:%global license %%doc}\ -%license linux-%{KVERREL}/COPYING-%{version}-%{release}\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/%{?-k:%{-k*}}%{!?-k:vmlinuz}\ -%ghost /%{image_install_path}/%{?-k:%{-k*}}%{!?-k:vmlinuz}-%{KVERREL}%{?3:+%{3}}\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/.vmlinuz.hmac \ -%ghost /%{image_install_path}/.vmlinuz-%{KVERREL}%{?3:+%{3}}.hmac \ -%ifarch %{arm} aarch64\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/dtb \ -%ghost /%{image_install_path}/dtb-%{KVERREL}%{?3:+%{3}} \ -%endif\ -%attr(0600, root, root) /lib/modules/%{KVERREL}%{?3:+%{3}}/System.map\ -%ghost %attr(0600, root, root) /boot/System.map-%{KVERREL}%{?3:+%{3}}\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/symvers.gz\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/config\ -%ghost %attr(0600, root, root) /boot/symvers-%{KVERREL}%{?3:+%{3}}.gz\ -%ghost %attr(0600, root, root) /boot/initramfs-%{KVERREL}%{?3:+%{3}}.img\ -%ghost %attr(0644, root, root) /boot/config-%{KVERREL}%{?3:+%{3}}\ -%dir /lib/modules\ -%dir /lib/modules/%{KVERREL}%{?3:+%{3}}\ -%dir /lib/modules/%{KVERREL}%{?3:+%{3}}/kernel\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/build\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/source\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/updates\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/weak-updates\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/systemtap\ -%{_datadir}/doc/kernel-keys/%{KVERREL}%{?3:+%{3}}\ -%if %{1}\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/vdso\ -%endif\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/modules.*\ -%{expand:%%files -f kernel-%{?3:%{3}-}modules.list %{?3:%{3}-}modules}\ -%{expand:%%files %{?3:%{3}-}devel}\ -%defverify(not mtime)\ -/usr/src/kernels/%{KVERREL}%{?3:+%{3}}\ -%{expand:%%files %{?3:%{3}-}devel-matched}\ -%{expand:%%files -f kernel-%{?3:%{3}-}modules-extra.list %{?3:%{3}-}modules-extra}\ -%config(noreplace) /etc/modprobe.d/*-blacklist.conf\ -%{expand:%%files -f kernel-%{?3:%{3}-}modules-internal.list %{?3:%{3}-}modules-internal}\ -%if %{with_debuginfo}\ -%ifnarch noarch\ -%{expand:%%files -f debuginfo%{?3}.list %{?3:%{3}-}debuginfo}\ -%endif\ -%endif\ -%if %{?3:1} %{!?3:0}\ -%{expand:%%files %{3}}\ -%endif\ -%endif\ -%{nil} - -%kernel_variant_files %{_use_vdso} %{with_up} -%kernel_variant_files %{_use_vdso} %{with_debug} debug -%if %{with_debug_meta} -%files debug -%files debug-core -%files debug-devel -%files debug-devel-matched -%files debug-modules -%files debug-modules-extra -%endif -%kernel_variant_files %{use_vdso} %{with_pae} lpae -%kernel_variant_files %{_use_vdso} %{with_zfcpdump} zfcpdump - -%define kernel_variant_ipaclones(k:) \ -%if %{1}\ -%if %{with_ipaclones}\ -%{expand:%%files %{?2:%{2}-}ipaclones-internal}\ -%defattr(-,root,root)\ -%defverify(not mtime)\ -/usr/src/kernels/%{KVERREL}%{?2:+%{2}}-ipaclones\ -%endif\ -%endif\ -%{nil} - -%kernel_variant_ipaclones %{with_up} - -# plz don't put in a version string unless you're going to tag -# and build. -# -# -%changelog Mon Mar 28 2022 Fedora Kernel Team <kernel-team@xxxxxxxxxxxxxxxxx> [5.17.0-0.rc0.78e36f3b0dae.6.test] - -### -# The following Emacs magic makes C-c C-e use UTC dates. -# Local Variables: -# rpm-change-log-uses-utc: t -# End: -### diff --git a/redhat/self-test/data/centos-78e36f3b0dae.fc25.spec b/redhat/self-test/data/centos-78e36f3b0dae.fc25.spec index blahblah..blahblah 100755 --- a/redhat/self-test/data/centos-78e36f3b0dae.fc25.spec +++ b/redhat/self-test/data/centos-78e36f3b0dae.fc25.spec @@ -1,125 +1,7 @@ -# All Global changes to build and install go here. -# Per the below section about __spec_install_pre, any rpm -# environment changes that affect %%install need to go -# here before the %%install macro is pre-built. - -# Disable LTO in userspace packages. -%global _lto_cflags %{nil} - -# Option to enable compiling with clang instead of gcc. -%bcond_with toolchain_clang - -%if %{with toolchain_clang} -%global toolchain clang -%endif - -# Compile the kernel with LTO (only supported when building with clang). -%bcond_with clang_lto - -%if %{with clang_lto} && %{without toolchain_clang} -{error:clang_lto requires --with toolchain_clang} -%endif - -# Cross compile on copr for arm -# See https://bugzilla.redhat.com/1879599 -%if 0%{?_with_cross_arm:1} -%global _target_cpu armv7hl -%global _arch arm -%global _build_arch arm -%global _with_cross 1 -%endif - -# The kernel's %%install section is special -# Normally the %%install section starts by cleaning up the BUILD_ROOT -# like so: -# -# %%__spec_install_pre %%{___build_pre}\ -# [ "$RPM_BUILD_ROOT" != "/" ] && rm -rf "${RPM_BUILD_ROOT}"\ -# mkdir -p `dirname "$RPM_BUILD_ROOT"`\ -# mkdir "$RPM_BUILD_ROOT"\ -# %%{nil} -# -# But because of kernel variants, the %%build section, specifically -# BuildKernel(), moves each variant to its final destination as the -# variant is built. This violates the expectation of the %%install -# section. As a result we snapshot the current env variables and -# purposely leave out the removal section. All global wide changes -# should be added above this line otherwise the %%install section -# will not see them. -%global __spec_install_pre %{___build_pre} - -# At the time of this writing (2019-03), RHEL8 packages use w2.xzdio -# compression for rpms (xz, level 2). -# Kernel has several large (hundreds of mbytes) rpms, they take ~5 mins -# to compress by single-threaded xz. Switch to threaded compression, -# and from level 2 to 3 to keep compressed sizes close to "w2" results. -# -# NB: if default compression in /usr/lib/rpm/redhat/macros ever changes, -# this one might need tweaking (e.g. if default changes to w3.xzdio, -# change below to w4T.xzdio): -# -# This is disabled on i686 as it triggers oom errors - -%ifnarch i686 -%define _binary_payload w3T.xzdio -%endif - -Summary: The Linux kernel -%if 0%{?fedora} -%define secure_boot_arch x86_64 -%else -%define secure_boot_arch x86_64 aarch64 s390x ppc64le -%endif - -# Signing for secure boot authentication -%ifarch %{secure_boot_arch} -%global signkernel 1 -%else -%global signkernel 0 -%endif - -# Sign modules on all arches -%global signmodules 1 - -# Compress modules only for architectures that build modules -%ifarch noarch -%global zipmodules 0 -%else -%global zipmodules 1 -%endif - -%if %{zipmodules} -%global zipsed -e 's/\.ko$/\.ko.xz/' -# for parallel xz processes, replace with 1 to go back to single process -%endif - -%if 0%{?fedora} -%define primary_target fedora -%else -%define primary_target rhel -%endif - -# -# genspec.sh variables -# - -# Include Fedora files %global include_fedora 1 -# Include RHEL files %global include_rhel 1 -# Provide Patchlist.changelog file %global patchlist_changelog 1 -# Set released_kernel to 1 when the upstream source tarball contains a -# kernel release. (This includes prepatch or "rc" releases.) -# Set released_kernel to 0 when the upstream source tarball contains an -# unreleased kernel development snapshot. %global released_kernel 0 -# Set debugbuildsenabled to 1 to build separate base and debug kernels -# (on supported architectures). The kernel-debug-* subpackages will -# contain the debug kernel. -# Set debugbuildsenabled to 0 to not build a separate debug kernel, but -# to build the base kernel using the debug configuration. (Specifying -# the --with-release option overrides this setting.) %define debugbuildsenabled 0 %define buildid .test %define specversion 5.17.0 @@ -127,2924 +9,6 @@ Summary: The Linux kernel %define pkgrelease 0.rc0.78e36f3b0dae.6.test %define kversion 5 %define tarfile_release 5.17.0-0.rc0.78e36f3b0dae.6.test -# This is needed to do merge window version magic %define patchlevel 17 -# allow pkg_release to have configurable %%{?dist} tag %define specrelease 0.rc0.78e36f3b0dae.6%{?buildid}%{?dist} - -# -# End of genspec.sh variables -# - -%define pkg_release %{specrelease} - -# libexec dir is not used by the linker, so the shared object there -# should not be exported to RPM provides -%global __provides_exclude_from ^%{_libexecdir}/kselftests - -# The following build options are enabled by default, but may become disabled -# by later architecture-specific checks. These can also be disabled by using -# --without <opt> in the rpmbuild command, or by forcing these values to 0. -# -# standard kernel -%define with_up %{?_without_up: 0} %{?!_without_up: 1} -# kernel PAE (only valid for ARM (lpae)) -%define with_pae %{?_without_pae: 0} %{?!_without_pae: 1} -# kernel-debug -%define with_debug %{?_without_debug: 0} %{?!_without_debug: 1} -# kernel-zfcpdump (s390 specific kernel for zfcpdump) -%define with_zfcpdump %{?_without_zfcpdump: 0} %{?!_without_zfcpdump: 1} -# kernel-doc -%define with_doc %{?_without_doc: 0} %{?!_without_doc: 1} -# kernel-headers -%define with_headers %{?_without_headers: 0} %{?!_without_headers: 1} -%define with_cross_headers %{?_without_cross_headers: 0} %{?!_without_cross_headers: 1} -# perf -%define with_perf %{?_without_perf: 0} %{?!_without_perf: 1} -# tools -%define with_tools %{?_without_tools: 0} %{?!_without_tools: 1} -# bpf tool -%define with_bpftool %{?_without_bpftool: 0} %{?!_without_bpftool: 1} -# kernel-debuginfo -%define with_debuginfo %{?_without_debuginfo: 0} %{?!_without_debuginfo: 1} -# kernel-abi-stablelists -%define with_kernel_abi_stablelists %{?_without_kernel_abi_stablelists: 0} %{?!_without_kernel_abi_stablelists: 1} -# internal samples and selftests -%define with_selftests %{?_without_selftests: 0} %{?!_without_selftests: 1} -# -# Additional options for user-friendly one-off kernel building: -# -# Only build the base kernel (--with baseonly): -%define with_baseonly %{?_with_baseonly: 1} %{?!_with_baseonly: 0} -# Only build the pae kernel (--with paeonly): -%define with_paeonly %{?_with_paeonly: 1} %{?!_with_paeonly: 0} -# Only build the debug kernel (--with dbgonly): -%define with_dbgonly %{?_with_dbgonly: 1} %{?!_with_dbgonly: 0} -# Control whether we perform a compat. check against published ABI. -%define with_kabichk %{?_without_kabichk: 0} %{?!_without_kabichk: 1} -# Temporarily disable kabi checks until RC. -%define with_kabichk 0 -# Control whether we perform a compat. check against DUP ABI. -%define with_kabidupchk %{?_with_kabidupchk: 1} %{?!_with_kabidupchk: 0} -# -# Control whether to run an extensive DWARF based kABI check. -# Note that this option needs to have baseline setup in SOURCE300. -%define with_kabidwchk %{?_without_kabidwchk: 0} %{?!_without_kabidwchk: 1} -%define with_kabidw_base %{?_with_kabidw_base: 1} %{?!_with_kabidw_base: 0} -# -# Control whether to install the vdso directories. -%define with_vdso_install %{?_without_vdso_install: 0} %{?!_without_vdso_install: 1} -# -# should we do C=1 builds with sparse -%define with_sparse %{?_with_sparse: 1} %{?!_with_sparse: 0} -# -# Cross compile requested? -%define with_cross %{?_with_cross: 1} %{?!_with_cross: 0} -# -# build a release kernel on rawhide -%define with_release %{?_with_release: 1} %{?!_with_release: 0} - -# verbose build, i.e. no silent rules and V=1 -%define with_verbose %{?_with_verbose: 1} %{?!_with_verbose: 0} - -# -# check for mismatched config options -%define with_configchecks %{?_without_configchecks: 0} %{?!_without_configchecks: 1} - -# -# gcov support -%define with_gcov %{?_with_gcov:1}%{?!_with_gcov:0} - -# -# ipa_clone support -%define with_ipaclones %{?_without_ipaclones: 0} %{?!_without_ipaclones: 1} - -# Want to build a vanilla kernel build without any non-upstream patches? -%define with_vanilla %{?_with_vanilla: 1} %{?!_with_vanilla: 0} - -%if 0%{?fedora} -# Kernel headers are being split out into a separate package -%define with_headers 0 -%define with_cross_headers 0 -# no ipa_clone for now -%define with_ipaclones 0 -# no stablelist -%define with_kernel_abi_stablelists 0 -# Fedora builds these separately -%define with_perf 0 -%define with_tools 0 -%define with_bpftool 0 -# selftests turns on bpftool -%define with_selftests 0 -%endif - -%if %{with_verbose} -%define make_opts V=1 -%else -%define make_opts -s -%endif - -%if %{with toolchain_clang} -%ifarch s390x ppc64le -%global llvm_ias 0 -%else -%global llvm_ias 1 -%endif -%global clang_make_opts HOSTCC=clang CC=clang LLVM_IAS=%{llvm_ias} -%if %{with clang_lto} -%global clang_make_opts %{clang_make_opts} LD=ld.lld HOSTLD=ld.lld AR=llvm-ar NM=llvm-nm HOSTAR=llvm-ar HOSTNM=llvm-nm -%endif -%global make_opts %{make_opts} %{clang_make_opts} -# clang does not support the -fdump-ipa-clones option -%global with_ipaclones 0 -%endif - -# turn off debug kernel and kabichk for gcov builds -%if %{with_gcov} -%define with_debug 0 -%define with_kabichk 0 -%define with_kabidupchk 0 -%define with_kabidwchk 0 -%define with_kabidw_base 0 -%define with_kernel_abi_stablelists 0 -%endif - -# turn off kABI DWARF-based check if we're generating the base dataset -%if %{with_kabidw_base} -%define with_kabidwchk 0 -%endif - -# kpatch_kcflags are extra compiler flags applied to base kernel -# -fdump-ipa-clones is enabled only for base kernels on selected arches -%if %{with_ipaclones} -%ifarch x86_64 ppc64le -%define kpatch_kcflags -fdump-ipa-clones -%else -%define with_ipaclones 0 -%endif -%endif - -%define make_target bzImage -%define image_install_path boot - -%define KVERREL %{version}-%{release}.%{_target_cpu} -%define KVERREL_RE %(echo %KVERREL | sed 's/+/[+]/g') -%define hdrarch %_target_cpu -%define asmarch %_target_cpu - -%if 0%{!?nopatches:1} -%define nopatches 0 -%endif - -%if %{with_vanilla} -%define nopatches 1 -%endif - -%if %{with_release} -%define debugbuildsenabled 1 -%endif - -%if !%{with_debuginfo} -%define _enable_debug_packages 0 -%endif -%define debuginfodir /usr/lib/debug -# Needed because we override almost everything involving build-ids -# and debuginfo generation. Currently we rely on the old alldebug setting. -%global _build_id_links alldebug - -# kernel PAE is only built on ARMv7 -%ifnarch armv7hl -%define with_pae 0 -%endif - -# if requested, only build base kernel -%if %{with_baseonly} -%define with_pae 0 -%define with_debug 0 -%define with_vdso_install 0 -%define with_perf 0 -%define with_tools 0 -%define with_bpftool 0 -%define with_kernel_abi_stablelists 0 -%define with_selftests 0 -%define with_cross 0 -%define with_cross_headers 0 -%define with_ipaclones 0 -%endif - -# if requested, only build pae kernel -%if %{with_paeonly} -%define with_up 0 -%define with_debug 0 -%endif - -# if requested, only build debug kernel -%if %{with_dbgonly} -%define with_up 0 -%define with_vdso_install 0 -%define with_perf 0 -%define with_tools 0 -%define with_bpftool 0 -%define with_kernel_abi_stablelists 0 -%define with_selftests 0 -%define with_cross 0 -%define with_cross_headers 0 -%define with_ipaclones 0 -%endif - -# turn off kABI DUP check and DWARF-based check if kABI check is disabled -%if !%{with_kabichk} -%define with_kabidupchk 0 -%define with_kabidwchk 0 -%endif - -%if %{with_vdso_install} -%define use_vdso 1 -%endif - -# selftests require bpftool to be built -%if %{with_selftests} -%define with_bpftool 1 -%endif - -%ifnarch noarch -%define with_kernel_abi_stablelists 0 -%endif - -# Overrides for generic default options - -# only package docs noarch -%ifnarch noarch -%define with_doc 0 -%define doc_build_fail true -%endif - -%if 0%{?fedora} -# don't do debug builds on anything but i686 and x86_64 -%ifnarch i686 x86_64 -%define with_debug 0 -%endif -%endif - -# don't build noarch kernels or headers (duh) -%ifarch noarch -%define with_up 0 -%define with_headers 0 -%define with_cross_headers 0 -%define with_tools 0 -%define with_perf 0 -%define with_bpftool 0 -%define with_selftests 0 -%define with_debug 0 -%define all_arch_configs kernel-%{version}-*.config -%endif - -# sparse blows up on ppc -%ifnarch ppc64le -%define with_sparse 0 -%endif - -# zfcpdump mechanism is s390 only -%ifnarch s390x -%define with_zfcpdump 0 -%endif - -%if 0%{?fedora} -# This is not for Fedora -%define with_zfcpdump 0 -%endif - -# Per-arch tweaks - -%ifarch i686 -%define asmarch x86 -%define hdrarch i386 -%define all_arch_configs kernel-%{version}-i?86*.config -%define kernel_image arch/x86/boot/bzImage -%endif - -%ifarch x86_64 -%define asmarch x86 -%define all_arch_configs kernel-%{version}-x86_64*.config -%define kernel_image arch/x86/boot/bzImage -%endif - -%ifarch ppc64le -%define asmarch powerpc -%define hdrarch powerpc -%define make_target vmlinux -%define kernel_image vmlinux -%define kernel_image_elf 1 -%define use_vdso 0 -%define all_arch_configs kernel-%{version}-ppc64le*.config -%endif - -%ifarch s390x -%define asmarch s390 -%define hdrarch s390 -%define all_arch_configs kernel-%{version}-s390x.config -%define kernel_image arch/s390/boot/bzImage -%define vmlinux_decompressor arch/s390/boot/compressed/vmlinux -%endif - -%ifarch %{arm} -%define all_arch_configs kernel-%{version}-arm*.config -%define skip_nonpae_vdso 1 -%define asmarch arm -%define hdrarch arm -%define make_target bzImage -%define kernel_image arch/arm/boot/zImage -# http://lists.infradead.org/pipermail/linux-arm-kernel/2012-March/091404.html -%define kernel_mflags KALLSYMS_EXTRA_PASS=1 -# we only build headers/perf/tools on the base arm arches -# just like we used to only build them on i386 for x86 -%ifnarch armv7hl -%define with_headers 0 -%define with_cross_headers 0 -%endif -# These currently don't compile on armv7 -%define with_selftests 0 -%endif - -%ifarch aarch64 -%define all_arch_configs kernel-%{version}-aarch64*.config -%define asmarch arm64 -%define hdrarch arm64 -%define make_target Image.gz -%define kernel_image arch/arm64/boot/Image.gz -%endif - -# Should make listnewconfig fail if there's config options -# printed out? -%if %{nopatches} -%define with_configchecks 0 -%endif - -# To temporarily exclude an architecture from being built, add it to -# %%nobuildarches. Do _NOT_ use the ExclusiveArch: line, because if we -# don't build kernel-headers then the new build system will no longer let -# us use the previous build of that package -- it'll just be completely AWOL. -# Which is a BadThing(tm). - -# We only build kernel-headers on the following... -%if 0%{?fedora} -%define nobuildarches i386 -%else -%define nobuildarches i386 i686 %{arm} -%endif - -%ifarch %nobuildarches -# disable BuildKernel commands -%define with_up 0 -%define with_debug 0 -%define with_pae 0 -%define with_zfcpdump 0 - -%define with_debuginfo 0 -%define with_perf 0 -%define with_tools 0 -%define with_bpftool 0 -%define with_selftests 0 -%define _enable_debug_packages 0 -%endif - -# Architectures we build tools/cpupower on -%if 0%{?fedora} -%define cpupowerarchs %{ix86} x86_64 ppc64le %{arm} aarch64 -%else -%define cpupowerarchs i686 x86_64 ppc64le aarch64 -%endif - -%if 0%{?use_vdso} - -%if 0%{?skip_nonpae_vdso} -%define _use_vdso 0 -%else -%define _use_vdso 1 -%endif - -%else -%define _use_vdso 0 -%endif - -# If build of debug packages is disabled, we need to know if we want to create -# meta debug packages or not, after we define with_debug for all specific cases -# above. So this must be at the end here, after all cases of with_debug or not. -%define with_debug_meta 0 -%if !%{debugbuildsenabled} -%if %{with_debug} -%define with_debug_meta 1 -%endif -%define with_debug 0 -%endif - - -# -# Packages that need to be installed before the kernel is, because the %%post -# scripts use them. -# -%define kernel_prereq coreutils, systemd >= 203-2, /usr/bin/kernel-install -%define initrd_prereq dracut >= 027 - - -Name: kernel -License: GPLv2 and Redistributable, no modification permitted -URL: https://www.kernel.org/ -Version: %{specversion} -Release: %{pkg_release} -# DO NOT CHANGE THE 'ExclusiveArch' LINE TO TEMPORARILY EXCLUDE AN ARCHITECTURE BUILD. -# SET %%nobuildarches (ABOVE) INSTEAD -%if 0%{?fedora} -ExclusiveArch: noarch x86_64 s390x %{arm} aarch64 ppc64le -%else -ExclusiveArch: noarch i386 i686 x86_64 s390x %{arm} aarch64 ppc64le -%endif -ExclusiveOS: Linux -%ifnarch %{nobuildarches} -Requires: kernel-core-uname-r = %{KVERREL} -Requires: kernel-modules-uname-r = %{KVERREL} -%endif - - -# -# List the packages used during the kernel build -# -BuildRequires: kmod, patch, bash, coreutils, tar, git-core, which -BuildRequires: bzip2, xz, findutils, gzip, m4, perl-interpreter, perl-Carp, perl-devel, perl-generators, make, diffutils, gawk -BuildRequires: gcc, binutils, redhat-rpm-config, hmaccalc, bison, flex, gcc-c++ -BuildRequires: net-tools, hostname, bc, elfutils-devel -BuildRequires: dwarves -BuildRequires: python3-devel -BuildRequires: gcc-plugin-devel -# glibc-static is required for a consistent build environment (specifically -# CONFIG_CC_CAN_LINK_STATIC=y). -BuildRequires: glibc-static -%ifnarch %{nobuildarches} noarch -BuildRequires: bpftool -%endif -%if %{with_headers} -BuildRequires: rsync -%endif -%if %{with_doc} -BuildRequires: xmlto, asciidoc, python3-sphinx, python3-sphinx_rtd_theme -%endif -%if %{with_sparse} -BuildRequires: sparse -%endif -%if %{with_perf} -BuildRequires: zlib-devel binutils-devel newt-devel perl(ExtUtils::Embed) bison flex xz-devel -BuildRequires: audit-libs-devel -BuildRequires: java-devel -BuildRequires: libbpf-devel -BuildRequires: libbabeltrace-devel -BuildRequires: libtraceevent-devel -%ifnarch %{arm} s390x -BuildRequires: numactl-devel -%endif -%ifarch aarch64 -BuildRequires: opencsd-devel >= 1.0.0 -%endif -%endif -%if %{with_tools} -BuildRequires: gettext ncurses-devel -BuildRequires: libcap-devel libcap-ng-devel -%ifnarch s390x -BuildRequires: pciutils-devel -%endif -%ifarch i686 x86_64 -BuildRequires: libnl3-devel -%endif -%endif -%if %{with_tools} || %{signmodules} || %{signkernel} -BuildRequires: openssl-devel -%endif -%if %{with_bpftool} -BuildRequires: python3-docutils -BuildRequires: zlib-devel binutils-devel -%endif -%if %{with_selftests} -BuildRequires: clang llvm -%ifnarch %{arm} -BuildRequires: numactl-devel -%endif -BuildRequires: libcap-devel libcap-ng-devel rsync libmnl-devel -%endif -BuildConflicts: rhbuildsys(DiskFree) < 500Mb -%if %{with_debuginfo} -BuildRequires: rpm-build, elfutils -BuildConflicts: rpm < 4.13.0.1-19 -BuildConflicts: dwarves < 1.13 -# Most of these should be enabled after more investigation -%undefine _include_minidebuginfo -%undefine _find_debuginfo_dwz_opts -%undefine _unique_build_ids -%undefine _unique_debug_names -%undefine _unique_debug_srcs -%undefine _debugsource_packages -%undefine _debuginfo_subpackages -%global _find_debuginfo_opts -r -%global _missing_build_ids_terminate_build 1 -%global _no_recompute_build_ids 1 -%endif -%if %{with_kabidwchk} || %{with_kabidw_base} -BuildRequires: kabi-dw -%endif - -%if %{signkernel}%{signmodules} -BuildRequires: openssl -%if %{signkernel} -# ELN uses Fedora signing process, so exclude -%if 0%{?rhel}%{?centos} && !0%{?eln} -BuildRequires: system-sb-certs -%endif -%ifarch x86_64 aarch64 -BuildRequires: nss-tools -BuildRequires: pesign >= 0.10-4 -%endif -%endif -%endif - -%if %{with_cross} -BuildRequires: binutils-%{_build_arch}-linux-gnu, gcc-%{_build_arch}-linux-gnu -%define cross_opts CROSS_COMPILE=%{_build_arch}-linux-gnu- -%define __strip %{_build_arch}-linux-gnu-strip -%endif - -# These below are required to build man pages -%if %{with_perf} -BuildRequires: xmlto -%endif -%if %{with_perf} || %{with_tools} -BuildRequires: asciidoc -%endif - -%if %{with toolchain_clang} -BuildRequires: clang -%endif - -%if %{with clang_lto} -BuildRequires: llvm -BuildRequires: lld -%endif - -# Because this is the kernel, it's hard to get a single upstream URL -# to represent the base without needing to do a bunch of patching. This -# tarball is generated from a src-git tree. If you want to see the -# exact git commit you can run -# -# xzcat -qq ${TARBALL} | git get-tar-commit-id -Source0: linux-%{tarfile_release}.tar.xz - -Source1: Makefile.rhelver - - -# Name of the packaged file containing signing key -%ifarch ppc64le -%define signing_key_filename kernel-signing-ppc.cer -%endif -%ifarch s390x -%define signing_key_filename kernel-signing-s390.cer -%endif - -%if %{?released_kernel} - -Source10: redhatsecurebootca5.cer -Source11: redhatsecurebootca1.cer -Source12: redhatsecureboot501.cer -Source13: redhatsecureboot301.cer -Source14: secureboot_s390.cer -Source15: secureboot_ppc.cer - -%define secureboot_ca_1 %{SOURCE10} -%define secureboot_ca_0 %{SOURCE11} -%ifarch x86_64 aarch64 -%define secureboot_key_1 %{SOURCE12} -%define pesign_name_1 redhatsecureboot501 -%define secureboot_key_0 %{SOURCE13} -%define pesign_name_0 redhatsecureboot301 -%endif -%ifarch s390x -%define secureboot_key_0 %{SOURCE14} -%define pesign_name_0 redhatsecureboot302 -%endif -%ifarch ppc64le -%define secureboot_key_0 %{SOURCE15} -%define pesign_name_0 redhatsecureboot303 -%endif - -# released_kernel -%else - -Source10: redhatsecurebootca4.cer -Source11: redhatsecurebootca2.cer -Source12: redhatsecureboot401.cer -Source13: redhatsecureboot003.cer - -%define secureboot_ca_1 %{SOURCE10} -%define secureboot_ca_0 %{SOURCE11} -%define secureboot_key_1 %{SOURCE12} -%define pesign_name_1 redhatsecureboot401 -%define secureboot_key_0 %{SOURCE13} -%define pesign_name_0 redhatsecureboot003 - -# released_kernel -%endif - -Source20: mod-denylist.sh -Source21: mod-sign.sh -Source22: parallel_xz.sh - -%define modsign_cmd %{SOURCE21} - -%if 0%{?include_rhel} -Source23: x509.genkey.rhel - -Source24: kernel-aarch64-rhel.config -Source25: kernel-aarch64-debug-rhel.config -Source26: mod-extra.list.rhel - -Source27: kernel-ppc64le-rhel.config -Source28: kernel-ppc64le-debug-rhel.config -Source29: kernel-s390x-rhel.config -Source30: kernel-s390x-debug-rhel.config -Source31: kernel-s390x-zfcpdump-rhel.config -Source32: kernel-x86_64-rhel.config -Source33: kernel-x86_64-debug-rhel.config - -Source34: filter-x86_64.sh.rhel -Source35: filter-armv7hl.sh.rhel -Source37: filter-aarch64.sh.rhel -Source38: filter-ppc64le.sh.rhel -Source39: filter-s390x.sh.rhel -Source40: filter-modules.sh.rhel - -Source41: x509.genkey.centos -%endif - -%if 0%{?include_fedora} -Source50: x509.genkey.fedora -Source51: mod-extra.list.fedora - -Source52: kernel-aarch64-fedora.config -Source53: kernel-aarch64-debug-fedora.config -Source54: kernel-armv7hl-fedora.config -Source55: kernel-armv7hl-debug-fedora.config -Source56: kernel-armv7hl-lpae-fedora.config -Source57: kernel-armv7hl-lpae-debug-fedora.config -Source60: kernel-ppc64le-fedora.config -Source61: kernel-ppc64le-debug-fedora.config -Source62: kernel-s390x-fedora.config -Source63: kernel-s390x-debug-fedora.config -Source64: kernel-x86_64-fedora.config -Source65: kernel-x86_64-debug-fedora.config - -Source67: filter-x86_64.sh.fedora -Source68: filter-armv7hl.sh.fedora -Source70: filter-aarch64.sh.fedora -Source71: filter-ppc64le.sh.fedora -Source72: filter-s390x.sh.fedora -Source73: filter-modules.sh.fedora -%endif - -Source75: partial-kgcov-snip.config -Source80: generate_all_configs.sh -Source81: process_configs.sh - -Source82: update_scripts.sh - -Source84: mod-internal.list - -Source100: rheldup3.x509 -Source101: rhelkpatch1.x509 - -Source200: check-kabi - -Source201: Module.kabi_aarch64 -Source202: Module.kabi_ppc64le -Source203: Module.kabi_s390x -Source204: Module.kabi_x86_64 - -Source210: Module.kabi_dup_aarch64 -Source211: Module.kabi_dup_ppc64le -Source212: Module.kabi_dup_s390x -Source213: Module.kabi_dup_x86_64 - -Source300: kernel-abi-stablelists-%{specversion}-%{pkgrelease}.tar.bz2 -Source301: kernel-kabi-dw-%{specversion}-%{pkgrelease}.tar.bz2 - -# Sources for kernel-tools -Source2000: cpupower.service -Source2001: cpupower.config -Source2002: kvm_stat.logrotate - -# Some people enjoy building customized kernels from the dist-git in Fedora and -# use this to override configuration options. One day they may all use the -# source tree, but in the mean time we carry this to support the legacy workflow -Source3000: merge.pl -Source3001: kernel-local -%if %{patchlist_changelog} -Source3002: Patchlist.changelog -%endif - -Source4000: README.rst -Source4001: rpminspect.yaml -Source4002: gating.yaml - -## Patches needed for building this package - -%if !%{nopatches} - -Patch1: patch-%{patchversion}-redhat.patch -%endif - -# empty final patch to facilitate testing of kernel patches -Patch999999: linux-kernel-test.patch - -# END OF PATCH DEFINITIONS - -%description -The kernel meta package - -# -# This macro does requires, provides, conflicts, obsoletes for a kernel package. -# %%kernel_reqprovconf <subpackage> -# It uses any kernel_<subpackage>_conflicts and kernel_<subpackage>_obsoletes -# macros defined above. -# -%define kernel_reqprovconf \ -Provides: kernel = %{specversion}-%{pkg_release}\ -Provides: kernel-%{_target_cpu} = %{specversion}-%{pkg_release}%{?1:+%{1}}\ -Provides: kernel-drm-nouveau = 16\ -Provides: kernel-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires(pre): %{kernel_prereq}\ -Requires(pre): %{initrd_prereq}\ -Requires(pre): ((linux-firmware >= 20150904-56.git6ebf5d57) if linux-firmware)\ -Recommends: linux-firmware\ -Requires(preun): systemd >= 200\ -Conflicts: xfsprogs < 4.3.0-1\ -Conflicts: xorg-x11-drv-vmmouse < 13.0.99\ -%{expand:%%{?kernel%{?1:_%{1}}_conflicts:Conflicts: %%{kernel%{?1:_%{1}}_conflicts}}}\ -%{expand:%%{?kernel%{?1:_%{1}}_obsoletes:Obsoletes: %%{kernel%{?1:_%{1}}_obsoletes}}}\ -%{expand:%%{?kernel%{?1:_%{1}}_provides:Provides: %%{kernel%{?1:_%{1}}_provides}}}\ -# We can't let RPM do the dependencies automatic because it'll then pick up\ -# a correct but undesirable perl dependency from the module headers which\ -# isn't required for the kernel proper to function\ -AutoReq: no\ -AutoProv: yes\ -%{nil} - - -%package doc -Summary: Various documentation bits found in the kernel source -Group: Documentation -%description doc -This package contains documentation files from the kernel -source. Various bits of information about the Linux kernel and the -device drivers shipped with it are documented in these files. - -You'll want to install this package if you need a reference to the -options that can be passed to Linux kernel modules at load time. - - -%package headers -Summary: Header files for the Linux kernel for use by glibc -Obsoletes: glibc-kernheaders < 3.0-46 -Provides: glibc-kernheaders = 3.0-46 -%description headers -Kernel-headers includes the C header files that specify the interface -between the Linux kernel and userspace libraries and programs. The -header files define structures and constants that are needed for -building most standard programs and are also needed for rebuilding the -glibc package. - -%package cross-headers -Summary: Header files for the Linux kernel for use by cross-glibc -%description cross-headers -Kernel-cross-headers includes the C header files that specify the interface -between the Linux kernel and userspace libraries and programs. The -header files define structures and constants that are needed for -building most standard programs and are also needed for rebuilding the -cross-glibc package. - - -%package debuginfo-common-%{_target_cpu} -Summary: Kernel source files used by %{name}-debuginfo packages -Provides: installonlypkg(kernel) -%description debuginfo-common-%{_target_cpu} -This package is required by %{name}-debuginfo subpackages. -It provides the kernel source files common to all builds. - -%if %{with_perf} -%package -n perf -Summary: Performance monitoring for the Linux kernel -Requires: bzip2 -License: GPLv2 -%description -n perf -This package contains the perf tool, which enables performance monitoring -of the Linux kernel. - -%package -n perf-debuginfo -Summary: Debug information for package perf -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release} -AutoReqProv: no -%description -n perf-debuginfo -This package provides debug information for the perf package. - -# Note that this pattern only works right to match the .build-id -# symlinks because of the trailing nonmatching alternation and -# the leading .*, because of find-debuginfo.sh's buggy handling -# of matching the pattern against the symlinks file. -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{_bindir}/perf(\.debug)?|.*%%{_libexecdir}/perf-core/.*|.*%%{_libdir}/libperf-jvmti.so(\.debug)?|XXX' -o perf-debuginfo.list} - -%package -n python3-perf -Summary: Python bindings for apps which will manipulate perf events -%description -n python3-perf -The python3-perf package contains a module that permits applications -written in the Python programming language to use the interface -to manipulate perf events. - -%package -n python3-perf-debuginfo -Summary: Debug information for package perf python bindings -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release} -AutoReqProv: no -%description -n python3-perf-debuginfo -This package provides debug information for the perf python bindings. - -# the python_sitearch macro should already be defined from above -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{python3_sitearch}/perf.*so(\.debug)?|XXX' -o python3-perf-debuginfo.list} - -# with_perf -%endif - -%if %{with_tools} -%package -n kernel-tools -Summary: Assortment of tools for the Linux kernel -License: GPLv2 -%ifarch %{cpupowerarchs} -Provides: cpupowerutils = 1:009-0.6.p1 -Obsoletes: cpupowerutils < 1:009-0.6.p1 -Provides: cpufreq-utils = 1:009-0.6.p1 -Provides: cpufrequtils = 1:009-0.6.p1 -Obsoletes: cpufreq-utils < 1:009-0.6.p1 -Obsoletes: cpufrequtils < 1:009-0.6.p1 -Obsoletes: cpuspeed < 1:1.5-16 -Requires: kernel-tools-libs = %{version}-%{release} -%endif -%define __requires_exclude ^%{_bindir}/python -%description -n kernel-tools -This package contains the tools/ directory from the kernel source -and the supporting documentation. - -%package -n kernel-tools-libs -Summary: Libraries for the kernels-tools -License: GPLv2 -%description -n kernel-tools-libs -This package contains the libraries built from the tools/ directory -from the kernel source. - -%package -n kernel-tools-libs-devel -Summary: Assortment of tools for the Linux kernel -License: GPLv2 -Requires: kernel-tools = %{version}-%{release} -%ifarch %{cpupowerarchs} -Provides: cpupowerutils-devel = 1:009-0.6.p1 -Obsoletes: cpupowerutils-devel < 1:009-0.6.p1 -%endif -Requires: kernel-tools-libs = %{version}-%{release} -Provides: kernel-tools-devel -%description -n kernel-tools-libs-devel -This package contains the development files for the tools/ directory from -the kernel source. - -%package -n kernel-tools-debuginfo -Summary: Debug information for package kernel-tools -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release} -AutoReqProv: no -%description -n kernel-tools-debuginfo -This package provides debug information for package kernel-tools. - -# Note that this pattern only works right to match the .build-id -# symlinks because of the trailing nonmatching alternation and -# the leading .*, because of find-debuginfo.sh's buggy handling -# of matching the pattern against the symlinks file. -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{_bindir}/centrino-decode(\.debug)?|.*%%{_bindir}/powernow-k8-decode(\.debug)?|.*%%{_bindir}/cpupower(\.debug)?|.*%%{_libdir}/libcpupower.*|.*%%{_bindir}/turbostat(\.debug)?|.*%%{_bindir}/x86_energy_perf_policy(\.debug)?|.*%%{_bindir}/tmon(\.debug)?|.*%%{_bindir}/lsgpio(\.debug)?|.*%%{_bindir}/gpio-hammer(\.debug)?|.*%%{_bindir}/gpio-event-mon(\.debug)?|.*%%{_bindir}/gpio-watch(\.debug)?|.*%%{_bindir}/iio_event_monitor(\.debug)?|.*%%{_bindir}/iio_generic_buffer(\.debug)?|.*%%{_bindir}/lsiio(\.debug)?|.*%%{_bindir}/intel-speed-select(\.debug)?|.*%%{_bindir}/page_owner_sort(\.debug)?|.*%%{_bindir}/slabinfo(\.debug)?|.*%%{_sbindir}/intel_sdsi(\.debug)?|XXX' -o kernel-tools-debuginfo.list} - -# with_tools -%endif - -%if %{with_bpftool} - -%package -n bpftool -Summary: Inspection and simple manipulation of eBPF programs and maps -License: GPLv2 -%description -n bpftool -This package contains the bpftool, which allows inspection and simple -manipulation of eBPF programs and maps. - -%package -n bpftool-debuginfo -Summary: Debug information for package bpftool -Group: Development/Debug -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release} -AutoReqProv: no -%description -n bpftool-debuginfo -This package provides debug information for the bpftool package. - -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{_sbindir}/bpftool(\.debug)?|XXX' -o bpftool-debuginfo.list} - -# with_bpftool -%endif - -%if %{with_selftests} - -%package selftests-internal -Summary: Kernel samples and selftests -License: GPLv2 -Requires: binutils, bpftool, iproute-tc, nmap-ncat, python3 -%description selftests-internal -Kernel sample programs and selftests. - -# Note that this pattern only works right to match the .build-id -# symlinks because of the trailing nonmatching alternation and -# the leading .*, because of find-debuginfo.sh's buggy handling -# of matching the pattern against the symlinks file. -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{_libexecdir}/(ksamples|kselftests)/.*|XXX' -o selftests-debuginfo.list} - -# with_selftests -%endif - -%if %{with_gcov} -%package gcov -Summary: gcov graph and source files for coverage data collection. -%description gcov -kernel-gcov includes the gcov graph and source files for gcov coverage collection. -%endif - -%package -n kernel-abi-stablelists -Summary: The Red Hat Enterprise Linux kernel ABI symbol stablelists -AutoReqProv: no -%description -n kernel-abi-stablelists -The kABI package contains information pertaining to the Red Hat Enterprise -Linux kernel ABI, including lists of kernel symbols that are needed by -external Linux kernel modules, and a yum plugin to aid enforcement. - -%if %{with_kabidw_base} -%package kernel-kabidw-base-internal -Summary: The baseline dataset for kABI verification using DWARF data -Group: System Environment/Kernel -AutoReqProv: no -%description kernel-kabidw-base-internal -The package contains data describing the current ABI of the Red Hat Enterprise -Linux kernel, suitable for the kabi-dw tool. -%endif - -# -# This macro creates a kernel-<subpackage>-debuginfo package. -# %%kernel_debuginfo_package <subpackage> -# -# Explanation of the find_debuginfo_opts: We build multiple kernels (debug -# pae etc.) so the regex filters those kernels appropriately. We also -# have to package several binaries as part of kernel-devel but getting -# unique build-ids is tricky for these userspace binaries. We don't really -# care about debugging those so we just filter those out and remove it. -%define kernel_debuginfo_package() \ -%package %{?1:%{1}-}debuginfo\ -Summary: Debug information for package %{name}%{?1:-%{1}}\ -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release}\ -Provides: %{name}%{?1:-%{1}}-debuginfo-%{_target_cpu} = %{version}-%{release}\ -Provides: installonlypkg(kernel)\ -AutoReqProv: no\ -%description %{?1:%{1}-}debuginfo\ -This package provides debug information for package %{name}%{?1:-%{1}}.\ -This is required to use SystemTap with %{name}%{?1:-%{1}}-%{KVERREL}.\ -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} --keep-section '.BTF' -p '.*\/usr\/src\/kernels/.*|XXX' -o ignored-debuginfo.list -p '/.*/%%{KVERREL_RE}%{?1:[+]%{1}}/.*|/.*%%{KVERREL_RE}%{?1:\+%{1}}(\.debug)?' -o debuginfo%{?1}.list}\ -%{nil} - -# -# This macro creates a kernel-<subpackage>-devel package. -# %%kernel_devel_package [-m] <subpackage> <pretty-name> -# -%define kernel_devel_package(m) \ -%package %{?1:%{1}-}devel\ -Summary: Development package for building kernel modules to match the %{?2:%{2} }kernel\ -Provides: kernel%{?1:-%{1}}-devel-%{_target_cpu} = %{version}-%{release}\ -Provides: kernel-devel-%{_target_cpu} = %{version}-%{release}%{?1:+%{1}}\ -Provides: kernel-devel-uname-r = %{KVERREL}%{?1:+%{1}}\ -Provides: installonlypkg(kernel)\ -AutoReqProv: no\ -Requires(pre): findutils\ -Requires: findutils\ -Requires: perl-interpreter\ -Requires: openssl-devel\ -Requires: elfutils-libelf-devel\ -Requires: bison\ -Requires: flex\ -Requires: make\ -Requires: gcc\ -%if %{-m:1}%{!-m:0}\ -Requires: kernel-devel-uname-r = %{KVERREL}\ -%endif\ -%description %{?1:%{1}-}devel\ -This package provides kernel headers and makefiles sufficient to build modules\ -against the %{?2:%{2} }kernel package.\ -%{nil} - -# -# This macro creates an empty kernel-<subpackage>-devel-matched package that -# requires both the core and devel packages locked on the same version. -# %%kernel_devel_matched_package [-m] <subpackage> <pretty-name> -# -%define kernel_devel_matched_package(m) \ -%package %{?1:%{1}-}devel-matched\ -Summary: Meta package to install matching core and devel packages for a given %{?2:%{2} }kernel\ -Requires: kernel%{?1:-%{1}}-devel = %{version}-%{release}\ -Requires: kernel%{?1:-%{1}}-core = %{version}-%{release}\ -%description %{?1:%{1}-}devel-matched\ -This meta package is used to install matching core and devel packages for a given %{?2:%{2} }kernel.\ -%{nil} - -# -# kernel-<variant>-ipaclones-internal package -# -%define kernel_ipaclones_package() \ -%package %{?1:%{1}-}ipaclones-internal\ -Summary: *.ipa-clones files generated by -fdump-ipa-clones for kernel%{?1:-%{1}}\ -Group: System Environment/Kernel\ -AutoReqProv: no\ -%description %{?1:%{1}-}ipaclones-internal\ -This package provides *.ipa-clones files.\ -%{nil} - -# -# This macro creates a kernel-<subpackage>-modules-internal package. -# %%kernel_modules_internal_package <subpackage> <pretty-name> -# -%define kernel_modules_internal_package() \ -%package %{?1:%{1}-}modules-internal\ -Summary: Extra kernel modules to match the %{?2:%{2} }kernel\ -Group: System Environment/Kernel\ -Provides: kernel%{?1:-%{1}}-modules-internal-%{_target_cpu} = %{version}-%{release}\ -Provides: kernel%{?1:-%{1}}-modules-internal-%{_target_cpu} = %{version}-%{release}%{?1:+%{1}}\ -Provides: kernel%{?1:-%{1}}-modules-internal = %{version}-%{release}%{?1:+%{1}}\ -Provides: installonlypkg(kernel-module)\ -Provides: kernel%{?1:-%{1}}-modules-internal-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel%{?1:-%{1}}-modules-uname-r = %{KVERREL}%{?1:+%{1}}\ -AutoReq: no\ -AutoProv: yes\ -%description %{?1:%{1}-}modules-internal\ -This package provides kernel modules for the %{?2:%{2} }kernel package for Red Hat internal usage.\ -%{nil} - -# -# This macro creates a kernel-<subpackage>-modules-extra package. -# %%kernel_modules_extra_package [-m] <subpackage> <pretty-name> -# -%define kernel_modules_extra_package(m) \ -%package %{?1:%{1}-}modules-extra\ -Summary: Extra kernel modules to match the %{?2:%{2} }kernel\ -Provides: kernel%{?1:-%{1}}-modules-extra-%{_target_cpu} = %{version}-%{release}\ -Provides: kernel%{?1:-%{1}}-modules-extra-%{_target_cpu} = %{version}-%{release}%{?1:+%{1}}\ -Provides: kernel%{?1:-%{1}}-modules-extra = %{version}-%{release}%{?1:+%{1}}\ -Provides: installonlypkg(kernel-module)\ -Provides: kernel%{?1:-%{1}}-modules-extra-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel%{?1:-%{1}}-modules-uname-r = %{KVERREL}%{?1:+%{1}}\ -%if %{-m:1}%{!-m:0}\ -Requires: kernel-modules-extra-uname-r = %{KVERREL}\ -%endif\ -AutoReq: no\ -AutoProv: yes\ -%description %{?1:%{1}-}modules-extra\ -This package provides less commonly used kernel modules for the %{?2:%{2} }kernel package.\ -%{nil} - -# -# This macro creates a kernel-<subpackage>-modules package. -# %%kernel_modules_package [-m] <subpackage> <pretty-name> -# -%define kernel_modules_package(m) \ -%package %{?1:%{1}-}modules\ -Summary: kernel modules to match the %{?2:%{2}-}core kernel\ -Provides: kernel%{?1:-%{1}}-modules-%{_target_cpu} = %{version}-%{release}\ -Provides: kernel-modules-%{_target_cpu} = %{version}-%{release}%{?1:+%{1}}\ -Provides: kernel-modules = %{version}-%{release}%{?1:+%{1}}\ -Provides: installonlypkg(kernel-module)\ -Provides: kernel%{?1:-%{1}}-modules-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel-uname-r = %{KVERREL}%{?1:+%{1}}\ -%if %{-m:1}%{!-m:0}\ -Requires: kernel-modules-uname-r = %{KVERREL}\ -%endif\ -AutoReq: no\ -AutoProv: yes\ -%description %{?1:%{1}-}modules\ -This package provides commonly used kernel modules for the %{?2:%{2}-}core kernel package.\ -%{nil} - -# -# this macro creates a kernel-<subpackage> meta package. -# %%kernel_meta_package <subpackage> -# -%define kernel_meta_package() \ -%package %{1}\ -summary: kernel meta-package for the %{1} kernel\ -Requires: kernel-%{1}-core-uname-r = %{KVERREL}+%{1}\ -Requires: kernel-%{1}-modules-uname-r = %{KVERREL}+%{1}\ -Provides: installonlypkg(kernel)\ -%description %{1}\ -The meta-package for the %{1} kernel\ -%{nil} - -# -# This macro creates a kernel-<subpackage> and its -devel and -debuginfo too. -# %%define variant_summary The Linux kernel compiled for <configuration> -# %%kernel_variant_package [-n <pretty-name>] [-m] <subpackage> -# -%define kernel_variant_package(n:m) \ -%package %{?1:%{1}-}core\ -Summary: %{variant_summary}\ -Provides: kernel-%{?1:%{1}-}core-uname-r = %{KVERREL}%{?1:+%{1}}\ -Provides: installonlypkg(kernel)\ -%if %{-m:1}%{!-m:0}\ -Requires: kernel-core-uname-r = %{KVERREL}\ -%endif\ -%{expand:%%kernel_reqprovconf}\ -%if %{?1:1} %{!?1:0} \ -%{expand:%%kernel_meta_package %{?1:%{1}}}\ -%endif\ -%{expand:%%kernel_devel_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}} %{-m:%{-m}}}\ -%{expand:%%kernel_devel_matched_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}} %{-m:%{-m}}}\ -%{expand:%%kernel_modules_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}} %{-m:%{-m}}}\ -%{expand:%%kernel_modules_extra_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}} %{-m:%{-m}}}\ -%if %{-m:0}%{!-m:1}\ -%{expand:%%kernel_modules_internal_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}}}\ -%{expand:%%kernel_debuginfo_package %{?1:%{1}}}\ -%endif\ -%{nil} - -# Now, each variant package. - -%if %{with_pae} -%define variant_summary The Linux kernel compiled for Cortex-A15 -%kernel_variant_package lpae -%description lpae-core -This package includes a version of the Linux kernel with support for -Cortex-A15 devices with LPAE and HW virtualisation support -%endif - -%if %{with_zfcpdump} -%define variant_summary The Linux kernel compiled for zfcpdump usage -%kernel_variant_package zfcpdump -%description zfcpdump-core -The kernel package contains the Linux kernel (vmlinuz) for use by the -zfcpdump infrastructure. -# with_zfcpdump -%endif - -%define variant_summary The Linux kernel compiled with extra debugging enabled -%if !%{debugbuildsenabled} -%kernel_variant_package -m debug -%else -%kernel_variant_package debug -%endif -%description debug-core -The kernel package contains the Linux kernel (vmlinuz), the core of any -Linux operating system. The kernel handles the basic functions -of the operating system: memory allocation, process allocation, device -input and output, etc. - -This variant of the kernel has numerous debugging options enabled. -It should only be installed when trying to gather additional information -on kernel bugs, as some of these options impact performance noticably. - -# And finally the main -core package - -%define variant_summary The Linux kernel -%kernel_variant_package -%description core -The kernel package contains the Linux kernel (vmlinuz), the core of any -Linux operating system. The kernel handles the basic functions -of the operating system: memory allocation, process allocation, device -input and output, etc. - -%if %{with_ipaclones} -%kernel_ipaclones_package -%endif - -%prep -# do a few sanity-checks for --with *only builds -%if %{with_baseonly} -%if !%{with_up} -echo "Cannot build --with baseonly, up build is disabled" -exit 1 -%endif -%endif - -# more sanity checking; do it quietly -if [ "%{patches}" != "%%{patches}" ] ; then - for patch in %{patches} ; do - if [ ! -f $patch ] ; then - echo "ERROR: Patch ${patch##/*/} listed in specfile but is missing" - exit 1 - fi - done -fi 2>/dev/null - -patch_command='patch -p1 -F1 -s' -ApplyPatch() -{ - local patch=$1 - shift - if [ ! -f $RPM_SOURCE_DIR/$patch ]; then - exit 1 - fi - if ! grep -E "^Patch[0-9]+: $patch\$" %{_specdir}/${RPM_PACKAGE_NAME}.spec ; then - if [ "${patch:0:8}" != "patch-%{kversion}." ] ; then - echo "ERROR: Patch $patch not listed as a source patch in specfile" - exit 1 - fi - fi 2>/dev/null - case "$patch" in - *.bz2) bunzip2 < "$RPM_SOURCE_DIR/$patch" | $patch_command ${1+"$@"} ;; - *.gz) gunzip < "$RPM_SOURCE_DIR/$patch" | $patch_command ${1+"$@"} ;; - *.xz) unxz < "$RPM_SOURCE_DIR/$patch" | $patch_command ${1+"$@"} ;; - *) $patch_command ${1+"$@"} < "$RPM_SOURCE_DIR/$patch" ;; - esac -} - -# don't apply patch if it's empty -ApplyOptionalPatch() -{ - local patch=$1 - shift - if [ ! -f $RPM_SOURCE_DIR/$patch ]; then - exit 1 - fi - local C=$(wc -l $RPM_SOURCE_DIR/$patch | awk '{print $1}') - if [ "$C" -gt 9 ]; then - ApplyPatch $patch ${1+"$@"} - fi -} - -%setup -q -n kernel-%{tarfile_release} -c -mv linux-%{tarfile_release} linux-%{KVERREL} - -cd linux-%{KVERREL} -cp -a %{SOURCE1} . - -%if !%{nopatches} - -ApplyOptionalPatch patch-%{patchversion}-redhat.patch -%endif - -ApplyOptionalPatch linux-kernel-test.patch - -# END OF PATCH APPLICATIONS - -# Any further pre-build tree manipulations happen here. - -chmod +x scripts/checkpatch.pl -mv COPYING COPYING-%{version}-%{release} - -# This Prevents scripts/setlocalversion from mucking with our version numbers. -touch .scmversion - -# Mangle /usr/bin/python shebangs to /usr/bin/python3 -# Mangle all Python shebangs to be Python 3 explicitly -# -p preserves timestamps -# -n prevents creating ~backup files -# -i specifies the interpreter for the shebang -# This fixes errors such as -# *** ERROR: ambiguous python shebang in /usr/bin/kvm_stat: #!/usr/bin/python. Change it to python3 (or python2) explicitly. -# We patch all sources below for which we got a report/error. -pathfix.py -i "%{__python3} %{py3_shbang_opts}" -p -n \ - tools/kvm/kvm_stat/kvm_stat \ - scripts/show_delta \ - scripts/diffconfig \ - scripts/bloat-o-meter \ - scripts/jobserver-exec \ - tools \ - Documentation \ - scripts/clang-tools - -# only deal with configs if we are going to build for the arch -%ifnarch %nobuildarches - -if [ -L configs ]; then - rm -f configs -fi -mkdir configs -cd configs - -# Drop some necessary files from the source dir into the buildroot -cp $RPM_SOURCE_DIR/kernel-*.config . -cp %{SOURCE80} . -# merge.pl -cp %{SOURCE3000} . -# kernel-local -cp %{SOURCE3001} . -FLAVOR=%{primary_target} SPECVERSION=%{version} ./generate_all_configs.sh %{debugbuildsenabled} - -# Merge in any user-provided local config option changes -%ifnarch %nobuildarches -for i in %{all_arch_configs} -do - mv $i $i.tmp - ./merge.pl %{SOURCE3001} $i.tmp > $i -%if %{with_gcov} - echo "Merging with gcov options" - cat %{SOURCE75} - mv $i $i.tmp - ./merge.pl %{SOURCE75} $i.tmp > $i -%endif - rm $i.tmp -done -%endif - -%if %{with clang_lto} -for i in *aarch64*.config *x86_64*.config; do - sed -i 's/# CONFIG_LTO_CLANG_THIN is not set/CONFIG_LTO_CLANG_THIN=y/' $i - sed -i 's/CONFIG_LTO_NONE=y/# CONFIG_LTO_NONE is not set/' $i -done -%endif - -# Add DUP and kpatch certificates to system trusted keys for RHEL -%if 0%{?rhel} -%if %{signkernel}%{signmodules} -openssl x509 -inform der -in %{SOURCE100} -out rheldup3.pem -openssl x509 -inform der -in %{SOURCE101} -out rhelkpatch1.pem -cat rheldup3.pem rhelkpatch1.pem > ../certs/rhel.pem -%ifarch s390x ppc64le -openssl x509 -inform der -in %{secureboot_ca_0} -out secureboot.pem -cat secureboot.pem >> ../certs/rhel.pem -%endif -for i in *.config; do - sed -i 's@CONFIG_SYSTEM_TRUSTED_KEYS=""@CONFIG_SYSTEM_TRUSTED_KEYS="certs/rhel.pem"@' $i -done -%endif -%endif - -cp %{SOURCE81} . -OPTS="" -%if %{with_configchecks} - OPTS="$OPTS -w -n -c" -%endif -%if %{with clang_lto} -for opt in %{clang_make_opts}; do - OPTS="$OPTS -m $opt" -done -%endif -RHJOBS=$RPM_BUILD_NCPUS PACKAGE_NAME=kernel ./process_configs.sh $OPTS ${specversion} - -cp %{SOURCE82} . -RPM_SOURCE_DIR=$RPM_SOURCE_DIR ./update_scripts.sh %{primary_target} - -# We may want to override files from the primary target in case of building -# against a flavour of it (eg. centos not rhel), thus override it here if -# necessary -if [ "%{primary_target}" == "rhel" ]; then -%if 0%{?centos} - echo "Updating scripts/sources to centos version" - RPM_SOURCE_DIR=$RPM_SOURCE_DIR ./update_scripts.sh centos -%else - echo "Not updating scripts/sources to centos version" -%endif -fi - -# end of kernel config -%endif - -cd .. -# # End of Configs stuff - -# get rid of unwanted files resulting from patch fuzz -find . \( -name "*.orig" -o -name "*~" \) -delete >/dev/null - -# remove unnecessary SCM files -find . -name .gitignore -delete >/dev/null - -cd .. - -### -### build -### -%build - -%if %{with_sparse} -%define sparse_mflags C=1 -%endif - -cp_vmlinux() -{ - eu-strip --remove-comment -o "$2" "$1" -} - -# Note we need to disable these flags for cross builds because the flags -# from redhat-rpm-config assume that host == target so target arch -# flags cause issues with the host compiler. -%if !%{with_cross} -%define build_hostcflags %{?build_cflags} -%define build_hostldflags %{?build_ldflags} -%endif - -%define make %{__make} %{?cross_opts} %{?make_opts} HOSTCFLAGS="%{?build_hostcflags}" HOSTLDFLAGS="%{?build_hostldflags}" - -InitBuildVars() { - # Initialize the kernel .config file and create some variables that are - # needed for the actual build process. - - Variant=$1 - - # Pick the right kernel config file - Config=kernel-%{version}-%{_target_cpu}${Variant:+-${Variant}}.config - DevelDir=/usr/src/kernels/%{KVERREL}${Variant:++${Variant}} - - KernelVer=%{version}-%{release}.%{_target_cpu}${Variant:++${Variant}} - - # make sure EXTRAVERSION says what we want it to say - # Trim the release if this is a CI build, since KERNELVERSION is limited to 64 characters - ShortRel=$(perl -e "print \"%{release}\" =~ s/\.pr\.[0-9A-Fa-f]{32}//r") - perl -p -i -e "s/^EXTRAVERSION.*/EXTRAVERSION = -${ShortRel}.%{_target_cpu}${Variant:++${Variant}}/" Makefile - - # if pre-rc1 devel kernel, must fix up PATCHLEVEL for our versioning scheme - # if we are post rc1 this should match anyway so this won't matter - perl -p -i -e 's/^PATCHLEVEL.*/PATCHLEVEL = %{patchlevel}/' Makefile - - %{make} %{?_smp_mflags} mrproper - cp configs/$Config .config - - %if %{signkernel}%{signmodules} - cp configs/x509.genkey certs/. - %endif - - Arch=`head -1 .config | cut -b 3-` - echo USING ARCH=$Arch - - KCFLAGS="%{?kcflags}" - - # add kpatch flags for base kernel - if [ "$Variant" == "" ]; then - KCFLAGS="$KCFLAGS %{?kpatch_kcflags}" - fi -} - -BuildKernel() { - MakeTarget=$1 - KernelImage=$2 - DoVDSO=$3 - Variant=$4 - InstallName=${5:-vmlinuz} - - DoModules=1 - if [ "$Variant" = "zfcpdump" ]; then - DoModules=0 - fi - - # When the bootable image is just the ELF kernel, strip it. - # We already copy the unstripped file into the debuginfo package. - if [ "$KernelImage" = vmlinux ]; then - CopyKernel=cp_vmlinux - else - CopyKernel=cp - fi - - InitBuildVars $Variant - - echo BUILDING A KERNEL FOR ${Variant} %{_target_cpu}... - - %{make} ARCH=$Arch olddefconfig >/dev/null - - # This ensures build-ids are unique to allow parallel debuginfo - perl -p -i -e "s/^CONFIG_BUILD_SALT.*/CONFIG_BUILD_SALT=\"%{KVERREL}\"/" .config - %{make} ARCH=$Arch KCFLAGS="$KCFLAGS" WITH_GCOV="%{?with_gcov}" %{?_smp_mflags} $MakeTarget %{?sparse_mflags} %{?kernel_mflags} - if [ $DoModules -eq 1 ]; then - %{make} ARCH=$Arch KCFLAGS="$KCFLAGS" WITH_GCOV="%{?with_gcov}" %{?_smp_mflags} modules %{?sparse_mflags} || exit 1 - fi - - mkdir -p $RPM_BUILD_ROOT/%{image_install_path} - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/systemtap -%if %{with_debuginfo} - mkdir -p $RPM_BUILD_ROOT%{debuginfodir}/%{image_install_path} -%endif - -%ifarch %{arm} aarch64 - %{make} ARCH=$Arch dtbs INSTALL_DTBS_PATH=$RPM_BUILD_ROOT/%{image_install_path}/dtb-$KernelVer - %{make} ARCH=$Arch dtbs_install INSTALL_DTBS_PATH=$RPM_BUILD_ROOT/%{image_install_path}/dtb-$KernelVer - cp -r $RPM_BUILD_ROOT/%{image_install_path}/dtb-$KernelVer $RPM_BUILD_ROOT/lib/modules/$KernelVer/dtb - find arch/$Arch/boot/dts -name '*.dtb' -type f -delete -%endif - - # Start installing the results - install -m 644 .config $RPM_BUILD_ROOT/boot/config-$KernelVer - install -m 644 .config $RPM_BUILD_ROOT/lib/modules/$KernelVer/config - install -m 644 System.map $RPM_BUILD_ROOT/boot/System.map-$KernelVer - install -m 644 System.map $RPM_BUILD_ROOT/lib/modules/$KernelVer/System.map - - # We estimate the size of the initramfs because rpm needs to take this size - # into consideration when performing disk space calculations. (See bz #530778) - dd if=/dev/zero of=$RPM_BUILD_ROOT/boot/initramfs-$KernelVer.img bs=1M count=20 - - if [ -f arch/$Arch/boot/zImage.stub ]; then - cp arch/$Arch/boot/zImage.stub $RPM_BUILD_ROOT/%{image_install_path}/zImage.stub-$KernelVer || : - cp arch/$Arch/boot/zImage.stub $RPM_BUILD_ROOT/lib/modules/$KernelVer/zImage.stub-$KernelVer || : - fi - - %if %{signkernel} - if [ "$KernelImage" = vmlinux ]; then - # We can't strip and sign $KernelImage in place, because - # we need to preserve original vmlinux for debuginfo. - # Use a copy for signing. - $CopyKernel $KernelImage $KernelImage.tosign - KernelImage=$KernelImage.tosign - CopyKernel=cp - fi - - # Sign the image if we're using EFI - # aarch64 kernels are gziped EFI images - KernelExtension=${KernelImage##*.} - if [ "$KernelExtension" == "gz" ]; then - SignImage=${KernelImage%.*} - else - SignImage=$KernelImage - fi - - %ifarch x86_64 aarch64 - %pesign -s -i $SignImage -o vmlinuz.tmp -a %{secureboot_ca_0} -c %{secureboot_key_0} -n %{pesign_name_0} - %pesign -s -i vmlinuz.tmp -o vmlinuz.signed -a %{secureboot_ca_1} -c %{secureboot_key_1} -n %{pesign_name_1} - rm vmlinuz.tmp - %endif - %ifarch s390x ppc64le - if [ -x /usr/bin/rpm-sign ]; then - rpm-sign --key "%{pesign_name_0}" --lkmsign $SignImage --output vmlinuz.signed - elif [ $DoModules -eq 1 ]; then - chmod +x scripts/sign-file - ./scripts/sign-file -p sha256 certs/signing_key.pem certs/signing_key.x509 $SignImage vmlinuz.signed - else - mv $SignImage vmlinuz.signed - fi - %endif - - if [ ! -s vmlinuz.signed ]; then - echo "pesigning failed" - exit 1 - fi - mv vmlinuz.signed $SignImage - if [ "$KernelExtension" == "gz" ]; then - gzip -f9 $SignImage - fi - # signkernel - %endif - - $CopyKernel $KernelImage \ - $RPM_BUILD_ROOT/%{image_install_path}/$InstallName-$KernelVer - chmod 755 $RPM_BUILD_ROOT/%{image_install_path}/$InstallName-$KernelVer - cp $RPM_BUILD_ROOT/%{image_install_path}/$InstallName-$KernelVer $RPM_BUILD_ROOT/lib/modules/$KernelVer/$InstallName - - # hmac sign the kernel for FIPS - echo "Creating hmac file: $RPM_BUILD_ROOT/%{image_install_path}/.vmlinuz-$KernelVer.hmac" - ls -l $RPM_BUILD_ROOT/%{image_install_path}/$InstallName-$KernelVer - (cd $RPM_BUILD_ROOT/%{image_install_path} && sha512hmac $InstallName-$KernelVer) > $RPM_BUILD_ROOT/%{image_install_path}/.vmlinuz-$KernelVer.hmac; - cp $RPM_BUILD_ROOT/%{image_install_path}/.vmlinuz-$KernelVer.hmac $RPM_BUILD_ROOT/lib/modules/$KernelVer/.vmlinuz.hmac - - if [ $DoModules -eq 1 ]; then - # Override $(mod-fw) because we don't want it to install any firmware - # we'll get it from the linux-firmware package and we don't want conflicts - %{make} %{?_smp_mflags} ARCH=$Arch INSTALL_MOD_PATH=$RPM_BUILD_ROOT %{?_smp_mflags} modules_install KERNELRELEASE=$KernelVer mod-fw= - fi - -%if %{with_gcov} - # install gcov-needed files to $BUILDROOT/$BUILD/...: - # gcov_info->filename is absolute path - # gcno references to sources can use absolute paths (e.g. in out-of-tree builds) - # sysfs symlink targets (set up at compile time) use absolute paths to BUILD dir - find . \( -name '*.gcno' -o -name '*.[chS]' \) -exec install -D '{}' "$RPM_BUILD_ROOT/$(pwd)/{}" \; -%endif - - # add an a noop %%defattr statement 'cause rpm doesn't like empty file list files - echo '%%defattr(-,-,-)' > ../kernel${Variant:+-${Variant}}-ldsoconf.list - if [ $DoVDSO -ne 0 ]; then - %{make} ARCH=$Arch INSTALL_MOD_PATH=$RPM_BUILD_ROOT vdso_install KERNELRELEASE=$KernelVer - if [ -s ldconfig-kernel.conf ]; then - install -D -m 444 ldconfig-kernel.conf \ - $RPM_BUILD_ROOT/etc/ld.so.conf.d/kernel-$KernelVer.conf - echo /etc/ld.so.conf.d/kernel-$KernelVer.conf >> ../kernel${Variant:+-${Variant}}-ldsoconf.list - fi - - rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/vdso/.build-id - fi - - # And save the headers/makefiles etc for building modules against - # - # This all looks scary, but the end result is supposed to be: - # * all arch relevant include/ files - # * all Makefile/Kconfig files - # * all script/ files - - rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/source - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - (cd $RPM_BUILD_ROOT/lib/modules/$KernelVer ; ln -s build source) - # dirs for additional modules per module-init-tools, kbuild/modules.txt - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/updates - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/weak-updates - # CONFIG_KERNEL_HEADER_TEST generates some extra files in the process of - # testing so just delete - find . -name *.h.s -delete - # first copy everything - cp --parents `find -type f -name "Makefile*" -o -name "Kconfig*"` $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - if [ ! -e Module.symvers ]; then - touch Module.symvers - fi - cp Module.symvers $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp System.map $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - if [ -s Module.markers ]; then - cp Module.markers $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - fi - - # create the kABI metadata for use in packaging - # NOTENOTE: the name symvers is used by the rpm backend - # NOTENOTE: to discover and run the /usr/lib/rpm/fileattrs/kabi.attr - # NOTENOTE: script which dynamically adds exported kernel symbol - # NOTENOTE: checksums to the rpm metadata provides list. - # NOTENOTE: if you change the symvers name, update the backend too - echo "**** GENERATING kernel ABI metadata ****" - gzip -c9 < Module.symvers > $RPM_BUILD_ROOT/boot/symvers-$KernelVer.gz - cp $RPM_BUILD_ROOT/boot/symvers-$KernelVer.gz $RPM_BUILD_ROOT/lib/modules/$KernelVer/symvers.gz - -%if %{with_kabichk} - echo "**** kABI checking is enabled in kernel SPEC file. ****" - chmod 0755 $RPM_SOURCE_DIR/check-kabi - if [ -e $RPM_SOURCE_DIR/Module.kabi_%{_target_cpu}$Variant ]; then - cp $RPM_SOURCE_DIR/Module.kabi_%{_target_cpu}$Variant $RPM_BUILD_ROOT/Module.kabi - $RPM_SOURCE_DIR/check-kabi -k $RPM_BUILD_ROOT/Module.kabi -s Module.symvers || exit 1 - # for now, don't keep it around. - rm $RPM_BUILD_ROOT/Module.kabi - else - echo "**** NOTE: Cannot find reference Module.kabi file. ****" - fi -%endif - -%if %{with_kabidupchk} - echo "**** kABI DUP checking is enabled in kernel SPEC file. ****" - if [ -e $RPM_SOURCE_DIR/Module.kabi_dup_%{_target_cpu}$Variant ]; then - cp $RPM_SOURCE_DIR/Module.kabi_dup_%{_target_cpu}$Variant $RPM_BUILD_ROOT/Module.kabi - $RPM_SOURCE_DIR/check-kabi -k $RPM_BUILD_ROOT/Module.kabi -s Module.symvers || exit 1 - # for now, don't keep it around. - rm $RPM_BUILD_ROOT/Module.kabi - else - echo "**** NOTE: Cannot find DUP reference Module.kabi file. ****" - fi -%endif - -%if %{with_kabidw_base} - # Don't build kabi base for debug kernels - if [ "$Variant" != "zfcpdump" -a "$Variant" != "debug" ]; then - mkdir -p $RPM_BUILD_ROOT/kabi-dwarf - tar xjvf %{SOURCE301} -C $RPM_BUILD_ROOT/kabi-dwarf - - mkdir -p $RPM_BUILD_ROOT/kabi-dwarf/stablelists - tar xjvf %{SOURCE300} -C $RPM_BUILD_ROOT/kabi-dwarf/stablelists - - echo "**** GENERATING DWARF-based kABI baseline dataset ****" - chmod 0755 $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh - $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh generate \ - "$RPM_BUILD_ROOT/kabi-dwarf/stablelists/kabi-current/kabi_stablelist_%{_target_cpu}" \ - "$(pwd)" \ - "$RPM_BUILD_ROOT/kabidw-base/%{_target_cpu}${Variant:+.${Variant}}" || : - - rm -rf $RPM_BUILD_ROOT/kabi-dwarf - fi -%endif - -%if %{with_kabidwchk} - if [ "$Variant" != "zfcpdump" ]; then - mkdir -p $RPM_BUILD_ROOT/kabi-dwarf - tar xjvf %{SOURCE301} -C $RPM_BUILD_ROOT/kabi-dwarf - if [ -d "$RPM_BUILD_ROOT/kabi-dwarf/base/%{_target_cpu}${Variant:+.${Variant}}" ]; then - mkdir -p $RPM_BUILD_ROOT/kabi-dwarf/stablelists - tar xjvf %{SOURCE300} -C $RPM_BUILD_ROOT/kabi-dwarf/stablelists - - echo "**** GENERATING DWARF-based kABI dataset ****" - chmod 0755 $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh - $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh generate \ - "$RPM_BUILD_ROOT/kabi-dwarf/stablelists/kabi-current/kabi_stablelist_%{_target_cpu}" \ - "$(pwd)" \ - "$RPM_BUILD_ROOT/kabi-dwarf/base/%{_target_cpu}${Variant:+.${Variant}}.tmp" || : - - echo "**** kABI DWARF-based comparison report ****" - $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh compare \ - "$RPM_BUILD_ROOT/kabi-dwarf/base/%{_target_cpu}${Variant:+.${Variant}}" \ - "$RPM_BUILD_ROOT/kabi-dwarf/base/%{_target_cpu}${Variant:+.${Variant}}.tmp" || : - echo "**** End of kABI DWARF-based comparison report ****" - else - echo "**** Baseline dataset for kABI DWARF-BASED comparison report not found ****" - fi - - rm -rf $RPM_BUILD_ROOT/kabi-dwarf - fi -%endif - - # then drop all but the needed Makefiles/Kconfig files - rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts - rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include - cp .config $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a scripts $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts/tracing - rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts/spdxcheck.py - -%ifarch s390x - # CONFIG_EXPOLINE_EXTERN=y produces arch/s390/lib/expoline.o - # which is needed during external module build. - if [ -f arch/s390/lib/expoline.o ]; then - cp -a --parents arch/s390/lib/expoline.o $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - fi -%endif - - # Files for 'make scripts' to succeed with kernel-devel. - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/security/selinux/include - cp -a --parents security/selinux/include/classmap.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents security/selinux/include/initial_sid_to_string.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/tools/include/tools - cp -a --parents tools/include/tools/be_byteshift.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/tools/le_byteshift.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - - # Files for 'make prepare' to succeed with kernel-devel. - cp -a --parents tools/include/linux/compiler* $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/linux/types.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/build/Build.include $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/build/Build $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/build/fixdep.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/objtool/sync-check.sh $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/bpf/resolve_btfids $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - - cp --parents security/selinux/include/policycap_names.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents security/selinux/include/policycap.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - - cp -a --parents tools/include/asm-generic $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/linux $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/uapi/asm $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/uapi/asm-generic $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/uapi/linux $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/vdso $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/scripts/utilities.mak $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/lib/subcmd $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/lib/*.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/objtool/*.[ch] $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/objtool/Build $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/objtool/include/objtool/*.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/lib/bpf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/lib/bpf/Build $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - - if [ -f tools/objtool/objtool ]; then - cp -a tools/objtool/objtool $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/tools/objtool/ || : - fi - if [ -f tools/objtool/fixdep ]; then - cp -a tools/objtool/fixdep $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/tools/objtool/ || : - fi - if [ -d arch/$Arch/scripts ]; then - cp -a arch/$Arch/scripts $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/arch/%{_arch} || : - fi - if [ -f arch/$Arch/*lds ]; then - cp -a arch/$Arch/*lds $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/arch/%{_arch}/ || : - fi - if [ -f arch/%{asmarch}/kernel/module.lds ]; then - cp -a --parents arch/%{asmarch}/kernel/module.lds $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - fi - find $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts \( -iname "*.o" -o -iname "*.cmd" \) -exec rm -f {} + -%ifarch ppc64le - cp -a --parents arch/powerpc/lib/crtsavres.[So] $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ -%endif - if [ -d arch/%{asmarch}/include ]; then - cp -a --parents arch/%{asmarch}/include $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - fi -%ifarch aarch64 - # arch/arm64/include/asm/xen references arch/arm - cp -a --parents arch/arm/include/asm/xen $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - # arch/arm64/include/asm/opcodes.h references arch/arm - cp -a --parents arch/arm/include/asm/opcodes.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ -%endif - # include the machine specific headers for ARM variants, if available. -%ifarch %{arm} - if [ -d arch/%{asmarch}/mach-${Variant}/include ]; then - cp -a --parents arch/%{asmarch}/mach-${Variant}/include $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - fi - # include a few files for 'make prepare' - cp -a --parents arch/arm/tools/gen-mach-types $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/arm/tools/mach-types $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - -%endif - cp -a include $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include -%ifarch i686 x86_64 - # files for 'make prepare' to succeed with kernel-devel - cp -a --parents arch/x86/entry/syscalls/syscall_32.tbl $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/entry/syscalls/syscall_64.tbl $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs_32.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs_64.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs_common.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/purgatory/purgatory.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/purgatory/stack.S $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/purgatory/setup-x86_64.S $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/purgatory/entry64.S $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/boot/string.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/boot/string.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/boot/ctype.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - - cp -a --parents scripts/syscalltbl.sh $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents scripts/syscallhdr.sh $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - - cp -a --parents tools/arch/x86/include/asm $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/arch/x86/include/uapi/asm $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/objtool/arch/x86/lib $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/arch/x86/lib/ $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/arch/x86/tools/gen-insn-attr-x86.awk $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/objtool/arch/x86/ $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - -%endif - # Clean up intermediate tools files - find $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/tools \( -iname "*.o" -o -iname "*.cmd" \) -exec rm -f {} + - - # Make sure the Makefile, version.h, and auto.conf have a matching - # timestamp so that external modules can be built - touch -r $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/Makefile \ - $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include/generated/uapi/linux/version.h \ - $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include/config/auto.conf - -%if %{with_debuginfo} - eu-readelf -n vmlinux | grep "Build ID" | awk '{print $NF}' > vmlinux.id - cp vmlinux.id $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/vmlinux.id - - # - # save the vmlinux file for kernel debugging into the kernel-debuginfo rpm - # - mkdir -p $RPM_BUILD_ROOT%{debuginfodir}/lib/modules/$KernelVer - cp vmlinux $RPM_BUILD_ROOT%{debuginfodir}/lib/modules/$KernelVer - if [ -n "%{vmlinux_decompressor}" ]; then - eu-readelf -n %{vmlinux_decompressor} | grep "Build ID" | awk '{print $NF}' > vmlinux.decompressor.id - # Without build-id the build will fail. But for s390 the build-id - # wasn't added before 5.11. In case it is missing prefer not - # packaging the debuginfo over a build failure. - if [ -s vmlinux.decompressor.id ]; then - cp vmlinux.decompressor.id $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/vmlinux.decompressor.id - cp %{vmlinux_decompressor} $RPM_BUILD_ROOT%{debuginfodir}/lib/modules/$KernelVer/vmlinux.decompressor - fi - fi -%endif - - find $RPM_BUILD_ROOT/lib/modules/$KernelVer -name "*.ko" -type f >modnames - - # mark modules executable so that strip-to-file can strip them - xargs --no-run-if-empty chmod u+x < modnames - - # Generate a list of modules for block and networking. - - grep -F /drivers/ modnames | xargs --no-run-if-empty nm -upA | - sed -n 's,^.*/\([^/]*\.ko\): *U \(.*\)$,\1 \2,p' > drivers.undef - - collect_modules_list() - { - sed -r -n -e "s/^([^ ]+) \\.?($2)\$/\\1/p" drivers.undef | - LC_ALL=C sort -u > $RPM_BUILD_ROOT/lib/modules/$KernelVer/modules.$1 - if [ ! -z "$3" ]; then - sed -r -e "/^($3)\$/d" -i $RPM_BUILD_ROOT/lib/modules/$KernelVer/modules.$1 - fi - } - - collect_modules_list networking \ - 'register_netdev|ieee80211_register_hw|usbnet_probe|phy_driver_register|rt(l_|2x00)(pci|usb)_probe|register_netdevice' - collect_modules_list block \ - 'ata_scsi_ioctl|scsi_add_host|scsi_add_host_with_dma|blk_alloc_queue|blk_init_queue|register_mtd_blktrans|scsi_esp_register|scsi_register_device_handler|blk_queue_physical_block_size' 'pktcdvd.ko|dm-mod.ko' - collect_modules_list drm \ - 'drm_open|drm_init' - collect_modules_list modesetting \ - 'drm_crtc_init' - - # detect missing or incorrect license tags - ( find $RPM_BUILD_ROOT/lib/modules/$KernelVer -name '*.ko' | xargs /sbin/modinfo -l | \ - grep -E -v 'GPL( v2)?$|Dual BSD/GPL$|Dual MPL/GPL$|GPL and additional rights$' ) && exit 1 - - remove_depmod_files() - { - # remove files that will be auto generated by depmod at rpm -i time - pushd $RPM_BUILD_ROOT/lib/modules/$KernelVer/ - rm -f modules.{alias,alias.bin,builtin.alias.bin,builtin.bin} \ - modules.{dep,dep.bin,devname,softdep,symbols,symbols.bin} - popd - } - - remove_depmod_files - - # Identify modules in the kernel-modules-extras package - %{SOURCE20} $RPM_BUILD_ROOT lib/modules/$KernelVer $(realpath configs/mod-extra.list) - # Identify modules in the kernel-modules-extras package - %{SOURCE20} $RPM_BUILD_ROOT lib/modules/$KernelVer %{SOURCE84} internal - - # - # Generate the kernel-core and kernel-modules files lists - # - - # Copy the System.map file for depmod to use, and create a backup of the - # full module tree so we can restore it after we're done filtering - cp System.map $RPM_BUILD_ROOT/. - cp configs/filter-*.sh $RPM_BUILD_ROOT/. - pushd $RPM_BUILD_ROOT - mkdir restore - cp -r lib/modules/$KernelVer/* restore/. - - # don't include anything going into kernel-modules-extra in the file lists - xargs rm -rf < mod-extra.list - # don't include anything going int kernel-modules-internal in the file lists - xargs rm -rf < mod-internal.list - - if [ $DoModules -eq 1 ]; then - # Find all the module files and filter them out into the core and - # modules lists. This actually removes anything going into -modules - # from the dir. - find lib/modules/$KernelVer/kernel -name *.ko | sort -n > modules.list - ./filter-modules.sh modules.list %{_target_cpu} - rm filter-*.sh - - # Run depmod on the resulting module tree and make sure it isn't broken - depmod -b . -aeF ./System.map $KernelVer &> depmod.out - if [ -s depmod.out ]; then - echo "Depmod failure" - cat depmod.out - exit 1 - else - rm depmod.out - fi - else - # Ensure important files/directories exist to let the packaging succeed - echo '%%defattr(-,-,-)' > modules.list - echo '%%defattr(-,-,-)' > k-d.list - mkdir -p lib/modules/$KernelVer/kernel - # Add files usually created by make modules, needed to prevent errors - # thrown by depmod during package installation - touch lib/modules/$KernelVer/modules.order - touch lib/modules/$KernelVer/modules.builtin - fi - - remove_depmod_files - - # Go back and find all of the various directories in the tree. We use this - # for the dir lists in kernel-core - find lib/modules/$KernelVer/kernel -mindepth 1 -type d | sort -n > module-dirs.list - - # Cleanup - rm System.map - # Just "cp -r" can be very slow: here, it rewrites _existing files_ - # with open(O_TRUNC). Many filesystems synchronously wait for metadata - # update for such file rewrites (seen in strace as final close syscall - # taking a long time). On a rotational disk, cp was observed to take - # more than 5 minutes on ext4 and more than 15 minutes (!) on xfs. - # With --remove-destination, we avoid this, and copying - # (with enough RAM to cache it) takes 5 seconds: - cp -r --remove-destination restore/* lib/modules/$KernelVer/. - rm -rf restore - popd - - # Make sure the files lists start with absolute paths or rpmbuild fails. - # Also add in the dir entries - sed -e 's/^lib*/\/lib/' %{?zipsed} $RPM_BUILD_ROOT/k-d.list > ../kernel${Variant:+-${Variant}}-modules.list - sed -e 's/^lib*/%dir \/lib/' %{?zipsed} $RPM_BUILD_ROOT/module-dirs.list > ../kernel${Variant:+-${Variant}}-core.list - sed -e 's/^lib*/\/lib/' %{?zipsed} $RPM_BUILD_ROOT/modules.list >> ../kernel${Variant:+-${Variant}}-core.list - sed -e 's/^lib*/\/lib/' %{?zipsed} $RPM_BUILD_ROOT/mod-extra.list >> ../kernel${Variant:+-${Variant}}-modules-extra.list - sed -e 's/^lib*/\/lib/' %{?zipsed} $RPM_BUILD_ROOT/mod-internal.list >> ../kernel${Variant:+-${Variant}}-modules-internal.list - - # Cleanup - rm -f $RPM_BUILD_ROOT/k-d.list - rm -f $RPM_BUILD_ROOT/modules.list - rm -f $RPM_BUILD_ROOT/module-dirs.list - rm -f $RPM_BUILD_ROOT/mod-extra.list - rm -f $RPM_BUILD_ROOT/mod-internal.list - -%if %{signmodules} - if [ $DoModules -eq 1 ]; then - # Save the signing keys so we can sign the modules in __modsign_install_post - cp certs/signing_key.pem certs/signing_key.pem.sign${Variant:++${Variant}} - cp certs/signing_key.x509 certs/signing_key.x509.sign${Variant:++${Variant}} - fi -%endif - - # Move the devel headers out of the root file system - mkdir -p $RPM_BUILD_ROOT/usr/src/kernels - mv $RPM_BUILD_ROOT/lib/modules/$KernelVer/build $RPM_BUILD_ROOT/$DevelDir - - # This is going to create a broken link during the build, but we don't use - # it after this point. We need the link to actually point to something - # when kernel-devel is installed, and a relative link doesn't work across - # the F17 UsrMove feature. - ln -sf $DevelDir $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - -%ifnarch armv7hl - # Generate vmlinux.h and put it to kernel-devel path - bpftool btf dump file vmlinux format c > $RPM_BUILD_ROOT/$DevelDir/vmlinux.h -%endif - - # prune junk from kernel-devel - find $RPM_BUILD_ROOT/usr/src/kernels -name ".*.cmd" -delete - - # Red Hat UEFI Secure Boot CA cert, which can be used to authenticate the kernel - mkdir -p $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer - %ifarch x86_64 aarch64 - install -m 0644 %{secureboot_ca_0} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca-20200609.cer - install -m 0644 %{secureboot_ca_1} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca-20140212.cer - ln -s kernel-signing-ca-20200609.cer $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca.cer - %else - install -m 0644 %{secureboot_ca_0} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca.cer - %endif - %ifarch s390x ppc64le - if [ $DoModules -eq 1 ]; then - if [ -x /usr/bin/rpm-sign ]; then - install -m 0644 %{secureboot_key_0} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/%{signing_key_filename} - else - install -m 0644 certs/signing_key.x509.sign${Variant:++${Variant}} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca.cer - openssl x509 -in certs/signing_key.pem.sign${Variant:++${Variant}} -outform der -out $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/%{signing_key_filename} - chmod 0644 $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/%{signing_key_filename} - fi - fi - %endif - -%if %{with_ipaclones} - MAXPROCS=$(echo %{?_smp_mflags} | sed -n 's/-j\s*\([0-9]\+\)/\1/p') - if [ -z "$MAXPROCS" ]; then - MAXPROCS=1 - fi - if [ "$Variant" == "" ]; then - mkdir -p $RPM_BUILD_ROOT/$DevelDir-ipaclones - find . -name '*.ipa-clones' | xargs -i{} -r -n 1 -P $MAXPROCS install -m 644 -D "{}" "$RPM_BUILD_ROOT/$DevelDir-ipaclones/{}" - fi -%endif - -} - -### -# DO it... -### - -# prepare directories -rm -rf $RPM_BUILD_ROOT -mkdir -p $RPM_BUILD_ROOT/boot -mkdir -p $RPM_BUILD_ROOT%{_libexecdir} - -cd linux-%{KVERREL} - - -%if %{with_debug} -BuildKernel %make_target %kernel_image %{_use_vdso} debug -%endif - -%if %{with_zfcpdump} -BuildKernel %make_target %kernel_image %{_use_vdso} zfcpdump -%endif - -%if %{with_pae} -BuildKernel %make_target %kernel_image %{use_vdso} lpae -%endif - -%if %{with_up} -BuildKernel %make_target %kernel_image %{_use_vdso} -%endif - -%ifnarch noarch i686 -%if !%{with_debug} && !%{with_zfcpdump} && !%{with_pae} && !%{with_up} -# If only building the user space tools, then initialize the build environment -# and some variables so that the various userspace tools can be built. -InitBuildVars -%endif -%endif - -%ifarch aarch64 -%global perf_build_extra_opts CORESIGHT=1 -%endif -%global perf_make \ - %{__make} %{?make_opts} EXTRA_CFLAGS="${RPM_OPT_FLAGS}" LDFLAGS="%{__global_ldflags}" %{?cross_opts} -C tools/perf V=1 NO_PERF_READ_VDSO32=1 NO_PERF_READ_VDSOX32=1 WERROR=0 NO_LIBUNWIND=1 HAVE_CPLUS_DEMANGLE=1 NO_GTK2=1 NO_STRLCPY=1 NO_BIONIC=1 LIBBPF_DYNAMIC=1 LIBTRACEEVENT_DYNAMIC=1 %{?perf_build_extra_opts} prefix=%{_prefix} PYTHON=%{__python3} -%if %{with_perf} -# perf -# make sure check-headers.sh is executable -chmod +x tools/perf/check-headers.sh -%{perf_make} DESTDIR=$RPM_BUILD_ROOT all -%endif - -%global tools_make \ - CFLAGS="${RPM_OPT_FLAGS}" LDFLAGS="%{__global_ldflags}" %{make} %{?make_opts} - -%if %{with_tools} -%ifarch %{cpupowerarchs} -# cpupower -# make sure version-gen.sh is executable. -chmod +x tools/power/cpupower/utils/version-gen.sh -%{tools_make} %{?_smp_mflags} -C tools/power/cpupower CPUFREQ_BENCH=false DEBUG=false -%ifarch x86_64 - pushd tools/power/cpupower/debug/x86_64 - %{tools_make} %{?_smp_mflags} centrino-decode powernow-k8-decode - popd -%endif -%ifarch x86_64 - pushd tools/power/x86/x86_energy_perf_policy/ - %{tools_make} - popd - pushd tools/power/x86/turbostat - %{tools_make} - popd - pushd tools/power/x86/intel-speed-select - %{tools_make} - popd - pushd tools/arch/x86/intel_sdsi - %{tools_make} CFLAGS="${RPM_OPT_FLAGS}" - popd -%endif -%endif -pushd tools/thermal/tmon/ -%{tools_make} -popd -pushd tools/iio/ -%{tools_make} -popd -pushd tools/gpio/ -%{tools_make} -popd -# build VM tools -pushd tools/vm/ -%{tools_make} slabinfo page_owner_sort -popd -%endif - -if [ -f $DevelDir/vmlinux.h ]; then - RPM_VMLINUX_H=$DevelDir/vmlinux.h -fi - -%global bpftool_make \ - %{__make} EXTRA_CFLAGS="${RPM_OPT_FLAGS}" EXTRA_LDFLAGS="%{__global_ldflags}" DESTDIR=$RPM_BUILD_ROOT %{?make_opts} VMLINUX_H="${RPM_VMLINUX_H}" V=1 -%if %{with_bpftool} -pushd tools/bpf/bpftool -%{bpftool_make} -popd -%endif - -%if %{with_selftests} -# Unfortunately, samples/bpf/Makefile expects that the headers are installed -# in the source tree. We installed them previously to $RPM_BUILD_ROOT/usr -# but there's no way to tell the Makefile to take them from there. -%{make} %{?_smp_mflags} headers_install -%{make} %{?_smp_mflags} ARCH=$Arch V=1 M=samples/bpf/ || true - -# Prevent bpf selftests to build bpftool repeatedly: -export BPFTOOL=$(pwd)/tools/bpf/bpftool/bpftool - -pushd tools/testing/selftests -# We need to install here because we need to call make with ARCH set which -# doesn't seem possible to do in the install section. -%{make} %{?_smp_mflags} ARCH=$Arch V=1 TARGETS="bpf vm livepatch net net/forwarding net/mptcp netfilter tc-testing" SKIP_TARGETS="" INSTALL_PATH=%{buildroot}%{_libexecdir}/kselftests VMLINUX_H="${RPM_VMLINUX_H}" install - -# 'make install' for bpf is broken and upstream refuses to fix it. -# Install the needed files manually. -for dir in bpf bpf/no_alu32 bpf/progs; do - # In ARK, the rpm build continues even if some of the selftests - # cannot be built. It's not always possible to build selftests, - # as upstream sometimes dependens on too new llvm version or has - # other issues. If something did not get built, just skip it. - test -d $dir || continue - mkdir -p %{buildroot}%{_libexecdir}/kselftests/$dir - find $dir -maxdepth 1 -type f \( -executable -o -name '*.py' -o -name settings -o \ - -name 'btf_dump_test_case_*.c' -o -name '*.ko' -o \ - -name '*.o' -exec sh -c 'readelf -h "{}" | grep -q "^ Machine:.*BPF"' \; \) -print0 | \ - xargs -0 cp -t %{buildroot}%{_libexecdir}/kselftests/$dir || true -done -popd -export -n BPFTOOL -%endif - -%if %{with_doc} -# Make the HTML pages. -%{__make} PYTHON=/usr/bin/python3 htmldocs || %{doc_build_fail} - -# sometimes non-world-readable files sneak into the kernel source tree -chmod -R a=rX Documentation -find Documentation -type d | xargs chmod u+w -%endif - -# In the modsign case, we do 3 things. 1) We check the "variant" and hard -# code the value in the following invocations. This is somewhat sub-optimal -# but we're doing this inside of an RPM macro and it isn't as easy as it -# could be because of that. 2) We restore the .tmp_versions/ directory from -# the one we saved off in BuildKernel above. This is to make sure we're -# signing the modules we actually built/installed in that variant. 3) We -# grab the arch and invoke mod-sign.sh command to actually sign the modules. -# -# We have to do all of those things _after_ find-debuginfo runs, otherwise -# that will strip the signature off of the modules. -# -# Don't sign modules for the zfcpdump variant as it is monolithic. - -%define __modsign_install_post \ - if [ "%{signmodules}" -eq "1" ]; then \ - if [ "%{with_pae}" -ne "0" ]; then \ - %{modsign_cmd} certs/signing_key.pem.sign+lpae certs/signing_key.x509.sign+lpae $RPM_BUILD_ROOT/lib/modules/%{KVERREL}+lpae/ \ - fi \ - if [ "%{with_debug}" -ne "0" ]; then \ - %{modsign_cmd} certs/signing_key.pem.sign+debug certs/signing_key.x509.sign+debug $RPM_BUILD_ROOT/lib/modules/%{KVERREL}+debug/ \ - fi \ - if [ "%{with_up}" -ne "0" ]; then \ - %{modsign_cmd} certs/signing_key.pem.sign certs/signing_key.x509.sign $RPM_BUILD_ROOT/lib/modules/%{KVERREL}/ \ - fi \ - fi \ - if [ "%{zipmodules}" -eq "1" ]; then \ - find $RPM_BUILD_ROOT/lib/modules/ -type f -name '*.ko' | xargs -P${RPM_BUILD_NCPUS} -r xz; \ - fi \ -%{nil} - -### -### Special hacks for debuginfo subpackages. -### - -# This macro is used by %%install, so we must redefine it before that. -%define debug_package %{nil} - -%if %{with_debuginfo} - -%ifnarch noarch -%global __debug_package 1 -%files -f debugfiles.list debuginfo-common-%{_target_cpu} -%endif - -%endif - -# We don't want to package debuginfo for self-tests and samples but -# we have to delete them to avoid an error messages about unpackaged -# files. -# Delete the debuginfo for kernel-devel files -%define __remove_unwanted_dbginfo_install_post \ - if [ "%{with_selftests}" -ne "0" ]; then \ - rm -rf $RPM_BUILD_ROOT/usr/lib/debug/usr/libexec/ksamples; \ - rm -rf $RPM_BUILD_ROOT/usr/lib/debug/usr/libexec/kselftests; \ - fi \ - rm -rf $RPM_BUILD_ROOT/usr/lib/debug/usr/src; \ -%{nil} - -# -# Disgusting hack alert! We need to ensure we sign modules *after* all -# invocations of strip occur, which is in __debug_install_post if -# find-debuginfo.sh runs, and __os_install_post if not. -# -%define __spec_install_post \ - %{?__debug_package:%{__debug_install_post}}\ - %{__arch_install_post}\ - %{__os_install_post}\ - %{__remove_unwanted_dbginfo_install_post}\ - %{__modsign_install_post} - -### -### install -### - -%install - -cd linux-%{KVERREL} - -%if %{with_doc} -docdir=$RPM_BUILD_ROOT%{_datadir}/doc/kernel-doc-%{specversion}-%{pkgrelease} - -# copy the source over -mkdir -p $docdir -tar -h -f - --exclude=man --exclude='.*' -c Documentation | tar xf - -C $docdir - -# with_doc -%endif - -# We have to do the headers install before the tools install because the -# kernel headers_install will remove any header files in /usr/include that -# it doesn't install itself. - -%if %{with_headers} -# Install kernel headers -%{__make} ARCH=%{hdrarch} INSTALL_HDR_PATH=$RPM_BUILD_ROOT/usr headers_install - -find $RPM_BUILD_ROOT/usr/include \ - \( -name .install -o -name .check -o \ - -name ..install.cmd -o -name ..check.cmd \) -delete - -%endif - -%if %{with_cross_headers} -%if 0%{?fedora} -HDR_ARCH_LIST='arm arm64 powerpc s390 x86' -%else -HDR_ARCH_LIST='arm64 powerpc s390 x86' -%endif -mkdir -p $RPM_BUILD_ROOT/usr/tmp-headers - -for arch in $HDR_ARCH_LIST; do - mkdir $RPM_BUILD_ROOT/usr/tmp-headers/arch-${arch} - %{__make} ARCH=${arch} INSTALL_HDR_PATH=$RPM_BUILD_ROOT/usr/tmp-headers/arch-${arch} headers_install -done - -find $RPM_BUILD_ROOT/usr/tmp-headers \ - \( -name .install -o -name .check -o \ - -name ..install.cmd -o -name ..check.cmd \) -delete - -# Copy all the architectures we care about to their respective asm directories -for arch in $HDR_ARCH_LIST ; do - mkdir -p $RPM_BUILD_ROOT/usr/${arch}-linux-gnu/include - mv $RPM_BUILD_ROOT/usr/tmp-headers/arch-${arch}/include/* $RPM_BUILD_ROOT/usr/${arch}-linux-gnu/include/ -done - -rm -rf $RPM_BUILD_ROOT/usr/tmp-headers -%endif - -%if %{with_kernel_abi_stablelists} -# kabi directory -INSTALL_KABI_PATH=$RPM_BUILD_ROOT/lib/modules/ -mkdir -p $INSTALL_KABI_PATH - -# install kabi releases directories -tar xjvf %{SOURCE300} -C $INSTALL_KABI_PATH -# with_kernel_abi_stablelists -%endif - -%if %{with_perf} -# perf tool binary and supporting scripts/binaries -%{perf_make} DESTDIR=$RPM_BUILD_ROOT lib=%{_lib} install-bin -# remove the 'trace' symlink. -rm -f %{buildroot}%{_bindir}/trace - -# For both of the below, yes, this should be using a macro but right now -# it's hard coded and we don't actually want it anyway right now. -# Whoever wants examples can fix it up! - -# remove examples -rm -rf %{buildroot}/usr/lib/perf/examples -rm -rf %{buildroot}/usr/lib/perf/include - -# python-perf extension -%{perf_make} DESTDIR=$RPM_BUILD_ROOT install-python_ext - -# perf man pages (note: implicit rpm magic compresses them later) -mkdir -p %{buildroot}/%{_mandir}/man1 -%{perf_make} DESTDIR=$RPM_BUILD_ROOT install-man - -# remove any tracevent files, eg. its plugins still gets built and installed, -# even if we build against system's libtracevent during perf build (by setting -# LIBTRACEEVENT_DYNAMIC=1 above in perf_make macro). Those files should already -# ship with libtraceevent package. -rm -rf %{buildroot}%{_libdir}/traceevent -%endif - -%if %{with_tools} -%ifarch %{cpupowerarchs} -%{make} -C tools/power/cpupower DESTDIR=$RPM_BUILD_ROOT libdir=%{_libdir} mandir=%{_mandir} CPUFREQ_BENCH=false install -rm -f %{buildroot}%{_libdir}/*.{a,la} -%find_lang cpupower -mv cpupower.lang ../ -%ifarch x86_64 - pushd tools/power/cpupower/debug/x86_64 - install -m755 centrino-decode %{buildroot}%{_bindir}/centrino-decode - install -m755 powernow-k8-decode %{buildroot}%{_bindir}/powernow-k8-decode - popd -%endif -chmod 0755 %{buildroot}%{_libdir}/libcpupower.so* -mkdir -p %{buildroot}%{_unitdir} %{buildroot}%{_sysconfdir}/sysconfig -install -m644 %{SOURCE2000} %{buildroot}%{_unitdir}/cpupower.service -install -m644 %{SOURCE2001} %{buildroot}%{_sysconfdir}/sysconfig/cpupower -%endif -%ifarch x86_64 - mkdir -p %{buildroot}%{_mandir}/man8 - pushd tools/power/x86/x86_energy_perf_policy - %{tools_make} DESTDIR=%{buildroot} install - popd - pushd tools/power/x86/turbostat - %{tools_make} DESTDIR=%{buildroot} install - popd - pushd tools/power/x86/intel-speed-select - %{tools_make} DESTDIR=%{buildroot} install - popd - pushd tools/arch/x86/intel_sdsi - %{tools_make} CFLAGS="${RPM_OPT_FLAGS}" DESTDIR=%{buildroot} install - popd -%endif -pushd tools/thermal/tmon -%{tools_make} INSTALL_ROOT=%{buildroot} install -popd -pushd tools/iio -%{tools_make} DESTDIR=%{buildroot} install -popd -pushd tools/gpio -%{tools_make} DESTDIR=%{buildroot} install -popd -install -m644 -D %{SOURCE2002} %{buildroot}%{_sysconfdir}/logrotate.d/kvm_stat -pushd tools/kvm/kvm_stat -%{__make} INSTALL_ROOT=%{buildroot} install-tools -%{__make} INSTALL_ROOT=%{buildroot} install-man -install -m644 -D kvm_stat.service %{buildroot}%{_unitdir}/kvm_stat.service -popd -# install VM tools -pushd tools/vm/ -install -m755 slabinfo %{buildroot}%{_bindir}/slabinfo -install -m755 page_owner_sort %{buildroot}%{_bindir}/page_owner_sort -popd -%endif - -if [ -f $DevelDir/vmlinux.h ]; then - RPM_VMLINUX_H=$DevelDir/vmlinux.h -fi - -%if %{with_bpftool} -pushd tools/bpf/bpftool -%{bpftool_make} prefix=%{_prefix} bash_compdir=%{_sysconfdir}/bash_completion.d/ mandir=%{_mandir} install doc-install -popd -%endif - -%if %{with_selftests} -pushd samples -install -d %{buildroot}%{_libexecdir}/ksamples -# install bpf samples -pushd bpf -install -d %{buildroot}%{_libexecdir}/ksamples/bpf -find -type f -executable -exec install -m755 {} %{buildroot}%{_libexecdir}/ksamples/bpf \; -install -m755 *.sh %{buildroot}%{_libexecdir}/ksamples/bpf -# test_lwt_bpf.sh compiles test_lwt_bpf.c when run; this works only from the -# kernel tree. Just remove it. -rm %{buildroot}%{_libexecdir}/ksamples/bpf/test_lwt_bpf.sh -install -m644 *_kern.o %{buildroot}%{_libexecdir}/ksamples/bpf || true -install -m644 tcp_bpf.readme %{buildroot}%{_libexecdir}/ksamples/bpf -popd -# install pktgen samples -pushd pktgen -install -d %{buildroot}%{_libexecdir}/ksamples/pktgen -find . -type f -executable -exec install -m755 {} %{buildroot}%{_libexecdir}/ksamples/pktgen/{} \; -find . -type f ! -executable -exec install -m644 {} %{buildroot}%{_libexecdir}/ksamples/pktgen/{} \; -popd -popd -# install vm selftests -pushd tools/testing/selftests/vm -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/vm/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/vm/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/vm/{} \; -popd -# install drivers/net/mlxsw selftests -pushd tools/testing/selftests/drivers/net/mlxsw -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/drivers/net/mlxsw/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/drivers/net/mlxsw/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/drivers/net/mlxsw/{} \; -popd -# install drivers/net/netdevsim selftests -pushd tools/testing/selftests/drivers/net/netdevsim -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/drivers/net/netdevsim/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/drivers/net/netdevsim/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/drivers/net/netdevsim/{} \; -popd -# install net/forwarding selftests -pushd tools/testing/selftests/net/forwarding -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/net/forwarding/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/net/forwarding/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/net/forwarding/{} \; -popd -# install net/mptcp selftests -pushd tools/testing/selftests/net/mptcp -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/net/mptcp/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/net/mptcp/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/net/mptcp/{} \; -popd -# install tc-testing selftests -pushd tools/testing/selftests/tc-testing -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/tc-testing/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/tc-testing/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/tc-testing/{} \; -popd -# install livepatch selftests -pushd tools/testing/selftests/livepatch -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/livepatch/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/livepatch/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/livepatch/{} \; -popd -# install netfilter selftests -pushd tools/testing/selftests/netfilter -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/netfilter/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/netfilter/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/netfilter/{} \; -popd -%endif - -### -### clean -### - -### -### scripts -### - -%if %{with_tools} -%post -n kernel-tools-libs -/sbin/ldconfig - -%postun -n kernel-tools-libs -/sbin/ldconfig -%endif - -# -# This macro defines a %%post script for a kernel*-devel package. -# %%kernel_devel_post [<subpackage>] -# Note we don't run hardlink if ostree is in use, as ostree is -# a far more sophisticated hardlink implementation. -# https://github.com/projectatomic/rpm-ostree/commit/58a79056a889be8814aa51f507b2c7a4dccee526 -# -# The deletion of *.hardlink-temporary files is a temporary workaround -# for this bug in the hardlink binary (fixed in util-linux 2.38): -# https://github.com/util-linux/util-linux/issues/1602 -# -%define kernel_devel_post() \ -%{expand:%%post %{?1:%{1}-}devel}\ -if [ -f /etc/sysconfig/kernel ]\ -then\ - . /etc/sysconfig/kernel || exit $?\ -fi\ -if [ "$HARDLINK" != "no" -a -x /usr/bin/hardlink -a ! -e /run/ostree-booted ] \ -then\ - (cd /usr/src/kernels/%{KVERREL}%{?1:+%{1}} &&\ - /usr/bin/find . -type f | while read f; do\ - hardlink -c /usr/src/kernels/*%{?dist}.*/$f $f > /dev/null\ - done;\ - /usr/bin/find /usr/src/kernels -type f -name '*.hardlink-temporary' -delete\ - )\ -fi\ -%{nil} - -# -# This macro defines a %%post script for a kernel*-modules-extra package. -# It also defines a %%postun script that does the same thing. -# %%kernel_modules_extra_post [<subpackage>] -# -%define kernel_modules_extra_post() \ -%{expand:%%post %{?1:%{1}-}modules-extra}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil}\ -%{expand:%%postun %{?1:%{1}-}modules-extra}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil} - -# -# This macro defines a %%post script for a kernel*-modules-internal package. -# It also defines a %%postun script that does the same thing. -# %%kernel_modules_internal_post [<subpackage>] -# -%define kernel_modules_internal_post() \ -%{expand:%%post %{?1:%{1}-}modules-internal}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil}\ -%{expand:%%postun %{?1:%{1}-}modules-internal}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil} - -# -# This macro defines a %%post script for a kernel*-modules package. -# It also defines a %%postun script that does the same thing. -# %%kernel_modules_post [<subpackage>] -# -%define kernel_modules_post() \ -%{expand:%%post %{?1:%{1}-}modules}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -if [ ! -f %{_localstatedir}/lib/rpm-state/%{name}/installing_core_%{KVERREL}%{?1:+%{1}} ]; then\ - mkdir -p %{_localstatedir}/lib/rpm-state/%{name}\ - touch %{_localstatedir}/lib/rpm-state/%{name}/need_to_run_dracut_%{KVERREL}%{?1:+%{1}}\ -fi\ -%{nil}\ -%{expand:%%postun %{?1:%{1}-}modules}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil}\ -%{expand:%%posttrans %{?1:%{1}-}modules}\ -if [ -f %{_localstatedir}/lib/rpm-state/%{name}/need_to_run_dracut_%{KVERREL}%{?1:+%{1}} ]; then\ - rm -f %{_localstatedir}/lib/rpm-state/%{name}/need_to_run_dracut_%{KVERREL}%{?1:+%{1}}\ - echo "Running: dracut -f --kver %{KVERREL}%{?1:+%{1}}"\ - dracut -f --kver "%{KVERREL}%{?1:+%{1}}" || exit $?\ -fi\ -%{nil} - -# This macro defines a %%posttrans script for a kernel package. -# %%kernel_variant_posttrans [<subpackage>] -# More text can follow to go at the end of this variant's %%post. -# -%define kernel_variant_posttrans() \ -%{expand:%%posttrans %{?1:%{1}-}core}\ -%if 0%{!?fedora:1}\ -if [ -x %{_sbindir}/weak-modules ]\ -then\ - %{_sbindir}/weak-modules --add-kernel %{KVERREL}%{?1:+%{1}} || exit $?\ -fi\ -%endif\ -rm -f %{_localstatedir}/lib/rpm-state/%{name}/installing_core_%{KVERREL}%{?1:+%{1}}\ -/bin/kernel-install add %{KVERREL}%{?1:+%{1}} /lib/modules/%{KVERREL}%{?1:+%{1}}/vmlinuz || exit $?\ -%{nil} - -# -# This macro defines a %%post script for a kernel package and its devel package. -# %%kernel_variant_post [-v <subpackage>] [-r <replace>] -# More text can follow to go at the end of this variant's %%post. -# -%define kernel_variant_post(v:r:) \ -%{expand:%%kernel_devel_post %{?-v*}}\ -%{expand:%%kernel_modules_post %{?-v*}}\ -%{expand:%%kernel_modules_extra_post %{?-v*}}\ -%{expand:%%kernel_modules_internal_post %{?-v*}}\ -%{expand:%%kernel_variant_posttrans %{?-v*}}\ -%{expand:%%post %{?-v*:%{-v*}-}core}\ -%{-r:\ -if [ `uname -i` == "x86_64" -o `uname -i` == "i386" ] &&\ - [ -f /etc/sysconfig/kernel ]; then\ - /bin/sed -r -i -e 's/^DEFAULTKERNEL=%{-r*}$/DEFAULTKERNEL=kernel%{?-v:-%{-v*}}/' /etc/sysconfig/kernel || exit $?\ -fi}\ -mkdir -p %{_localstatedir}/lib/rpm-state/%{name}\ -touch %{_localstatedir}/lib/rpm-state/%{name}/installing_core_%{KVERREL}%{?1:+%{1}}\ -%{nil} - -# -# This macro defines a %%preun script for a kernel package. -# %%kernel_variant_preun <subpackage> -# -%define kernel_variant_preun() \ -%{expand:%%preun %{?1:%{1}-}core}\ -/bin/kernel-install remove %{KVERREL}%{?1:+%{1}} /lib/modules/%{KVERREL}%{?1:+%{1}}/vmlinuz || exit $?\ -if [ -x %{_sbindir}/weak-modules ]\ -then\ - %{_sbindir}/weak-modules --remove-kernel %{KVERREL}%{?1:+%{1}} || exit $?\ -fi\ -%{nil} - -%kernel_variant_preun -%kernel_variant_post -r kernel-smp - -%if %{with_pae} -%kernel_variant_preun lpae -%kernel_variant_post -v lpae -r (kernel|kernel-smp) -%endif - -%if %{with_debug} -%kernel_variant_preun debug -%kernel_variant_post -v debug -%endif - -%if %{with_zfcpdump} -%kernel_variant_preun zfcpdump -%kernel_variant_post -v zfcpdump -%endif - -if [ -x /sbin/ldconfig ] -then - /sbin/ldconfig -X || exit $? -fi - -### -### file lists -### - -%if %{with_headers} -%files headers -/usr/include/* -%endif - -%if %{with_cross_headers} -%files cross-headers -/usr/*-linux-gnu/include/* -%endif - -%if %{with_kernel_abi_stablelists} -%files -n kernel-abi-stablelists -/lib/modules/kabi-* -%endif - -%if %{with_kabidw_base} -%ifarch x86_64 s390x ppc64 ppc64le aarch64 -%files kernel-kabidw-base-internal -%defattr(-,root,root) -/kabidw-base/%{_target_cpu}/* -%endif -%endif - -# only some architecture builds need kernel-doc -%if %{with_doc} -%files doc -%defattr(-,root,root) -%{_datadir}/doc/kernel-doc-%{specversion}-%{pkgrelease}/Documentation/* -%dir %{_datadir}/doc/kernel-doc-%{specversion}-%{pkgrelease}/Documentation -%dir %{_datadir}/doc/kernel-doc-%{specversion}-%{pkgrelease} -%endif - -%if %{with_perf} -%files -n perf -%{_bindir}/perf -%{_libdir}/libperf-jvmti.so -%dir %{_libexecdir}/perf-core -%{_libexecdir}/perf-core/* -%{_datadir}/perf-core/* -%{_mandir}/man[1-8]/perf* -%{_sysconfdir}/bash_completion.d/perf -%doc linux-%{KVERREL}/tools/perf/Documentation/examples.txt -%{_docdir}/perf-tip/tips.txt - -%files -n python3-perf -%{python3_sitearch}/* - -%if %{with_debuginfo} -%files -f perf-debuginfo.list -n perf-debuginfo - -%files -f python3-perf-debuginfo.list -n python3-perf-debuginfo -%endif -# with_perf -%endif - -%if %{with_tools} -%ifnarch %{cpupowerarchs} -%files -n kernel-tools -%else -%files -n kernel-tools -f cpupower.lang -%{_bindir}/cpupower -%{_datadir}/bash-completion/completions/cpupower -%ifarch x86_64 -%{_bindir}/centrino-decode -%{_bindir}/powernow-k8-decode -%endif -%{_unitdir}/cpupower.service -%{_mandir}/man[1-8]/cpupower* -%config(noreplace) %{_sysconfdir}/sysconfig/cpupower -%ifarch x86_64 -%{_bindir}/x86_energy_perf_policy -%{_mandir}/man8/x86_energy_perf_policy* -%{_bindir}/turbostat -%{_mandir}/man8/turbostat* -%{_bindir}/intel-speed-select -%{_sbindir}/intel_sdsi -%endif -# cpupowerarchs -%endif -%{_bindir}/tmon -%{_bindir}/iio_event_monitor -%{_bindir}/iio_generic_buffer -%{_bindir}/lsiio -%{_bindir}/lsgpio -%{_bindir}/gpio-hammer -%{_bindir}/gpio-event-mon -%{_bindir}/gpio-watch -%{_mandir}/man1/kvm_stat* -%{_bindir}/kvm_stat -%{_unitdir}/kvm_stat.service -%config(noreplace) %{_sysconfdir}/logrotate.d/kvm_stat -%{_bindir}/page_owner_sort -%{_bindir}/slabinfo - -%if %{with_debuginfo} -%files -f kernel-tools-debuginfo.list -n kernel-tools-debuginfo -%endif - -%ifarch %{cpupowerarchs} -%files -n kernel-tools-libs -%{_libdir}/libcpupower.so.0 -%{_libdir}/libcpupower.so.0.0.1 - -%files -n kernel-tools-libs-devel -%{_libdir}/libcpupower.so -%{_includedir}/cpufreq.h -%endif -# with_tools -%endif - -%if %{with_bpftool} -%files -n bpftool -%{_sbindir}/bpftool -%{_sysconfdir}/bash_completion.d/bpftool -%{_mandir}/man8/bpftool-cgroup.8.gz -%{_mandir}/man8/bpftool-gen.8.gz -%{_mandir}/man8/bpftool-iter.8.gz -%{_mandir}/man8/bpftool-link.8.gz -%{_mandir}/man8/bpftool-map.8.gz -%{_mandir}/man8/bpftool-prog.8.gz -%{_mandir}/man8/bpftool-perf.8.gz -%{_mandir}/man8/bpftool.8.gz -%{_mandir}/man8/bpftool-net.8.gz -%{_mandir}/man8/bpftool-feature.8.gz -%{_mandir}/man8/bpftool-btf.8.gz -%{_mandir}/man8/bpftool-struct_ops.8.gz - -%if %{with_debuginfo} -%files -f bpftool-debuginfo.list -n bpftool-debuginfo -%defattr(-,root,root) -%endif -%endif - -%if %{with_selftests} -%files selftests-internal -%{_libexecdir}/ksamples -%{_libexecdir}/kselftests -%endif - -# empty meta-package -%ifnarch %nobuildarches noarch -%files -%endif - -%if %{with_gcov} -%ifnarch %nobuildarches noarch -%files gcov -%{_builddir} -%endif -%endif - -# This is %%{image_install_path} on an arch where that includes ELF files, -# or empty otherwise. -%define elf_image_install_path %{?kernel_image_elf:%{image_install_path}} - -# -# This macro defines the %%files sections for a kernel package -# and its devel and debuginfo packages. -# %%kernel_variant_files [-k vmlinux] <use_vdso> <condition> <subpackage> -# -%define kernel_variant_files(k:) \ -%if %{2}\ -%{expand:%%files -f kernel-%{?3:%{3}-}core.list %{?1:-f kernel-%{?3:%{3}-}ldsoconf.list} %{?3:%{3}-}core}\ -%{!?_licensedir:%global license %%doc}\ -%license linux-%{KVERREL}/COPYING-%{version}-%{release}\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/%{?-k:%{-k*}}%{!?-k:vmlinuz}\ -%ghost /%{image_install_path}/%{?-k:%{-k*}}%{!?-k:vmlinuz}-%{KVERREL}%{?3:+%{3}}\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/.vmlinuz.hmac \ -%ghost /%{image_install_path}/.vmlinuz-%{KVERREL}%{?3:+%{3}}.hmac \ -%ifarch %{arm} aarch64\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/dtb \ -%ghost /%{image_install_path}/dtb-%{KVERREL}%{?3:+%{3}} \ -%endif\ -%attr(0600, root, root) /lib/modules/%{KVERREL}%{?3:+%{3}}/System.map\ -%ghost %attr(0600, root, root) /boot/System.map-%{KVERREL}%{?3:+%{3}}\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/symvers.gz\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/config\ -%ghost %attr(0600, root, root) /boot/symvers-%{KVERREL}%{?3:+%{3}}.gz\ -%ghost %attr(0600, root, root) /boot/initramfs-%{KVERREL}%{?3:+%{3}}.img\ -%ghost %attr(0644, root, root) /boot/config-%{KVERREL}%{?3:+%{3}}\ -%dir /lib/modules\ -%dir /lib/modules/%{KVERREL}%{?3:+%{3}}\ -%dir /lib/modules/%{KVERREL}%{?3:+%{3}}/kernel\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/build\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/source\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/updates\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/weak-updates\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/systemtap\ -%{_datadir}/doc/kernel-keys/%{KVERREL}%{?3:+%{3}}\ -%if %{1}\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/vdso\ -%endif\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/modules.*\ -%{expand:%%files -f kernel-%{?3:%{3}-}modules.list %{?3:%{3}-}modules}\ -%{expand:%%files %{?3:%{3}-}devel}\ -%defverify(not mtime)\ -/usr/src/kernels/%{KVERREL}%{?3:+%{3}}\ -%{expand:%%files %{?3:%{3}-}devel-matched}\ -%{expand:%%files -f kernel-%{?3:%{3}-}modules-extra.list %{?3:%{3}-}modules-extra}\ -%config(noreplace) /etc/modprobe.d/*-blacklist.conf\ -%{expand:%%files -f kernel-%{?3:%{3}-}modules-internal.list %{?3:%{3}-}modules-internal}\ -%if %{with_debuginfo}\ -%ifnarch noarch\ -%{expand:%%files -f debuginfo%{?3}.list %{?3:%{3}-}debuginfo}\ -%endif\ -%endif\ -%if %{?3:1} %{!?3:0}\ -%{expand:%%files %{3}}\ -%endif\ -%endif\ -%{nil} - -%kernel_variant_files %{_use_vdso} %{with_up} -%kernel_variant_files %{_use_vdso} %{with_debug} debug -%if %{with_debug_meta} -%files debug -%files debug-core -%files debug-devel -%files debug-devel-matched -%files debug-modules -%files debug-modules-extra -%endif -%kernel_variant_files %{use_vdso} %{with_pae} lpae -%kernel_variant_files %{_use_vdso} %{with_zfcpdump} zfcpdump - -%define kernel_variant_ipaclones(k:) \ -%if %{1}\ -%if %{with_ipaclones}\ -%{expand:%%files %{?2:%{2}-}ipaclones-internal}\ -%defattr(-,root,root)\ -%defverify(not mtime)\ -/usr/src/kernels/%{KVERREL}%{?2:+%{2}}-ipaclones\ -%endif\ -%endif\ -%{nil} - -%kernel_variant_ipaclones %{with_up} - -# plz don't put in a version string unless you're going to tag -# and build. -# -# -%changelog Mon Mar 28 2022 Fedora Kernel Team <kernel-team@xxxxxxxxxxxxxxxxx> [5.17.0-0.rc0.78e36f3b0dae.6.test] - -### -# The following Emacs magic makes C-c C-e use UTC dates. -# Local Variables: -# rpm-change-log-uses-utc: t -# End: -### diff --git a/redhat/self-test/data/centos-df0cc57e057f.el7.spec b/redhat/self-test/data/centos-df0cc57e057f.el7.spec index blahblah..blahblah 100755 --- a/redhat/self-test/data/centos-df0cc57e057f.el7.spec +++ b/redhat/self-test/data/centos-df0cc57e057f.el7.spec @@ -1,3050 +1,13 @@ -# All Global changes to build and install go here. -# Per the below section about __spec_install_pre, any rpm -# environment changes that affect %%install need to go -# here before the %%install macro is pre-built. - -# Disable LTO in userspace packages. -%global _lto_cflags %{nil} - -# Option to enable compiling with clang instead of gcc. -%bcond_with toolchain_clang - -%if %{with toolchain_clang} -%global toolchain clang -%endif - -# Compile the kernel with LTO (only supported when building with clang). -%bcond_with clang_lto - -%if %{with clang_lto} && %{without toolchain_clang} -{error:clang_lto requires --with toolchain_clang} -%endif - -# Cross compile on copr for arm -# See https://bugzilla.redhat.com/1879599 -%if 0%{?_with_cross_arm:1} -%global _target_cpu armv7hl -%global _arch arm -%global _build_arch arm -%global _with_cross 1 -%endif - -# The kernel's %%install section is special -# Normally the %%install section starts by cleaning up the BUILD_ROOT -# like so: -# -# %%__spec_install_pre %%{___build_pre}\ -# [ "$RPM_BUILD_ROOT" != "/" ] && rm -rf "${RPM_BUILD_ROOT}"\ -# mkdir -p `dirname "$RPM_BUILD_ROOT"`\ -# mkdir "$RPM_BUILD_ROOT"\ -# %%{nil} -# -# But because of kernel variants, the %%build section, specifically -# BuildKernel(), moves each variant to its final destination as the -# variant is built. This violates the expectation of the %%install -# section. As a result we snapshot the current env variables and -# purposely leave out the removal section. All global wide changes -# should be added above this line otherwise the %%install section -# will not see them. -%global __spec_install_pre %{___build_pre} - -# At the time of this writing (2019-03), RHEL8 packages use w2.xzdio -# compression for rpms (xz, level 2). -# Kernel has several large (hundreds of mbytes) rpms, they take ~5 mins -# to compress by single-threaded xz. Switch to threaded compression, -# and from level 2 to 3 to keep compressed sizes close to "w2" results. -# -# NB: if default compression in /usr/lib/rpm/redhat/macros ever changes, -# this one might need tweaking (e.g. if default changes to w3.xzdio, -# change below to w4T.xzdio): -# -# This is disabled on i686 as it triggers oom errors - -%ifnarch i686 -%define _binary_payload w3T.xzdio -%endif - -Summary: The Linux kernel -%if 0%{?fedora} -%define secure_boot_arch x86_64 -%else -%define secure_boot_arch x86_64 aarch64 s390x ppc64le -%endif - -# Signing for secure boot authentication -%ifarch %{secure_boot_arch} -%global signkernel 1 -%else -%global signkernel 0 -%endif - -# Sign modules on all arches -%global signmodules 1 - -# Compress modules only for architectures that build modules -%ifarch noarch -%global zipmodules 0 -%else -%global zipmodules 1 -%endif - -%if %{zipmodules} -%global zipsed -e 's/\.ko$/\.ko.xz/' -# for parallel xz processes, replace with 1 to go back to single process -%endif - -%if 0%{?fedora} -%define primary_target fedora -%else -%define primary_target rhel -%endif - -# -# genspec.sh variables -# - -# Include Fedora files %global include_fedora 1 -# Include RHEL files %global include_rhel 1 -# Provide Patchlist.changelog file %global patchlist_changelog 1 -# Set released_kernel to 1 when the upstream source tarball contains a -# kernel release. (This includes prepatch or "rc" releases.) -# Set released_kernel to 0 when the upstream source tarball contains an -# unreleased kernel development snapshot. %global released_kernel 0 -# Set debugbuildsenabled to 1 to build separate base and debug kernels -# (on supported architectures). The kernel-debug-* subpackages will -# contain the debug kernel. -# Set debugbuildsenabled to 0 to not build a separate debug kernel, but -# to build the base kernel using the debug configuration. (Specifying -# the --with-release option overrides this setting.) -%define debugbuildsenabled 1 %define buildid .test %define specversion 5.16.0 %define patchversion 5.16 %define pkgrelease 6.test %define kversion 5 %define tarfile_release 5.16.0-6.test -# This is needed to do merge window version magic %define patchlevel 16 -# allow pkg_release to have configurable %%{?dist} tag %define specrelease 6%{?buildid}%{?dist} - -# -# End of genspec.sh variables -# - -%define pkg_release %{specrelease} - -# libexec dir is not used by the linker, so the shared object there -# should not be exported to RPM provides -%global __provides_exclude_from ^%{_libexecdir}/kselftests - -# The following build options are enabled by default, but may become disabled -# by later architecture-specific checks. These can also be disabled by using -# --without <opt> in the rpmbuild command, or by forcing these values to 0. -# -# standard kernel -%define with_up %{?_without_up: 0} %{?!_without_up: 1} -# kernel PAE (only valid for ARM (lpae)) -%define with_pae %{?_without_pae: 0} %{?!_without_pae: 1} -# kernel-debug -%define with_debug %{?_without_debug: 0} %{?!_without_debug: 1} -# kernel-zfcpdump (s390 specific kernel for zfcpdump) -%define with_zfcpdump %{?_without_zfcpdump: 0} %{?!_without_zfcpdump: 1} -# kernel-doc -%define with_doc %{?_without_doc: 0} %{?!_without_doc: 1} -# kernel-headers -%define with_headers %{?_without_headers: 0} %{?!_without_headers: 1} -%define with_cross_headers %{?_without_cross_headers: 0} %{?!_without_cross_headers: 1} -# perf -%define with_perf %{?_without_perf: 0} %{?!_without_perf: 1} -# tools -%define with_tools %{?_without_tools: 0} %{?!_without_tools: 1} -# bpf tool -%define with_bpftool %{?_without_bpftool: 0} %{?!_without_bpftool: 1} -# kernel-debuginfo -%define with_debuginfo %{?_without_debuginfo: 0} %{?!_without_debuginfo: 1} -# kernel-abi-stablelists -%define with_kernel_abi_stablelists %{?_without_kernel_abi_stablelists: 0} %{?!_without_kernel_abi_stablelists: 1} -# internal samples and selftests -%define with_selftests %{?_without_selftests: 0} %{?!_without_selftests: 1} -# -# Additional options for user-friendly one-off kernel building: -# -# Only build the base kernel (--with baseonly): -%define with_baseonly %{?_with_baseonly: 1} %{?!_with_baseonly: 0} -# Only build the pae kernel (--with paeonly): -%define with_paeonly %{?_with_paeonly: 1} %{?!_with_paeonly: 0} -# Only build the debug kernel (--with dbgonly): -%define with_dbgonly %{?_with_dbgonly: 1} %{?!_with_dbgonly: 0} -# Control whether we perform a compat. check against published ABI. -%define with_kabichk %{?_without_kabichk: 0} %{?!_without_kabichk: 1} -# Temporarily disable kabi checks until RC. -%define with_kabichk 0 -# Control whether we perform a compat. check against DUP ABI. -%define with_kabidupchk %{?_with_kabidupchk: 1} %{?!_with_kabidupchk: 0} -# -# Control whether to run an extensive DWARF based kABI check. -# Note that this option needs to have baseline setup in SOURCE300. -%define with_kabidwchk %{?_without_kabidwchk: 0} %{?!_without_kabidwchk: 1} -%define with_kabidw_base %{?_with_kabidw_base: 1} %{?!_with_kabidw_base: 0} -# -# Control whether to install the vdso directories. -%define with_vdso_install %{?_without_vdso_install: 0} %{?!_without_vdso_install: 1} -# -# should we do C=1 builds with sparse -%define with_sparse %{?_with_sparse: 1} %{?!_with_sparse: 0} -# -# Cross compile requested? -%define with_cross %{?_with_cross: 1} %{?!_with_cross: 0} -# -# build a release kernel on rawhide -%define with_release %{?_with_release: 1} %{?!_with_release: 0} - -# verbose build, i.e. no silent rules and V=1 -%define with_verbose %{?_with_verbose: 1} %{?!_with_verbose: 0} - -# -# check for mismatched config options -%define with_configchecks %{?_without_configchecks: 0} %{?!_without_configchecks: 1} - -# -# gcov support -%define with_gcov %{?_with_gcov:1}%{?!_with_gcov:0} - -# -# ipa_clone support -%define with_ipaclones %{?_without_ipaclones: 0} %{?!_without_ipaclones: 1} - -# Want to build a vanilla kernel build without any non-upstream patches? -%define with_vanilla %{?_with_vanilla: 1} %{?!_with_vanilla: 0} - -%if 0%{?fedora} -# Kernel headers are being split out into a separate package -%define with_headers 0 -%define with_cross_headers 0 -# no ipa_clone for now -%define with_ipaclones 0 -# no stablelist -%define with_kernel_abi_stablelists 0 -# Fedora builds these separately -%define with_perf 0 -%define with_tools 0 -%define with_bpftool 0 -# selftests turns on bpftool -%define with_selftests 0 -%endif - -%if %{with_verbose} -%define make_opts V=1 -%else -%define make_opts -s -%endif - -%if %{with toolchain_clang} -%ifarch s390x ppc64le -%global llvm_ias 0 -%else -%global llvm_ias 1 -%endif -%global clang_make_opts HOSTCC=clang CC=clang LLVM_IAS=%{llvm_ias} -%if %{with clang_lto} -%global clang_make_opts %{clang_make_opts} LD=ld.lld HOSTLD=ld.lld AR=llvm-ar NM=llvm-nm HOSTAR=llvm-ar HOSTNM=llvm-nm -%endif -%global make_opts %{make_opts} %{clang_make_opts} -# clang does not support the -fdump-ipa-clones option -%global with_ipaclones 0 -%endif - -# turn off debug kernel and kabichk for gcov builds -%if %{with_gcov} -%define with_debug 0 -%define with_kabichk 0 -%define with_kabidupchk 0 -%define with_kabidwchk 0 -%define with_kabidw_base 0 -%define with_kernel_abi_stablelists 0 -%endif - -# turn off kABI DWARF-based check if we're generating the base dataset -%if %{with_kabidw_base} -%define with_kabidwchk 0 -%endif - -# kpatch_kcflags are extra compiler flags applied to base kernel -# -fdump-ipa-clones is enabled only for base kernels on selected arches -%if %{with_ipaclones} -%ifarch x86_64 ppc64le -%define kpatch_kcflags -fdump-ipa-clones -%else -%define with_ipaclones 0 -%endif -%endif - -%define make_target bzImage -%define image_install_path boot - -%define KVERREL %{version}-%{release}.%{_target_cpu} -%define KVERREL_RE %(echo %KVERREL | sed 's/+/[+]/g') -%define hdrarch %_target_cpu -%define asmarch %_target_cpu - -%if 0%{!?nopatches:1} -%define nopatches 0 -%endif - -%if %{with_vanilla} -%define nopatches 1 -%endif - -%if %{with_release} -%define debugbuildsenabled 1 -%endif - -%if !%{with_debuginfo} -%define _enable_debug_packages 0 -%endif -%define debuginfodir /usr/lib/debug -# Needed because we override almost everything involving build-ids -# and debuginfo generation. Currently we rely on the old alldebug setting. -%global _build_id_links alldebug - -# kernel PAE is only built on ARMv7 -%ifnarch armv7hl -%define with_pae 0 -%endif - -# if requested, only build base kernel -%if %{with_baseonly} -%define with_pae 0 -%define with_debug 0 -%define with_vdso_install 0 -%define with_perf 0 -%define with_tools 0 -%define with_bpftool 0 -%define with_kernel_abi_stablelists 0 -%define with_selftests 0 -%define with_cross 0 -%define with_cross_headers 0 -%define with_ipaclones 0 -%endif - -# if requested, only build pae kernel -%if %{with_paeonly} -%define with_up 0 -%define with_debug 0 -%endif - -# if requested, only build debug kernel -%if %{with_dbgonly} -%define with_up 0 -%define with_vdso_install 0 -%define with_perf 0 -%define with_tools 0 -%define with_bpftool 0 -%define with_kernel_abi_stablelists 0 -%define with_selftests 0 -%define with_cross 0 -%define with_cross_headers 0 -%define with_ipaclones 0 -%endif - -# turn off kABI DUP check and DWARF-based check if kABI check is disabled -%if !%{with_kabichk} -%define with_kabidupchk 0 -%define with_kabidwchk 0 -%endif - -%if %{with_vdso_install} -%define use_vdso 1 -%endif - -# selftests require bpftool to be built -%if %{with_selftests} -%define with_bpftool 1 -%endif - -%ifnarch noarch -%define with_kernel_abi_stablelists 0 -%endif - -# Overrides for generic default options - -# only package docs noarch -%ifnarch noarch -%define with_doc 0 -%define doc_build_fail true -%endif - -%if 0%{?fedora} -# don't do debug builds on anything but i686 and x86_64 -%ifnarch i686 x86_64 -%define with_debug 0 -%endif -%endif - -# don't build noarch kernels or headers (duh) -%ifarch noarch -%define with_up 0 -%define with_headers 0 -%define with_cross_headers 0 -%define with_tools 0 -%define with_perf 0 -%define with_bpftool 0 -%define with_selftests 0 -%define with_debug 0 -%define all_arch_configs kernel-%{version}-*.config -%endif - -# sparse blows up on ppc -%ifnarch ppc64le -%define with_sparse 0 -%endif - -# zfcpdump mechanism is s390 only -%ifnarch s390x -%define with_zfcpdump 0 -%endif - -%if 0%{?fedora} -# This is not for Fedora -%define with_zfcpdump 0 -%endif - -# Per-arch tweaks - -%ifarch i686 -%define asmarch x86 -%define hdrarch i386 -%define all_arch_configs kernel-%{version}-i?86*.config -%define kernel_image arch/x86/boot/bzImage -%endif - -%ifarch x86_64 -%define asmarch x86 -%define all_arch_configs kernel-%{version}-x86_64*.config -%define kernel_image arch/x86/boot/bzImage -%endif - -%ifarch ppc64le -%define asmarch powerpc -%define hdrarch powerpc -%define make_target vmlinux -%define kernel_image vmlinux -%define kernel_image_elf 1 -%define use_vdso 0 -%define all_arch_configs kernel-%{version}-ppc64le*.config -%endif - -%ifarch s390x -%define asmarch s390 -%define hdrarch s390 -%define all_arch_configs kernel-%{version}-s390x.config -%define kernel_image arch/s390/boot/bzImage -%define vmlinux_decompressor arch/s390/boot/compressed/vmlinux -%endif - -%ifarch %{arm} -%define all_arch_configs kernel-%{version}-arm*.config -%define skip_nonpae_vdso 1 -%define asmarch arm -%define hdrarch arm -%define make_target bzImage -%define kernel_image arch/arm/boot/zImage -# http://lists.infradead.org/pipermail/linux-arm-kernel/2012-March/091404.html -%define kernel_mflags KALLSYMS_EXTRA_PASS=1 -# we only build headers/perf/tools on the base arm arches -# just like we used to only build them on i386 for x86 -%ifnarch armv7hl -%define with_headers 0 -%define with_cross_headers 0 -%endif -# These currently don't compile on armv7 -%define with_selftests 0 -%endif - -%ifarch aarch64 -%define all_arch_configs kernel-%{version}-aarch64*.config -%define asmarch arm64 -%define hdrarch arm64 -%define make_target Image.gz -%define kernel_image arch/arm64/boot/Image.gz -%endif - -# Should make listnewconfig fail if there's config options -# printed out? -%if %{nopatches} -%define with_configchecks 0 -%endif - -# To temporarily exclude an architecture from being built, add it to -# %%nobuildarches. Do _NOT_ use the ExclusiveArch: line, because if we -# don't build kernel-headers then the new build system will no longer let -# us use the previous build of that package -- it'll just be completely AWOL. -# Which is a BadThing(tm). - -# We only build kernel-headers on the following... -%if 0%{?fedora} -%define nobuildarches i386 -%else -%define nobuildarches i386 i686 %{arm} -%endif - -%ifarch %nobuildarches -# disable BuildKernel commands -%define with_up 0 -%define with_debug 0 -%define with_pae 0 -%define with_zfcpdump 0 - -%define with_debuginfo 0 -%define with_perf 0 -%define with_tools 0 -%define with_bpftool 0 -%define with_selftests 0 -%define _enable_debug_packages 0 -%endif - -# Architectures we build tools/cpupower on -%if 0%{?fedora} -%define cpupowerarchs %{ix86} x86_64 ppc64le %{arm} aarch64 -%else -%define cpupowerarchs i686 x86_64 ppc64le aarch64 -%endif - -%if 0%{?use_vdso} - -%if 0%{?skip_nonpae_vdso} -%define _use_vdso 0 -%else -%define _use_vdso 1 -%endif - -%else -%define _use_vdso 0 -%endif - -# If build of debug packages is disabled, we need to know if we want to create -# meta debug packages or not, after we define with_debug for all specific cases -# above. So this must be at the end here, after all cases of with_debug or not. -%define with_debug_meta 0 -%if !%{debugbuildsenabled} -%if %{with_debug} -%define with_debug_meta 1 -%endif -%define with_debug 0 -%endif - - -# -# Packages that need to be installed before the kernel is, because the %%post -# scripts use them. -# -%define kernel_prereq coreutils, systemd >= 203-2, /usr/bin/kernel-install -%define initrd_prereq dracut >= 027 - - -Name: kernel -License: GPLv2 and Redistributable, no modification permitted -URL: https://www.kernel.org/ -Version: %{specversion} -Release: %{pkg_release} -# DO NOT CHANGE THE 'ExclusiveArch' LINE TO TEMPORARILY EXCLUDE AN ARCHITECTURE BUILD. -# SET %%nobuildarches (ABOVE) INSTEAD -%if 0%{?fedora} -ExclusiveArch: noarch x86_64 s390x %{arm} aarch64 ppc64le -%else -ExclusiveArch: noarch i386 i686 x86_64 s390x %{arm} aarch64 ppc64le -%endif -ExclusiveOS: Linux -%ifnarch %{nobuildarches} -Requires: kernel-core-uname-r = %{KVERREL} -Requires: kernel-modules-uname-r = %{KVERREL} -%endif - - -# -# List the packages used during the kernel build -# -BuildRequires: kmod, patch, bash, coreutils, tar, git-core, which -BuildRequires: bzip2, xz, findutils, gzip, m4, perl-interpreter, perl-Carp, perl-devel, perl-generators, make, diffutils, gawk -BuildRequires: gcc, binutils, redhat-rpm-config, hmaccalc, bison, flex, gcc-c++ -BuildRequires: net-tools, hostname, bc, elfutils-devel -BuildRequires: dwarves -BuildRequires: python3-devel -BuildRequires: gcc-plugin-devel -# glibc-static is required for a consistent build environment (specifically -# CONFIG_CC_CAN_LINK_STATIC=y). -BuildRequires: glibc-static -%ifnarch %{nobuildarches} noarch -BuildRequires: bpftool -%endif -%if %{with_headers} -BuildRequires: rsync -%endif -%if %{with_doc} -BuildRequires: xmlto, asciidoc, python3-sphinx, python3-sphinx_rtd_theme -%endif -%if %{with_sparse} -BuildRequires: sparse -%endif -%if %{with_perf} -BuildRequires: zlib-devel binutils-devel newt-devel perl(ExtUtils::Embed) bison flex xz-devel -BuildRequires: audit-libs-devel -BuildRequires: java-devel -BuildRequires: libbpf-devel -BuildRequires: libbabeltrace-devel -BuildRequires: libtraceevent-devel -%ifnarch %{arm} s390x -BuildRequires: numactl-devel -%endif -%ifarch aarch64 -BuildRequires: opencsd-devel >= 1.0.0 -%endif -%endif -%if %{with_tools} -BuildRequires: gettext ncurses-devel -BuildRequires: libcap-devel libcap-ng-devel -%ifnarch s390x -BuildRequires: pciutils-devel -%endif -%ifarch i686 x86_64 -BuildRequires: libnl3-devel -%endif -%endif -%if %{with_tools} || %{signmodules} || %{signkernel} -BuildRequires: openssl-devel -%endif -%if %{with_bpftool} -BuildRequires: python3-docutils -BuildRequires: zlib-devel binutils-devel -%endif -%if %{with_selftests} -BuildRequires: clang llvm -%ifnarch %{arm} -BuildRequires: numactl-devel -%endif -BuildRequires: libcap-devel libcap-ng-devel rsync libmnl-devel -%endif -BuildConflicts: rhbuildsys(DiskFree) < 500Mb -%if %{with_debuginfo} -BuildRequires: rpm-build, elfutils -BuildConflicts: rpm < 4.13.0.1-19 -BuildConflicts: dwarves < 1.13 -# Most of these should be enabled after more investigation -%undefine _include_minidebuginfo -%undefine _find_debuginfo_dwz_opts -%undefine _unique_build_ids -%undefine _unique_debug_names -%undefine _unique_debug_srcs -%undefine _debugsource_packages -%undefine _debuginfo_subpackages -%global _find_debuginfo_opts -r -%global _missing_build_ids_terminate_build 1 -%global _no_recompute_build_ids 1 -%endif -%if %{with_kabidwchk} || %{with_kabidw_base} -BuildRequires: kabi-dw -%endif - -%if %{signkernel}%{signmodules} -BuildRequires: openssl -%if %{signkernel} -# ELN uses Fedora signing process, so exclude -%if 0%{?rhel}%{?centos} && !0%{?eln} -BuildRequires: system-sb-certs -%endif -%ifarch x86_64 aarch64 -BuildRequires: nss-tools -BuildRequires: pesign >= 0.10-4 -%endif -%endif -%endif - -%if %{with_cross} -BuildRequires: binutils-%{_build_arch}-linux-gnu, gcc-%{_build_arch}-linux-gnu -%define cross_opts CROSS_COMPILE=%{_build_arch}-linux-gnu- -%define __strip %{_build_arch}-linux-gnu-strip -%endif - -# These below are required to build man pages -%if %{with_perf} -BuildRequires: xmlto -%endif -%if %{with_perf} || %{with_tools} -BuildRequires: asciidoc -%endif - -%if %{with toolchain_clang} -BuildRequires: clang -%endif - -%if %{with clang_lto} -BuildRequires: llvm -BuildRequires: lld -%endif - -# Because this is the kernel, it's hard to get a single upstream URL -# to represent the base without needing to do a bunch of patching. This -# tarball is generated from a src-git tree. If you want to see the -# exact git commit you can run -# -# xzcat -qq ${TARBALL} | git get-tar-commit-id -Source0: linux-%{tarfile_release}.tar.xz - -Source1: Makefile.rhelver - - -# Name of the packaged file containing signing key -%ifarch ppc64le -%define signing_key_filename kernel-signing-ppc.cer -%endif -%ifarch s390x -%define signing_key_filename kernel-signing-s390.cer -%endif - -%if %{?released_kernel} - -Source10: redhatsecurebootca5.cer -Source11: redhatsecurebootca1.cer -Source12: redhatsecureboot501.cer -Source13: redhatsecureboot301.cer -Source14: secureboot_s390.cer -Source15: secureboot_ppc.cer - -%define secureboot_ca_1 %{SOURCE10} -%define secureboot_ca_0 %{SOURCE11} -%ifarch x86_64 aarch64 -%define secureboot_key_1 %{SOURCE12} -%define pesign_name_1 redhatsecureboot501 -%define secureboot_key_0 %{SOURCE13} -%define pesign_name_0 redhatsecureboot301 -%endif -%ifarch s390x -%define secureboot_key_0 %{SOURCE14} -%define pesign_name_0 redhatsecureboot302 -%endif -%ifarch ppc64le -%define secureboot_key_0 %{SOURCE15} -%define pesign_name_0 redhatsecureboot303 -%endif - -# released_kernel -%else - -Source10: redhatsecurebootca4.cer -Source11: redhatsecurebootca2.cer -Source12: redhatsecureboot401.cer -Source13: redhatsecureboot003.cer - -%define secureboot_ca_1 %{SOURCE10} -%define secureboot_ca_0 %{SOURCE11} -%define secureboot_key_1 %{SOURCE12} -%define pesign_name_1 redhatsecureboot401 -%define secureboot_key_0 %{SOURCE13} -%define pesign_name_0 redhatsecureboot003 - -# released_kernel -%endif - -Source20: mod-denylist.sh -Source21: mod-sign.sh -Source22: parallel_xz.sh - -%define modsign_cmd %{SOURCE21} - -%if 0%{?include_rhel} -Source23: x509.genkey.rhel - -Source24: kernel-aarch64-rhel.config -Source25: kernel-aarch64-debug-rhel.config -Source26: mod-extra.list.rhel - -Source27: kernel-ppc64le-rhel.config -Source28: kernel-ppc64le-debug-rhel.config -Source29: kernel-s390x-rhel.config -Source30: kernel-s390x-debug-rhel.config -Source31: kernel-s390x-zfcpdump-rhel.config -Source32: kernel-x86_64-rhel.config -Source33: kernel-x86_64-debug-rhel.config - -Source34: filter-x86_64.sh.rhel -Source35: filter-armv7hl.sh.rhel -Source37: filter-aarch64.sh.rhel -Source38: filter-ppc64le.sh.rhel -Source39: filter-s390x.sh.rhel -Source40: filter-modules.sh.rhel - -Source41: x509.genkey.centos -%endif - -%if 0%{?include_fedora} -Source50: x509.genkey.fedora -Source51: mod-extra.list.fedora - -Source52: kernel-aarch64-fedora.config -Source53: kernel-aarch64-debug-fedora.config -Source54: kernel-armv7hl-fedora.config -Source55: kernel-armv7hl-debug-fedora.config -Source56: kernel-armv7hl-lpae-fedora.config -Source57: kernel-armv7hl-lpae-debug-fedora.config -Source60: kernel-ppc64le-fedora.config -Source61: kernel-ppc64le-debug-fedora.config -Source62: kernel-s390x-fedora.config -Source63: kernel-s390x-debug-fedora.config -Source64: kernel-x86_64-fedora.config -Source65: kernel-x86_64-debug-fedora.config - -Source67: filter-x86_64.sh.fedora -Source68: filter-armv7hl.sh.fedora -Source70: filter-aarch64.sh.fedora -Source71: filter-ppc64le.sh.fedora -Source72: filter-s390x.sh.fedora -Source73: filter-modules.sh.fedora -%endif - -Source75: partial-kgcov-snip.config -Source80: generate_all_configs.sh -Source81: process_configs.sh - -Source82: update_scripts.sh - -Source84: mod-internal.list - -Source100: rheldup3.x509 -Source101: rhelkpatch1.x509 - -Source200: check-kabi - -Source201: Module.kabi_aarch64 -Source202: Module.kabi_ppc64le -Source203: Module.kabi_s390x -Source204: Module.kabi_x86_64 - -Source210: Module.kabi_dup_aarch64 -Source211: Module.kabi_dup_ppc64le -Source212: Module.kabi_dup_s390x -Source213: Module.kabi_dup_x86_64 - -Source300: kernel-abi-stablelists-%{specversion}-%{pkgrelease}.tar.bz2 -Source301: kernel-kabi-dw-%{specversion}-%{pkgrelease}.tar.bz2 - -# Sources for kernel-tools -Source2000: cpupower.service -Source2001: cpupower.config -Source2002: kvm_stat.logrotate - -# Some people enjoy building customized kernels from the dist-git in Fedora and -# use this to override configuration options. One day they may all use the -# source tree, but in the mean time we carry this to support the legacy workflow -Source3000: merge.pl -Source3001: kernel-local -%if %{patchlist_changelog} -Source3002: Patchlist.changelog -%endif - -Source4000: README.rst -Source4001: rpminspect.yaml -Source4002: gating.yaml - -## Patches needed for building this package - -%if !%{nopatches} - -Patch1: patch-%{patchversion}-redhat.patch -%endif - -# empty final patch to facilitate testing of kernel patches -Patch999999: linux-kernel-test.patch - -# END OF PATCH DEFINITIONS - -%description -The kernel meta package - -# -# This macro does requires, provides, conflicts, obsoletes for a kernel package. -# %%kernel_reqprovconf <subpackage> -# It uses any kernel_<subpackage>_conflicts and kernel_<subpackage>_obsoletes -# macros defined above. -# -%define kernel_reqprovconf \ -Provides: kernel = %{specversion}-%{pkg_release}\ -Provides: kernel-%{_target_cpu} = %{specversion}-%{pkg_release}%{?1:+%{1}}\ -Provides: kernel-drm-nouveau = 16\ -Provides: kernel-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires(pre): %{kernel_prereq}\ -Requires(pre): %{initrd_prereq}\ -Requires(pre): ((linux-firmware >= 20150904-56.git6ebf5d57) if linux-firmware)\ -Recommends: linux-firmware\ -Requires(preun): systemd >= 200\ -Conflicts: xfsprogs < 4.3.0-1\ -Conflicts: xorg-x11-drv-vmmouse < 13.0.99\ -%{expand:%%{?kernel%{?1:_%{1}}_conflicts:Conflicts: %%{kernel%{?1:_%{1}}_conflicts}}}\ -%{expand:%%{?kernel%{?1:_%{1}}_obsoletes:Obsoletes: %%{kernel%{?1:_%{1}}_obsoletes}}}\ -%{expand:%%{?kernel%{?1:_%{1}}_provides:Provides: %%{kernel%{?1:_%{1}}_provides}}}\ -# We can't let RPM do the dependencies automatic because it'll then pick up\ -# a correct but undesirable perl dependency from the module headers which\ -# isn't required for the kernel proper to function\ -AutoReq: no\ -AutoProv: yes\ -%{nil} - - -%package doc -Summary: Various documentation bits found in the kernel source -Group: Documentation -%description doc -This package contains documentation files from the kernel -source. Various bits of information about the Linux kernel and the -device drivers shipped with it are documented in these files. - -You'll want to install this package if you need a reference to the -options that can be passed to Linux kernel modules at load time. - - -%package headers -Summary: Header files for the Linux kernel for use by glibc -Obsoletes: glibc-kernheaders < 3.0-46 -Provides: glibc-kernheaders = 3.0-46 -%description headers -Kernel-headers includes the C header files that specify the interface -between the Linux kernel and userspace libraries and programs. The -header files define structures and constants that are needed for -building most standard programs and are also needed for rebuilding the -glibc package. - -%package cross-headers -Summary: Header files for the Linux kernel for use by cross-glibc -%description cross-headers -Kernel-cross-headers includes the C header files that specify the interface -between the Linux kernel and userspace libraries and programs. The -header files define structures and constants that are needed for -building most standard programs and are also needed for rebuilding the -cross-glibc package. - - -%package debuginfo-common-%{_target_cpu} -Summary: Kernel source files used by %{name}-debuginfo packages -Provides: installonlypkg(kernel) -%description debuginfo-common-%{_target_cpu} -This package is required by %{name}-debuginfo subpackages. -It provides the kernel source files common to all builds. - -%if %{with_perf} -%package -n perf -Summary: Performance monitoring for the Linux kernel -Requires: bzip2 -License: GPLv2 -%description -n perf -This package contains the perf tool, which enables performance monitoring -of the Linux kernel. - -%package -n perf-debuginfo -Summary: Debug information for package perf -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release} -AutoReqProv: no -%description -n perf-debuginfo -This package provides debug information for the perf package. - -# Note that this pattern only works right to match the .build-id -# symlinks because of the trailing nonmatching alternation and -# the leading .*, because of find-debuginfo.sh's buggy handling -# of matching the pattern against the symlinks file. -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{_bindir}/perf(\.debug)?|.*%%{_libexecdir}/perf-core/.*|.*%%{_libdir}/libperf-jvmti.so(\.debug)?|XXX' -o perf-debuginfo.list} - -%package -n python3-perf -Summary: Python bindings for apps which will manipulate perf events -%description -n python3-perf -The python3-perf package contains a module that permits applications -written in the Python programming language to use the interface -to manipulate perf events. - -%package -n python3-perf-debuginfo -Summary: Debug information for package perf python bindings -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release} -AutoReqProv: no -%description -n python3-perf-debuginfo -This package provides debug information for the perf python bindings. - -# the python_sitearch macro should already be defined from above -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{python3_sitearch}/perf.*so(\.debug)?|XXX' -o python3-perf-debuginfo.list} - -# with_perf -%endif - -%if %{with_tools} -%package -n kernel-tools -Summary: Assortment of tools for the Linux kernel -License: GPLv2 -%ifarch %{cpupowerarchs} -Provides: cpupowerutils = 1:009-0.6.p1 -Obsoletes: cpupowerutils < 1:009-0.6.p1 -Provides: cpufreq-utils = 1:009-0.6.p1 -Provides: cpufrequtils = 1:009-0.6.p1 -Obsoletes: cpufreq-utils < 1:009-0.6.p1 -Obsoletes: cpufrequtils < 1:009-0.6.p1 -Obsoletes: cpuspeed < 1:1.5-16 -Requires: kernel-tools-libs = %{version}-%{release} -%endif -%define __requires_exclude ^%{_bindir}/python -%description -n kernel-tools -This package contains the tools/ directory from the kernel source -and the supporting documentation. - -%package -n kernel-tools-libs -Summary: Libraries for the kernels-tools -License: GPLv2 -%description -n kernel-tools-libs -This package contains the libraries built from the tools/ directory -from the kernel source. - -%package -n kernel-tools-libs-devel -Summary: Assortment of tools for the Linux kernel -License: GPLv2 -Requires: kernel-tools = %{version}-%{release} -%ifarch %{cpupowerarchs} -Provides: cpupowerutils-devel = 1:009-0.6.p1 -Obsoletes: cpupowerutils-devel < 1:009-0.6.p1 -%endif -Requires: kernel-tools-libs = %{version}-%{release} -Provides: kernel-tools-devel -%description -n kernel-tools-libs-devel -This package contains the development files for the tools/ directory from -the kernel source. - -%package -n kernel-tools-debuginfo -Summary: Debug information for package kernel-tools -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release} -AutoReqProv: no -%description -n kernel-tools-debuginfo -This package provides debug information for package kernel-tools. - -# Note that this pattern only works right to match the .build-id -# symlinks because of the trailing nonmatching alternation and -# the leading .*, because of find-debuginfo.sh's buggy handling -# of matching the pattern against the symlinks file. -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{_bindir}/centrino-decode(\.debug)?|.*%%{_bindir}/powernow-k8-decode(\.debug)?|.*%%{_bindir}/cpupower(\.debug)?|.*%%{_libdir}/libcpupower.*|.*%%{_bindir}/turbostat(\.debug)?|.*%%{_bindir}/x86_energy_perf_policy(\.debug)?|.*%%{_bindir}/tmon(\.debug)?|.*%%{_bindir}/lsgpio(\.debug)?|.*%%{_bindir}/gpio-hammer(\.debug)?|.*%%{_bindir}/gpio-event-mon(\.debug)?|.*%%{_bindir}/gpio-watch(\.debug)?|.*%%{_bindir}/iio_event_monitor(\.debug)?|.*%%{_bindir}/iio_generic_buffer(\.debug)?|.*%%{_bindir}/lsiio(\.debug)?|.*%%{_bindir}/intel-speed-select(\.debug)?|.*%%{_bindir}/page_owner_sort(\.debug)?|.*%%{_bindir}/slabinfo(\.debug)?|.*%%{_sbindir}/intel_sdsi(\.debug)?|XXX' -o kernel-tools-debuginfo.list} - -# with_tools -%endif - -%if %{with_bpftool} - -%package -n bpftool -Summary: Inspection and simple manipulation of eBPF programs and maps -License: GPLv2 -%description -n bpftool -This package contains the bpftool, which allows inspection and simple -manipulation of eBPF programs and maps. - -%package -n bpftool-debuginfo -Summary: Debug information for package bpftool -Group: Development/Debug -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release} -AutoReqProv: no -%description -n bpftool-debuginfo -This package provides debug information for the bpftool package. - -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{_sbindir}/bpftool(\.debug)?|XXX' -o bpftool-debuginfo.list} - -# with_bpftool -%endif - -%if %{with_selftests} - -%package selftests-internal -Summary: Kernel samples and selftests -License: GPLv2 -Requires: binutils, bpftool, iproute-tc, nmap-ncat, python3 -%description selftests-internal -Kernel sample programs and selftests. - -# Note that this pattern only works right to match the .build-id -# symlinks because of the trailing nonmatching alternation and -# the leading .*, because of find-debuginfo.sh's buggy handling -# of matching the pattern against the symlinks file. -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{_libexecdir}/(ksamples|kselftests)/.*|XXX' -o selftests-debuginfo.list} - -# with_selftests -%endif - -%if %{with_gcov} -%package gcov -Summary: gcov graph and source files for coverage data collection. -%description gcov -kernel-gcov includes the gcov graph and source files for gcov coverage collection. -%endif - -%package -n kernel-abi-stablelists -Summary: The Red Hat Enterprise Linux kernel ABI symbol stablelists -AutoReqProv: no -%description -n kernel-abi-stablelists -The kABI package contains information pertaining to the Red Hat Enterprise -Linux kernel ABI, including lists of kernel symbols that are needed by -external Linux kernel modules, and a yum plugin to aid enforcement. - -%if %{with_kabidw_base} -%package kernel-kabidw-base-internal -Summary: The baseline dataset for kABI verification using DWARF data -Group: System Environment/Kernel -AutoReqProv: no -%description kernel-kabidw-base-internal -The package contains data describing the current ABI of the Red Hat Enterprise -Linux kernel, suitable for the kabi-dw tool. -%endif - -# -# This macro creates a kernel-<subpackage>-debuginfo package. -# %%kernel_debuginfo_package <subpackage> -# -# Explanation of the find_debuginfo_opts: We build multiple kernels (debug -# pae etc.) so the regex filters those kernels appropriately. We also -# have to package several binaries as part of kernel-devel but getting -# unique build-ids is tricky for these userspace binaries. We don't really -# care about debugging those so we just filter those out and remove it. -%define kernel_debuginfo_package() \ -%package %{?1:%{1}-}debuginfo\ -Summary: Debug information for package %{name}%{?1:-%{1}}\ -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release}\ -Provides: %{name}%{?1:-%{1}}-debuginfo-%{_target_cpu} = %{version}-%{release}\ -Provides: installonlypkg(kernel)\ -AutoReqProv: no\ -%description %{?1:%{1}-}debuginfo\ -This package provides debug information for package %{name}%{?1:-%{1}}.\ -This is required to use SystemTap with %{name}%{?1:-%{1}}-%{KVERREL}.\ -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} --keep-section '.BTF' -p '.*\/usr\/src\/kernels/.*|XXX' -o ignored-debuginfo.list -p '/.*/%%{KVERREL_RE}%{?1:[+]%{1}}/.*|/.*%%{KVERREL_RE}%{?1:\+%{1}}(\.debug)?' -o debuginfo%{?1}.list}\ -%{nil} - -# -# This macro creates a kernel-<subpackage>-devel package. -# %%kernel_devel_package [-m] <subpackage> <pretty-name> -# -%define kernel_devel_package(m) \ -%package %{?1:%{1}-}devel\ -Summary: Development package for building kernel modules to match the %{?2:%{2} }kernel\ -Provides: kernel%{?1:-%{1}}-devel-%{_target_cpu} = %{version}-%{release}\ -Provides: kernel-devel-%{_target_cpu} = %{version}-%{release}%{?1:+%{1}}\ -Provides: kernel-devel-uname-r = %{KVERREL}%{?1:+%{1}}\ -Provides: installonlypkg(kernel)\ -AutoReqProv: no\ -Requires(pre): findutils\ -Requires: findutils\ -Requires: perl-interpreter\ -Requires: openssl-devel\ -Requires: elfutils-libelf-devel\ -Requires: bison\ -Requires: flex\ -Requires: make\ -Requires: gcc\ -%if %{-m:1}%{!-m:0}\ -Requires: kernel-devel-uname-r = %{KVERREL}\ -%endif\ -%description %{?1:%{1}-}devel\ -This package provides kernel headers and makefiles sufficient to build modules\ -against the %{?2:%{2} }kernel package.\ -%{nil} - -# -# This macro creates an empty kernel-<subpackage>-devel-matched package that -# requires both the core and devel packages locked on the same version. -# %%kernel_devel_matched_package [-m] <subpackage> <pretty-name> -# -%define kernel_devel_matched_package(m) \ -%package %{?1:%{1}-}devel-matched\ -Summary: Meta package to install matching core and devel packages for a given %{?2:%{2} }kernel\ -Requires: kernel%{?1:-%{1}}-devel = %{version}-%{release}\ -Requires: kernel%{?1:-%{1}}-core = %{version}-%{release}\ -%description %{?1:%{1}-}devel-matched\ -This meta package is used to install matching core and devel packages for a given %{?2:%{2} }kernel.\ -%{nil} - -# -# kernel-<variant>-ipaclones-internal package -# -%define kernel_ipaclones_package() \ -%package %{?1:%{1}-}ipaclones-internal\ -Summary: *.ipa-clones files generated by -fdump-ipa-clones for kernel%{?1:-%{1}}\ -Group: System Environment/Kernel\ -AutoReqProv: no\ -%description %{?1:%{1}-}ipaclones-internal\ -This package provides *.ipa-clones files.\ -%{nil} - -# -# This macro creates a kernel-<subpackage>-modules-internal package. -# %%kernel_modules_internal_package <subpackage> <pretty-name> -# -%define kernel_modules_internal_package() \ -%package %{?1:%{1}-}modules-internal\ -Summary: Extra kernel modules to match the %{?2:%{2} }kernel\ -Group: System Environment/Kernel\ -Provides: kernel%{?1:-%{1}}-modules-internal-%{_target_cpu} = %{version}-%{release}\ -Provides: kernel%{?1:-%{1}}-modules-internal-%{_target_cpu} = %{version}-%{release}%{?1:+%{1}}\ -Provides: kernel%{?1:-%{1}}-modules-internal = %{version}-%{release}%{?1:+%{1}}\ -Provides: installonlypkg(kernel-module)\ -Provides: kernel%{?1:-%{1}}-modules-internal-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel%{?1:-%{1}}-modules-uname-r = %{KVERREL}%{?1:+%{1}}\ -AutoReq: no\ -AutoProv: yes\ -%description %{?1:%{1}-}modules-internal\ -This package provides kernel modules for the %{?2:%{2} }kernel package for Red Hat internal usage.\ -%{nil} - -# -# This macro creates a kernel-<subpackage>-modules-extra package. -# %%kernel_modules_extra_package [-m] <subpackage> <pretty-name> -# -%define kernel_modules_extra_package(m) \ -%package %{?1:%{1}-}modules-extra\ -Summary: Extra kernel modules to match the %{?2:%{2} }kernel\ -Provides: kernel%{?1:-%{1}}-modules-extra-%{_target_cpu} = %{version}-%{release}\ -Provides: kernel%{?1:-%{1}}-modules-extra-%{_target_cpu} = %{version}-%{release}%{?1:+%{1}}\ -Provides: kernel%{?1:-%{1}}-modules-extra = %{version}-%{release}%{?1:+%{1}}\ -Provides: installonlypkg(kernel-module)\ -Provides: kernel%{?1:-%{1}}-modules-extra-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel%{?1:-%{1}}-modules-uname-r = %{KVERREL}%{?1:+%{1}}\ -%if %{-m:1}%{!-m:0}\ -Requires: kernel-modules-extra-uname-r = %{KVERREL}\ -%endif\ -AutoReq: no\ -AutoProv: yes\ -%description %{?1:%{1}-}modules-extra\ -This package provides less commonly used kernel modules for the %{?2:%{2} }kernel package.\ -%{nil} - -# -# This macro creates a kernel-<subpackage>-modules package. -# %%kernel_modules_package [-m] <subpackage> <pretty-name> -# -%define kernel_modules_package(m) \ -%package %{?1:%{1}-}modules\ -Summary: kernel modules to match the %{?2:%{2}-}core kernel\ -Provides: kernel%{?1:-%{1}}-modules-%{_target_cpu} = %{version}-%{release}\ -Provides: kernel-modules-%{_target_cpu} = %{version}-%{release}%{?1:+%{1}}\ -Provides: kernel-modules = %{version}-%{release}%{?1:+%{1}}\ -Provides: installonlypkg(kernel-module)\ -Provides: kernel%{?1:-%{1}}-modules-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel-uname-r = %{KVERREL}%{?1:+%{1}}\ -%if %{-m:1}%{!-m:0}\ -Requires: kernel-modules-uname-r = %{KVERREL}\ -%endif\ -AutoReq: no\ -AutoProv: yes\ -%description %{?1:%{1}-}modules\ -This package provides commonly used kernel modules for the %{?2:%{2}-}core kernel package.\ -%{nil} - -# -# this macro creates a kernel-<subpackage> meta package. -# %%kernel_meta_package <subpackage> -# -%define kernel_meta_package() \ -%package %{1}\ -summary: kernel meta-package for the %{1} kernel\ -Requires: kernel-%{1}-core-uname-r = %{KVERREL}+%{1}\ -Requires: kernel-%{1}-modules-uname-r = %{KVERREL}+%{1}\ -Provides: installonlypkg(kernel)\ -%description %{1}\ -The meta-package for the %{1} kernel\ -%{nil} - -# -# This macro creates a kernel-<subpackage> and its -devel and -debuginfo too. -# %%define variant_summary The Linux kernel compiled for <configuration> -# %%kernel_variant_package [-n <pretty-name>] [-m] <subpackage> -# -%define kernel_variant_package(n:m) \ -%package %{?1:%{1}-}core\ -Summary: %{variant_summary}\ -Provides: kernel-%{?1:%{1}-}core-uname-r = %{KVERREL}%{?1:+%{1}}\ -Provides: installonlypkg(kernel)\ -%if %{-m:1}%{!-m:0}\ -Requires: kernel-core-uname-r = %{KVERREL}\ -%endif\ -%{expand:%%kernel_reqprovconf}\ -%if %{?1:1} %{!?1:0} \ -%{expand:%%kernel_meta_package %{?1:%{1}}}\ -%endif\ -%{expand:%%kernel_devel_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}} %{-m:%{-m}}}\ -%{expand:%%kernel_devel_matched_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}} %{-m:%{-m}}}\ -%{expand:%%kernel_modules_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}} %{-m:%{-m}}}\ -%{expand:%%kernel_modules_extra_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}} %{-m:%{-m}}}\ -%if %{-m:0}%{!-m:1}\ -%{expand:%%kernel_modules_internal_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}}}\ -%{expand:%%kernel_debuginfo_package %{?1:%{1}}}\ -%endif\ -%{nil} - -# Now, each variant package. - -%if %{with_pae} -%define variant_summary The Linux kernel compiled for Cortex-A15 -%kernel_variant_package lpae -%description lpae-core -This package includes a version of the Linux kernel with support for -Cortex-A15 devices with LPAE and HW virtualisation support -%endif - -%if %{with_zfcpdump} -%define variant_summary The Linux kernel compiled for zfcpdump usage -%kernel_variant_package zfcpdump -%description zfcpdump-core -The kernel package contains the Linux kernel (vmlinuz) for use by the -zfcpdump infrastructure. -# with_zfcpdump -%endif - -%define variant_summary The Linux kernel compiled with extra debugging enabled -%if !%{debugbuildsenabled} -%kernel_variant_package -m debug -%else -%kernel_variant_package debug -%endif -%description debug-core -The kernel package contains the Linux kernel (vmlinuz), the core of any -Linux operating system. The kernel handles the basic functions -of the operating system: memory allocation, process allocation, device -input and output, etc. - -This variant of the kernel has numerous debugging options enabled. -It should only be installed when trying to gather additional information -on kernel bugs, as some of these options impact performance noticably. - -# And finally the main -core package - -%define variant_summary The Linux kernel -%kernel_variant_package -%description core -The kernel package contains the Linux kernel (vmlinuz), the core of any -Linux operating system. The kernel handles the basic functions -of the operating system: memory allocation, process allocation, device -input and output, etc. - -%if %{with_ipaclones} -%kernel_ipaclones_package -%endif - -%prep -# do a few sanity-checks for --with *only builds -%if %{with_baseonly} -%if !%{with_up} -echo "Cannot build --with baseonly, up build is disabled" -exit 1 -%endif -%endif - -# more sanity checking; do it quietly -if [ "%{patches}" != "%%{patches}" ] ; then - for patch in %{patches} ; do - if [ ! -f $patch ] ; then - echo "ERROR: Patch ${patch##/*/} listed in specfile but is missing" - exit 1 - fi - done -fi 2>/dev/null - -patch_command='patch -p1 -F1 -s' -ApplyPatch() -{ - local patch=$1 - shift - if [ ! -f $RPM_SOURCE_DIR/$patch ]; then - exit 1 - fi - if ! grep -E "^Patch[0-9]+: $patch\$" %{_specdir}/${RPM_PACKAGE_NAME}.spec ; then - if [ "${patch:0:8}" != "patch-%{kversion}." ] ; then - echo "ERROR: Patch $patch not listed as a source patch in specfile" - exit 1 - fi - fi 2>/dev/null - case "$patch" in - *.bz2) bunzip2 < "$RPM_SOURCE_DIR/$patch" | $patch_command ${1+"$@"} ;; - *.gz) gunzip < "$RPM_SOURCE_DIR/$patch" | $patch_command ${1+"$@"} ;; - *.xz) unxz < "$RPM_SOURCE_DIR/$patch" | $patch_command ${1+"$@"} ;; - *) $patch_command ${1+"$@"} < "$RPM_SOURCE_DIR/$patch" ;; - esac -} - -# don't apply patch if it's empty -ApplyOptionalPatch() -{ - local patch=$1 - shift - if [ ! -f $RPM_SOURCE_DIR/$patch ]; then - exit 1 - fi - local C=$(wc -l $RPM_SOURCE_DIR/$patch | awk '{print $1}') - if [ "$C" -gt 9 ]; then - ApplyPatch $patch ${1+"$@"} - fi -} - -%setup -q -n kernel-%{tarfile_release} -c -mv linux-%{tarfile_release} linux-%{KVERREL} - -cd linux-%{KVERREL} -cp -a %{SOURCE1} . - -%if !%{nopatches} - -ApplyOptionalPatch patch-%{patchversion}-redhat.patch -%endif - -ApplyOptionalPatch linux-kernel-test.patch - -# END OF PATCH APPLICATIONS - -# Any further pre-build tree manipulations happen here. - -chmod +x scripts/checkpatch.pl -mv COPYING COPYING-%{version}-%{release} - -# This Prevents scripts/setlocalversion from mucking with our version numbers. -touch .scmversion - -# Mangle /usr/bin/python shebangs to /usr/bin/python3 -# Mangle all Python shebangs to be Python 3 explicitly -# -p preserves timestamps -# -n prevents creating ~backup files -# -i specifies the interpreter for the shebang -# This fixes errors such as -# *** ERROR: ambiguous python shebang in /usr/bin/kvm_stat: #!/usr/bin/python. Change it to python3 (or python2) explicitly. -# We patch all sources below for which we got a report/error. -pathfix.py -i "%{__python3} %{py3_shbang_opts}" -p -n \ - tools/kvm/kvm_stat/kvm_stat \ - scripts/show_delta \ - scripts/diffconfig \ - scripts/bloat-o-meter \ - scripts/jobserver-exec \ - tools \ - Documentation \ - scripts/clang-tools - -# only deal with configs if we are going to build for the arch -%ifnarch %nobuildarches - -if [ -L configs ]; then - rm -f configs -fi -mkdir configs -cd configs - -# Drop some necessary files from the source dir into the buildroot -cp $RPM_SOURCE_DIR/kernel-*.config . -cp %{SOURCE80} . -# merge.pl -cp %{SOURCE3000} . -# kernel-local -cp %{SOURCE3001} . -FLAVOR=%{primary_target} SPECVERSION=%{version} ./generate_all_configs.sh %{debugbuildsenabled} - -# Merge in any user-provided local config option changes -%ifnarch %nobuildarches -for i in %{all_arch_configs} -do - mv $i $i.tmp - ./merge.pl %{SOURCE3001} $i.tmp > $i -%if %{with_gcov} - echo "Merging with gcov options" - cat %{SOURCE75} - mv $i $i.tmp - ./merge.pl %{SOURCE75} $i.tmp > $i -%endif - rm $i.tmp -done -%endif - -%if %{with clang_lto} -for i in *aarch64*.config *x86_64*.config; do - sed -i 's/# CONFIG_LTO_CLANG_THIN is not set/CONFIG_LTO_CLANG_THIN=y/' $i - sed -i 's/CONFIG_LTO_NONE=y/# CONFIG_LTO_NONE is not set/' $i -done -%endif - -# Add DUP and kpatch certificates to system trusted keys for RHEL -%if 0%{?rhel} -%if %{signkernel}%{signmodules} -openssl x509 -inform der -in %{SOURCE100} -out rheldup3.pem -openssl x509 -inform der -in %{SOURCE101} -out rhelkpatch1.pem -cat rheldup3.pem rhelkpatch1.pem > ../certs/rhel.pem -%ifarch s390x ppc64le -openssl x509 -inform der -in %{secureboot_ca_0} -out secureboot.pem -cat secureboot.pem >> ../certs/rhel.pem -%endif -for i in *.config; do - sed -i 's@CONFIG_SYSTEM_TRUSTED_KEYS=""@CONFIG_SYSTEM_TRUSTED_KEYS="certs/rhel.pem"@' $i -done -%endif -%endif - -cp %{SOURCE81} . -OPTS="" -%if %{with_configchecks} - OPTS="$OPTS -w -n -c" -%endif -%if %{with clang_lto} -for opt in %{clang_make_opts}; do - OPTS="$OPTS -m $opt" -done -%endif -RHJOBS=$RPM_BUILD_NCPUS PACKAGE_NAME=kernel ./process_configs.sh $OPTS ${specversion} - -cp %{SOURCE82} . -RPM_SOURCE_DIR=$RPM_SOURCE_DIR ./update_scripts.sh %{primary_target} - -# We may want to override files from the primary target in case of building -# against a flavour of it (eg. centos not rhel), thus override it here if -# necessary -if [ "%{primary_target}" == "rhel" ]; then -%if 0%{?centos} - echo "Updating scripts/sources to centos version" - RPM_SOURCE_DIR=$RPM_SOURCE_DIR ./update_scripts.sh centos -%else - echo "Not updating scripts/sources to centos version" -%endif -fi - -# end of kernel config -%endif - -cd .. -# # End of Configs stuff - -# get rid of unwanted files resulting from patch fuzz -find . \( -name "*.orig" -o -name "*~" \) -delete >/dev/null - -# remove unnecessary SCM files -find . -name .gitignore -delete >/dev/null - -cd .. - -### -### build -### -%build - -%if %{with_sparse} -%define sparse_mflags C=1 -%endif - -cp_vmlinux() -{ - eu-strip --remove-comment -o "$2" "$1" -} - -# Note we need to disable these flags for cross builds because the flags -# from redhat-rpm-config assume that host == target so target arch -# flags cause issues with the host compiler. -%if !%{with_cross} -%define build_hostcflags %{?build_cflags} -%define build_hostldflags %{?build_ldflags} -%endif - -%define make %{__make} %{?cross_opts} %{?make_opts} HOSTCFLAGS="%{?build_hostcflags}" HOSTLDFLAGS="%{?build_hostldflags}" - -InitBuildVars() { - # Initialize the kernel .config file and create some variables that are - # needed for the actual build process. - - Variant=$1 - - # Pick the right kernel config file - Config=kernel-%{version}-%{_target_cpu}${Variant:+-${Variant}}.config - DevelDir=/usr/src/kernels/%{KVERREL}${Variant:++${Variant}} - - KernelVer=%{version}-%{release}.%{_target_cpu}${Variant:++${Variant}} - - # make sure EXTRAVERSION says what we want it to say - # Trim the release if this is a CI build, since KERNELVERSION is limited to 64 characters - ShortRel=$(perl -e "print \"%{release}\" =~ s/\.pr\.[0-9A-Fa-f]{32}//r") - perl -p -i -e "s/^EXTRAVERSION.*/EXTRAVERSION = -${ShortRel}.%{_target_cpu}${Variant:++${Variant}}/" Makefile - - # if pre-rc1 devel kernel, must fix up PATCHLEVEL for our versioning scheme - # if we are post rc1 this should match anyway so this won't matter - perl -p -i -e 's/^PATCHLEVEL.*/PATCHLEVEL = %{patchlevel}/' Makefile - - %{make} %{?_smp_mflags} mrproper - cp configs/$Config .config - - %if %{signkernel}%{signmodules} - cp configs/x509.genkey certs/. - %endif - - Arch=`head -1 .config | cut -b 3-` - echo USING ARCH=$Arch - - KCFLAGS="%{?kcflags}" - - # add kpatch flags for base kernel - if [ "$Variant" == "" ]; then - KCFLAGS="$KCFLAGS %{?kpatch_kcflags}" - fi -} - -BuildKernel() { - MakeTarget=$1 - KernelImage=$2 - DoVDSO=$3 - Variant=$4 - InstallName=${5:-vmlinuz} - - DoModules=1 - if [ "$Variant" = "zfcpdump" ]; then - DoModules=0 - fi - - # When the bootable image is just the ELF kernel, strip it. - # We already copy the unstripped file into the debuginfo package. - if [ "$KernelImage" = vmlinux ]; then - CopyKernel=cp_vmlinux - else - CopyKernel=cp - fi - - InitBuildVars $Variant - - echo BUILDING A KERNEL FOR ${Variant} %{_target_cpu}... - - %{make} ARCH=$Arch olddefconfig >/dev/null - - # This ensures build-ids are unique to allow parallel debuginfo - perl -p -i -e "s/^CONFIG_BUILD_SALT.*/CONFIG_BUILD_SALT=\"%{KVERREL}\"/" .config - %{make} ARCH=$Arch KCFLAGS="$KCFLAGS" WITH_GCOV="%{?with_gcov}" %{?_smp_mflags} $MakeTarget %{?sparse_mflags} %{?kernel_mflags} - if [ $DoModules -eq 1 ]; then - %{make} ARCH=$Arch KCFLAGS="$KCFLAGS" WITH_GCOV="%{?with_gcov}" %{?_smp_mflags} modules %{?sparse_mflags} || exit 1 - fi - - mkdir -p $RPM_BUILD_ROOT/%{image_install_path} - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/systemtap -%if %{with_debuginfo} - mkdir -p $RPM_BUILD_ROOT%{debuginfodir}/%{image_install_path} -%endif - -%ifarch %{arm} aarch64 - %{make} ARCH=$Arch dtbs INSTALL_DTBS_PATH=$RPM_BUILD_ROOT/%{image_install_path}/dtb-$KernelVer - %{make} ARCH=$Arch dtbs_install INSTALL_DTBS_PATH=$RPM_BUILD_ROOT/%{image_install_path}/dtb-$KernelVer - cp -r $RPM_BUILD_ROOT/%{image_install_path}/dtb-$KernelVer $RPM_BUILD_ROOT/lib/modules/$KernelVer/dtb - find arch/$Arch/boot/dts -name '*.dtb' -type f -delete -%endif - - # Start installing the results - install -m 644 .config $RPM_BUILD_ROOT/boot/config-$KernelVer - install -m 644 .config $RPM_BUILD_ROOT/lib/modules/$KernelVer/config - install -m 644 System.map $RPM_BUILD_ROOT/boot/System.map-$KernelVer - install -m 644 System.map $RPM_BUILD_ROOT/lib/modules/$KernelVer/System.map - - # We estimate the size of the initramfs because rpm needs to take this size - # into consideration when performing disk space calculations. (See bz #530778) - dd if=/dev/zero of=$RPM_BUILD_ROOT/boot/initramfs-$KernelVer.img bs=1M count=20 - - if [ -f arch/$Arch/boot/zImage.stub ]; then - cp arch/$Arch/boot/zImage.stub $RPM_BUILD_ROOT/%{image_install_path}/zImage.stub-$KernelVer || : - cp arch/$Arch/boot/zImage.stub $RPM_BUILD_ROOT/lib/modules/$KernelVer/zImage.stub-$KernelVer || : - fi - - %if %{signkernel} - if [ "$KernelImage" = vmlinux ]; then - # We can't strip and sign $KernelImage in place, because - # we need to preserve original vmlinux for debuginfo. - # Use a copy for signing. - $CopyKernel $KernelImage $KernelImage.tosign - KernelImage=$KernelImage.tosign - CopyKernel=cp - fi - - # Sign the image if we're using EFI - # aarch64 kernels are gziped EFI images - KernelExtension=${KernelImage##*.} - if [ "$KernelExtension" == "gz" ]; then - SignImage=${KernelImage%.*} - else - SignImage=$KernelImage - fi - - %ifarch x86_64 aarch64 - %pesign -s -i $SignImage -o vmlinuz.tmp -a %{secureboot_ca_0} -c %{secureboot_key_0} -n %{pesign_name_0} - %pesign -s -i vmlinuz.tmp -o vmlinuz.signed -a %{secureboot_ca_1} -c %{secureboot_key_1} -n %{pesign_name_1} - rm vmlinuz.tmp - %endif - %ifarch s390x ppc64le - if [ -x /usr/bin/rpm-sign ]; then - rpm-sign --key "%{pesign_name_0}" --lkmsign $SignImage --output vmlinuz.signed - elif [ $DoModules -eq 1 ]; then - chmod +x scripts/sign-file - ./scripts/sign-file -p sha256 certs/signing_key.pem certs/signing_key.x509 $SignImage vmlinuz.signed - else - mv $SignImage vmlinuz.signed - fi - %endif - - if [ ! -s vmlinuz.signed ]; then - echo "pesigning failed" - exit 1 - fi - mv vmlinuz.signed $SignImage - if [ "$KernelExtension" == "gz" ]; then - gzip -f9 $SignImage - fi - # signkernel - %endif - - $CopyKernel $KernelImage \ - $RPM_BUILD_ROOT/%{image_install_path}/$InstallName-$KernelVer - chmod 755 $RPM_BUILD_ROOT/%{image_install_path}/$InstallName-$KernelVer - cp $RPM_BUILD_ROOT/%{image_install_path}/$InstallName-$KernelVer $RPM_BUILD_ROOT/lib/modules/$KernelVer/$InstallName - - # hmac sign the kernel for FIPS - echo "Creating hmac file: $RPM_BUILD_ROOT/%{image_install_path}/.vmlinuz-$KernelVer.hmac" - ls -l $RPM_BUILD_ROOT/%{image_install_path}/$InstallName-$KernelVer - (cd $RPM_BUILD_ROOT/%{image_install_path} && sha512hmac $InstallName-$KernelVer) > $RPM_BUILD_ROOT/%{image_install_path}/.vmlinuz-$KernelVer.hmac; - cp $RPM_BUILD_ROOT/%{image_install_path}/.vmlinuz-$KernelVer.hmac $RPM_BUILD_ROOT/lib/modules/$KernelVer/.vmlinuz.hmac - - if [ $DoModules -eq 1 ]; then - # Override $(mod-fw) because we don't want it to install any firmware - # we'll get it from the linux-firmware package and we don't want conflicts - %{make} %{?_smp_mflags} ARCH=$Arch INSTALL_MOD_PATH=$RPM_BUILD_ROOT %{?_smp_mflags} modules_install KERNELRELEASE=$KernelVer mod-fw= - fi - -%if %{with_gcov} - # install gcov-needed files to $BUILDROOT/$BUILD/...: - # gcov_info->filename is absolute path - # gcno references to sources can use absolute paths (e.g. in out-of-tree builds) - # sysfs symlink targets (set up at compile time) use absolute paths to BUILD dir - find . \( -name '*.gcno' -o -name '*.[chS]' \) -exec install -D '{}' "$RPM_BUILD_ROOT/$(pwd)/{}" \; -%endif - - # add an a noop %%defattr statement 'cause rpm doesn't like empty file list files - echo '%%defattr(-,-,-)' > ../kernel${Variant:+-${Variant}}-ldsoconf.list - if [ $DoVDSO -ne 0 ]; then - %{make} ARCH=$Arch INSTALL_MOD_PATH=$RPM_BUILD_ROOT vdso_install KERNELRELEASE=$KernelVer - if [ -s ldconfig-kernel.conf ]; then - install -D -m 444 ldconfig-kernel.conf \ - $RPM_BUILD_ROOT/etc/ld.so.conf.d/kernel-$KernelVer.conf - echo /etc/ld.so.conf.d/kernel-$KernelVer.conf >> ../kernel${Variant:+-${Variant}}-ldsoconf.list - fi - - rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/vdso/.build-id - fi - - # And save the headers/makefiles etc for building modules against - # - # This all looks scary, but the end result is supposed to be: - # * all arch relevant include/ files - # * all Makefile/Kconfig files - # * all script/ files - - rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/source - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - (cd $RPM_BUILD_ROOT/lib/modules/$KernelVer ; ln -s build source) - # dirs for additional modules per module-init-tools, kbuild/modules.txt - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/updates - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/weak-updates - # CONFIG_KERNEL_HEADER_TEST generates some extra files in the process of - # testing so just delete - find . -name *.h.s -delete - # first copy everything - cp --parents `find -type f -name "Makefile*" -o -name "Kconfig*"` $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - if [ ! -e Module.symvers ]; then - touch Module.symvers - fi - cp Module.symvers $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp System.map $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - if [ -s Module.markers ]; then - cp Module.markers $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - fi - - # create the kABI metadata for use in packaging - # NOTENOTE: the name symvers is used by the rpm backend - # NOTENOTE: to discover and run the /usr/lib/rpm/fileattrs/kabi.attr - # NOTENOTE: script which dynamically adds exported kernel symbol - # NOTENOTE: checksums to the rpm metadata provides list. - # NOTENOTE: if you change the symvers name, update the backend too - echo "**** GENERATING kernel ABI metadata ****" - gzip -c9 < Module.symvers > $RPM_BUILD_ROOT/boot/symvers-$KernelVer.gz - cp $RPM_BUILD_ROOT/boot/symvers-$KernelVer.gz $RPM_BUILD_ROOT/lib/modules/$KernelVer/symvers.gz - -%if %{with_kabichk} - echo "**** kABI checking is enabled in kernel SPEC file. ****" - chmod 0755 $RPM_SOURCE_DIR/check-kabi - if [ -e $RPM_SOURCE_DIR/Module.kabi_%{_target_cpu}$Variant ]; then - cp $RPM_SOURCE_DIR/Module.kabi_%{_target_cpu}$Variant $RPM_BUILD_ROOT/Module.kabi - $RPM_SOURCE_DIR/check-kabi -k $RPM_BUILD_ROOT/Module.kabi -s Module.symvers || exit 1 - # for now, don't keep it around. - rm $RPM_BUILD_ROOT/Module.kabi - else - echo "**** NOTE: Cannot find reference Module.kabi file. ****" - fi -%endif - -%if %{with_kabidupchk} - echo "**** kABI DUP checking is enabled in kernel SPEC file. ****" - if [ -e $RPM_SOURCE_DIR/Module.kabi_dup_%{_target_cpu}$Variant ]; then - cp $RPM_SOURCE_DIR/Module.kabi_dup_%{_target_cpu}$Variant $RPM_BUILD_ROOT/Module.kabi - $RPM_SOURCE_DIR/check-kabi -k $RPM_BUILD_ROOT/Module.kabi -s Module.symvers || exit 1 - # for now, don't keep it around. - rm $RPM_BUILD_ROOT/Module.kabi - else - echo "**** NOTE: Cannot find DUP reference Module.kabi file. ****" - fi -%endif - -%if %{with_kabidw_base} - # Don't build kabi base for debug kernels - if [ "$Variant" != "zfcpdump" -a "$Variant" != "debug" ]; then - mkdir -p $RPM_BUILD_ROOT/kabi-dwarf - tar xjvf %{SOURCE301} -C $RPM_BUILD_ROOT/kabi-dwarf - - mkdir -p $RPM_BUILD_ROOT/kabi-dwarf/stablelists - tar xjvf %{SOURCE300} -C $RPM_BUILD_ROOT/kabi-dwarf/stablelists - - echo "**** GENERATING DWARF-based kABI baseline dataset ****" - chmod 0755 $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh - $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh generate \ - "$RPM_BUILD_ROOT/kabi-dwarf/stablelists/kabi-current/kabi_stablelist_%{_target_cpu}" \ - "$(pwd)" \ - "$RPM_BUILD_ROOT/kabidw-base/%{_target_cpu}${Variant:+.${Variant}}" || : - - rm -rf $RPM_BUILD_ROOT/kabi-dwarf - fi -%endif - -%if %{with_kabidwchk} - if [ "$Variant" != "zfcpdump" ]; then - mkdir -p $RPM_BUILD_ROOT/kabi-dwarf - tar xjvf %{SOURCE301} -C $RPM_BUILD_ROOT/kabi-dwarf - if [ -d "$RPM_BUILD_ROOT/kabi-dwarf/base/%{_target_cpu}${Variant:+.${Variant}}" ]; then - mkdir -p $RPM_BUILD_ROOT/kabi-dwarf/stablelists - tar xjvf %{SOURCE300} -C $RPM_BUILD_ROOT/kabi-dwarf/stablelists - - echo "**** GENERATING DWARF-based kABI dataset ****" - chmod 0755 $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh - $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh generate \ - "$RPM_BUILD_ROOT/kabi-dwarf/stablelists/kabi-current/kabi_stablelist_%{_target_cpu}" \ - "$(pwd)" \ - "$RPM_BUILD_ROOT/kabi-dwarf/base/%{_target_cpu}${Variant:+.${Variant}}.tmp" || : - - echo "**** kABI DWARF-based comparison report ****" - $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh compare \ - "$RPM_BUILD_ROOT/kabi-dwarf/base/%{_target_cpu}${Variant:+.${Variant}}" \ - "$RPM_BUILD_ROOT/kabi-dwarf/base/%{_target_cpu}${Variant:+.${Variant}}.tmp" || : - echo "**** End of kABI DWARF-based comparison report ****" - else - echo "**** Baseline dataset for kABI DWARF-BASED comparison report not found ****" - fi - - rm -rf $RPM_BUILD_ROOT/kabi-dwarf - fi -%endif - - # then drop all but the needed Makefiles/Kconfig files - rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts - rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include - cp .config $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a scripts $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts/tracing - rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts/spdxcheck.py - -%ifarch s390x - # CONFIG_EXPOLINE_EXTERN=y produces arch/s390/lib/expoline.o - # which is needed during external module build. - if [ -f arch/s390/lib/expoline.o ]; then - cp -a --parents arch/s390/lib/expoline.o $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - fi -%endif - - # Files for 'make scripts' to succeed with kernel-devel. - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/security/selinux/include - cp -a --parents security/selinux/include/classmap.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents security/selinux/include/initial_sid_to_string.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/tools/include/tools - cp -a --parents tools/include/tools/be_byteshift.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/tools/le_byteshift.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - - # Files for 'make prepare' to succeed with kernel-devel. - cp -a --parents tools/include/linux/compiler* $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/linux/types.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/build/Build.include $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/build/Build $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/build/fixdep.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/objtool/sync-check.sh $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/bpf/resolve_btfids $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - - cp --parents security/selinux/include/policycap_names.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents security/selinux/include/policycap.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - - cp -a --parents tools/include/asm-generic $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/linux $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/uapi/asm $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/uapi/asm-generic $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/uapi/linux $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/vdso $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/scripts/utilities.mak $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/lib/subcmd $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/lib/*.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/objtool/*.[ch] $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/objtool/Build $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/objtool/include/objtool/*.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/lib/bpf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/lib/bpf/Build $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - - if [ -f tools/objtool/objtool ]; then - cp -a tools/objtool/objtool $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/tools/objtool/ || : - fi - if [ -f tools/objtool/fixdep ]; then - cp -a tools/objtool/fixdep $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/tools/objtool/ || : - fi - if [ -d arch/$Arch/scripts ]; then - cp -a arch/$Arch/scripts $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/arch/%{_arch} || : - fi - if [ -f arch/$Arch/*lds ]; then - cp -a arch/$Arch/*lds $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/arch/%{_arch}/ || : - fi - if [ -f arch/%{asmarch}/kernel/module.lds ]; then - cp -a --parents arch/%{asmarch}/kernel/module.lds $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - fi - find $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts \( -iname "*.o" -o -iname "*.cmd" \) -exec rm -f {} + -%ifarch ppc64le - cp -a --parents arch/powerpc/lib/crtsavres.[So] $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ -%endif - if [ -d arch/%{asmarch}/include ]; then - cp -a --parents arch/%{asmarch}/include $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - fi -%ifarch aarch64 - # arch/arm64/include/asm/xen references arch/arm - cp -a --parents arch/arm/include/asm/xen $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - # arch/arm64/include/asm/opcodes.h references arch/arm - cp -a --parents arch/arm/include/asm/opcodes.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ -%endif - # include the machine specific headers for ARM variants, if available. -%ifarch %{arm} - if [ -d arch/%{asmarch}/mach-${Variant}/include ]; then - cp -a --parents arch/%{asmarch}/mach-${Variant}/include $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - fi - # include a few files for 'make prepare' - cp -a --parents arch/arm/tools/gen-mach-types $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/arm/tools/mach-types $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - -%endif - cp -a include $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include -%ifarch i686 x86_64 - # files for 'make prepare' to succeed with kernel-devel - cp -a --parents arch/x86/entry/syscalls/syscall_32.tbl $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/entry/syscalls/syscall_64.tbl $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs_32.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs_64.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs_common.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/purgatory/purgatory.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/purgatory/stack.S $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/purgatory/setup-x86_64.S $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/purgatory/entry64.S $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/boot/string.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/boot/string.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/boot/ctype.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - - cp -a --parents scripts/syscalltbl.sh $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents scripts/syscallhdr.sh $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - - cp -a --parents tools/arch/x86/include/asm $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/arch/x86/include/uapi/asm $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/objtool/arch/x86/lib $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/arch/x86/lib/ $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/arch/x86/tools/gen-insn-attr-x86.awk $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/objtool/arch/x86/ $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - -%endif - # Clean up intermediate tools files - find $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/tools \( -iname "*.o" -o -iname "*.cmd" \) -exec rm -f {} + - - # Make sure the Makefile, version.h, and auto.conf have a matching - # timestamp so that external modules can be built - touch -r $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/Makefile \ - $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include/generated/uapi/linux/version.h \ - $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include/config/auto.conf - -%if %{with_debuginfo} - eu-readelf -n vmlinux | grep "Build ID" | awk '{print $NF}' > vmlinux.id - cp vmlinux.id $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/vmlinux.id - - # - # save the vmlinux file for kernel debugging into the kernel-debuginfo rpm - # - mkdir -p $RPM_BUILD_ROOT%{debuginfodir}/lib/modules/$KernelVer - cp vmlinux $RPM_BUILD_ROOT%{debuginfodir}/lib/modules/$KernelVer - if [ -n "%{vmlinux_decompressor}" ]; then - eu-readelf -n %{vmlinux_decompressor} | grep "Build ID" | awk '{print $NF}' > vmlinux.decompressor.id - # Without build-id the build will fail. But for s390 the build-id - # wasn't added before 5.11. In case it is missing prefer not - # packaging the debuginfo over a build failure. - if [ -s vmlinux.decompressor.id ]; then - cp vmlinux.decompressor.id $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/vmlinux.decompressor.id - cp %{vmlinux_decompressor} $RPM_BUILD_ROOT%{debuginfodir}/lib/modules/$KernelVer/vmlinux.decompressor - fi - fi -%endif - - find $RPM_BUILD_ROOT/lib/modules/$KernelVer -name "*.ko" -type f >modnames - - # mark modules executable so that strip-to-file can strip them - xargs --no-run-if-empty chmod u+x < modnames - - # Generate a list of modules for block and networking. - - grep -F /drivers/ modnames | xargs --no-run-if-empty nm -upA | - sed -n 's,^.*/\([^/]*\.ko\): *U \(.*\)$,\1 \2,p' > drivers.undef - - collect_modules_list() - { - sed -r -n -e "s/^([^ ]+) \\.?($2)\$/\\1/p" drivers.undef | - LC_ALL=C sort -u > $RPM_BUILD_ROOT/lib/modules/$KernelVer/modules.$1 - if [ ! -z "$3" ]; then - sed -r -e "/^($3)\$/d" -i $RPM_BUILD_ROOT/lib/modules/$KernelVer/modules.$1 - fi - } - - collect_modules_list networking \ - 'register_netdev|ieee80211_register_hw|usbnet_probe|phy_driver_register|rt(l_|2x00)(pci|usb)_probe|register_netdevice' - collect_modules_list block \ - 'ata_scsi_ioctl|scsi_add_host|scsi_add_host_with_dma|blk_alloc_queue|blk_init_queue|register_mtd_blktrans|scsi_esp_register|scsi_register_device_handler|blk_queue_physical_block_size' 'pktcdvd.ko|dm-mod.ko' - collect_modules_list drm \ - 'drm_open|drm_init' - collect_modules_list modesetting \ - 'drm_crtc_init' - - # detect missing or incorrect license tags - ( find $RPM_BUILD_ROOT/lib/modules/$KernelVer -name '*.ko' | xargs /sbin/modinfo -l | \ - grep -E -v 'GPL( v2)?$|Dual BSD/GPL$|Dual MPL/GPL$|GPL and additional rights$' ) && exit 1 - - remove_depmod_files() - { - # remove files that will be auto generated by depmod at rpm -i time - pushd $RPM_BUILD_ROOT/lib/modules/$KernelVer/ - rm -f modules.{alias,alias.bin,builtin.alias.bin,builtin.bin} \ - modules.{dep,dep.bin,devname,softdep,symbols,symbols.bin} - popd - } - - remove_depmod_files - - # Identify modules in the kernel-modules-extras package - %{SOURCE20} $RPM_BUILD_ROOT lib/modules/$KernelVer $(realpath configs/mod-extra.list) - # Identify modules in the kernel-modules-extras package - %{SOURCE20} $RPM_BUILD_ROOT lib/modules/$KernelVer %{SOURCE84} internal - - # - # Generate the kernel-core and kernel-modules files lists - # - - # Copy the System.map file for depmod to use, and create a backup of the - # full module tree so we can restore it after we're done filtering - cp System.map $RPM_BUILD_ROOT/. - cp configs/filter-*.sh $RPM_BUILD_ROOT/. - pushd $RPM_BUILD_ROOT - mkdir restore - cp -r lib/modules/$KernelVer/* restore/. - - # don't include anything going into kernel-modules-extra in the file lists - xargs rm -rf < mod-extra.list - # don't include anything going int kernel-modules-internal in the file lists - xargs rm -rf < mod-internal.list - - if [ $DoModules -eq 1 ]; then - # Find all the module files and filter them out into the core and - # modules lists. This actually removes anything going into -modules - # from the dir. - find lib/modules/$KernelVer/kernel -name *.ko | sort -n > modules.list - ./filter-modules.sh modules.list %{_target_cpu} - rm filter-*.sh - - # Run depmod on the resulting module tree and make sure it isn't broken - depmod -b . -aeF ./System.map $KernelVer &> depmod.out - if [ -s depmod.out ]; then - echo "Depmod failure" - cat depmod.out - exit 1 - else - rm depmod.out - fi - else - # Ensure important files/directories exist to let the packaging succeed - echo '%%defattr(-,-,-)' > modules.list - echo '%%defattr(-,-,-)' > k-d.list - mkdir -p lib/modules/$KernelVer/kernel - # Add files usually created by make modules, needed to prevent errors - # thrown by depmod during package installation - touch lib/modules/$KernelVer/modules.order - touch lib/modules/$KernelVer/modules.builtin - fi - - remove_depmod_files - - # Go back and find all of the various directories in the tree. We use this - # for the dir lists in kernel-core - find lib/modules/$KernelVer/kernel -mindepth 1 -type d | sort -n > module-dirs.list - - # Cleanup - rm System.map - # Just "cp -r" can be very slow: here, it rewrites _existing files_ - # with open(O_TRUNC). Many filesystems synchronously wait for metadata - # update for such file rewrites (seen in strace as final close syscall - # taking a long time). On a rotational disk, cp was observed to take - # more than 5 minutes on ext4 and more than 15 minutes (!) on xfs. - # With --remove-destination, we avoid this, and copying - # (with enough RAM to cache it) takes 5 seconds: - cp -r --remove-destination restore/* lib/modules/$KernelVer/. - rm -rf restore - popd - - # Make sure the files lists start with absolute paths or rpmbuild fails. - # Also add in the dir entries - sed -e 's/^lib*/\/lib/' %{?zipsed} $RPM_BUILD_ROOT/k-d.list > ../kernel${Variant:+-${Variant}}-modules.list - sed -e 's/^lib*/%dir \/lib/' %{?zipsed} $RPM_BUILD_ROOT/module-dirs.list > ../kernel${Variant:+-${Variant}}-core.list - sed -e 's/^lib*/\/lib/' %{?zipsed} $RPM_BUILD_ROOT/modules.list >> ../kernel${Variant:+-${Variant}}-core.list - sed -e 's/^lib*/\/lib/' %{?zipsed} $RPM_BUILD_ROOT/mod-extra.list >> ../kernel${Variant:+-${Variant}}-modules-extra.list - sed -e 's/^lib*/\/lib/' %{?zipsed} $RPM_BUILD_ROOT/mod-internal.list >> ../kernel${Variant:+-${Variant}}-modules-internal.list - - # Cleanup - rm -f $RPM_BUILD_ROOT/k-d.list - rm -f $RPM_BUILD_ROOT/modules.list - rm -f $RPM_BUILD_ROOT/module-dirs.list - rm -f $RPM_BUILD_ROOT/mod-extra.list - rm -f $RPM_BUILD_ROOT/mod-internal.list - -%if %{signmodules} - if [ $DoModules -eq 1 ]; then - # Save the signing keys so we can sign the modules in __modsign_install_post - cp certs/signing_key.pem certs/signing_key.pem.sign${Variant:++${Variant}} - cp certs/signing_key.x509 certs/signing_key.x509.sign${Variant:++${Variant}} - fi -%endif - - # Move the devel headers out of the root file system - mkdir -p $RPM_BUILD_ROOT/usr/src/kernels - mv $RPM_BUILD_ROOT/lib/modules/$KernelVer/build $RPM_BUILD_ROOT/$DevelDir - - # This is going to create a broken link during the build, but we don't use - # it after this point. We need the link to actually point to something - # when kernel-devel is installed, and a relative link doesn't work across - # the F17 UsrMove feature. - ln -sf $DevelDir $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - -%ifnarch armv7hl - # Generate vmlinux.h and put it to kernel-devel path - bpftool btf dump file vmlinux format c > $RPM_BUILD_ROOT/$DevelDir/vmlinux.h -%endif - - # prune junk from kernel-devel - find $RPM_BUILD_ROOT/usr/src/kernels -name ".*.cmd" -delete - - # Red Hat UEFI Secure Boot CA cert, which can be used to authenticate the kernel - mkdir -p $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer - %ifarch x86_64 aarch64 - install -m 0644 %{secureboot_ca_0} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca-20200609.cer - install -m 0644 %{secureboot_ca_1} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca-20140212.cer - ln -s kernel-signing-ca-20200609.cer $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca.cer - %else - install -m 0644 %{secureboot_ca_0} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca.cer - %endif - %ifarch s390x ppc64le - if [ $DoModules -eq 1 ]; then - if [ -x /usr/bin/rpm-sign ]; then - install -m 0644 %{secureboot_key_0} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/%{signing_key_filename} - else - install -m 0644 certs/signing_key.x509.sign${Variant:++${Variant}} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca.cer - openssl x509 -in certs/signing_key.pem.sign${Variant:++${Variant}} -outform der -out $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/%{signing_key_filename} - chmod 0644 $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/%{signing_key_filename} - fi - fi - %endif - -%if %{with_ipaclones} - MAXPROCS=$(echo %{?_smp_mflags} | sed -n 's/-j\s*\([0-9]\+\)/\1/p') - if [ -z "$MAXPROCS" ]; then - MAXPROCS=1 - fi - if [ "$Variant" == "" ]; then - mkdir -p $RPM_BUILD_ROOT/$DevelDir-ipaclones - find . -name '*.ipa-clones' | xargs -i{} -r -n 1 -P $MAXPROCS install -m 644 -D "{}" "$RPM_BUILD_ROOT/$DevelDir-ipaclones/{}" - fi -%endif - -} - -### -# DO it... -### - -# prepare directories -rm -rf $RPM_BUILD_ROOT -mkdir -p $RPM_BUILD_ROOT/boot -mkdir -p $RPM_BUILD_ROOT%{_libexecdir} - -cd linux-%{KVERREL} - - -%if %{with_debug} -BuildKernel %make_target %kernel_image %{_use_vdso} debug -%endif - -%if %{with_zfcpdump} -BuildKernel %make_target %kernel_image %{_use_vdso} zfcpdump -%endif - -%if %{with_pae} -BuildKernel %make_target %kernel_image %{use_vdso} lpae -%endif - -%if %{with_up} -BuildKernel %make_target %kernel_image %{_use_vdso} -%endif - -%ifnarch noarch i686 -%if !%{with_debug} && !%{with_zfcpdump} && !%{with_pae} && !%{with_up} -# If only building the user space tools, then initialize the build environment -# and some variables so that the various userspace tools can be built. -InitBuildVars -%endif -%endif - -%ifarch aarch64 -%global perf_build_extra_opts CORESIGHT=1 -%endif -%global perf_make \ - %{__make} %{?make_opts} EXTRA_CFLAGS="${RPM_OPT_FLAGS}" LDFLAGS="%{__global_ldflags}" %{?cross_opts} -C tools/perf V=1 NO_PERF_READ_VDSO32=1 NO_PERF_READ_VDSOX32=1 WERROR=0 NO_LIBUNWIND=1 HAVE_CPLUS_DEMANGLE=1 NO_GTK2=1 NO_STRLCPY=1 NO_BIONIC=1 LIBBPF_DYNAMIC=1 LIBTRACEEVENT_DYNAMIC=1 %{?perf_build_extra_opts} prefix=%{_prefix} PYTHON=%{__python3} -%if %{with_perf} -# perf -# make sure check-headers.sh is executable -chmod +x tools/perf/check-headers.sh -%{perf_make} DESTDIR=$RPM_BUILD_ROOT all -%endif - -%global tools_make \ - CFLAGS="${RPM_OPT_FLAGS}" LDFLAGS="%{__global_ldflags}" %{make} %{?make_opts} - -%if %{with_tools} -%ifarch %{cpupowerarchs} -# cpupower -# make sure version-gen.sh is executable. -chmod +x tools/power/cpupower/utils/version-gen.sh -%{tools_make} %{?_smp_mflags} -C tools/power/cpupower CPUFREQ_BENCH=false DEBUG=false -%ifarch x86_64 - pushd tools/power/cpupower/debug/x86_64 - %{tools_make} %{?_smp_mflags} centrino-decode powernow-k8-decode - popd -%endif -%ifarch x86_64 - pushd tools/power/x86/x86_energy_perf_policy/ - %{tools_make} - popd - pushd tools/power/x86/turbostat - %{tools_make} - popd - pushd tools/power/x86/intel-speed-select - %{tools_make} - popd - pushd tools/arch/x86/intel_sdsi - %{tools_make} CFLAGS="${RPM_OPT_FLAGS}" - popd -%endif -%endif -pushd tools/thermal/tmon/ -%{tools_make} -popd -pushd tools/iio/ -%{tools_make} -popd -pushd tools/gpio/ -%{tools_make} -popd -# build VM tools -pushd tools/vm/ -%{tools_make} slabinfo page_owner_sort -popd -%endif - -if [ -f $DevelDir/vmlinux.h ]; then - RPM_VMLINUX_H=$DevelDir/vmlinux.h -fi - -%global bpftool_make \ - %{__make} EXTRA_CFLAGS="${RPM_OPT_FLAGS}" EXTRA_LDFLAGS="%{__global_ldflags}" DESTDIR=$RPM_BUILD_ROOT %{?make_opts} VMLINUX_H="${RPM_VMLINUX_H}" V=1 -%if %{with_bpftool} -pushd tools/bpf/bpftool -%{bpftool_make} -popd -%endif - -%if %{with_selftests} -# Unfortunately, samples/bpf/Makefile expects that the headers are installed -# in the source tree. We installed them previously to $RPM_BUILD_ROOT/usr -# but there's no way to tell the Makefile to take them from there. -%{make} %{?_smp_mflags} headers_install -%{make} %{?_smp_mflags} ARCH=$Arch V=1 M=samples/bpf/ || true - -# Prevent bpf selftests to build bpftool repeatedly: -export BPFTOOL=$(pwd)/tools/bpf/bpftool/bpftool - -pushd tools/testing/selftests -# We need to install here because we need to call make with ARCH set which -# doesn't seem possible to do in the install section. -%{make} %{?_smp_mflags} ARCH=$Arch V=1 TARGETS="bpf vm livepatch net net/forwarding net/mptcp netfilter tc-testing" SKIP_TARGETS="" INSTALL_PATH=%{buildroot}%{_libexecdir}/kselftests VMLINUX_H="${RPM_VMLINUX_H}" install - -# 'make install' for bpf is broken and upstream refuses to fix it. -# Install the needed files manually. -for dir in bpf bpf/no_alu32 bpf/progs; do - # In ARK, the rpm build continues even if some of the selftests - # cannot be built. It's not always possible to build selftests, - # as upstream sometimes dependens on too new llvm version or has - # other issues. If something did not get built, just skip it. - test -d $dir || continue - mkdir -p %{buildroot}%{_libexecdir}/kselftests/$dir - find $dir -maxdepth 1 -type f \( -executable -o -name '*.py' -o -name settings -o \ - -name 'btf_dump_test_case_*.c' -o -name '*.ko' -o \ - -name '*.o' -exec sh -c 'readelf -h "{}" | grep -q "^ Machine:.*BPF"' \; \) -print0 | \ - xargs -0 cp -t %{buildroot}%{_libexecdir}/kselftests/$dir || true -done -popd -export -n BPFTOOL -%endif - -%if %{with_doc} -# Make the HTML pages. -%{__make} PYTHON=/usr/bin/python3 htmldocs || %{doc_build_fail} - -# sometimes non-world-readable files sneak into the kernel source tree -chmod -R a=rX Documentation -find Documentation -type d | xargs chmod u+w -%endif - -# In the modsign case, we do 3 things. 1) We check the "variant" and hard -# code the value in the following invocations. This is somewhat sub-optimal -# but we're doing this inside of an RPM macro and it isn't as easy as it -# could be because of that. 2) We restore the .tmp_versions/ directory from -# the one we saved off in BuildKernel above. This is to make sure we're -# signing the modules we actually built/installed in that variant. 3) We -# grab the arch and invoke mod-sign.sh command to actually sign the modules. -# -# We have to do all of those things _after_ find-debuginfo runs, otherwise -# that will strip the signature off of the modules. -# -# Don't sign modules for the zfcpdump variant as it is monolithic. - -%define __modsign_install_post \ - if [ "%{signmodules}" -eq "1" ]; then \ - if [ "%{with_pae}" -ne "0" ]; then \ - %{modsign_cmd} certs/signing_key.pem.sign+lpae certs/signing_key.x509.sign+lpae $RPM_BUILD_ROOT/lib/modules/%{KVERREL}+lpae/ \ - fi \ - if [ "%{with_debug}" -ne "0" ]; then \ - %{modsign_cmd} certs/signing_key.pem.sign+debug certs/signing_key.x509.sign+debug $RPM_BUILD_ROOT/lib/modules/%{KVERREL}+debug/ \ - fi \ - if [ "%{with_up}" -ne "0" ]; then \ - %{modsign_cmd} certs/signing_key.pem.sign certs/signing_key.x509.sign $RPM_BUILD_ROOT/lib/modules/%{KVERREL}/ \ - fi \ - fi \ - if [ "%{zipmodules}" -eq "1" ]; then \ - find $RPM_BUILD_ROOT/lib/modules/ -type f -name '*.ko' | xargs -P${RPM_BUILD_NCPUS} -r xz; \ - fi \ -%{nil} - -### -### Special hacks for debuginfo subpackages. -### - -# This macro is used by %%install, so we must redefine it before that. -%define debug_package %{nil} - -%if %{with_debuginfo} - -%ifnarch noarch -%global __debug_package 1 -%files -f debugfiles.list debuginfo-common-%{_target_cpu} -%endif - -%endif - -# We don't want to package debuginfo for self-tests and samples but -# we have to delete them to avoid an error messages about unpackaged -# files. -# Delete the debuginfo for kernel-devel files -%define __remove_unwanted_dbginfo_install_post \ - if [ "%{with_selftests}" -ne "0" ]; then \ - rm -rf $RPM_BUILD_ROOT/usr/lib/debug/usr/libexec/ksamples; \ - rm -rf $RPM_BUILD_ROOT/usr/lib/debug/usr/libexec/kselftests; \ - fi \ - rm -rf $RPM_BUILD_ROOT/usr/lib/debug/usr/src; \ -%{nil} - -# -# Disgusting hack alert! We need to ensure we sign modules *after* all -# invocations of strip occur, which is in __debug_install_post if -# find-debuginfo.sh runs, and __os_install_post if not. -# -%define __spec_install_post \ - %{?__debug_package:%{__debug_install_post}}\ - %{__arch_install_post}\ - %{__os_install_post}\ - %{__remove_unwanted_dbginfo_install_post}\ - %{__modsign_install_post} - -### -### install -### - -%install - -cd linux-%{KVERREL} - -%if %{with_doc} -docdir=$RPM_BUILD_ROOT%{_datadir}/doc/kernel-doc-%{specversion}-%{pkgrelease} - -# copy the source over -mkdir -p $docdir -tar -h -f - --exclude=man --exclude='.*' -c Documentation | tar xf - -C $docdir - -# with_doc -%endif - -# We have to do the headers install before the tools install because the -# kernel headers_install will remove any header files in /usr/include that -# it doesn't install itself. - -%if %{with_headers} -# Install kernel headers -%{__make} ARCH=%{hdrarch} INSTALL_HDR_PATH=$RPM_BUILD_ROOT/usr headers_install - -find $RPM_BUILD_ROOT/usr/include \ - \( -name .install -o -name .check -o \ - -name ..install.cmd -o -name ..check.cmd \) -delete - -%endif - -%if %{with_cross_headers} -%if 0%{?fedora} -HDR_ARCH_LIST='arm arm64 powerpc s390 x86' -%else -HDR_ARCH_LIST='arm64 powerpc s390 x86' -%endif -mkdir -p $RPM_BUILD_ROOT/usr/tmp-headers - -for arch in $HDR_ARCH_LIST; do - mkdir $RPM_BUILD_ROOT/usr/tmp-headers/arch-${arch} - %{__make} ARCH=${arch} INSTALL_HDR_PATH=$RPM_BUILD_ROOT/usr/tmp-headers/arch-${arch} headers_install -done - -find $RPM_BUILD_ROOT/usr/tmp-headers \ - \( -name .install -o -name .check -o \ - -name ..install.cmd -o -name ..check.cmd \) -delete - -# Copy all the architectures we care about to their respective asm directories -for arch in $HDR_ARCH_LIST ; do - mkdir -p $RPM_BUILD_ROOT/usr/${arch}-linux-gnu/include - mv $RPM_BUILD_ROOT/usr/tmp-headers/arch-${arch}/include/* $RPM_BUILD_ROOT/usr/${arch}-linux-gnu/include/ -done - -rm -rf $RPM_BUILD_ROOT/usr/tmp-headers -%endif - -%if %{with_kernel_abi_stablelists} -# kabi directory -INSTALL_KABI_PATH=$RPM_BUILD_ROOT/lib/modules/ -mkdir -p $INSTALL_KABI_PATH - -# install kabi releases directories -tar xjvf %{SOURCE300} -C $INSTALL_KABI_PATH -# with_kernel_abi_stablelists -%endif - -%if %{with_perf} -# perf tool binary and supporting scripts/binaries -%{perf_make} DESTDIR=$RPM_BUILD_ROOT lib=%{_lib} install-bin -# remove the 'trace' symlink. -rm -f %{buildroot}%{_bindir}/trace - -# For both of the below, yes, this should be using a macro but right now -# it's hard coded and we don't actually want it anyway right now. -# Whoever wants examples can fix it up! - -# remove examples -rm -rf %{buildroot}/usr/lib/perf/examples -rm -rf %{buildroot}/usr/lib/perf/include - -# python-perf extension -%{perf_make} DESTDIR=$RPM_BUILD_ROOT install-python_ext - -# perf man pages (note: implicit rpm magic compresses them later) -mkdir -p %{buildroot}/%{_mandir}/man1 -%{perf_make} DESTDIR=$RPM_BUILD_ROOT install-man - -# remove any tracevent files, eg. its plugins still gets built and installed, -# even if we build against system's libtracevent during perf build (by setting -# LIBTRACEEVENT_DYNAMIC=1 above in perf_make macro). Those files should already -# ship with libtraceevent package. -rm -rf %{buildroot}%{_libdir}/traceevent -%endif - -%if %{with_tools} -%ifarch %{cpupowerarchs} -%{make} -C tools/power/cpupower DESTDIR=$RPM_BUILD_ROOT libdir=%{_libdir} mandir=%{_mandir} CPUFREQ_BENCH=false install -rm -f %{buildroot}%{_libdir}/*.{a,la} -%find_lang cpupower -mv cpupower.lang ../ -%ifarch x86_64 - pushd tools/power/cpupower/debug/x86_64 - install -m755 centrino-decode %{buildroot}%{_bindir}/centrino-decode - install -m755 powernow-k8-decode %{buildroot}%{_bindir}/powernow-k8-decode - popd -%endif -chmod 0755 %{buildroot}%{_libdir}/libcpupower.so* -mkdir -p %{buildroot}%{_unitdir} %{buildroot}%{_sysconfdir}/sysconfig -install -m644 %{SOURCE2000} %{buildroot}%{_unitdir}/cpupower.service -install -m644 %{SOURCE2001} %{buildroot}%{_sysconfdir}/sysconfig/cpupower -%endif -%ifarch x86_64 - mkdir -p %{buildroot}%{_mandir}/man8 - pushd tools/power/x86/x86_energy_perf_policy - %{tools_make} DESTDIR=%{buildroot} install - popd - pushd tools/power/x86/turbostat - %{tools_make} DESTDIR=%{buildroot} install - popd - pushd tools/power/x86/intel-speed-select - %{tools_make} DESTDIR=%{buildroot} install - popd - pushd tools/arch/x86/intel_sdsi - %{tools_make} CFLAGS="${RPM_OPT_FLAGS}" DESTDIR=%{buildroot} install - popd -%endif -pushd tools/thermal/tmon -%{tools_make} INSTALL_ROOT=%{buildroot} install -popd -pushd tools/iio -%{tools_make} DESTDIR=%{buildroot} install -popd -pushd tools/gpio -%{tools_make} DESTDIR=%{buildroot} install -popd -install -m644 -D %{SOURCE2002} %{buildroot}%{_sysconfdir}/logrotate.d/kvm_stat -pushd tools/kvm/kvm_stat -%{__make} INSTALL_ROOT=%{buildroot} install-tools -%{__make} INSTALL_ROOT=%{buildroot} install-man -install -m644 -D kvm_stat.service %{buildroot}%{_unitdir}/kvm_stat.service -popd -# install VM tools -pushd tools/vm/ -install -m755 slabinfo %{buildroot}%{_bindir}/slabinfo -install -m755 page_owner_sort %{buildroot}%{_bindir}/page_owner_sort -popd -%endif - -if [ -f $DevelDir/vmlinux.h ]; then - RPM_VMLINUX_H=$DevelDir/vmlinux.h -fi - -%if %{with_bpftool} -pushd tools/bpf/bpftool -%{bpftool_make} prefix=%{_prefix} bash_compdir=%{_sysconfdir}/bash_completion.d/ mandir=%{_mandir} install doc-install -popd -%endif - -%if %{with_selftests} -pushd samples -install -d %{buildroot}%{_libexecdir}/ksamples -# install bpf samples -pushd bpf -install -d %{buildroot}%{_libexecdir}/ksamples/bpf -find -type f -executable -exec install -m755 {} %{buildroot}%{_libexecdir}/ksamples/bpf \; -install -m755 *.sh %{buildroot}%{_libexecdir}/ksamples/bpf -# test_lwt_bpf.sh compiles test_lwt_bpf.c when run; this works only from the -# kernel tree. Just remove it. -rm %{buildroot}%{_libexecdir}/ksamples/bpf/test_lwt_bpf.sh -install -m644 *_kern.o %{buildroot}%{_libexecdir}/ksamples/bpf || true -install -m644 tcp_bpf.readme %{buildroot}%{_libexecdir}/ksamples/bpf -popd -# install pktgen samples -pushd pktgen -install -d %{buildroot}%{_libexecdir}/ksamples/pktgen -find . -type f -executable -exec install -m755 {} %{buildroot}%{_libexecdir}/ksamples/pktgen/{} \; -find . -type f ! -executable -exec install -m644 {} %{buildroot}%{_libexecdir}/ksamples/pktgen/{} \; -popd -popd -# install vm selftests -pushd tools/testing/selftests/vm -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/vm/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/vm/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/vm/{} \; -popd -# install drivers/net/mlxsw selftests -pushd tools/testing/selftests/drivers/net/mlxsw -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/drivers/net/mlxsw/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/drivers/net/mlxsw/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/drivers/net/mlxsw/{} \; -popd -# install drivers/net/netdevsim selftests -pushd tools/testing/selftests/drivers/net/netdevsim -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/drivers/net/netdevsim/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/drivers/net/netdevsim/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/drivers/net/netdevsim/{} \; -popd -# install net/forwarding selftests -pushd tools/testing/selftests/net/forwarding -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/net/forwarding/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/net/forwarding/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/net/forwarding/{} \; -popd -# install net/mptcp selftests -pushd tools/testing/selftests/net/mptcp -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/net/mptcp/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/net/mptcp/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/net/mptcp/{} \; -popd -# install tc-testing selftests -pushd tools/testing/selftests/tc-testing -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/tc-testing/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/tc-testing/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/tc-testing/{} \; -popd -# install livepatch selftests -pushd tools/testing/selftests/livepatch -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/livepatch/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/livepatch/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/livepatch/{} \; -popd -# install netfilter selftests -pushd tools/testing/selftests/netfilter -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/netfilter/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/netfilter/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/netfilter/{} \; -popd -%endif - -### -### clean -### - -### -### scripts -### - -%if %{with_tools} -%post -n kernel-tools-libs -/sbin/ldconfig - -%postun -n kernel-tools-libs -/sbin/ldconfig -%endif - -# -# This macro defines a %%post script for a kernel*-devel package. -# %%kernel_devel_post [<subpackage>] -# Note we don't run hardlink if ostree is in use, as ostree is -# a far more sophisticated hardlink implementation. -# https://github.com/projectatomic/rpm-ostree/commit/58a79056a889be8814aa51f507b2c7a4dccee526 -# -# The deletion of *.hardlink-temporary files is a temporary workaround -# for this bug in the hardlink binary (fixed in util-linux 2.38): -# https://github.com/util-linux/util-linux/issues/1602 -# -%define kernel_devel_post() \ -%{expand:%%post %{?1:%{1}-}devel}\ -if [ -f /etc/sysconfig/kernel ]\ -then\ - . /etc/sysconfig/kernel || exit $?\ -fi\ -if [ "$HARDLINK" != "no" -a -x /usr/bin/hardlink -a ! -e /run/ostree-booted ] \ -then\ - (cd /usr/src/kernels/%{KVERREL}%{?1:+%{1}} &&\ - /usr/bin/find . -type f | while read f; do\ - hardlink -c /usr/src/kernels/*%{?dist}.*/$f $f > /dev/null\ - done;\ - /usr/bin/find /usr/src/kernels -type f -name '*.hardlink-temporary' -delete\ - )\ -fi\ -%{nil} - -# -# This macro defines a %%post script for a kernel*-modules-extra package. -# It also defines a %%postun script that does the same thing. -# %%kernel_modules_extra_post [<subpackage>] -# -%define kernel_modules_extra_post() \ -%{expand:%%post %{?1:%{1}-}modules-extra}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil}\ -%{expand:%%postun %{?1:%{1}-}modules-extra}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil} - -# -# This macro defines a %%post script for a kernel*-modules-internal package. -# It also defines a %%postun script that does the same thing. -# %%kernel_modules_internal_post [<subpackage>] -# -%define kernel_modules_internal_post() \ -%{expand:%%post %{?1:%{1}-}modules-internal}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil}\ -%{expand:%%postun %{?1:%{1}-}modules-internal}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil} - -# -# This macro defines a %%post script for a kernel*-modules package. -# It also defines a %%postun script that does the same thing. -# %%kernel_modules_post [<subpackage>] -# -%define kernel_modules_post() \ -%{expand:%%post %{?1:%{1}-}modules}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -if [ ! -f %{_localstatedir}/lib/rpm-state/%{name}/installing_core_%{KVERREL}%{?1:+%{1}} ]; then\ - mkdir -p %{_localstatedir}/lib/rpm-state/%{name}\ - touch %{_localstatedir}/lib/rpm-state/%{name}/need_to_run_dracut_%{KVERREL}%{?1:+%{1}}\ -fi\ -%{nil}\ -%{expand:%%postun %{?1:%{1}-}modules}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil}\ -%{expand:%%posttrans %{?1:%{1}-}modules}\ -if [ -f %{_localstatedir}/lib/rpm-state/%{name}/need_to_run_dracut_%{KVERREL}%{?1:+%{1}} ]; then\ - rm -f %{_localstatedir}/lib/rpm-state/%{name}/need_to_run_dracut_%{KVERREL}%{?1:+%{1}}\ - echo "Running: dracut -f --kver %{KVERREL}%{?1:+%{1}}"\ - dracut -f --kver "%{KVERREL}%{?1:+%{1}}" || exit $?\ -fi\ -%{nil} - -# This macro defines a %%posttrans script for a kernel package. -# %%kernel_variant_posttrans [<subpackage>] -# More text can follow to go at the end of this variant's %%post. -# -%define kernel_variant_posttrans() \ -%{expand:%%posttrans %{?1:%{1}-}core}\ -%if 0%{!?fedora:1}\ -if [ -x %{_sbindir}/weak-modules ]\ -then\ - %{_sbindir}/weak-modules --add-kernel %{KVERREL}%{?1:+%{1}} || exit $?\ -fi\ -%endif\ -rm -f %{_localstatedir}/lib/rpm-state/%{name}/installing_core_%{KVERREL}%{?1:+%{1}}\ -/bin/kernel-install add %{KVERREL}%{?1:+%{1}} /lib/modules/%{KVERREL}%{?1:+%{1}}/vmlinuz || exit $?\ -%{nil} - -# -# This macro defines a %%post script for a kernel package and its devel package. -# %%kernel_variant_post [-v <subpackage>] [-r <replace>] -# More text can follow to go at the end of this variant's %%post. -# -%define kernel_variant_post(v:r:) \ -%{expand:%%kernel_devel_post %{?-v*}}\ -%{expand:%%kernel_modules_post %{?-v*}}\ -%{expand:%%kernel_modules_extra_post %{?-v*}}\ -%{expand:%%kernel_modules_internal_post %{?-v*}}\ -%{expand:%%kernel_variant_posttrans %{?-v*}}\ -%{expand:%%post %{?-v*:%{-v*}-}core}\ -%{-r:\ -if [ `uname -i` == "x86_64" -o `uname -i` == "i386" ] &&\ - [ -f /etc/sysconfig/kernel ]; then\ - /bin/sed -r -i -e 's/^DEFAULTKERNEL=%{-r*}$/DEFAULTKERNEL=kernel%{?-v:-%{-v*}}/' /etc/sysconfig/kernel || exit $?\ -fi}\ -mkdir -p %{_localstatedir}/lib/rpm-state/%{name}\ -touch %{_localstatedir}/lib/rpm-state/%{name}/installing_core_%{KVERREL}%{?1:+%{1}}\ -%{nil} - -# -# This macro defines a %%preun script for a kernel package. -# %%kernel_variant_preun <subpackage> -# -%define kernel_variant_preun() \ -%{expand:%%preun %{?1:%{1}-}core}\ -/bin/kernel-install remove %{KVERREL}%{?1:+%{1}} /lib/modules/%{KVERREL}%{?1:+%{1}}/vmlinuz || exit $?\ -if [ -x %{_sbindir}/weak-modules ]\ -then\ - %{_sbindir}/weak-modules --remove-kernel %{KVERREL}%{?1:+%{1}} || exit $?\ -fi\ -%{nil} - -%kernel_variant_preun -%kernel_variant_post -r kernel-smp - -%if %{with_pae} -%kernel_variant_preun lpae -%kernel_variant_post -v lpae -r (kernel|kernel-smp) -%endif - -%if %{with_debug} -%kernel_variant_preun debug -%kernel_variant_post -v debug -%endif - -%if %{with_zfcpdump} -%kernel_variant_preun zfcpdump -%kernel_variant_post -v zfcpdump -%endif - -if [ -x /sbin/ldconfig ] -then - /sbin/ldconfig -X || exit $? -fi - -### -### file lists -### - -%if %{with_headers} -%files headers -/usr/include/* -%endif - -%if %{with_cross_headers} -%files cross-headers -/usr/*-linux-gnu/include/* -%endif - -%if %{with_kernel_abi_stablelists} -%files -n kernel-abi-stablelists -/lib/modules/kabi-* -%endif - -%if %{with_kabidw_base} -%ifarch x86_64 s390x ppc64 ppc64le aarch64 -%files kernel-kabidw-base-internal -%defattr(-,root,root) -/kabidw-base/%{_target_cpu}/* -%endif -%endif - -# only some architecture builds need kernel-doc -%if %{with_doc} -%files doc -%defattr(-,root,root) -%{_datadir}/doc/kernel-doc-%{specversion}-%{pkgrelease}/Documentation/* -%dir %{_datadir}/doc/kernel-doc-%{specversion}-%{pkgrelease}/Documentation -%dir %{_datadir}/doc/kernel-doc-%{specversion}-%{pkgrelease} -%endif - -%if %{with_perf} -%files -n perf -%{_bindir}/perf -%{_libdir}/libperf-jvmti.so -%dir %{_libexecdir}/perf-core -%{_libexecdir}/perf-core/* -%{_datadir}/perf-core/* -%{_mandir}/man[1-8]/perf* -%{_sysconfdir}/bash_completion.d/perf -%doc linux-%{KVERREL}/tools/perf/Documentation/examples.txt -%{_docdir}/perf-tip/tips.txt - -%files -n python3-perf -%{python3_sitearch}/* - -%if %{with_debuginfo} -%files -f perf-debuginfo.list -n perf-debuginfo - -%files -f python3-perf-debuginfo.list -n python3-perf-debuginfo -%endif -# with_perf -%endif - -%if %{with_tools} -%ifnarch %{cpupowerarchs} -%files -n kernel-tools -%else -%files -n kernel-tools -f cpupower.lang -%{_bindir}/cpupower -%{_datadir}/bash-completion/completions/cpupower -%ifarch x86_64 -%{_bindir}/centrino-decode -%{_bindir}/powernow-k8-decode -%endif -%{_unitdir}/cpupower.service -%{_mandir}/man[1-8]/cpupower* -%config(noreplace) %{_sysconfdir}/sysconfig/cpupower -%ifarch x86_64 -%{_bindir}/x86_energy_perf_policy -%{_mandir}/man8/x86_energy_perf_policy* -%{_bindir}/turbostat -%{_mandir}/man8/turbostat* -%{_bindir}/intel-speed-select -%{_sbindir}/intel_sdsi -%endif -# cpupowerarchs -%endif -%{_bindir}/tmon -%{_bindir}/iio_event_monitor -%{_bindir}/iio_generic_buffer -%{_bindir}/lsiio -%{_bindir}/lsgpio -%{_bindir}/gpio-hammer -%{_bindir}/gpio-event-mon -%{_bindir}/gpio-watch -%{_mandir}/man1/kvm_stat* -%{_bindir}/kvm_stat -%{_unitdir}/kvm_stat.service -%config(noreplace) %{_sysconfdir}/logrotate.d/kvm_stat -%{_bindir}/page_owner_sort -%{_bindir}/slabinfo - -%if %{with_debuginfo} -%files -f kernel-tools-debuginfo.list -n kernel-tools-debuginfo -%endif - -%ifarch %{cpupowerarchs} -%files -n kernel-tools-libs -%{_libdir}/libcpupower.so.0 -%{_libdir}/libcpupower.so.0.0.1 - -%files -n kernel-tools-libs-devel -%{_libdir}/libcpupower.so -%{_includedir}/cpufreq.h -%endif -# with_tools -%endif - -%if %{with_bpftool} -%files -n bpftool -%{_sbindir}/bpftool -%{_sysconfdir}/bash_completion.d/bpftool -%{_mandir}/man8/bpftool-cgroup.8.gz -%{_mandir}/man8/bpftool-gen.8.gz -%{_mandir}/man8/bpftool-iter.8.gz -%{_mandir}/man8/bpftool-link.8.gz -%{_mandir}/man8/bpftool-map.8.gz -%{_mandir}/man8/bpftool-prog.8.gz -%{_mandir}/man8/bpftool-perf.8.gz -%{_mandir}/man8/bpftool.8.gz -%{_mandir}/man8/bpftool-net.8.gz -%{_mandir}/man8/bpftool-feature.8.gz -%{_mandir}/man8/bpftool-btf.8.gz -%{_mandir}/man8/bpftool-struct_ops.8.gz - -%if %{with_debuginfo} -%files -f bpftool-debuginfo.list -n bpftool-debuginfo -%defattr(-,root,root) -%endif -%endif - -%if %{with_selftests} -%files selftests-internal -%{_libexecdir}/ksamples -%{_libexecdir}/kselftests -%endif - -# empty meta-package -%ifnarch %nobuildarches noarch -%files -%endif - -%if %{with_gcov} -%ifnarch %nobuildarches noarch -%files gcov -%{_builddir} -%endif -%endif - -# This is %%{image_install_path} on an arch where that includes ELF files, -# or empty otherwise. -%define elf_image_install_path %{?kernel_image_elf:%{image_install_path}} - -# -# This macro defines the %%files sections for a kernel package -# and its devel and debuginfo packages. -# %%kernel_variant_files [-k vmlinux] <use_vdso> <condition> <subpackage> -# -%define kernel_variant_files(k:) \ -%if %{2}\ -%{expand:%%files -f kernel-%{?3:%{3}-}core.list %{?1:-f kernel-%{?3:%{3}-}ldsoconf.list} %{?3:%{3}-}core}\ -%{!?_licensedir:%global license %%doc}\ -%license linux-%{KVERREL}/COPYING-%{version}-%{release}\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/%{?-k:%{-k*}}%{!?-k:vmlinuz}\ -%ghost /%{image_install_path}/%{?-k:%{-k*}}%{!?-k:vmlinuz}-%{KVERREL}%{?3:+%{3}}\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/.vmlinuz.hmac \ -%ghost /%{image_install_path}/.vmlinuz-%{KVERREL}%{?3:+%{3}}.hmac \ -%ifarch %{arm} aarch64\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/dtb \ -%ghost /%{image_install_path}/dtb-%{KVERREL}%{?3:+%{3}} \ -%endif\ -%attr(0600, root, root) /lib/modules/%{KVERREL}%{?3:+%{3}}/System.map\ -%ghost %attr(0600, root, root) /boot/System.map-%{KVERREL}%{?3:+%{3}}\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/symvers.gz\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/config\ -%ghost %attr(0600, root, root) /boot/symvers-%{KVERREL}%{?3:+%{3}}.gz\ -%ghost %attr(0600, root, root) /boot/initramfs-%{KVERREL}%{?3:+%{3}}.img\ -%ghost %attr(0644, root, root) /boot/config-%{KVERREL}%{?3:+%{3}}\ -%dir /lib/modules\ -%dir /lib/modules/%{KVERREL}%{?3:+%{3}}\ -%dir /lib/modules/%{KVERREL}%{?3:+%{3}}/kernel\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/build\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/source\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/updates\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/weak-updates\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/systemtap\ -%{_datadir}/doc/kernel-keys/%{KVERREL}%{?3:+%{3}}\ -%if %{1}\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/vdso\ -%endif\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/modules.*\ -%{expand:%%files -f kernel-%{?3:%{3}-}modules.list %{?3:%{3}-}modules}\ -%{expand:%%files %{?3:%{3}-}devel}\ -%defverify(not mtime)\ -/usr/src/kernels/%{KVERREL}%{?3:+%{3}}\ -%{expand:%%files %{?3:%{3}-}devel-matched}\ -%{expand:%%files -f kernel-%{?3:%{3}-}modules-extra.list %{?3:%{3}-}modules-extra}\ -%config(noreplace) /etc/modprobe.d/*-blacklist.conf\ -%{expand:%%files -f kernel-%{?3:%{3}-}modules-internal.list %{?3:%{3}-}modules-internal}\ -%if %{with_debuginfo}\ -%ifnarch noarch\ -%{expand:%%files -f debuginfo%{?3}.list %{?3:%{3}-}debuginfo}\ -%endif\ -%endif\ -%if %{?3:1} %{!?3:0}\ -%{expand:%%files %{3}}\ -%endif\ -%endif\ -%{nil} - -%kernel_variant_files %{_use_vdso} %{with_up} -%kernel_variant_files %{_use_vdso} %{with_debug} debug -%if %{with_debug_meta} -%files debug -%files debug-core -%files debug-devel -%files debug-devel-matched -%files debug-modules -%files debug-modules-extra -%endif -%kernel_variant_files %{use_vdso} %{with_pae} lpae -%kernel_variant_files %{_use_vdso} %{with_zfcpdump} zfcpdump - -%define kernel_variant_ipaclones(k:) \ -%if %{1}\ -%if %{with_ipaclones}\ -%{expand:%%files %{?2:%{2}-}ipaclones-internal}\ -%defattr(-,root,root)\ -%defverify(not mtime)\ -/usr/src/kernels/%{KVERREL}%{?2:+%{2}}-ipaclones\ -%endif\ -%endif\ -%{nil} - -%kernel_variant_ipaclones %{with_up} - -# plz don't put in a version string unless you're going to tag -# and build. -# -# -%changelog Mon Mar 28 2022 Fedora Kernel Team <kernel-team@xxxxxxxxxxxxxxxxx> [5.16.0-6.test] - -### -# The following Emacs magic makes C-c C-e use UTC dates. -# Local Variables: -# rpm-change-log-uses-utc: t -# End: -### diff --git a/redhat/self-test/data/centos-df0cc57e057f.fc25.spec b/redhat/self-test/data/centos-df0cc57e057f.fc25.spec index blahblah..blahblah 100755 --- a/redhat/self-test/data/centos-df0cc57e057f.fc25.spec +++ b/redhat/self-test/data/centos-df0cc57e057f.fc25.spec @@ -1,3050 +1,13 @@ -# All Global changes to build and install go here. -# Per the below section about __spec_install_pre, any rpm -# environment changes that affect %%install need to go -# here before the %%install macro is pre-built. - -# Disable LTO in userspace packages. -%global _lto_cflags %{nil} - -# Option to enable compiling with clang instead of gcc. -%bcond_with toolchain_clang - -%if %{with toolchain_clang} -%global toolchain clang -%endif - -# Compile the kernel with LTO (only supported when building with clang). -%bcond_with clang_lto - -%if %{with clang_lto} && %{without toolchain_clang} -{error:clang_lto requires --with toolchain_clang} -%endif - -# Cross compile on copr for arm -# See https://bugzilla.redhat.com/1879599 -%if 0%{?_with_cross_arm:1} -%global _target_cpu armv7hl -%global _arch arm -%global _build_arch arm -%global _with_cross 1 -%endif - -# The kernel's %%install section is special -# Normally the %%install section starts by cleaning up the BUILD_ROOT -# like so: -# -# %%__spec_install_pre %%{___build_pre}\ -# [ "$RPM_BUILD_ROOT" != "/" ] && rm -rf "${RPM_BUILD_ROOT}"\ -# mkdir -p `dirname "$RPM_BUILD_ROOT"`\ -# mkdir "$RPM_BUILD_ROOT"\ -# %%{nil} -# -# But because of kernel variants, the %%build section, specifically -# BuildKernel(), moves each variant to its final destination as the -# variant is built. This violates the expectation of the %%install -# section. As a result we snapshot the current env variables and -# purposely leave out the removal section. All global wide changes -# should be added above this line otherwise the %%install section -# will not see them. -%global __spec_install_pre %{___build_pre} - -# At the time of this writing (2019-03), RHEL8 packages use w2.xzdio -# compression for rpms (xz, level 2). -# Kernel has several large (hundreds of mbytes) rpms, they take ~5 mins -# to compress by single-threaded xz. Switch to threaded compression, -# and from level 2 to 3 to keep compressed sizes close to "w2" results. -# -# NB: if default compression in /usr/lib/rpm/redhat/macros ever changes, -# this one might need tweaking (e.g. if default changes to w3.xzdio, -# change below to w4T.xzdio): -# -# This is disabled on i686 as it triggers oom errors - -%ifnarch i686 -%define _binary_payload w3T.xzdio -%endif - -Summary: The Linux kernel -%if 0%{?fedora} -%define secure_boot_arch x86_64 -%else -%define secure_boot_arch x86_64 aarch64 s390x ppc64le -%endif - -# Signing for secure boot authentication -%ifarch %{secure_boot_arch} -%global signkernel 1 -%else -%global signkernel 0 -%endif - -# Sign modules on all arches -%global signmodules 1 - -# Compress modules only for architectures that build modules -%ifarch noarch -%global zipmodules 0 -%else -%global zipmodules 1 -%endif - -%if %{zipmodules} -%global zipsed -e 's/\.ko$/\.ko.xz/' -# for parallel xz processes, replace with 1 to go back to single process -%endif - -%if 0%{?fedora} -%define primary_target fedora -%else -%define primary_target rhel -%endif - -# -# genspec.sh variables -# - -# Include Fedora files %global include_fedora 1 -# Include RHEL files %global include_rhel 1 -# Provide Patchlist.changelog file %global patchlist_changelog 1 -# Set released_kernel to 1 when the upstream source tarball contains a -# kernel release. (This includes prepatch or "rc" releases.) -# Set released_kernel to 0 when the upstream source tarball contains an -# unreleased kernel development snapshot. %global released_kernel 0 -# Set debugbuildsenabled to 1 to build separate base and debug kernels -# (on supported architectures). The kernel-debug-* subpackages will -# contain the debug kernel. -# Set debugbuildsenabled to 0 to not build a separate debug kernel, but -# to build the base kernel using the debug configuration. (Specifying -# the --with-release option overrides this setting.) -%define debugbuildsenabled 1 %define buildid .test %define specversion 5.16.0 %define patchversion 5.16 %define pkgrelease 6.test %define kversion 5 %define tarfile_release 5.16.0-6.test -# This is needed to do merge window version magic %define patchlevel 16 -# allow pkg_release to have configurable %%{?dist} tag %define specrelease 6%{?buildid}%{?dist} - -# -# End of genspec.sh variables -# - -%define pkg_release %{specrelease} - -# libexec dir is not used by the linker, so the shared object there -# should not be exported to RPM provides -%global __provides_exclude_from ^%{_libexecdir}/kselftests - -# The following build options are enabled by default, but may become disabled -# by later architecture-specific checks. These can also be disabled by using -# --without <opt> in the rpmbuild command, or by forcing these values to 0. -# -# standard kernel -%define with_up %{?_without_up: 0} %{?!_without_up: 1} -# kernel PAE (only valid for ARM (lpae)) -%define with_pae %{?_without_pae: 0} %{?!_without_pae: 1} -# kernel-debug -%define with_debug %{?_without_debug: 0} %{?!_without_debug: 1} -# kernel-zfcpdump (s390 specific kernel for zfcpdump) -%define with_zfcpdump %{?_without_zfcpdump: 0} %{?!_without_zfcpdump: 1} -# kernel-doc -%define with_doc %{?_without_doc: 0} %{?!_without_doc: 1} -# kernel-headers -%define with_headers %{?_without_headers: 0} %{?!_without_headers: 1} -%define with_cross_headers %{?_without_cross_headers: 0} %{?!_without_cross_headers: 1} -# perf -%define with_perf %{?_without_perf: 0} %{?!_without_perf: 1} -# tools -%define with_tools %{?_without_tools: 0} %{?!_without_tools: 1} -# bpf tool -%define with_bpftool %{?_without_bpftool: 0} %{?!_without_bpftool: 1} -# kernel-debuginfo -%define with_debuginfo %{?_without_debuginfo: 0} %{?!_without_debuginfo: 1} -# kernel-abi-stablelists -%define with_kernel_abi_stablelists %{?_without_kernel_abi_stablelists: 0} %{?!_without_kernel_abi_stablelists: 1} -# internal samples and selftests -%define with_selftests %{?_without_selftests: 0} %{?!_without_selftests: 1} -# -# Additional options for user-friendly one-off kernel building: -# -# Only build the base kernel (--with baseonly): -%define with_baseonly %{?_with_baseonly: 1} %{?!_with_baseonly: 0} -# Only build the pae kernel (--with paeonly): -%define with_paeonly %{?_with_paeonly: 1} %{?!_with_paeonly: 0} -# Only build the debug kernel (--with dbgonly): -%define with_dbgonly %{?_with_dbgonly: 1} %{?!_with_dbgonly: 0} -# Control whether we perform a compat. check against published ABI. -%define with_kabichk %{?_without_kabichk: 0} %{?!_without_kabichk: 1} -# Temporarily disable kabi checks until RC. -%define with_kabichk 0 -# Control whether we perform a compat. check against DUP ABI. -%define with_kabidupchk %{?_with_kabidupchk: 1} %{?!_with_kabidupchk: 0} -# -# Control whether to run an extensive DWARF based kABI check. -# Note that this option needs to have baseline setup in SOURCE300. -%define with_kabidwchk %{?_without_kabidwchk: 0} %{?!_without_kabidwchk: 1} -%define with_kabidw_base %{?_with_kabidw_base: 1} %{?!_with_kabidw_base: 0} -# -# Control whether to install the vdso directories. -%define with_vdso_install %{?_without_vdso_install: 0} %{?!_without_vdso_install: 1} -# -# should we do C=1 builds with sparse -%define with_sparse %{?_with_sparse: 1} %{?!_with_sparse: 0} -# -# Cross compile requested? -%define with_cross %{?_with_cross: 1} %{?!_with_cross: 0} -# -# build a release kernel on rawhide -%define with_release %{?_with_release: 1} %{?!_with_release: 0} - -# verbose build, i.e. no silent rules and V=1 -%define with_verbose %{?_with_verbose: 1} %{?!_with_verbose: 0} - -# -# check for mismatched config options -%define with_configchecks %{?_without_configchecks: 0} %{?!_without_configchecks: 1} - -# -# gcov support -%define with_gcov %{?_with_gcov:1}%{?!_with_gcov:0} - -# -# ipa_clone support -%define with_ipaclones %{?_without_ipaclones: 0} %{?!_without_ipaclones: 1} - -# Want to build a vanilla kernel build without any non-upstream patches? -%define with_vanilla %{?_with_vanilla: 1} %{?!_with_vanilla: 0} - -%if 0%{?fedora} -# Kernel headers are being split out into a separate package -%define with_headers 0 -%define with_cross_headers 0 -# no ipa_clone for now -%define with_ipaclones 0 -# no stablelist -%define with_kernel_abi_stablelists 0 -# Fedora builds these separately -%define with_perf 0 -%define with_tools 0 -%define with_bpftool 0 -# selftests turns on bpftool -%define with_selftests 0 -%endif - -%if %{with_verbose} -%define make_opts V=1 -%else -%define make_opts -s -%endif - -%if %{with toolchain_clang} -%ifarch s390x ppc64le -%global llvm_ias 0 -%else -%global llvm_ias 1 -%endif -%global clang_make_opts HOSTCC=clang CC=clang LLVM_IAS=%{llvm_ias} -%if %{with clang_lto} -%global clang_make_opts %{clang_make_opts} LD=ld.lld HOSTLD=ld.lld AR=llvm-ar NM=llvm-nm HOSTAR=llvm-ar HOSTNM=llvm-nm -%endif -%global make_opts %{make_opts} %{clang_make_opts} -# clang does not support the -fdump-ipa-clones option -%global with_ipaclones 0 -%endif - -# turn off debug kernel and kabichk for gcov builds -%if %{with_gcov} -%define with_debug 0 -%define with_kabichk 0 -%define with_kabidupchk 0 -%define with_kabidwchk 0 -%define with_kabidw_base 0 -%define with_kernel_abi_stablelists 0 -%endif - -# turn off kABI DWARF-based check if we're generating the base dataset -%if %{with_kabidw_base} -%define with_kabidwchk 0 -%endif - -# kpatch_kcflags are extra compiler flags applied to base kernel -# -fdump-ipa-clones is enabled only for base kernels on selected arches -%if %{with_ipaclones} -%ifarch x86_64 ppc64le -%define kpatch_kcflags -fdump-ipa-clones -%else -%define with_ipaclones 0 -%endif -%endif - -%define make_target bzImage -%define image_install_path boot - -%define KVERREL %{version}-%{release}.%{_target_cpu} -%define KVERREL_RE %(echo %KVERREL | sed 's/+/[+]/g') -%define hdrarch %_target_cpu -%define asmarch %_target_cpu - -%if 0%{!?nopatches:1} -%define nopatches 0 -%endif - -%if %{with_vanilla} -%define nopatches 1 -%endif - -%if %{with_release} -%define debugbuildsenabled 1 -%endif - -%if !%{with_debuginfo} -%define _enable_debug_packages 0 -%endif -%define debuginfodir /usr/lib/debug -# Needed because we override almost everything involving build-ids -# and debuginfo generation. Currently we rely on the old alldebug setting. -%global _build_id_links alldebug - -# kernel PAE is only built on ARMv7 -%ifnarch armv7hl -%define with_pae 0 -%endif - -# if requested, only build base kernel -%if %{with_baseonly} -%define with_pae 0 -%define with_debug 0 -%define with_vdso_install 0 -%define with_perf 0 -%define with_tools 0 -%define with_bpftool 0 -%define with_kernel_abi_stablelists 0 -%define with_selftests 0 -%define with_cross 0 -%define with_cross_headers 0 -%define with_ipaclones 0 -%endif - -# if requested, only build pae kernel -%if %{with_paeonly} -%define with_up 0 -%define with_debug 0 -%endif - -# if requested, only build debug kernel -%if %{with_dbgonly} -%define with_up 0 -%define with_vdso_install 0 -%define with_perf 0 -%define with_tools 0 -%define with_bpftool 0 -%define with_kernel_abi_stablelists 0 -%define with_selftests 0 -%define with_cross 0 -%define with_cross_headers 0 -%define with_ipaclones 0 -%endif - -# turn off kABI DUP check and DWARF-based check if kABI check is disabled -%if !%{with_kabichk} -%define with_kabidupchk 0 -%define with_kabidwchk 0 -%endif - -%if %{with_vdso_install} -%define use_vdso 1 -%endif - -# selftests require bpftool to be built -%if %{with_selftests} -%define with_bpftool 1 -%endif - -%ifnarch noarch -%define with_kernel_abi_stablelists 0 -%endif - -# Overrides for generic default options - -# only package docs noarch -%ifnarch noarch -%define with_doc 0 -%define doc_build_fail true -%endif - -%if 0%{?fedora} -# don't do debug builds on anything but i686 and x86_64 -%ifnarch i686 x86_64 -%define with_debug 0 -%endif -%endif - -# don't build noarch kernels or headers (duh) -%ifarch noarch -%define with_up 0 -%define with_headers 0 -%define with_cross_headers 0 -%define with_tools 0 -%define with_perf 0 -%define with_bpftool 0 -%define with_selftests 0 -%define with_debug 0 -%define all_arch_configs kernel-%{version}-*.config -%endif - -# sparse blows up on ppc -%ifnarch ppc64le -%define with_sparse 0 -%endif - -# zfcpdump mechanism is s390 only -%ifnarch s390x -%define with_zfcpdump 0 -%endif - -%if 0%{?fedora} -# This is not for Fedora -%define with_zfcpdump 0 -%endif - -# Per-arch tweaks - -%ifarch i686 -%define asmarch x86 -%define hdrarch i386 -%define all_arch_configs kernel-%{version}-i?86*.config -%define kernel_image arch/x86/boot/bzImage -%endif - -%ifarch x86_64 -%define asmarch x86 -%define all_arch_configs kernel-%{version}-x86_64*.config -%define kernel_image arch/x86/boot/bzImage -%endif - -%ifarch ppc64le -%define asmarch powerpc -%define hdrarch powerpc -%define make_target vmlinux -%define kernel_image vmlinux -%define kernel_image_elf 1 -%define use_vdso 0 -%define all_arch_configs kernel-%{version}-ppc64le*.config -%endif - -%ifarch s390x -%define asmarch s390 -%define hdrarch s390 -%define all_arch_configs kernel-%{version}-s390x.config -%define kernel_image arch/s390/boot/bzImage -%define vmlinux_decompressor arch/s390/boot/compressed/vmlinux -%endif - -%ifarch %{arm} -%define all_arch_configs kernel-%{version}-arm*.config -%define skip_nonpae_vdso 1 -%define asmarch arm -%define hdrarch arm -%define make_target bzImage -%define kernel_image arch/arm/boot/zImage -# http://lists.infradead.org/pipermail/linux-arm-kernel/2012-March/091404.html -%define kernel_mflags KALLSYMS_EXTRA_PASS=1 -# we only build headers/perf/tools on the base arm arches -# just like we used to only build them on i386 for x86 -%ifnarch armv7hl -%define with_headers 0 -%define with_cross_headers 0 -%endif -# These currently don't compile on armv7 -%define with_selftests 0 -%endif - -%ifarch aarch64 -%define all_arch_configs kernel-%{version}-aarch64*.config -%define asmarch arm64 -%define hdrarch arm64 -%define make_target Image.gz -%define kernel_image arch/arm64/boot/Image.gz -%endif - -# Should make listnewconfig fail if there's config options -# printed out? -%if %{nopatches} -%define with_configchecks 0 -%endif - -# To temporarily exclude an architecture from being built, add it to -# %%nobuildarches. Do _NOT_ use the ExclusiveArch: line, because if we -# don't build kernel-headers then the new build system will no longer let -# us use the previous build of that package -- it'll just be completely AWOL. -# Which is a BadThing(tm). - -# We only build kernel-headers on the following... -%if 0%{?fedora} -%define nobuildarches i386 -%else -%define nobuildarches i386 i686 %{arm} -%endif - -%ifarch %nobuildarches -# disable BuildKernel commands -%define with_up 0 -%define with_debug 0 -%define with_pae 0 -%define with_zfcpdump 0 - -%define with_debuginfo 0 -%define with_perf 0 -%define with_tools 0 -%define with_bpftool 0 -%define with_selftests 0 -%define _enable_debug_packages 0 -%endif - -# Architectures we build tools/cpupower on -%if 0%{?fedora} -%define cpupowerarchs %{ix86} x86_64 ppc64le %{arm} aarch64 -%else -%define cpupowerarchs i686 x86_64 ppc64le aarch64 -%endif - -%if 0%{?use_vdso} - -%if 0%{?skip_nonpae_vdso} -%define _use_vdso 0 -%else -%define _use_vdso 1 -%endif - -%else -%define _use_vdso 0 -%endif - -# If build of debug packages is disabled, we need to know if we want to create -# meta debug packages or not, after we define with_debug for all specific cases -# above. So this must be at the end here, after all cases of with_debug or not. -%define with_debug_meta 0 -%if !%{debugbuildsenabled} -%if %{with_debug} -%define with_debug_meta 1 -%endif -%define with_debug 0 -%endif - - -# -# Packages that need to be installed before the kernel is, because the %%post -# scripts use them. -# -%define kernel_prereq coreutils, systemd >= 203-2, /usr/bin/kernel-install -%define initrd_prereq dracut >= 027 - - -Name: kernel -License: GPLv2 and Redistributable, no modification permitted -URL: https://www.kernel.org/ -Version: %{specversion} -Release: %{pkg_release} -# DO NOT CHANGE THE 'ExclusiveArch' LINE TO TEMPORARILY EXCLUDE AN ARCHITECTURE BUILD. -# SET %%nobuildarches (ABOVE) INSTEAD -%if 0%{?fedora} -ExclusiveArch: noarch x86_64 s390x %{arm} aarch64 ppc64le -%else -ExclusiveArch: noarch i386 i686 x86_64 s390x %{arm} aarch64 ppc64le -%endif -ExclusiveOS: Linux -%ifnarch %{nobuildarches} -Requires: kernel-core-uname-r = %{KVERREL} -Requires: kernel-modules-uname-r = %{KVERREL} -%endif - - -# -# List the packages used during the kernel build -# -BuildRequires: kmod, patch, bash, coreutils, tar, git-core, which -BuildRequires: bzip2, xz, findutils, gzip, m4, perl-interpreter, perl-Carp, perl-devel, perl-generators, make, diffutils, gawk -BuildRequires: gcc, binutils, redhat-rpm-config, hmaccalc, bison, flex, gcc-c++ -BuildRequires: net-tools, hostname, bc, elfutils-devel -BuildRequires: dwarves -BuildRequires: python3-devel -BuildRequires: gcc-plugin-devel -# glibc-static is required for a consistent build environment (specifically -# CONFIG_CC_CAN_LINK_STATIC=y). -BuildRequires: glibc-static -%ifnarch %{nobuildarches} noarch -BuildRequires: bpftool -%endif -%if %{with_headers} -BuildRequires: rsync -%endif -%if %{with_doc} -BuildRequires: xmlto, asciidoc, python3-sphinx, python3-sphinx_rtd_theme -%endif -%if %{with_sparse} -BuildRequires: sparse -%endif -%if %{with_perf} -BuildRequires: zlib-devel binutils-devel newt-devel perl(ExtUtils::Embed) bison flex xz-devel -BuildRequires: audit-libs-devel -BuildRequires: java-devel -BuildRequires: libbpf-devel -BuildRequires: libbabeltrace-devel -BuildRequires: libtraceevent-devel -%ifnarch %{arm} s390x -BuildRequires: numactl-devel -%endif -%ifarch aarch64 -BuildRequires: opencsd-devel >= 1.0.0 -%endif -%endif -%if %{with_tools} -BuildRequires: gettext ncurses-devel -BuildRequires: libcap-devel libcap-ng-devel -%ifnarch s390x -BuildRequires: pciutils-devel -%endif -%ifarch i686 x86_64 -BuildRequires: libnl3-devel -%endif -%endif -%if %{with_tools} || %{signmodules} || %{signkernel} -BuildRequires: openssl-devel -%endif -%if %{with_bpftool} -BuildRequires: python3-docutils -BuildRequires: zlib-devel binutils-devel -%endif -%if %{with_selftests} -BuildRequires: clang llvm -%ifnarch %{arm} -BuildRequires: numactl-devel -%endif -BuildRequires: libcap-devel libcap-ng-devel rsync libmnl-devel -%endif -BuildConflicts: rhbuildsys(DiskFree) < 500Mb -%if %{with_debuginfo} -BuildRequires: rpm-build, elfutils -BuildConflicts: rpm < 4.13.0.1-19 -BuildConflicts: dwarves < 1.13 -# Most of these should be enabled after more investigation -%undefine _include_minidebuginfo -%undefine _find_debuginfo_dwz_opts -%undefine _unique_build_ids -%undefine _unique_debug_names -%undefine _unique_debug_srcs -%undefine _debugsource_packages -%undefine _debuginfo_subpackages -%global _find_debuginfo_opts -r -%global _missing_build_ids_terminate_build 1 -%global _no_recompute_build_ids 1 -%endif -%if %{with_kabidwchk} || %{with_kabidw_base} -BuildRequires: kabi-dw -%endif - -%if %{signkernel}%{signmodules} -BuildRequires: openssl -%if %{signkernel} -# ELN uses Fedora signing process, so exclude -%if 0%{?rhel}%{?centos} && !0%{?eln} -BuildRequires: system-sb-certs -%endif -%ifarch x86_64 aarch64 -BuildRequires: nss-tools -BuildRequires: pesign >= 0.10-4 -%endif -%endif -%endif - -%if %{with_cross} -BuildRequires: binutils-%{_build_arch}-linux-gnu, gcc-%{_build_arch}-linux-gnu -%define cross_opts CROSS_COMPILE=%{_build_arch}-linux-gnu- -%define __strip %{_build_arch}-linux-gnu-strip -%endif - -# These below are required to build man pages -%if %{with_perf} -BuildRequires: xmlto -%endif -%if %{with_perf} || %{with_tools} -BuildRequires: asciidoc -%endif - -%if %{with toolchain_clang} -BuildRequires: clang -%endif - -%if %{with clang_lto} -BuildRequires: llvm -BuildRequires: lld -%endif - -# Because this is the kernel, it's hard to get a single upstream URL -# to represent the base without needing to do a bunch of patching. This -# tarball is generated from a src-git tree. If you want to see the -# exact git commit you can run -# -# xzcat -qq ${TARBALL} | git get-tar-commit-id -Source0: linux-%{tarfile_release}.tar.xz - -Source1: Makefile.rhelver - - -# Name of the packaged file containing signing key -%ifarch ppc64le -%define signing_key_filename kernel-signing-ppc.cer -%endif -%ifarch s390x -%define signing_key_filename kernel-signing-s390.cer -%endif - -%if %{?released_kernel} - -Source10: redhatsecurebootca5.cer -Source11: redhatsecurebootca1.cer -Source12: redhatsecureboot501.cer -Source13: redhatsecureboot301.cer -Source14: secureboot_s390.cer -Source15: secureboot_ppc.cer - -%define secureboot_ca_1 %{SOURCE10} -%define secureboot_ca_0 %{SOURCE11} -%ifarch x86_64 aarch64 -%define secureboot_key_1 %{SOURCE12} -%define pesign_name_1 redhatsecureboot501 -%define secureboot_key_0 %{SOURCE13} -%define pesign_name_0 redhatsecureboot301 -%endif -%ifarch s390x -%define secureboot_key_0 %{SOURCE14} -%define pesign_name_0 redhatsecureboot302 -%endif -%ifarch ppc64le -%define secureboot_key_0 %{SOURCE15} -%define pesign_name_0 redhatsecureboot303 -%endif - -# released_kernel -%else - -Source10: redhatsecurebootca4.cer -Source11: redhatsecurebootca2.cer -Source12: redhatsecureboot401.cer -Source13: redhatsecureboot003.cer - -%define secureboot_ca_1 %{SOURCE10} -%define secureboot_ca_0 %{SOURCE11} -%define secureboot_key_1 %{SOURCE12} -%define pesign_name_1 redhatsecureboot401 -%define secureboot_key_0 %{SOURCE13} -%define pesign_name_0 redhatsecureboot003 - -# released_kernel -%endif - -Source20: mod-denylist.sh -Source21: mod-sign.sh -Source22: parallel_xz.sh - -%define modsign_cmd %{SOURCE21} - -%if 0%{?include_rhel} -Source23: x509.genkey.rhel - -Source24: kernel-aarch64-rhel.config -Source25: kernel-aarch64-debug-rhel.config -Source26: mod-extra.list.rhel - -Source27: kernel-ppc64le-rhel.config -Source28: kernel-ppc64le-debug-rhel.config -Source29: kernel-s390x-rhel.config -Source30: kernel-s390x-debug-rhel.config -Source31: kernel-s390x-zfcpdump-rhel.config -Source32: kernel-x86_64-rhel.config -Source33: kernel-x86_64-debug-rhel.config - -Source34: filter-x86_64.sh.rhel -Source35: filter-armv7hl.sh.rhel -Source37: filter-aarch64.sh.rhel -Source38: filter-ppc64le.sh.rhel -Source39: filter-s390x.sh.rhel -Source40: filter-modules.sh.rhel - -Source41: x509.genkey.centos -%endif - -%if 0%{?include_fedora} -Source50: x509.genkey.fedora -Source51: mod-extra.list.fedora - -Source52: kernel-aarch64-fedora.config -Source53: kernel-aarch64-debug-fedora.config -Source54: kernel-armv7hl-fedora.config -Source55: kernel-armv7hl-debug-fedora.config -Source56: kernel-armv7hl-lpae-fedora.config -Source57: kernel-armv7hl-lpae-debug-fedora.config -Source60: kernel-ppc64le-fedora.config -Source61: kernel-ppc64le-debug-fedora.config -Source62: kernel-s390x-fedora.config -Source63: kernel-s390x-debug-fedora.config -Source64: kernel-x86_64-fedora.config -Source65: kernel-x86_64-debug-fedora.config - -Source67: filter-x86_64.sh.fedora -Source68: filter-armv7hl.sh.fedora -Source70: filter-aarch64.sh.fedora -Source71: filter-ppc64le.sh.fedora -Source72: filter-s390x.sh.fedora -Source73: filter-modules.sh.fedora -%endif - -Source75: partial-kgcov-snip.config -Source80: generate_all_configs.sh -Source81: process_configs.sh - -Source82: update_scripts.sh - -Source84: mod-internal.list - -Source100: rheldup3.x509 -Source101: rhelkpatch1.x509 - -Source200: check-kabi - -Source201: Module.kabi_aarch64 -Source202: Module.kabi_ppc64le -Source203: Module.kabi_s390x -Source204: Module.kabi_x86_64 - -Source210: Module.kabi_dup_aarch64 -Source211: Module.kabi_dup_ppc64le -Source212: Module.kabi_dup_s390x -Source213: Module.kabi_dup_x86_64 - -Source300: kernel-abi-stablelists-%{specversion}-%{pkgrelease}.tar.bz2 -Source301: kernel-kabi-dw-%{specversion}-%{pkgrelease}.tar.bz2 - -# Sources for kernel-tools -Source2000: cpupower.service -Source2001: cpupower.config -Source2002: kvm_stat.logrotate - -# Some people enjoy building customized kernels from the dist-git in Fedora and -# use this to override configuration options. One day they may all use the -# source tree, but in the mean time we carry this to support the legacy workflow -Source3000: merge.pl -Source3001: kernel-local -%if %{patchlist_changelog} -Source3002: Patchlist.changelog -%endif - -Source4000: README.rst -Source4001: rpminspect.yaml -Source4002: gating.yaml - -## Patches needed for building this package - -%if !%{nopatches} - -Patch1: patch-%{patchversion}-redhat.patch -%endif - -# empty final patch to facilitate testing of kernel patches -Patch999999: linux-kernel-test.patch - -# END OF PATCH DEFINITIONS - -%description -The kernel meta package - -# -# This macro does requires, provides, conflicts, obsoletes for a kernel package. -# %%kernel_reqprovconf <subpackage> -# It uses any kernel_<subpackage>_conflicts and kernel_<subpackage>_obsoletes -# macros defined above. -# -%define kernel_reqprovconf \ -Provides: kernel = %{specversion}-%{pkg_release}\ -Provides: kernel-%{_target_cpu} = %{specversion}-%{pkg_release}%{?1:+%{1}}\ -Provides: kernel-drm-nouveau = 16\ -Provides: kernel-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires(pre): %{kernel_prereq}\ -Requires(pre): %{initrd_prereq}\ -Requires(pre): ((linux-firmware >= 20150904-56.git6ebf5d57) if linux-firmware)\ -Recommends: linux-firmware\ -Requires(preun): systemd >= 200\ -Conflicts: xfsprogs < 4.3.0-1\ -Conflicts: xorg-x11-drv-vmmouse < 13.0.99\ -%{expand:%%{?kernel%{?1:_%{1}}_conflicts:Conflicts: %%{kernel%{?1:_%{1}}_conflicts}}}\ -%{expand:%%{?kernel%{?1:_%{1}}_obsoletes:Obsoletes: %%{kernel%{?1:_%{1}}_obsoletes}}}\ -%{expand:%%{?kernel%{?1:_%{1}}_provides:Provides: %%{kernel%{?1:_%{1}}_provides}}}\ -# We can't let RPM do the dependencies automatic because it'll then pick up\ -# a correct but undesirable perl dependency from the module headers which\ -# isn't required for the kernel proper to function\ -AutoReq: no\ -AutoProv: yes\ -%{nil} - - -%package doc -Summary: Various documentation bits found in the kernel source -Group: Documentation -%description doc -This package contains documentation files from the kernel -source. Various bits of information about the Linux kernel and the -device drivers shipped with it are documented in these files. - -You'll want to install this package if you need a reference to the -options that can be passed to Linux kernel modules at load time. - - -%package headers -Summary: Header files for the Linux kernel for use by glibc -Obsoletes: glibc-kernheaders < 3.0-46 -Provides: glibc-kernheaders = 3.0-46 -%description headers -Kernel-headers includes the C header files that specify the interface -between the Linux kernel and userspace libraries and programs. The -header files define structures and constants that are needed for -building most standard programs and are also needed for rebuilding the -glibc package. - -%package cross-headers -Summary: Header files for the Linux kernel for use by cross-glibc -%description cross-headers -Kernel-cross-headers includes the C header files that specify the interface -between the Linux kernel and userspace libraries and programs. The -header files define structures and constants that are needed for -building most standard programs and are also needed for rebuilding the -cross-glibc package. - - -%package debuginfo-common-%{_target_cpu} -Summary: Kernel source files used by %{name}-debuginfo packages -Provides: installonlypkg(kernel) -%description debuginfo-common-%{_target_cpu} -This package is required by %{name}-debuginfo subpackages. -It provides the kernel source files common to all builds. - -%if %{with_perf} -%package -n perf -Summary: Performance monitoring for the Linux kernel -Requires: bzip2 -License: GPLv2 -%description -n perf -This package contains the perf tool, which enables performance monitoring -of the Linux kernel. - -%package -n perf-debuginfo -Summary: Debug information for package perf -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release} -AutoReqProv: no -%description -n perf-debuginfo -This package provides debug information for the perf package. - -# Note that this pattern only works right to match the .build-id -# symlinks because of the trailing nonmatching alternation and -# the leading .*, because of find-debuginfo.sh's buggy handling -# of matching the pattern against the symlinks file. -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{_bindir}/perf(\.debug)?|.*%%{_libexecdir}/perf-core/.*|.*%%{_libdir}/libperf-jvmti.so(\.debug)?|XXX' -o perf-debuginfo.list} - -%package -n python3-perf -Summary: Python bindings for apps which will manipulate perf events -%description -n python3-perf -The python3-perf package contains a module that permits applications -written in the Python programming language to use the interface -to manipulate perf events. - -%package -n python3-perf-debuginfo -Summary: Debug information for package perf python bindings -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release} -AutoReqProv: no -%description -n python3-perf-debuginfo -This package provides debug information for the perf python bindings. - -# the python_sitearch macro should already be defined from above -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{python3_sitearch}/perf.*so(\.debug)?|XXX' -o python3-perf-debuginfo.list} - -# with_perf -%endif - -%if %{with_tools} -%package -n kernel-tools -Summary: Assortment of tools for the Linux kernel -License: GPLv2 -%ifarch %{cpupowerarchs} -Provides: cpupowerutils = 1:009-0.6.p1 -Obsoletes: cpupowerutils < 1:009-0.6.p1 -Provides: cpufreq-utils = 1:009-0.6.p1 -Provides: cpufrequtils = 1:009-0.6.p1 -Obsoletes: cpufreq-utils < 1:009-0.6.p1 -Obsoletes: cpufrequtils < 1:009-0.6.p1 -Obsoletes: cpuspeed < 1:1.5-16 -Requires: kernel-tools-libs = %{version}-%{release} -%endif -%define __requires_exclude ^%{_bindir}/python -%description -n kernel-tools -This package contains the tools/ directory from the kernel source -and the supporting documentation. - -%package -n kernel-tools-libs -Summary: Libraries for the kernels-tools -License: GPLv2 -%description -n kernel-tools-libs -This package contains the libraries built from the tools/ directory -from the kernel source. - -%package -n kernel-tools-libs-devel -Summary: Assortment of tools for the Linux kernel -License: GPLv2 -Requires: kernel-tools = %{version}-%{release} -%ifarch %{cpupowerarchs} -Provides: cpupowerutils-devel = 1:009-0.6.p1 -Obsoletes: cpupowerutils-devel < 1:009-0.6.p1 -%endif -Requires: kernel-tools-libs = %{version}-%{release} -Provides: kernel-tools-devel -%description -n kernel-tools-libs-devel -This package contains the development files for the tools/ directory from -the kernel source. - -%package -n kernel-tools-debuginfo -Summary: Debug information for package kernel-tools -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release} -AutoReqProv: no -%description -n kernel-tools-debuginfo -This package provides debug information for package kernel-tools. - -# Note that this pattern only works right to match the .build-id -# symlinks because of the trailing nonmatching alternation and -# the leading .*, because of find-debuginfo.sh's buggy handling -# of matching the pattern against the symlinks file. -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{_bindir}/centrino-decode(\.debug)?|.*%%{_bindir}/powernow-k8-decode(\.debug)?|.*%%{_bindir}/cpupower(\.debug)?|.*%%{_libdir}/libcpupower.*|.*%%{_bindir}/turbostat(\.debug)?|.*%%{_bindir}/x86_energy_perf_policy(\.debug)?|.*%%{_bindir}/tmon(\.debug)?|.*%%{_bindir}/lsgpio(\.debug)?|.*%%{_bindir}/gpio-hammer(\.debug)?|.*%%{_bindir}/gpio-event-mon(\.debug)?|.*%%{_bindir}/gpio-watch(\.debug)?|.*%%{_bindir}/iio_event_monitor(\.debug)?|.*%%{_bindir}/iio_generic_buffer(\.debug)?|.*%%{_bindir}/lsiio(\.debug)?|.*%%{_bindir}/intel-speed-select(\.debug)?|.*%%{_bindir}/page_owner_sort(\.debug)?|.*%%{_bindir}/slabinfo(\.debug)?|.*%%{_sbindir}/intel_sdsi(\.debug)?|XXX' -o kernel-tools-debuginfo.list} - -# with_tools -%endif - -%if %{with_bpftool} - -%package -n bpftool -Summary: Inspection and simple manipulation of eBPF programs and maps -License: GPLv2 -%description -n bpftool -This package contains the bpftool, which allows inspection and simple -manipulation of eBPF programs and maps. - -%package -n bpftool-debuginfo -Summary: Debug information for package bpftool -Group: Development/Debug -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release} -AutoReqProv: no -%description -n bpftool-debuginfo -This package provides debug information for the bpftool package. - -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{_sbindir}/bpftool(\.debug)?|XXX' -o bpftool-debuginfo.list} - -# with_bpftool -%endif - -%if %{with_selftests} - -%package selftests-internal -Summary: Kernel samples and selftests -License: GPLv2 -Requires: binutils, bpftool, iproute-tc, nmap-ncat, python3 -%description selftests-internal -Kernel sample programs and selftests. - -# Note that this pattern only works right to match the .build-id -# symlinks because of the trailing nonmatching alternation and -# the leading .*, because of find-debuginfo.sh's buggy handling -# of matching the pattern against the symlinks file. -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{_libexecdir}/(ksamples|kselftests)/.*|XXX' -o selftests-debuginfo.list} - -# with_selftests -%endif - -%if %{with_gcov} -%package gcov -Summary: gcov graph and source files for coverage data collection. -%description gcov -kernel-gcov includes the gcov graph and source files for gcov coverage collection. -%endif - -%package -n kernel-abi-stablelists -Summary: The Red Hat Enterprise Linux kernel ABI symbol stablelists -AutoReqProv: no -%description -n kernel-abi-stablelists -The kABI package contains information pertaining to the Red Hat Enterprise -Linux kernel ABI, including lists of kernel symbols that are needed by -external Linux kernel modules, and a yum plugin to aid enforcement. - -%if %{with_kabidw_base} -%package kernel-kabidw-base-internal -Summary: The baseline dataset for kABI verification using DWARF data -Group: System Environment/Kernel -AutoReqProv: no -%description kernel-kabidw-base-internal -The package contains data describing the current ABI of the Red Hat Enterprise -Linux kernel, suitable for the kabi-dw tool. -%endif - -# -# This macro creates a kernel-<subpackage>-debuginfo package. -# %%kernel_debuginfo_package <subpackage> -# -# Explanation of the find_debuginfo_opts: We build multiple kernels (debug -# pae etc.) so the regex filters those kernels appropriately. We also -# have to package several binaries as part of kernel-devel but getting -# unique build-ids is tricky for these userspace binaries. We don't really -# care about debugging those so we just filter those out and remove it. -%define kernel_debuginfo_package() \ -%package %{?1:%{1}-}debuginfo\ -Summary: Debug information for package %{name}%{?1:-%{1}}\ -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release}\ -Provides: %{name}%{?1:-%{1}}-debuginfo-%{_target_cpu} = %{version}-%{release}\ -Provides: installonlypkg(kernel)\ -AutoReqProv: no\ -%description %{?1:%{1}-}debuginfo\ -This package provides debug information for package %{name}%{?1:-%{1}}.\ -This is required to use SystemTap with %{name}%{?1:-%{1}}-%{KVERREL}.\ -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} --keep-section '.BTF' -p '.*\/usr\/src\/kernels/.*|XXX' -o ignored-debuginfo.list -p '/.*/%%{KVERREL_RE}%{?1:[+]%{1}}/.*|/.*%%{KVERREL_RE}%{?1:\+%{1}}(\.debug)?' -o debuginfo%{?1}.list}\ -%{nil} - -# -# This macro creates a kernel-<subpackage>-devel package. -# %%kernel_devel_package [-m] <subpackage> <pretty-name> -# -%define kernel_devel_package(m) \ -%package %{?1:%{1}-}devel\ -Summary: Development package for building kernel modules to match the %{?2:%{2} }kernel\ -Provides: kernel%{?1:-%{1}}-devel-%{_target_cpu} = %{version}-%{release}\ -Provides: kernel-devel-%{_target_cpu} = %{version}-%{release}%{?1:+%{1}}\ -Provides: kernel-devel-uname-r = %{KVERREL}%{?1:+%{1}}\ -Provides: installonlypkg(kernel)\ -AutoReqProv: no\ -Requires(pre): findutils\ -Requires: findutils\ -Requires: perl-interpreter\ -Requires: openssl-devel\ -Requires: elfutils-libelf-devel\ -Requires: bison\ -Requires: flex\ -Requires: make\ -Requires: gcc\ -%if %{-m:1}%{!-m:0}\ -Requires: kernel-devel-uname-r = %{KVERREL}\ -%endif\ -%description %{?1:%{1}-}devel\ -This package provides kernel headers and makefiles sufficient to build modules\ -against the %{?2:%{2} }kernel package.\ -%{nil} - -# -# This macro creates an empty kernel-<subpackage>-devel-matched package that -# requires both the core and devel packages locked on the same version. -# %%kernel_devel_matched_package [-m] <subpackage> <pretty-name> -# -%define kernel_devel_matched_package(m) \ -%package %{?1:%{1}-}devel-matched\ -Summary: Meta package to install matching core and devel packages for a given %{?2:%{2} }kernel\ -Requires: kernel%{?1:-%{1}}-devel = %{version}-%{release}\ -Requires: kernel%{?1:-%{1}}-core = %{version}-%{release}\ -%description %{?1:%{1}-}devel-matched\ -This meta package is used to install matching core and devel packages for a given %{?2:%{2} }kernel.\ -%{nil} - -# -# kernel-<variant>-ipaclones-internal package -# -%define kernel_ipaclones_package() \ -%package %{?1:%{1}-}ipaclones-internal\ -Summary: *.ipa-clones files generated by -fdump-ipa-clones for kernel%{?1:-%{1}}\ -Group: System Environment/Kernel\ -AutoReqProv: no\ -%description %{?1:%{1}-}ipaclones-internal\ -This package provides *.ipa-clones files.\ -%{nil} - -# -# This macro creates a kernel-<subpackage>-modules-internal package. -# %%kernel_modules_internal_package <subpackage> <pretty-name> -# -%define kernel_modules_internal_package() \ -%package %{?1:%{1}-}modules-internal\ -Summary: Extra kernel modules to match the %{?2:%{2} }kernel\ -Group: System Environment/Kernel\ -Provides: kernel%{?1:-%{1}}-modules-internal-%{_target_cpu} = %{version}-%{release}\ -Provides: kernel%{?1:-%{1}}-modules-internal-%{_target_cpu} = %{version}-%{release}%{?1:+%{1}}\ -Provides: kernel%{?1:-%{1}}-modules-internal = %{version}-%{release}%{?1:+%{1}}\ -Provides: installonlypkg(kernel-module)\ -Provides: kernel%{?1:-%{1}}-modules-internal-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel%{?1:-%{1}}-modules-uname-r = %{KVERREL}%{?1:+%{1}}\ -AutoReq: no\ -AutoProv: yes\ -%description %{?1:%{1}-}modules-internal\ -This package provides kernel modules for the %{?2:%{2} }kernel package for Red Hat internal usage.\ -%{nil} - -# -# This macro creates a kernel-<subpackage>-modules-extra package. -# %%kernel_modules_extra_package [-m] <subpackage> <pretty-name> -# -%define kernel_modules_extra_package(m) \ -%package %{?1:%{1}-}modules-extra\ -Summary: Extra kernel modules to match the %{?2:%{2} }kernel\ -Provides: kernel%{?1:-%{1}}-modules-extra-%{_target_cpu} = %{version}-%{release}\ -Provides: kernel%{?1:-%{1}}-modules-extra-%{_target_cpu} = %{version}-%{release}%{?1:+%{1}}\ -Provides: kernel%{?1:-%{1}}-modules-extra = %{version}-%{release}%{?1:+%{1}}\ -Provides: installonlypkg(kernel-module)\ -Provides: kernel%{?1:-%{1}}-modules-extra-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel%{?1:-%{1}}-modules-uname-r = %{KVERREL}%{?1:+%{1}}\ -%if %{-m:1}%{!-m:0}\ -Requires: kernel-modules-extra-uname-r = %{KVERREL}\ -%endif\ -AutoReq: no\ -AutoProv: yes\ -%description %{?1:%{1}-}modules-extra\ -This package provides less commonly used kernel modules for the %{?2:%{2} }kernel package.\ -%{nil} - -# -# This macro creates a kernel-<subpackage>-modules package. -# %%kernel_modules_package [-m] <subpackage> <pretty-name> -# -%define kernel_modules_package(m) \ -%package %{?1:%{1}-}modules\ -Summary: kernel modules to match the %{?2:%{2}-}core kernel\ -Provides: kernel%{?1:-%{1}}-modules-%{_target_cpu} = %{version}-%{release}\ -Provides: kernel-modules-%{_target_cpu} = %{version}-%{release}%{?1:+%{1}}\ -Provides: kernel-modules = %{version}-%{release}%{?1:+%{1}}\ -Provides: installonlypkg(kernel-module)\ -Provides: kernel%{?1:-%{1}}-modules-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel-uname-r = %{KVERREL}%{?1:+%{1}}\ -%if %{-m:1}%{!-m:0}\ -Requires: kernel-modules-uname-r = %{KVERREL}\ -%endif\ -AutoReq: no\ -AutoProv: yes\ -%description %{?1:%{1}-}modules\ -This package provides commonly used kernel modules for the %{?2:%{2}-}core kernel package.\ -%{nil} - -# -# this macro creates a kernel-<subpackage> meta package. -# %%kernel_meta_package <subpackage> -# -%define kernel_meta_package() \ -%package %{1}\ -summary: kernel meta-package for the %{1} kernel\ -Requires: kernel-%{1}-core-uname-r = %{KVERREL}+%{1}\ -Requires: kernel-%{1}-modules-uname-r = %{KVERREL}+%{1}\ -Provides: installonlypkg(kernel)\ -%description %{1}\ -The meta-package for the %{1} kernel\ -%{nil} - -# -# This macro creates a kernel-<subpackage> and its -devel and -debuginfo too. -# %%define variant_summary The Linux kernel compiled for <configuration> -# %%kernel_variant_package [-n <pretty-name>] [-m] <subpackage> -# -%define kernel_variant_package(n:m) \ -%package %{?1:%{1}-}core\ -Summary: %{variant_summary}\ -Provides: kernel-%{?1:%{1}-}core-uname-r = %{KVERREL}%{?1:+%{1}}\ -Provides: installonlypkg(kernel)\ -%if %{-m:1}%{!-m:0}\ -Requires: kernel-core-uname-r = %{KVERREL}\ -%endif\ -%{expand:%%kernel_reqprovconf}\ -%if %{?1:1} %{!?1:0} \ -%{expand:%%kernel_meta_package %{?1:%{1}}}\ -%endif\ -%{expand:%%kernel_devel_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}} %{-m:%{-m}}}\ -%{expand:%%kernel_devel_matched_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}} %{-m:%{-m}}}\ -%{expand:%%kernel_modules_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}} %{-m:%{-m}}}\ -%{expand:%%kernel_modules_extra_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}} %{-m:%{-m}}}\ -%if %{-m:0}%{!-m:1}\ -%{expand:%%kernel_modules_internal_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}}}\ -%{expand:%%kernel_debuginfo_package %{?1:%{1}}}\ -%endif\ -%{nil} - -# Now, each variant package. - -%if %{with_pae} -%define variant_summary The Linux kernel compiled for Cortex-A15 -%kernel_variant_package lpae -%description lpae-core -This package includes a version of the Linux kernel with support for -Cortex-A15 devices with LPAE and HW virtualisation support -%endif - -%if %{with_zfcpdump} -%define variant_summary The Linux kernel compiled for zfcpdump usage -%kernel_variant_package zfcpdump -%description zfcpdump-core -The kernel package contains the Linux kernel (vmlinuz) for use by the -zfcpdump infrastructure. -# with_zfcpdump -%endif - -%define variant_summary The Linux kernel compiled with extra debugging enabled -%if !%{debugbuildsenabled} -%kernel_variant_package -m debug -%else -%kernel_variant_package debug -%endif -%description debug-core -The kernel package contains the Linux kernel (vmlinuz), the core of any -Linux operating system. The kernel handles the basic functions -of the operating system: memory allocation, process allocation, device -input and output, etc. - -This variant of the kernel has numerous debugging options enabled. -It should only be installed when trying to gather additional information -on kernel bugs, as some of these options impact performance noticably. - -# And finally the main -core package - -%define variant_summary The Linux kernel -%kernel_variant_package -%description core -The kernel package contains the Linux kernel (vmlinuz), the core of any -Linux operating system. The kernel handles the basic functions -of the operating system: memory allocation, process allocation, device -input and output, etc. - -%if %{with_ipaclones} -%kernel_ipaclones_package -%endif - -%prep -# do a few sanity-checks for --with *only builds -%if %{with_baseonly} -%if !%{with_up} -echo "Cannot build --with baseonly, up build is disabled" -exit 1 -%endif -%endif - -# more sanity checking; do it quietly -if [ "%{patches}" != "%%{patches}" ] ; then - for patch in %{patches} ; do - if [ ! -f $patch ] ; then - echo "ERROR: Patch ${patch##/*/} listed in specfile but is missing" - exit 1 - fi - done -fi 2>/dev/null - -patch_command='patch -p1 -F1 -s' -ApplyPatch() -{ - local patch=$1 - shift - if [ ! -f $RPM_SOURCE_DIR/$patch ]; then - exit 1 - fi - if ! grep -E "^Patch[0-9]+: $patch\$" %{_specdir}/${RPM_PACKAGE_NAME}.spec ; then - if [ "${patch:0:8}" != "patch-%{kversion}." ] ; then - echo "ERROR: Patch $patch not listed as a source patch in specfile" - exit 1 - fi - fi 2>/dev/null - case "$patch" in - *.bz2) bunzip2 < "$RPM_SOURCE_DIR/$patch" | $patch_command ${1+"$@"} ;; - *.gz) gunzip < "$RPM_SOURCE_DIR/$patch" | $patch_command ${1+"$@"} ;; - *.xz) unxz < "$RPM_SOURCE_DIR/$patch" | $patch_command ${1+"$@"} ;; - *) $patch_command ${1+"$@"} < "$RPM_SOURCE_DIR/$patch" ;; - esac -} - -# don't apply patch if it's empty -ApplyOptionalPatch() -{ - local patch=$1 - shift - if [ ! -f $RPM_SOURCE_DIR/$patch ]; then - exit 1 - fi - local C=$(wc -l $RPM_SOURCE_DIR/$patch | awk '{print $1}') - if [ "$C" -gt 9 ]; then - ApplyPatch $patch ${1+"$@"} - fi -} - -%setup -q -n kernel-%{tarfile_release} -c -mv linux-%{tarfile_release} linux-%{KVERREL} - -cd linux-%{KVERREL} -cp -a %{SOURCE1} . - -%if !%{nopatches} - -ApplyOptionalPatch patch-%{patchversion}-redhat.patch -%endif - -ApplyOptionalPatch linux-kernel-test.patch - -# END OF PATCH APPLICATIONS - -# Any further pre-build tree manipulations happen here. - -chmod +x scripts/checkpatch.pl -mv COPYING COPYING-%{version}-%{release} - -# This Prevents scripts/setlocalversion from mucking with our version numbers. -touch .scmversion - -# Mangle /usr/bin/python shebangs to /usr/bin/python3 -# Mangle all Python shebangs to be Python 3 explicitly -# -p preserves timestamps -# -n prevents creating ~backup files -# -i specifies the interpreter for the shebang -# This fixes errors such as -# *** ERROR: ambiguous python shebang in /usr/bin/kvm_stat: #!/usr/bin/python. Change it to python3 (or python2) explicitly. -# We patch all sources below for which we got a report/error. -pathfix.py -i "%{__python3} %{py3_shbang_opts}" -p -n \ - tools/kvm/kvm_stat/kvm_stat \ - scripts/show_delta \ - scripts/diffconfig \ - scripts/bloat-o-meter \ - scripts/jobserver-exec \ - tools \ - Documentation \ - scripts/clang-tools - -# only deal with configs if we are going to build for the arch -%ifnarch %nobuildarches - -if [ -L configs ]; then - rm -f configs -fi -mkdir configs -cd configs - -# Drop some necessary files from the source dir into the buildroot -cp $RPM_SOURCE_DIR/kernel-*.config . -cp %{SOURCE80} . -# merge.pl -cp %{SOURCE3000} . -# kernel-local -cp %{SOURCE3001} . -FLAVOR=%{primary_target} SPECVERSION=%{version} ./generate_all_configs.sh %{debugbuildsenabled} - -# Merge in any user-provided local config option changes -%ifnarch %nobuildarches -for i in %{all_arch_configs} -do - mv $i $i.tmp - ./merge.pl %{SOURCE3001} $i.tmp > $i -%if %{with_gcov} - echo "Merging with gcov options" - cat %{SOURCE75} - mv $i $i.tmp - ./merge.pl %{SOURCE75} $i.tmp > $i -%endif - rm $i.tmp -done -%endif - -%if %{with clang_lto} -for i in *aarch64*.config *x86_64*.config; do - sed -i 's/# CONFIG_LTO_CLANG_THIN is not set/CONFIG_LTO_CLANG_THIN=y/' $i - sed -i 's/CONFIG_LTO_NONE=y/# CONFIG_LTO_NONE is not set/' $i -done -%endif - -# Add DUP and kpatch certificates to system trusted keys for RHEL -%if 0%{?rhel} -%if %{signkernel}%{signmodules} -openssl x509 -inform der -in %{SOURCE100} -out rheldup3.pem -openssl x509 -inform der -in %{SOURCE101} -out rhelkpatch1.pem -cat rheldup3.pem rhelkpatch1.pem > ../certs/rhel.pem -%ifarch s390x ppc64le -openssl x509 -inform der -in %{secureboot_ca_0} -out secureboot.pem -cat secureboot.pem >> ../certs/rhel.pem -%endif -for i in *.config; do - sed -i 's@CONFIG_SYSTEM_TRUSTED_KEYS=""@CONFIG_SYSTEM_TRUSTED_KEYS="certs/rhel.pem"@' $i -done -%endif -%endif - -cp %{SOURCE81} . -OPTS="" -%if %{with_configchecks} - OPTS="$OPTS -w -n -c" -%endif -%if %{with clang_lto} -for opt in %{clang_make_opts}; do - OPTS="$OPTS -m $opt" -done -%endif -RHJOBS=$RPM_BUILD_NCPUS PACKAGE_NAME=kernel ./process_configs.sh $OPTS ${specversion} - -cp %{SOURCE82} . -RPM_SOURCE_DIR=$RPM_SOURCE_DIR ./update_scripts.sh %{primary_target} - -# We may want to override files from the primary target in case of building -# against a flavour of it (eg. centos not rhel), thus override it here if -# necessary -if [ "%{primary_target}" == "rhel" ]; then -%if 0%{?centos} - echo "Updating scripts/sources to centos version" - RPM_SOURCE_DIR=$RPM_SOURCE_DIR ./update_scripts.sh centos -%else - echo "Not updating scripts/sources to centos version" -%endif -fi - -# end of kernel config -%endif - -cd .. -# # End of Configs stuff - -# get rid of unwanted files resulting from patch fuzz -find . \( -name "*.orig" -o -name "*~" \) -delete >/dev/null - -# remove unnecessary SCM files -find . -name .gitignore -delete >/dev/null - -cd .. - -### -### build -### -%build - -%if %{with_sparse} -%define sparse_mflags C=1 -%endif - -cp_vmlinux() -{ - eu-strip --remove-comment -o "$2" "$1" -} - -# Note we need to disable these flags for cross builds because the flags -# from redhat-rpm-config assume that host == target so target arch -# flags cause issues with the host compiler. -%if !%{with_cross} -%define build_hostcflags %{?build_cflags} -%define build_hostldflags %{?build_ldflags} -%endif - -%define make %{__make} %{?cross_opts} %{?make_opts} HOSTCFLAGS="%{?build_hostcflags}" HOSTLDFLAGS="%{?build_hostldflags}" - -InitBuildVars() { - # Initialize the kernel .config file and create some variables that are - # needed for the actual build process. - - Variant=$1 - - # Pick the right kernel config file - Config=kernel-%{version}-%{_target_cpu}${Variant:+-${Variant}}.config - DevelDir=/usr/src/kernels/%{KVERREL}${Variant:++${Variant}} - - KernelVer=%{version}-%{release}.%{_target_cpu}${Variant:++${Variant}} - - # make sure EXTRAVERSION says what we want it to say - # Trim the release if this is a CI build, since KERNELVERSION is limited to 64 characters - ShortRel=$(perl -e "print \"%{release}\" =~ s/\.pr\.[0-9A-Fa-f]{32}//r") - perl -p -i -e "s/^EXTRAVERSION.*/EXTRAVERSION = -${ShortRel}.%{_target_cpu}${Variant:++${Variant}}/" Makefile - - # if pre-rc1 devel kernel, must fix up PATCHLEVEL for our versioning scheme - # if we are post rc1 this should match anyway so this won't matter - perl -p -i -e 's/^PATCHLEVEL.*/PATCHLEVEL = %{patchlevel}/' Makefile - - %{make} %{?_smp_mflags} mrproper - cp configs/$Config .config - - %if %{signkernel}%{signmodules} - cp configs/x509.genkey certs/. - %endif - - Arch=`head -1 .config | cut -b 3-` - echo USING ARCH=$Arch - - KCFLAGS="%{?kcflags}" - - # add kpatch flags for base kernel - if [ "$Variant" == "" ]; then - KCFLAGS="$KCFLAGS %{?kpatch_kcflags}" - fi -} - -BuildKernel() { - MakeTarget=$1 - KernelImage=$2 - DoVDSO=$3 - Variant=$4 - InstallName=${5:-vmlinuz} - - DoModules=1 - if [ "$Variant" = "zfcpdump" ]; then - DoModules=0 - fi - - # When the bootable image is just the ELF kernel, strip it. - # We already copy the unstripped file into the debuginfo package. - if [ "$KernelImage" = vmlinux ]; then - CopyKernel=cp_vmlinux - else - CopyKernel=cp - fi - - InitBuildVars $Variant - - echo BUILDING A KERNEL FOR ${Variant} %{_target_cpu}... - - %{make} ARCH=$Arch olddefconfig >/dev/null - - # This ensures build-ids are unique to allow parallel debuginfo - perl -p -i -e "s/^CONFIG_BUILD_SALT.*/CONFIG_BUILD_SALT=\"%{KVERREL}\"/" .config - %{make} ARCH=$Arch KCFLAGS="$KCFLAGS" WITH_GCOV="%{?with_gcov}" %{?_smp_mflags} $MakeTarget %{?sparse_mflags} %{?kernel_mflags} - if [ $DoModules -eq 1 ]; then - %{make} ARCH=$Arch KCFLAGS="$KCFLAGS" WITH_GCOV="%{?with_gcov}" %{?_smp_mflags} modules %{?sparse_mflags} || exit 1 - fi - - mkdir -p $RPM_BUILD_ROOT/%{image_install_path} - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/systemtap -%if %{with_debuginfo} - mkdir -p $RPM_BUILD_ROOT%{debuginfodir}/%{image_install_path} -%endif - -%ifarch %{arm} aarch64 - %{make} ARCH=$Arch dtbs INSTALL_DTBS_PATH=$RPM_BUILD_ROOT/%{image_install_path}/dtb-$KernelVer - %{make} ARCH=$Arch dtbs_install INSTALL_DTBS_PATH=$RPM_BUILD_ROOT/%{image_install_path}/dtb-$KernelVer - cp -r $RPM_BUILD_ROOT/%{image_install_path}/dtb-$KernelVer $RPM_BUILD_ROOT/lib/modules/$KernelVer/dtb - find arch/$Arch/boot/dts -name '*.dtb' -type f -delete -%endif - - # Start installing the results - install -m 644 .config $RPM_BUILD_ROOT/boot/config-$KernelVer - install -m 644 .config $RPM_BUILD_ROOT/lib/modules/$KernelVer/config - install -m 644 System.map $RPM_BUILD_ROOT/boot/System.map-$KernelVer - install -m 644 System.map $RPM_BUILD_ROOT/lib/modules/$KernelVer/System.map - - # We estimate the size of the initramfs because rpm needs to take this size - # into consideration when performing disk space calculations. (See bz #530778) - dd if=/dev/zero of=$RPM_BUILD_ROOT/boot/initramfs-$KernelVer.img bs=1M count=20 - - if [ -f arch/$Arch/boot/zImage.stub ]; then - cp arch/$Arch/boot/zImage.stub $RPM_BUILD_ROOT/%{image_install_path}/zImage.stub-$KernelVer || : - cp arch/$Arch/boot/zImage.stub $RPM_BUILD_ROOT/lib/modules/$KernelVer/zImage.stub-$KernelVer || : - fi - - %if %{signkernel} - if [ "$KernelImage" = vmlinux ]; then - # We can't strip and sign $KernelImage in place, because - # we need to preserve original vmlinux for debuginfo. - # Use a copy for signing. - $CopyKernel $KernelImage $KernelImage.tosign - KernelImage=$KernelImage.tosign - CopyKernel=cp - fi - - # Sign the image if we're using EFI - # aarch64 kernels are gziped EFI images - KernelExtension=${KernelImage##*.} - if [ "$KernelExtension" == "gz" ]; then - SignImage=${KernelImage%.*} - else - SignImage=$KernelImage - fi - - %ifarch x86_64 aarch64 - %pesign -s -i $SignImage -o vmlinuz.tmp -a %{secureboot_ca_0} -c %{secureboot_key_0} -n %{pesign_name_0} - %pesign -s -i vmlinuz.tmp -o vmlinuz.signed -a %{secureboot_ca_1} -c %{secureboot_key_1} -n %{pesign_name_1} - rm vmlinuz.tmp - %endif - %ifarch s390x ppc64le - if [ -x /usr/bin/rpm-sign ]; then - rpm-sign --key "%{pesign_name_0}" --lkmsign $SignImage --output vmlinuz.signed - elif [ $DoModules -eq 1 ]; then - chmod +x scripts/sign-file - ./scripts/sign-file -p sha256 certs/signing_key.pem certs/signing_key.x509 $SignImage vmlinuz.signed - else - mv $SignImage vmlinuz.signed - fi - %endif - - if [ ! -s vmlinuz.signed ]; then - echo "pesigning failed" - exit 1 - fi - mv vmlinuz.signed $SignImage - if [ "$KernelExtension" == "gz" ]; then - gzip -f9 $SignImage - fi - # signkernel - %endif - - $CopyKernel $KernelImage \ - $RPM_BUILD_ROOT/%{image_install_path}/$InstallName-$KernelVer - chmod 755 $RPM_BUILD_ROOT/%{image_install_path}/$InstallName-$KernelVer - cp $RPM_BUILD_ROOT/%{image_install_path}/$InstallName-$KernelVer $RPM_BUILD_ROOT/lib/modules/$KernelVer/$InstallName - - # hmac sign the kernel for FIPS - echo "Creating hmac file: $RPM_BUILD_ROOT/%{image_install_path}/.vmlinuz-$KernelVer.hmac" - ls -l $RPM_BUILD_ROOT/%{image_install_path}/$InstallName-$KernelVer - (cd $RPM_BUILD_ROOT/%{image_install_path} && sha512hmac $InstallName-$KernelVer) > $RPM_BUILD_ROOT/%{image_install_path}/.vmlinuz-$KernelVer.hmac; - cp $RPM_BUILD_ROOT/%{image_install_path}/.vmlinuz-$KernelVer.hmac $RPM_BUILD_ROOT/lib/modules/$KernelVer/.vmlinuz.hmac - - if [ $DoModules -eq 1 ]; then - # Override $(mod-fw) because we don't want it to install any firmware - # we'll get it from the linux-firmware package and we don't want conflicts - %{make} %{?_smp_mflags} ARCH=$Arch INSTALL_MOD_PATH=$RPM_BUILD_ROOT %{?_smp_mflags} modules_install KERNELRELEASE=$KernelVer mod-fw= - fi - -%if %{with_gcov} - # install gcov-needed files to $BUILDROOT/$BUILD/...: - # gcov_info->filename is absolute path - # gcno references to sources can use absolute paths (e.g. in out-of-tree builds) - # sysfs symlink targets (set up at compile time) use absolute paths to BUILD dir - find . \( -name '*.gcno' -o -name '*.[chS]' \) -exec install -D '{}' "$RPM_BUILD_ROOT/$(pwd)/{}" \; -%endif - - # add an a noop %%defattr statement 'cause rpm doesn't like empty file list files - echo '%%defattr(-,-,-)' > ../kernel${Variant:+-${Variant}}-ldsoconf.list - if [ $DoVDSO -ne 0 ]; then - %{make} ARCH=$Arch INSTALL_MOD_PATH=$RPM_BUILD_ROOT vdso_install KERNELRELEASE=$KernelVer - if [ -s ldconfig-kernel.conf ]; then - install -D -m 444 ldconfig-kernel.conf \ - $RPM_BUILD_ROOT/etc/ld.so.conf.d/kernel-$KernelVer.conf - echo /etc/ld.so.conf.d/kernel-$KernelVer.conf >> ../kernel${Variant:+-${Variant}}-ldsoconf.list - fi - - rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/vdso/.build-id - fi - - # And save the headers/makefiles etc for building modules against - # - # This all looks scary, but the end result is supposed to be: - # * all arch relevant include/ files - # * all Makefile/Kconfig files - # * all script/ files - - rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/source - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - (cd $RPM_BUILD_ROOT/lib/modules/$KernelVer ; ln -s build source) - # dirs for additional modules per module-init-tools, kbuild/modules.txt - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/updates - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/weak-updates - # CONFIG_KERNEL_HEADER_TEST generates some extra files in the process of - # testing so just delete - find . -name *.h.s -delete - # first copy everything - cp --parents `find -type f -name "Makefile*" -o -name "Kconfig*"` $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - if [ ! -e Module.symvers ]; then - touch Module.symvers - fi - cp Module.symvers $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp System.map $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - if [ -s Module.markers ]; then - cp Module.markers $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - fi - - # create the kABI metadata for use in packaging - # NOTENOTE: the name symvers is used by the rpm backend - # NOTENOTE: to discover and run the /usr/lib/rpm/fileattrs/kabi.attr - # NOTENOTE: script which dynamically adds exported kernel symbol - # NOTENOTE: checksums to the rpm metadata provides list. - # NOTENOTE: if you change the symvers name, update the backend too - echo "**** GENERATING kernel ABI metadata ****" - gzip -c9 < Module.symvers > $RPM_BUILD_ROOT/boot/symvers-$KernelVer.gz - cp $RPM_BUILD_ROOT/boot/symvers-$KernelVer.gz $RPM_BUILD_ROOT/lib/modules/$KernelVer/symvers.gz - -%if %{with_kabichk} - echo "**** kABI checking is enabled in kernel SPEC file. ****" - chmod 0755 $RPM_SOURCE_DIR/check-kabi - if [ -e $RPM_SOURCE_DIR/Module.kabi_%{_target_cpu}$Variant ]; then - cp $RPM_SOURCE_DIR/Module.kabi_%{_target_cpu}$Variant $RPM_BUILD_ROOT/Module.kabi - $RPM_SOURCE_DIR/check-kabi -k $RPM_BUILD_ROOT/Module.kabi -s Module.symvers || exit 1 - # for now, don't keep it around. - rm $RPM_BUILD_ROOT/Module.kabi - else - echo "**** NOTE: Cannot find reference Module.kabi file. ****" - fi -%endif - -%if %{with_kabidupchk} - echo "**** kABI DUP checking is enabled in kernel SPEC file. ****" - if [ -e $RPM_SOURCE_DIR/Module.kabi_dup_%{_target_cpu}$Variant ]; then - cp $RPM_SOURCE_DIR/Module.kabi_dup_%{_target_cpu}$Variant $RPM_BUILD_ROOT/Module.kabi - $RPM_SOURCE_DIR/check-kabi -k $RPM_BUILD_ROOT/Module.kabi -s Module.symvers || exit 1 - # for now, don't keep it around. - rm $RPM_BUILD_ROOT/Module.kabi - else - echo "**** NOTE: Cannot find DUP reference Module.kabi file. ****" - fi -%endif - -%if %{with_kabidw_base} - # Don't build kabi base for debug kernels - if [ "$Variant" != "zfcpdump" -a "$Variant" != "debug" ]; then - mkdir -p $RPM_BUILD_ROOT/kabi-dwarf - tar xjvf %{SOURCE301} -C $RPM_BUILD_ROOT/kabi-dwarf - - mkdir -p $RPM_BUILD_ROOT/kabi-dwarf/stablelists - tar xjvf %{SOURCE300} -C $RPM_BUILD_ROOT/kabi-dwarf/stablelists - - echo "**** GENERATING DWARF-based kABI baseline dataset ****" - chmod 0755 $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh - $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh generate \ - "$RPM_BUILD_ROOT/kabi-dwarf/stablelists/kabi-current/kabi_stablelist_%{_target_cpu}" \ - "$(pwd)" \ - "$RPM_BUILD_ROOT/kabidw-base/%{_target_cpu}${Variant:+.${Variant}}" || : - - rm -rf $RPM_BUILD_ROOT/kabi-dwarf - fi -%endif - -%if %{with_kabidwchk} - if [ "$Variant" != "zfcpdump" ]; then - mkdir -p $RPM_BUILD_ROOT/kabi-dwarf - tar xjvf %{SOURCE301} -C $RPM_BUILD_ROOT/kabi-dwarf - if [ -d "$RPM_BUILD_ROOT/kabi-dwarf/base/%{_target_cpu}${Variant:+.${Variant}}" ]; then - mkdir -p $RPM_BUILD_ROOT/kabi-dwarf/stablelists - tar xjvf %{SOURCE300} -C $RPM_BUILD_ROOT/kabi-dwarf/stablelists - - echo "**** GENERATING DWARF-based kABI dataset ****" - chmod 0755 $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh - $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh generate \ - "$RPM_BUILD_ROOT/kabi-dwarf/stablelists/kabi-current/kabi_stablelist_%{_target_cpu}" \ - "$(pwd)" \ - "$RPM_BUILD_ROOT/kabi-dwarf/base/%{_target_cpu}${Variant:+.${Variant}}.tmp" || : - - echo "**** kABI DWARF-based comparison report ****" - $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh compare \ - "$RPM_BUILD_ROOT/kabi-dwarf/base/%{_target_cpu}${Variant:+.${Variant}}" \ - "$RPM_BUILD_ROOT/kabi-dwarf/base/%{_target_cpu}${Variant:+.${Variant}}.tmp" || : - echo "**** End of kABI DWARF-based comparison report ****" - else - echo "**** Baseline dataset for kABI DWARF-BASED comparison report not found ****" - fi - - rm -rf $RPM_BUILD_ROOT/kabi-dwarf - fi -%endif - - # then drop all but the needed Makefiles/Kconfig files - rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts - rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include - cp .config $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a scripts $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts/tracing - rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts/spdxcheck.py - -%ifarch s390x - # CONFIG_EXPOLINE_EXTERN=y produces arch/s390/lib/expoline.o - # which is needed during external module build. - if [ -f arch/s390/lib/expoline.o ]; then - cp -a --parents arch/s390/lib/expoline.o $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - fi -%endif - - # Files for 'make scripts' to succeed with kernel-devel. - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/security/selinux/include - cp -a --parents security/selinux/include/classmap.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents security/selinux/include/initial_sid_to_string.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/tools/include/tools - cp -a --parents tools/include/tools/be_byteshift.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/tools/le_byteshift.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - - # Files for 'make prepare' to succeed with kernel-devel. - cp -a --parents tools/include/linux/compiler* $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/linux/types.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/build/Build.include $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/build/Build $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/build/fixdep.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/objtool/sync-check.sh $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/bpf/resolve_btfids $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - - cp --parents security/selinux/include/policycap_names.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents security/selinux/include/policycap.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - - cp -a --parents tools/include/asm-generic $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/linux $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/uapi/asm $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/uapi/asm-generic $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/uapi/linux $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/vdso $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/scripts/utilities.mak $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/lib/subcmd $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/lib/*.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/objtool/*.[ch] $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/objtool/Build $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/objtool/include/objtool/*.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/lib/bpf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/lib/bpf/Build $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - - if [ -f tools/objtool/objtool ]; then - cp -a tools/objtool/objtool $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/tools/objtool/ || : - fi - if [ -f tools/objtool/fixdep ]; then - cp -a tools/objtool/fixdep $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/tools/objtool/ || : - fi - if [ -d arch/$Arch/scripts ]; then - cp -a arch/$Arch/scripts $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/arch/%{_arch} || : - fi - if [ -f arch/$Arch/*lds ]; then - cp -a arch/$Arch/*lds $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/arch/%{_arch}/ || : - fi - if [ -f arch/%{asmarch}/kernel/module.lds ]; then - cp -a --parents arch/%{asmarch}/kernel/module.lds $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - fi - find $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts \( -iname "*.o" -o -iname "*.cmd" \) -exec rm -f {} + -%ifarch ppc64le - cp -a --parents arch/powerpc/lib/crtsavres.[So] $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ -%endif - if [ -d arch/%{asmarch}/include ]; then - cp -a --parents arch/%{asmarch}/include $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - fi -%ifarch aarch64 - # arch/arm64/include/asm/xen references arch/arm - cp -a --parents arch/arm/include/asm/xen $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - # arch/arm64/include/asm/opcodes.h references arch/arm - cp -a --parents arch/arm/include/asm/opcodes.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ -%endif - # include the machine specific headers for ARM variants, if available. -%ifarch %{arm} - if [ -d arch/%{asmarch}/mach-${Variant}/include ]; then - cp -a --parents arch/%{asmarch}/mach-${Variant}/include $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - fi - # include a few files for 'make prepare' - cp -a --parents arch/arm/tools/gen-mach-types $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/arm/tools/mach-types $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - -%endif - cp -a include $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include -%ifarch i686 x86_64 - # files for 'make prepare' to succeed with kernel-devel - cp -a --parents arch/x86/entry/syscalls/syscall_32.tbl $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/entry/syscalls/syscall_64.tbl $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs_32.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs_64.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs_common.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/purgatory/purgatory.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/purgatory/stack.S $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/purgatory/setup-x86_64.S $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/purgatory/entry64.S $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/boot/string.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/boot/string.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/boot/ctype.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - - cp -a --parents scripts/syscalltbl.sh $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents scripts/syscallhdr.sh $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - - cp -a --parents tools/arch/x86/include/asm $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/arch/x86/include/uapi/asm $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/objtool/arch/x86/lib $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/arch/x86/lib/ $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/arch/x86/tools/gen-insn-attr-x86.awk $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/objtool/arch/x86/ $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - -%endif - # Clean up intermediate tools files - find $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/tools \( -iname "*.o" -o -iname "*.cmd" \) -exec rm -f {} + - - # Make sure the Makefile, version.h, and auto.conf have a matching - # timestamp so that external modules can be built - touch -r $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/Makefile \ - $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include/generated/uapi/linux/version.h \ - $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include/config/auto.conf - -%if %{with_debuginfo} - eu-readelf -n vmlinux | grep "Build ID" | awk '{print $NF}' > vmlinux.id - cp vmlinux.id $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/vmlinux.id - - # - # save the vmlinux file for kernel debugging into the kernel-debuginfo rpm - # - mkdir -p $RPM_BUILD_ROOT%{debuginfodir}/lib/modules/$KernelVer - cp vmlinux $RPM_BUILD_ROOT%{debuginfodir}/lib/modules/$KernelVer - if [ -n "%{vmlinux_decompressor}" ]; then - eu-readelf -n %{vmlinux_decompressor} | grep "Build ID" | awk '{print $NF}' > vmlinux.decompressor.id - # Without build-id the build will fail. But for s390 the build-id - # wasn't added before 5.11. In case it is missing prefer not - # packaging the debuginfo over a build failure. - if [ -s vmlinux.decompressor.id ]; then - cp vmlinux.decompressor.id $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/vmlinux.decompressor.id - cp %{vmlinux_decompressor} $RPM_BUILD_ROOT%{debuginfodir}/lib/modules/$KernelVer/vmlinux.decompressor - fi - fi -%endif - - find $RPM_BUILD_ROOT/lib/modules/$KernelVer -name "*.ko" -type f >modnames - - # mark modules executable so that strip-to-file can strip them - xargs --no-run-if-empty chmod u+x < modnames - - # Generate a list of modules for block and networking. - - grep -F /drivers/ modnames | xargs --no-run-if-empty nm -upA | - sed -n 's,^.*/\([^/]*\.ko\): *U \(.*\)$,\1 \2,p' > drivers.undef - - collect_modules_list() - { - sed -r -n -e "s/^([^ ]+) \\.?($2)\$/\\1/p" drivers.undef | - LC_ALL=C sort -u > $RPM_BUILD_ROOT/lib/modules/$KernelVer/modules.$1 - if [ ! -z "$3" ]; then - sed -r -e "/^($3)\$/d" -i $RPM_BUILD_ROOT/lib/modules/$KernelVer/modules.$1 - fi - } - - collect_modules_list networking \ - 'register_netdev|ieee80211_register_hw|usbnet_probe|phy_driver_register|rt(l_|2x00)(pci|usb)_probe|register_netdevice' - collect_modules_list block \ - 'ata_scsi_ioctl|scsi_add_host|scsi_add_host_with_dma|blk_alloc_queue|blk_init_queue|register_mtd_blktrans|scsi_esp_register|scsi_register_device_handler|blk_queue_physical_block_size' 'pktcdvd.ko|dm-mod.ko' - collect_modules_list drm \ - 'drm_open|drm_init' - collect_modules_list modesetting \ - 'drm_crtc_init' - - # detect missing or incorrect license tags - ( find $RPM_BUILD_ROOT/lib/modules/$KernelVer -name '*.ko' | xargs /sbin/modinfo -l | \ - grep -E -v 'GPL( v2)?$|Dual BSD/GPL$|Dual MPL/GPL$|GPL and additional rights$' ) && exit 1 - - remove_depmod_files() - { - # remove files that will be auto generated by depmod at rpm -i time - pushd $RPM_BUILD_ROOT/lib/modules/$KernelVer/ - rm -f modules.{alias,alias.bin,builtin.alias.bin,builtin.bin} \ - modules.{dep,dep.bin,devname,softdep,symbols,symbols.bin} - popd - } - - remove_depmod_files - - # Identify modules in the kernel-modules-extras package - %{SOURCE20} $RPM_BUILD_ROOT lib/modules/$KernelVer $(realpath configs/mod-extra.list) - # Identify modules in the kernel-modules-extras package - %{SOURCE20} $RPM_BUILD_ROOT lib/modules/$KernelVer %{SOURCE84} internal - - # - # Generate the kernel-core and kernel-modules files lists - # - - # Copy the System.map file for depmod to use, and create a backup of the - # full module tree so we can restore it after we're done filtering - cp System.map $RPM_BUILD_ROOT/. - cp configs/filter-*.sh $RPM_BUILD_ROOT/. - pushd $RPM_BUILD_ROOT - mkdir restore - cp -r lib/modules/$KernelVer/* restore/. - - # don't include anything going into kernel-modules-extra in the file lists - xargs rm -rf < mod-extra.list - # don't include anything going int kernel-modules-internal in the file lists - xargs rm -rf < mod-internal.list - - if [ $DoModules -eq 1 ]; then - # Find all the module files and filter them out into the core and - # modules lists. This actually removes anything going into -modules - # from the dir. - find lib/modules/$KernelVer/kernel -name *.ko | sort -n > modules.list - ./filter-modules.sh modules.list %{_target_cpu} - rm filter-*.sh - - # Run depmod on the resulting module tree and make sure it isn't broken - depmod -b . -aeF ./System.map $KernelVer &> depmod.out - if [ -s depmod.out ]; then - echo "Depmod failure" - cat depmod.out - exit 1 - else - rm depmod.out - fi - else - # Ensure important files/directories exist to let the packaging succeed - echo '%%defattr(-,-,-)' > modules.list - echo '%%defattr(-,-,-)' > k-d.list - mkdir -p lib/modules/$KernelVer/kernel - # Add files usually created by make modules, needed to prevent errors - # thrown by depmod during package installation - touch lib/modules/$KernelVer/modules.order - touch lib/modules/$KernelVer/modules.builtin - fi - - remove_depmod_files - - # Go back and find all of the various directories in the tree. We use this - # for the dir lists in kernel-core - find lib/modules/$KernelVer/kernel -mindepth 1 -type d | sort -n > module-dirs.list - - # Cleanup - rm System.map - # Just "cp -r" can be very slow: here, it rewrites _existing files_ - # with open(O_TRUNC). Many filesystems synchronously wait for metadata - # update for such file rewrites (seen in strace as final close syscall - # taking a long time). On a rotational disk, cp was observed to take - # more than 5 minutes on ext4 and more than 15 minutes (!) on xfs. - # With --remove-destination, we avoid this, and copying - # (with enough RAM to cache it) takes 5 seconds: - cp -r --remove-destination restore/* lib/modules/$KernelVer/. - rm -rf restore - popd - - # Make sure the files lists start with absolute paths or rpmbuild fails. - # Also add in the dir entries - sed -e 's/^lib*/\/lib/' %{?zipsed} $RPM_BUILD_ROOT/k-d.list > ../kernel${Variant:+-${Variant}}-modules.list - sed -e 's/^lib*/%dir \/lib/' %{?zipsed} $RPM_BUILD_ROOT/module-dirs.list > ../kernel${Variant:+-${Variant}}-core.list - sed -e 's/^lib*/\/lib/' %{?zipsed} $RPM_BUILD_ROOT/modules.list >> ../kernel${Variant:+-${Variant}}-core.list - sed -e 's/^lib*/\/lib/' %{?zipsed} $RPM_BUILD_ROOT/mod-extra.list >> ../kernel${Variant:+-${Variant}}-modules-extra.list - sed -e 's/^lib*/\/lib/' %{?zipsed} $RPM_BUILD_ROOT/mod-internal.list >> ../kernel${Variant:+-${Variant}}-modules-internal.list - - # Cleanup - rm -f $RPM_BUILD_ROOT/k-d.list - rm -f $RPM_BUILD_ROOT/modules.list - rm -f $RPM_BUILD_ROOT/module-dirs.list - rm -f $RPM_BUILD_ROOT/mod-extra.list - rm -f $RPM_BUILD_ROOT/mod-internal.list - -%if %{signmodules} - if [ $DoModules -eq 1 ]; then - # Save the signing keys so we can sign the modules in __modsign_install_post - cp certs/signing_key.pem certs/signing_key.pem.sign${Variant:++${Variant}} - cp certs/signing_key.x509 certs/signing_key.x509.sign${Variant:++${Variant}} - fi -%endif - - # Move the devel headers out of the root file system - mkdir -p $RPM_BUILD_ROOT/usr/src/kernels - mv $RPM_BUILD_ROOT/lib/modules/$KernelVer/build $RPM_BUILD_ROOT/$DevelDir - - # This is going to create a broken link during the build, but we don't use - # it after this point. We need the link to actually point to something - # when kernel-devel is installed, and a relative link doesn't work across - # the F17 UsrMove feature. - ln -sf $DevelDir $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - -%ifnarch armv7hl - # Generate vmlinux.h and put it to kernel-devel path - bpftool btf dump file vmlinux format c > $RPM_BUILD_ROOT/$DevelDir/vmlinux.h -%endif - - # prune junk from kernel-devel - find $RPM_BUILD_ROOT/usr/src/kernels -name ".*.cmd" -delete - - # Red Hat UEFI Secure Boot CA cert, which can be used to authenticate the kernel - mkdir -p $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer - %ifarch x86_64 aarch64 - install -m 0644 %{secureboot_ca_0} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca-20200609.cer - install -m 0644 %{secureboot_ca_1} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca-20140212.cer - ln -s kernel-signing-ca-20200609.cer $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca.cer - %else - install -m 0644 %{secureboot_ca_0} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca.cer - %endif - %ifarch s390x ppc64le - if [ $DoModules -eq 1 ]; then - if [ -x /usr/bin/rpm-sign ]; then - install -m 0644 %{secureboot_key_0} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/%{signing_key_filename} - else - install -m 0644 certs/signing_key.x509.sign${Variant:++${Variant}} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca.cer - openssl x509 -in certs/signing_key.pem.sign${Variant:++${Variant}} -outform der -out $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/%{signing_key_filename} - chmod 0644 $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/%{signing_key_filename} - fi - fi - %endif - -%if %{with_ipaclones} - MAXPROCS=$(echo %{?_smp_mflags} | sed -n 's/-j\s*\([0-9]\+\)/\1/p') - if [ -z "$MAXPROCS" ]; then - MAXPROCS=1 - fi - if [ "$Variant" == "" ]; then - mkdir -p $RPM_BUILD_ROOT/$DevelDir-ipaclones - find . -name '*.ipa-clones' | xargs -i{} -r -n 1 -P $MAXPROCS install -m 644 -D "{}" "$RPM_BUILD_ROOT/$DevelDir-ipaclones/{}" - fi -%endif - -} - -### -# DO it... -### - -# prepare directories -rm -rf $RPM_BUILD_ROOT -mkdir -p $RPM_BUILD_ROOT/boot -mkdir -p $RPM_BUILD_ROOT%{_libexecdir} - -cd linux-%{KVERREL} - - -%if %{with_debug} -BuildKernel %make_target %kernel_image %{_use_vdso} debug -%endif - -%if %{with_zfcpdump} -BuildKernel %make_target %kernel_image %{_use_vdso} zfcpdump -%endif - -%if %{with_pae} -BuildKernel %make_target %kernel_image %{use_vdso} lpae -%endif - -%if %{with_up} -BuildKernel %make_target %kernel_image %{_use_vdso} -%endif - -%ifnarch noarch i686 -%if !%{with_debug} && !%{with_zfcpdump} && !%{with_pae} && !%{with_up} -# If only building the user space tools, then initialize the build environment -# and some variables so that the various userspace tools can be built. -InitBuildVars -%endif -%endif - -%ifarch aarch64 -%global perf_build_extra_opts CORESIGHT=1 -%endif -%global perf_make \ - %{__make} %{?make_opts} EXTRA_CFLAGS="${RPM_OPT_FLAGS}" LDFLAGS="%{__global_ldflags}" %{?cross_opts} -C tools/perf V=1 NO_PERF_READ_VDSO32=1 NO_PERF_READ_VDSOX32=1 WERROR=0 NO_LIBUNWIND=1 HAVE_CPLUS_DEMANGLE=1 NO_GTK2=1 NO_STRLCPY=1 NO_BIONIC=1 LIBBPF_DYNAMIC=1 LIBTRACEEVENT_DYNAMIC=1 %{?perf_build_extra_opts} prefix=%{_prefix} PYTHON=%{__python3} -%if %{with_perf} -# perf -# make sure check-headers.sh is executable -chmod +x tools/perf/check-headers.sh -%{perf_make} DESTDIR=$RPM_BUILD_ROOT all -%endif - -%global tools_make \ - CFLAGS="${RPM_OPT_FLAGS}" LDFLAGS="%{__global_ldflags}" %{make} %{?make_opts} - -%if %{with_tools} -%ifarch %{cpupowerarchs} -# cpupower -# make sure version-gen.sh is executable. -chmod +x tools/power/cpupower/utils/version-gen.sh -%{tools_make} %{?_smp_mflags} -C tools/power/cpupower CPUFREQ_BENCH=false DEBUG=false -%ifarch x86_64 - pushd tools/power/cpupower/debug/x86_64 - %{tools_make} %{?_smp_mflags} centrino-decode powernow-k8-decode - popd -%endif -%ifarch x86_64 - pushd tools/power/x86/x86_energy_perf_policy/ - %{tools_make} - popd - pushd tools/power/x86/turbostat - %{tools_make} - popd - pushd tools/power/x86/intel-speed-select - %{tools_make} - popd - pushd tools/arch/x86/intel_sdsi - %{tools_make} CFLAGS="${RPM_OPT_FLAGS}" - popd -%endif -%endif -pushd tools/thermal/tmon/ -%{tools_make} -popd -pushd tools/iio/ -%{tools_make} -popd -pushd tools/gpio/ -%{tools_make} -popd -# build VM tools -pushd tools/vm/ -%{tools_make} slabinfo page_owner_sort -popd -%endif - -if [ -f $DevelDir/vmlinux.h ]; then - RPM_VMLINUX_H=$DevelDir/vmlinux.h -fi - -%global bpftool_make \ - %{__make} EXTRA_CFLAGS="${RPM_OPT_FLAGS}" EXTRA_LDFLAGS="%{__global_ldflags}" DESTDIR=$RPM_BUILD_ROOT %{?make_opts} VMLINUX_H="${RPM_VMLINUX_H}" V=1 -%if %{with_bpftool} -pushd tools/bpf/bpftool -%{bpftool_make} -popd -%endif - -%if %{with_selftests} -# Unfortunately, samples/bpf/Makefile expects that the headers are installed -# in the source tree. We installed them previously to $RPM_BUILD_ROOT/usr -# but there's no way to tell the Makefile to take them from there. -%{make} %{?_smp_mflags} headers_install -%{make} %{?_smp_mflags} ARCH=$Arch V=1 M=samples/bpf/ || true - -# Prevent bpf selftests to build bpftool repeatedly: -export BPFTOOL=$(pwd)/tools/bpf/bpftool/bpftool - -pushd tools/testing/selftests -# We need to install here because we need to call make with ARCH set which -# doesn't seem possible to do in the install section. -%{make} %{?_smp_mflags} ARCH=$Arch V=1 TARGETS="bpf vm livepatch net net/forwarding net/mptcp netfilter tc-testing" SKIP_TARGETS="" INSTALL_PATH=%{buildroot}%{_libexecdir}/kselftests VMLINUX_H="${RPM_VMLINUX_H}" install - -# 'make install' for bpf is broken and upstream refuses to fix it. -# Install the needed files manually. -for dir in bpf bpf/no_alu32 bpf/progs; do - # In ARK, the rpm build continues even if some of the selftests - # cannot be built. It's not always possible to build selftests, - # as upstream sometimes dependens on too new llvm version or has - # other issues. If something did not get built, just skip it. - test -d $dir || continue - mkdir -p %{buildroot}%{_libexecdir}/kselftests/$dir - find $dir -maxdepth 1 -type f \( -executable -o -name '*.py' -o -name settings -o \ - -name 'btf_dump_test_case_*.c' -o -name '*.ko' -o \ - -name '*.o' -exec sh -c 'readelf -h "{}" | grep -q "^ Machine:.*BPF"' \; \) -print0 | \ - xargs -0 cp -t %{buildroot}%{_libexecdir}/kselftests/$dir || true -done -popd -export -n BPFTOOL -%endif - -%if %{with_doc} -# Make the HTML pages. -%{__make} PYTHON=/usr/bin/python3 htmldocs || %{doc_build_fail} - -# sometimes non-world-readable files sneak into the kernel source tree -chmod -R a=rX Documentation -find Documentation -type d | xargs chmod u+w -%endif - -# In the modsign case, we do 3 things. 1) We check the "variant" and hard -# code the value in the following invocations. This is somewhat sub-optimal -# but we're doing this inside of an RPM macro and it isn't as easy as it -# could be because of that. 2) We restore the .tmp_versions/ directory from -# the one we saved off in BuildKernel above. This is to make sure we're -# signing the modules we actually built/installed in that variant. 3) We -# grab the arch and invoke mod-sign.sh command to actually sign the modules. -# -# We have to do all of those things _after_ find-debuginfo runs, otherwise -# that will strip the signature off of the modules. -# -# Don't sign modules for the zfcpdump variant as it is monolithic. - -%define __modsign_install_post \ - if [ "%{signmodules}" -eq "1" ]; then \ - if [ "%{with_pae}" -ne "0" ]; then \ - %{modsign_cmd} certs/signing_key.pem.sign+lpae certs/signing_key.x509.sign+lpae $RPM_BUILD_ROOT/lib/modules/%{KVERREL}+lpae/ \ - fi \ - if [ "%{with_debug}" -ne "0" ]; then \ - %{modsign_cmd} certs/signing_key.pem.sign+debug certs/signing_key.x509.sign+debug $RPM_BUILD_ROOT/lib/modules/%{KVERREL}+debug/ \ - fi \ - if [ "%{with_up}" -ne "0" ]; then \ - %{modsign_cmd} certs/signing_key.pem.sign certs/signing_key.x509.sign $RPM_BUILD_ROOT/lib/modules/%{KVERREL}/ \ - fi \ - fi \ - if [ "%{zipmodules}" -eq "1" ]; then \ - find $RPM_BUILD_ROOT/lib/modules/ -type f -name '*.ko' | xargs -P${RPM_BUILD_NCPUS} -r xz; \ - fi \ -%{nil} - -### -### Special hacks for debuginfo subpackages. -### - -# This macro is used by %%install, so we must redefine it before that. -%define debug_package %{nil} - -%if %{with_debuginfo} - -%ifnarch noarch -%global __debug_package 1 -%files -f debugfiles.list debuginfo-common-%{_target_cpu} -%endif - -%endif - -# We don't want to package debuginfo for self-tests and samples but -# we have to delete them to avoid an error messages about unpackaged -# files. -# Delete the debuginfo for kernel-devel files -%define __remove_unwanted_dbginfo_install_post \ - if [ "%{with_selftests}" -ne "0" ]; then \ - rm -rf $RPM_BUILD_ROOT/usr/lib/debug/usr/libexec/ksamples; \ - rm -rf $RPM_BUILD_ROOT/usr/lib/debug/usr/libexec/kselftests; \ - fi \ - rm -rf $RPM_BUILD_ROOT/usr/lib/debug/usr/src; \ -%{nil} - -# -# Disgusting hack alert! We need to ensure we sign modules *after* all -# invocations of strip occur, which is in __debug_install_post if -# find-debuginfo.sh runs, and __os_install_post if not. -# -%define __spec_install_post \ - %{?__debug_package:%{__debug_install_post}}\ - %{__arch_install_post}\ - %{__os_install_post}\ - %{__remove_unwanted_dbginfo_install_post}\ - %{__modsign_install_post} - -### -### install -### - -%install - -cd linux-%{KVERREL} - -%if %{with_doc} -docdir=$RPM_BUILD_ROOT%{_datadir}/doc/kernel-doc-%{specversion}-%{pkgrelease} - -# copy the source over -mkdir -p $docdir -tar -h -f - --exclude=man --exclude='.*' -c Documentation | tar xf - -C $docdir - -# with_doc -%endif - -# We have to do the headers install before the tools install because the -# kernel headers_install will remove any header files in /usr/include that -# it doesn't install itself. - -%if %{with_headers} -# Install kernel headers -%{__make} ARCH=%{hdrarch} INSTALL_HDR_PATH=$RPM_BUILD_ROOT/usr headers_install - -find $RPM_BUILD_ROOT/usr/include \ - \( -name .install -o -name .check -o \ - -name ..install.cmd -o -name ..check.cmd \) -delete - -%endif - -%if %{with_cross_headers} -%if 0%{?fedora} -HDR_ARCH_LIST='arm arm64 powerpc s390 x86' -%else -HDR_ARCH_LIST='arm64 powerpc s390 x86' -%endif -mkdir -p $RPM_BUILD_ROOT/usr/tmp-headers - -for arch in $HDR_ARCH_LIST; do - mkdir $RPM_BUILD_ROOT/usr/tmp-headers/arch-${arch} - %{__make} ARCH=${arch} INSTALL_HDR_PATH=$RPM_BUILD_ROOT/usr/tmp-headers/arch-${arch} headers_install -done - -find $RPM_BUILD_ROOT/usr/tmp-headers \ - \( -name .install -o -name .check -o \ - -name ..install.cmd -o -name ..check.cmd \) -delete - -# Copy all the architectures we care about to their respective asm directories -for arch in $HDR_ARCH_LIST ; do - mkdir -p $RPM_BUILD_ROOT/usr/${arch}-linux-gnu/include - mv $RPM_BUILD_ROOT/usr/tmp-headers/arch-${arch}/include/* $RPM_BUILD_ROOT/usr/${arch}-linux-gnu/include/ -done - -rm -rf $RPM_BUILD_ROOT/usr/tmp-headers -%endif - -%if %{with_kernel_abi_stablelists} -# kabi directory -INSTALL_KABI_PATH=$RPM_BUILD_ROOT/lib/modules/ -mkdir -p $INSTALL_KABI_PATH - -# install kabi releases directories -tar xjvf %{SOURCE300} -C $INSTALL_KABI_PATH -# with_kernel_abi_stablelists -%endif - -%if %{with_perf} -# perf tool binary and supporting scripts/binaries -%{perf_make} DESTDIR=$RPM_BUILD_ROOT lib=%{_lib} install-bin -# remove the 'trace' symlink. -rm -f %{buildroot}%{_bindir}/trace - -# For both of the below, yes, this should be using a macro but right now -# it's hard coded and we don't actually want it anyway right now. -# Whoever wants examples can fix it up! - -# remove examples -rm -rf %{buildroot}/usr/lib/perf/examples -rm -rf %{buildroot}/usr/lib/perf/include - -# python-perf extension -%{perf_make} DESTDIR=$RPM_BUILD_ROOT install-python_ext - -# perf man pages (note: implicit rpm magic compresses them later) -mkdir -p %{buildroot}/%{_mandir}/man1 -%{perf_make} DESTDIR=$RPM_BUILD_ROOT install-man - -# remove any tracevent files, eg. its plugins still gets built and installed, -# even if we build against system's libtracevent during perf build (by setting -# LIBTRACEEVENT_DYNAMIC=1 above in perf_make macro). Those files should already -# ship with libtraceevent package. -rm -rf %{buildroot}%{_libdir}/traceevent -%endif - -%if %{with_tools} -%ifarch %{cpupowerarchs} -%{make} -C tools/power/cpupower DESTDIR=$RPM_BUILD_ROOT libdir=%{_libdir} mandir=%{_mandir} CPUFREQ_BENCH=false install -rm -f %{buildroot}%{_libdir}/*.{a,la} -%find_lang cpupower -mv cpupower.lang ../ -%ifarch x86_64 - pushd tools/power/cpupower/debug/x86_64 - install -m755 centrino-decode %{buildroot}%{_bindir}/centrino-decode - install -m755 powernow-k8-decode %{buildroot}%{_bindir}/powernow-k8-decode - popd -%endif -chmod 0755 %{buildroot}%{_libdir}/libcpupower.so* -mkdir -p %{buildroot}%{_unitdir} %{buildroot}%{_sysconfdir}/sysconfig -install -m644 %{SOURCE2000} %{buildroot}%{_unitdir}/cpupower.service -install -m644 %{SOURCE2001} %{buildroot}%{_sysconfdir}/sysconfig/cpupower -%endif -%ifarch x86_64 - mkdir -p %{buildroot}%{_mandir}/man8 - pushd tools/power/x86/x86_energy_perf_policy - %{tools_make} DESTDIR=%{buildroot} install - popd - pushd tools/power/x86/turbostat - %{tools_make} DESTDIR=%{buildroot} install - popd - pushd tools/power/x86/intel-speed-select - %{tools_make} DESTDIR=%{buildroot} install - popd - pushd tools/arch/x86/intel_sdsi - %{tools_make} CFLAGS="${RPM_OPT_FLAGS}" DESTDIR=%{buildroot} install - popd -%endif -pushd tools/thermal/tmon -%{tools_make} INSTALL_ROOT=%{buildroot} install -popd -pushd tools/iio -%{tools_make} DESTDIR=%{buildroot} install -popd -pushd tools/gpio -%{tools_make} DESTDIR=%{buildroot} install -popd -install -m644 -D %{SOURCE2002} %{buildroot}%{_sysconfdir}/logrotate.d/kvm_stat -pushd tools/kvm/kvm_stat -%{__make} INSTALL_ROOT=%{buildroot} install-tools -%{__make} INSTALL_ROOT=%{buildroot} install-man -install -m644 -D kvm_stat.service %{buildroot}%{_unitdir}/kvm_stat.service -popd -# install VM tools -pushd tools/vm/ -install -m755 slabinfo %{buildroot}%{_bindir}/slabinfo -install -m755 page_owner_sort %{buildroot}%{_bindir}/page_owner_sort -popd -%endif - -if [ -f $DevelDir/vmlinux.h ]; then - RPM_VMLINUX_H=$DevelDir/vmlinux.h -fi - -%if %{with_bpftool} -pushd tools/bpf/bpftool -%{bpftool_make} prefix=%{_prefix} bash_compdir=%{_sysconfdir}/bash_completion.d/ mandir=%{_mandir} install doc-install -popd -%endif - -%if %{with_selftests} -pushd samples -install -d %{buildroot}%{_libexecdir}/ksamples -# install bpf samples -pushd bpf -install -d %{buildroot}%{_libexecdir}/ksamples/bpf -find -type f -executable -exec install -m755 {} %{buildroot}%{_libexecdir}/ksamples/bpf \; -install -m755 *.sh %{buildroot}%{_libexecdir}/ksamples/bpf -# test_lwt_bpf.sh compiles test_lwt_bpf.c when run; this works only from the -# kernel tree. Just remove it. -rm %{buildroot}%{_libexecdir}/ksamples/bpf/test_lwt_bpf.sh -install -m644 *_kern.o %{buildroot}%{_libexecdir}/ksamples/bpf || true -install -m644 tcp_bpf.readme %{buildroot}%{_libexecdir}/ksamples/bpf -popd -# install pktgen samples -pushd pktgen -install -d %{buildroot}%{_libexecdir}/ksamples/pktgen -find . -type f -executable -exec install -m755 {} %{buildroot}%{_libexecdir}/ksamples/pktgen/{} \; -find . -type f ! -executable -exec install -m644 {} %{buildroot}%{_libexecdir}/ksamples/pktgen/{} \; -popd -popd -# install vm selftests -pushd tools/testing/selftests/vm -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/vm/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/vm/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/vm/{} \; -popd -# install drivers/net/mlxsw selftests -pushd tools/testing/selftests/drivers/net/mlxsw -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/drivers/net/mlxsw/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/drivers/net/mlxsw/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/drivers/net/mlxsw/{} \; -popd -# install drivers/net/netdevsim selftests -pushd tools/testing/selftests/drivers/net/netdevsim -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/drivers/net/netdevsim/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/drivers/net/netdevsim/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/drivers/net/netdevsim/{} \; -popd -# install net/forwarding selftests -pushd tools/testing/selftests/net/forwarding -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/net/forwarding/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/net/forwarding/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/net/forwarding/{} \; -popd -# install net/mptcp selftests -pushd tools/testing/selftests/net/mptcp -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/net/mptcp/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/net/mptcp/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/net/mptcp/{} \; -popd -# install tc-testing selftests -pushd tools/testing/selftests/tc-testing -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/tc-testing/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/tc-testing/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/tc-testing/{} \; -popd -# install livepatch selftests -pushd tools/testing/selftests/livepatch -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/livepatch/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/livepatch/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/livepatch/{} \; -popd -# install netfilter selftests -pushd tools/testing/selftests/netfilter -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/netfilter/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/netfilter/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/netfilter/{} \; -popd -%endif - -### -### clean -### - -### -### scripts -### - -%if %{with_tools} -%post -n kernel-tools-libs -/sbin/ldconfig - -%postun -n kernel-tools-libs -/sbin/ldconfig -%endif - -# -# This macro defines a %%post script for a kernel*-devel package. -# %%kernel_devel_post [<subpackage>] -# Note we don't run hardlink if ostree is in use, as ostree is -# a far more sophisticated hardlink implementation. -# https://github.com/projectatomic/rpm-ostree/commit/58a79056a889be8814aa51f507b2c7a4dccee526 -# -# The deletion of *.hardlink-temporary files is a temporary workaround -# for this bug in the hardlink binary (fixed in util-linux 2.38): -# https://github.com/util-linux/util-linux/issues/1602 -# -%define kernel_devel_post() \ -%{expand:%%post %{?1:%{1}-}devel}\ -if [ -f /etc/sysconfig/kernel ]\ -then\ - . /etc/sysconfig/kernel || exit $?\ -fi\ -if [ "$HARDLINK" != "no" -a -x /usr/bin/hardlink -a ! -e /run/ostree-booted ] \ -then\ - (cd /usr/src/kernels/%{KVERREL}%{?1:+%{1}} &&\ - /usr/bin/find . -type f | while read f; do\ - hardlink -c /usr/src/kernels/*%{?dist}.*/$f $f > /dev/null\ - done;\ - /usr/bin/find /usr/src/kernels -type f -name '*.hardlink-temporary' -delete\ - )\ -fi\ -%{nil} - -# -# This macro defines a %%post script for a kernel*-modules-extra package. -# It also defines a %%postun script that does the same thing. -# %%kernel_modules_extra_post [<subpackage>] -# -%define kernel_modules_extra_post() \ -%{expand:%%post %{?1:%{1}-}modules-extra}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil}\ -%{expand:%%postun %{?1:%{1}-}modules-extra}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil} - -# -# This macro defines a %%post script for a kernel*-modules-internal package. -# It also defines a %%postun script that does the same thing. -# %%kernel_modules_internal_post [<subpackage>] -# -%define kernel_modules_internal_post() \ -%{expand:%%post %{?1:%{1}-}modules-internal}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil}\ -%{expand:%%postun %{?1:%{1}-}modules-internal}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil} - -# -# This macro defines a %%post script for a kernel*-modules package. -# It also defines a %%postun script that does the same thing. -# %%kernel_modules_post [<subpackage>] -# -%define kernel_modules_post() \ -%{expand:%%post %{?1:%{1}-}modules}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -if [ ! -f %{_localstatedir}/lib/rpm-state/%{name}/installing_core_%{KVERREL}%{?1:+%{1}} ]; then\ - mkdir -p %{_localstatedir}/lib/rpm-state/%{name}\ - touch %{_localstatedir}/lib/rpm-state/%{name}/need_to_run_dracut_%{KVERREL}%{?1:+%{1}}\ -fi\ -%{nil}\ -%{expand:%%postun %{?1:%{1}-}modules}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil}\ -%{expand:%%posttrans %{?1:%{1}-}modules}\ -if [ -f %{_localstatedir}/lib/rpm-state/%{name}/need_to_run_dracut_%{KVERREL}%{?1:+%{1}} ]; then\ - rm -f %{_localstatedir}/lib/rpm-state/%{name}/need_to_run_dracut_%{KVERREL}%{?1:+%{1}}\ - echo "Running: dracut -f --kver %{KVERREL}%{?1:+%{1}}"\ - dracut -f --kver "%{KVERREL}%{?1:+%{1}}" || exit $?\ -fi\ -%{nil} - -# This macro defines a %%posttrans script for a kernel package. -# %%kernel_variant_posttrans [<subpackage>] -# More text can follow to go at the end of this variant's %%post. -# -%define kernel_variant_posttrans() \ -%{expand:%%posttrans %{?1:%{1}-}core}\ -%if 0%{!?fedora:1}\ -if [ -x %{_sbindir}/weak-modules ]\ -then\ - %{_sbindir}/weak-modules --add-kernel %{KVERREL}%{?1:+%{1}} || exit $?\ -fi\ -%endif\ -rm -f %{_localstatedir}/lib/rpm-state/%{name}/installing_core_%{KVERREL}%{?1:+%{1}}\ -/bin/kernel-install add %{KVERREL}%{?1:+%{1}} /lib/modules/%{KVERREL}%{?1:+%{1}}/vmlinuz || exit $?\ -%{nil} - -# -# This macro defines a %%post script for a kernel package and its devel package. -# %%kernel_variant_post [-v <subpackage>] [-r <replace>] -# More text can follow to go at the end of this variant's %%post. -# -%define kernel_variant_post(v:r:) \ -%{expand:%%kernel_devel_post %{?-v*}}\ -%{expand:%%kernel_modules_post %{?-v*}}\ -%{expand:%%kernel_modules_extra_post %{?-v*}}\ -%{expand:%%kernel_modules_internal_post %{?-v*}}\ -%{expand:%%kernel_variant_posttrans %{?-v*}}\ -%{expand:%%post %{?-v*:%{-v*}-}core}\ -%{-r:\ -if [ `uname -i` == "x86_64" -o `uname -i` == "i386" ] &&\ - [ -f /etc/sysconfig/kernel ]; then\ - /bin/sed -r -i -e 's/^DEFAULTKERNEL=%{-r*}$/DEFAULTKERNEL=kernel%{?-v:-%{-v*}}/' /etc/sysconfig/kernel || exit $?\ -fi}\ -mkdir -p %{_localstatedir}/lib/rpm-state/%{name}\ -touch %{_localstatedir}/lib/rpm-state/%{name}/installing_core_%{KVERREL}%{?1:+%{1}}\ -%{nil} - -# -# This macro defines a %%preun script for a kernel package. -# %%kernel_variant_preun <subpackage> -# -%define kernel_variant_preun() \ -%{expand:%%preun %{?1:%{1}-}core}\ -/bin/kernel-install remove %{KVERREL}%{?1:+%{1}} /lib/modules/%{KVERREL}%{?1:+%{1}}/vmlinuz || exit $?\ -if [ -x %{_sbindir}/weak-modules ]\ -then\ - %{_sbindir}/weak-modules --remove-kernel %{KVERREL}%{?1:+%{1}} || exit $?\ -fi\ -%{nil} - -%kernel_variant_preun -%kernel_variant_post -r kernel-smp - -%if %{with_pae} -%kernel_variant_preun lpae -%kernel_variant_post -v lpae -r (kernel|kernel-smp) -%endif - -%if %{with_debug} -%kernel_variant_preun debug -%kernel_variant_post -v debug -%endif - -%if %{with_zfcpdump} -%kernel_variant_preun zfcpdump -%kernel_variant_post -v zfcpdump -%endif - -if [ -x /sbin/ldconfig ] -then - /sbin/ldconfig -X || exit $? -fi - -### -### file lists -### - -%if %{with_headers} -%files headers -/usr/include/* -%endif - -%if %{with_cross_headers} -%files cross-headers -/usr/*-linux-gnu/include/* -%endif - -%if %{with_kernel_abi_stablelists} -%files -n kernel-abi-stablelists -/lib/modules/kabi-* -%endif - -%if %{with_kabidw_base} -%ifarch x86_64 s390x ppc64 ppc64le aarch64 -%files kernel-kabidw-base-internal -%defattr(-,root,root) -/kabidw-base/%{_target_cpu}/* -%endif -%endif - -# only some architecture builds need kernel-doc -%if %{with_doc} -%files doc -%defattr(-,root,root) -%{_datadir}/doc/kernel-doc-%{specversion}-%{pkgrelease}/Documentation/* -%dir %{_datadir}/doc/kernel-doc-%{specversion}-%{pkgrelease}/Documentation -%dir %{_datadir}/doc/kernel-doc-%{specversion}-%{pkgrelease} -%endif - -%if %{with_perf} -%files -n perf -%{_bindir}/perf -%{_libdir}/libperf-jvmti.so -%dir %{_libexecdir}/perf-core -%{_libexecdir}/perf-core/* -%{_datadir}/perf-core/* -%{_mandir}/man[1-8]/perf* -%{_sysconfdir}/bash_completion.d/perf -%doc linux-%{KVERREL}/tools/perf/Documentation/examples.txt -%{_docdir}/perf-tip/tips.txt - -%files -n python3-perf -%{python3_sitearch}/* - -%if %{with_debuginfo} -%files -f perf-debuginfo.list -n perf-debuginfo - -%files -f python3-perf-debuginfo.list -n python3-perf-debuginfo -%endif -# with_perf -%endif - -%if %{with_tools} -%ifnarch %{cpupowerarchs} -%files -n kernel-tools -%else -%files -n kernel-tools -f cpupower.lang -%{_bindir}/cpupower -%{_datadir}/bash-completion/completions/cpupower -%ifarch x86_64 -%{_bindir}/centrino-decode -%{_bindir}/powernow-k8-decode -%endif -%{_unitdir}/cpupower.service -%{_mandir}/man[1-8]/cpupower* -%config(noreplace) %{_sysconfdir}/sysconfig/cpupower -%ifarch x86_64 -%{_bindir}/x86_energy_perf_policy -%{_mandir}/man8/x86_energy_perf_policy* -%{_bindir}/turbostat -%{_mandir}/man8/turbostat* -%{_bindir}/intel-speed-select -%{_sbindir}/intel_sdsi -%endif -# cpupowerarchs -%endif -%{_bindir}/tmon -%{_bindir}/iio_event_monitor -%{_bindir}/iio_generic_buffer -%{_bindir}/lsiio -%{_bindir}/lsgpio -%{_bindir}/gpio-hammer -%{_bindir}/gpio-event-mon -%{_bindir}/gpio-watch -%{_mandir}/man1/kvm_stat* -%{_bindir}/kvm_stat -%{_unitdir}/kvm_stat.service -%config(noreplace) %{_sysconfdir}/logrotate.d/kvm_stat -%{_bindir}/page_owner_sort -%{_bindir}/slabinfo - -%if %{with_debuginfo} -%files -f kernel-tools-debuginfo.list -n kernel-tools-debuginfo -%endif - -%ifarch %{cpupowerarchs} -%files -n kernel-tools-libs -%{_libdir}/libcpupower.so.0 -%{_libdir}/libcpupower.so.0.0.1 - -%files -n kernel-tools-libs-devel -%{_libdir}/libcpupower.so -%{_includedir}/cpufreq.h -%endif -# with_tools -%endif - -%if %{with_bpftool} -%files -n bpftool -%{_sbindir}/bpftool -%{_sysconfdir}/bash_completion.d/bpftool -%{_mandir}/man8/bpftool-cgroup.8.gz -%{_mandir}/man8/bpftool-gen.8.gz -%{_mandir}/man8/bpftool-iter.8.gz -%{_mandir}/man8/bpftool-link.8.gz -%{_mandir}/man8/bpftool-map.8.gz -%{_mandir}/man8/bpftool-prog.8.gz -%{_mandir}/man8/bpftool-perf.8.gz -%{_mandir}/man8/bpftool.8.gz -%{_mandir}/man8/bpftool-net.8.gz -%{_mandir}/man8/bpftool-feature.8.gz -%{_mandir}/man8/bpftool-btf.8.gz -%{_mandir}/man8/bpftool-struct_ops.8.gz - -%if %{with_debuginfo} -%files -f bpftool-debuginfo.list -n bpftool-debuginfo -%defattr(-,root,root) -%endif -%endif - -%if %{with_selftests} -%files selftests-internal -%{_libexecdir}/ksamples -%{_libexecdir}/kselftests -%endif - -# empty meta-package -%ifnarch %nobuildarches noarch -%files -%endif - -%if %{with_gcov} -%ifnarch %nobuildarches noarch -%files gcov -%{_builddir} -%endif -%endif - -# This is %%{image_install_path} on an arch where that includes ELF files, -# or empty otherwise. -%define elf_image_install_path %{?kernel_image_elf:%{image_install_path}} - -# -# This macro defines the %%files sections for a kernel package -# and its devel and debuginfo packages. -# %%kernel_variant_files [-k vmlinux] <use_vdso> <condition> <subpackage> -# -%define kernel_variant_files(k:) \ -%if %{2}\ -%{expand:%%files -f kernel-%{?3:%{3}-}core.list %{?1:-f kernel-%{?3:%{3}-}ldsoconf.list} %{?3:%{3}-}core}\ -%{!?_licensedir:%global license %%doc}\ -%license linux-%{KVERREL}/COPYING-%{version}-%{release}\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/%{?-k:%{-k*}}%{!?-k:vmlinuz}\ -%ghost /%{image_install_path}/%{?-k:%{-k*}}%{!?-k:vmlinuz}-%{KVERREL}%{?3:+%{3}}\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/.vmlinuz.hmac \ -%ghost /%{image_install_path}/.vmlinuz-%{KVERREL}%{?3:+%{3}}.hmac \ -%ifarch %{arm} aarch64\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/dtb \ -%ghost /%{image_install_path}/dtb-%{KVERREL}%{?3:+%{3}} \ -%endif\ -%attr(0600, root, root) /lib/modules/%{KVERREL}%{?3:+%{3}}/System.map\ -%ghost %attr(0600, root, root) /boot/System.map-%{KVERREL}%{?3:+%{3}}\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/symvers.gz\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/config\ -%ghost %attr(0600, root, root) /boot/symvers-%{KVERREL}%{?3:+%{3}}.gz\ -%ghost %attr(0600, root, root) /boot/initramfs-%{KVERREL}%{?3:+%{3}}.img\ -%ghost %attr(0644, root, root) /boot/config-%{KVERREL}%{?3:+%{3}}\ -%dir /lib/modules\ -%dir /lib/modules/%{KVERREL}%{?3:+%{3}}\ -%dir /lib/modules/%{KVERREL}%{?3:+%{3}}/kernel\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/build\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/source\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/updates\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/weak-updates\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/systemtap\ -%{_datadir}/doc/kernel-keys/%{KVERREL}%{?3:+%{3}}\ -%if %{1}\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/vdso\ -%endif\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/modules.*\ -%{expand:%%files -f kernel-%{?3:%{3}-}modules.list %{?3:%{3}-}modules}\ -%{expand:%%files %{?3:%{3}-}devel}\ -%defverify(not mtime)\ -/usr/src/kernels/%{KVERREL}%{?3:+%{3}}\ -%{expand:%%files %{?3:%{3}-}devel-matched}\ -%{expand:%%files -f kernel-%{?3:%{3}-}modules-extra.list %{?3:%{3}-}modules-extra}\ -%config(noreplace) /etc/modprobe.d/*-blacklist.conf\ -%{expand:%%files -f kernel-%{?3:%{3}-}modules-internal.list %{?3:%{3}-}modules-internal}\ -%if %{with_debuginfo}\ -%ifnarch noarch\ -%{expand:%%files -f debuginfo%{?3}.list %{?3:%{3}-}debuginfo}\ -%endif\ -%endif\ -%if %{?3:1} %{!?3:0}\ -%{expand:%%files %{3}}\ -%endif\ -%endif\ -%{nil} - -%kernel_variant_files %{_use_vdso} %{with_up} -%kernel_variant_files %{_use_vdso} %{with_debug} debug -%if %{with_debug_meta} -%files debug -%files debug-core -%files debug-devel -%files debug-devel-matched -%files debug-modules -%files debug-modules-extra -%endif -%kernel_variant_files %{use_vdso} %{with_pae} lpae -%kernel_variant_files %{_use_vdso} %{with_zfcpdump} zfcpdump - -%define kernel_variant_ipaclones(k:) \ -%if %{1}\ -%if %{with_ipaclones}\ -%{expand:%%files %{?2:%{2}-}ipaclones-internal}\ -%defattr(-,root,root)\ -%defverify(not mtime)\ -/usr/src/kernels/%{KVERREL}%{?2:+%{2}}-ipaclones\ -%endif\ -%endif\ -%{nil} - -%kernel_variant_ipaclones %{with_up} - -# plz don't put in a version string unless you're going to tag -# and build. -# -# -%changelog Mon Mar 28 2022 Fedora Kernel Team <kernel-team@xxxxxxxxxxxxxxxxx> [5.16.0-6.test] - -### -# The following Emacs magic makes C-c C-e use UTC dates. -# Local Variables: -# rpm-change-log-uses-utc: t -# End: -### diff --git a/redhat/self-test/data/centos-fce15c45d3fb.el7.spec b/redhat/self-test/data/centos-fce15c45d3fb.el7.spec index blahblah..blahblah 100755 --- a/redhat/self-test/data/centos-fce15c45d3fb.el7.spec +++ b/redhat/self-test/data/centos-fce15c45d3fb.el7.spec @@ -1,125 +1,7 @@ -# All Global changes to build and install go here. -# Per the below section about __spec_install_pre, any rpm -# environment changes that affect %%install need to go -# here before the %%install macro is pre-built. - -# Disable LTO in userspace packages. -%global _lto_cflags %{nil} - -# Option to enable compiling with clang instead of gcc. -%bcond_with toolchain_clang - -%if %{with toolchain_clang} -%global toolchain clang -%endif - -# Compile the kernel with LTO (only supported when building with clang). -%bcond_with clang_lto - -%if %{with clang_lto} && %{without toolchain_clang} -{error:clang_lto requires --with toolchain_clang} -%endif - -# Cross compile on copr for arm -# See https://bugzilla.redhat.com/1879599 -%if 0%{?_with_cross_arm:1} -%global _target_cpu armv7hl -%global _arch arm -%global _build_arch arm -%global _with_cross 1 -%endif - -# The kernel's %%install section is special -# Normally the %%install section starts by cleaning up the BUILD_ROOT -# like so: -# -# %%__spec_install_pre %%{___build_pre}\ -# [ "$RPM_BUILD_ROOT" != "/" ] && rm -rf "${RPM_BUILD_ROOT}"\ -# mkdir -p `dirname "$RPM_BUILD_ROOT"`\ -# mkdir "$RPM_BUILD_ROOT"\ -# %%{nil} -# -# But because of kernel variants, the %%build section, specifically -# BuildKernel(), moves each variant to its final destination as the -# variant is built. This violates the expectation of the %%install -# section. As a result we snapshot the current env variables and -# purposely leave out the removal section. All global wide changes -# should be added above this line otherwise the %%install section -# will not see them. -%global __spec_install_pre %{___build_pre} - -# At the time of this writing (2019-03), RHEL8 packages use w2.xzdio -# compression for rpms (xz, level 2). -# Kernel has several large (hundreds of mbytes) rpms, they take ~5 mins -# to compress by single-threaded xz. Switch to threaded compression, -# and from level 2 to 3 to keep compressed sizes close to "w2" results. -# -# NB: if default compression in /usr/lib/rpm/redhat/macros ever changes, -# this one might need tweaking (e.g. if default changes to w3.xzdio, -# change below to w4T.xzdio): -# -# This is disabled on i686 as it triggers oom errors - -%ifnarch i686 -%define _binary_payload w3T.xzdio -%endif - -Summary: The Linux kernel -%if 0%{?fedora} -%define secure_boot_arch x86_64 -%else -%define secure_boot_arch x86_64 aarch64 s390x ppc64le -%endif - -# Signing for secure boot authentication -%ifarch %{secure_boot_arch} -%global signkernel 1 -%else -%global signkernel 0 -%endif - -# Sign modules on all arches -%global signmodules 1 - -# Compress modules only for architectures that build modules -%ifarch noarch -%global zipmodules 0 -%else -%global zipmodules 1 -%endif - -%if %{zipmodules} -%global zipsed -e 's/\.ko$/\.ko.xz/' -# for parallel xz processes, replace with 1 to go back to single process -%endif - -%if 0%{?fedora} -%define primary_target fedora -%else -%define primary_target rhel -%endif - -# -# genspec.sh variables -# - -# Include Fedora files %global include_fedora 1 -# Include RHEL files %global include_rhel 1 -# Provide Patchlist.changelog file %global patchlist_changelog 1 -# Set released_kernel to 1 when the upstream source tarball contains a -# kernel release. (This includes prepatch or "rc" releases.) -# Set released_kernel to 0 when the upstream source tarball contains an -# unreleased kernel development snapshot. %global released_kernel 0 -# Set debugbuildsenabled to 1 to build separate base and debug kernels -# (on supported architectures). The kernel-debug-* subpackages will -# contain the debug kernel. -# Set debugbuildsenabled to 0 to not build a separate debug kernel, but -# to build the base kernel using the debug configuration. (Specifying -# the --with-release option overrides this setting.) %define debugbuildsenabled 0 %define buildid .test %define specversion 5.16.0 @@ -127,2924 +9,6 @@ Summary: The Linux kernel %define pkgrelease 0.rc5.fce15c45d3fb.6.test %define kversion 5 %define tarfile_release 5.16.0-0.rc5.fce15c45d3fb.6.test -# This is needed to do merge window version magic %define patchlevel 16 -# allow pkg_release to have configurable %%{?dist} tag %define specrelease 0.rc5.fce15c45d3fb.6%{?buildid}%{?dist} - -# -# End of genspec.sh variables -# - -%define pkg_release %{specrelease} - -# libexec dir is not used by the linker, so the shared object there -# should not be exported to RPM provides -%global __provides_exclude_from ^%{_libexecdir}/kselftests - -# The following build options are enabled by default, but may become disabled -# by later architecture-specific checks. These can also be disabled by using -# --without <opt> in the rpmbuild command, or by forcing these values to 0. -# -# standard kernel -%define with_up %{?_without_up: 0} %{?!_without_up: 1} -# kernel PAE (only valid for ARM (lpae)) -%define with_pae %{?_without_pae: 0} %{?!_without_pae: 1} -# kernel-debug -%define with_debug %{?_without_debug: 0} %{?!_without_debug: 1} -# kernel-zfcpdump (s390 specific kernel for zfcpdump) -%define with_zfcpdump %{?_without_zfcpdump: 0} %{?!_without_zfcpdump: 1} -# kernel-doc -%define with_doc %{?_without_doc: 0} %{?!_without_doc: 1} -# kernel-headers -%define with_headers %{?_without_headers: 0} %{?!_without_headers: 1} -%define with_cross_headers %{?_without_cross_headers: 0} %{?!_without_cross_headers: 1} -# perf -%define with_perf %{?_without_perf: 0} %{?!_without_perf: 1} -# tools -%define with_tools %{?_without_tools: 0} %{?!_without_tools: 1} -# bpf tool -%define with_bpftool %{?_without_bpftool: 0} %{?!_without_bpftool: 1} -# kernel-debuginfo -%define with_debuginfo %{?_without_debuginfo: 0} %{?!_without_debuginfo: 1} -# kernel-abi-stablelists -%define with_kernel_abi_stablelists %{?_without_kernel_abi_stablelists: 0} %{?!_without_kernel_abi_stablelists: 1} -# internal samples and selftests -%define with_selftests %{?_without_selftests: 0} %{?!_without_selftests: 1} -# -# Additional options for user-friendly one-off kernel building: -# -# Only build the base kernel (--with baseonly): -%define with_baseonly %{?_with_baseonly: 1} %{?!_with_baseonly: 0} -# Only build the pae kernel (--with paeonly): -%define with_paeonly %{?_with_paeonly: 1} %{?!_with_paeonly: 0} -# Only build the debug kernel (--with dbgonly): -%define with_dbgonly %{?_with_dbgonly: 1} %{?!_with_dbgonly: 0} -# Control whether we perform a compat. check against published ABI. -%define with_kabichk %{?_without_kabichk: 0} %{?!_without_kabichk: 1} -# Temporarily disable kabi checks until RC. -%define with_kabichk 0 -# Control whether we perform a compat. check against DUP ABI. -%define with_kabidupchk %{?_with_kabidupchk: 1} %{?!_with_kabidupchk: 0} -# -# Control whether to run an extensive DWARF based kABI check. -# Note that this option needs to have baseline setup in SOURCE300. -%define with_kabidwchk %{?_without_kabidwchk: 0} %{?!_without_kabidwchk: 1} -%define with_kabidw_base %{?_with_kabidw_base: 1} %{?!_with_kabidw_base: 0} -# -# Control whether to install the vdso directories. -%define with_vdso_install %{?_without_vdso_install: 0} %{?!_without_vdso_install: 1} -# -# should we do C=1 builds with sparse -%define with_sparse %{?_with_sparse: 1} %{?!_with_sparse: 0} -# -# Cross compile requested? -%define with_cross %{?_with_cross: 1} %{?!_with_cross: 0} -# -# build a release kernel on rawhide -%define with_release %{?_with_release: 1} %{?!_with_release: 0} - -# verbose build, i.e. no silent rules and V=1 -%define with_verbose %{?_with_verbose: 1} %{?!_with_verbose: 0} - -# -# check for mismatched config options -%define with_configchecks %{?_without_configchecks: 0} %{?!_without_configchecks: 1} - -# -# gcov support -%define with_gcov %{?_with_gcov:1}%{?!_with_gcov:0} - -# -# ipa_clone support -%define with_ipaclones %{?_without_ipaclones: 0} %{?!_without_ipaclones: 1} - -# Want to build a vanilla kernel build without any non-upstream patches? -%define with_vanilla %{?_with_vanilla: 1} %{?!_with_vanilla: 0} - -%if 0%{?fedora} -# Kernel headers are being split out into a separate package -%define with_headers 0 -%define with_cross_headers 0 -# no ipa_clone for now -%define with_ipaclones 0 -# no stablelist -%define with_kernel_abi_stablelists 0 -# Fedora builds these separately -%define with_perf 0 -%define with_tools 0 -%define with_bpftool 0 -# selftests turns on bpftool -%define with_selftests 0 -%endif - -%if %{with_verbose} -%define make_opts V=1 -%else -%define make_opts -s -%endif - -%if %{with toolchain_clang} -%ifarch s390x ppc64le -%global llvm_ias 0 -%else -%global llvm_ias 1 -%endif -%global clang_make_opts HOSTCC=clang CC=clang LLVM_IAS=%{llvm_ias} -%if %{with clang_lto} -%global clang_make_opts %{clang_make_opts} LD=ld.lld HOSTLD=ld.lld AR=llvm-ar NM=llvm-nm HOSTAR=llvm-ar HOSTNM=llvm-nm -%endif -%global make_opts %{make_opts} %{clang_make_opts} -# clang does not support the -fdump-ipa-clones option -%global with_ipaclones 0 -%endif - -# turn off debug kernel and kabichk for gcov builds -%if %{with_gcov} -%define with_debug 0 -%define with_kabichk 0 -%define with_kabidupchk 0 -%define with_kabidwchk 0 -%define with_kabidw_base 0 -%define with_kernel_abi_stablelists 0 -%endif - -# turn off kABI DWARF-based check if we're generating the base dataset -%if %{with_kabidw_base} -%define with_kabidwchk 0 -%endif - -# kpatch_kcflags are extra compiler flags applied to base kernel -# -fdump-ipa-clones is enabled only for base kernels on selected arches -%if %{with_ipaclones} -%ifarch x86_64 ppc64le -%define kpatch_kcflags -fdump-ipa-clones -%else -%define with_ipaclones 0 -%endif -%endif - -%define make_target bzImage -%define image_install_path boot - -%define KVERREL %{version}-%{release}.%{_target_cpu} -%define KVERREL_RE %(echo %KVERREL | sed 's/+/[+]/g') -%define hdrarch %_target_cpu -%define asmarch %_target_cpu - -%if 0%{!?nopatches:1} -%define nopatches 0 -%endif - -%if %{with_vanilla} -%define nopatches 1 -%endif - -%if %{with_release} -%define debugbuildsenabled 1 -%endif - -%if !%{with_debuginfo} -%define _enable_debug_packages 0 -%endif -%define debuginfodir /usr/lib/debug -# Needed because we override almost everything involving build-ids -# and debuginfo generation. Currently we rely on the old alldebug setting. -%global _build_id_links alldebug - -# kernel PAE is only built on ARMv7 -%ifnarch armv7hl -%define with_pae 0 -%endif - -# if requested, only build base kernel -%if %{with_baseonly} -%define with_pae 0 -%define with_debug 0 -%define with_vdso_install 0 -%define with_perf 0 -%define with_tools 0 -%define with_bpftool 0 -%define with_kernel_abi_stablelists 0 -%define with_selftests 0 -%define with_cross 0 -%define with_cross_headers 0 -%define with_ipaclones 0 -%endif - -# if requested, only build pae kernel -%if %{with_paeonly} -%define with_up 0 -%define with_debug 0 -%endif - -# if requested, only build debug kernel -%if %{with_dbgonly} -%define with_up 0 -%define with_vdso_install 0 -%define with_perf 0 -%define with_tools 0 -%define with_bpftool 0 -%define with_kernel_abi_stablelists 0 -%define with_selftests 0 -%define with_cross 0 -%define with_cross_headers 0 -%define with_ipaclones 0 -%endif - -# turn off kABI DUP check and DWARF-based check if kABI check is disabled -%if !%{with_kabichk} -%define with_kabidupchk 0 -%define with_kabidwchk 0 -%endif - -%if %{with_vdso_install} -%define use_vdso 1 -%endif - -# selftests require bpftool to be built -%if %{with_selftests} -%define with_bpftool 1 -%endif - -%ifnarch noarch -%define with_kernel_abi_stablelists 0 -%endif - -# Overrides for generic default options - -# only package docs noarch -%ifnarch noarch -%define with_doc 0 -%define doc_build_fail true -%endif - -%if 0%{?fedora} -# don't do debug builds on anything but i686 and x86_64 -%ifnarch i686 x86_64 -%define with_debug 0 -%endif -%endif - -# don't build noarch kernels or headers (duh) -%ifarch noarch -%define with_up 0 -%define with_headers 0 -%define with_cross_headers 0 -%define with_tools 0 -%define with_perf 0 -%define with_bpftool 0 -%define with_selftests 0 -%define with_debug 0 -%define all_arch_configs kernel-%{version}-*.config -%endif - -# sparse blows up on ppc -%ifnarch ppc64le -%define with_sparse 0 -%endif - -# zfcpdump mechanism is s390 only -%ifnarch s390x -%define with_zfcpdump 0 -%endif - -%if 0%{?fedora} -# This is not for Fedora -%define with_zfcpdump 0 -%endif - -# Per-arch tweaks - -%ifarch i686 -%define asmarch x86 -%define hdrarch i386 -%define all_arch_configs kernel-%{version}-i?86*.config -%define kernel_image arch/x86/boot/bzImage -%endif - -%ifarch x86_64 -%define asmarch x86 -%define all_arch_configs kernel-%{version}-x86_64*.config -%define kernel_image arch/x86/boot/bzImage -%endif - -%ifarch ppc64le -%define asmarch powerpc -%define hdrarch powerpc -%define make_target vmlinux -%define kernel_image vmlinux -%define kernel_image_elf 1 -%define use_vdso 0 -%define all_arch_configs kernel-%{version}-ppc64le*.config -%endif - -%ifarch s390x -%define asmarch s390 -%define hdrarch s390 -%define all_arch_configs kernel-%{version}-s390x.config -%define kernel_image arch/s390/boot/bzImage -%define vmlinux_decompressor arch/s390/boot/compressed/vmlinux -%endif - -%ifarch %{arm} -%define all_arch_configs kernel-%{version}-arm*.config -%define skip_nonpae_vdso 1 -%define asmarch arm -%define hdrarch arm -%define make_target bzImage -%define kernel_image arch/arm/boot/zImage -# http://lists.infradead.org/pipermail/linux-arm-kernel/2012-March/091404.html -%define kernel_mflags KALLSYMS_EXTRA_PASS=1 -# we only build headers/perf/tools on the base arm arches -# just like we used to only build them on i386 for x86 -%ifnarch armv7hl -%define with_headers 0 -%define with_cross_headers 0 -%endif -# These currently don't compile on armv7 -%define with_selftests 0 -%endif - -%ifarch aarch64 -%define all_arch_configs kernel-%{version}-aarch64*.config -%define asmarch arm64 -%define hdrarch arm64 -%define make_target Image.gz -%define kernel_image arch/arm64/boot/Image.gz -%endif - -# Should make listnewconfig fail if there's config options -# printed out? -%if %{nopatches} -%define with_configchecks 0 -%endif - -# To temporarily exclude an architecture from being built, add it to -# %%nobuildarches. Do _NOT_ use the ExclusiveArch: line, because if we -# don't build kernel-headers then the new build system will no longer let -# us use the previous build of that package -- it'll just be completely AWOL. -# Which is a BadThing(tm). - -# We only build kernel-headers on the following... -%if 0%{?fedora} -%define nobuildarches i386 -%else -%define nobuildarches i386 i686 %{arm} -%endif - -%ifarch %nobuildarches -# disable BuildKernel commands -%define with_up 0 -%define with_debug 0 -%define with_pae 0 -%define with_zfcpdump 0 - -%define with_debuginfo 0 -%define with_perf 0 -%define with_tools 0 -%define with_bpftool 0 -%define with_selftests 0 -%define _enable_debug_packages 0 -%endif - -# Architectures we build tools/cpupower on -%if 0%{?fedora} -%define cpupowerarchs %{ix86} x86_64 ppc64le %{arm} aarch64 -%else -%define cpupowerarchs i686 x86_64 ppc64le aarch64 -%endif - -%if 0%{?use_vdso} - -%if 0%{?skip_nonpae_vdso} -%define _use_vdso 0 -%else -%define _use_vdso 1 -%endif - -%else -%define _use_vdso 0 -%endif - -# If build of debug packages is disabled, we need to know if we want to create -# meta debug packages or not, after we define with_debug for all specific cases -# above. So this must be at the end here, after all cases of with_debug or not. -%define with_debug_meta 0 -%if !%{debugbuildsenabled} -%if %{with_debug} -%define with_debug_meta 1 -%endif -%define with_debug 0 -%endif - - -# -# Packages that need to be installed before the kernel is, because the %%post -# scripts use them. -# -%define kernel_prereq coreutils, systemd >= 203-2, /usr/bin/kernel-install -%define initrd_prereq dracut >= 027 - - -Name: kernel -License: GPLv2 and Redistributable, no modification permitted -URL: https://www.kernel.org/ -Version: %{specversion} -Release: %{pkg_release} -# DO NOT CHANGE THE 'ExclusiveArch' LINE TO TEMPORARILY EXCLUDE AN ARCHITECTURE BUILD. -# SET %%nobuildarches (ABOVE) INSTEAD -%if 0%{?fedora} -ExclusiveArch: noarch x86_64 s390x %{arm} aarch64 ppc64le -%else -ExclusiveArch: noarch i386 i686 x86_64 s390x %{arm} aarch64 ppc64le -%endif -ExclusiveOS: Linux -%ifnarch %{nobuildarches} -Requires: kernel-core-uname-r = %{KVERREL} -Requires: kernel-modules-uname-r = %{KVERREL} -%endif - - -# -# List the packages used during the kernel build -# -BuildRequires: kmod, patch, bash, coreutils, tar, git-core, which -BuildRequires: bzip2, xz, findutils, gzip, m4, perl-interpreter, perl-Carp, perl-devel, perl-generators, make, diffutils, gawk -BuildRequires: gcc, binutils, redhat-rpm-config, hmaccalc, bison, flex, gcc-c++ -BuildRequires: net-tools, hostname, bc, elfutils-devel -BuildRequires: dwarves -BuildRequires: python3-devel -BuildRequires: gcc-plugin-devel -# glibc-static is required for a consistent build environment (specifically -# CONFIG_CC_CAN_LINK_STATIC=y). -BuildRequires: glibc-static -%ifnarch %{nobuildarches} noarch -BuildRequires: bpftool -%endif -%if %{with_headers} -BuildRequires: rsync -%endif -%if %{with_doc} -BuildRequires: xmlto, asciidoc, python3-sphinx, python3-sphinx_rtd_theme -%endif -%if %{with_sparse} -BuildRequires: sparse -%endif -%if %{with_perf} -BuildRequires: zlib-devel binutils-devel newt-devel perl(ExtUtils::Embed) bison flex xz-devel -BuildRequires: audit-libs-devel -BuildRequires: java-devel -BuildRequires: libbpf-devel -BuildRequires: libbabeltrace-devel -BuildRequires: libtraceevent-devel -%ifnarch %{arm} s390x -BuildRequires: numactl-devel -%endif -%ifarch aarch64 -BuildRequires: opencsd-devel >= 1.0.0 -%endif -%endif -%if %{with_tools} -BuildRequires: gettext ncurses-devel -BuildRequires: libcap-devel libcap-ng-devel -%ifnarch s390x -BuildRequires: pciutils-devel -%endif -%ifarch i686 x86_64 -BuildRequires: libnl3-devel -%endif -%endif -%if %{with_tools} || %{signmodules} || %{signkernel} -BuildRequires: openssl-devel -%endif -%if %{with_bpftool} -BuildRequires: python3-docutils -BuildRequires: zlib-devel binutils-devel -%endif -%if %{with_selftests} -BuildRequires: clang llvm -%ifnarch %{arm} -BuildRequires: numactl-devel -%endif -BuildRequires: libcap-devel libcap-ng-devel rsync libmnl-devel -%endif -BuildConflicts: rhbuildsys(DiskFree) < 500Mb -%if %{with_debuginfo} -BuildRequires: rpm-build, elfutils -BuildConflicts: rpm < 4.13.0.1-19 -BuildConflicts: dwarves < 1.13 -# Most of these should be enabled after more investigation -%undefine _include_minidebuginfo -%undefine _find_debuginfo_dwz_opts -%undefine _unique_build_ids -%undefine _unique_debug_names -%undefine _unique_debug_srcs -%undefine _debugsource_packages -%undefine _debuginfo_subpackages -%global _find_debuginfo_opts -r -%global _missing_build_ids_terminate_build 1 -%global _no_recompute_build_ids 1 -%endif -%if %{with_kabidwchk} || %{with_kabidw_base} -BuildRequires: kabi-dw -%endif - -%if %{signkernel}%{signmodules} -BuildRequires: openssl -%if %{signkernel} -# ELN uses Fedora signing process, so exclude -%if 0%{?rhel}%{?centos} && !0%{?eln} -BuildRequires: system-sb-certs -%endif -%ifarch x86_64 aarch64 -BuildRequires: nss-tools -BuildRequires: pesign >= 0.10-4 -%endif -%endif -%endif - -%if %{with_cross} -BuildRequires: binutils-%{_build_arch}-linux-gnu, gcc-%{_build_arch}-linux-gnu -%define cross_opts CROSS_COMPILE=%{_build_arch}-linux-gnu- -%define __strip %{_build_arch}-linux-gnu-strip -%endif - -# These below are required to build man pages -%if %{with_perf} -BuildRequires: xmlto -%endif -%if %{with_perf} || %{with_tools} -BuildRequires: asciidoc -%endif - -%if %{with toolchain_clang} -BuildRequires: clang -%endif - -%if %{with clang_lto} -BuildRequires: llvm -BuildRequires: lld -%endif - -# Because this is the kernel, it's hard to get a single upstream URL -# to represent the base without needing to do a bunch of patching. This -# tarball is generated from a src-git tree. If you want to see the -# exact git commit you can run -# -# xzcat -qq ${TARBALL} | git get-tar-commit-id -Source0: linux-%{tarfile_release}.tar.xz - -Source1: Makefile.rhelver - - -# Name of the packaged file containing signing key -%ifarch ppc64le -%define signing_key_filename kernel-signing-ppc.cer -%endif -%ifarch s390x -%define signing_key_filename kernel-signing-s390.cer -%endif - -%if %{?released_kernel} - -Source10: redhatsecurebootca5.cer -Source11: redhatsecurebootca1.cer -Source12: redhatsecureboot501.cer -Source13: redhatsecureboot301.cer -Source14: secureboot_s390.cer -Source15: secureboot_ppc.cer - -%define secureboot_ca_1 %{SOURCE10} -%define secureboot_ca_0 %{SOURCE11} -%ifarch x86_64 aarch64 -%define secureboot_key_1 %{SOURCE12} -%define pesign_name_1 redhatsecureboot501 -%define secureboot_key_0 %{SOURCE13} -%define pesign_name_0 redhatsecureboot301 -%endif -%ifarch s390x -%define secureboot_key_0 %{SOURCE14} -%define pesign_name_0 redhatsecureboot302 -%endif -%ifarch ppc64le -%define secureboot_key_0 %{SOURCE15} -%define pesign_name_0 redhatsecureboot303 -%endif - -# released_kernel -%else - -Source10: redhatsecurebootca4.cer -Source11: redhatsecurebootca2.cer -Source12: redhatsecureboot401.cer -Source13: redhatsecureboot003.cer - -%define secureboot_ca_1 %{SOURCE10} -%define secureboot_ca_0 %{SOURCE11} -%define secureboot_key_1 %{SOURCE12} -%define pesign_name_1 redhatsecureboot401 -%define secureboot_key_0 %{SOURCE13} -%define pesign_name_0 redhatsecureboot003 - -# released_kernel -%endif - -Source20: mod-denylist.sh -Source21: mod-sign.sh -Source22: parallel_xz.sh - -%define modsign_cmd %{SOURCE21} - -%if 0%{?include_rhel} -Source23: x509.genkey.rhel - -Source24: kernel-aarch64-rhel.config -Source25: kernel-aarch64-debug-rhel.config -Source26: mod-extra.list.rhel - -Source27: kernel-ppc64le-rhel.config -Source28: kernel-ppc64le-debug-rhel.config -Source29: kernel-s390x-rhel.config -Source30: kernel-s390x-debug-rhel.config -Source31: kernel-s390x-zfcpdump-rhel.config -Source32: kernel-x86_64-rhel.config -Source33: kernel-x86_64-debug-rhel.config - -Source34: filter-x86_64.sh.rhel -Source35: filter-armv7hl.sh.rhel -Source37: filter-aarch64.sh.rhel -Source38: filter-ppc64le.sh.rhel -Source39: filter-s390x.sh.rhel -Source40: filter-modules.sh.rhel - -Source41: x509.genkey.centos -%endif - -%if 0%{?include_fedora} -Source50: x509.genkey.fedora -Source51: mod-extra.list.fedora - -Source52: kernel-aarch64-fedora.config -Source53: kernel-aarch64-debug-fedora.config -Source54: kernel-armv7hl-fedora.config -Source55: kernel-armv7hl-debug-fedora.config -Source56: kernel-armv7hl-lpae-fedora.config -Source57: kernel-armv7hl-lpae-debug-fedora.config -Source60: kernel-ppc64le-fedora.config -Source61: kernel-ppc64le-debug-fedora.config -Source62: kernel-s390x-fedora.config -Source63: kernel-s390x-debug-fedora.config -Source64: kernel-x86_64-fedora.config -Source65: kernel-x86_64-debug-fedora.config - -Source67: filter-x86_64.sh.fedora -Source68: filter-armv7hl.sh.fedora -Source70: filter-aarch64.sh.fedora -Source71: filter-ppc64le.sh.fedora -Source72: filter-s390x.sh.fedora -Source73: filter-modules.sh.fedora -%endif - -Source75: partial-kgcov-snip.config -Source80: generate_all_configs.sh -Source81: process_configs.sh - -Source82: update_scripts.sh - -Source84: mod-internal.list - -Source100: rheldup3.x509 -Source101: rhelkpatch1.x509 - -Source200: check-kabi - -Source201: Module.kabi_aarch64 -Source202: Module.kabi_ppc64le -Source203: Module.kabi_s390x -Source204: Module.kabi_x86_64 - -Source210: Module.kabi_dup_aarch64 -Source211: Module.kabi_dup_ppc64le -Source212: Module.kabi_dup_s390x -Source213: Module.kabi_dup_x86_64 - -Source300: kernel-abi-stablelists-%{specversion}-%{pkgrelease}.tar.bz2 -Source301: kernel-kabi-dw-%{specversion}-%{pkgrelease}.tar.bz2 - -# Sources for kernel-tools -Source2000: cpupower.service -Source2001: cpupower.config -Source2002: kvm_stat.logrotate - -# Some people enjoy building customized kernels from the dist-git in Fedora and -# use this to override configuration options. One day they may all use the -# source tree, but in the mean time we carry this to support the legacy workflow -Source3000: merge.pl -Source3001: kernel-local -%if %{patchlist_changelog} -Source3002: Patchlist.changelog -%endif - -Source4000: README.rst -Source4001: rpminspect.yaml -Source4002: gating.yaml - -## Patches needed for building this package - -%if !%{nopatches} - -Patch1: patch-%{patchversion}-redhat.patch -%endif - -# empty final patch to facilitate testing of kernel patches -Patch999999: linux-kernel-test.patch - -# END OF PATCH DEFINITIONS - -%description -The kernel meta package - -# -# This macro does requires, provides, conflicts, obsoletes for a kernel package. -# %%kernel_reqprovconf <subpackage> -# It uses any kernel_<subpackage>_conflicts and kernel_<subpackage>_obsoletes -# macros defined above. -# -%define kernel_reqprovconf \ -Provides: kernel = %{specversion}-%{pkg_release}\ -Provides: kernel-%{_target_cpu} = %{specversion}-%{pkg_release}%{?1:+%{1}}\ -Provides: kernel-drm-nouveau = 16\ -Provides: kernel-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires(pre): %{kernel_prereq}\ -Requires(pre): %{initrd_prereq}\ -Requires(pre): ((linux-firmware >= 20150904-56.git6ebf5d57) if linux-firmware)\ -Recommends: linux-firmware\ -Requires(preun): systemd >= 200\ -Conflicts: xfsprogs < 4.3.0-1\ -Conflicts: xorg-x11-drv-vmmouse < 13.0.99\ -%{expand:%%{?kernel%{?1:_%{1}}_conflicts:Conflicts: %%{kernel%{?1:_%{1}}_conflicts}}}\ -%{expand:%%{?kernel%{?1:_%{1}}_obsoletes:Obsoletes: %%{kernel%{?1:_%{1}}_obsoletes}}}\ -%{expand:%%{?kernel%{?1:_%{1}}_provides:Provides: %%{kernel%{?1:_%{1}}_provides}}}\ -# We can't let RPM do the dependencies automatic because it'll then pick up\ -# a correct but undesirable perl dependency from the module headers which\ -# isn't required for the kernel proper to function\ -AutoReq: no\ -AutoProv: yes\ -%{nil} - - -%package doc -Summary: Various documentation bits found in the kernel source -Group: Documentation -%description doc -This package contains documentation files from the kernel -source. Various bits of information about the Linux kernel and the -device drivers shipped with it are documented in these files. - -You'll want to install this package if you need a reference to the -options that can be passed to Linux kernel modules at load time. - - -%package headers -Summary: Header files for the Linux kernel for use by glibc -Obsoletes: glibc-kernheaders < 3.0-46 -Provides: glibc-kernheaders = 3.0-46 -%description headers -Kernel-headers includes the C header files that specify the interface -between the Linux kernel and userspace libraries and programs. The -header files define structures and constants that are needed for -building most standard programs and are also needed for rebuilding the -glibc package. - -%package cross-headers -Summary: Header files for the Linux kernel for use by cross-glibc -%description cross-headers -Kernel-cross-headers includes the C header files that specify the interface -between the Linux kernel and userspace libraries and programs. The -header files define structures and constants that are needed for -building most standard programs and are also needed for rebuilding the -cross-glibc package. - - -%package debuginfo-common-%{_target_cpu} -Summary: Kernel source files used by %{name}-debuginfo packages -Provides: installonlypkg(kernel) -%description debuginfo-common-%{_target_cpu} -This package is required by %{name}-debuginfo subpackages. -It provides the kernel source files common to all builds. - -%if %{with_perf} -%package -n perf -Summary: Performance monitoring for the Linux kernel -Requires: bzip2 -License: GPLv2 -%description -n perf -This package contains the perf tool, which enables performance monitoring -of the Linux kernel. - -%package -n perf-debuginfo -Summary: Debug information for package perf -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release} -AutoReqProv: no -%description -n perf-debuginfo -This package provides debug information for the perf package. - -# Note that this pattern only works right to match the .build-id -# symlinks because of the trailing nonmatching alternation and -# the leading .*, because of find-debuginfo.sh's buggy handling -# of matching the pattern against the symlinks file. -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{_bindir}/perf(\.debug)?|.*%%{_libexecdir}/perf-core/.*|.*%%{_libdir}/libperf-jvmti.so(\.debug)?|XXX' -o perf-debuginfo.list} - -%package -n python3-perf -Summary: Python bindings for apps which will manipulate perf events -%description -n python3-perf -The python3-perf package contains a module that permits applications -written in the Python programming language to use the interface -to manipulate perf events. - -%package -n python3-perf-debuginfo -Summary: Debug information for package perf python bindings -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release} -AutoReqProv: no -%description -n python3-perf-debuginfo -This package provides debug information for the perf python bindings. - -# the python_sitearch macro should already be defined from above -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{python3_sitearch}/perf.*so(\.debug)?|XXX' -o python3-perf-debuginfo.list} - -# with_perf -%endif - -%if %{with_tools} -%package -n kernel-tools -Summary: Assortment of tools for the Linux kernel -License: GPLv2 -%ifarch %{cpupowerarchs} -Provides: cpupowerutils = 1:009-0.6.p1 -Obsoletes: cpupowerutils < 1:009-0.6.p1 -Provides: cpufreq-utils = 1:009-0.6.p1 -Provides: cpufrequtils = 1:009-0.6.p1 -Obsoletes: cpufreq-utils < 1:009-0.6.p1 -Obsoletes: cpufrequtils < 1:009-0.6.p1 -Obsoletes: cpuspeed < 1:1.5-16 -Requires: kernel-tools-libs = %{version}-%{release} -%endif -%define __requires_exclude ^%{_bindir}/python -%description -n kernel-tools -This package contains the tools/ directory from the kernel source -and the supporting documentation. - -%package -n kernel-tools-libs -Summary: Libraries for the kernels-tools -License: GPLv2 -%description -n kernel-tools-libs -This package contains the libraries built from the tools/ directory -from the kernel source. - -%package -n kernel-tools-libs-devel -Summary: Assortment of tools for the Linux kernel -License: GPLv2 -Requires: kernel-tools = %{version}-%{release} -%ifarch %{cpupowerarchs} -Provides: cpupowerutils-devel = 1:009-0.6.p1 -Obsoletes: cpupowerutils-devel < 1:009-0.6.p1 -%endif -Requires: kernel-tools-libs = %{version}-%{release} -Provides: kernel-tools-devel -%description -n kernel-tools-libs-devel -This package contains the development files for the tools/ directory from -the kernel source. - -%package -n kernel-tools-debuginfo -Summary: Debug information for package kernel-tools -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release} -AutoReqProv: no -%description -n kernel-tools-debuginfo -This package provides debug information for package kernel-tools. - -# Note that this pattern only works right to match the .build-id -# symlinks because of the trailing nonmatching alternation and -# the leading .*, because of find-debuginfo.sh's buggy handling -# of matching the pattern against the symlinks file. -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{_bindir}/centrino-decode(\.debug)?|.*%%{_bindir}/powernow-k8-decode(\.debug)?|.*%%{_bindir}/cpupower(\.debug)?|.*%%{_libdir}/libcpupower.*|.*%%{_bindir}/turbostat(\.debug)?|.*%%{_bindir}/x86_energy_perf_policy(\.debug)?|.*%%{_bindir}/tmon(\.debug)?|.*%%{_bindir}/lsgpio(\.debug)?|.*%%{_bindir}/gpio-hammer(\.debug)?|.*%%{_bindir}/gpio-event-mon(\.debug)?|.*%%{_bindir}/gpio-watch(\.debug)?|.*%%{_bindir}/iio_event_monitor(\.debug)?|.*%%{_bindir}/iio_generic_buffer(\.debug)?|.*%%{_bindir}/lsiio(\.debug)?|.*%%{_bindir}/intel-speed-select(\.debug)?|.*%%{_bindir}/page_owner_sort(\.debug)?|.*%%{_bindir}/slabinfo(\.debug)?|.*%%{_sbindir}/intel_sdsi(\.debug)?|XXX' -o kernel-tools-debuginfo.list} - -# with_tools -%endif - -%if %{with_bpftool} - -%package -n bpftool -Summary: Inspection and simple manipulation of eBPF programs and maps -License: GPLv2 -%description -n bpftool -This package contains the bpftool, which allows inspection and simple -manipulation of eBPF programs and maps. - -%package -n bpftool-debuginfo -Summary: Debug information for package bpftool -Group: Development/Debug -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release} -AutoReqProv: no -%description -n bpftool-debuginfo -This package provides debug information for the bpftool package. - -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{_sbindir}/bpftool(\.debug)?|XXX' -o bpftool-debuginfo.list} - -# with_bpftool -%endif - -%if %{with_selftests} - -%package selftests-internal -Summary: Kernel samples and selftests -License: GPLv2 -Requires: binutils, bpftool, iproute-tc, nmap-ncat, python3 -%description selftests-internal -Kernel sample programs and selftests. - -# Note that this pattern only works right to match the .build-id -# symlinks because of the trailing nonmatching alternation and -# the leading .*, because of find-debuginfo.sh's buggy handling -# of matching the pattern against the symlinks file. -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{_libexecdir}/(ksamples|kselftests)/.*|XXX' -o selftests-debuginfo.list} - -# with_selftests -%endif - -%if %{with_gcov} -%package gcov -Summary: gcov graph and source files for coverage data collection. -%description gcov -kernel-gcov includes the gcov graph and source files for gcov coverage collection. -%endif - -%package -n kernel-abi-stablelists -Summary: The Red Hat Enterprise Linux kernel ABI symbol stablelists -AutoReqProv: no -%description -n kernel-abi-stablelists -The kABI package contains information pertaining to the Red Hat Enterprise -Linux kernel ABI, including lists of kernel symbols that are needed by -external Linux kernel modules, and a yum plugin to aid enforcement. - -%if %{with_kabidw_base} -%package kernel-kabidw-base-internal -Summary: The baseline dataset for kABI verification using DWARF data -Group: System Environment/Kernel -AutoReqProv: no -%description kernel-kabidw-base-internal -The package contains data describing the current ABI of the Red Hat Enterprise -Linux kernel, suitable for the kabi-dw tool. -%endif - -# -# This macro creates a kernel-<subpackage>-debuginfo package. -# %%kernel_debuginfo_package <subpackage> -# -# Explanation of the find_debuginfo_opts: We build multiple kernels (debug -# pae etc.) so the regex filters those kernels appropriately. We also -# have to package several binaries as part of kernel-devel but getting -# unique build-ids is tricky for these userspace binaries. We don't really -# care about debugging those so we just filter those out and remove it. -%define kernel_debuginfo_package() \ -%package %{?1:%{1}-}debuginfo\ -Summary: Debug information for package %{name}%{?1:-%{1}}\ -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release}\ -Provides: %{name}%{?1:-%{1}}-debuginfo-%{_target_cpu} = %{version}-%{release}\ -Provides: installonlypkg(kernel)\ -AutoReqProv: no\ -%description %{?1:%{1}-}debuginfo\ -This package provides debug information for package %{name}%{?1:-%{1}}.\ -This is required to use SystemTap with %{name}%{?1:-%{1}}-%{KVERREL}.\ -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} --keep-section '.BTF' -p '.*\/usr\/src\/kernels/.*|XXX' -o ignored-debuginfo.list -p '/.*/%%{KVERREL_RE}%{?1:[+]%{1}}/.*|/.*%%{KVERREL_RE}%{?1:\+%{1}}(\.debug)?' -o debuginfo%{?1}.list}\ -%{nil} - -# -# This macro creates a kernel-<subpackage>-devel package. -# %%kernel_devel_package [-m] <subpackage> <pretty-name> -# -%define kernel_devel_package(m) \ -%package %{?1:%{1}-}devel\ -Summary: Development package for building kernel modules to match the %{?2:%{2} }kernel\ -Provides: kernel%{?1:-%{1}}-devel-%{_target_cpu} = %{version}-%{release}\ -Provides: kernel-devel-%{_target_cpu} = %{version}-%{release}%{?1:+%{1}}\ -Provides: kernel-devel-uname-r = %{KVERREL}%{?1:+%{1}}\ -Provides: installonlypkg(kernel)\ -AutoReqProv: no\ -Requires(pre): findutils\ -Requires: findutils\ -Requires: perl-interpreter\ -Requires: openssl-devel\ -Requires: elfutils-libelf-devel\ -Requires: bison\ -Requires: flex\ -Requires: make\ -Requires: gcc\ -%if %{-m:1}%{!-m:0}\ -Requires: kernel-devel-uname-r = %{KVERREL}\ -%endif\ -%description %{?1:%{1}-}devel\ -This package provides kernel headers and makefiles sufficient to build modules\ -against the %{?2:%{2} }kernel package.\ -%{nil} - -# -# This macro creates an empty kernel-<subpackage>-devel-matched package that -# requires both the core and devel packages locked on the same version. -# %%kernel_devel_matched_package [-m] <subpackage> <pretty-name> -# -%define kernel_devel_matched_package(m) \ -%package %{?1:%{1}-}devel-matched\ -Summary: Meta package to install matching core and devel packages for a given %{?2:%{2} }kernel\ -Requires: kernel%{?1:-%{1}}-devel = %{version}-%{release}\ -Requires: kernel%{?1:-%{1}}-core = %{version}-%{release}\ -%description %{?1:%{1}-}devel-matched\ -This meta package is used to install matching core and devel packages for a given %{?2:%{2} }kernel.\ -%{nil} - -# -# kernel-<variant>-ipaclones-internal package -# -%define kernel_ipaclones_package() \ -%package %{?1:%{1}-}ipaclones-internal\ -Summary: *.ipa-clones files generated by -fdump-ipa-clones for kernel%{?1:-%{1}}\ -Group: System Environment/Kernel\ -AutoReqProv: no\ -%description %{?1:%{1}-}ipaclones-internal\ -This package provides *.ipa-clones files.\ -%{nil} - -# -# This macro creates a kernel-<subpackage>-modules-internal package. -# %%kernel_modules_internal_package <subpackage> <pretty-name> -# -%define kernel_modules_internal_package() \ -%package %{?1:%{1}-}modules-internal\ -Summary: Extra kernel modules to match the %{?2:%{2} }kernel\ -Group: System Environment/Kernel\ -Provides: kernel%{?1:-%{1}}-modules-internal-%{_target_cpu} = %{version}-%{release}\ -Provides: kernel%{?1:-%{1}}-modules-internal-%{_target_cpu} = %{version}-%{release}%{?1:+%{1}}\ -Provides: kernel%{?1:-%{1}}-modules-internal = %{version}-%{release}%{?1:+%{1}}\ -Provides: installonlypkg(kernel-module)\ -Provides: kernel%{?1:-%{1}}-modules-internal-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel%{?1:-%{1}}-modules-uname-r = %{KVERREL}%{?1:+%{1}}\ -AutoReq: no\ -AutoProv: yes\ -%description %{?1:%{1}-}modules-internal\ -This package provides kernel modules for the %{?2:%{2} }kernel package for Red Hat internal usage.\ -%{nil} - -# -# This macro creates a kernel-<subpackage>-modules-extra package. -# %%kernel_modules_extra_package [-m] <subpackage> <pretty-name> -# -%define kernel_modules_extra_package(m) \ -%package %{?1:%{1}-}modules-extra\ -Summary: Extra kernel modules to match the %{?2:%{2} }kernel\ -Provides: kernel%{?1:-%{1}}-modules-extra-%{_target_cpu} = %{version}-%{release}\ -Provides: kernel%{?1:-%{1}}-modules-extra-%{_target_cpu} = %{version}-%{release}%{?1:+%{1}}\ -Provides: kernel%{?1:-%{1}}-modules-extra = %{version}-%{release}%{?1:+%{1}}\ -Provides: installonlypkg(kernel-module)\ -Provides: kernel%{?1:-%{1}}-modules-extra-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel%{?1:-%{1}}-modules-uname-r = %{KVERREL}%{?1:+%{1}}\ -%if %{-m:1}%{!-m:0}\ -Requires: kernel-modules-extra-uname-r = %{KVERREL}\ -%endif\ -AutoReq: no\ -AutoProv: yes\ -%description %{?1:%{1}-}modules-extra\ -This package provides less commonly used kernel modules for the %{?2:%{2} }kernel package.\ -%{nil} - -# -# This macro creates a kernel-<subpackage>-modules package. -# %%kernel_modules_package [-m] <subpackage> <pretty-name> -# -%define kernel_modules_package(m) \ -%package %{?1:%{1}-}modules\ -Summary: kernel modules to match the %{?2:%{2}-}core kernel\ -Provides: kernel%{?1:-%{1}}-modules-%{_target_cpu} = %{version}-%{release}\ -Provides: kernel-modules-%{_target_cpu} = %{version}-%{release}%{?1:+%{1}}\ -Provides: kernel-modules = %{version}-%{release}%{?1:+%{1}}\ -Provides: installonlypkg(kernel-module)\ -Provides: kernel%{?1:-%{1}}-modules-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel-uname-r = %{KVERREL}%{?1:+%{1}}\ -%if %{-m:1}%{!-m:0}\ -Requires: kernel-modules-uname-r = %{KVERREL}\ -%endif\ -AutoReq: no\ -AutoProv: yes\ -%description %{?1:%{1}-}modules\ -This package provides commonly used kernel modules for the %{?2:%{2}-}core kernel package.\ -%{nil} - -# -# this macro creates a kernel-<subpackage> meta package. -# %%kernel_meta_package <subpackage> -# -%define kernel_meta_package() \ -%package %{1}\ -summary: kernel meta-package for the %{1} kernel\ -Requires: kernel-%{1}-core-uname-r = %{KVERREL}+%{1}\ -Requires: kernel-%{1}-modules-uname-r = %{KVERREL}+%{1}\ -Provides: installonlypkg(kernel)\ -%description %{1}\ -The meta-package for the %{1} kernel\ -%{nil} - -# -# This macro creates a kernel-<subpackage> and its -devel and -debuginfo too. -# %%define variant_summary The Linux kernel compiled for <configuration> -# %%kernel_variant_package [-n <pretty-name>] [-m] <subpackage> -# -%define kernel_variant_package(n:m) \ -%package %{?1:%{1}-}core\ -Summary: %{variant_summary}\ -Provides: kernel-%{?1:%{1}-}core-uname-r = %{KVERREL}%{?1:+%{1}}\ -Provides: installonlypkg(kernel)\ -%if %{-m:1}%{!-m:0}\ -Requires: kernel-core-uname-r = %{KVERREL}\ -%endif\ -%{expand:%%kernel_reqprovconf}\ -%if %{?1:1} %{!?1:0} \ -%{expand:%%kernel_meta_package %{?1:%{1}}}\ -%endif\ -%{expand:%%kernel_devel_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}} %{-m:%{-m}}}\ -%{expand:%%kernel_devel_matched_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}} %{-m:%{-m}}}\ -%{expand:%%kernel_modules_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}} %{-m:%{-m}}}\ -%{expand:%%kernel_modules_extra_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}} %{-m:%{-m}}}\ -%if %{-m:0}%{!-m:1}\ -%{expand:%%kernel_modules_internal_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}}}\ -%{expand:%%kernel_debuginfo_package %{?1:%{1}}}\ -%endif\ -%{nil} - -# Now, each variant package. - -%if %{with_pae} -%define variant_summary The Linux kernel compiled for Cortex-A15 -%kernel_variant_package lpae -%description lpae-core -This package includes a version of the Linux kernel with support for -Cortex-A15 devices with LPAE and HW virtualisation support -%endif - -%if %{with_zfcpdump} -%define variant_summary The Linux kernel compiled for zfcpdump usage -%kernel_variant_package zfcpdump -%description zfcpdump-core -The kernel package contains the Linux kernel (vmlinuz) for use by the -zfcpdump infrastructure. -# with_zfcpdump -%endif - -%define variant_summary The Linux kernel compiled with extra debugging enabled -%if !%{debugbuildsenabled} -%kernel_variant_package -m debug -%else -%kernel_variant_package debug -%endif -%description debug-core -The kernel package contains the Linux kernel (vmlinuz), the core of any -Linux operating system. The kernel handles the basic functions -of the operating system: memory allocation, process allocation, device -input and output, etc. - -This variant of the kernel has numerous debugging options enabled. -It should only be installed when trying to gather additional information -on kernel bugs, as some of these options impact performance noticably. - -# And finally the main -core package - -%define variant_summary The Linux kernel -%kernel_variant_package -%description core -The kernel package contains the Linux kernel (vmlinuz), the core of any -Linux operating system. The kernel handles the basic functions -of the operating system: memory allocation, process allocation, device -input and output, etc. - -%if %{with_ipaclones} -%kernel_ipaclones_package -%endif - -%prep -# do a few sanity-checks for --with *only builds -%if %{with_baseonly} -%if !%{with_up} -echo "Cannot build --with baseonly, up build is disabled" -exit 1 -%endif -%endif - -# more sanity checking; do it quietly -if [ "%{patches}" != "%%{patches}" ] ; then - for patch in %{patches} ; do - if [ ! -f $patch ] ; then - echo "ERROR: Patch ${patch##/*/} listed in specfile but is missing" - exit 1 - fi - done -fi 2>/dev/null - -patch_command='patch -p1 -F1 -s' -ApplyPatch() -{ - local patch=$1 - shift - if [ ! -f $RPM_SOURCE_DIR/$patch ]; then - exit 1 - fi - if ! grep -E "^Patch[0-9]+: $patch\$" %{_specdir}/${RPM_PACKAGE_NAME}.spec ; then - if [ "${patch:0:8}" != "patch-%{kversion}." ] ; then - echo "ERROR: Patch $patch not listed as a source patch in specfile" - exit 1 - fi - fi 2>/dev/null - case "$patch" in - *.bz2) bunzip2 < "$RPM_SOURCE_DIR/$patch" | $patch_command ${1+"$@"} ;; - *.gz) gunzip < "$RPM_SOURCE_DIR/$patch" | $patch_command ${1+"$@"} ;; - *.xz) unxz < "$RPM_SOURCE_DIR/$patch" | $patch_command ${1+"$@"} ;; - *) $patch_command ${1+"$@"} < "$RPM_SOURCE_DIR/$patch" ;; - esac -} - -# don't apply patch if it's empty -ApplyOptionalPatch() -{ - local patch=$1 - shift - if [ ! -f $RPM_SOURCE_DIR/$patch ]; then - exit 1 - fi - local C=$(wc -l $RPM_SOURCE_DIR/$patch | awk '{print $1}') - if [ "$C" -gt 9 ]; then - ApplyPatch $patch ${1+"$@"} - fi -} - -%setup -q -n kernel-%{tarfile_release} -c -mv linux-%{tarfile_release} linux-%{KVERREL} - -cd linux-%{KVERREL} -cp -a %{SOURCE1} . - -%if !%{nopatches} - -ApplyOptionalPatch patch-%{patchversion}-redhat.patch -%endif - -ApplyOptionalPatch linux-kernel-test.patch - -# END OF PATCH APPLICATIONS - -# Any further pre-build tree manipulations happen here. - -chmod +x scripts/checkpatch.pl -mv COPYING COPYING-%{version}-%{release} - -# This Prevents scripts/setlocalversion from mucking with our version numbers. -touch .scmversion - -# Mangle /usr/bin/python shebangs to /usr/bin/python3 -# Mangle all Python shebangs to be Python 3 explicitly -# -p preserves timestamps -# -n prevents creating ~backup files -# -i specifies the interpreter for the shebang -# This fixes errors such as -# *** ERROR: ambiguous python shebang in /usr/bin/kvm_stat: #!/usr/bin/python. Change it to python3 (or python2) explicitly. -# We patch all sources below for which we got a report/error. -pathfix.py -i "%{__python3} %{py3_shbang_opts}" -p -n \ - tools/kvm/kvm_stat/kvm_stat \ - scripts/show_delta \ - scripts/diffconfig \ - scripts/bloat-o-meter \ - scripts/jobserver-exec \ - tools \ - Documentation \ - scripts/clang-tools - -# only deal with configs if we are going to build for the arch -%ifnarch %nobuildarches - -if [ -L configs ]; then - rm -f configs -fi -mkdir configs -cd configs - -# Drop some necessary files from the source dir into the buildroot -cp $RPM_SOURCE_DIR/kernel-*.config . -cp %{SOURCE80} . -# merge.pl -cp %{SOURCE3000} . -# kernel-local -cp %{SOURCE3001} . -FLAVOR=%{primary_target} SPECVERSION=%{version} ./generate_all_configs.sh %{debugbuildsenabled} - -# Merge in any user-provided local config option changes -%ifnarch %nobuildarches -for i in %{all_arch_configs} -do - mv $i $i.tmp - ./merge.pl %{SOURCE3001} $i.tmp > $i -%if %{with_gcov} - echo "Merging with gcov options" - cat %{SOURCE75} - mv $i $i.tmp - ./merge.pl %{SOURCE75} $i.tmp > $i -%endif - rm $i.tmp -done -%endif - -%if %{with clang_lto} -for i in *aarch64*.config *x86_64*.config; do - sed -i 's/# CONFIG_LTO_CLANG_THIN is not set/CONFIG_LTO_CLANG_THIN=y/' $i - sed -i 's/CONFIG_LTO_NONE=y/# CONFIG_LTO_NONE is not set/' $i -done -%endif - -# Add DUP and kpatch certificates to system trusted keys for RHEL -%if 0%{?rhel} -%if %{signkernel}%{signmodules} -openssl x509 -inform der -in %{SOURCE100} -out rheldup3.pem -openssl x509 -inform der -in %{SOURCE101} -out rhelkpatch1.pem -cat rheldup3.pem rhelkpatch1.pem > ../certs/rhel.pem -%ifarch s390x ppc64le -openssl x509 -inform der -in %{secureboot_ca_0} -out secureboot.pem -cat secureboot.pem >> ../certs/rhel.pem -%endif -for i in *.config; do - sed -i 's@CONFIG_SYSTEM_TRUSTED_KEYS=""@CONFIG_SYSTEM_TRUSTED_KEYS="certs/rhel.pem"@' $i -done -%endif -%endif - -cp %{SOURCE81} . -OPTS="" -%if %{with_configchecks} - OPTS="$OPTS -w -n -c" -%endif -%if %{with clang_lto} -for opt in %{clang_make_opts}; do - OPTS="$OPTS -m $opt" -done -%endif -RHJOBS=$RPM_BUILD_NCPUS PACKAGE_NAME=kernel ./process_configs.sh $OPTS ${specversion} - -cp %{SOURCE82} . -RPM_SOURCE_DIR=$RPM_SOURCE_DIR ./update_scripts.sh %{primary_target} - -# We may want to override files from the primary target in case of building -# against a flavour of it (eg. centos not rhel), thus override it here if -# necessary -if [ "%{primary_target}" == "rhel" ]; then -%if 0%{?centos} - echo "Updating scripts/sources to centos version" - RPM_SOURCE_DIR=$RPM_SOURCE_DIR ./update_scripts.sh centos -%else - echo "Not updating scripts/sources to centos version" -%endif -fi - -# end of kernel config -%endif - -cd .. -# # End of Configs stuff - -# get rid of unwanted files resulting from patch fuzz -find . \( -name "*.orig" -o -name "*~" \) -delete >/dev/null - -# remove unnecessary SCM files -find . -name .gitignore -delete >/dev/null - -cd .. - -### -### build -### -%build - -%if %{with_sparse} -%define sparse_mflags C=1 -%endif - -cp_vmlinux() -{ - eu-strip --remove-comment -o "$2" "$1" -} - -# Note we need to disable these flags for cross builds because the flags -# from redhat-rpm-config assume that host == target so target arch -# flags cause issues with the host compiler. -%if !%{with_cross} -%define build_hostcflags %{?build_cflags} -%define build_hostldflags %{?build_ldflags} -%endif - -%define make %{__make} %{?cross_opts} %{?make_opts} HOSTCFLAGS="%{?build_hostcflags}" HOSTLDFLAGS="%{?build_hostldflags}" - -InitBuildVars() { - # Initialize the kernel .config file and create some variables that are - # needed for the actual build process. - - Variant=$1 - - # Pick the right kernel config file - Config=kernel-%{version}-%{_target_cpu}${Variant:+-${Variant}}.config - DevelDir=/usr/src/kernels/%{KVERREL}${Variant:++${Variant}} - - KernelVer=%{version}-%{release}.%{_target_cpu}${Variant:++${Variant}} - - # make sure EXTRAVERSION says what we want it to say - # Trim the release if this is a CI build, since KERNELVERSION is limited to 64 characters - ShortRel=$(perl -e "print \"%{release}\" =~ s/\.pr\.[0-9A-Fa-f]{32}//r") - perl -p -i -e "s/^EXTRAVERSION.*/EXTRAVERSION = -${ShortRel}.%{_target_cpu}${Variant:++${Variant}}/" Makefile - - # if pre-rc1 devel kernel, must fix up PATCHLEVEL for our versioning scheme - # if we are post rc1 this should match anyway so this won't matter - perl -p -i -e 's/^PATCHLEVEL.*/PATCHLEVEL = %{patchlevel}/' Makefile - - %{make} %{?_smp_mflags} mrproper - cp configs/$Config .config - - %if %{signkernel}%{signmodules} - cp configs/x509.genkey certs/. - %endif - - Arch=`head -1 .config | cut -b 3-` - echo USING ARCH=$Arch - - KCFLAGS="%{?kcflags}" - - # add kpatch flags for base kernel - if [ "$Variant" == "" ]; then - KCFLAGS="$KCFLAGS %{?kpatch_kcflags}" - fi -} - -BuildKernel() { - MakeTarget=$1 - KernelImage=$2 - DoVDSO=$3 - Variant=$4 - InstallName=${5:-vmlinuz} - - DoModules=1 - if [ "$Variant" = "zfcpdump" ]; then - DoModules=0 - fi - - # When the bootable image is just the ELF kernel, strip it. - # We already copy the unstripped file into the debuginfo package. - if [ "$KernelImage" = vmlinux ]; then - CopyKernel=cp_vmlinux - else - CopyKernel=cp - fi - - InitBuildVars $Variant - - echo BUILDING A KERNEL FOR ${Variant} %{_target_cpu}... - - %{make} ARCH=$Arch olddefconfig >/dev/null - - # This ensures build-ids are unique to allow parallel debuginfo - perl -p -i -e "s/^CONFIG_BUILD_SALT.*/CONFIG_BUILD_SALT=\"%{KVERREL}\"/" .config - %{make} ARCH=$Arch KCFLAGS="$KCFLAGS" WITH_GCOV="%{?with_gcov}" %{?_smp_mflags} $MakeTarget %{?sparse_mflags} %{?kernel_mflags} - if [ $DoModules -eq 1 ]; then - %{make} ARCH=$Arch KCFLAGS="$KCFLAGS" WITH_GCOV="%{?with_gcov}" %{?_smp_mflags} modules %{?sparse_mflags} || exit 1 - fi - - mkdir -p $RPM_BUILD_ROOT/%{image_install_path} - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/systemtap -%if %{with_debuginfo} - mkdir -p $RPM_BUILD_ROOT%{debuginfodir}/%{image_install_path} -%endif - -%ifarch %{arm} aarch64 - %{make} ARCH=$Arch dtbs INSTALL_DTBS_PATH=$RPM_BUILD_ROOT/%{image_install_path}/dtb-$KernelVer - %{make} ARCH=$Arch dtbs_install INSTALL_DTBS_PATH=$RPM_BUILD_ROOT/%{image_install_path}/dtb-$KernelVer - cp -r $RPM_BUILD_ROOT/%{image_install_path}/dtb-$KernelVer $RPM_BUILD_ROOT/lib/modules/$KernelVer/dtb - find arch/$Arch/boot/dts -name '*.dtb' -type f -delete -%endif - - # Start installing the results - install -m 644 .config $RPM_BUILD_ROOT/boot/config-$KernelVer - install -m 644 .config $RPM_BUILD_ROOT/lib/modules/$KernelVer/config - install -m 644 System.map $RPM_BUILD_ROOT/boot/System.map-$KernelVer - install -m 644 System.map $RPM_BUILD_ROOT/lib/modules/$KernelVer/System.map - - # We estimate the size of the initramfs because rpm needs to take this size - # into consideration when performing disk space calculations. (See bz #530778) - dd if=/dev/zero of=$RPM_BUILD_ROOT/boot/initramfs-$KernelVer.img bs=1M count=20 - - if [ -f arch/$Arch/boot/zImage.stub ]; then - cp arch/$Arch/boot/zImage.stub $RPM_BUILD_ROOT/%{image_install_path}/zImage.stub-$KernelVer || : - cp arch/$Arch/boot/zImage.stub $RPM_BUILD_ROOT/lib/modules/$KernelVer/zImage.stub-$KernelVer || : - fi - - %if %{signkernel} - if [ "$KernelImage" = vmlinux ]; then - # We can't strip and sign $KernelImage in place, because - # we need to preserve original vmlinux for debuginfo. - # Use a copy for signing. - $CopyKernel $KernelImage $KernelImage.tosign - KernelImage=$KernelImage.tosign - CopyKernel=cp - fi - - # Sign the image if we're using EFI - # aarch64 kernels are gziped EFI images - KernelExtension=${KernelImage##*.} - if [ "$KernelExtension" == "gz" ]; then - SignImage=${KernelImage%.*} - else - SignImage=$KernelImage - fi - - %ifarch x86_64 aarch64 - %pesign -s -i $SignImage -o vmlinuz.tmp -a %{secureboot_ca_0} -c %{secureboot_key_0} -n %{pesign_name_0} - %pesign -s -i vmlinuz.tmp -o vmlinuz.signed -a %{secureboot_ca_1} -c %{secureboot_key_1} -n %{pesign_name_1} - rm vmlinuz.tmp - %endif - %ifarch s390x ppc64le - if [ -x /usr/bin/rpm-sign ]; then - rpm-sign --key "%{pesign_name_0}" --lkmsign $SignImage --output vmlinuz.signed - elif [ $DoModules -eq 1 ]; then - chmod +x scripts/sign-file - ./scripts/sign-file -p sha256 certs/signing_key.pem certs/signing_key.x509 $SignImage vmlinuz.signed - else - mv $SignImage vmlinuz.signed - fi - %endif - - if [ ! -s vmlinuz.signed ]; then - echo "pesigning failed" - exit 1 - fi - mv vmlinuz.signed $SignImage - if [ "$KernelExtension" == "gz" ]; then - gzip -f9 $SignImage - fi - # signkernel - %endif - - $CopyKernel $KernelImage \ - $RPM_BUILD_ROOT/%{image_install_path}/$InstallName-$KernelVer - chmod 755 $RPM_BUILD_ROOT/%{image_install_path}/$InstallName-$KernelVer - cp $RPM_BUILD_ROOT/%{image_install_path}/$InstallName-$KernelVer $RPM_BUILD_ROOT/lib/modules/$KernelVer/$InstallName - - # hmac sign the kernel for FIPS - echo "Creating hmac file: $RPM_BUILD_ROOT/%{image_install_path}/.vmlinuz-$KernelVer.hmac" - ls -l $RPM_BUILD_ROOT/%{image_install_path}/$InstallName-$KernelVer - (cd $RPM_BUILD_ROOT/%{image_install_path} && sha512hmac $InstallName-$KernelVer) > $RPM_BUILD_ROOT/%{image_install_path}/.vmlinuz-$KernelVer.hmac; - cp $RPM_BUILD_ROOT/%{image_install_path}/.vmlinuz-$KernelVer.hmac $RPM_BUILD_ROOT/lib/modules/$KernelVer/.vmlinuz.hmac - - if [ $DoModules -eq 1 ]; then - # Override $(mod-fw) because we don't want it to install any firmware - # we'll get it from the linux-firmware package and we don't want conflicts - %{make} %{?_smp_mflags} ARCH=$Arch INSTALL_MOD_PATH=$RPM_BUILD_ROOT %{?_smp_mflags} modules_install KERNELRELEASE=$KernelVer mod-fw= - fi - -%if %{with_gcov} - # install gcov-needed files to $BUILDROOT/$BUILD/...: - # gcov_info->filename is absolute path - # gcno references to sources can use absolute paths (e.g. in out-of-tree builds) - # sysfs symlink targets (set up at compile time) use absolute paths to BUILD dir - find . \( -name '*.gcno' -o -name '*.[chS]' \) -exec install -D '{}' "$RPM_BUILD_ROOT/$(pwd)/{}" \; -%endif - - # add an a noop %%defattr statement 'cause rpm doesn't like empty file list files - echo '%%defattr(-,-,-)' > ../kernel${Variant:+-${Variant}}-ldsoconf.list - if [ $DoVDSO -ne 0 ]; then - %{make} ARCH=$Arch INSTALL_MOD_PATH=$RPM_BUILD_ROOT vdso_install KERNELRELEASE=$KernelVer - if [ -s ldconfig-kernel.conf ]; then - install -D -m 444 ldconfig-kernel.conf \ - $RPM_BUILD_ROOT/etc/ld.so.conf.d/kernel-$KernelVer.conf - echo /etc/ld.so.conf.d/kernel-$KernelVer.conf >> ../kernel${Variant:+-${Variant}}-ldsoconf.list - fi - - rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/vdso/.build-id - fi - - # And save the headers/makefiles etc for building modules against - # - # This all looks scary, but the end result is supposed to be: - # * all arch relevant include/ files - # * all Makefile/Kconfig files - # * all script/ files - - rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/source - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - (cd $RPM_BUILD_ROOT/lib/modules/$KernelVer ; ln -s build source) - # dirs for additional modules per module-init-tools, kbuild/modules.txt - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/updates - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/weak-updates - # CONFIG_KERNEL_HEADER_TEST generates some extra files in the process of - # testing so just delete - find . -name *.h.s -delete - # first copy everything - cp --parents `find -type f -name "Makefile*" -o -name "Kconfig*"` $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - if [ ! -e Module.symvers ]; then - touch Module.symvers - fi - cp Module.symvers $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp System.map $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - if [ -s Module.markers ]; then - cp Module.markers $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - fi - - # create the kABI metadata for use in packaging - # NOTENOTE: the name symvers is used by the rpm backend - # NOTENOTE: to discover and run the /usr/lib/rpm/fileattrs/kabi.attr - # NOTENOTE: script which dynamically adds exported kernel symbol - # NOTENOTE: checksums to the rpm metadata provides list. - # NOTENOTE: if you change the symvers name, update the backend too - echo "**** GENERATING kernel ABI metadata ****" - gzip -c9 < Module.symvers > $RPM_BUILD_ROOT/boot/symvers-$KernelVer.gz - cp $RPM_BUILD_ROOT/boot/symvers-$KernelVer.gz $RPM_BUILD_ROOT/lib/modules/$KernelVer/symvers.gz - -%if %{with_kabichk} - echo "**** kABI checking is enabled in kernel SPEC file. ****" - chmod 0755 $RPM_SOURCE_DIR/check-kabi - if [ -e $RPM_SOURCE_DIR/Module.kabi_%{_target_cpu}$Variant ]; then - cp $RPM_SOURCE_DIR/Module.kabi_%{_target_cpu}$Variant $RPM_BUILD_ROOT/Module.kabi - $RPM_SOURCE_DIR/check-kabi -k $RPM_BUILD_ROOT/Module.kabi -s Module.symvers || exit 1 - # for now, don't keep it around. - rm $RPM_BUILD_ROOT/Module.kabi - else - echo "**** NOTE: Cannot find reference Module.kabi file. ****" - fi -%endif - -%if %{with_kabidupchk} - echo "**** kABI DUP checking is enabled in kernel SPEC file. ****" - if [ -e $RPM_SOURCE_DIR/Module.kabi_dup_%{_target_cpu}$Variant ]; then - cp $RPM_SOURCE_DIR/Module.kabi_dup_%{_target_cpu}$Variant $RPM_BUILD_ROOT/Module.kabi - $RPM_SOURCE_DIR/check-kabi -k $RPM_BUILD_ROOT/Module.kabi -s Module.symvers || exit 1 - # for now, don't keep it around. - rm $RPM_BUILD_ROOT/Module.kabi - else - echo "**** NOTE: Cannot find DUP reference Module.kabi file. ****" - fi -%endif - -%if %{with_kabidw_base} - # Don't build kabi base for debug kernels - if [ "$Variant" != "zfcpdump" -a "$Variant" != "debug" ]; then - mkdir -p $RPM_BUILD_ROOT/kabi-dwarf - tar xjvf %{SOURCE301} -C $RPM_BUILD_ROOT/kabi-dwarf - - mkdir -p $RPM_BUILD_ROOT/kabi-dwarf/stablelists - tar xjvf %{SOURCE300} -C $RPM_BUILD_ROOT/kabi-dwarf/stablelists - - echo "**** GENERATING DWARF-based kABI baseline dataset ****" - chmod 0755 $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh - $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh generate \ - "$RPM_BUILD_ROOT/kabi-dwarf/stablelists/kabi-current/kabi_stablelist_%{_target_cpu}" \ - "$(pwd)" \ - "$RPM_BUILD_ROOT/kabidw-base/%{_target_cpu}${Variant:+.${Variant}}" || : - - rm -rf $RPM_BUILD_ROOT/kabi-dwarf - fi -%endif - -%if %{with_kabidwchk} - if [ "$Variant" != "zfcpdump" ]; then - mkdir -p $RPM_BUILD_ROOT/kabi-dwarf - tar xjvf %{SOURCE301} -C $RPM_BUILD_ROOT/kabi-dwarf - if [ -d "$RPM_BUILD_ROOT/kabi-dwarf/base/%{_target_cpu}${Variant:+.${Variant}}" ]; then - mkdir -p $RPM_BUILD_ROOT/kabi-dwarf/stablelists - tar xjvf %{SOURCE300} -C $RPM_BUILD_ROOT/kabi-dwarf/stablelists - - echo "**** GENERATING DWARF-based kABI dataset ****" - chmod 0755 $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh - $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh generate \ - "$RPM_BUILD_ROOT/kabi-dwarf/stablelists/kabi-current/kabi_stablelist_%{_target_cpu}" \ - "$(pwd)" \ - "$RPM_BUILD_ROOT/kabi-dwarf/base/%{_target_cpu}${Variant:+.${Variant}}.tmp" || : - - echo "**** kABI DWARF-based comparison report ****" - $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh compare \ - "$RPM_BUILD_ROOT/kabi-dwarf/base/%{_target_cpu}${Variant:+.${Variant}}" \ - "$RPM_BUILD_ROOT/kabi-dwarf/base/%{_target_cpu}${Variant:+.${Variant}}.tmp" || : - echo "**** End of kABI DWARF-based comparison report ****" - else - echo "**** Baseline dataset for kABI DWARF-BASED comparison report not found ****" - fi - - rm -rf $RPM_BUILD_ROOT/kabi-dwarf - fi -%endif - - # then drop all but the needed Makefiles/Kconfig files - rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts - rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include - cp .config $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a scripts $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts/tracing - rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts/spdxcheck.py - -%ifarch s390x - # CONFIG_EXPOLINE_EXTERN=y produces arch/s390/lib/expoline.o - # which is needed during external module build. - if [ -f arch/s390/lib/expoline.o ]; then - cp -a --parents arch/s390/lib/expoline.o $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - fi -%endif - - # Files for 'make scripts' to succeed with kernel-devel. - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/security/selinux/include - cp -a --parents security/selinux/include/classmap.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents security/selinux/include/initial_sid_to_string.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/tools/include/tools - cp -a --parents tools/include/tools/be_byteshift.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/tools/le_byteshift.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - - # Files for 'make prepare' to succeed with kernel-devel. - cp -a --parents tools/include/linux/compiler* $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/linux/types.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/build/Build.include $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/build/Build $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/build/fixdep.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/objtool/sync-check.sh $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/bpf/resolve_btfids $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - - cp --parents security/selinux/include/policycap_names.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents security/selinux/include/policycap.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - - cp -a --parents tools/include/asm-generic $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/linux $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/uapi/asm $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/uapi/asm-generic $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/uapi/linux $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/vdso $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/scripts/utilities.mak $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/lib/subcmd $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/lib/*.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/objtool/*.[ch] $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/objtool/Build $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/objtool/include/objtool/*.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/lib/bpf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/lib/bpf/Build $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - - if [ -f tools/objtool/objtool ]; then - cp -a tools/objtool/objtool $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/tools/objtool/ || : - fi - if [ -f tools/objtool/fixdep ]; then - cp -a tools/objtool/fixdep $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/tools/objtool/ || : - fi - if [ -d arch/$Arch/scripts ]; then - cp -a arch/$Arch/scripts $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/arch/%{_arch} || : - fi - if [ -f arch/$Arch/*lds ]; then - cp -a arch/$Arch/*lds $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/arch/%{_arch}/ || : - fi - if [ -f arch/%{asmarch}/kernel/module.lds ]; then - cp -a --parents arch/%{asmarch}/kernel/module.lds $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - fi - find $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts \( -iname "*.o" -o -iname "*.cmd" \) -exec rm -f {} + -%ifarch ppc64le - cp -a --parents arch/powerpc/lib/crtsavres.[So] $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ -%endif - if [ -d arch/%{asmarch}/include ]; then - cp -a --parents arch/%{asmarch}/include $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - fi -%ifarch aarch64 - # arch/arm64/include/asm/xen references arch/arm - cp -a --parents arch/arm/include/asm/xen $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - # arch/arm64/include/asm/opcodes.h references arch/arm - cp -a --parents arch/arm/include/asm/opcodes.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ -%endif - # include the machine specific headers for ARM variants, if available. -%ifarch %{arm} - if [ -d arch/%{asmarch}/mach-${Variant}/include ]; then - cp -a --parents arch/%{asmarch}/mach-${Variant}/include $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - fi - # include a few files for 'make prepare' - cp -a --parents arch/arm/tools/gen-mach-types $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/arm/tools/mach-types $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - -%endif - cp -a include $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include -%ifarch i686 x86_64 - # files for 'make prepare' to succeed with kernel-devel - cp -a --parents arch/x86/entry/syscalls/syscall_32.tbl $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/entry/syscalls/syscall_64.tbl $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs_32.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs_64.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs_common.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/purgatory/purgatory.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/purgatory/stack.S $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/purgatory/setup-x86_64.S $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/purgatory/entry64.S $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/boot/string.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/boot/string.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/boot/ctype.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - - cp -a --parents scripts/syscalltbl.sh $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents scripts/syscallhdr.sh $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - - cp -a --parents tools/arch/x86/include/asm $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/arch/x86/include/uapi/asm $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/objtool/arch/x86/lib $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/arch/x86/lib/ $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/arch/x86/tools/gen-insn-attr-x86.awk $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/objtool/arch/x86/ $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - -%endif - # Clean up intermediate tools files - find $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/tools \( -iname "*.o" -o -iname "*.cmd" \) -exec rm -f {} + - - # Make sure the Makefile, version.h, and auto.conf have a matching - # timestamp so that external modules can be built - touch -r $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/Makefile \ - $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include/generated/uapi/linux/version.h \ - $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include/config/auto.conf - -%if %{with_debuginfo} - eu-readelf -n vmlinux | grep "Build ID" | awk '{print $NF}' > vmlinux.id - cp vmlinux.id $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/vmlinux.id - - # - # save the vmlinux file for kernel debugging into the kernel-debuginfo rpm - # - mkdir -p $RPM_BUILD_ROOT%{debuginfodir}/lib/modules/$KernelVer - cp vmlinux $RPM_BUILD_ROOT%{debuginfodir}/lib/modules/$KernelVer - if [ -n "%{vmlinux_decompressor}" ]; then - eu-readelf -n %{vmlinux_decompressor} | grep "Build ID" | awk '{print $NF}' > vmlinux.decompressor.id - # Without build-id the build will fail. But for s390 the build-id - # wasn't added before 5.11. In case it is missing prefer not - # packaging the debuginfo over a build failure. - if [ -s vmlinux.decompressor.id ]; then - cp vmlinux.decompressor.id $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/vmlinux.decompressor.id - cp %{vmlinux_decompressor} $RPM_BUILD_ROOT%{debuginfodir}/lib/modules/$KernelVer/vmlinux.decompressor - fi - fi -%endif - - find $RPM_BUILD_ROOT/lib/modules/$KernelVer -name "*.ko" -type f >modnames - - # mark modules executable so that strip-to-file can strip them - xargs --no-run-if-empty chmod u+x < modnames - - # Generate a list of modules for block and networking. - - grep -F /drivers/ modnames | xargs --no-run-if-empty nm -upA | - sed -n 's,^.*/\([^/]*\.ko\): *U \(.*\)$,\1 \2,p' > drivers.undef - - collect_modules_list() - { - sed -r -n -e "s/^([^ ]+) \\.?($2)\$/\\1/p" drivers.undef | - LC_ALL=C sort -u > $RPM_BUILD_ROOT/lib/modules/$KernelVer/modules.$1 - if [ ! -z "$3" ]; then - sed -r -e "/^($3)\$/d" -i $RPM_BUILD_ROOT/lib/modules/$KernelVer/modules.$1 - fi - } - - collect_modules_list networking \ - 'register_netdev|ieee80211_register_hw|usbnet_probe|phy_driver_register|rt(l_|2x00)(pci|usb)_probe|register_netdevice' - collect_modules_list block \ - 'ata_scsi_ioctl|scsi_add_host|scsi_add_host_with_dma|blk_alloc_queue|blk_init_queue|register_mtd_blktrans|scsi_esp_register|scsi_register_device_handler|blk_queue_physical_block_size' 'pktcdvd.ko|dm-mod.ko' - collect_modules_list drm \ - 'drm_open|drm_init' - collect_modules_list modesetting \ - 'drm_crtc_init' - - # detect missing or incorrect license tags - ( find $RPM_BUILD_ROOT/lib/modules/$KernelVer -name '*.ko' | xargs /sbin/modinfo -l | \ - grep -E -v 'GPL( v2)?$|Dual BSD/GPL$|Dual MPL/GPL$|GPL and additional rights$' ) && exit 1 - - remove_depmod_files() - { - # remove files that will be auto generated by depmod at rpm -i time - pushd $RPM_BUILD_ROOT/lib/modules/$KernelVer/ - rm -f modules.{alias,alias.bin,builtin.alias.bin,builtin.bin} \ - modules.{dep,dep.bin,devname,softdep,symbols,symbols.bin} - popd - } - - remove_depmod_files - - # Identify modules in the kernel-modules-extras package - %{SOURCE20} $RPM_BUILD_ROOT lib/modules/$KernelVer $(realpath configs/mod-extra.list) - # Identify modules in the kernel-modules-extras package - %{SOURCE20} $RPM_BUILD_ROOT lib/modules/$KernelVer %{SOURCE84} internal - - # - # Generate the kernel-core and kernel-modules files lists - # - - # Copy the System.map file for depmod to use, and create a backup of the - # full module tree so we can restore it after we're done filtering - cp System.map $RPM_BUILD_ROOT/. - cp configs/filter-*.sh $RPM_BUILD_ROOT/. - pushd $RPM_BUILD_ROOT - mkdir restore - cp -r lib/modules/$KernelVer/* restore/. - - # don't include anything going into kernel-modules-extra in the file lists - xargs rm -rf < mod-extra.list - # don't include anything going int kernel-modules-internal in the file lists - xargs rm -rf < mod-internal.list - - if [ $DoModules -eq 1 ]; then - # Find all the module files and filter them out into the core and - # modules lists. This actually removes anything going into -modules - # from the dir. - find lib/modules/$KernelVer/kernel -name *.ko | sort -n > modules.list - ./filter-modules.sh modules.list %{_target_cpu} - rm filter-*.sh - - # Run depmod on the resulting module tree and make sure it isn't broken - depmod -b . -aeF ./System.map $KernelVer &> depmod.out - if [ -s depmod.out ]; then - echo "Depmod failure" - cat depmod.out - exit 1 - else - rm depmod.out - fi - else - # Ensure important files/directories exist to let the packaging succeed - echo '%%defattr(-,-,-)' > modules.list - echo '%%defattr(-,-,-)' > k-d.list - mkdir -p lib/modules/$KernelVer/kernel - # Add files usually created by make modules, needed to prevent errors - # thrown by depmod during package installation - touch lib/modules/$KernelVer/modules.order - touch lib/modules/$KernelVer/modules.builtin - fi - - remove_depmod_files - - # Go back and find all of the various directories in the tree. We use this - # for the dir lists in kernel-core - find lib/modules/$KernelVer/kernel -mindepth 1 -type d | sort -n > module-dirs.list - - # Cleanup - rm System.map - # Just "cp -r" can be very slow: here, it rewrites _existing files_ - # with open(O_TRUNC). Many filesystems synchronously wait for metadata - # update for such file rewrites (seen in strace as final close syscall - # taking a long time). On a rotational disk, cp was observed to take - # more than 5 minutes on ext4 and more than 15 minutes (!) on xfs. - # With --remove-destination, we avoid this, and copying - # (with enough RAM to cache it) takes 5 seconds: - cp -r --remove-destination restore/* lib/modules/$KernelVer/. - rm -rf restore - popd - - # Make sure the files lists start with absolute paths or rpmbuild fails. - # Also add in the dir entries - sed -e 's/^lib*/\/lib/' %{?zipsed} $RPM_BUILD_ROOT/k-d.list > ../kernel${Variant:+-${Variant}}-modules.list - sed -e 's/^lib*/%dir \/lib/' %{?zipsed} $RPM_BUILD_ROOT/module-dirs.list > ../kernel${Variant:+-${Variant}}-core.list - sed -e 's/^lib*/\/lib/' %{?zipsed} $RPM_BUILD_ROOT/modules.list >> ../kernel${Variant:+-${Variant}}-core.list - sed -e 's/^lib*/\/lib/' %{?zipsed} $RPM_BUILD_ROOT/mod-extra.list >> ../kernel${Variant:+-${Variant}}-modules-extra.list - sed -e 's/^lib*/\/lib/' %{?zipsed} $RPM_BUILD_ROOT/mod-internal.list >> ../kernel${Variant:+-${Variant}}-modules-internal.list - - # Cleanup - rm -f $RPM_BUILD_ROOT/k-d.list - rm -f $RPM_BUILD_ROOT/modules.list - rm -f $RPM_BUILD_ROOT/module-dirs.list - rm -f $RPM_BUILD_ROOT/mod-extra.list - rm -f $RPM_BUILD_ROOT/mod-internal.list - -%if %{signmodules} - if [ $DoModules -eq 1 ]; then - # Save the signing keys so we can sign the modules in __modsign_install_post - cp certs/signing_key.pem certs/signing_key.pem.sign${Variant:++${Variant}} - cp certs/signing_key.x509 certs/signing_key.x509.sign${Variant:++${Variant}} - fi -%endif - - # Move the devel headers out of the root file system - mkdir -p $RPM_BUILD_ROOT/usr/src/kernels - mv $RPM_BUILD_ROOT/lib/modules/$KernelVer/build $RPM_BUILD_ROOT/$DevelDir - - # This is going to create a broken link during the build, but we don't use - # it after this point. We need the link to actually point to something - # when kernel-devel is installed, and a relative link doesn't work across - # the F17 UsrMove feature. - ln -sf $DevelDir $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - -%ifnarch armv7hl - # Generate vmlinux.h and put it to kernel-devel path - bpftool btf dump file vmlinux format c > $RPM_BUILD_ROOT/$DevelDir/vmlinux.h -%endif - - # prune junk from kernel-devel - find $RPM_BUILD_ROOT/usr/src/kernels -name ".*.cmd" -delete - - # Red Hat UEFI Secure Boot CA cert, which can be used to authenticate the kernel - mkdir -p $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer - %ifarch x86_64 aarch64 - install -m 0644 %{secureboot_ca_0} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca-20200609.cer - install -m 0644 %{secureboot_ca_1} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca-20140212.cer - ln -s kernel-signing-ca-20200609.cer $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca.cer - %else - install -m 0644 %{secureboot_ca_0} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca.cer - %endif - %ifarch s390x ppc64le - if [ $DoModules -eq 1 ]; then - if [ -x /usr/bin/rpm-sign ]; then - install -m 0644 %{secureboot_key_0} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/%{signing_key_filename} - else - install -m 0644 certs/signing_key.x509.sign${Variant:++${Variant}} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca.cer - openssl x509 -in certs/signing_key.pem.sign${Variant:++${Variant}} -outform der -out $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/%{signing_key_filename} - chmod 0644 $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/%{signing_key_filename} - fi - fi - %endif - -%if %{with_ipaclones} - MAXPROCS=$(echo %{?_smp_mflags} | sed -n 's/-j\s*\([0-9]\+\)/\1/p') - if [ -z "$MAXPROCS" ]; then - MAXPROCS=1 - fi - if [ "$Variant" == "" ]; then - mkdir -p $RPM_BUILD_ROOT/$DevelDir-ipaclones - find . -name '*.ipa-clones' | xargs -i{} -r -n 1 -P $MAXPROCS install -m 644 -D "{}" "$RPM_BUILD_ROOT/$DevelDir-ipaclones/{}" - fi -%endif - -} - -### -# DO it... -### - -# prepare directories -rm -rf $RPM_BUILD_ROOT -mkdir -p $RPM_BUILD_ROOT/boot -mkdir -p $RPM_BUILD_ROOT%{_libexecdir} - -cd linux-%{KVERREL} - - -%if %{with_debug} -BuildKernel %make_target %kernel_image %{_use_vdso} debug -%endif - -%if %{with_zfcpdump} -BuildKernel %make_target %kernel_image %{_use_vdso} zfcpdump -%endif - -%if %{with_pae} -BuildKernel %make_target %kernel_image %{use_vdso} lpae -%endif - -%if %{with_up} -BuildKernel %make_target %kernel_image %{_use_vdso} -%endif - -%ifnarch noarch i686 -%if !%{with_debug} && !%{with_zfcpdump} && !%{with_pae} && !%{with_up} -# If only building the user space tools, then initialize the build environment -# and some variables so that the various userspace tools can be built. -InitBuildVars -%endif -%endif - -%ifarch aarch64 -%global perf_build_extra_opts CORESIGHT=1 -%endif -%global perf_make \ - %{__make} %{?make_opts} EXTRA_CFLAGS="${RPM_OPT_FLAGS}" LDFLAGS="%{__global_ldflags}" %{?cross_opts} -C tools/perf V=1 NO_PERF_READ_VDSO32=1 NO_PERF_READ_VDSOX32=1 WERROR=0 NO_LIBUNWIND=1 HAVE_CPLUS_DEMANGLE=1 NO_GTK2=1 NO_STRLCPY=1 NO_BIONIC=1 LIBBPF_DYNAMIC=1 LIBTRACEEVENT_DYNAMIC=1 %{?perf_build_extra_opts} prefix=%{_prefix} PYTHON=%{__python3} -%if %{with_perf} -# perf -# make sure check-headers.sh is executable -chmod +x tools/perf/check-headers.sh -%{perf_make} DESTDIR=$RPM_BUILD_ROOT all -%endif - -%global tools_make \ - CFLAGS="${RPM_OPT_FLAGS}" LDFLAGS="%{__global_ldflags}" %{make} %{?make_opts} - -%if %{with_tools} -%ifarch %{cpupowerarchs} -# cpupower -# make sure version-gen.sh is executable. -chmod +x tools/power/cpupower/utils/version-gen.sh -%{tools_make} %{?_smp_mflags} -C tools/power/cpupower CPUFREQ_BENCH=false DEBUG=false -%ifarch x86_64 - pushd tools/power/cpupower/debug/x86_64 - %{tools_make} %{?_smp_mflags} centrino-decode powernow-k8-decode - popd -%endif -%ifarch x86_64 - pushd tools/power/x86/x86_energy_perf_policy/ - %{tools_make} - popd - pushd tools/power/x86/turbostat - %{tools_make} - popd - pushd tools/power/x86/intel-speed-select - %{tools_make} - popd - pushd tools/arch/x86/intel_sdsi - %{tools_make} CFLAGS="${RPM_OPT_FLAGS}" - popd -%endif -%endif -pushd tools/thermal/tmon/ -%{tools_make} -popd -pushd tools/iio/ -%{tools_make} -popd -pushd tools/gpio/ -%{tools_make} -popd -# build VM tools -pushd tools/vm/ -%{tools_make} slabinfo page_owner_sort -popd -%endif - -if [ -f $DevelDir/vmlinux.h ]; then - RPM_VMLINUX_H=$DevelDir/vmlinux.h -fi - -%global bpftool_make \ - %{__make} EXTRA_CFLAGS="${RPM_OPT_FLAGS}" EXTRA_LDFLAGS="%{__global_ldflags}" DESTDIR=$RPM_BUILD_ROOT %{?make_opts} VMLINUX_H="${RPM_VMLINUX_H}" V=1 -%if %{with_bpftool} -pushd tools/bpf/bpftool -%{bpftool_make} -popd -%endif - -%if %{with_selftests} -# Unfortunately, samples/bpf/Makefile expects that the headers are installed -# in the source tree. We installed them previously to $RPM_BUILD_ROOT/usr -# but there's no way to tell the Makefile to take them from there. -%{make} %{?_smp_mflags} headers_install -%{make} %{?_smp_mflags} ARCH=$Arch V=1 M=samples/bpf/ || true - -# Prevent bpf selftests to build bpftool repeatedly: -export BPFTOOL=$(pwd)/tools/bpf/bpftool/bpftool - -pushd tools/testing/selftests -# We need to install here because we need to call make with ARCH set which -# doesn't seem possible to do in the install section. -%{make} %{?_smp_mflags} ARCH=$Arch V=1 TARGETS="bpf vm livepatch net net/forwarding net/mptcp netfilter tc-testing" SKIP_TARGETS="" INSTALL_PATH=%{buildroot}%{_libexecdir}/kselftests VMLINUX_H="${RPM_VMLINUX_H}" install - -# 'make install' for bpf is broken and upstream refuses to fix it. -# Install the needed files manually. -for dir in bpf bpf/no_alu32 bpf/progs; do - # In ARK, the rpm build continues even if some of the selftests - # cannot be built. It's not always possible to build selftests, - # as upstream sometimes dependens on too new llvm version or has - # other issues. If something did not get built, just skip it. - test -d $dir || continue - mkdir -p %{buildroot}%{_libexecdir}/kselftests/$dir - find $dir -maxdepth 1 -type f \( -executable -o -name '*.py' -o -name settings -o \ - -name 'btf_dump_test_case_*.c' -o -name '*.ko' -o \ - -name '*.o' -exec sh -c 'readelf -h "{}" | grep -q "^ Machine:.*BPF"' \; \) -print0 | \ - xargs -0 cp -t %{buildroot}%{_libexecdir}/kselftests/$dir || true -done -popd -export -n BPFTOOL -%endif - -%if %{with_doc} -# Make the HTML pages. -%{__make} PYTHON=/usr/bin/python3 htmldocs || %{doc_build_fail} - -# sometimes non-world-readable files sneak into the kernel source tree -chmod -R a=rX Documentation -find Documentation -type d | xargs chmod u+w -%endif - -# In the modsign case, we do 3 things. 1) We check the "variant" and hard -# code the value in the following invocations. This is somewhat sub-optimal -# but we're doing this inside of an RPM macro and it isn't as easy as it -# could be because of that. 2) We restore the .tmp_versions/ directory from -# the one we saved off in BuildKernel above. This is to make sure we're -# signing the modules we actually built/installed in that variant. 3) We -# grab the arch and invoke mod-sign.sh command to actually sign the modules. -# -# We have to do all of those things _after_ find-debuginfo runs, otherwise -# that will strip the signature off of the modules. -# -# Don't sign modules for the zfcpdump variant as it is monolithic. - -%define __modsign_install_post \ - if [ "%{signmodules}" -eq "1" ]; then \ - if [ "%{with_pae}" -ne "0" ]; then \ - %{modsign_cmd} certs/signing_key.pem.sign+lpae certs/signing_key.x509.sign+lpae $RPM_BUILD_ROOT/lib/modules/%{KVERREL}+lpae/ \ - fi \ - if [ "%{with_debug}" -ne "0" ]; then \ - %{modsign_cmd} certs/signing_key.pem.sign+debug certs/signing_key.x509.sign+debug $RPM_BUILD_ROOT/lib/modules/%{KVERREL}+debug/ \ - fi \ - if [ "%{with_up}" -ne "0" ]; then \ - %{modsign_cmd} certs/signing_key.pem.sign certs/signing_key.x509.sign $RPM_BUILD_ROOT/lib/modules/%{KVERREL}/ \ - fi \ - fi \ - if [ "%{zipmodules}" -eq "1" ]; then \ - find $RPM_BUILD_ROOT/lib/modules/ -type f -name '*.ko' | xargs -P${RPM_BUILD_NCPUS} -r xz; \ - fi \ -%{nil} - -### -### Special hacks for debuginfo subpackages. -### - -# This macro is used by %%install, so we must redefine it before that. -%define debug_package %{nil} - -%if %{with_debuginfo} - -%ifnarch noarch -%global __debug_package 1 -%files -f debugfiles.list debuginfo-common-%{_target_cpu} -%endif - -%endif - -# We don't want to package debuginfo for self-tests and samples but -# we have to delete them to avoid an error messages about unpackaged -# files. -# Delete the debuginfo for kernel-devel files -%define __remove_unwanted_dbginfo_install_post \ - if [ "%{with_selftests}" -ne "0" ]; then \ - rm -rf $RPM_BUILD_ROOT/usr/lib/debug/usr/libexec/ksamples; \ - rm -rf $RPM_BUILD_ROOT/usr/lib/debug/usr/libexec/kselftests; \ - fi \ - rm -rf $RPM_BUILD_ROOT/usr/lib/debug/usr/src; \ -%{nil} - -# -# Disgusting hack alert! We need to ensure we sign modules *after* all -# invocations of strip occur, which is in __debug_install_post if -# find-debuginfo.sh runs, and __os_install_post if not. -# -%define __spec_install_post \ - %{?__debug_package:%{__debug_install_post}}\ - %{__arch_install_post}\ - %{__os_install_post}\ - %{__remove_unwanted_dbginfo_install_post}\ - %{__modsign_install_post} - -### -### install -### - -%install - -cd linux-%{KVERREL} - -%if %{with_doc} -docdir=$RPM_BUILD_ROOT%{_datadir}/doc/kernel-doc-%{specversion}-%{pkgrelease} - -# copy the source over -mkdir -p $docdir -tar -h -f - --exclude=man --exclude='.*' -c Documentation | tar xf - -C $docdir - -# with_doc -%endif - -# We have to do the headers install before the tools install because the -# kernel headers_install will remove any header files in /usr/include that -# it doesn't install itself. - -%if %{with_headers} -# Install kernel headers -%{__make} ARCH=%{hdrarch} INSTALL_HDR_PATH=$RPM_BUILD_ROOT/usr headers_install - -find $RPM_BUILD_ROOT/usr/include \ - \( -name .install -o -name .check -o \ - -name ..install.cmd -o -name ..check.cmd \) -delete - -%endif - -%if %{with_cross_headers} -%if 0%{?fedora} -HDR_ARCH_LIST='arm arm64 powerpc s390 x86' -%else -HDR_ARCH_LIST='arm64 powerpc s390 x86' -%endif -mkdir -p $RPM_BUILD_ROOT/usr/tmp-headers - -for arch in $HDR_ARCH_LIST; do - mkdir $RPM_BUILD_ROOT/usr/tmp-headers/arch-${arch} - %{__make} ARCH=${arch} INSTALL_HDR_PATH=$RPM_BUILD_ROOT/usr/tmp-headers/arch-${arch} headers_install -done - -find $RPM_BUILD_ROOT/usr/tmp-headers \ - \( -name .install -o -name .check -o \ - -name ..install.cmd -o -name ..check.cmd \) -delete - -# Copy all the architectures we care about to their respective asm directories -for arch in $HDR_ARCH_LIST ; do - mkdir -p $RPM_BUILD_ROOT/usr/${arch}-linux-gnu/include - mv $RPM_BUILD_ROOT/usr/tmp-headers/arch-${arch}/include/* $RPM_BUILD_ROOT/usr/${arch}-linux-gnu/include/ -done - -rm -rf $RPM_BUILD_ROOT/usr/tmp-headers -%endif - -%if %{with_kernel_abi_stablelists} -# kabi directory -INSTALL_KABI_PATH=$RPM_BUILD_ROOT/lib/modules/ -mkdir -p $INSTALL_KABI_PATH - -# install kabi releases directories -tar xjvf %{SOURCE300} -C $INSTALL_KABI_PATH -# with_kernel_abi_stablelists -%endif - -%if %{with_perf} -# perf tool binary and supporting scripts/binaries -%{perf_make} DESTDIR=$RPM_BUILD_ROOT lib=%{_lib} install-bin -# remove the 'trace' symlink. -rm -f %{buildroot}%{_bindir}/trace - -# For both of the below, yes, this should be using a macro but right now -# it's hard coded and we don't actually want it anyway right now. -# Whoever wants examples can fix it up! - -# remove examples -rm -rf %{buildroot}/usr/lib/perf/examples -rm -rf %{buildroot}/usr/lib/perf/include - -# python-perf extension -%{perf_make} DESTDIR=$RPM_BUILD_ROOT install-python_ext - -# perf man pages (note: implicit rpm magic compresses them later) -mkdir -p %{buildroot}/%{_mandir}/man1 -%{perf_make} DESTDIR=$RPM_BUILD_ROOT install-man - -# remove any tracevent files, eg. its plugins still gets built and installed, -# even if we build against system's libtracevent during perf build (by setting -# LIBTRACEEVENT_DYNAMIC=1 above in perf_make macro). Those files should already -# ship with libtraceevent package. -rm -rf %{buildroot}%{_libdir}/traceevent -%endif - -%if %{with_tools} -%ifarch %{cpupowerarchs} -%{make} -C tools/power/cpupower DESTDIR=$RPM_BUILD_ROOT libdir=%{_libdir} mandir=%{_mandir} CPUFREQ_BENCH=false install -rm -f %{buildroot}%{_libdir}/*.{a,la} -%find_lang cpupower -mv cpupower.lang ../ -%ifarch x86_64 - pushd tools/power/cpupower/debug/x86_64 - install -m755 centrino-decode %{buildroot}%{_bindir}/centrino-decode - install -m755 powernow-k8-decode %{buildroot}%{_bindir}/powernow-k8-decode - popd -%endif -chmod 0755 %{buildroot}%{_libdir}/libcpupower.so* -mkdir -p %{buildroot}%{_unitdir} %{buildroot}%{_sysconfdir}/sysconfig -install -m644 %{SOURCE2000} %{buildroot}%{_unitdir}/cpupower.service -install -m644 %{SOURCE2001} %{buildroot}%{_sysconfdir}/sysconfig/cpupower -%endif -%ifarch x86_64 - mkdir -p %{buildroot}%{_mandir}/man8 - pushd tools/power/x86/x86_energy_perf_policy - %{tools_make} DESTDIR=%{buildroot} install - popd - pushd tools/power/x86/turbostat - %{tools_make} DESTDIR=%{buildroot} install - popd - pushd tools/power/x86/intel-speed-select - %{tools_make} DESTDIR=%{buildroot} install - popd - pushd tools/arch/x86/intel_sdsi - %{tools_make} CFLAGS="${RPM_OPT_FLAGS}" DESTDIR=%{buildroot} install - popd -%endif -pushd tools/thermal/tmon -%{tools_make} INSTALL_ROOT=%{buildroot} install -popd -pushd tools/iio -%{tools_make} DESTDIR=%{buildroot} install -popd -pushd tools/gpio -%{tools_make} DESTDIR=%{buildroot} install -popd -install -m644 -D %{SOURCE2002} %{buildroot}%{_sysconfdir}/logrotate.d/kvm_stat -pushd tools/kvm/kvm_stat -%{__make} INSTALL_ROOT=%{buildroot} install-tools -%{__make} INSTALL_ROOT=%{buildroot} install-man -install -m644 -D kvm_stat.service %{buildroot}%{_unitdir}/kvm_stat.service -popd -# install VM tools -pushd tools/vm/ -install -m755 slabinfo %{buildroot}%{_bindir}/slabinfo -install -m755 page_owner_sort %{buildroot}%{_bindir}/page_owner_sort -popd -%endif - -if [ -f $DevelDir/vmlinux.h ]; then - RPM_VMLINUX_H=$DevelDir/vmlinux.h -fi - -%if %{with_bpftool} -pushd tools/bpf/bpftool -%{bpftool_make} prefix=%{_prefix} bash_compdir=%{_sysconfdir}/bash_completion.d/ mandir=%{_mandir} install doc-install -popd -%endif - -%if %{with_selftests} -pushd samples -install -d %{buildroot}%{_libexecdir}/ksamples -# install bpf samples -pushd bpf -install -d %{buildroot}%{_libexecdir}/ksamples/bpf -find -type f -executable -exec install -m755 {} %{buildroot}%{_libexecdir}/ksamples/bpf \; -install -m755 *.sh %{buildroot}%{_libexecdir}/ksamples/bpf -# test_lwt_bpf.sh compiles test_lwt_bpf.c when run; this works only from the -# kernel tree. Just remove it. -rm %{buildroot}%{_libexecdir}/ksamples/bpf/test_lwt_bpf.sh -install -m644 *_kern.o %{buildroot}%{_libexecdir}/ksamples/bpf || true -install -m644 tcp_bpf.readme %{buildroot}%{_libexecdir}/ksamples/bpf -popd -# install pktgen samples -pushd pktgen -install -d %{buildroot}%{_libexecdir}/ksamples/pktgen -find . -type f -executable -exec install -m755 {} %{buildroot}%{_libexecdir}/ksamples/pktgen/{} \; -find . -type f ! -executable -exec install -m644 {} %{buildroot}%{_libexecdir}/ksamples/pktgen/{} \; -popd -popd -# install vm selftests -pushd tools/testing/selftests/vm -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/vm/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/vm/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/vm/{} \; -popd -# install drivers/net/mlxsw selftests -pushd tools/testing/selftests/drivers/net/mlxsw -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/drivers/net/mlxsw/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/drivers/net/mlxsw/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/drivers/net/mlxsw/{} \; -popd -# install drivers/net/netdevsim selftests -pushd tools/testing/selftests/drivers/net/netdevsim -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/drivers/net/netdevsim/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/drivers/net/netdevsim/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/drivers/net/netdevsim/{} \; -popd -# install net/forwarding selftests -pushd tools/testing/selftests/net/forwarding -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/net/forwarding/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/net/forwarding/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/net/forwarding/{} \; -popd -# install net/mptcp selftests -pushd tools/testing/selftests/net/mptcp -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/net/mptcp/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/net/mptcp/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/net/mptcp/{} \; -popd -# install tc-testing selftests -pushd tools/testing/selftests/tc-testing -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/tc-testing/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/tc-testing/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/tc-testing/{} \; -popd -# install livepatch selftests -pushd tools/testing/selftests/livepatch -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/livepatch/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/livepatch/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/livepatch/{} \; -popd -# install netfilter selftests -pushd tools/testing/selftests/netfilter -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/netfilter/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/netfilter/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/netfilter/{} \; -popd -%endif - -### -### clean -### - -### -### scripts -### - -%if %{with_tools} -%post -n kernel-tools-libs -/sbin/ldconfig - -%postun -n kernel-tools-libs -/sbin/ldconfig -%endif - -# -# This macro defines a %%post script for a kernel*-devel package. -# %%kernel_devel_post [<subpackage>] -# Note we don't run hardlink if ostree is in use, as ostree is -# a far more sophisticated hardlink implementation. -# https://github.com/projectatomic/rpm-ostree/commit/58a79056a889be8814aa51f507b2c7a4dccee526 -# -# The deletion of *.hardlink-temporary files is a temporary workaround -# for this bug in the hardlink binary (fixed in util-linux 2.38): -# https://github.com/util-linux/util-linux/issues/1602 -# -%define kernel_devel_post() \ -%{expand:%%post %{?1:%{1}-}devel}\ -if [ -f /etc/sysconfig/kernel ]\ -then\ - . /etc/sysconfig/kernel || exit $?\ -fi\ -if [ "$HARDLINK" != "no" -a -x /usr/bin/hardlink -a ! -e /run/ostree-booted ] \ -then\ - (cd /usr/src/kernels/%{KVERREL}%{?1:+%{1}} &&\ - /usr/bin/find . -type f | while read f; do\ - hardlink -c /usr/src/kernels/*%{?dist}.*/$f $f > /dev/null\ - done;\ - /usr/bin/find /usr/src/kernels -type f -name '*.hardlink-temporary' -delete\ - )\ -fi\ -%{nil} - -# -# This macro defines a %%post script for a kernel*-modules-extra package. -# It also defines a %%postun script that does the same thing. -# %%kernel_modules_extra_post [<subpackage>] -# -%define kernel_modules_extra_post() \ -%{expand:%%post %{?1:%{1}-}modules-extra}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil}\ -%{expand:%%postun %{?1:%{1}-}modules-extra}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil} - -# -# This macro defines a %%post script for a kernel*-modules-internal package. -# It also defines a %%postun script that does the same thing. -# %%kernel_modules_internal_post [<subpackage>] -# -%define kernel_modules_internal_post() \ -%{expand:%%post %{?1:%{1}-}modules-internal}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil}\ -%{expand:%%postun %{?1:%{1}-}modules-internal}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil} - -# -# This macro defines a %%post script for a kernel*-modules package. -# It also defines a %%postun script that does the same thing. -# %%kernel_modules_post [<subpackage>] -# -%define kernel_modules_post() \ -%{expand:%%post %{?1:%{1}-}modules}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -if [ ! -f %{_localstatedir}/lib/rpm-state/%{name}/installing_core_%{KVERREL}%{?1:+%{1}} ]; then\ - mkdir -p %{_localstatedir}/lib/rpm-state/%{name}\ - touch %{_localstatedir}/lib/rpm-state/%{name}/need_to_run_dracut_%{KVERREL}%{?1:+%{1}}\ -fi\ -%{nil}\ -%{expand:%%postun %{?1:%{1}-}modules}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil}\ -%{expand:%%posttrans %{?1:%{1}-}modules}\ -if [ -f %{_localstatedir}/lib/rpm-state/%{name}/need_to_run_dracut_%{KVERREL}%{?1:+%{1}} ]; then\ - rm -f %{_localstatedir}/lib/rpm-state/%{name}/need_to_run_dracut_%{KVERREL}%{?1:+%{1}}\ - echo "Running: dracut -f --kver %{KVERREL}%{?1:+%{1}}"\ - dracut -f --kver "%{KVERREL}%{?1:+%{1}}" || exit $?\ -fi\ -%{nil} - -# This macro defines a %%posttrans script for a kernel package. -# %%kernel_variant_posttrans [<subpackage>] -# More text can follow to go at the end of this variant's %%post. -# -%define kernel_variant_posttrans() \ -%{expand:%%posttrans %{?1:%{1}-}core}\ -%if 0%{!?fedora:1}\ -if [ -x %{_sbindir}/weak-modules ]\ -then\ - %{_sbindir}/weak-modules --add-kernel %{KVERREL}%{?1:+%{1}} || exit $?\ -fi\ -%endif\ -rm -f %{_localstatedir}/lib/rpm-state/%{name}/installing_core_%{KVERREL}%{?1:+%{1}}\ -/bin/kernel-install add %{KVERREL}%{?1:+%{1}} /lib/modules/%{KVERREL}%{?1:+%{1}}/vmlinuz || exit $?\ -%{nil} - -# -# This macro defines a %%post script for a kernel package and its devel package. -# %%kernel_variant_post [-v <subpackage>] [-r <replace>] -# More text can follow to go at the end of this variant's %%post. -# -%define kernel_variant_post(v:r:) \ -%{expand:%%kernel_devel_post %{?-v*}}\ -%{expand:%%kernel_modules_post %{?-v*}}\ -%{expand:%%kernel_modules_extra_post %{?-v*}}\ -%{expand:%%kernel_modules_internal_post %{?-v*}}\ -%{expand:%%kernel_variant_posttrans %{?-v*}}\ -%{expand:%%post %{?-v*:%{-v*}-}core}\ -%{-r:\ -if [ `uname -i` == "x86_64" -o `uname -i` == "i386" ] &&\ - [ -f /etc/sysconfig/kernel ]; then\ - /bin/sed -r -i -e 's/^DEFAULTKERNEL=%{-r*}$/DEFAULTKERNEL=kernel%{?-v:-%{-v*}}/' /etc/sysconfig/kernel || exit $?\ -fi}\ -mkdir -p %{_localstatedir}/lib/rpm-state/%{name}\ -touch %{_localstatedir}/lib/rpm-state/%{name}/installing_core_%{KVERREL}%{?1:+%{1}}\ -%{nil} - -# -# This macro defines a %%preun script for a kernel package. -# %%kernel_variant_preun <subpackage> -# -%define kernel_variant_preun() \ -%{expand:%%preun %{?1:%{1}-}core}\ -/bin/kernel-install remove %{KVERREL}%{?1:+%{1}} /lib/modules/%{KVERREL}%{?1:+%{1}}/vmlinuz || exit $?\ -if [ -x %{_sbindir}/weak-modules ]\ -then\ - %{_sbindir}/weak-modules --remove-kernel %{KVERREL}%{?1:+%{1}} || exit $?\ -fi\ -%{nil} - -%kernel_variant_preun -%kernel_variant_post -r kernel-smp - -%if %{with_pae} -%kernel_variant_preun lpae -%kernel_variant_post -v lpae -r (kernel|kernel-smp) -%endif - -%if %{with_debug} -%kernel_variant_preun debug -%kernel_variant_post -v debug -%endif - -%if %{with_zfcpdump} -%kernel_variant_preun zfcpdump -%kernel_variant_post -v zfcpdump -%endif - -if [ -x /sbin/ldconfig ] -then - /sbin/ldconfig -X || exit $? -fi - -### -### file lists -### - -%if %{with_headers} -%files headers -/usr/include/* -%endif - -%if %{with_cross_headers} -%files cross-headers -/usr/*-linux-gnu/include/* -%endif - -%if %{with_kernel_abi_stablelists} -%files -n kernel-abi-stablelists -/lib/modules/kabi-* -%endif - -%if %{with_kabidw_base} -%ifarch x86_64 s390x ppc64 ppc64le aarch64 -%files kernel-kabidw-base-internal -%defattr(-,root,root) -/kabidw-base/%{_target_cpu}/* -%endif -%endif - -# only some architecture builds need kernel-doc -%if %{with_doc} -%files doc -%defattr(-,root,root) -%{_datadir}/doc/kernel-doc-%{specversion}-%{pkgrelease}/Documentation/* -%dir %{_datadir}/doc/kernel-doc-%{specversion}-%{pkgrelease}/Documentation -%dir %{_datadir}/doc/kernel-doc-%{specversion}-%{pkgrelease} -%endif - -%if %{with_perf} -%files -n perf -%{_bindir}/perf -%{_libdir}/libperf-jvmti.so -%dir %{_libexecdir}/perf-core -%{_libexecdir}/perf-core/* -%{_datadir}/perf-core/* -%{_mandir}/man[1-8]/perf* -%{_sysconfdir}/bash_completion.d/perf -%doc linux-%{KVERREL}/tools/perf/Documentation/examples.txt -%{_docdir}/perf-tip/tips.txt - -%files -n python3-perf -%{python3_sitearch}/* - -%if %{with_debuginfo} -%files -f perf-debuginfo.list -n perf-debuginfo - -%files -f python3-perf-debuginfo.list -n python3-perf-debuginfo -%endif -# with_perf -%endif - -%if %{with_tools} -%ifnarch %{cpupowerarchs} -%files -n kernel-tools -%else -%files -n kernel-tools -f cpupower.lang -%{_bindir}/cpupower -%{_datadir}/bash-completion/completions/cpupower -%ifarch x86_64 -%{_bindir}/centrino-decode -%{_bindir}/powernow-k8-decode -%endif -%{_unitdir}/cpupower.service -%{_mandir}/man[1-8]/cpupower* -%config(noreplace) %{_sysconfdir}/sysconfig/cpupower -%ifarch x86_64 -%{_bindir}/x86_energy_perf_policy -%{_mandir}/man8/x86_energy_perf_policy* -%{_bindir}/turbostat -%{_mandir}/man8/turbostat* -%{_bindir}/intel-speed-select -%{_sbindir}/intel_sdsi -%endif -# cpupowerarchs -%endif -%{_bindir}/tmon -%{_bindir}/iio_event_monitor -%{_bindir}/iio_generic_buffer -%{_bindir}/lsiio -%{_bindir}/lsgpio -%{_bindir}/gpio-hammer -%{_bindir}/gpio-event-mon -%{_bindir}/gpio-watch -%{_mandir}/man1/kvm_stat* -%{_bindir}/kvm_stat -%{_unitdir}/kvm_stat.service -%config(noreplace) %{_sysconfdir}/logrotate.d/kvm_stat -%{_bindir}/page_owner_sort -%{_bindir}/slabinfo - -%if %{with_debuginfo} -%files -f kernel-tools-debuginfo.list -n kernel-tools-debuginfo -%endif - -%ifarch %{cpupowerarchs} -%files -n kernel-tools-libs -%{_libdir}/libcpupower.so.0 -%{_libdir}/libcpupower.so.0.0.1 - -%files -n kernel-tools-libs-devel -%{_libdir}/libcpupower.so -%{_includedir}/cpufreq.h -%endif -# with_tools -%endif - -%if %{with_bpftool} -%files -n bpftool -%{_sbindir}/bpftool -%{_sysconfdir}/bash_completion.d/bpftool -%{_mandir}/man8/bpftool-cgroup.8.gz -%{_mandir}/man8/bpftool-gen.8.gz -%{_mandir}/man8/bpftool-iter.8.gz -%{_mandir}/man8/bpftool-link.8.gz -%{_mandir}/man8/bpftool-map.8.gz -%{_mandir}/man8/bpftool-prog.8.gz -%{_mandir}/man8/bpftool-perf.8.gz -%{_mandir}/man8/bpftool.8.gz -%{_mandir}/man8/bpftool-net.8.gz -%{_mandir}/man8/bpftool-feature.8.gz -%{_mandir}/man8/bpftool-btf.8.gz -%{_mandir}/man8/bpftool-struct_ops.8.gz - -%if %{with_debuginfo} -%files -f bpftool-debuginfo.list -n bpftool-debuginfo -%defattr(-,root,root) -%endif -%endif - -%if %{with_selftests} -%files selftests-internal -%{_libexecdir}/ksamples -%{_libexecdir}/kselftests -%endif - -# empty meta-package -%ifnarch %nobuildarches noarch -%files -%endif - -%if %{with_gcov} -%ifnarch %nobuildarches noarch -%files gcov -%{_builddir} -%endif -%endif - -# This is %%{image_install_path} on an arch where that includes ELF files, -# or empty otherwise. -%define elf_image_install_path %{?kernel_image_elf:%{image_install_path}} - -# -# This macro defines the %%files sections for a kernel package -# and its devel and debuginfo packages. -# %%kernel_variant_files [-k vmlinux] <use_vdso> <condition> <subpackage> -# -%define kernel_variant_files(k:) \ -%if %{2}\ -%{expand:%%files -f kernel-%{?3:%{3}-}core.list %{?1:-f kernel-%{?3:%{3}-}ldsoconf.list} %{?3:%{3}-}core}\ -%{!?_licensedir:%global license %%doc}\ -%license linux-%{KVERREL}/COPYING-%{version}-%{release}\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/%{?-k:%{-k*}}%{!?-k:vmlinuz}\ -%ghost /%{image_install_path}/%{?-k:%{-k*}}%{!?-k:vmlinuz}-%{KVERREL}%{?3:+%{3}}\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/.vmlinuz.hmac \ -%ghost /%{image_install_path}/.vmlinuz-%{KVERREL}%{?3:+%{3}}.hmac \ -%ifarch %{arm} aarch64\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/dtb \ -%ghost /%{image_install_path}/dtb-%{KVERREL}%{?3:+%{3}} \ -%endif\ -%attr(0600, root, root) /lib/modules/%{KVERREL}%{?3:+%{3}}/System.map\ -%ghost %attr(0600, root, root) /boot/System.map-%{KVERREL}%{?3:+%{3}}\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/symvers.gz\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/config\ -%ghost %attr(0600, root, root) /boot/symvers-%{KVERREL}%{?3:+%{3}}.gz\ -%ghost %attr(0600, root, root) /boot/initramfs-%{KVERREL}%{?3:+%{3}}.img\ -%ghost %attr(0644, root, root) /boot/config-%{KVERREL}%{?3:+%{3}}\ -%dir /lib/modules\ -%dir /lib/modules/%{KVERREL}%{?3:+%{3}}\ -%dir /lib/modules/%{KVERREL}%{?3:+%{3}}/kernel\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/build\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/source\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/updates\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/weak-updates\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/systemtap\ -%{_datadir}/doc/kernel-keys/%{KVERREL}%{?3:+%{3}}\ -%if %{1}\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/vdso\ -%endif\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/modules.*\ -%{expand:%%files -f kernel-%{?3:%{3}-}modules.list %{?3:%{3}-}modules}\ -%{expand:%%files %{?3:%{3}-}devel}\ -%defverify(not mtime)\ -/usr/src/kernels/%{KVERREL}%{?3:+%{3}}\ -%{expand:%%files %{?3:%{3}-}devel-matched}\ -%{expand:%%files -f kernel-%{?3:%{3}-}modules-extra.list %{?3:%{3}-}modules-extra}\ -%config(noreplace) /etc/modprobe.d/*-blacklist.conf\ -%{expand:%%files -f kernel-%{?3:%{3}-}modules-internal.list %{?3:%{3}-}modules-internal}\ -%if %{with_debuginfo}\ -%ifnarch noarch\ -%{expand:%%files -f debuginfo%{?3}.list %{?3:%{3}-}debuginfo}\ -%endif\ -%endif\ -%if %{?3:1} %{!?3:0}\ -%{expand:%%files %{3}}\ -%endif\ -%endif\ -%{nil} - -%kernel_variant_files %{_use_vdso} %{with_up} -%kernel_variant_files %{_use_vdso} %{with_debug} debug -%if %{with_debug_meta} -%files debug -%files debug-core -%files debug-devel -%files debug-devel-matched -%files debug-modules -%files debug-modules-extra -%endif -%kernel_variant_files %{use_vdso} %{with_pae} lpae -%kernel_variant_files %{_use_vdso} %{with_zfcpdump} zfcpdump - -%define kernel_variant_ipaclones(k:) \ -%if %{1}\ -%if %{with_ipaclones}\ -%{expand:%%files %{?2:%{2}-}ipaclones-internal}\ -%defattr(-,root,root)\ -%defverify(not mtime)\ -/usr/src/kernels/%{KVERREL}%{?2:+%{2}}-ipaclones\ -%endif\ -%endif\ -%{nil} - -%kernel_variant_ipaclones %{with_up} - -# plz don't put in a version string unless you're going to tag -# and build. -# -# -%changelog Mon Mar 28 2022 Fedora Kernel Team <kernel-team@xxxxxxxxxxxxxxxxx> [5.16.0-0.rc5.fce15c45d3fb.6.test] - -### -# The following Emacs magic makes C-c C-e use UTC dates. -# Local Variables: -# rpm-change-log-uses-utc: t -# End: -### diff --git a/redhat/self-test/data/centos-fce15c45d3fb.fc25.spec b/redhat/self-test/data/centos-fce15c45d3fb.fc25.spec index blahblah..blahblah 100755 --- a/redhat/self-test/data/centos-fce15c45d3fb.fc25.spec +++ b/redhat/self-test/data/centos-fce15c45d3fb.fc25.spec @@ -1,125 +1,7 @@ -# All Global changes to build and install go here. -# Per the below section about __spec_install_pre, any rpm -# environment changes that affect %%install need to go -# here before the %%install macro is pre-built. - -# Disable LTO in userspace packages. -%global _lto_cflags %{nil} - -# Option to enable compiling with clang instead of gcc. -%bcond_with toolchain_clang - -%if %{with toolchain_clang} -%global toolchain clang -%endif - -# Compile the kernel with LTO (only supported when building with clang). -%bcond_with clang_lto - -%if %{with clang_lto} && %{without toolchain_clang} -{error:clang_lto requires --with toolchain_clang} -%endif - -# Cross compile on copr for arm -# See https://bugzilla.redhat.com/1879599 -%if 0%{?_with_cross_arm:1} -%global _target_cpu armv7hl -%global _arch arm -%global _build_arch arm -%global _with_cross 1 -%endif - -# The kernel's %%install section is special -# Normally the %%install section starts by cleaning up the BUILD_ROOT -# like so: -# -# %%__spec_install_pre %%{___build_pre}\ -# [ "$RPM_BUILD_ROOT" != "/" ] && rm -rf "${RPM_BUILD_ROOT}"\ -# mkdir -p `dirname "$RPM_BUILD_ROOT"`\ -# mkdir "$RPM_BUILD_ROOT"\ -# %%{nil} -# -# But because of kernel variants, the %%build section, specifically -# BuildKernel(), moves each variant to its final destination as the -# variant is built. This violates the expectation of the %%install -# section. As a result we snapshot the current env variables and -# purposely leave out the removal section. All global wide changes -# should be added above this line otherwise the %%install section -# will not see them. -%global __spec_install_pre %{___build_pre} - -# At the time of this writing (2019-03), RHEL8 packages use w2.xzdio -# compression for rpms (xz, level 2). -# Kernel has several large (hundreds of mbytes) rpms, they take ~5 mins -# to compress by single-threaded xz. Switch to threaded compression, -# and from level 2 to 3 to keep compressed sizes close to "w2" results. -# -# NB: if default compression in /usr/lib/rpm/redhat/macros ever changes, -# this one might need tweaking (e.g. if default changes to w3.xzdio, -# change below to w4T.xzdio): -# -# This is disabled on i686 as it triggers oom errors - -%ifnarch i686 -%define _binary_payload w3T.xzdio -%endif - -Summary: The Linux kernel -%if 0%{?fedora} -%define secure_boot_arch x86_64 -%else -%define secure_boot_arch x86_64 aarch64 s390x ppc64le -%endif - -# Signing for secure boot authentication -%ifarch %{secure_boot_arch} -%global signkernel 1 -%else -%global signkernel 0 -%endif - -# Sign modules on all arches -%global signmodules 1 - -# Compress modules only for architectures that build modules -%ifarch noarch -%global zipmodules 0 -%else -%global zipmodules 1 -%endif - -%if %{zipmodules} -%global zipsed -e 's/\.ko$/\.ko.xz/' -# for parallel xz processes, replace with 1 to go back to single process -%endif - -%if 0%{?fedora} -%define primary_target fedora -%else -%define primary_target rhel -%endif - -# -# genspec.sh variables -# - -# Include Fedora files %global include_fedora 1 -# Include RHEL files %global include_rhel 1 -# Provide Patchlist.changelog file %global patchlist_changelog 1 -# Set released_kernel to 1 when the upstream source tarball contains a -# kernel release. (This includes prepatch or "rc" releases.) -# Set released_kernel to 0 when the upstream source tarball contains an -# unreleased kernel development snapshot. %global released_kernel 0 -# Set debugbuildsenabled to 1 to build separate base and debug kernels -# (on supported architectures). The kernel-debug-* subpackages will -# contain the debug kernel. -# Set debugbuildsenabled to 0 to not build a separate debug kernel, but -# to build the base kernel using the debug configuration. (Specifying -# the --with-release option overrides this setting.) %define debugbuildsenabled 0 %define buildid .test %define specversion 5.16.0 @@ -127,2924 +9,6 @@ Summary: The Linux kernel %define pkgrelease 0.rc5.fce15c45d3fb.6.test %define kversion 5 %define tarfile_release 5.16.0-0.rc5.fce15c45d3fb.6.test -# This is needed to do merge window version magic %define patchlevel 16 -# allow pkg_release to have configurable %%{?dist} tag %define specrelease 0.rc5.fce15c45d3fb.6%{?buildid}%{?dist} - -# -# End of genspec.sh variables -# - -%define pkg_release %{specrelease} - -# libexec dir is not used by the linker, so the shared object there -# should not be exported to RPM provides -%global __provides_exclude_from ^%{_libexecdir}/kselftests - -# The following build options are enabled by default, but may become disabled -# by later architecture-specific checks. These can also be disabled by using -# --without <opt> in the rpmbuild command, or by forcing these values to 0. -# -# standard kernel -%define with_up %{?_without_up: 0} %{?!_without_up: 1} -# kernel PAE (only valid for ARM (lpae)) -%define with_pae %{?_without_pae: 0} %{?!_without_pae: 1} -# kernel-debug -%define with_debug %{?_without_debug: 0} %{?!_without_debug: 1} -# kernel-zfcpdump (s390 specific kernel for zfcpdump) -%define with_zfcpdump %{?_without_zfcpdump: 0} %{?!_without_zfcpdump: 1} -# kernel-doc -%define with_doc %{?_without_doc: 0} %{?!_without_doc: 1} -# kernel-headers -%define with_headers %{?_without_headers: 0} %{?!_without_headers: 1} -%define with_cross_headers %{?_without_cross_headers: 0} %{?!_without_cross_headers: 1} -# perf -%define with_perf %{?_without_perf: 0} %{?!_without_perf: 1} -# tools -%define with_tools %{?_without_tools: 0} %{?!_without_tools: 1} -# bpf tool -%define with_bpftool %{?_without_bpftool: 0} %{?!_without_bpftool: 1} -# kernel-debuginfo -%define with_debuginfo %{?_without_debuginfo: 0} %{?!_without_debuginfo: 1} -# kernel-abi-stablelists -%define with_kernel_abi_stablelists %{?_without_kernel_abi_stablelists: 0} %{?!_without_kernel_abi_stablelists: 1} -# internal samples and selftests -%define with_selftests %{?_without_selftests: 0} %{?!_without_selftests: 1} -# -# Additional options for user-friendly one-off kernel building: -# -# Only build the base kernel (--with baseonly): -%define with_baseonly %{?_with_baseonly: 1} %{?!_with_baseonly: 0} -# Only build the pae kernel (--with paeonly): -%define with_paeonly %{?_with_paeonly: 1} %{?!_with_paeonly: 0} -# Only build the debug kernel (--with dbgonly): -%define with_dbgonly %{?_with_dbgonly: 1} %{?!_with_dbgonly: 0} -# Control whether we perform a compat. check against published ABI. -%define with_kabichk %{?_without_kabichk: 0} %{?!_without_kabichk: 1} -# Temporarily disable kabi checks until RC. -%define with_kabichk 0 -# Control whether we perform a compat. check against DUP ABI. -%define with_kabidupchk %{?_with_kabidupchk: 1} %{?!_with_kabidupchk: 0} -# -# Control whether to run an extensive DWARF based kABI check. -# Note that this option needs to have baseline setup in SOURCE300. -%define with_kabidwchk %{?_without_kabidwchk: 0} %{?!_without_kabidwchk: 1} -%define with_kabidw_base %{?_with_kabidw_base: 1} %{?!_with_kabidw_base: 0} -# -# Control whether to install the vdso directories. -%define with_vdso_install %{?_without_vdso_install: 0} %{?!_without_vdso_install: 1} -# -# should we do C=1 builds with sparse -%define with_sparse %{?_with_sparse: 1} %{?!_with_sparse: 0} -# -# Cross compile requested? -%define with_cross %{?_with_cross: 1} %{?!_with_cross: 0} -# -# build a release kernel on rawhide -%define with_release %{?_with_release: 1} %{?!_with_release: 0} - -# verbose build, i.e. no silent rules and V=1 -%define with_verbose %{?_with_verbose: 1} %{?!_with_verbose: 0} - -# -# check for mismatched config options -%define with_configchecks %{?_without_configchecks: 0} %{?!_without_configchecks: 1} - -# -# gcov support -%define with_gcov %{?_with_gcov:1}%{?!_with_gcov:0} - -# -# ipa_clone support -%define with_ipaclones %{?_without_ipaclones: 0} %{?!_without_ipaclones: 1} - -# Want to build a vanilla kernel build without any non-upstream patches? -%define with_vanilla %{?_with_vanilla: 1} %{?!_with_vanilla: 0} - -%if 0%{?fedora} -# Kernel headers are being split out into a separate package -%define with_headers 0 -%define with_cross_headers 0 -# no ipa_clone for now -%define with_ipaclones 0 -# no stablelist -%define with_kernel_abi_stablelists 0 -# Fedora builds these separately -%define with_perf 0 -%define with_tools 0 -%define with_bpftool 0 -# selftests turns on bpftool -%define with_selftests 0 -%endif - -%if %{with_verbose} -%define make_opts V=1 -%else -%define make_opts -s -%endif - -%if %{with toolchain_clang} -%ifarch s390x ppc64le -%global llvm_ias 0 -%else -%global llvm_ias 1 -%endif -%global clang_make_opts HOSTCC=clang CC=clang LLVM_IAS=%{llvm_ias} -%if %{with clang_lto} -%global clang_make_opts %{clang_make_opts} LD=ld.lld HOSTLD=ld.lld AR=llvm-ar NM=llvm-nm HOSTAR=llvm-ar HOSTNM=llvm-nm -%endif -%global make_opts %{make_opts} %{clang_make_opts} -# clang does not support the -fdump-ipa-clones option -%global with_ipaclones 0 -%endif - -# turn off debug kernel and kabichk for gcov builds -%if %{with_gcov} -%define with_debug 0 -%define with_kabichk 0 -%define with_kabidupchk 0 -%define with_kabidwchk 0 -%define with_kabidw_base 0 -%define with_kernel_abi_stablelists 0 -%endif - -# turn off kABI DWARF-based check if we're generating the base dataset -%if %{with_kabidw_base} -%define with_kabidwchk 0 -%endif - -# kpatch_kcflags are extra compiler flags applied to base kernel -# -fdump-ipa-clones is enabled only for base kernels on selected arches -%if %{with_ipaclones} -%ifarch x86_64 ppc64le -%define kpatch_kcflags -fdump-ipa-clones -%else -%define with_ipaclones 0 -%endif -%endif - -%define make_target bzImage -%define image_install_path boot - -%define KVERREL %{version}-%{release}.%{_target_cpu} -%define KVERREL_RE %(echo %KVERREL | sed 's/+/[+]/g') -%define hdrarch %_target_cpu -%define asmarch %_target_cpu - -%if 0%{!?nopatches:1} -%define nopatches 0 -%endif - -%if %{with_vanilla} -%define nopatches 1 -%endif - -%if %{with_release} -%define debugbuildsenabled 1 -%endif - -%if !%{with_debuginfo} -%define _enable_debug_packages 0 -%endif -%define debuginfodir /usr/lib/debug -# Needed because we override almost everything involving build-ids -# and debuginfo generation. Currently we rely on the old alldebug setting. -%global _build_id_links alldebug - -# kernel PAE is only built on ARMv7 -%ifnarch armv7hl -%define with_pae 0 -%endif - -# if requested, only build base kernel -%if %{with_baseonly} -%define with_pae 0 -%define with_debug 0 -%define with_vdso_install 0 -%define with_perf 0 -%define with_tools 0 -%define with_bpftool 0 -%define with_kernel_abi_stablelists 0 -%define with_selftests 0 -%define with_cross 0 -%define with_cross_headers 0 -%define with_ipaclones 0 -%endif - -# if requested, only build pae kernel -%if %{with_paeonly} -%define with_up 0 -%define with_debug 0 -%endif - -# if requested, only build debug kernel -%if %{with_dbgonly} -%define with_up 0 -%define with_vdso_install 0 -%define with_perf 0 -%define with_tools 0 -%define with_bpftool 0 -%define with_kernel_abi_stablelists 0 -%define with_selftests 0 -%define with_cross 0 -%define with_cross_headers 0 -%define with_ipaclones 0 -%endif - -# turn off kABI DUP check and DWARF-based check if kABI check is disabled -%if !%{with_kabichk} -%define with_kabidupchk 0 -%define with_kabidwchk 0 -%endif - -%if %{with_vdso_install} -%define use_vdso 1 -%endif - -# selftests require bpftool to be built -%if %{with_selftests} -%define with_bpftool 1 -%endif - -%ifnarch noarch -%define with_kernel_abi_stablelists 0 -%endif - -# Overrides for generic default options - -# only package docs noarch -%ifnarch noarch -%define with_doc 0 -%define doc_build_fail true -%endif - -%if 0%{?fedora} -# don't do debug builds on anything but i686 and x86_64 -%ifnarch i686 x86_64 -%define with_debug 0 -%endif -%endif - -# don't build noarch kernels or headers (duh) -%ifarch noarch -%define with_up 0 -%define with_headers 0 -%define with_cross_headers 0 -%define with_tools 0 -%define with_perf 0 -%define with_bpftool 0 -%define with_selftests 0 -%define with_debug 0 -%define all_arch_configs kernel-%{version}-*.config -%endif - -# sparse blows up on ppc -%ifnarch ppc64le -%define with_sparse 0 -%endif - -# zfcpdump mechanism is s390 only -%ifnarch s390x -%define with_zfcpdump 0 -%endif - -%if 0%{?fedora} -# This is not for Fedora -%define with_zfcpdump 0 -%endif - -# Per-arch tweaks - -%ifarch i686 -%define asmarch x86 -%define hdrarch i386 -%define all_arch_configs kernel-%{version}-i?86*.config -%define kernel_image arch/x86/boot/bzImage -%endif - -%ifarch x86_64 -%define asmarch x86 -%define all_arch_configs kernel-%{version}-x86_64*.config -%define kernel_image arch/x86/boot/bzImage -%endif - -%ifarch ppc64le -%define asmarch powerpc -%define hdrarch powerpc -%define make_target vmlinux -%define kernel_image vmlinux -%define kernel_image_elf 1 -%define use_vdso 0 -%define all_arch_configs kernel-%{version}-ppc64le*.config -%endif - -%ifarch s390x -%define asmarch s390 -%define hdrarch s390 -%define all_arch_configs kernel-%{version}-s390x.config -%define kernel_image arch/s390/boot/bzImage -%define vmlinux_decompressor arch/s390/boot/compressed/vmlinux -%endif - -%ifarch %{arm} -%define all_arch_configs kernel-%{version}-arm*.config -%define skip_nonpae_vdso 1 -%define asmarch arm -%define hdrarch arm -%define make_target bzImage -%define kernel_image arch/arm/boot/zImage -# http://lists.infradead.org/pipermail/linux-arm-kernel/2012-March/091404.html -%define kernel_mflags KALLSYMS_EXTRA_PASS=1 -# we only build headers/perf/tools on the base arm arches -# just like we used to only build them on i386 for x86 -%ifnarch armv7hl -%define with_headers 0 -%define with_cross_headers 0 -%endif -# These currently don't compile on armv7 -%define with_selftests 0 -%endif - -%ifarch aarch64 -%define all_arch_configs kernel-%{version}-aarch64*.config -%define asmarch arm64 -%define hdrarch arm64 -%define make_target Image.gz -%define kernel_image arch/arm64/boot/Image.gz -%endif - -# Should make listnewconfig fail if there's config options -# printed out? -%if %{nopatches} -%define with_configchecks 0 -%endif - -# To temporarily exclude an architecture from being built, add it to -# %%nobuildarches. Do _NOT_ use the ExclusiveArch: line, because if we -# don't build kernel-headers then the new build system will no longer let -# us use the previous build of that package -- it'll just be completely AWOL. -# Which is a BadThing(tm). - -# We only build kernel-headers on the following... -%if 0%{?fedora} -%define nobuildarches i386 -%else -%define nobuildarches i386 i686 %{arm} -%endif - -%ifarch %nobuildarches -# disable BuildKernel commands -%define with_up 0 -%define with_debug 0 -%define with_pae 0 -%define with_zfcpdump 0 - -%define with_debuginfo 0 -%define with_perf 0 -%define with_tools 0 -%define with_bpftool 0 -%define with_selftests 0 -%define _enable_debug_packages 0 -%endif - -# Architectures we build tools/cpupower on -%if 0%{?fedora} -%define cpupowerarchs %{ix86} x86_64 ppc64le %{arm} aarch64 -%else -%define cpupowerarchs i686 x86_64 ppc64le aarch64 -%endif - -%if 0%{?use_vdso} - -%if 0%{?skip_nonpae_vdso} -%define _use_vdso 0 -%else -%define _use_vdso 1 -%endif - -%else -%define _use_vdso 0 -%endif - -# If build of debug packages is disabled, we need to know if we want to create -# meta debug packages or not, after we define with_debug for all specific cases -# above. So this must be at the end here, after all cases of with_debug or not. -%define with_debug_meta 0 -%if !%{debugbuildsenabled} -%if %{with_debug} -%define with_debug_meta 1 -%endif -%define with_debug 0 -%endif - - -# -# Packages that need to be installed before the kernel is, because the %%post -# scripts use them. -# -%define kernel_prereq coreutils, systemd >= 203-2, /usr/bin/kernel-install -%define initrd_prereq dracut >= 027 - - -Name: kernel -License: GPLv2 and Redistributable, no modification permitted -URL: https://www.kernel.org/ -Version: %{specversion} -Release: %{pkg_release} -# DO NOT CHANGE THE 'ExclusiveArch' LINE TO TEMPORARILY EXCLUDE AN ARCHITECTURE BUILD. -# SET %%nobuildarches (ABOVE) INSTEAD -%if 0%{?fedora} -ExclusiveArch: noarch x86_64 s390x %{arm} aarch64 ppc64le -%else -ExclusiveArch: noarch i386 i686 x86_64 s390x %{arm} aarch64 ppc64le -%endif -ExclusiveOS: Linux -%ifnarch %{nobuildarches} -Requires: kernel-core-uname-r = %{KVERREL} -Requires: kernel-modules-uname-r = %{KVERREL} -%endif - - -# -# List the packages used during the kernel build -# -BuildRequires: kmod, patch, bash, coreutils, tar, git-core, which -BuildRequires: bzip2, xz, findutils, gzip, m4, perl-interpreter, perl-Carp, perl-devel, perl-generators, make, diffutils, gawk -BuildRequires: gcc, binutils, redhat-rpm-config, hmaccalc, bison, flex, gcc-c++ -BuildRequires: net-tools, hostname, bc, elfutils-devel -BuildRequires: dwarves -BuildRequires: python3-devel -BuildRequires: gcc-plugin-devel -# glibc-static is required for a consistent build environment (specifically -# CONFIG_CC_CAN_LINK_STATIC=y). -BuildRequires: glibc-static -%ifnarch %{nobuildarches} noarch -BuildRequires: bpftool -%endif -%if %{with_headers} -BuildRequires: rsync -%endif -%if %{with_doc} -BuildRequires: xmlto, asciidoc, python3-sphinx, python3-sphinx_rtd_theme -%endif -%if %{with_sparse} -BuildRequires: sparse -%endif -%if %{with_perf} -BuildRequires: zlib-devel binutils-devel newt-devel perl(ExtUtils::Embed) bison flex xz-devel -BuildRequires: audit-libs-devel -BuildRequires: java-devel -BuildRequires: libbpf-devel -BuildRequires: libbabeltrace-devel -BuildRequires: libtraceevent-devel -%ifnarch %{arm} s390x -BuildRequires: numactl-devel -%endif -%ifarch aarch64 -BuildRequires: opencsd-devel >= 1.0.0 -%endif -%endif -%if %{with_tools} -BuildRequires: gettext ncurses-devel -BuildRequires: libcap-devel libcap-ng-devel -%ifnarch s390x -BuildRequires: pciutils-devel -%endif -%ifarch i686 x86_64 -BuildRequires: libnl3-devel -%endif -%endif -%if %{with_tools} || %{signmodules} || %{signkernel} -BuildRequires: openssl-devel -%endif -%if %{with_bpftool} -BuildRequires: python3-docutils -BuildRequires: zlib-devel binutils-devel -%endif -%if %{with_selftests} -BuildRequires: clang llvm -%ifnarch %{arm} -BuildRequires: numactl-devel -%endif -BuildRequires: libcap-devel libcap-ng-devel rsync libmnl-devel -%endif -BuildConflicts: rhbuildsys(DiskFree) < 500Mb -%if %{with_debuginfo} -BuildRequires: rpm-build, elfutils -BuildConflicts: rpm < 4.13.0.1-19 -BuildConflicts: dwarves < 1.13 -# Most of these should be enabled after more investigation -%undefine _include_minidebuginfo -%undefine _find_debuginfo_dwz_opts -%undefine _unique_build_ids -%undefine _unique_debug_names -%undefine _unique_debug_srcs -%undefine _debugsource_packages -%undefine _debuginfo_subpackages -%global _find_debuginfo_opts -r -%global _missing_build_ids_terminate_build 1 -%global _no_recompute_build_ids 1 -%endif -%if %{with_kabidwchk} || %{with_kabidw_base} -BuildRequires: kabi-dw -%endif - -%if %{signkernel}%{signmodules} -BuildRequires: openssl -%if %{signkernel} -# ELN uses Fedora signing process, so exclude -%if 0%{?rhel}%{?centos} && !0%{?eln} -BuildRequires: system-sb-certs -%endif -%ifarch x86_64 aarch64 -BuildRequires: nss-tools -BuildRequires: pesign >= 0.10-4 -%endif -%endif -%endif - -%if %{with_cross} -BuildRequires: binutils-%{_build_arch}-linux-gnu, gcc-%{_build_arch}-linux-gnu -%define cross_opts CROSS_COMPILE=%{_build_arch}-linux-gnu- -%define __strip %{_build_arch}-linux-gnu-strip -%endif - -# These below are required to build man pages -%if %{with_perf} -BuildRequires: xmlto -%endif -%if %{with_perf} || %{with_tools} -BuildRequires: asciidoc -%endif - -%if %{with toolchain_clang} -BuildRequires: clang -%endif - -%if %{with clang_lto} -BuildRequires: llvm -BuildRequires: lld -%endif - -# Because this is the kernel, it's hard to get a single upstream URL -# to represent the base without needing to do a bunch of patching. This -# tarball is generated from a src-git tree. If you want to see the -# exact git commit you can run -# -# xzcat -qq ${TARBALL} | git get-tar-commit-id -Source0: linux-%{tarfile_release}.tar.xz - -Source1: Makefile.rhelver - - -# Name of the packaged file containing signing key -%ifarch ppc64le -%define signing_key_filename kernel-signing-ppc.cer -%endif -%ifarch s390x -%define signing_key_filename kernel-signing-s390.cer -%endif - -%if %{?released_kernel} - -Source10: redhatsecurebootca5.cer -Source11: redhatsecurebootca1.cer -Source12: redhatsecureboot501.cer -Source13: redhatsecureboot301.cer -Source14: secureboot_s390.cer -Source15: secureboot_ppc.cer - -%define secureboot_ca_1 %{SOURCE10} -%define secureboot_ca_0 %{SOURCE11} -%ifarch x86_64 aarch64 -%define secureboot_key_1 %{SOURCE12} -%define pesign_name_1 redhatsecureboot501 -%define secureboot_key_0 %{SOURCE13} -%define pesign_name_0 redhatsecureboot301 -%endif -%ifarch s390x -%define secureboot_key_0 %{SOURCE14} -%define pesign_name_0 redhatsecureboot302 -%endif -%ifarch ppc64le -%define secureboot_key_0 %{SOURCE15} -%define pesign_name_0 redhatsecureboot303 -%endif - -# released_kernel -%else - -Source10: redhatsecurebootca4.cer -Source11: redhatsecurebootca2.cer -Source12: redhatsecureboot401.cer -Source13: redhatsecureboot003.cer - -%define secureboot_ca_1 %{SOURCE10} -%define secureboot_ca_0 %{SOURCE11} -%define secureboot_key_1 %{SOURCE12} -%define pesign_name_1 redhatsecureboot401 -%define secureboot_key_0 %{SOURCE13} -%define pesign_name_0 redhatsecureboot003 - -# released_kernel -%endif - -Source20: mod-denylist.sh -Source21: mod-sign.sh -Source22: parallel_xz.sh - -%define modsign_cmd %{SOURCE21} - -%if 0%{?include_rhel} -Source23: x509.genkey.rhel - -Source24: kernel-aarch64-rhel.config -Source25: kernel-aarch64-debug-rhel.config -Source26: mod-extra.list.rhel - -Source27: kernel-ppc64le-rhel.config -Source28: kernel-ppc64le-debug-rhel.config -Source29: kernel-s390x-rhel.config -Source30: kernel-s390x-debug-rhel.config -Source31: kernel-s390x-zfcpdump-rhel.config -Source32: kernel-x86_64-rhel.config -Source33: kernel-x86_64-debug-rhel.config - -Source34: filter-x86_64.sh.rhel -Source35: filter-armv7hl.sh.rhel -Source37: filter-aarch64.sh.rhel -Source38: filter-ppc64le.sh.rhel -Source39: filter-s390x.sh.rhel -Source40: filter-modules.sh.rhel - -Source41: x509.genkey.centos -%endif - -%if 0%{?include_fedora} -Source50: x509.genkey.fedora -Source51: mod-extra.list.fedora - -Source52: kernel-aarch64-fedora.config -Source53: kernel-aarch64-debug-fedora.config -Source54: kernel-armv7hl-fedora.config -Source55: kernel-armv7hl-debug-fedora.config -Source56: kernel-armv7hl-lpae-fedora.config -Source57: kernel-armv7hl-lpae-debug-fedora.config -Source60: kernel-ppc64le-fedora.config -Source61: kernel-ppc64le-debug-fedora.config -Source62: kernel-s390x-fedora.config -Source63: kernel-s390x-debug-fedora.config -Source64: kernel-x86_64-fedora.config -Source65: kernel-x86_64-debug-fedora.config - -Source67: filter-x86_64.sh.fedora -Source68: filter-armv7hl.sh.fedora -Source70: filter-aarch64.sh.fedora -Source71: filter-ppc64le.sh.fedora -Source72: filter-s390x.sh.fedora -Source73: filter-modules.sh.fedora -%endif - -Source75: partial-kgcov-snip.config -Source80: generate_all_configs.sh -Source81: process_configs.sh - -Source82: update_scripts.sh - -Source84: mod-internal.list - -Source100: rheldup3.x509 -Source101: rhelkpatch1.x509 - -Source200: check-kabi - -Source201: Module.kabi_aarch64 -Source202: Module.kabi_ppc64le -Source203: Module.kabi_s390x -Source204: Module.kabi_x86_64 - -Source210: Module.kabi_dup_aarch64 -Source211: Module.kabi_dup_ppc64le -Source212: Module.kabi_dup_s390x -Source213: Module.kabi_dup_x86_64 - -Source300: kernel-abi-stablelists-%{specversion}-%{pkgrelease}.tar.bz2 -Source301: kernel-kabi-dw-%{specversion}-%{pkgrelease}.tar.bz2 - -# Sources for kernel-tools -Source2000: cpupower.service -Source2001: cpupower.config -Source2002: kvm_stat.logrotate - -# Some people enjoy building customized kernels from the dist-git in Fedora and -# use this to override configuration options. One day they may all use the -# source tree, but in the mean time we carry this to support the legacy workflow -Source3000: merge.pl -Source3001: kernel-local -%if %{patchlist_changelog} -Source3002: Patchlist.changelog -%endif - -Source4000: README.rst -Source4001: rpminspect.yaml -Source4002: gating.yaml - -## Patches needed for building this package - -%if !%{nopatches} - -Patch1: patch-%{patchversion}-redhat.patch -%endif - -# empty final patch to facilitate testing of kernel patches -Patch999999: linux-kernel-test.patch - -# END OF PATCH DEFINITIONS - -%description -The kernel meta package - -# -# This macro does requires, provides, conflicts, obsoletes for a kernel package. -# %%kernel_reqprovconf <subpackage> -# It uses any kernel_<subpackage>_conflicts and kernel_<subpackage>_obsoletes -# macros defined above. -# -%define kernel_reqprovconf \ -Provides: kernel = %{specversion}-%{pkg_release}\ -Provides: kernel-%{_target_cpu} = %{specversion}-%{pkg_release}%{?1:+%{1}}\ -Provides: kernel-drm-nouveau = 16\ -Provides: kernel-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires(pre): %{kernel_prereq}\ -Requires(pre): %{initrd_prereq}\ -Requires(pre): ((linux-firmware >= 20150904-56.git6ebf5d57) if linux-firmware)\ -Recommends: linux-firmware\ -Requires(preun): systemd >= 200\ -Conflicts: xfsprogs < 4.3.0-1\ -Conflicts: xorg-x11-drv-vmmouse < 13.0.99\ -%{expand:%%{?kernel%{?1:_%{1}}_conflicts:Conflicts: %%{kernel%{?1:_%{1}}_conflicts}}}\ -%{expand:%%{?kernel%{?1:_%{1}}_obsoletes:Obsoletes: %%{kernel%{?1:_%{1}}_obsoletes}}}\ -%{expand:%%{?kernel%{?1:_%{1}}_provides:Provides: %%{kernel%{?1:_%{1}}_provides}}}\ -# We can't let RPM do the dependencies automatic because it'll then pick up\ -# a correct but undesirable perl dependency from the module headers which\ -# isn't required for the kernel proper to function\ -AutoReq: no\ -AutoProv: yes\ -%{nil} - - -%package doc -Summary: Various documentation bits found in the kernel source -Group: Documentation -%description doc -This package contains documentation files from the kernel -source. Various bits of information about the Linux kernel and the -device drivers shipped with it are documented in these files. - -You'll want to install this package if you need a reference to the -options that can be passed to Linux kernel modules at load time. - - -%package headers -Summary: Header files for the Linux kernel for use by glibc -Obsoletes: glibc-kernheaders < 3.0-46 -Provides: glibc-kernheaders = 3.0-46 -%description headers -Kernel-headers includes the C header files that specify the interface -between the Linux kernel and userspace libraries and programs. The -header files define structures and constants that are needed for -building most standard programs and are also needed for rebuilding the -glibc package. - -%package cross-headers -Summary: Header files for the Linux kernel for use by cross-glibc -%description cross-headers -Kernel-cross-headers includes the C header files that specify the interface -between the Linux kernel and userspace libraries and programs. The -header files define structures and constants that are needed for -building most standard programs and are also needed for rebuilding the -cross-glibc package. - - -%package debuginfo-common-%{_target_cpu} -Summary: Kernel source files used by %{name}-debuginfo packages -Provides: installonlypkg(kernel) -%description debuginfo-common-%{_target_cpu} -This package is required by %{name}-debuginfo subpackages. -It provides the kernel source files common to all builds. - -%if %{with_perf} -%package -n perf -Summary: Performance monitoring for the Linux kernel -Requires: bzip2 -License: GPLv2 -%description -n perf -This package contains the perf tool, which enables performance monitoring -of the Linux kernel. - -%package -n perf-debuginfo -Summary: Debug information for package perf -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release} -AutoReqProv: no -%description -n perf-debuginfo -This package provides debug information for the perf package. - -# Note that this pattern only works right to match the .build-id -# symlinks because of the trailing nonmatching alternation and -# the leading .*, because of find-debuginfo.sh's buggy handling -# of matching the pattern against the symlinks file. -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{_bindir}/perf(\.debug)?|.*%%{_libexecdir}/perf-core/.*|.*%%{_libdir}/libperf-jvmti.so(\.debug)?|XXX' -o perf-debuginfo.list} - -%package -n python3-perf -Summary: Python bindings for apps which will manipulate perf events -%description -n python3-perf -The python3-perf package contains a module that permits applications -written in the Python programming language to use the interface -to manipulate perf events. - -%package -n python3-perf-debuginfo -Summary: Debug information for package perf python bindings -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release} -AutoReqProv: no -%description -n python3-perf-debuginfo -This package provides debug information for the perf python bindings. - -# the python_sitearch macro should already be defined from above -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{python3_sitearch}/perf.*so(\.debug)?|XXX' -o python3-perf-debuginfo.list} - -# with_perf -%endif - -%if %{with_tools} -%package -n kernel-tools -Summary: Assortment of tools for the Linux kernel -License: GPLv2 -%ifarch %{cpupowerarchs} -Provides: cpupowerutils = 1:009-0.6.p1 -Obsoletes: cpupowerutils < 1:009-0.6.p1 -Provides: cpufreq-utils = 1:009-0.6.p1 -Provides: cpufrequtils = 1:009-0.6.p1 -Obsoletes: cpufreq-utils < 1:009-0.6.p1 -Obsoletes: cpufrequtils < 1:009-0.6.p1 -Obsoletes: cpuspeed < 1:1.5-16 -Requires: kernel-tools-libs = %{version}-%{release} -%endif -%define __requires_exclude ^%{_bindir}/python -%description -n kernel-tools -This package contains the tools/ directory from the kernel source -and the supporting documentation. - -%package -n kernel-tools-libs -Summary: Libraries for the kernels-tools -License: GPLv2 -%description -n kernel-tools-libs -This package contains the libraries built from the tools/ directory -from the kernel source. - -%package -n kernel-tools-libs-devel -Summary: Assortment of tools for the Linux kernel -License: GPLv2 -Requires: kernel-tools = %{version}-%{release} -%ifarch %{cpupowerarchs} -Provides: cpupowerutils-devel = 1:009-0.6.p1 -Obsoletes: cpupowerutils-devel < 1:009-0.6.p1 -%endif -Requires: kernel-tools-libs = %{version}-%{release} -Provides: kernel-tools-devel -%description -n kernel-tools-libs-devel -This package contains the development files for the tools/ directory from -the kernel source. - -%package -n kernel-tools-debuginfo -Summary: Debug information for package kernel-tools -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release} -AutoReqProv: no -%description -n kernel-tools-debuginfo -This package provides debug information for package kernel-tools. - -# Note that this pattern only works right to match the .build-id -# symlinks because of the trailing nonmatching alternation and -# the leading .*, because of find-debuginfo.sh's buggy handling -# of matching the pattern against the symlinks file. -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{_bindir}/centrino-decode(\.debug)?|.*%%{_bindir}/powernow-k8-decode(\.debug)?|.*%%{_bindir}/cpupower(\.debug)?|.*%%{_libdir}/libcpupower.*|.*%%{_bindir}/turbostat(\.debug)?|.*%%{_bindir}/x86_energy_perf_policy(\.debug)?|.*%%{_bindir}/tmon(\.debug)?|.*%%{_bindir}/lsgpio(\.debug)?|.*%%{_bindir}/gpio-hammer(\.debug)?|.*%%{_bindir}/gpio-event-mon(\.debug)?|.*%%{_bindir}/gpio-watch(\.debug)?|.*%%{_bindir}/iio_event_monitor(\.debug)?|.*%%{_bindir}/iio_generic_buffer(\.debug)?|.*%%{_bindir}/lsiio(\.debug)?|.*%%{_bindir}/intel-speed-select(\.debug)?|.*%%{_bindir}/page_owner_sort(\.debug)?|.*%%{_bindir}/slabinfo(\.debug)?|.*%%{_sbindir}/intel_sdsi(\.debug)?|XXX' -o kernel-tools-debuginfo.list} - -# with_tools -%endif - -%if %{with_bpftool} - -%package -n bpftool -Summary: Inspection and simple manipulation of eBPF programs and maps -License: GPLv2 -%description -n bpftool -This package contains the bpftool, which allows inspection and simple -manipulation of eBPF programs and maps. - -%package -n bpftool-debuginfo -Summary: Debug information for package bpftool -Group: Development/Debug -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release} -AutoReqProv: no -%description -n bpftool-debuginfo -This package provides debug information for the bpftool package. - -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{_sbindir}/bpftool(\.debug)?|XXX' -o bpftool-debuginfo.list} - -# with_bpftool -%endif - -%if %{with_selftests} - -%package selftests-internal -Summary: Kernel samples and selftests -License: GPLv2 -Requires: binutils, bpftool, iproute-tc, nmap-ncat, python3 -%description selftests-internal -Kernel sample programs and selftests. - -# Note that this pattern only works right to match the .build-id -# symlinks because of the trailing nonmatching alternation and -# the leading .*, because of find-debuginfo.sh's buggy handling -# of matching the pattern against the symlinks file. -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{_libexecdir}/(ksamples|kselftests)/.*|XXX' -o selftests-debuginfo.list} - -# with_selftests -%endif - -%if %{with_gcov} -%package gcov -Summary: gcov graph and source files for coverage data collection. -%description gcov -kernel-gcov includes the gcov graph and source files for gcov coverage collection. -%endif - -%package -n kernel-abi-stablelists -Summary: The Red Hat Enterprise Linux kernel ABI symbol stablelists -AutoReqProv: no -%description -n kernel-abi-stablelists -The kABI package contains information pertaining to the Red Hat Enterprise -Linux kernel ABI, including lists of kernel symbols that are needed by -external Linux kernel modules, and a yum plugin to aid enforcement. - -%if %{with_kabidw_base} -%package kernel-kabidw-base-internal -Summary: The baseline dataset for kABI verification using DWARF data -Group: System Environment/Kernel -AutoReqProv: no -%description kernel-kabidw-base-internal -The package contains data describing the current ABI of the Red Hat Enterprise -Linux kernel, suitable for the kabi-dw tool. -%endif - -# -# This macro creates a kernel-<subpackage>-debuginfo package. -# %%kernel_debuginfo_package <subpackage> -# -# Explanation of the find_debuginfo_opts: We build multiple kernels (debug -# pae etc.) so the regex filters those kernels appropriately. We also -# have to package several binaries as part of kernel-devel but getting -# unique build-ids is tricky for these userspace binaries. We don't really -# care about debugging those so we just filter those out and remove it. -%define kernel_debuginfo_package() \ -%package %{?1:%{1}-}debuginfo\ -Summary: Debug information for package %{name}%{?1:-%{1}}\ -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release}\ -Provides: %{name}%{?1:-%{1}}-debuginfo-%{_target_cpu} = %{version}-%{release}\ -Provides: installonlypkg(kernel)\ -AutoReqProv: no\ -%description %{?1:%{1}-}debuginfo\ -This package provides debug information for package %{name}%{?1:-%{1}}.\ -This is required to use SystemTap with %{name}%{?1:-%{1}}-%{KVERREL}.\ -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} --keep-section '.BTF' -p '.*\/usr\/src\/kernels/.*|XXX' -o ignored-debuginfo.list -p '/.*/%%{KVERREL_RE}%{?1:[+]%{1}}/.*|/.*%%{KVERREL_RE}%{?1:\+%{1}}(\.debug)?' -o debuginfo%{?1}.list}\ -%{nil} - -# -# This macro creates a kernel-<subpackage>-devel package. -# %%kernel_devel_package [-m] <subpackage> <pretty-name> -# -%define kernel_devel_package(m) \ -%package %{?1:%{1}-}devel\ -Summary: Development package for building kernel modules to match the %{?2:%{2} }kernel\ -Provides: kernel%{?1:-%{1}}-devel-%{_target_cpu} = %{version}-%{release}\ -Provides: kernel-devel-%{_target_cpu} = %{version}-%{release}%{?1:+%{1}}\ -Provides: kernel-devel-uname-r = %{KVERREL}%{?1:+%{1}}\ -Provides: installonlypkg(kernel)\ -AutoReqProv: no\ -Requires(pre): findutils\ -Requires: findutils\ -Requires: perl-interpreter\ -Requires: openssl-devel\ -Requires: elfutils-libelf-devel\ -Requires: bison\ -Requires: flex\ -Requires: make\ -Requires: gcc\ -%if %{-m:1}%{!-m:0}\ -Requires: kernel-devel-uname-r = %{KVERREL}\ -%endif\ -%description %{?1:%{1}-}devel\ -This package provides kernel headers and makefiles sufficient to build modules\ -against the %{?2:%{2} }kernel package.\ -%{nil} - -# -# This macro creates an empty kernel-<subpackage>-devel-matched package that -# requires both the core and devel packages locked on the same version. -# %%kernel_devel_matched_package [-m] <subpackage> <pretty-name> -# -%define kernel_devel_matched_package(m) \ -%package %{?1:%{1}-}devel-matched\ -Summary: Meta package to install matching core and devel packages for a given %{?2:%{2} }kernel\ -Requires: kernel%{?1:-%{1}}-devel = %{version}-%{release}\ -Requires: kernel%{?1:-%{1}}-core = %{version}-%{release}\ -%description %{?1:%{1}-}devel-matched\ -This meta package is used to install matching core and devel packages for a given %{?2:%{2} }kernel.\ -%{nil} - -# -# kernel-<variant>-ipaclones-internal package -# -%define kernel_ipaclones_package() \ -%package %{?1:%{1}-}ipaclones-internal\ -Summary: *.ipa-clones files generated by -fdump-ipa-clones for kernel%{?1:-%{1}}\ -Group: System Environment/Kernel\ -AutoReqProv: no\ -%description %{?1:%{1}-}ipaclones-internal\ -This package provides *.ipa-clones files.\ -%{nil} - -# -# This macro creates a kernel-<subpackage>-modules-internal package. -# %%kernel_modules_internal_package <subpackage> <pretty-name> -# -%define kernel_modules_internal_package() \ -%package %{?1:%{1}-}modules-internal\ -Summary: Extra kernel modules to match the %{?2:%{2} }kernel\ -Group: System Environment/Kernel\ -Provides: kernel%{?1:-%{1}}-modules-internal-%{_target_cpu} = %{version}-%{release}\ -Provides: kernel%{?1:-%{1}}-modules-internal-%{_target_cpu} = %{version}-%{release}%{?1:+%{1}}\ -Provides: kernel%{?1:-%{1}}-modules-internal = %{version}-%{release}%{?1:+%{1}}\ -Provides: installonlypkg(kernel-module)\ -Provides: kernel%{?1:-%{1}}-modules-internal-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel%{?1:-%{1}}-modules-uname-r = %{KVERREL}%{?1:+%{1}}\ -AutoReq: no\ -AutoProv: yes\ -%description %{?1:%{1}-}modules-internal\ -This package provides kernel modules for the %{?2:%{2} }kernel package for Red Hat internal usage.\ -%{nil} - -# -# This macro creates a kernel-<subpackage>-modules-extra package. -# %%kernel_modules_extra_package [-m] <subpackage> <pretty-name> -# -%define kernel_modules_extra_package(m) \ -%package %{?1:%{1}-}modules-extra\ -Summary: Extra kernel modules to match the %{?2:%{2} }kernel\ -Provides: kernel%{?1:-%{1}}-modules-extra-%{_target_cpu} = %{version}-%{release}\ -Provides: kernel%{?1:-%{1}}-modules-extra-%{_target_cpu} = %{version}-%{release}%{?1:+%{1}}\ -Provides: kernel%{?1:-%{1}}-modules-extra = %{version}-%{release}%{?1:+%{1}}\ -Provides: installonlypkg(kernel-module)\ -Provides: kernel%{?1:-%{1}}-modules-extra-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel%{?1:-%{1}}-modules-uname-r = %{KVERREL}%{?1:+%{1}}\ -%if %{-m:1}%{!-m:0}\ -Requires: kernel-modules-extra-uname-r = %{KVERREL}\ -%endif\ -AutoReq: no\ -AutoProv: yes\ -%description %{?1:%{1}-}modules-extra\ -This package provides less commonly used kernel modules for the %{?2:%{2} }kernel package.\ -%{nil} - -# -# This macro creates a kernel-<subpackage>-modules package. -# %%kernel_modules_package [-m] <subpackage> <pretty-name> -# -%define kernel_modules_package(m) \ -%package %{?1:%{1}-}modules\ -Summary: kernel modules to match the %{?2:%{2}-}core kernel\ -Provides: kernel%{?1:-%{1}}-modules-%{_target_cpu} = %{version}-%{release}\ -Provides: kernel-modules-%{_target_cpu} = %{version}-%{release}%{?1:+%{1}}\ -Provides: kernel-modules = %{version}-%{release}%{?1:+%{1}}\ -Provides: installonlypkg(kernel-module)\ -Provides: kernel%{?1:-%{1}}-modules-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel-uname-r = %{KVERREL}%{?1:+%{1}}\ -%if %{-m:1}%{!-m:0}\ -Requires: kernel-modules-uname-r = %{KVERREL}\ -%endif\ -AutoReq: no\ -AutoProv: yes\ -%description %{?1:%{1}-}modules\ -This package provides commonly used kernel modules for the %{?2:%{2}-}core kernel package.\ -%{nil} - -# -# this macro creates a kernel-<subpackage> meta package. -# %%kernel_meta_package <subpackage> -# -%define kernel_meta_package() \ -%package %{1}\ -summary: kernel meta-package for the %{1} kernel\ -Requires: kernel-%{1}-core-uname-r = %{KVERREL}+%{1}\ -Requires: kernel-%{1}-modules-uname-r = %{KVERREL}+%{1}\ -Provides: installonlypkg(kernel)\ -%description %{1}\ -The meta-package for the %{1} kernel\ -%{nil} - -# -# This macro creates a kernel-<subpackage> and its -devel and -debuginfo too. -# %%define variant_summary The Linux kernel compiled for <configuration> -# %%kernel_variant_package [-n <pretty-name>] [-m] <subpackage> -# -%define kernel_variant_package(n:m) \ -%package %{?1:%{1}-}core\ -Summary: %{variant_summary}\ -Provides: kernel-%{?1:%{1}-}core-uname-r = %{KVERREL}%{?1:+%{1}}\ -Provides: installonlypkg(kernel)\ -%if %{-m:1}%{!-m:0}\ -Requires: kernel-core-uname-r = %{KVERREL}\ -%endif\ -%{expand:%%kernel_reqprovconf}\ -%if %{?1:1} %{!?1:0} \ -%{expand:%%kernel_meta_package %{?1:%{1}}}\ -%endif\ -%{expand:%%kernel_devel_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}} %{-m:%{-m}}}\ -%{expand:%%kernel_devel_matched_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}} %{-m:%{-m}}}\ -%{expand:%%kernel_modules_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}} %{-m:%{-m}}}\ -%{expand:%%kernel_modules_extra_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}} %{-m:%{-m}}}\ -%if %{-m:0}%{!-m:1}\ -%{expand:%%kernel_modules_internal_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}}}\ -%{expand:%%kernel_debuginfo_package %{?1:%{1}}}\ -%endif\ -%{nil} - -# Now, each variant package. - -%if %{with_pae} -%define variant_summary The Linux kernel compiled for Cortex-A15 -%kernel_variant_package lpae -%description lpae-core -This package includes a version of the Linux kernel with support for -Cortex-A15 devices with LPAE and HW virtualisation support -%endif - -%if %{with_zfcpdump} -%define variant_summary The Linux kernel compiled for zfcpdump usage -%kernel_variant_package zfcpdump -%description zfcpdump-core -The kernel package contains the Linux kernel (vmlinuz) for use by the -zfcpdump infrastructure. -# with_zfcpdump -%endif - -%define variant_summary The Linux kernel compiled with extra debugging enabled -%if !%{debugbuildsenabled} -%kernel_variant_package -m debug -%else -%kernel_variant_package debug -%endif -%description debug-core -The kernel package contains the Linux kernel (vmlinuz), the core of any -Linux operating system. The kernel handles the basic functions -of the operating system: memory allocation, process allocation, device -input and output, etc. - -This variant of the kernel has numerous debugging options enabled. -It should only be installed when trying to gather additional information -on kernel bugs, as some of these options impact performance noticably. - -# And finally the main -core package - -%define variant_summary The Linux kernel -%kernel_variant_package -%description core -The kernel package contains the Linux kernel (vmlinuz), the core of any -Linux operating system. The kernel handles the basic functions -of the operating system: memory allocation, process allocation, device -input and output, etc. - -%if %{with_ipaclones} -%kernel_ipaclones_package -%endif - -%prep -# do a few sanity-checks for --with *only builds -%if %{with_baseonly} -%if !%{with_up} -echo "Cannot build --with baseonly, up build is disabled" -exit 1 -%endif -%endif - -# more sanity checking; do it quietly -if [ "%{patches}" != "%%{patches}" ] ; then - for patch in %{patches} ; do - if [ ! -f $patch ] ; then - echo "ERROR: Patch ${patch##/*/} listed in specfile but is missing" - exit 1 - fi - done -fi 2>/dev/null - -patch_command='patch -p1 -F1 -s' -ApplyPatch() -{ - local patch=$1 - shift - if [ ! -f $RPM_SOURCE_DIR/$patch ]; then - exit 1 - fi - if ! grep -E "^Patch[0-9]+: $patch\$" %{_specdir}/${RPM_PACKAGE_NAME}.spec ; then - if [ "${patch:0:8}" != "patch-%{kversion}." ] ; then - echo "ERROR: Patch $patch not listed as a source patch in specfile" - exit 1 - fi - fi 2>/dev/null - case "$patch" in - *.bz2) bunzip2 < "$RPM_SOURCE_DIR/$patch" | $patch_command ${1+"$@"} ;; - *.gz) gunzip < "$RPM_SOURCE_DIR/$patch" | $patch_command ${1+"$@"} ;; - *.xz) unxz < "$RPM_SOURCE_DIR/$patch" | $patch_command ${1+"$@"} ;; - *) $patch_command ${1+"$@"} < "$RPM_SOURCE_DIR/$patch" ;; - esac -} - -# don't apply patch if it's empty -ApplyOptionalPatch() -{ - local patch=$1 - shift - if [ ! -f $RPM_SOURCE_DIR/$patch ]; then - exit 1 - fi - local C=$(wc -l $RPM_SOURCE_DIR/$patch | awk '{print $1}') - if [ "$C" -gt 9 ]; then - ApplyPatch $patch ${1+"$@"} - fi -} - -%setup -q -n kernel-%{tarfile_release} -c -mv linux-%{tarfile_release} linux-%{KVERREL} - -cd linux-%{KVERREL} -cp -a %{SOURCE1} . - -%if !%{nopatches} - -ApplyOptionalPatch patch-%{patchversion}-redhat.patch -%endif - -ApplyOptionalPatch linux-kernel-test.patch - -# END OF PATCH APPLICATIONS - -# Any further pre-build tree manipulations happen here. - -chmod +x scripts/checkpatch.pl -mv COPYING COPYING-%{version}-%{release} - -# This Prevents scripts/setlocalversion from mucking with our version numbers. -touch .scmversion - -# Mangle /usr/bin/python shebangs to /usr/bin/python3 -# Mangle all Python shebangs to be Python 3 explicitly -# -p preserves timestamps -# -n prevents creating ~backup files -# -i specifies the interpreter for the shebang -# This fixes errors such as -# *** ERROR: ambiguous python shebang in /usr/bin/kvm_stat: #!/usr/bin/python. Change it to python3 (or python2) explicitly. -# We patch all sources below for which we got a report/error. -pathfix.py -i "%{__python3} %{py3_shbang_opts}" -p -n \ - tools/kvm/kvm_stat/kvm_stat \ - scripts/show_delta \ - scripts/diffconfig \ - scripts/bloat-o-meter \ - scripts/jobserver-exec \ - tools \ - Documentation \ - scripts/clang-tools - -# only deal with configs if we are going to build for the arch -%ifnarch %nobuildarches - -if [ -L configs ]; then - rm -f configs -fi -mkdir configs -cd configs - -# Drop some necessary files from the source dir into the buildroot -cp $RPM_SOURCE_DIR/kernel-*.config . -cp %{SOURCE80} . -# merge.pl -cp %{SOURCE3000} . -# kernel-local -cp %{SOURCE3001} . -FLAVOR=%{primary_target} SPECVERSION=%{version} ./generate_all_configs.sh %{debugbuildsenabled} - -# Merge in any user-provided local config option changes -%ifnarch %nobuildarches -for i in %{all_arch_configs} -do - mv $i $i.tmp - ./merge.pl %{SOURCE3001} $i.tmp > $i -%if %{with_gcov} - echo "Merging with gcov options" - cat %{SOURCE75} - mv $i $i.tmp - ./merge.pl %{SOURCE75} $i.tmp > $i -%endif - rm $i.tmp -done -%endif - -%if %{with clang_lto} -for i in *aarch64*.config *x86_64*.config; do - sed -i 's/# CONFIG_LTO_CLANG_THIN is not set/CONFIG_LTO_CLANG_THIN=y/' $i - sed -i 's/CONFIG_LTO_NONE=y/# CONFIG_LTO_NONE is not set/' $i -done -%endif - -# Add DUP and kpatch certificates to system trusted keys for RHEL -%if 0%{?rhel} -%if %{signkernel}%{signmodules} -openssl x509 -inform der -in %{SOURCE100} -out rheldup3.pem -openssl x509 -inform der -in %{SOURCE101} -out rhelkpatch1.pem -cat rheldup3.pem rhelkpatch1.pem > ../certs/rhel.pem -%ifarch s390x ppc64le -openssl x509 -inform der -in %{secureboot_ca_0} -out secureboot.pem -cat secureboot.pem >> ../certs/rhel.pem -%endif -for i in *.config; do - sed -i 's@CONFIG_SYSTEM_TRUSTED_KEYS=""@CONFIG_SYSTEM_TRUSTED_KEYS="certs/rhel.pem"@' $i -done -%endif -%endif - -cp %{SOURCE81} . -OPTS="" -%if %{with_configchecks} - OPTS="$OPTS -w -n -c" -%endif -%if %{with clang_lto} -for opt in %{clang_make_opts}; do - OPTS="$OPTS -m $opt" -done -%endif -RHJOBS=$RPM_BUILD_NCPUS PACKAGE_NAME=kernel ./process_configs.sh $OPTS ${specversion} - -cp %{SOURCE82} . -RPM_SOURCE_DIR=$RPM_SOURCE_DIR ./update_scripts.sh %{primary_target} - -# We may want to override files from the primary target in case of building -# against a flavour of it (eg. centos not rhel), thus override it here if -# necessary -if [ "%{primary_target}" == "rhel" ]; then -%if 0%{?centos} - echo "Updating scripts/sources to centos version" - RPM_SOURCE_DIR=$RPM_SOURCE_DIR ./update_scripts.sh centos -%else - echo "Not updating scripts/sources to centos version" -%endif -fi - -# end of kernel config -%endif - -cd .. -# # End of Configs stuff - -# get rid of unwanted files resulting from patch fuzz -find . \( -name "*.orig" -o -name "*~" \) -delete >/dev/null - -# remove unnecessary SCM files -find . -name .gitignore -delete >/dev/null - -cd .. - -### -### build -### -%build - -%if %{with_sparse} -%define sparse_mflags C=1 -%endif - -cp_vmlinux() -{ - eu-strip --remove-comment -o "$2" "$1" -} - -# Note we need to disable these flags for cross builds because the flags -# from redhat-rpm-config assume that host == target so target arch -# flags cause issues with the host compiler. -%if !%{with_cross} -%define build_hostcflags %{?build_cflags} -%define build_hostldflags %{?build_ldflags} -%endif - -%define make %{__make} %{?cross_opts} %{?make_opts} HOSTCFLAGS="%{?build_hostcflags}" HOSTLDFLAGS="%{?build_hostldflags}" - -InitBuildVars() { - # Initialize the kernel .config file and create some variables that are - # needed for the actual build process. - - Variant=$1 - - # Pick the right kernel config file - Config=kernel-%{version}-%{_target_cpu}${Variant:+-${Variant}}.config - DevelDir=/usr/src/kernels/%{KVERREL}${Variant:++${Variant}} - - KernelVer=%{version}-%{release}.%{_target_cpu}${Variant:++${Variant}} - - # make sure EXTRAVERSION says what we want it to say - # Trim the release if this is a CI build, since KERNELVERSION is limited to 64 characters - ShortRel=$(perl -e "print \"%{release}\" =~ s/\.pr\.[0-9A-Fa-f]{32}//r") - perl -p -i -e "s/^EXTRAVERSION.*/EXTRAVERSION = -${ShortRel}.%{_target_cpu}${Variant:++${Variant}}/" Makefile - - # if pre-rc1 devel kernel, must fix up PATCHLEVEL for our versioning scheme - # if we are post rc1 this should match anyway so this won't matter - perl -p -i -e 's/^PATCHLEVEL.*/PATCHLEVEL = %{patchlevel}/' Makefile - - %{make} %{?_smp_mflags} mrproper - cp configs/$Config .config - - %if %{signkernel}%{signmodules} - cp configs/x509.genkey certs/. - %endif - - Arch=`head -1 .config | cut -b 3-` - echo USING ARCH=$Arch - - KCFLAGS="%{?kcflags}" - - # add kpatch flags for base kernel - if [ "$Variant" == "" ]; then - KCFLAGS="$KCFLAGS %{?kpatch_kcflags}" - fi -} - -BuildKernel() { - MakeTarget=$1 - KernelImage=$2 - DoVDSO=$3 - Variant=$4 - InstallName=${5:-vmlinuz} - - DoModules=1 - if [ "$Variant" = "zfcpdump" ]; then - DoModules=0 - fi - - # When the bootable image is just the ELF kernel, strip it. - # We already copy the unstripped file into the debuginfo package. - if [ "$KernelImage" = vmlinux ]; then - CopyKernel=cp_vmlinux - else - CopyKernel=cp - fi - - InitBuildVars $Variant - - echo BUILDING A KERNEL FOR ${Variant} %{_target_cpu}... - - %{make} ARCH=$Arch olddefconfig >/dev/null - - # This ensures build-ids are unique to allow parallel debuginfo - perl -p -i -e "s/^CONFIG_BUILD_SALT.*/CONFIG_BUILD_SALT=\"%{KVERREL}\"/" .config - %{make} ARCH=$Arch KCFLAGS="$KCFLAGS" WITH_GCOV="%{?with_gcov}" %{?_smp_mflags} $MakeTarget %{?sparse_mflags} %{?kernel_mflags} - if [ $DoModules -eq 1 ]; then - %{make} ARCH=$Arch KCFLAGS="$KCFLAGS" WITH_GCOV="%{?with_gcov}" %{?_smp_mflags} modules %{?sparse_mflags} || exit 1 - fi - - mkdir -p $RPM_BUILD_ROOT/%{image_install_path} - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/systemtap -%if %{with_debuginfo} - mkdir -p $RPM_BUILD_ROOT%{debuginfodir}/%{image_install_path} -%endif - -%ifarch %{arm} aarch64 - %{make} ARCH=$Arch dtbs INSTALL_DTBS_PATH=$RPM_BUILD_ROOT/%{image_install_path}/dtb-$KernelVer - %{make} ARCH=$Arch dtbs_install INSTALL_DTBS_PATH=$RPM_BUILD_ROOT/%{image_install_path}/dtb-$KernelVer - cp -r $RPM_BUILD_ROOT/%{image_install_path}/dtb-$KernelVer $RPM_BUILD_ROOT/lib/modules/$KernelVer/dtb - find arch/$Arch/boot/dts -name '*.dtb' -type f -delete -%endif - - # Start installing the results - install -m 644 .config $RPM_BUILD_ROOT/boot/config-$KernelVer - install -m 644 .config $RPM_BUILD_ROOT/lib/modules/$KernelVer/config - install -m 644 System.map $RPM_BUILD_ROOT/boot/System.map-$KernelVer - install -m 644 System.map $RPM_BUILD_ROOT/lib/modules/$KernelVer/System.map - - # We estimate the size of the initramfs because rpm needs to take this size - # into consideration when performing disk space calculations. (See bz #530778) - dd if=/dev/zero of=$RPM_BUILD_ROOT/boot/initramfs-$KernelVer.img bs=1M count=20 - - if [ -f arch/$Arch/boot/zImage.stub ]; then - cp arch/$Arch/boot/zImage.stub $RPM_BUILD_ROOT/%{image_install_path}/zImage.stub-$KernelVer || : - cp arch/$Arch/boot/zImage.stub $RPM_BUILD_ROOT/lib/modules/$KernelVer/zImage.stub-$KernelVer || : - fi - - %if %{signkernel} - if [ "$KernelImage" = vmlinux ]; then - # We can't strip and sign $KernelImage in place, because - # we need to preserve original vmlinux for debuginfo. - # Use a copy for signing. - $CopyKernel $KernelImage $KernelImage.tosign - KernelImage=$KernelImage.tosign - CopyKernel=cp - fi - - # Sign the image if we're using EFI - # aarch64 kernels are gziped EFI images - KernelExtension=${KernelImage##*.} - if [ "$KernelExtension" == "gz" ]; then - SignImage=${KernelImage%.*} - else - SignImage=$KernelImage - fi - - %ifarch x86_64 aarch64 - %pesign -s -i $SignImage -o vmlinuz.tmp -a %{secureboot_ca_0} -c %{secureboot_key_0} -n %{pesign_name_0} - %pesign -s -i vmlinuz.tmp -o vmlinuz.signed -a %{secureboot_ca_1} -c %{secureboot_key_1} -n %{pesign_name_1} - rm vmlinuz.tmp - %endif - %ifarch s390x ppc64le - if [ -x /usr/bin/rpm-sign ]; then - rpm-sign --key "%{pesign_name_0}" --lkmsign $SignImage --output vmlinuz.signed - elif [ $DoModules -eq 1 ]; then - chmod +x scripts/sign-file - ./scripts/sign-file -p sha256 certs/signing_key.pem certs/signing_key.x509 $SignImage vmlinuz.signed - else - mv $SignImage vmlinuz.signed - fi - %endif - - if [ ! -s vmlinuz.signed ]; then - echo "pesigning failed" - exit 1 - fi - mv vmlinuz.signed $SignImage - if [ "$KernelExtension" == "gz" ]; then - gzip -f9 $SignImage - fi - # signkernel - %endif - - $CopyKernel $KernelImage \ - $RPM_BUILD_ROOT/%{image_install_path}/$InstallName-$KernelVer - chmod 755 $RPM_BUILD_ROOT/%{image_install_path}/$InstallName-$KernelVer - cp $RPM_BUILD_ROOT/%{image_install_path}/$InstallName-$KernelVer $RPM_BUILD_ROOT/lib/modules/$KernelVer/$InstallName - - # hmac sign the kernel for FIPS - echo "Creating hmac file: $RPM_BUILD_ROOT/%{image_install_path}/.vmlinuz-$KernelVer.hmac" - ls -l $RPM_BUILD_ROOT/%{image_install_path}/$InstallName-$KernelVer - (cd $RPM_BUILD_ROOT/%{image_install_path} && sha512hmac $InstallName-$KernelVer) > $RPM_BUILD_ROOT/%{image_install_path}/.vmlinuz-$KernelVer.hmac; - cp $RPM_BUILD_ROOT/%{image_install_path}/.vmlinuz-$KernelVer.hmac $RPM_BUILD_ROOT/lib/modules/$KernelVer/.vmlinuz.hmac - - if [ $DoModules -eq 1 ]; then - # Override $(mod-fw) because we don't want it to install any firmware - # we'll get it from the linux-firmware package and we don't want conflicts - %{make} %{?_smp_mflags} ARCH=$Arch INSTALL_MOD_PATH=$RPM_BUILD_ROOT %{?_smp_mflags} modules_install KERNELRELEASE=$KernelVer mod-fw= - fi - -%if %{with_gcov} - # install gcov-needed files to $BUILDROOT/$BUILD/...: - # gcov_info->filename is absolute path - # gcno references to sources can use absolute paths (e.g. in out-of-tree builds) - # sysfs symlink targets (set up at compile time) use absolute paths to BUILD dir - find . \( -name '*.gcno' -o -name '*.[chS]' \) -exec install -D '{}' "$RPM_BUILD_ROOT/$(pwd)/{}" \; -%endif - - # add an a noop %%defattr statement 'cause rpm doesn't like empty file list files - echo '%%defattr(-,-,-)' > ../kernel${Variant:+-${Variant}}-ldsoconf.list - if [ $DoVDSO -ne 0 ]; then - %{make} ARCH=$Arch INSTALL_MOD_PATH=$RPM_BUILD_ROOT vdso_install KERNELRELEASE=$KernelVer - if [ -s ldconfig-kernel.conf ]; then - install -D -m 444 ldconfig-kernel.conf \ - $RPM_BUILD_ROOT/etc/ld.so.conf.d/kernel-$KernelVer.conf - echo /etc/ld.so.conf.d/kernel-$KernelVer.conf >> ../kernel${Variant:+-${Variant}}-ldsoconf.list - fi - - rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/vdso/.build-id - fi - - # And save the headers/makefiles etc for building modules against - # - # This all looks scary, but the end result is supposed to be: - # * all arch relevant include/ files - # * all Makefile/Kconfig files - # * all script/ files - - rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/source - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - (cd $RPM_BUILD_ROOT/lib/modules/$KernelVer ; ln -s build source) - # dirs for additional modules per module-init-tools, kbuild/modules.txt - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/updates - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/weak-updates - # CONFIG_KERNEL_HEADER_TEST generates some extra files in the process of - # testing so just delete - find . -name *.h.s -delete - # first copy everything - cp --parents `find -type f -name "Makefile*" -o -name "Kconfig*"` $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - if [ ! -e Module.symvers ]; then - touch Module.symvers - fi - cp Module.symvers $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp System.map $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - if [ -s Module.markers ]; then - cp Module.markers $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - fi - - # create the kABI metadata for use in packaging - # NOTENOTE: the name symvers is used by the rpm backend - # NOTENOTE: to discover and run the /usr/lib/rpm/fileattrs/kabi.attr - # NOTENOTE: script which dynamically adds exported kernel symbol - # NOTENOTE: checksums to the rpm metadata provides list. - # NOTENOTE: if you change the symvers name, update the backend too - echo "**** GENERATING kernel ABI metadata ****" - gzip -c9 < Module.symvers > $RPM_BUILD_ROOT/boot/symvers-$KernelVer.gz - cp $RPM_BUILD_ROOT/boot/symvers-$KernelVer.gz $RPM_BUILD_ROOT/lib/modules/$KernelVer/symvers.gz - -%if %{with_kabichk} - echo "**** kABI checking is enabled in kernel SPEC file. ****" - chmod 0755 $RPM_SOURCE_DIR/check-kabi - if [ -e $RPM_SOURCE_DIR/Module.kabi_%{_target_cpu}$Variant ]; then - cp $RPM_SOURCE_DIR/Module.kabi_%{_target_cpu}$Variant $RPM_BUILD_ROOT/Module.kabi - $RPM_SOURCE_DIR/check-kabi -k $RPM_BUILD_ROOT/Module.kabi -s Module.symvers || exit 1 - # for now, don't keep it around. - rm $RPM_BUILD_ROOT/Module.kabi - else - echo "**** NOTE: Cannot find reference Module.kabi file. ****" - fi -%endif - -%if %{with_kabidupchk} - echo "**** kABI DUP checking is enabled in kernel SPEC file. ****" - if [ -e $RPM_SOURCE_DIR/Module.kabi_dup_%{_target_cpu}$Variant ]; then - cp $RPM_SOURCE_DIR/Module.kabi_dup_%{_target_cpu}$Variant $RPM_BUILD_ROOT/Module.kabi - $RPM_SOURCE_DIR/check-kabi -k $RPM_BUILD_ROOT/Module.kabi -s Module.symvers || exit 1 - # for now, don't keep it around. - rm $RPM_BUILD_ROOT/Module.kabi - else - echo "**** NOTE: Cannot find DUP reference Module.kabi file. ****" - fi -%endif - -%if %{with_kabidw_base} - # Don't build kabi base for debug kernels - if [ "$Variant" != "zfcpdump" -a "$Variant" != "debug" ]; then - mkdir -p $RPM_BUILD_ROOT/kabi-dwarf - tar xjvf %{SOURCE301} -C $RPM_BUILD_ROOT/kabi-dwarf - - mkdir -p $RPM_BUILD_ROOT/kabi-dwarf/stablelists - tar xjvf %{SOURCE300} -C $RPM_BUILD_ROOT/kabi-dwarf/stablelists - - echo "**** GENERATING DWARF-based kABI baseline dataset ****" - chmod 0755 $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh - $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh generate \ - "$RPM_BUILD_ROOT/kabi-dwarf/stablelists/kabi-current/kabi_stablelist_%{_target_cpu}" \ - "$(pwd)" \ - "$RPM_BUILD_ROOT/kabidw-base/%{_target_cpu}${Variant:+.${Variant}}" || : - - rm -rf $RPM_BUILD_ROOT/kabi-dwarf - fi -%endif - -%if %{with_kabidwchk} - if [ "$Variant" != "zfcpdump" ]; then - mkdir -p $RPM_BUILD_ROOT/kabi-dwarf - tar xjvf %{SOURCE301} -C $RPM_BUILD_ROOT/kabi-dwarf - if [ -d "$RPM_BUILD_ROOT/kabi-dwarf/base/%{_target_cpu}${Variant:+.${Variant}}" ]; then - mkdir -p $RPM_BUILD_ROOT/kabi-dwarf/stablelists - tar xjvf %{SOURCE300} -C $RPM_BUILD_ROOT/kabi-dwarf/stablelists - - echo "**** GENERATING DWARF-based kABI dataset ****" - chmod 0755 $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh - $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh generate \ - "$RPM_BUILD_ROOT/kabi-dwarf/stablelists/kabi-current/kabi_stablelist_%{_target_cpu}" \ - "$(pwd)" \ - "$RPM_BUILD_ROOT/kabi-dwarf/base/%{_target_cpu}${Variant:+.${Variant}}.tmp" || : - - echo "**** kABI DWARF-based comparison report ****" - $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh compare \ - "$RPM_BUILD_ROOT/kabi-dwarf/base/%{_target_cpu}${Variant:+.${Variant}}" \ - "$RPM_BUILD_ROOT/kabi-dwarf/base/%{_target_cpu}${Variant:+.${Variant}}.tmp" || : - echo "**** End of kABI DWARF-based comparison report ****" - else - echo "**** Baseline dataset for kABI DWARF-BASED comparison report not found ****" - fi - - rm -rf $RPM_BUILD_ROOT/kabi-dwarf - fi -%endif - - # then drop all but the needed Makefiles/Kconfig files - rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts - rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include - cp .config $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a scripts $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts/tracing - rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts/spdxcheck.py - -%ifarch s390x - # CONFIG_EXPOLINE_EXTERN=y produces arch/s390/lib/expoline.o - # which is needed during external module build. - if [ -f arch/s390/lib/expoline.o ]; then - cp -a --parents arch/s390/lib/expoline.o $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - fi -%endif - - # Files for 'make scripts' to succeed with kernel-devel. - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/security/selinux/include - cp -a --parents security/selinux/include/classmap.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents security/selinux/include/initial_sid_to_string.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/tools/include/tools - cp -a --parents tools/include/tools/be_byteshift.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/tools/le_byteshift.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - - # Files for 'make prepare' to succeed with kernel-devel. - cp -a --parents tools/include/linux/compiler* $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/linux/types.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/build/Build.include $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/build/Build $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/build/fixdep.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/objtool/sync-check.sh $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/bpf/resolve_btfids $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - - cp --parents security/selinux/include/policycap_names.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents security/selinux/include/policycap.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - - cp -a --parents tools/include/asm-generic $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/linux $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/uapi/asm $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/uapi/asm-generic $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/uapi/linux $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/vdso $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/scripts/utilities.mak $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/lib/subcmd $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/lib/*.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/objtool/*.[ch] $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/objtool/Build $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/objtool/include/objtool/*.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/lib/bpf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/lib/bpf/Build $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - - if [ -f tools/objtool/objtool ]; then - cp -a tools/objtool/objtool $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/tools/objtool/ || : - fi - if [ -f tools/objtool/fixdep ]; then - cp -a tools/objtool/fixdep $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/tools/objtool/ || : - fi - if [ -d arch/$Arch/scripts ]; then - cp -a arch/$Arch/scripts $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/arch/%{_arch} || : - fi - if [ -f arch/$Arch/*lds ]; then - cp -a arch/$Arch/*lds $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/arch/%{_arch}/ || : - fi - if [ -f arch/%{asmarch}/kernel/module.lds ]; then - cp -a --parents arch/%{asmarch}/kernel/module.lds $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - fi - find $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts \( -iname "*.o" -o -iname "*.cmd" \) -exec rm -f {} + -%ifarch ppc64le - cp -a --parents arch/powerpc/lib/crtsavres.[So] $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ -%endif - if [ -d arch/%{asmarch}/include ]; then - cp -a --parents arch/%{asmarch}/include $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - fi -%ifarch aarch64 - # arch/arm64/include/asm/xen references arch/arm - cp -a --parents arch/arm/include/asm/xen $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - # arch/arm64/include/asm/opcodes.h references arch/arm - cp -a --parents arch/arm/include/asm/opcodes.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ -%endif - # include the machine specific headers for ARM variants, if available. -%ifarch %{arm} - if [ -d arch/%{asmarch}/mach-${Variant}/include ]; then - cp -a --parents arch/%{asmarch}/mach-${Variant}/include $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - fi - # include a few files for 'make prepare' - cp -a --parents arch/arm/tools/gen-mach-types $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/arm/tools/mach-types $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - -%endif - cp -a include $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include -%ifarch i686 x86_64 - # files for 'make prepare' to succeed with kernel-devel - cp -a --parents arch/x86/entry/syscalls/syscall_32.tbl $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/entry/syscalls/syscall_64.tbl $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs_32.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs_64.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs_common.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/purgatory/purgatory.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/purgatory/stack.S $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/purgatory/setup-x86_64.S $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/purgatory/entry64.S $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/boot/string.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/boot/string.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/boot/ctype.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - - cp -a --parents scripts/syscalltbl.sh $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents scripts/syscallhdr.sh $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - - cp -a --parents tools/arch/x86/include/asm $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/arch/x86/include/uapi/asm $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/objtool/arch/x86/lib $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/arch/x86/lib/ $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/arch/x86/tools/gen-insn-attr-x86.awk $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/objtool/arch/x86/ $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - -%endif - # Clean up intermediate tools files - find $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/tools \( -iname "*.o" -o -iname "*.cmd" \) -exec rm -f {} + - - # Make sure the Makefile, version.h, and auto.conf have a matching - # timestamp so that external modules can be built - touch -r $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/Makefile \ - $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include/generated/uapi/linux/version.h \ - $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include/config/auto.conf - -%if %{with_debuginfo} - eu-readelf -n vmlinux | grep "Build ID" | awk '{print $NF}' > vmlinux.id - cp vmlinux.id $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/vmlinux.id - - # - # save the vmlinux file for kernel debugging into the kernel-debuginfo rpm - # - mkdir -p $RPM_BUILD_ROOT%{debuginfodir}/lib/modules/$KernelVer - cp vmlinux $RPM_BUILD_ROOT%{debuginfodir}/lib/modules/$KernelVer - if [ -n "%{vmlinux_decompressor}" ]; then - eu-readelf -n %{vmlinux_decompressor} | grep "Build ID" | awk '{print $NF}' > vmlinux.decompressor.id - # Without build-id the build will fail. But for s390 the build-id - # wasn't added before 5.11. In case it is missing prefer not - # packaging the debuginfo over a build failure. - if [ -s vmlinux.decompressor.id ]; then - cp vmlinux.decompressor.id $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/vmlinux.decompressor.id - cp %{vmlinux_decompressor} $RPM_BUILD_ROOT%{debuginfodir}/lib/modules/$KernelVer/vmlinux.decompressor - fi - fi -%endif - - find $RPM_BUILD_ROOT/lib/modules/$KernelVer -name "*.ko" -type f >modnames - - # mark modules executable so that strip-to-file can strip them - xargs --no-run-if-empty chmod u+x < modnames - - # Generate a list of modules for block and networking. - - grep -F /drivers/ modnames | xargs --no-run-if-empty nm -upA | - sed -n 's,^.*/\([^/]*\.ko\): *U \(.*\)$,\1 \2,p' > drivers.undef - - collect_modules_list() - { - sed -r -n -e "s/^([^ ]+) \\.?($2)\$/\\1/p" drivers.undef | - LC_ALL=C sort -u > $RPM_BUILD_ROOT/lib/modules/$KernelVer/modules.$1 - if [ ! -z "$3" ]; then - sed -r -e "/^($3)\$/d" -i $RPM_BUILD_ROOT/lib/modules/$KernelVer/modules.$1 - fi - } - - collect_modules_list networking \ - 'register_netdev|ieee80211_register_hw|usbnet_probe|phy_driver_register|rt(l_|2x00)(pci|usb)_probe|register_netdevice' - collect_modules_list block \ - 'ata_scsi_ioctl|scsi_add_host|scsi_add_host_with_dma|blk_alloc_queue|blk_init_queue|register_mtd_blktrans|scsi_esp_register|scsi_register_device_handler|blk_queue_physical_block_size' 'pktcdvd.ko|dm-mod.ko' - collect_modules_list drm \ - 'drm_open|drm_init' - collect_modules_list modesetting \ - 'drm_crtc_init' - - # detect missing or incorrect license tags - ( find $RPM_BUILD_ROOT/lib/modules/$KernelVer -name '*.ko' | xargs /sbin/modinfo -l | \ - grep -E -v 'GPL( v2)?$|Dual BSD/GPL$|Dual MPL/GPL$|GPL and additional rights$' ) && exit 1 - - remove_depmod_files() - { - # remove files that will be auto generated by depmod at rpm -i time - pushd $RPM_BUILD_ROOT/lib/modules/$KernelVer/ - rm -f modules.{alias,alias.bin,builtin.alias.bin,builtin.bin} \ - modules.{dep,dep.bin,devname,softdep,symbols,symbols.bin} - popd - } - - remove_depmod_files - - # Identify modules in the kernel-modules-extras package - %{SOURCE20} $RPM_BUILD_ROOT lib/modules/$KernelVer $(realpath configs/mod-extra.list) - # Identify modules in the kernel-modules-extras package - %{SOURCE20} $RPM_BUILD_ROOT lib/modules/$KernelVer %{SOURCE84} internal - - # - # Generate the kernel-core and kernel-modules files lists - # - - # Copy the System.map file for depmod to use, and create a backup of the - # full module tree so we can restore it after we're done filtering - cp System.map $RPM_BUILD_ROOT/. - cp configs/filter-*.sh $RPM_BUILD_ROOT/. - pushd $RPM_BUILD_ROOT - mkdir restore - cp -r lib/modules/$KernelVer/* restore/. - - # don't include anything going into kernel-modules-extra in the file lists - xargs rm -rf < mod-extra.list - # don't include anything going int kernel-modules-internal in the file lists - xargs rm -rf < mod-internal.list - - if [ $DoModules -eq 1 ]; then - # Find all the module files and filter them out into the core and - # modules lists. This actually removes anything going into -modules - # from the dir. - find lib/modules/$KernelVer/kernel -name *.ko | sort -n > modules.list - ./filter-modules.sh modules.list %{_target_cpu} - rm filter-*.sh - - # Run depmod on the resulting module tree and make sure it isn't broken - depmod -b . -aeF ./System.map $KernelVer &> depmod.out - if [ -s depmod.out ]; then - echo "Depmod failure" - cat depmod.out - exit 1 - else - rm depmod.out - fi - else - # Ensure important files/directories exist to let the packaging succeed - echo '%%defattr(-,-,-)' > modules.list - echo '%%defattr(-,-,-)' > k-d.list - mkdir -p lib/modules/$KernelVer/kernel - # Add files usually created by make modules, needed to prevent errors - # thrown by depmod during package installation - touch lib/modules/$KernelVer/modules.order - touch lib/modules/$KernelVer/modules.builtin - fi - - remove_depmod_files - - # Go back and find all of the various directories in the tree. We use this - # for the dir lists in kernel-core - find lib/modules/$KernelVer/kernel -mindepth 1 -type d | sort -n > module-dirs.list - - # Cleanup - rm System.map - # Just "cp -r" can be very slow: here, it rewrites _existing files_ - # with open(O_TRUNC). Many filesystems synchronously wait for metadata - # update for such file rewrites (seen in strace as final close syscall - # taking a long time). On a rotational disk, cp was observed to take - # more than 5 minutes on ext4 and more than 15 minutes (!) on xfs. - # With --remove-destination, we avoid this, and copying - # (with enough RAM to cache it) takes 5 seconds: - cp -r --remove-destination restore/* lib/modules/$KernelVer/. - rm -rf restore - popd - - # Make sure the files lists start with absolute paths or rpmbuild fails. - # Also add in the dir entries - sed -e 's/^lib*/\/lib/' %{?zipsed} $RPM_BUILD_ROOT/k-d.list > ../kernel${Variant:+-${Variant}}-modules.list - sed -e 's/^lib*/%dir \/lib/' %{?zipsed} $RPM_BUILD_ROOT/module-dirs.list > ../kernel${Variant:+-${Variant}}-core.list - sed -e 's/^lib*/\/lib/' %{?zipsed} $RPM_BUILD_ROOT/modules.list >> ../kernel${Variant:+-${Variant}}-core.list - sed -e 's/^lib*/\/lib/' %{?zipsed} $RPM_BUILD_ROOT/mod-extra.list >> ../kernel${Variant:+-${Variant}}-modules-extra.list - sed -e 's/^lib*/\/lib/' %{?zipsed} $RPM_BUILD_ROOT/mod-internal.list >> ../kernel${Variant:+-${Variant}}-modules-internal.list - - # Cleanup - rm -f $RPM_BUILD_ROOT/k-d.list - rm -f $RPM_BUILD_ROOT/modules.list - rm -f $RPM_BUILD_ROOT/module-dirs.list - rm -f $RPM_BUILD_ROOT/mod-extra.list - rm -f $RPM_BUILD_ROOT/mod-internal.list - -%if %{signmodules} - if [ $DoModules -eq 1 ]; then - # Save the signing keys so we can sign the modules in __modsign_install_post - cp certs/signing_key.pem certs/signing_key.pem.sign${Variant:++${Variant}} - cp certs/signing_key.x509 certs/signing_key.x509.sign${Variant:++${Variant}} - fi -%endif - - # Move the devel headers out of the root file system - mkdir -p $RPM_BUILD_ROOT/usr/src/kernels - mv $RPM_BUILD_ROOT/lib/modules/$KernelVer/build $RPM_BUILD_ROOT/$DevelDir - - # This is going to create a broken link during the build, but we don't use - # it after this point. We need the link to actually point to something - # when kernel-devel is installed, and a relative link doesn't work across - # the F17 UsrMove feature. - ln -sf $DevelDir $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - -%ifnarch armv7hl - # Generate vmlinux.h and put it to kernel-devel path - bpftool btf dump file vmlinux format c > $RPM_BUILD_ROOT/$DevelDir/vmlinux.h -%endif - - # prune junk from kernel-devel - find $RPM_BUILD_ROOT/usr/src/kernels -name ".*.cmd" -delete - - # Red Hat UEFI Secure Boot CA cert, which can be used to authenticate the kernel - mkdir -p $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer - %ifarch x86_64 aarch64 - install -m 0644 %{secureboot_ca_0} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca-20200609.cer - install -m 0644 %{secureboot_ca_1} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca-20140212.cer - ln -s kernel-signing-ca-20200609.cer $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca.cer - %else - install -m 0644 %{secureboot_ca_0} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca.cer - %endif - %ifarch s390x ppc64le - if [ $DoModules -eq 1 ]; then - if [ -x /usr/bin/rpm-sign ]; then - install -m 0644 %{secureboot_key_0} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/%{signing_key_filename} - else - install -m 0644 certs/signing_key.x509.sign${Variant:++${Variant}} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca.cer - openssl x509 -in certs/signing_key.pem.sign${Variant:++${Variant}} -outform der -out $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/%{signing_key_filename} - chmod 0644 $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/%{signing_key_filename} - fi - fi - %endif - -%if %{with_ipaclones} - MAXPROCS=$(echo %{?_smp_mflags} | sed -n 's/-j\s*\([0-9]\+\)/\1/p') - if [ -z "$MAXPROCS" ]; then - MAXPROCS=1 - fi - if [ "$Variant" == "" ]; then - mkdir -p $RPM_BUILD_ROOT/$DevelDir-ipaclones - find . -name '*.ipa-clones' | xargs -i{} -r -n 1 -P $MAXPROCS install -m 644 -D "{}" "$RPM_BUILD_ROOT/$DevelDir-ipaclones/{}" - fi -%endif - -} - -### -# DO it... -### - -# prepare directories -rm -rf $RPM_BUILD_ROOT -mkdir -p $RPM_BUILD_ROOT/boot -mkdir -p $RPM_BUILD_ROOT%{_libexecdir} - -cd linux-%{KVERREL} - - -%if %{with_debug} -BuildKernel %make_target %kernel_image %{_use_vdso} debug -%endif - -%if %{with_zfcpdump} -BuildKernel %make_target %kernel_image %{_use_vdso} zfcpdump -%endif - -%if %{with_pae} -BuildKernel %make_target %kernel_image %{use_vdso} lpae -%endif - -%if %{with_up} -BuildKernel %make_target %kernel_image %{_use_vdso} -%endif - -%ifnarch noarch i686 -%if !%{with_debug} && !%{with_zfcpdump} && !%{with_pae} && !%{with_up} -# If only building the user space tools, then initialize the build environment -# and some variables so that the various userspace tools can be built. -InitBuildVars -%endif -%endif - -%ifarch aarch64 -%global perf_build_extra_opts CORESIGHT=1 -%endif -%global perf_make \ - %{__make} %{?make_opts} EXTRA_CFLAGS="${RPM_OPT_FLAGS}" LDFLAGS="%{__global_ldflags}" %{?cross_opts} -C tools/perf V=1 NO_PERF_READ_VDSO32=1 NO_PERF_READ_VDSOX32=1 WERROR=0 NO_LIBUNWIND=1 HAVE_CPLUS_DEMANGLE=1 NO_GTK2=1 NO_STRLCPY=1 NO_BIONIC=1 LIBBPF_DYNAMIC=1 LIBTRACEEVENT_DYNAMIC=1 %{?perf_build_extra_opts} prefix=%{_prefix} PYTHON=%{__python3} -%if %{with_perf} -# perf -# make sure check-headers.sh is executable -chmod +x tools/perf/check-headers.sh -%{perf_make} DESTDIR=$RPM_BUILD_ROOT all -%endif - -%global tools_make \ - CFLAGS="${RPM_OPT_FLAGS}" LDFLAGS="%{__global_ldflags}" %{make} %{?make_opts} - -%if %{with_tools} -%ifarch %{cpupowerarchs} -# cpupower -# make sure version-gen.sh is executable. -chmod +x tools/power/cpupower/utils/version-gen.sh -%{tools_make} %{?_smp_mflags} -C tools/power/cpupower CPUFREQ_BENCH=false DEBUG=false -%ifarch x86_64 - pushd tools/power/cpupower/debug/x86_64 - %{tools_make} %{?_smp_mflags} centrino-decode powernow-k8-decode - popd -%endif -%ifarch x86_64 - pushd tools/power/x86/x86_energy_perf_policy/ - %{tools_make} - popd - pushd tools/power/x86/turbostat - %{tools_make} - popd - pushd tools/power/x86/intel-speed-select - %{tools_make} - popd - pushd tools/arch/x86/intel_sdsi - %{tools_make} CFLAGS="${RPM_OPT_FLAGS}" - popd -%endif -%endif -pushd tools/thermal/tmon/ -%{tools_make} -popd -pushd tools/iio/ -%{tools_make} -popd -pushd tools/gpio/ -%{tools_make} -popd -# build VM tools -pushd tools/vm/ -%{tools_make} slabinfo page_owner_sort -popd -%endif - -if [ -f $DevelDir/vmlinux.h ]; then - RPM_VMLINUX_H=$DevelDir/vmlinux.h -fi - -%global bpftool_make \ - %{__make} EXTRA_CFLAGS="${RPM_OPT_FLAGS}" EXTRA_LDFLAGS="%{__global_ldflags}" DESTDIR=$RPM_BUILD_ROOT %{?make_opts} VMLINUX_H="${RPM_VMLINUX_H}" V=1 -%if %{with_bpftool} -pushd tools/bpf/bpftool -%{bpftool_make} -popd -%endif - -%if %{with_selftests} -# Unfortunately, samples/bpf/Makefile expects that the headers are installed -# in the source tree. We installed them previously to $RPM_BUILD_ROOT/usr -# but there's no way to tell the Makefile to take them from there. -%{make} %{?_smp_mflags} headers_install -%{make} %{?_smp_mflags} ARCH=$Arch V=1 M=samples/bpf/ || true - -# Prevent bpf selftests to build bpftool repeatedly: -export BPFTOOL=$(pwd)/tools/bpf/bpftool/bpftool - -pushd tools/testing/selftests -# We need to install here because we need to call make with ARCH set which -# doesn't seem possible to do in the install section. -%{make} %{?_smp_mflags} ARCH=$Arch V=1 TARGETS="bpf vm livepatch net net/forwarding net/mptcp netfilter tc-testing" SKIP_TARGETS="" INSTALL_PATH=%{buildroot}%{_libexecdir}/kselftests VMLINUX_H="${RPM_VMLINUX_H}" install - -# 'make install' for bpf is broken and upstream refuses to fix it. -# Install the needed files manually. -for dir in bpf bpf/no_alu32 bpf/progs; do - # In ARK, the rpm build continues even if some of the selftests - # cannot be built. It's not always possible to build selftests, - # as upstream sometimes dependens on too new llvm version or has - # other issues. If something did not get built, just skip it. - test -d $dir || continue - mkdir -p %{buildroot}%{_libexecdir}/kselftests/$dir - find $dir -maxdepth 1 -type f \( -executable -o -name '*.py' -o -name settings -o \ - -name 'btf_dump_test_case_*.c' -o -name '*.ko' -o \ - -name '*.o' -exec sh -c 'readelf -h "{}" | grep -q "^ Machine:.*BPF"' \; \) -print0 | \ - xargs -0 cp -t %{buildroot}%{_libexecdir}/kselftests/$dir || true -done -popd -export -n BPFTOOL -%endif - -%if %{with_doc} -# Make the HTML pages. -%{__make} PYTHON=/usr/bin/python3 htmldocs || %{doc_build_fail} - -# sometimes non-world-readable files sneak into the kernel source tree -chmod -R a=rX Documentation -find Documentation -type d | xargs chmod u+w -%endif - -# In the modsign case, we do 3 things. 1) We check the "variant" and hard -# code the value in the following invocations. This is somewhat sub-optimal -# but we're doing this inside of an RPM macro and it isn't as easy as it -# could be because of that. 2) We restore the .tmp_versions/ directory from -# the one we saved off in BuildKernel above. This is to make sure we're -# signing the modules we actually built/installed in that variant. 3) We -# grab the arch and invoke mod-sign.sh command to actually sign the modules. -# -# We have to do all of those things _after_ find-debuginfo runs, otherwise -# that will strip the signature off of the modules. -# -# Don't sign modules for the zfcpdump variant as it is monolithic. - -%define __modsign_install_post \ - if [ "%{signmodules}" -eq "1" ]; then \ - if [ "%{with_pae}" -ne "0" ]; then \ - %{modsign_cmd} certs/signing_key.pem.sign+lpae certs/signing_key.x509.sign+lpae $RPM_BUILD_ROOT/lib/modules/%{KVERREL}+lpae/ \ - fi \ - if [ "%{with_debug}" -ne "0" ]; then \ - %{modsign_cmd} certs/signing_key.pem.sign+debug certs/signing_key.x509.sign+debug $RPM_BUILD_ROOT/lib/modules/%{KVERREL}+debug/ \ - fi \ - if [ "%{with_up}" -ne "0" ]; then \ - %{modsign_cmd} certs/signing_key.pem.sign certs/signing_key.x509.sign $RPM_BUILD_ROOT/lib/modules/%{KVERREL}/ \ - fi \ - fi \ - if [ "%{zipmodules}" -eq "1" ]; then \ - find $RPM_BUILD_ROOT/lib/modules/ -type f -name '*.ko' | xargs -P${RPM_BUILD_NCPUS} -r xz; \ - fi \ -%{nil} - -### -### Special hacks for debuginfo subpackages. -### - -# This macro is used by %%install, so we must redefine it before that. -%define debug_package %{nil} - -%if %{with_debuginfo} - -%ifnarch noarch -%global __debug_package 1 -%files -f debugfiles.list debuginfo-common-%{_target_cpu} -%endif - -%endif - -# We don't want to package debuginfo for self-tests and samples but -# we have to delete them to avoid an error messages about unpackaged -# files. -# Delete the debuginfo for kernel-devel files -%define __remove_unwanted_dbginfo_install_post \ - if [ "%{with_selftests}" -ne "0" ]; then \ - rm -rf $RPM_BUILD_ROOT/usr/lib/debug/usr/libexec/ksamples; \ - rm -rf $RPM_BUILD_ROOT/usr/lib/debug/usr/libexec/kselftests; \ - fi \ - rm -rf $RPM_BUILD_ROOT/usr/lib/debug/usr/src; \ -%{nil} - -# -# Disgusting hack alert! We need to ensure we sign modules *after* all -# invocations of strip occur, which is in __debug_install_post if -# find-debuginfo.sh runs, and __os_install_post if not. -# -%define __spec_install_post \ - %{?__debug_package:%{__debug_install_post}}\ - %{__arch_install_post}\ - %{__os_install_post}\ - %{__remove_unwanted_dbginfo_install_post}\ - %{__modsign_install_post} - -### -### install -### - -%install - -cd linux-%{KVERREL} - -%if %{with_doc} -docdir=$RPM_BUILD_ROOT%{_datadir}/doc/kernel-doc-%{specversion}-%{pkgrelease} - -# copy the source over -mkdir -p $docdir -tar -h -f - --exclude=man --exclude='.*' -c Documentation | tar xf - -C $docdir - -# with_doc -%endif - -# We have to do the headers install before the tools install because the -# kernel headers_install will remove any header files in /usr/include that -# it doesn't install itself. - -%if %{with_headers} -# Install kernel headers -%{__make} ARCH=%{hdrarch} INSTALL_HDR_PATH=$RPM_BUILD_ROOT/usr headers_install - -find $RPM_BUILD_ROOT/usr/include \ - \( -name .install -o -name .check -o \ - -name ..install.cmd -o -name ..check.cmd \) -delete - -%endif - -%if %{with_cross_headers} -%if 0%{?fedora} -HDR_ARCH_LIST='arm arm64 powerpc s390 x86' -%else -HDR_ARCH_LIST='arm64 powerpc s390 x86' -%endif -mkdir -p $RPM_BUILD_ROOT/usr/tmp-headers - -for arch in $HDR_ARCH_LIST; do - mkdir $RPM_BUILD_ROOT/usr/tmp-headers/arch-${arch} - %{__make} ARCH=${arch} INSTALL_HDR_PATH=$RPM_BUILD_ROOT/usr/tmp-headers/arch-${arch} headers_install -done - -find $RPM_BUILD_ROOT/usr/tmp-headers \ - \( -name .install -o -name .check -o \ - -name ..install.cmd -o -name ..check.cmd \) -delete - -# Copy all the architectures we care about to their respective asm directories -for arch in $HDR_ARCH_LIST ; do - mkdir -p $RPM_BUILD_ROOT/usr/${arch}-linux-gnu/include - mv $RPM_BUILD_ROOT/usr/tmp-headers/arch-${arch}/include/* $RPM_BUILD_ROOT/usr/${arch}-linux-gnu/include/ -done - -rm -rf $RPM_BUILD_ROOT/usr/tmp-headers -%endif - -%if %{with_kernel_abi_stablelists} -# kabi directory -INSTALL_KABI_PATH=$RPM_BUILD_ROOT/lib/modules/ -mkdir -p $INSTALL_KABI_PATH - -# install kabi releases directories -tar xjvf %{SOURCE300} -C $INSTALL_KABI_PATH -# with_kernel_abi_stablelists -%endif - -%if %{with_perf} -# perf tool binary and supporting scripts/binaries -%{perf_make} DESTDIR=$RPM_BUILD_ROOT lib=%{_lib} install-bin -# remove the 'trace' symlink. -rm -f %{buildroot}%{_bindir}/trace - -# For both of the below, yes, this should be using a macro but right now -# it's hard coded and we don't actually want it anyway right now. -# Whoever wants examples can fix it up! - -# remove examples -rm -rf %{buildroot}/usr/lib/perf/examples -rm -rf %{buildroot}/usr/lib/perf/include - -# python-perf extension -%{perf_make} DESTDIR=$RPM_BUILD_ROOT install-python_ext - -# perf man pages (note: implicit rpm magic compresses them later) -mkdir -p %{buildroot}/%{_mandir}/man1 -%{perf_make} DESTDIR=$RPM_BUILD_ROOT install-man - -# remove any tracevent files, eg. its plugins still gets built and installed, -# even if we build against system's libtracevent during perf build (by setting -# LIBTRACEEVENT_DYNAMIC=1 above in perf_make macro). Those files should already -# ship with libtraceevent package. -rm -rf %{buildroot}%{_libdir}/traceevent -%endif - -%if %{with_tools} -%ifarch %{cpupowerarchs} -%{make} -C tools/power/cpupower DESTDIR=$RPM_BUILD_ROOT libdir=%{_libdir} mandir=%{_mandir} CPUFREQ_BENCH=false install -rm -f %{buildroot}%{_libdir}/*.{a,la} -%find_lang cpupower -mv cpupower.lang ../ -%ifarch x86_64 - pushd tools/power/cpupower/debug/x86_64 - install -m755 centrino-decode %{buildroot}%{_bindir}/centrino-decode - install -m755 powernow-k8-decode %{buildroot}%{_bindir}/powernow-k8-decode - popd -%endif -chmod 0755 %{buildroot}%{_libdir}/libcpupower.so* -mkdir -p %{buildroot}%{_unitdir} %{buildroot}%{_sysconfdir}/sysconfig -install -m644 %{SOURCE2000} %{buildroot}%{_unitdir}/cpupower.service -install -m644 %{SOURCE2001} %{buildroot}%{_sysconfdir}/sysconfig/cpupower -%endif -%ifarch x86_64 - mkdir -p %{buildroot}%{_mandir}/man8 - pushd tools/power/x86/x86_energy_perf_policy - %{tools_make} DESTDIR=%{buildroot} install - popd - pushd tools/power/x86/turbostat - %{tools_make} DESTDIR=%{buildroot} install - popd - pushd tools/power/x86/intel-speed-select - %{tools_make} DESTDIR=%{buildroot} install - popd - pushd tools/arch/x86/intel_sdsi - %{tools_make} CFLAGS="${RPM_OPT_FLAGS}" DESTDIR=%{buildroot} install - popd -%endif -pushd tools/thermal/tmon -%{tools_make} INSTALL_ROOT=%{buildroot} install -popd -pushd tools/iio -%{tools_make} DESTDIR=%{buildroot} install -popd -pushd tools/gpio -%{tools_make} DESTDIR=%{buildroot} install -popd -install -m644 -D %{SOURCE2002} %{buildroot}%{_sysconfdir}/logrotate.d/kvm_stat -pushd tools/kvm/kvm_stat -%{__make} INSTALL_ROOT=%{buildroot} install-tools -%{__make} INSTALL_ROOT=%{buildroot} install-man -install -m644 -D kvm_stat.service %{buildroot}%{_unitdir}/kvm_stat.service -popd -# install VM tools -pushd tools/vm/ -install -m755 slabinfo %{buildroot}%{_bindir}/slabinfo -install -m755 page_owner_sort %{buildroot}%{_bindir}/page_owner_sort -popd -%endif - -if [ -f $DevelDir/vmlinux.h ]; then - RPM_VMLINUX_H=$DevelDir/vmlinux.h -fi - -%if %{with_bpftool} -pushd tools/bpf/bpftool -%{bpftool_make} prefix=%{_prefix} bash_compdir=%{_sysconfdir}/bash_completion.d/ mandir=%{_mandir} install doc-install -popd -%endif - -%if %{with_selftests} -pushd samples -install -d %{buildroot}%{_libexecdir}/ksamples -# install bpf samples -pushd bpf -install -d %{buildroot}%{_libexecdir}/ksamples/bpf -find -type f -executable -exec install -m755 {} %{buildroot}%{_libexecdir}/ksamples/bpf \; -install -m755 *.sh %{buildroot}%{_libexecdir}/ksamples/bpf -# test_lwt_bpf.sh compiles test_lwt_bpf.c when run; this works only from the -# kernel tree. Just remove it. -rm %{buildroot}%{_libexecdir}/ksamples/bpf/test_lwt_bpf.sh -install -m644 *_kern.o %{buildroot}%{_libexecdir}/ksamples/bpf || true -install -m644 tcp_bpf.readme %{buildroot}%{_libexecdir}/ksamples/bpf -popd -# install pktgen samples -pushd pktgen -install -d %{buildroot}%{_libexecdir}/ksamples/pktgen -find . -type f -executable -exec install -m755 {} %{buildroot}%{_libexecdir}/ksamples/pktgen/{} \; -find . -type f ! -executable -exec install -m644 {} %{buildroot}%{_libexecdir}/ksamples/pktgen/{} \; -popd -popd -# install vm selftests -pushd tools/testing/selftests/vm -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/vm/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/vm/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/vm/{} \; -popd -# install drivers/net/mlxsw selftests -pushd tools/testing/selftests/drivers/net/mlxsw -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/drivers/net/mlxsw/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/drivers/net/mlxsw/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/drivers/net/mlxsw/{} \; -popd -# install drivers/net/netdevsim selftests -pushd tools/testing/selftests/drivers/net/netdevsim -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/drivers/net/netdevsim/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/drivers/net/netdevsim/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/drivers/net/netdevsim/{} \; -popd -# install net/forwarding selftests -pushd tools/testing/selftests/net/forwarding -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/net/forwarding/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/net/forwarding/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/net/forwarding/{} \; -popd -# install net/mptcp selftests -pushd tools/testing/selftests/net/mptcp -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/net/mptcp/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/net/mptcp/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/net/mptcp/{} \; -popd -# install tc-testing selftests -pushd tools/testing/selftests/tc-testing -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/tc-testing/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/tc-testing/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/tc-testing/{} \; -popd -# install livepatch selftests -pushd tools/testing/selftests/livepatch -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/livepatch/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/livepatch/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/livepatch/{} \; -popd -# install netfilter selftests -pushd tools/testing/selftests/netfilter -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/netfilter/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/netfilter/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/netfilter/{} \; -popd -%endif - -### -### clean -### - -### -### scripts -### - -%if %{with_tools} -%post -n kernel-tools-libs -/sbin/ldconfig - -%postun -n kernel-tools-libs -/sbin/ldconfig -%endif - -# -# This macro defines a %%post script for a kernel*-devel package. -# %%kernel_devel_post [<subpackage>] -# Note we don't run hardlink if ostree is in use, as ostree is -# a far more sophisticated hardlink implementation. -# https://github.com/projectatomic/rpm-ostree/commit/58a79056a889be8814aa51f507b2c7a4dccee526 -# -# The deletion of *.hardlink-temporary files is a temporary workaround -# for this bug in the hardlink binary (fixed in util-linux 2.38): -# https://github.com/util-linux/util-linux/issues/1602 -# -%define kernel_devel_post() \ -%{expand:%%post %{?1:%{1}-}devel}\ -if [ -f /etc/sysconfig/kernel ]\ -then\ - . /etc/sysconfig/kernel || exit $?\ -fi\ -if [ "$HARDLINK" != "no" -a -x /usr/bin/hardlink -a ! -e /run/ostree-booted ] \ -then\ - (cd /usr/src/kernels/%{KVERREL}%{?1:+%{1}} &&\ - /usr/bin/find . -type f | while read f; do\ - hardlink -c /usr/src/kernels/*%{?dist}.*/$f $f > /dev/null\ - done;\ - /usr/bin/find /usr/src/kernels -type f -name '*.hardlink-temporary' -delete\ - )\ -fi\ -%{nil} - -# -# This macro defines a %%post script for a kernel*-modules-extra package. -# It also defines a %%postun script that does the same thing. -# %%kernel_modules_extra_post [<subpackage>] -# -%define kernel_modules_extra_post() \ -%{expand:%%post %{?1:%{1}-}modules-extra}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil}\ -%{expand:%%postun %{?1:%{1}-}modules-extra}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil} - -# -# This macro defines a %%post script for a kernel*-modules-internal package. -# It also defines a %%postun script that does the same thing. -# %%kernel_modules_internal_post [<subpackage>] -# -%define kernel_modules_internal_post() \ -%{expand:%%post %{?1:%{1}-}modules-internal}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil}\ -%{expand:%%postun %{?1:%{1}-}modules-internal}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil} - -# -# This macro defines a %%post script for a kernel*-modules package. -# It also defines a %%postun script that does the same thing. -# %%kernel_modules_post [<subpackage>] -# -%define kernel_modules_post() \ -%{expand:%%post %{?1:%{1}-}modules}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -if [ ! -f %{_localstatedir}/lib/rpm-state/%{name}/installing_core_%{KVERREL}%{?1:+%{1}} ]; then\ - mkdir -p %{_localstatedir}/lib/rpm-state/%{name}\ - touch %{_localstatedir}/lib/rpm-state/%{name}/need_to_run_dracut_%{KVERREL}%{?1:+%{1}}\ -fi\ -%{nil}\ -%{expand:%%postun %{?1:%{1}-}modules}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil}\ -%{expand:%%posttrans %{?1:%{1}-}modules}\ -if [ -f %{_localstatedir}/lib/rpm-state/%{name}/need_to_run_dracut_%{KVERREL}%{?1:+%{1}} ]; then\ - rm -f %{_localstatedir}/lib/rpm-state/%{name}/need_to_run_dracut_%{KVERREL}%{?1:+%{1}}\ - echo "Running: dracut -f --kver %{KVERREL}%{?1:+%{1}}"\ - dracut -f --kver "%{KVERREL}%{?1:+%{1}}" || exit $?\ -fi\ -%{nil} - -# This macro defines a %%posttrans script for a kernel package. -# %%kernel_variant_posttrans [<subpackage>] -# More text can follow to go at the end of this variant's %%post. -# -%define kernel_variant_posttrans() \ -%{expand:%%posttrans %{?1:%{1}-}core}\ -%if 0%{!?fedora:1}\ -if [ -x %{_sbindir}/weak-modules ]\ -then\ - %{_sbindir}/weak-modules --add-kernel %{KVERREL}%{?1:+%{1}} || exit $?\ -fi\ -%endif\ -rm -f %{_localstatedir}/lib/rpm-state/%{name}/installing_core_%{KVERREL}%{?1:+%{1}}\ -/bin/kernel-install add %{KVERREL}%{?1:+%{1}} /lib/modules/%{KVERREL}%{?1:+%{1}}/vmlinuz || exit $?\ -%{nil} - -# -# This macro defines a %%post script for a kernel package and its devel package. -# %%kernel_variant_post [-v <subpackage>] [-r <replace>] -# More text can follow to go at the end of this variant's %%post. -# -%define kernel_variant_post(v:r:) \ -%{expand:%%kernel_devel_post %{?-v*}}\ -%{expand:%%kernel_modules_post %{?-v*}}\ -%{expand:%%kernel_modules_extra_post %{?-v*}}\ -%{expand:%%kernel_modules_internal_post %{?-v*}}\ -%{expand:%%kernel_variant_posttrans %{?-v*}}\ -%{expand:%%post %{?-v*:%{-v*}-}core}\ -%{-r:\ -if [ `uname -i` == "x86_64" -o `uname -i` == "i386" ] &&\ - [ -f /etc/sysconfig/kernel ]; then\ - /bin/sed -r -i -e 's/^DEFAULTKERNEL=%{-r*}$/DEFAULTKERNEL=kernel%{?-v:-%{-v*}}/' /etc/sysconfig/kernel || exit $?\ -fi}\ -mkdir -p %{_localstatedir}/lib/rpm-state/%{name}\ -touch %{_localstatedir}/lib/rpm-state/%{name}/installing_core_%{KVERREL}%{?1:+%{1}}\ -%{nil} - -# -# This macro defines a %%preun script for a kernel package. -# %%kernel_variant_preun <subpackage> -# -%define kernel_variant_preun() \ -%{expand:%%preun %{?1:%{1}-}core}\ -/bin/kernel-install remove %{KVERREL}%{?1:+%{1}} /lib/modules/%{KVERREL}%{?1:+%{1}}/vmlinuz || exit $?\ -if [ -x %{_sbindir}/weak-modules ]\ -then\ - %{_sbindir}/weak-modules --remove-kernel %{KVERREL}%{?1:+%{1}} || exit $?\ -fi\ -%{nil} - -%kernel_variant_preun -%kernel_variant_post -r kernel-smp - -%if %{with_pae} -%kernel_variant_preun lpae -%kernel_variant_post -v lpae -r (kernel|kernel-smp) -%endif - -%if %{with_debug} -%kernel_variant_preun debug -%kernel_variant_post -v debug -%endif - -%if %{with_zfcpdump} -%kernel_variant_preun zfcpdump -%kernel_variant_post -v zfcpdump -%endif - -if [ -x /sbin/ldconfig ] -then - /sbin/ldconfig -X || exit $? -fi - -### -### file lists -### - -%if %{with_headers} -%files headers -/usr/include/* -%endif - -%if %{with_cross_headers} -%files cross-headers -/usr/*-linux-gnu/include/* -%endif - -%if %{with_kernel_abi_stablelists} -%files -n kernel-abi-stablelists -/lib/modules/kabi-* -%endif - -%if %{with_kabidw_base} -%ifarch x86_64 s390x ppc64 ppc64le aarch64 -%files kernel-kabidw-base-internal -%defattr(-,root,root) -/kabidw-base/%{_target_cpu}/* -%endif -%endif - -# only some architecture builds need kernel-doc -%if %{with_doc} -%files doc -%defattr(-,root,root) -%{_datadir}/doc/kernel-doc-%{specversion}-%{pkgrelease}/Documentation/* -%dir %{_datadir}/doc/kernel-doc-%{specversion}-%{pkgrelease}/Documentation -%dir %{_datadir}/doc/kernel-doc-%{specversion}-%{pkgrelease} -%endif - -%if %{with_perf} -%files -n perf -%{_bindir}/perf -%{_libdir}/libperf-jvmti.so -%dir %{_libexecdir}/perf-core -%{_libexecdir}/perf-core/* -%{_datadir}/perf-core/* -%{_mandir}/man[1-8]/perf* -%{_sysconfdir}/bash_completion.d/perf -%doc linux-%{KVERREL}/tools/perf/Documentation/examples.txt -%{_docdir}/perf-tip/tips.txt - -%files -n python3-perf -%{python3_sitearch}/* - -%if %{with_debuginfo} -%files -f perf-debuginfo.list -n perf-debuginfo - -%files -f python3-perf-debuginfo.list -n python3-perf-debuginfo -%endif -# with_perf -%endif - -%if %{with_tools} -%ifnarch %{cpupowerarchs} -%files -n kernel-tools -%else -%files -n kernel-tools -f cpupower.lang -%{_bindir}/cpupower -%{_datadir}/bash-completion/completions/cpupower -%ifarch x86_64 -%{_bindir}/centrino-decode -%{_bindir}/powernow-k8-decode -%endif -%{_unitdir}/cpupower.service -%{_mandir}/man[1-8]/cpupower* -%config(noreplace) %{_sysconfdir}/sysconfig/cpupower -%ifarch x86_64 -%{_bindir}/x86_energy_perf_policy -%{_mandir}/man8/x86_energy_perf_policy* -%{_bindir}/turbostat -%{_mandir}/man8/turbostat* -%{_bindir}/intel-speed-select -%{_sbindir}/intel_sdsi -%endif -# cpupowerarchs -%endif -%{_bindir}/tmon -%{_bindir}/iio_event_monitor -%{_bindir}/iio_generic_buffer -%{_bindir}/lsiio -%{_bindir}/lsgpio -%{_bindir}/gpio-hammer -%{_bindir}/gpio-event-mon -%{_bindir}/gpio-watch -%{_mandir}/man1/kvm_stat* -%{_bindir}/kvm_stat -%{_unitdir}/kvm_stat.service -%config(noreplace) %{_sysconfdir}/logrotate.d/kvm_stat -%{_bindir}/page_owner_sort -%{_bindir}/slabinfo - -%if %{with_debuginfo} -%files -f kernel-tools-debuginfo.list -n kernel-tools-debuginfo -%endif - -%ifarch %{cpupowerarchs} -%files -n kernel-tools-libs -%{_libdir}/libcpupower.so.0 -%{_libdir}/libcpupower.so.0.0.1 - -%files -n kernel-tools-libs-devel -%{_libdir}/libcpupower.so -%{_includedir}/cpufreq.h -%endif -# with_tools -%endif - -%if %{with_bpftool} -%files -n bpftool -%{_sbindir}/bpftool -%{_sysconfdir}/bash_completion.d/bpftool -%{_mandir}/man8/bpftool-cgroup.8.gz -%{_mandir}/man8/bpftool-gen.8.gz -%{_mandir}/man8/bpftool-iter.8.gz -%{_mandir}/man8/bpftool-link.8.gz -%{_mandir}/man8/bpftool-map.8.gz -%{_mandir}/man8/bpftool-prog.8.gz -%{_mandir}/man8/bpftool-perf.8.gz -%{_mandir}/man8/bpftool.8.gz -%{_mandir}/man8/bpftool-net.8.gz -%{_mandir}/man8/bpftool-feature.8.gz -%{_mandir}/man8/bpftool-btf.8.gz -%{_mandir}/man8/bpftool-struct_ops.8.gz - -%if %{with_debuginfo} -%files -f bpftool-debuginfo.list -n bpftool-debuginfo -%defattr(-,root,root) -%endif -%endif - -%if %{with_selftests} -%files selftests-internal -%{_libexecdir}/ksamples -%{_libexecdir}/kselftests -%endif - -# empty meta-package -%ifnarch %nobuildarches noarch -%files -%endif - -%if %{with_gcov} -%ifnarch %nobuildarches noarch -%files gcov -%{_builddir} -%endif -%endif - -# This is %%{image_install_path} on an arch where that includes ELF files, -# or empty otherwise. -%define elf_image_install_path %{?kernel_image_elf:%{image_install_path}} - -# -# This macro defines the %%files sections for a kernel package -# and its devel and debuginfo packages. -# %%kernel_variant_files [-k vmlinux] <use_vdso> <condition> <subpackage> -# -%define kernel_variant_files(k:) \ -%if %{2}\ -%{expand:%%files -f kernel-%{?3:%{3}-}core.list %{?1:-f kernel-%{?3:%{3}-}ldsoconf.list} %{?3:%{3}-}core}\ -%{!?_licensedir:%global license %%doc}\ -%license linux-%{KVERREL}/COPYING-%{version}-%{release}\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/%{?-k:%{-k*}}%{!?-k:vmlinuz}\ -%ghost /%{image_install_path}/%{?-k:%{-k*}}%{!?-k:vmlinuz}-%{KVERREL}%{?3:+%{3}}\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/.vmlinuz.hmac \ -%ghost /%{image_install_path}/.vmlinuz-%{KVERREL}%{?3:+%{3}}.hmac \ -%ifarch %{arm} aarch64\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/dtb \ -%ghost /%{image_install_path}/dtb-%{KVERREL}%{?3:+%{3}} \ -%endif\ -%attr(0600, root, root) /lib/modules/%{KVERREL}%{?3:+%{3}}/System.map\ -%ghost %attr(0600, root, root) /boot/System.map-%{KVERREL}%{?3:+%{3}}\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/symvers.gz\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/config\ -%ghost %attr(0600, root, root) /boot/symvers-%{KVERREL}%{?3:+%{3}}.gz\ -%ghost %attr(0600, root, root) /boot/initramfs-%{KVERREL}%{?3:+%{3}}.img\ -%ghost %attr(0644, root, root) /boot/config-%{KVERREL}%{?3:+%{3}}\ -%dir /lib/modules\ -%dir /lib/modules/%{KVERREL}%{?3:+%{3}}\ -%dir /lib/modules/%{KVERREL}%{?3:+%{3}}/kernel\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/build\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/source\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/updates\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/weak-updates\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/systemtap\ -%{_datadir}/doc/kernel-keys/%{KVERREL}%{?3:+%{3}}\ -%if %{1}\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/vdso\ -%endif\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/modules.*\ -%{expand:%%files -f kernel-%{?3:%{3}-}modules.list %{?3:%{3}-}modules}\ -%{expand:%%files %{?3:%{3}-}devel}\ -%defverify(not mtime)\ -/usr/src/kernels/%{KVERREL}%{?3:+%{3}}\ -%{expand:%%files %{?3:%{3}-}devel-matched}\ -%{expand:%%files -f kernel-%{?3:%{3}-}modules-extra.list %{?3:%{3}-}modules-extra}\ -%config(noreplace) /etc/modprobe.d/*-blacklist.conf\ -%{expand:%%files -f kernel-%{?3:%{3}-}modules-internal.list %{?3:%{3}-}modules-internal}\ -%if %{with_debuginfo}\ -%ifnarch noarch\ -%{expand:%%files -f debuginfo%{?3}.list %{?3:%{3}-}debuginfo}\ -%endif\ -%endif\ -%if %{?3:1} %{!?3:0}\ -%{expand:%%files %{3}}\ -%endif\ -%endif\ -%{nil} - -%kernel_variant_files %{_use_vdso} %{with_up} -%kernel_variant_files %{_use_vdso} %{with_debug} debug -%if %{with_debug_meta} -%files debug -%files debug-core -%files debug-devel -%files debug-devel-matched -%files debug-modules -%files debug-modules-extra -%endif -%kernel_variant_files %{use_vdso} %{with_pae} lpae -%kernel_variant_files %{_use_vdso} %{with_zfcpdump} zfcpdump - -%define kernel_variant_ipaclones(k:) \ -%if %{1}\ -%if %{with_ipaclones}\ -%{expand:%%files %{?2:%{2}-}ipaclones-internal}\ -%defattr(-,root,root)\ -%defverify(not mtime)\ -/usr/src/kernels/%{KVERREL}%{?2:+%{2}}-ipaclones\ -%endif\ -%endif\ -%{nil} - -%kernel_variant_ipaclones %{with_up} - -# plz don't put in a version string unless you're going to tag -# and build. -# -# -%changelog Mon Mar 28 2022 Fedora Kernel Team <kernel-team@xxxxxxxxxxxxxxxxx> [5.16.0-0.rc5.fce15c45d3fb.6.test] - -### -# The following Emacs magic makes C-c C-e use UTC dates. -# Local Variables: -# rpm-change-log-uses-utc: t -# End: -### diff --git a/redhat/self-test/data/fedora-2585cf9dfaad.el7.spec b/redhat/self-test/data/fedora-2585cf9dfaad.el7.spec index blahblah..blahblah 100755 --- a/redhat/self-test/data/fedora-2585cf9dfaad.el7.spec +++ b/redhat/self-test/data/fedora-2585cf9dfaad.el7.spec @@ -1,3050 +1,13 @@ -# All Global changes to build and install go here. -# Per the below section about __spec_install_pre, any rpm -# environment changes that affect %%install need to go -# here before the %%install macro is pre-built. - -# Disable LTO in userspace packages. -%global _lto_cflags %{nil} - -# Option to enable compiling with clang instead of gcc. -%bcond_with toolchain_clang - -%if %{with toolchain_clang} -%global toolchain clang -%endif - -# Compile the kernel with LTO (only supported when building with clang). -%bcond_with clang_lto - -%if %{with clang_lto} && %{without toolchain_clang} -{error:clang_lto requires --with toolchain_clang} -%endif - -# Cross compile on copr for arm -# See https://bugzilla.redhat.com/1879599 -%if 0%{?_with_cross_arm:1} -%global _target_cpu armv7hl -%global _arch arm -%global _build_arch arm -%global _with_cross 1 -%endif - -# The kernel's %%install section is special -# Normally the %%install section starts by cleaning up the BUILD_ROOT -# like so: -# -# %%__spec_install_pre %%{___build_pre}\ -# [ "$RPM_BUILD_ROOT" != "/" ] && rm -rf "${RPM_BUILD_ROOT}"\ -# mkdir -p `dirname "$RPM_BUILD_ROOT"`\ -# mkdir "$RPM_BUILD_ROOT"\ -# %%{nil} -# -# But because of kernel variants, the %%build section, specifically -# BuildKernel(), moves each variant to its final destination as the -# variant is built. This violates the expectation of the %%install -# section. As a result we snapshot the current env variables and -# purposely leave out the removal section. All global wide changes -# should be added above this line otherwise the %%install section -# will not see them. -%global __spec_install_pre %{___build_pre} - -# At the time of this writing (2019-03), RHEL8 packages use w2.xzdio -# compression for rpms (xz, level 2). -# Kernel has several large (hundreds of mbytes) rpms, they take ~5 mins -# to compress by single-threaded xz. Switch to threaded compression, -# and from level 2 to 3 to keep compressed sizes close to "w2" results. -# -# NB: if default compression in /usr/lib/rpm/redhat/macros ever changes, -# this one might need tweaking (e.g. if default changes to w3.xzdio, -# change below to w4T.xzdio): -# -# This is disabled on i686 as it triggers oom errors - -%ifnarch i686 -%define _binary_payload w3T.xzdio -%endif - -Summary: The Linux kernel -%if 0%{?fedora} -%define secure_boot_arch x86_64 -%else -%define secure_boot_arch x86_64 aarch64 s390x ppc64le -%endif - -# Signing for secure boot authentication -%ifarch %{secure_boot_arch} -%global signkernel 1 -%else -%global signkernel 0 -%endif - -# Sign modules on all arches -%global signmodules 1 - -# Compress modules only for architectures that build modules -%ifarch noarch -%global zipmodules 0 -%else -%global zipmodules 1 -%endif - -%if %{zipmodules} -%global zipsed -e 's/\.ko$/\.ko.xz/' -# for parallel xz processes, replace with 1 to go back to single process -%endif - -%if 0%{?fedora} -%define primary_target fedora -%else -%define primary_target rhel -%endif - -# -# genspec.sh variables -# - -# Include Fedora files %global include_fedora 1 -# Include RHEL files %global include_rhel 1 -# Provide Patchlist.changelog file %global patchlist_changelog 1 -# Set released_kernel to 1 when the upstream source tarball contains a -# kernel release. (This includes prepatch or "rc" releases.) -# Set released_kernel to 0 when the upstream source tarball contains an -# unreleased kernel development snapshot. %global released_kernel 0 -# Set debugbuildsenabled to 1 to build separate base and debug kernels -# (on supported architectures). The kernel-debug-* subpackages will -# contain the debug kernel. -# Set debugbuildsenabled to 0 to not build a separate debug kernel, but -# to build the base kernel using the debug configuration. (Specifying -# the --with-release option overrides this setting.) -%define debugbuildsenabled 1 %define buildid .test %define specversion 5.16.0 %define patchversion 5.16 %define pkgrelease 0.rc5.6.test %define kversion 5 %define tarfile_release 5.16-rc5 -# This is needed to do merge window version magic %define patchlevel 16 -# allow pkg_release to have configurable %%{?dist} tag %define specrelease 0.rc5.6%{?buildid}%{?dist} - -# -# End of genspec.sh variables -# - -%define pkg_release %{specrelease} - -# libexec dir is not used by the linker, so the shared object there -# should not be exported to RPM provides -%global __provides_exclude_from ^%{_libexecdir}/kselftests - -# The following build options are enabled by default, but may become disabled -# by later architecture-specific checks. These can also be disabled by using -# --without <opt> in the rpmbuild command, or by forcing these values to 0. -# -# standard kernel -%define with_up %{?_without_up: 0} %{?!_without_up: 1} -# kernel PAE (only valid for ARM (lpae)) -%define with_pae %{?_without_pae: 0} %{?!_without_pae: 1} -# kernel-debug -%define with_debug %{?_without_debug: 0} %{?!_without_debug: 1} -# kernel-zfcpdump (s390 specific kernel for zfcpdump) -%define with_zfcpdump %{?_without_zfcpdump: 0} %{?!_without_zfcpdump: 1} -# kernel-doc -%define with_doc %{?_without_doc: 0} %{?!_without_doc: 1} -# kernel-headers -%define with_headers %{?_without_headers: 0} %{?!_without_headers: 1} -%define with_cross_headers %{?_without_cross_headers: 0} %{?!_without_cross_headers: 1} -# perf -%define with_perf %{?_without_perf: 0} %{?!_without_perf: 1} -# tools -%define with_tools %{?_without_tools: 0} %{?!_without_tools: 1} -# bpf tool -%define with_bpftool %{?_without_bpftool: 0} %{?!_without_bpftool: 1} -# kernel-debuginfo -%define with_debuginfo %{?_without_debuginfo: 0} %{?!_without_debuginfo: 1} -# kernel-abi-stablelists -%define with_kernel_abi_stablelists %{?_without_kernel_abi_stablelists: 0} %{?!_without_kernel_abi_stablelists: 1} -# internal samples and selftests -%define with_selftests %{?_without_selftests: 0} %{?!_without_selftests: 1} -# -# Additional options for user-friendly one-off kernel building: -# -# Only build the base kernel (--with baseonly): -%define with_baseonly %{?_with_baseonly: 1} %{?!_with_baseonly: 0} -# Only build the pae kernel (--with paeonly): -%define with_paeonly %{?_with_paeonly: 1} %{?!_with_paeonly: 0} -# Only build the debug kernel (--with dbgonly): -%define with_dbgonly %{?_with_dbgonly: 1} %{?!_with_dbgonly: 0} -# Control whether we perform a compat. check against published ABI. -%define with_kabichk %{?_without_kabichk: 0} %{?!_without_kabichk: 1} -# Temporarily disable kabi checks until RC. -%define with_kabichk 0 -# Control whether we perform a compat. check against DUP ABI. -%define with_kabidupchk %{?_with_kabidupchk: 1} %{?!_with_kabidupchk: 0} -# -# Control whether to run an extensive DWARF based kABI check. -# Note that this option needs to have baseline setup in SOURCE300. -%define with_kabidwchk %{?_without_kabidwchk: 0} %{?!_without_kabidwchk: 1} -%define with_kabidw_base %{?_with_kabidw_base: 1} %{?!_with_kabidw_base: 0} -# -# Control whether to install the vdso directories. -%define with_vdso_install %{?_without_vdso_install: 0} %{?!_without_vdso_install: 1} -# -# should we do C=1 builds with sparse -%define with_sparse %{?_with_sparse: 1} %{?!_with_sparse: 0} -# -# Cross compile requested? -%define with_cross %{?_with_cross: 1} %{?!_with_cross: 0} -# -# build a release kernel on rawhide -%define with_release %{?_with_release: 1} %{?!_with_release: 0} - -# verbose build, i.e. no silent rules and V=1 -%define with_verbose %{?_with_verbose: 1} %{?!_with_verbose: 0} - -# -# check for mismatched config options -%define with_configchecks %{?_without_configchecks: 0} %{?!_without_configchecks: 1} - -# -# gcov support -%define with_gcov %{?_with_gcov:1}%{?!_with_gcov:0} - -# -# ipa_clone support -%define with_ipaclones %{?_without_ipaclones: 0} %{?!_without_ipaclones: 1} - -# Want to build a vanilla kernel build without any non-upstream patches? -%define with_vanilla %{?_with_vanilla: 1} %{?!_with_vanilla: 0} - -%if 0%{?fedora} -# Kernel headers are being split out into a separate package -%define with_headers 0 -%define with_cross_headers 0 -# no ipa_clone for now -%define with_ipaclones 0 -# no stablelist -%define with_kernel_abi_stablelists 0 -# Fedora builds these separately -%define with_perf 0 -%define with_tools 0 -%define with_bpftool 0 -# selftests turns on bpftool -%define with_selftests 0 -%endif - -%if %{with_verbose} -%define make_opts V=1 -%else -%define make_opts -s -%endif - -%if %{with toolchain_clang} -%ifarch s390x ppc64le -%global llvm_ias 0 -%else -%global llvm_ias 1 -%endif -%global clang_make_opts HOSTCC=clang CC=clang LLVM_IAS=%{llvm_ias} -%if %{with clang_lto} -%global clang_make_opts %{clang_make_opts} LD=ld.lld HOSTLD=ld.lld AR=llvm-ar NM=llvm-nm HOSTAR=llvm-ar HOSTNM=llvm-nm -%endif -%global make_opts %{make_opts} %{clang_make_opts} -# clang does not support the -fdump-ipa-clones option -%global with_ipaclones 0 -%endif - -# turn off debug kernel and kabichk for gcov builds -%if %{with_gcov} -%define with_debug 0 -%define with_kabichk 0 -%define with_kabidupchk 0 -%define with_kabidwchk 0 -%define with_kabidw_base 0 -%define with_kernel_abi_stablelists 0 -%endif - -# turn off kABI DWARF-based check if we're generating the base dataset -%if %{with_kabidw_base} -%define with_kabidwchk 0 -%endif - -# kpatch_kcflags are extra compiler flags applied to base kernel -# -fdump-ipa-clones is enabled only for base kernels on selected arches -%if %{with_ipaclones} -%ifarch x86_64 ppc64le -%define kpatch_kcflags -fdump-ipa-clones -%else -%define with_ipaclones 0 -%endif -%endif - -%define make_target bzImage -%define image_install_path boot - -%define KVERREL %{version}-%{release}.%{_target_cpu} -%define KVERREL_RE %(echo %KVERREL | sed 's/+/[+]/g') -%define hdrarch %_target_cpu -%define asmarch %_target_cpu - -%if 0%{!?nopatches:1} -%define nopatches 0 -%endif - -%if %{with_vanilla} -%define nopatches 1 -%endif - -%if %{with_release} -%define debugbuildsenabled 1 -%endif - -%if !%{with_debuginfo} -%define _enable_debug_packages 0 -%endif -%define debuginfodir /usr/lib/debug -# Needed because we override almost everything involving build-ids -# and debuginfo generation. Currently we rely on the old alldebug setting. -%global _build_id_links alldebug - -# kernel PAE is only built on ARMv7 -%ifnarch armv7hl -%define with_pae 0 -%endif - -# if requested, only build base kernel -%if %{with_baseonly} -%define with_pae 0 -%define with_debug 0 -%define with_vdso_install 0 -%define with_perf 0 -%define with_tools 0 -%define with_bpftool 0 -%define with_kernel_abi_stablelists 0 -%define with_selftests 0 -%define with_cross 0 -%define with_cross_headers 0 -%define with_ipaclones 0 -%endif - -# if requested, only build pae kernel -%if %{with_paeonly} -%define with_up 0 -%define with_debug 0 -%endif - -# if requested, only build debug kernel -%if %{with_dbgonly} -%define with_up 0 -%define with_vdso_install 0 -%define with_perf 0 -%define with_tools 0 -%define with_bpftool 0 -%define with_kernel_abi_stablelists 0 -%define with_selftests 0 -%define with_cross 0 -%define with_cross_headers 0 -%define with_ipaclones 0 -%endif - -# turn off kABI DUP check and DWARF-based check if kABI check is disabled -%if !%{with_kabichk} -%define with_kabidupchk 0 -%define with_kabidwchk 0 -%endif - -%if %{with_vdso_install} -%define use_vdso 1 -%endif - -# selftests require bpftool to be built -%if %{with_selftests} -%define with_bpftool 1 -%endif - -%ifnarch noarch -%define with_kernel_abi_stablelists 0 -%endif - -# Overrides for generic default options - -# only package docs noarch -%ifnarch noarch -%define with_doc 0 -%define doc_build_fail true -%endif - -%if 0%{?fedora} -# don't do debug builds on anything but i686 and x86_64 -%ifnarch i686 x86_64 -%define with_debug 0 -%endif -%endif - -# don't build noarch kernels or headers (duh) -%ifarch noarch -%define with_up 0 -%define with_headers 0 -%define with_cross_headers 0 -%define with_tools 0 -%define with_perf 0 -%define with_bpftool 0 -%define with_selftests 0 -%define with_debug 0 -%define all_arch_configs kernel-%{version}-*.config -%endif - -# sparse blows up on ppc -%ifnarch ppc64le -%define with_sparse 0 -%endif - -# zfcpdump mechanism is s390 only -%ifnarch s390x -%define with_zfcpdump 0 -%endif - -%if 0%{?fedora} -# This is not for Fedora -%define with_zfcpdump 0 -%endif - -# Per-arch tweaks - -%ifarch i686 -%define asmarch x86 -%define hdrarch i386 -%define all_arch_configs kernel-%{version}-i?86*.config -%define kernel_image arch/x86/boot/bzImage -%endif - -%ifarch x86_64 -%define asmarch x86 -%define all_arch_configs kernel-%{version}-x86_64*.config -%define kernel_image arch/x86/boot/bzImage -%endif - -%ifarch ppc64le -%define asmarch powerpc -%define hdrarch powerpc -%define make_target vmlinux -%define kernel_image vmlinux -%define kernel_image_elf 1 -%define use_vdso 0 -%define all_arch_configs kernel-%{version}-ppc64le*.config -%endif - -%ifarch s390x -%define asmarch s390 -%define hdrarch s390 -%define all_arch_configs kernel-%{version}-s390x.config -%define kernel_image arch/s390/boot/bzImage -%define vmlinux_decompressor arch/s390/boot/compressed/vmlinux -%endif - -%ifarch %{arm} -%define all_arch_configs kernel-%{version}-arm*.config -%define skip_nonpae_vdso 1 -%define asmarch arm -%define hdrarch arm -%define make_target bzImage -%define kernel_image arch/arm/boot/zImage -# http://lists.infradead.org/pipermail/linux-arm-kernel/2012-March/091404.html -%define kernel_mflags KALLSYMS_EXTRA_PASS=1 -# we only build headers/perf/tools on the base arm arches -# just like we used to only build them on i386 for x86 -%ifnarch armv7hl -%define with_headers 0 -%define with_cross_headers 0 -%endif -# These currently don't compile on armv7 -%define with_selftests 0 -%endif - -%ifarch aarch64 -%define all_arch_configs kernel-%{version}-aarch64*.config -%define asmarch arm64 -%define hdrarch arm64 -%define make_target Image.gz -%define kernel_image arch/arm64/boot/Image.gz -%endif - -# Should make listnewconfig fail if there's config options -# printed out? -%if %{nopatches} -%define with_configchecks 0 -%endif - -# To temporarily exclude an architecture from being built, add it to -# %%nobuildarches. Do _NOT_ use the ExclusiveArch: line, because if we -# don't build kernel-headers then the new build system will no longer let -# us use the previous build of that package -- it'll just be completely AWOL. -# Which is a BadThing(tm). - -# We only build kernel-headers on the following... -%if 0%{?fedora} -%define nobuildarches i386 -%else -%define nobuildarches i386 i686 %{arm} -%endif - -%ifarch %nobuildarches -# disable BuildKernel commands -%define with_up 0 -%define with_debug 0 -%define with_pae 0 -%define with_zfcpdump 0 - -%define with_debuginfo 0 -%define with_perf 0 -%define with_tools 0 -%define with_bpftool 0 -%define with_selftests 0 -%define _enable_debug_packages 0 -%endif - -# Architectures we build tools/cpupower on -%if 0%{?fedora} -%define cpupowerarchs %{ix86} x86_64 ppc64le %{arm} aarch64 -%else -%define cpupowerarchs i686 x86_64 ppc64le aarch64 -%endif - -%if 0%{?use_vdso} - -%if 0%{?skip_nonpae_vdso} -%define _use_vdso 0 -%else -%define _use_vdso 1 -%endif - -%else -%define _use_vdso 0 -%endif - -# If build of debug packages is disabled, we need to know if we want to create -# meta debug packages or not, after we define with_debug for all specific cases -# above. So this must be at the end here, after all cases of with_debug or not. -%define with_debug_meta 0 -%if !%{debugbuildsenabled} -%if %{with_debug} -%define with_debug_meta 1 -%endif -%define with_debug 0 -%endif - - -# -# Packages that need to be installed before the kernel is, because the %%post -# scripts use them. -# -%define kernel_prereq coreutils, systemd >= 203-2, /usr/bin/kernel-install -%define initrd_prereq dracut >= 027 - - -Name: kernel -License: GPLv2 and Redistributable, no modification permitted -URL: https://www.kernel.org/ -Version: %{specversion} -Release: %{pkg_release} -# DO NOT CHANGE THE 'ExclusiveArch' LINE TO TEMPORARILY EXCLUDE AN ARCHITECTURE BUILD. -# SET %%nobuildarches (ABOVE) INSTEAD -%if 0%{?fedora} -ExclusiveArch: noarch x86_64 s390x %{arm} aarch64 ppc64le -%else -ExclusiveArch: noarch i386 i686 x86_64 s390x %{arm} aarch64 ppc64le -%endif -ExclusiveOS: Linux -%ifnarch %{nobuildarches} -Requires: kernel-core-uname-r = %{KVERREL} -Requires: kernel-modules-uname-r = %{KVERREL} -%endif - - -# -# List the packages used during the kernel build -# -BuildRequires: kmod, patch, bash, coreutils, tar, git-core, which -BuildRequires: bzip2, xz, findutils, gzip, m4, perl-interpreter, perl-Carp, perl-devel, perl-generators, make, diffutils, gawk -BuildRequires: gcc, binutils, redhat-rpm-config, hmaccalc, bison, flex, gcc-c++ -BuildRequires: net-tools, hostname, bc, elfutils-devel -BuildRequires: dwarves -BuildRequires: python3-devel -BuildRequires: gcc-plugin-devel -# glibc-static is required for a consistent build environment (specifically -# CONFIG_CC_CAN_LINK_STATIC=y). -BuildRequires: glibc-static -%ifnarch %{nobuildarches} noarch -BuildRequires: bpftool -%endif -%if %{with_headers} -BuildRequires: rsync -%endif -%if %{with_doc} -BuildRequires: xmlto, asciidoc, python3-sphinx, python3-sphinx_rtd_theme -%endif -%if %{with_sparse} -BuildRequires: sparse -%endif -%if %{with_perf} -BuildRequires: zlib-devel binutils-devel newt-devel perl(ExtUtils::Embed) bison flex xz-devel -BuildRequires: audit-libs-devel -BuildRequires: java-devel -BuildRequires: libbpf-devel -BuildRequires: libbabeltrace-devel -BuildRequires: libtraceevent-devel -%ifnarch %{arm} s390x -BuildRequires: numactl-devel -%endif -%ifarch aarch64 -BuildRequires: opencsd-devel >= 1.0.0 -%endif -%endif -%if %{with_tools} -BuildRequires: gettext ncurses-devel -BuildRequires: libcap-devel libcap-ng-devel -%ifnarch s390x -BuildRequires: pciutils-devel -%endif -%ifarch i686 x86_64 -BuildRequires: libnl3-devel -%endif -%endif -%if %{with_tools} || %{signmodules} || %{signkernel} -BuildRequires: openssl-devel -%endif -%if %{with_bpftool} -BuildRequires: python3-docutils -BuildRequires: zlib-devel binutils-devel -%endif -%if %{with_selftests} -BuildRequires: clang llvm -%ifnarch %{arm} -BuildRequires: numactl-devel -%endif -BuildRequires: libcap-devel libcap-ng-devel rsync libmnl-devel -%endif -BuildConflicts: rhbuildsys(DiskFree) < 500Mb -%if %{with_debuginfo} -BuildRequires: rpm-build, elfutils -BuildConflicts: rpm < 4.13.0.1-19 -BuildConflicts: dwarves < 1.13 -# Most of these should be enabled after more investigation -%undefine _include_minidebuginfo -%undefine _find_debuginfo_dwz_opts -%undefine _unique_build_ids -%undefine _unique_debug_names -%undefine _unique_debug_srcs -%undefine _debugsource_packages -%undefine _debuginfo_subpackages -%global _find_debuginfo_opts -r -%global _missing_build_ids_terminate_build 1 -%global _no_recompute_build_ids 1 -%endif -%if %{with_kabidwchk} || %{with_kabidw_base} -BuildRequires: kabi-dw -%endif - -%if %{signkernel}%{signmodules} -BuildRequires: openssl -%if %{signkernel} -# ELN uses Fedora signing process, so exclude -%if 0%{?rhel}%{?centos} && !0%{?eln} -BuildRequires: system-sb-certs -%endif -%ifarch x86_64 aarch64 -BuildRequires: nss-tools -BuildRequires: pesign >= 0.10-4 -%endif -%endif -%endif - -%if %{with_cross} -BuildRequires: binutils-%{_build_arch}-linux-gnu, gcc-%{_build_arch}-linux-gnu -%define cross_opts CROSS_COMPILE=%{_build_arch}-linux-gnu- -%define __strip %{_build_arch}-linux-gnu-strip -%endif - -# These below are required to build man pages -%if %{with_perf} -BuildRequires: xmlto -%endif -%if %{with_perf} || %{with_tools} -BuildRequires: asciidoc -%endif - -%if %{with toolchain_clang} -BuildRequires: clang -%endif - -%if %{with clang_lto} -BuildRequires: llvm -BuildRequires: lld -%endif - -# Because this is the kernel, it's hard to get a single upstream URL -# to represent the base without needing to do a bunch of patching. This -# tarball is generated from a src-git tree. If you want to see the -# exact git commit you can run -# -# xzcat -qq ${TARBALL} | git get-tar-commit-id -Source0: linux-%{tarfile_release}.tar.xz - -Source1: Makefile.rhelver - - -# Name of the packaged file containing signing key -%ifarch ppc64le -%define signing_key_filename kernel-signing-ppc.cer -%endif -%ifarch s390x -%define signing_key_filename kernel-signing-s390.cer -%endif - -%if %{?released_kernel} - -Source10: redhatsecurebootca5.cer -Source11: redhatsecurebootca1.cer -Source12: redhatsecureboot501.cer -Source13: redhatsecureboot301.cer -Source14: secureboot_s390.cer -Source15: secureboot_ppc.cer - -%define secureboot_ca_1 %{SOURCE10} -%define secureboot_ca_0 %{SOURCE11} -%ifarch x86_64 aarch64 -%define secureboot_key_1 %{SOURCE12} -%define pesign_name_1 redhatsecureboot501 -%define secureboot_key_0 %{SOURCE13} -%define pesign_name_0 redhatsecureboot301 -%endif -%ifarch s390x -%define secureboot_key_0 %{SOURCE14} -%define pesign_name_0 redhatsecureboot302 -%endif -%ifarch ppc64le -%define secureboot_key_0 %{SOURCE15} -%define pesign_name_0 redhatsecureboot303 -%endif - -# released_kernel -%else - -Source10: redhatsecurebootca4.cer -Source11: redhatsecurebootca2.cer -Source12: redhatsecureboot401.cer -Source13: redhatsecureboot003.cer - -%define secureboot_ca_1 %{SOURCE10} -%define secureboot_ca_0 %{SOURCE11} -%define secureboot_key_1 %{SOURCE12} -%define pesign_name_1 redhatsecureboot401 -%define secureboot_key_0 %{SOURCE13} -%define pesign_name_0 redhatsecureboot003 - -# released_kernel -%endif - -Source20: mod-denylist.sh -Source21: mod-sign.sh -Source22: parallel_xz.sh - -%define modsign_cmd %{SOURCE21} - -%if 0%{?include_rhel} -Source23: x509.genkey.rhel - -Source24: kernel-aarch64-rhel.config -Source25: kernel-aarch64-debug-rhel.config -Source26: mod-extra.list.rhel - -Source27: kernel-ppc64le-rhel.config -Source28: kernel-ppc64le-debug-rhel.config -Source29: kernel-s390x-rhel.config -Source30: kernel-s390x-debug-rhel.config -Source31: kernel-s390x-zfcpdump-rhel.config -Source32: kernel-x86_64-rhel.config -Source33: kernel-x86_64-debug-rhel.config - -Source34: filter-x86_64.sh.rhel -Source35: filter-armv7hl.sh.rhel -Source37: filter-aarch64.sh.rhel -Source38: filter-ppc64le.sh.rhel -Source39: filter-s390x.sh.rhel -Source40: filter-modules.sh.rhel - -Source41: x509.genkey.centos -%endif - -%if 0%{?include_fedora} -Source50: x509.genkey.fedora -Source51: mod-extra.list.fedora - -Source52: kernel-aarch64-fedora.config -Source53: kernel-aarch64-debug-fedora.config -Source54: kernel-armv7hl-fedora.config -Source55: kernel-armv7hl-debug-fedora.config -Source56: kernel-armv7hl-lpae-fedora.config -Source57: kernel-armv7hl-lpae-debug-fedora.config -Source60: kernel-ppc64le-fedora.config -Source61: kernel-ppc64le-debug-fedora.config -Source62: kernel-s390x-fedora.config -Source63: kernel-s390x-debug-fedora.config -Source64: kernel-x86_64-fedora.config -Source65: kernel-x86_64-debug-fedora.config - -Source67: filter-x86_64.sh.fedora -Source68: filter-armv7hl.sh.fedora -Source70: filter-aarch64.sh.fedora -Source71: filter-ppc64le.sh.fedora -Source72: filter-s390x.sh.fedora -Source73: filter-modules.sh.fedora -%endif - -Source75: partial-kgcov-snip.config -Source80: generate_all_configs.sh -Source81: process_configs.sh - -Source82: update_scripts.sh - -Source84: mod-internal.list - -Source100: rheldup3.x509 -Source101: rhelkpatch1.x509 - -Source200: check-kabi - -Source201: Module.kabi_aarch64 -Source202: Module.kabi_ppc64le -Source203: Module.kabi_s390x -Source204: Module.kabi_x86_64 - -Source210: Module.kabi_dup_aarch64 -Source211: Module.kabi_dup_ppc64le -Source212: Module.kabi_dup_s390x -Source213: Module.kabi_dup_x86_64 - -Source300: kernel-abi-stablelists-%{specversion}-%{pkgrelease}.tar.bz2 -Source301: kernel-kabi-dw-%{specversion}-%{pkgrelease}.tar.bz2 - -# Sources for kernel-tools -Source2000: cpupower.service -Source2001: cpupower.config -Source2002: kvm_stat.logrotate - -# Some people enjoy building customized kernels from the dist-git in Fedora and -# use this to override configuration options. One day they may all use the -# source tree, but in the mean time we carry this to support the legacy workflow -Source3000: merge.pl -Source3001: kernel-local -%if %{patchlist_changelog} -Source3002: Patchlist.changelog -%endif - -Source4000: README.rst -Source4001: rpminspect.yaml -Source4002: gating.yaml - -## Patches needed for building this package - -%if !%{nopatches} - -Patch1: patch-%{patchversion}-redhat.patch -%endif - -# empty final patch to facilitate testing of kernel patches -Patch999999: linux-kernel-test.patch - -# END OF PATCH DEFINITIONS - -%description -The kernel meta package - -# -# This macro does requires, provides, conflicts, obsoletes for a kernel package. -# %%kernel_reqprovconf <subpackage> -# It uses any kernel_<subpackage>_conflicts and kernel_<subpackage>_obsoletes -# macros defined above. -# -%define kernel_reqprovconf \ -Provides: kernel = %{specversion}-%{pkg_release}\ -Provides: kernel-%{_target_cpu} = %{specversion}-%{pkg_release}%{?1:+%{1}}\ -Provides: kernel-drm-nouveau = 16\ -Provides: kernel-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires(pre): %{kernel_prereq}\ -Requires(pre): %{initrd_prereq}\ -Requires(pre): ((linux-firmware >= 20150904-56.git6ebf5d57) if linux-firmware)\ -Recommends: linux-firmware\ -Requires(preun): systemd >= 200\ -Conflicts: xfsprogs < 4.3.0-1\ -Conflicts: xorg-x11-drv-vmmouse < 13.0.99\ -%{expand:%%{?kernel%{?1:_%{1}}_conflicts:Conflicts: %%{kernel%{?1:_%{1}}_conflicts}}}\ -%{expand:%%{?kernel%{?1:_%{1}}_obsoletes:Obsoletes: %%{kernel%{?1:_%{1}}_obsoletes}}}\ -%{expand:%%{?kernel%{?1:_%{1}}_provides:Provides: %%{kernel%{?1:_%{1}}_provides}}}\ -# We can't let RPM do the dependencies automatic because it'll then pick up\ -# a correct but undesirable perl dependency from the module headers which\ -# isn't required for the kernel proper to function\ -AutoReq: no\ -AutoProv: yes\ -%{nil} - - -%package doc -Summary: Various documentation bits found in the kernel source -Group: Documentation -%description doc -This package contains documentation files from the kernel -source. Various bits of information about the Linux kernel and the -device drivers shipped with it are documented in these files. - -You'll want to install this package if you need a reference to the -options that can be passed to Linux kernel modules at load time. - - -%package headers -Summary: Header files for the Linux kernel for use by glibc -Obsoletes: glibc-kernheaders < 3.0-46 -Provides: glibc-kernheaders = 3.0-46 -%description headers -Kernel-headers includes the C header files that specify the interface -between the Linux kernel and userspace libraries and programs. The -header files define structures and constants that are needed for -building most standard programs and are also needed for rebuilding the -glibc package. - -%package cross-headers -Summary: Header files for the Linux kernel for use by cross-glibc -%description cross-headers -Kernel-cross-headers includes the C header files that specify the interface -between the Linux kernel and userspace libraries and programs. The -header files define structures and constants that are needed for -building most standard programs and are also needed for rebuilding the -cross-glibc package. - - -%package debuginfo-common-%{_target_cpu} -Summary: Kernel source files used by %{name}-debuginfo packages -Provides: installonlypkg(kernel) -%description debuginfo-common-%{_target_cpu} -This package is required by %{name}-debuginfo subpackages. -It provides the kernel source files common to all builds. - -%if %{with_perf} -%package -n perf -Summary: Performance monitoring for the Linux kernel -Requires: bzip2 -License: GPLv2 -%description -n perf -This package contains the perf tool, which enables performance monitoring -of the Linux kernel. - -%package -n perf-debuginfo -Summary: Debug information for package perf -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release} -AutoReqProv: no -%description -n perf-debuginfo -This package provides debug information for the perf package. - -# Note that this pattern only works right to match the .build-id -# symlinks because of the trailing nonmatching alternation and -# the leading .*, because of find-debuginfo.sh's buggy handling -# of matching the pattern against the symlinks file. -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{_bindir}/perf(\.debug)?|.*%%{_libexecdir}/perf-core/.*|.*%%{_libdir}/libperf-jvmti.so(\.debug)?|XXX' -o perf-debuginfo.list} - -%package -n python3-perf -Summary: Python bindings for apps which will manipulate perf events -%description -n python3-perf -The python3-perf package contains a module that permits applications -written in the Python programming language to use the interface -to manipulate perf events. - -%package -n python3-perf-debuginfo -Summary: Debug information for package perf python bindings -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release} -AutoReqProv: no -%description -n python3-perf-debuginfo -This package provides debug information for the perf python bindings. - -# the python_sitearch macro should already be defined from above -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{python3_sitearch}/perf.*so(\.debug)?|XXX' -o python3-perf-debuginfo.list} - -# with_perf -%endif - -%if %{with_tools} -%package -n kernel-tools -Summary: Assortment of tools for the Linux kernel -License: GPLv2 -%ifarch %{cpupowerarchs} -Provides: cpupowerutils = 1:009-0.6.p1 -Obsoletes: cpupowerutils < 1:009-0.6.p1 -Provides: cpufreq-utils = 1:009-0.6.p1 -Provides: cpufrequtils = 1:009-0.6.p1 -Obsoletes: cpufreq-utils < 1:009-0.6.p1 -Obsoletes: cpufrequtils < 1:009-0.6.p1 -Obsoletes: cpuspeed < 1:1.5-16 -Requires: kernel-tools-libs = %{version}-%{release} -%endif -%define __requires_exclude ^%{_bindir}/python -%description -n kernel-tools -This package contains the tools/ directory from the kernel source -and the supporting documentation. - -%package -n kernel-tools-libs -Summary: Libraries for the kernels-tools -License: GPLv2 -%description -n kernel-tools-libs -This package contains the libraries built from the tools/ directory -from the kernel source. - -%package -n kernel-tools-libs-devel -Summary: Assortment of tools for the Linux kernel -License: GPLv2 -Requires: kernel-tools = %{version}-%{release} -%ifarch %{cpupowerarchs} -Provides: cpupowerutils-devel = 1:009-0.6.p1 -Obsoletes: cpupowerutils-devel < 1:009-0.6.p1 -%endif -Requires: kernel-tools-libs = %{version}-%{release} -Provides: kernel-tools-devel -%description -n kernel-tools-libs-devel -This package contains the development files for the tools/ directory from -the kernel source. - -%package -n kernel-tools-debuginfo -Summary: Debug information for package kernel-tools -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release} -AutoReqProv: no -%description -n kernel-tools-debuginfo -This package provides debug information for package kernel-tools. - -# Note that this pattern only works right to match the .build-id -# symlinks because of the trailing nonmatching alternation and -# the leading .*, because of find-debuginfo.sh's buggy handling -# of matching the pattern against the symlinks file. -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{_bindir}/centrino-decode(\.debug)?|.*%%{_bindir}/powernow-k8-decode(\.debug)?|.*%%{_bindir}/cpupower(\.debug)?|.*%%{_libdir}/libcpupower.*|.*%%{_bindir}/turbostat(\.debug)?|.*%%{_bindir}/x86_energy_perf_policy(\.debug)?|.*%%{_bindir}/tmon(\.debug)?|.*%%{_bindir}/lsgpio(\.debug)?|.*%%{_bindir}/gpio-hammer(\.debug)?|.*%%{_bindir}/gpio-event-mon(\.debug)?|.*%%{_bindir}/gpio-watch(\.debug)?|.*%%{_bindir}/iio_event_monitor(\.debug)?|.*%%{_bindir}/iio_generic_buffer(\.debug)?|.*%%{_bindir}/lsiio(\.debug)?|.*%%{_bindir}/intel-speed-select(\.debug)?|.*%%{_bindir}/page_owner_sort(\.debug)?|.*%%{_bindir}/slabinfo(\.debug)?|.*%%{_sbindir}/intel_sdsi(\.debug)?|XXX' -o kernel-tools-debuginfo.list} - -# with_tools -%endif - -%if %{with_bpftool} - -%package -n bpftool -Summary: Inspection and simple manipulation of eBPF programs and maps -License: GPLv2 -%description -n bpftool -This package contains the bpftool, which allows inspection and simple -manipulation of eBPF programs and maps. - -%package -n bpftool-debuginfo -Summary: Debug information for package bpftool -Group: Development/Debug -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release} -AutoReqProv: no -%description -n bpftool-debuginfo -This package provides debug information for the bpftool package. - -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{_sbindir}/bpftool(\.debug)?|XXX' -o bpftool-debuginfo.list} - -# with_bpftool -%endif - -%if %{with_selftests} - -%package selftests-internal -Summary: Kernel samples and selftests -License: GPLv2 -Requires: binutils, bpftool, iproute-tc, nmap-ncat, python3 -%description selftests-internal -Kernel sample programs and selftests. - -# Note that this pattern only works right to match the .build-id -# symlinks because of the trailing nonmatching alternation and -# the leading .*, because of find-debuginfo.sh's buggy handling -# of matching the pattern against the symlinks file. -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{_libexecdir}/(ksamples|kselftests)/.*|XXX' -o selftests-debuginfo.list} - -# with_selftests -%endif - -%if %{with_gcov} -%package gcov -Summary: gcov graph and source files for coverage data collection. -%description gcov -kernel-gcov includes the gcov graph and source files for gcov coverage collection. -%endif - -%package -n kernel-abi-stablelists -Summary: The Red Hat Enterprise Linux kernel ABI symbol stablelists -AutoReqProv: no -%description -n kernel-abi-stablelists -The kABI package contains information pertaining to the Red Hat Enterprise -Linux kernel ABI, including lists of kernel symbols that are needed by -external Linux kernel modules, and a yum plugin to aid enforcement. - -%if %{with_kabidw_base} -%package kernel-kabidw-base-internal -Summary: The baseline dataset for kABI verification using DWARF data -Group: System Environment/Kernel -AutoReqProv: no -%description kernel-kabidw-base-internal -The package contains data describing the current ABI of the Red Hat Enterprise -Linux kernel, suitable for the kabi-dw tool. -%endif - -# -# This macro creates a kernel-<subpackage>-debuginfo package. -# %%kernel_debuginfo_package <subpackage> -# -# Explanation of the find_debuginfo_opts: We build multiple kernels (debug -# pae etc.) so the regex filters those kernels appropriately. We also -# have to package several binaries as part of kernel-devel but getting -# unique build-ids is tricky for these userspace binaries. We don't really -# care about debugging those so we just filter those out and remove it. -%define kernel_debuginfo_package() \ -%package %{?1:%{1}-}debuginfo\ -Summary: Debug information for package %{name}%{?1:-%{1}}\ -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release}\ -Provides: %{name}%{?1:-%{1}}-debuginfo-%{_target_cpu} = %{version}-%{release}\ -Provides: installonlypkg(kernel)\ -AutoReqProv: no\ -%description %{?1:%{1}-}debuginfo\ -This package provides debug information for package %{name}%{?1:-%{1}}.\ -This is required to use SystemTap with %{name}%{?1:-%{1}}-%{KVERREL}.\ -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} --keep-section '.BTF' -p '.*\/usr\/src\/kernels/.*|XXX' -o ignored-debuginfo.list -p '/.*/%%{KVERREL_RE}%{?1:[+]%{1}}/.*|/.*%%{KVERREL_RE}%{?1:\+%{1}}(\.debug)?' -o debuginfo%{?1}.list}\ -%{nil} - -# -# This macro creates a kernel-<subpackage>-devel package. -# %%kernel_devel_package [-m] <subpackage> <pretty-name> -# -%define kernel_devel_package(m) \ -%package %{?1:%{1}-}devel\ -Summary: Development package for building kernel modules to match the %{?2:%{2} }kernel\ -Provides: kernel%{?1:-%{1}}-devel-%{_target_cpu} = %{version}-%{release}\ -Provides: kernel-devel-%{_target_cpu} = %{version}-%{release}%{?1:+%{1}}\ -Provides: kernel-devel-uname-r = %{KVERREL}%{?1:+%{1}}\ -Provides: installonlypkg(kernel)\ -AutoReqProv: no\ -Requires(pre): findutils\ -Requires: findutils\ -Requires: perl-interpreter\ -Requires: openssl-devel\ -Requires: elfutils-libelf-devel\ -Requires: bison\ -Requires: flex\ -Requires: make\ -Requires: gcc\ -%if %{-m:1}%{!-m:0}\ -Requires: kernel-devel-uname-r = %{KVERREL}\ -%endif\ -%description %{?1:%{1}-}devel\ -This package provides kernel headers and makefiles sufficient to build modules\ -against the %{?2:%{2} }kernel package.\ -%{nil} - -# -# This macro creates an empty kernel-<subpackage>-devel-matched package that -# requires both the core and devel packages locked on the same version. -# %%kernel_devel_matched_package [-m] <subpackage> <pretty-name> -# -%define kernel_devel_matched_package(m) \ -%package %{?1:%{1}-}devel-matched\ -Summary: Meta package to install matching core and devel packages for a given %{?2:%{2} }kernel\ -Requires: kernel%{?1:-%{1}}-devel = %{version}-%{release}\ -Requires: kernel%{?1:-%{1}}-core = %{version}-%{release}\ -%description %{?1:%{1}-}devel-matched\ -This meta package is used to install matching core and devel packages for a given %{?2:%{2} }kernel.\ -%{nil} - -# -# kernel-<variant>-ipaclones-internal package -# -%define kernel_ipaclones_package() \ -%package %{?1:%{1}-}ipaclones-internal\ -Summary: *.ipa-clones files generated by -fdump-ipa-clones for kernel%{?1:-%{1}}\ -Group: System Environment/Kernel\ -AutoReqProv: no\ -%description %{?1:%{1}-}ipaclones-internal\ -This package provides *.ipa-clones files.\ -%{nil} - -# -# This macro creates a kernel-<subpackage>-modules-internal package. -# %%kernel_modules_internal_package <subpackage> <pretty-name> -# -%define kernel_modules_internal_package() \ -%package %{?1:%{1}-}modules-internal\ -Summary: Extra kernel modules to match the %{?2:%{2} }kernel\ -Group: System Environment/Kernel\ -Provides: kernel%{?1:-%{1}}-modules-internal-%{_target_cpu} = %{version}-%{release}\ -Provides: kernel%{?1:-%{1}}-modules-internal-%{_target_cpu} = %{version}-%{release}%{?1:+%{1}}\ -Provides: kernel%{?1:-%{1}}-modules-internal = %{version}-%{release}%{?1:+%{1}}\ -Provides: installonlypkg(kernel-module)\ -Provides: kernel%{?1:-%{1}}-modules-internal-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel%{?1:-%{1}}-modules-uname-r = %{KVERREL}%{?1:+%{1}}\ -AutoReq: no\ -AutoProv: yes\ -%description %{?1:%{1}-}modules-internal\ -This package provides kernel modules for the %{?2:%{2} }kernel package for Red Hat internal usage.\ -%{nil} - -# -# This macro creates a kernel-<subpackage>-modules-extra package. -# %%kernel_modules_extra_package [-m] <subpackage> <pretty-name> -# -%define kernel_modules_extra_package(m) \ -%package %{?1:%{1}-}modules-extra\ -Summary: Extra kernel modules to match the %{?2:%{2} }kernel\ -Provides: kernel%{?1:-%{1}}-modules-extra-%{_target_cpu} = %{version}-%{release}\ -Provides: kernel%{?1:-%{1}}-modules-extra-%{_target_cpu} = %{version}-%{release}%{?1:+%{1}}\ -Provides: kernel%{?1:-%{1}}-modules-extra = %{version}-%{release}%{?1:+%{1}}\ -Provides: installonlypkg(kernel-module)\ -Provides: kernel%{?1:-%{1}}-modules-extra-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel%{?1:-%{1}}-modules-uname-r = %{KVERREL}%{?1:+%{1}}\ -%if %{-m:1}%{!-m:0}\ -Requires: kernel-modules-extra-uname-r = %{KVERREL}\ -%endif\ -AutoReq: no\ -AutoProv: yes\ -%description %{?1:%{1}-}modules-extra\ -This package provides less commonly used kernel modules for the %{?2:%{2} }kernel package.\ -%{nil} - -# -# This macro creates a kernel-<subpackage>-modules package. -# %%kernel_modules_package [-m] <subpackage> <pretty-name> -# -%define kernel_modules_package(m) \ -%package %{?1:%{1}-}modules\ -Summary: kernel modules to match the %{?2:%{2}-}core kernel\ -Provides: kernel%{?1:-%{1}}-modules-%{_target_cpu} = %{version}-%{release}\ -Provides: kernel-modules-%{_target_cpu} = %{version}-%{release}%{?1:+%{1}}\ -Provides: kernel-modules = %{version}-%{release}%{?1:+%{1}}\ -Provides: installonlypkg(kernel-module)\ -Provides: kernel%{?1:-%{1}}-modules-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel-uname-r = %{KVERREL}%{?1:+%{1}}\ -%if %{-m:1}%{!-m:0}\ -Requires: kernel-modules-uname-r = %{KVERREL}\ -%endif\ -AutoReq: no\ -AutoProv: yes\ -%description %{?1:%{1}-}modules\ -This package provides commonly used kernel modules for the %{?2:%{2}-}core kernel package.\ -%{nil} - -# -# this macro creates a kernel-<subpackage> meta package. -# %%kernel_meta_package <subpackage> -# -%define kernel_meta_package() \ -%package %{1}\ -summary: kernel meta-package for the %{1} kernel\ -Requires: kernel-%{1}-core-uname-r = %{KVERREL}+%{1}\ -Requires: kernel-%{1}-modules-uname-r = %{KVERREL}+%{1}\ -Provides: installonlypkg(kernel)\ -%description %{1}\ -The meta-package for the %{1} kernel\ -%{nil} - -# -# This macro creates a kernel-<subpackage> and its -devel and -debuginfo too. -# %%define variant_summary The Linux kernel compiled for <configuration> -# %%kernel_variant_package [-n <pretty-name>] [-m] <subpackage> -# -%define kernel_variant_package(n:m) \ -%package %{?1:%{1}-}core\ -Summary: %{variant_summary}\ -Provides: kernel-%{?1:%{1}-}core-uname-r = %{KVERREL}%{?1:+%{1}}\ -Provides: installonlypkg(kernel)\ -%if %{-m:1}%{!-m:0}\ -Requires: kernel-core-uname-r = %{KVERREL}\ -%endif\ -%{expand:%%kernel_reqprovconf}\ -%if %{?1:1} %{!?1:0} \ -%{expand:%%kernel_meta_package %{?1:%{1}}}\ -%endif\ -%{expand:%%kernel_devel_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}} %{-m:%{-m}}}\ -%{expand:%%kernel_devel_matched_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}} %{-m:%{-m}}}\ -%{expand:%%kernel_modules_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}} %{-m:%{-m}}}\ -%{expand:%%kernel_modules_extra_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}} %{-m:%{-m}}}\ -%if %{-m:0}%{!-m:1}\ -%{expand:%%kernel_modules_internal_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}}}\ -%{expand:%%kernel_debuginfo_package %{?1:%{1}}}\ -%endif\ -%{nil} - -# Now, each variant package. - -%if %{with_pae} -%define variant_summary The Linux kernel compiled for Cortex-A15 -%kernel_variant_package lpae -%description lpae-core -This package includes a version of the Linux kernel with support for -Cortex-A15 devices with LPAE and HW virtualisation support -%endif - -%if %{with_zfcpdump} -%define variant_summary The Linux kernel compiled for zfcpdump usage -%kernel_variant_package zfcpdump -%description zfcpdump-core -The kernel package contains the Linux kernel (vmlinuz) for use by the -zfcpdump infrastructure. -# with_zfcpdump -%endif - -%define variant_summary The Linux kernel compiled with extra debugging enabled -%if !%{debugbuildsenabled} -%kernel_variant_package -m debug -%else -%kernel_variant_package debug -%endif -%description debug-core -The kernel package contains the Linux kernel (vmlinuz), the core of any -Linux operating system. The kernel handles the basic functions -of the operating system: memory allocation, process allocation, device -input and output, etc. - -This variant of the kernel has numerous debugging options enabled. -It should only be installed when trying to gather additional information -on kernel bugs, as some of these options impact performance noticably. - -# And finally the main -core package - -%define variant_summary The Linux kernel -%kernel_variant_package -%description core -The kernel package contains the Linux kernel (vmlinuz), the core of any -Linux operating system. The kernel handles the basic functions -of the operating system: memory allocation, process allocation, device -input and output, etc. - -%if %{with_ipaclones} -%kernel_ipaclones_package -%endif - -%prep -# do a few sanity-checks for --with *only builds -%if %{with_baseonly} -%if !%{with_up} -echo "Cannot build --with baseonly, up build is disabled" -exit 1 -%endif -%endif - -# more sanity checking; do it quietly -if [ "%{patches}" != "%%{patches}" ] ; then - for patch in %{patches} ; do - if [ ! -f $patch ] ; then - echo "ERROR: Patch ${patch##/*/} listed in specfile but is missing" - exit 1 - fi - done -fi 2>/dev/null - -patch_command='patch -p1 -F1 -s' -ApplyPatch() -{ - local patch=$1 - shift - if [ ! -f $RPM_SOURCE_DIR/$patch ]; then - exit 1 - fi - if ! grep -E "^Patch[0-9]+: $patch\$" %{_specdir}/${RPM_PACKAGE_NAME}.spec ; then - if [ "${patch:0:8}" != "patch-%{kversion}." ] ; then - echo "ERROR: Patch $patch not listed as a source patch in specfile" - exit 1 - fi - fi 2>/dev/null - case "$patch" in - *.bz2) bunzip2 < "$RPM_SOURCE_DIR/$patch" | $patch_command ${1+"$@"} ;; - *.gz) gunzip < "$RPM_SOURCE_DIR/$patch" | $patch_command ${1+"$@"} ;; - *.xz) unxz < "$RPM_SOURCE_DIR/$patch" | $patch_command ${1+"$@"} ;; - *) $patch_command ${1+"$@"} < "$RPM_SOURCE_DIR/$patch" ;; - esac -} - -# don't apply patch if it's empty -ApplyOptionalPatch() -{ - local patch=$1 - shift - if [ ! -f $RPM_SOURCE_DIR/$patch ]; then - exit 1 - fi - local C=$(wc -l $RPM_SOURCE_DIR/$patch | awk '{print $1}') - if [ "$C" -gt 9 ]; then - ApplyPatch $patch ${1+"$@"} - fi -} - -%setup -q -n kernel-%{tarfile_release} -c -mv linux-%{tarfile_release} linux-%{KVERREL} - -cd linux-%{KVERREL} -cp -a %{SOURCE1} . - -%if !%{nopatches} - -ApplyOptionalPatch patch-%{patchversion}-redhat.patch -%endif - -ApplyOptionalPatch linux-kernel-test.patch - -# END OF PATCH APPLICATIONS - -# Any further pre-build tree manipulations happen here. - -chmod +x scripts/checkpatch.pl -mv COPYING COPYING-%{version}-%{release} - -# This Prevents scripts/setlocalversion from mucking with our version numbers. -touch .scmversion - -# Mangle /usr/bin/python shebangs to /usr/bin/python3 -# Mangle all Python shebangs to be Python 3 explicitly -# -p preserves timestamps -# -n prevents creating ~backup files -# -i specifies the interpreter for the shebang -# This fixes errors such as -# *** ERROR: ambiguous python shebang in /usr/bin/kvm_stat: #!/usr/bin/python. Change it to python3 (or python2) explicitly. -# We patch all sources below for which we got a report/error. -pathfix.py -i "%{__python3} %{py3_shbang_opts}" -p -n \ - tools/kvm/kvm_stat/kvm_stat \ - scripts/show_delta \ - scripts/diffconfig \ - scripts/bloat-o-meter \ - scripts/jobserver-exec \ - tools \ - Documentation \ - scripts/clang-tools - -# only deal with configs if we are going to build for the arch -%ifnarch %nobuildarches - -if [ -L configs ]; then - rm -f configs -fi -mkdir configs -cd configs - -# Drop some necessary files from the source dir into the buildroot -cp $RPM_SOURCE_DIR/kernel-*.config . -cp %{SOURCE80} . -# merge.pl -cp %{SOURCE3000} . -# kernel-local -cp %{SOURCE3001} . -FLAVOR=%{primary_target} SPECVERSION=%{version} ./generate_all_configs.sh %{debugbuildsenabled} - -# Merge in any user-provided local config option changes -%ifnarch %nobuildarches -for i in %{all_arch_configs} -do - mv $i $i.tmp - ./merge.pl %{SOURCE3001} $i.tmp > $i -%if %{with_gcov} - echo "Merging with gcov options" - cat %{SOURCE75} - mv $i $i.tmp - ./merge.pl %{SOURCE75} $i.tmp > $i -%endif - rm $i.tmp -done -%endif - -%if %{with clang_lto} -for i in *aarch64*.config *x86_64*.config; do - sed -i 's/# CONFIG_LTO_CLANG_THIN is not set/CONFIG_LTO_CLANG_THIN=y/' $i - sed -i 's/CONFIG_LTO_NONE=y/# CONFIG_LTO_NONE is not set/' $i -done -%endif - -# Add DUP and kpatch certificates to system trusted keys for RHEL -%if 0%{?rhel} -%if %{signkernel}%{signmodules} -openssl x509 -inform der -in %{SOURCE100} -out rheldup3.pem -openssl x509 -inform der -in %{SOURCE101} -out rhelkpatch1.pem -cat rheldup3.pem rhelkpatch1.pem > ../certs/rhel.pem -%ifarch s390x ppc64le -openssl x509 -inform der -in %{secureboot_ca_0} -out secureboot.pem -cat secureboot.pem >> ../certs/rhel.pem -%endif -for i in *.config; do - sed -i 's@CONFIG_SYSTEM_TRUSTED_KEYS=""@CONFIG_SYSTEM_TRUSTED_KEYS="certs/rhel.pem"@' $i -done -%endif -%endif - -cp %{SOURCE81} . -OPTS="" -%if %{with_configchecks} - OPTS="$OPTS -w -n -c" -%endif -%if %{with clang_lto} -for opt in %{clang_make_opts}; do - OPTS="$OPTS -m $opt" -done -%endif -RHJOBS=$RPM_BUILD_NCPUS PACKAGE_NAME=kernel ./process_configs.sh $OPTS ${specversion} - -cp %{SOURCE82} . -RPM_SOURCE_DIR=$RPM_SOURCE_DIR ./update_scripts.sh %{primary_target} - -# We may want to override files from the primary target in case of building -# against a flavour of it (eg. centos not rhel), thus override it here if -# necessary -if [ "%{primary_target}" == "rhel" ]; then -%if 0%{?centos} - echo "Updating scripts/sources to centos version" - RPM_SOURCE_DIR=$RPM_SOURCE_DIR ./update_scripts.sh centos -%else - echo "Not updating scripts/sources to centos version" -%endif -fi - -# end of kernel config -%endif - -cd .. -# # End of Configs stuff - -# get rid of unwanted files resulting from patch fuzz -find . \( -name "*.orig" -o -name "*~" \) -delete >/dev/null - -# remove unnecessary SCM files -find . -name .gitignore -delete >/dev/null - -cd .. - -### -### build -### -%build - -%if %{with_sparse} -%define sparse_mflags C=1 -%endif - -cp_vmlinux() -{ - eu-strip --remove-comment -o "$2" "$1" -} - -# Note we need to disable these flags for cross builds because the flags -# from redhat-rpm-config assume that host == target so target arch -# flags cause issues with the host compiler. -%if !%{with_cross} -%define build_hostcflags %{?build_cflags} -%define build_hostldflags %{?build_ldflags} -%endif - -%define make %{__make} %{?cross_opts} %{?make_opts} HOSTCFLAGS="%{?build_hostcflags}" HOSTLDFLAGS="%{?build_hostldflags}" - -InitBuildVars() { - # Initialize the kernel .config file and create some variables that are - # needed for the actual build process. - - Variant=$1 - - # Pick the right kernel config file - Config=kernel-%{version}-%{_target_cpu}${Variant:+-${Variant}}.config - DevelDir=/usr/src/kernels/%{KVERREL}${Variant:++${Variant}} - - KernelVer=%{version}-%{release}.%{_target_cpu}${Variant:++${Variant}} - - # make sure EXTRAVERSION says what we want it to say - # Trim the release if this is a CI build, since KERNELVERSION is limited to 64 characters - ShortRel=$(perl -e "print \"%{release}\" =~ s/\.pr\.[0-9A-Fa-f]{32}//r") - perl -p -i -e "s/^EXTRAVERSION.*/EXTRAVERSION = -${ShortRel}.%{_target_cpu}${Variant:++${Variant}}/" Makefile - - # if pre-rc1 devel kernel, must fix up PATCHLEVEL for our versioning scheme - # if we are post rc1 this should match anyway so this won't matter - perl -p -i -e 's/^PATCHLEVEL.*/PATCHLEVEL = %{patchlevel}/' Makefile - - %{make} %{?_smp_mflags} mrproper - cp configs/$Config .config - - %if %{signkernel}%{signmodules} - cp configs/x509.genkey certs/. - %endif - - Arch=`head -1 .config | cut -b 3-` - echo USING ARCH=$Arch - - KCFLAGS="%{?kcflags}" - - # add kpatch flags for base kernel - if [ "$Variant" == "" ]; then - KCFLAGS="$KCFLAGS %{?kpatch_kcflags}" - fi -} - -BuildKernel() { - MakeTarget=$1 - KernelImage=$2 - DoVDSO=$3 - Variant=$4 - InstallName=${5:-vmlinuz} - - DoModules=1 - if [ "$Variant" = "zfcpdump" ]; then - DoModules=0 - fi - - # When the bootable image is just the ELF kernel, strip it. - # We already copy the unstripped file into the debuginfo package. - if [ "$KernelImage" = vmlinux ]; then - CopyKernel=cp_vmlinux - else - CopyKernel=cp - fi - - InitBuildVars $Variant - - echo BUILDING A KERNEL FOR ${Variant} %{_target_cpu}... - - %{make} ARCH=$Arch olddefconfig >/dev/null - - # This ensures build-ids are unique to allow parallel debuginfo - perl -p -i -e "s/^CONFIG_BUILD_SALT.*/CONFIG_BUILD_SALT=\"%{KVERREL}\"/" .config - %{make} ARCH=$Arch KCFLAGS="$KCFLAGS" WITH_GCOV="%{?with_gcov}" %{?_smp_mflags} $MakeTarget %{?sparse_mflags} %{?kernel_mflags} - if [ $DoModules -eq 1 ]; then - %{make} ARCH=$Arch KCFLAGS="$KCFLAGS" WITH_GCOV="%{?with_gcov}" %{?_smp_mflags} modules %{?sparse_mflags} || exit 1 - fi - - mkdir -p $RPM_BUILD_ROOT/%{image_install_path} - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/systemtap -%if %{with_debuginfo} - mkdir -p $RPM_BUILD_ROOT%{debuginfodir}/%{image_install_path} -%endif - -%ifarch %{arm} aarch64 - %{make} ARCH=$Arch dtbs INSTALL_DTBS_PATH=$RPM_BUILD_ROOT/%{image_install_path}/dtb-$KernelVer - %{make} ARCH=$Arch dtbs_install INSTALL_DTBS_PATH=$RPM_BUILD_ROOT/%{image_install_path}/dtb-$KernelVer - cp -r $RPM_BUILD_ROOT/%{image_install_path}/dtb-$KernelVer $RPM_BUILD_ROOT/lib/modules/$KernelVer/dtb - find arch/$Arch/boot/dts -name '*.dtb' -type f -delete -%endif - - # Start installing the results - install -m 644 .config $RPM_BUILD_ROOT/boot/config-$KernelVer - install -m 644 .config $RPM_BUILD_ROOT/lib/modules/$KernelVer/config - install -m 644 System.map $RPM_BUILD_ROOT/boot/System.map-$KernelVer - install -m 644 System.map $RPM_BUILD_ROOT/lib/modules/$KernelVer/System.map - - # We estimate the size of the initramfs because rpm needs to take this size - # into consideration when performing disk space calculations. (See bz #530778) - dd if=/dev/zero of=$RPM_BUILD_ROOT/boot/initramfs-$KernelVer.img bs=1M count=20 - - if [ -f arch/$Arch/boot/zImage.stub ]; then - cp arch/$Arch/boot/zImage.stub $RPM_BUILD_ROOT/%{image_install_path}/zImage.stub-$KernelVer || : - cp arch/$Arch/boot/zImage.stub $RPM_BUILD_ROOT/lib/modules/$KernelVer/zImage.stub-$KernelVer || : - fi - - %if %{signkernel} - if [ "$KernelImage" = vmlinux ]; then - # We can't strip and sign $KernelImage in place, because - # we need to preserve original vmlinux for debuginfo. - # Use a copy for signing. - $CopyKernel $KernelImage $KernelImage.tosign - KernelImage=$KernelImage.tosign - CopyKernel=cp - fi - - # Sign the image if we're using EFI - # aarch64 kernels are gziped EFI images - KernelExtension=${KernelImage##*.} - if [ "$KernelExtension" == "gz" ]; then - SignImage=${KernelImage%.*} - else - SignImage=$KernelImage - fi - - %ifarch x86_64 aarch64 - %pesign -s -i $SignImage -o vmlinuz.tmp -a %{secureboot_ca_0} -c %{secureboot_key_0} -n %{pesign_name_0} - %pesign -s -i vmlinuz.tmp -o vmlinuz.signed -a %{secureboot_ca_1} -c %{secureboot_key_1} -n %{pesign_name_1} - rm vmlinuz.tmp - %endif - %ifarch s390x ppc64le - if [ -x /usr/bin/rpm-sign ]; then - rpm-sign --key "%{pesign_name_0}" --lkmsign $SignImage --output vmlinuz.signed - elif [ $DoModules -eq 1 ]; then - chmod +x scripts/sign-file - ./scripts/sign-file -p sha256 certs/signing_key.pem certs/signing_key.x509 $SignImage vmlinuz.signed - else - mv $SignImage vmlinuz.signed - fi - %endif - - if [ ! -s vmlinuz.signed ]; then - echo "pesigning failed" - exit 1 - fi - mv vmlinuz.signed $SignImage - if [ "$KernelExtension" == "gz" ]; then - gzip -f9 $SignImage - fi - # signkernel - %endif - - $CopyKernel $KernelImage \ - $RPM_BUILD_ROOT/%{image_install_path}/$InstallName-$KernelVer - chmod 755 $RPM_BUILD_ROOT/%{image_install_path}/$InstallName-$KernelVer - cp $RPM_BUILD_ROOT/%{image_install_path}/$InstallName-$KernelVer $RPM_BUILD_ROOT/lib/modules/$KernelVer/$InstallName - - # hmac sign the kernel for FIPS - echo "Creating hmac file: $RPM_BUILD_ROOT/%{image_install_path}/.vmlinuz-$KernelVer.hmac" - ls -l $RPM_BUILD_ROOT/%{image_install_path}/$InstallName-$KernelVer - (cd $RPM_BUILD_ROOT/%{image_install_path} && sha512hmac $InstallName-$KernelVer) > $RPM_BUILD_ROOT/%{image_install_path}/.vmlinuz-$KernelVer.hmac; - cp $RPM_BUILD_ROOT/%{image_install_path}/.vmlinuz-$KernelVer.hmac $RPM_BUILD_ROOT/lib/modules/$KernelVer/.vmlinuz.hmac - - if [ $DoModules -eq 1 ]; then - # Override $(mod-fw) because we don't want it to install any firmware - # we'll get it from the linux-firmware package and we don't want conflicts - %{make} %{?_smp_mflags} ARCH=$Arch INSTALL_MOD_PATH=$RPM_BUILD_ROOT %{?_smp_mflags} modules_install KERNELRELEASE=$KernelVer mod-fw= - fi - -%if %{with_gcov} - # install gcov-needed files to $BUILDROOT/$BUILD/...: - # gcov_info->filename is absolute path - # gcno references to sources can use absolute paths (e.g. in out-of-tree builds) - # sysfs symlink targets (set up at compile time) use absolute paths to BUILD dir - find . \( -name '*.gcno' -o -name '*.[chS]' \) -exec install -D '{}' "$RPM_BUILD_ROOT/$(pwd)/{}" \; -%endif - - # add an a noop %%defattr statement 'cause rpm doesn't like empty file list files - echo '%%defattr(-,-,-)' > ../kernel${Variant:+-${Variant}}-ldsoconf.list - if [ $DoVDSO -ne 0 ]; then - %{make} ARCH=$Arch INSTALL_MOD_PATH=$RPM_BUILD_ROOT vdso_install KERNELRELEASE=$KernelVer - if [ -s ldconfig-kernel.conf ]; then - install -D -m 444 ldconfig-kernel.conf \ - $RPM_BUILD_ROOT/etc/ld.so.conf.d/kernel-$KernelVer.conf - echo /etc/ld.so.conf.d/kernel-$KernelVer.conf >> ../kernel${Variant:+-${Variant}}-ldsoconf.list - fi - - rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/vdso/.build-id - fi - - # And save the headers/makefiles etc for building modules against - # - # This all looks scary, but the end result is supposed to be: - # * all arch relevant include/ files - # * all Makefile/Kconfig files - # * all script/ files - - rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/source - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - (cd $RPM_BUILD_ROOT/lib/modules/$KernelVer ; ln -s build source) - # dirs for additional modules per module-init-tools, kbuild/modules.txt - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/updates - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/weak-updates - # CONFIG_KERNEL_HEADER_TEST generates some extra files in the process of - # testing so just delete - find . -name *.h.s -delete - # first copy everything - cp --parents `find -type f -name "Makefile*" -o -name "Kconfig*"` $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - if [ ! -e Module.symvers ]; then - touch Module.symvers - fi - cp Module.symvers $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp System.map $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - if [ -s Module.markers ]; then - cp Module.markers $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - fi - - # create the kABI metadata for use in packaging - # NOTENOTE: the name symvers is used by the rpm backend - # NOTENOTE: to discover and run the /usr/lib/rpm/fileattrs/kabi.attr - # NOTENOTE: script which dynamically adds exported kernel symbol - # NOTENOTE: checksums to the rpm metadata provides list. - # NOTENOTE: if you change the symvers name, update the backend too - echo "**** GENERATING kernel ABI metadata ****" - gzip -c9 < Module.symvers > $RPM_BUILD_ROOT/boot/symvers-$KernelVer.gz - cp $RPM_BUILD_ROOT/boot/symvers-$KernelVer.gz $RPM_BUILD_ROOT/lib/modules/$KernelVer/symvers.gz - -%if %{with_kabichk} - echo "**** kABI checking is enabled in kernel SPEC file. ****" - chmod 0755 $RPM_SOURCE_DIR/check-kabi - if [ -e $RPM_SOURCE_DIR/Module.kabi_%{_target_cpu}$Variant ]; then - cp $RPM_SOURCE_DIR/Module.kabi_%{_target_cpu}$Variant $RPM_BUILD_ROOT/Module.kabi - $RPM_SOURCE_DIR/check-kabi -k $RPM_BUILD_ROOT/Module.kabi -s Module.symvers || exit 1 - # for now, don't keep it around. - rm $RPM_BUILD_ROOT/Module.kabi - else - echo "**** NOTE: Cannot find reference Module.kabi file. ****" - fi -%endif - -%if %{with_kabidupchk} - echo "**** kABI DUP checking is enabled in kernel SPEC file. ****" - if [ -e $RPM_SOURCE_DIR/Module.kabi_dup_%{_target_cpu}$Variant ]; then - cp $RPM_SOURCE_DIR/Module.kabi_dup_%{_target_cpu}$Variant $RPM_BUILD_ROOT/Module.kabi - $RPM_SOURCE_DIR/check-kabi -k $RPM_BUILD_ROOT/Module.kabi -s Module.symvers || exit 1 - # for now, don't keep it around. - rm $RPM_BUILD_ROOT/Module.kabi - else - echo "**** NOTE: Cannot find DUP reference Module.kabi file. ****" - fi -%endif - -%if %{with_kabidw_base} - # Don't build kabi base for debug kernels - if [ "$Variant" != "zfcpdump" -a "$Variant" != "debug" ]; then - mkdir -p $RPM_BUILD_ROOT/kabi-dwarf - tar xjvf %{SOURCE301} -C $RPM_BUILD_ROOT/kabi-dwarf - - mkdir -p $RPM_BUILD_ROOT/kabi-dwarf/stablelists - tar xjvf %{SOURCE300} -C $RPM_BUILD_ROOT/kabi-dwarf/stablelists - - echo "**** GENERATING DWARF-based kABI baseline dataset ****" - chmod 0755 $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh - $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh generate \ - "$RPM_BUILD_ROOT/kabi-dwarf/stablelists/kabi-current/kabi_stablelist_%{_target_cpu}" \ - "$(pwd)" \ - "$RPM_BUILD_ROOT/kabidw-base/%{_target_cpu}${Variant:+.${Variant}}" || : - - rm -rf $RPM_BUILD_ROOT/kabi-dwarf - fi -%endif - -%if %{with_kabidwchk} - if [ "$Variant" != "zfcpdump" ]; then - mkdir -p $RPM_BUILD_ROOT/kabi-dwarf - tar xjvf %{SOURCE301} -C $RPM_BUILD_ROOT/kabi-dwarf - if [ -d "$RPM_BUILD_ROOT/kabi-dwarf/base/%{_target_cpu}${Variant:+.${Variant}}" ]; then - mkdir -p $RPM_BUILD_ROOT/kabi-dwarf/stablelists - tar xjvf %{SOURCE300} -C $RPM_BUILD_ROOT/kabi-dwarf/stablelists - - echo "**** GENERATING DWARF-based kABI dataset ****" - chmod 0755 $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh - $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh generate \ - "$RPM_BUILD_ROOT/kabi-dwarf/stablelists/kabi-current/kabi_stablelist_%{_target_cpu}" \ - "$(pwd)" \ - "$RPM_BUILD_ROOT/kabi-dwarf/base/%{_target_cpu}${Variant:+.${Variant}}.tmp" || : - - echo "**** kABI DWARF-based comparison report ****" - $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh compare \ - "$RPM_BUILD_ROOT/kabi-dwarf/base/%{_target_cpu}${Variant:+.${Variant}}" \ - "$RPM_BUILD_ROOT/kabi-dwarf/base/%{_target_cpu}${Variant:+.${Variant}}.tmp" || : - echo "**** End of kABI DWARF-based comparison report ****" - else - echo "**** Baseline dataset for kABI DWARF-BASED comparison report not found ****" - fi - - rm -rf $RPM_BUILD_ROOT/kabi-dwarf - fi -%endif - - # then drop all but the needed Makefiles/Kconfig files - rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts - rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include - cp .config $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a scripts $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts/tracing - rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts/spdxcheck.py - -%ifarch s390x - # CONFIG_EXPOLINE_EXTERN=y produces arch/s390/lib/expoline.o - # which is needed during external module build. - if [ -f arch/s390/lib/expoline.o ]; then - cp -a --parents arch/s390/lib/expoline.o $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - fi -%endif - - # Files for 'make scripts' to succeed with kernel-devel. - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/security/selinux/include - cp -a --parents security/selinux/include/classmap.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents security/selinux/include/initial_sid_to_string.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/tools/include/tools - cp -a --parents tools/include/tools/be_byteshift.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/tools/le_byteshift.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - - # Files for 'make prepare' to succeed with kernel-devel. - cp -a --parents tools/include/linux/compiler* $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/linux/types.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/build/Build.include $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/build/Build $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/build/fixdep.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/objtool/sync-check.sh $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/bpf/resolve_btfids $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - - cp --parents security/selinux/include/policycap_names.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents security/selinux/include/policycap.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - - cp -a --parents tools/include/asm-generic $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/linux $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/uapi/asm $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/uapi/asm-generic $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/uapi/linux $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/vdso $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/scripts/utilities.mak $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/lib/subcmd $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/lib/*.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/objtool/*.[ch] $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/objtool/Build $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/objtool/include/objtool/*.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/lib/bpf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/lib/bpf/Build $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - - if [ -f tools/objtool/objtool ]; then - cp -a tools/objtool/objtool $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/tools/objtool/ || : - fi - if [ -f tools/objtool/fixdep ]; then - cp -a tools/objtool/fixdep $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/tools/objtool/ || : - fi - if [ -d arch/$Arch/scripts ]; then - cp -a arch/$Arch/scripts $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/arch/%{_arch} || : - fi - if [ -f arch/$Arch/*lds ]; then - cp -a arch/$Arch/*lds $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/arch/%{_arch}/ || : - fi - if [ -f arch/%{asmarch}/kernel/module.lds ]; then - cp -a --parents arch/%{asmarch}/kernel/module.lds $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - fi - find $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts \( -iname "*.o" -o -iname "*.cmd" \) -exec rm -f {} + -%ifarch ppc64le - cp -a --parents arch/powerpc/lib/crtsavres.[So] $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ -%endif - if [ -d arch/%{asmarch}/include ]; then - cp -a --parents arch/%{asmarch}/include $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - fi -%ifarch aarch64 - # arch/arm64/include/asm/xen references arch/arm - cp -a --parents arch/arm/include/asm/xen $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - # arch/arm64/include/asm/opcodes.h references arch/arm - cp -a --parents arch/arm/include/asm/opcodes.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ -%endif - # include the machine specific headers for ARM variants, if available. -%ifarch %{arm} - if [ -d arch/%{asmarch}/mach-${Variant}/include ]; then - cp -a --parents arch/%{asmarch}/mach-${Variant}/include $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - fi - # include a few files for 'make prepare' - cp -a --parents arch/arm/tools/gen-mach-types $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/arm/tools/mach-types $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - -%endif - cp -a include $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include -%ifarch i686 x86_64 - # files for 'make prepare' to succeed with kernel-devel - cp -a --parents arch/x86/entry/syscalls/syscall_32.tbl $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/entry/syscalls/syscall_64.tbl $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs_32.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs_64.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs_common.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/purgatory/purgatory.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/purgatory/stack.S $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/purgatory/setup-x86_64.S $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/purgatory/entry64.S $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/boot/string.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/boot/string.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/boot/ctype.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - - cp -a --parents scripts/syscalltbl.sh $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents scripts/syscallhdr.sh $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - - cp -a --parents tools/arch/x86/include/asm $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/arch/x86/include/uapi/asm $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/objtool/arch/x86/lib $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/arch/x86/lib/ $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/arch/x86/tools/gen-insn-attr-x86.awk $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/objtool/arch/x86/ $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - -%endif - # Clean up intermediate tools files - find $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/tools \( -iname "*.o" -o -iname "*.cmd" \) -exec rm -f {} + - - # Make sure the Makefile, version.h, and auto.conf have a matching - # timestamp so that external modules can be built - touch -r $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/Makefile \ - $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include/generated/uapi/linux/version.h \ - $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include/config/auto.conf - -%if %{with_debuginfo} - eu-readelf -n vmlinux | grep "Build ID" | awk '{print $NF}' > vmlinux.id - cp vmlinux.id $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/vmlinux.id - - # - # save the vmlinux file for kernel debugging into the kernel-debuginfo rpm - # - mkdir -p $RPM_BUILD_ROOT%{debuginfodir}/lib/modules/$KernelVer - cp vmlinux $RPM_BUILD_ROOT%{debuginfodir}/lib/modules/$KernelVer - if [ -n "%{vmlinux_decompressor}" ]; then - eu-readelf -n %{vmlinux_decompressor} | grep "Build ID" | awk '{print $NF}' > vmlinux.decompressor.id - # Without build-id the build will fail. But for s390 the build-id - # wasn't added before 5.11. In case it is missing prefer not - # packaging the debuginfo over a build failure. - if [ -s vmlinux.decompressor.id ]; then - cp vmlinux.decompressor.id $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/vmlinux.decompressor.id - cp %{vmlinux_decompressor} $RPM_BUILD_ROOT%{debuginfodir}/lib/modules/$KernelVer/vmlinux.decompressor - fi - fi -%endif - - find $RPM_BUILD_ROOT/lib/modules/$KernelVer -name "*.ko" -type f >modnames - - # mark modules executable so that strip-to-file can strip them - xargs --no-run-if-empty chmod u+x < modnames - - # Generate a list of modules for block and networking. - - grep -F /drivers/ modnames | xargs --no-run-if-empty nm -upA | - sed -n 's,^.*/\([^/]*\.ko\): *U \(.*\)$,\1 \2,p' > drivers.undef - - collect_modules_list() - { - sed -r -n -e "s/^([^ ]+) \\.?($2)\$/\\1/p" drivers.undef | - LC_ALL=C sort -u > $RPM_BUILD_ROOT/lib/modules/$KernelVer/modules.$1 - if [ ! -z "$3" ]; then - sed -r -e "/^($3)\$/d" -i $RPM_BUILD_ROOT/lib/modules/$KernelVer/modules.$1 - fi - } - - collect_modules_list networking \ - 'register_netdev|ieee80211_register_hw|usbnet_probe|phy_driver_register|rt(l_|2x00)(pci|usb)_probe|register_netdevice' - collect_modules_list block \ - 'ata_scsi_ioctl|scsi_add_host|scsi_add_host_with_dma|blk_alloc_queue|blk_init_queue|register_mtd_blktrans|scsi_esp_register|scsi_register_device_handler|blk_queue_physical_block_size' 'pktcdvd.ko|dm-mod.ko' - collect_modules_list drm \ - 'drm_open|drm_init' - collect_modules_list modesetting \ - 'drm_crtc_init' - - # detect missing or incorrect license tags - ( find $RPM_BUILD_ROOT/lib/modules/$KernelVer -name '*.ko' | xargs /sbin/modinfo -l | \ - grep -E -v 'GPL( v2)?$|Dual BSD/GPL$|Dual MPL/GPL$|GPL and additional rights$' ) && exit 1 - - remove_depmod_files() - { - # remove files that will be auto generated by depmod at rpm -i time - pushd $RPM_BUILD_ROOT/lib/modules/$KernelVer/ - rm -f modules.{alias,alias.bin,builtin.alias.bin,builtin.bin} \ - modules.{dep,dep.bin,devname,softdep,symbols,symbols.bin} - popd - } - - remove_depmod_files - - # Identify modules in the kernel-modules-extras package - %{SOURCE20} $RPM_BUILD_ROOT lib/modules/$KernelVer $(realpath configs/mod-extra.list) - # Identify modules in the kernel-modules-extras package - %{SOURCE20} $RPM_BUILD_ROOT lib/modules/$KernelVer %{SOURCE84} internal - - # - # Generate the kernel-core and kernel-modules files lists - # - - # Copy the System.map file for depmod to use, and create a backup of the - # full module tree so we can restore it after we're done filtering - cp System.map $RPM_BUILD_ROOT/. - cp configs/filter-*.sh $RPM_BUILD_ROOT/. - pushd $RPM_BUILD_ROOT - mkdir restore - cp -r lib/modules/$KernelVer/* restore/. - - # don't include anything going into kernel-modules-extra in the file lists - xargs rm -rf < mod-extra.list - # don't include anything going int kernel-modules-internal in the file lists - xargs rm -rf < mod-internal.list - - if [ $DoModules -eq 1 ]; then - # Find all the module files and filter them out into the core and - # modules lists. This actually removes anything going into -modules - # from the dir. - find lib/modules/$KernelVer/kernel -name *.ko | sort -n > modules.list - ./filter-modules.sh modules.list %{_target_cpu} - rm filter-*.sh - - # Run depmod on the resulting module tree and make sure it isn't broken - depmod -b . -aeF ./System.map $KernelVer &> depmod.out - if [ -s depmod.out ]; then - echo "Depmod failure" - cat depmod.out - exit 1 - else - rm depmod.out - fi - else - # Ensure important files/directories exist to let the packaging succeed - echo '%%defattr(-,-,-)' > modules.list - echo '%%defattr(-,-,-)' > k-d.list - mkdir -p lib/modules/$KernelVer/kernel - # Add files usually created by make modules, needed to prevent errors - # thrown by depmod during package installation - touch lib/modules/$KernelVer/modules.order - touch lib/modules/$KernelVer/modules.builtin - fi - - remove_depmod_files - - # Go back and find all of the various directories in the tree. We use this - # for the dir lists in kernel-core - find lib/modules/$KernelVer/kernel -mindepth 1 -type d | sort -n > module-dirs.list - - # Cleanup - rm System.map - # Just "cp -r" can be very slow: here, it rewrites _existing files_ - # with open(O_TRUNC). Many filesystems synchronously wait for metadata - # update for such file rewrites (seen in strace as final close syscall - # taking a long time). On a rotational disk, cp was observed to take - # more than 5 minutes on ext4 and more than 15 minutes (!) on xfs. - # With --remove-destination, we avoid this, and copying - # (with enough RAM to cache it) takes 5 seconds: - cp -r --remove-destination restore/* lib/modules/$KernelVer/. - rm -rf restore - popd - - # Make sure the files lists start with absolute paths or rpmbuild fails. - # Also add in the dir entries - sed -e 's/^lib*/\/lib/' %{?zipsed} $RPM_BUILD_ROOT/k-d.list > ../kernel${Variant:+-${Variant}}-modules.list - sed -e 's/^lib*/%dir \/lib/' %{?zipsed} $RPM_BUILD_ROOT/module-dirs.list > ../kernel${Variant:+-${Variant}}-core.list - sed -e 's/^lib*/\/lib/' %{?zipsed} $RPM_BUILD_ROOT/modules.list >> ../kernel${Variant:+-${Variant}}-core.list - sed -e 's/^lib*/\/lib/' %{?zipsed} $RPM_BUILD_ROOT/mod-extra.list >> ../kernel${Variant:+-${Variant}}-modules-extra.list - sed -e 's/^lib*/\/lib/' %{?zipsed} $RPM_BUILD_ROOT/mod-internal.list >> ../kernel${Variant:+-${Variant}}-modules-internal.list - - # Cleanup - rm -f $RPM_BUILD_ROOT/k-d.list - rm -f $RPM_BUILD_ROOT/modules.list - rm -f $RPM_BUILD_ROOT/module-dirs.list - rm -f $RPM_BUILD_ROOT/mod-extra.list - rm -f $RPM_BUILD_ROOT/mod-internal.list - -%if %{signmodules} - if [ $DoModules -eq 1 ]; then - # Save the signing keys so we can sign the modules in __modsign_install_post - cp certs/signing_key.pem certs/signing_key.pem.sign${Variant:++${Variant}} - cp certs/signing_key.x509 certs/signing_key.x509.sign${Variant:++${Variant}} - fi -%endif - - # Move the devel headers out of the root file system - mkdir -p $RPM_BUILD_ROOT/usr/src/kernels - mv $RPM_BUILD_ROOT/lib/modules/$KernelVer/build $RPM_BUILD_ROOT/$DevelDir - - # This is going to create a broken link during the build, but we don't use - # it after this point. We need the link to actually point to something - # when kernel-devel is installed, and a relative link doesn't work across - # the F17 UsrMove feature. - ln -sf $DevelDir $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - -%ifnarch armv7hl - # Generate vmlinux.h and put it to kernel-devel path - bpftool btf dump file vmlinux format c > $RPM_BUILD_ROOT/$DevelDir/vmlinux.h -%endif - - # prune junk from kernel-devel - find $RPM_BUILD_ROOT/usr/src/kernels -name ".*.cmd" -delete - - # Red Hat UEFI Secure Boot CA cert, which can be used to authenticate the kernel - mkdir -p $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer - %ifarch x86_64 aarch64 - install -m 0644 %{secureboot_ca_0} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca-20200609.cer - install -m 0644 %{secureboot_ca_1} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca-20140212.cer - ln -s kernel-signing-ca-20200609.cer $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca.cer - %else - install -m 0644 %{secureboot_ca_0} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca.cer - %endif - %ifarch s390x ppc64le - if [ $DoModules -eq 1 ]; then - if [ -x /usr/bin/rpm-sign ]; then - install -m 0644 %{secureboot_key_0} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/%{signing_key_filename} - else - install -m 0644 certs/signing_key.x509.sign${Variant:++${Variant}} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca.cer - openssl x509 -in certs/signing_key.pem.sign${Variant:++${Variant}} -outform der -out $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/%{signing_key_filename} - chmod 0644 $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/%{signing_key_filename} - fi - fi - %endif - -%if %{with_ipaclones} - MAXPROCS=$(echo %{?_smp_mflags} | sed -n 's/-j\s*\([0-9]\+\)/\1/p') - if [ -z "$MAXPROCS" ]; then - MAXPROCS=1 - fi - if [ "$Variant" == "" ]; then - mkdir -p $RPM_BUILD_ROOT/$DevelDir-ipaclones - find . -name '*.ipa-clones' | xargs -i{} -r -n 1 -P $MAXPROCS install -m 644 -D "{}" "$RPM_BUILD_ROOT/$DevelDir-ipaclones/{}" - fi -%endif - -} - -### -# DO it... -### - -# prepare directories -rm -rf $RPM_BUILD_ROOT -mkdir -p $RPM_BUILD_ROOT/boot -mkdir -p $RPM_BUILD_ROOT%{_libexecdir} - -cd linux-%{KVERREL} - - -%if %{with_debug} -BuildKernel %make_target %kernel_image %{_use_vdso} debug -%endif - -%if %{with_zfcpdump} -BuildKernel %make_target %kernel_image %{_use_vdso} zfcpdump -%endif - -%if %{with_pae} -BuildKernel %make_target %kernel_image %{use_vdso} lpae -%endif - -%if %{with_up} -BuildKernel %make_target %kernel_image %{_use_vdso} -%endif - -%ifnarch noarch i686 -%if !%{with_debug} && !%{with_zfcpdump} && !%{with_pae} && !%{with_up} -# If only building the user space tools, then initialize the build environment -# and some variables so that the various userspace tools can be built. -InitBuildVars -%endif -%endif - -%ifarch aarch64 -%global perf_build_extra_opts CORESIGHT=1 -%endif -%global perf_make \ - %{__make} %{?make_opts} EXTRA_CFLAGS="${RPM_OPT_FLAGS}" LDFLAGS="%{__global_ldflags}" %{?cross_opts} -C tools/perf V=1 NO_PERF_READ_VDSO32=1 NO_PERF_READ_VDSOX32=1 WERROR=0 NO_LIBUNWIND=1 HAVE_CPLUS_DEMANGLE=1 NO_GTK2=1 NO_STRLCPY=1 NO_BIONIC=1 LIBBPF_DYNAMIC=1 LIBTRACEEVENT_DYNAMIC=1 %{?perf_build_extra_opts} prefix=%{_prefix} PYTHON=%{__python3} -%if %{with_perf} -# perf -# make sure check-headers.sh is executable -chmod +x tools/perf/check-headers.sh -%{perf_make} DESTDIR=$RPM_BUILD_ROOT all -%endif - -%global tools_make \ - CFLAGS="${RPM_OPT_FLAGS}" LDFLAGS="%{__global_ldflags}" %{make} %{?make_opts} - -%if %{with_tools} -%ifarch %{cpupowerarchs} -# cpupower -# make sure version-gen.sh is executable. -chmod +x tools/power/cpupower/utils/version-gen.sh -%{tools_make} %{?_smp_mflags} -C tools/power/cpupower CPUFREQ_BENCH=false DEBUG=false -%ifarch x86_64 - pushd tools/power/cpupower/debug/x86_64 - %{tools_make} %{?_smp_mflags} centrino-decode powernow-k8-decode - popd -%endif -%ifarch x86_64 - pushd tools/power/x86/x86_energy_perf_policy/ - %{tools_make} - popd - pushd tools/power/x86/turbostat - %{tools_make} - popd - pushd tools/power/x86/intel-speed-select - %{tools_make} - popd - pushd tools/arch/x86/intel_sdsi - %{tools_make} CFLAGS="${RPM_OPT_FLAGS}" - popd -%endif -%endif -pushd tools/thermal/tmon/ -%{tools_make} -popd -pushd tools/iio/ -%{tools_make} -popd -pushd tools/gpio/ -%{tools_make} -popd -# build VM tools -pushd tools/vm/ -%{tools_make} slabinfo page_owner_sort -popd -%endif - -if [ -f $DevelDir/vmlinux.h ]; then - RPM_VMLINUX_H=$DevelDir/vmlinux.h -fi - -%global bpftool_make \ - %{__make} EXTRA_CFLAGS="${RPM_OPT_FLAGS}" EXTRA_LDFLAGS="%{__global_ldflags}" DESTDIR=$RPM_BUILD_ROOT %{?make_opts} VMLINUX_H="${RPM_VMLINUX_H}" V=1 -%if %{with_bpftool} -pushd tools/bpf/bpftool -%{bpftool_make} -popd -%endif - -%if %{with_selftests} -# Unfortunately, samples/bpf/Makefile expects that the headers are installed -# in the source tree. We installed them previously to $RPM_BUILD_ROOT/usr -# but there's no way to tell the Makefile to take them from there. -%{make} %{?_smp_mflags} headers_install -%{make} %{?_smp_mflags} ARCH=$Arch V=1 M=samples/bpf/ || true - -# Prevent bpf selftests to build bpftool repeatedly: -export BPFTOOL=$(pwd)/tools/bpf/bpftool/bpftool - -pushd tools/testing/selftests -# We need to install here because we need to call make with ARCH set which -# doesn't seem possible to do in the install section. -%{make} %{?_smp_mflags} ARCH=$Arch V=1 TARGETS="bpf vm livepatch net net/forwarding net/mptcp netfilter tc-testing" SKIP_TARGETS="" INSTALL_PATH=%{buildroot}%{_libexecdir}/kselftests VMLINUX_H="${RPM_VMLINUX_H}" install - -# 'make install' for bpf is broken and upstream refuses to fix it. -# Install the needed files manually. -for dir in bpf bpf/no_alu32 bpf/progs; do - # In ARK, the rpm build continues even if some of the selftests - # cannot be built. It's not always possible to build selftests, - # as upstream sometimes dependens on too new llvm version or has - # other issues. If something did not get built, just skip it. - test -d $dir || continue - mkdir -p %{buildroot}%{_libexecdir}/kselftests/$dir - find $dir -maxdepth 1 -type f \( -executable -o -name '*.py' -o -name settings -o \ - -name 'btf_dump_test_case_*.c' -o -name '*.ko' -o \ - -name '*.o' -exec sh -c 'readelf -h "{}" | grep -q "^ Machine:.*BPF"' \; \) -print0 | \ - xargs -0 cp -t %{buildroot}%{_libexecdir}/kselftests/$dir || true -done -popd -export -n BPFTOOL -%endif - -%if %{with_doc} -# Make the HTML pages. -%{__make} PYTHON=/usr/bin/python3 htmldocs || %{doc_build_fail} - -# sometimes non-world-readable files sneak into the kernel source tree -chmod -R a=rX Documentation -find Documentation -type d | xargs chmod u+w -%endif - -# In the modsign case, we do 3 things. 1) We check the "variant" and hard -# code the value in the following invocations. This is somewhat sub-optimal -# but we're doing this inside of an RPM macro and it isn't as easy as it -# could be because of that. 2) We restore the .tmp_versions/ directory from -# the one we saved off in BuildKernel above. This is to make sure we're -# signing the modules we actually built/installed in that variant. 3) We -# grab the arch and invoke mod-sign.sh command to actually sign the modules. -# -# We have to do all of those things _after_ find-debuginfo runs, otherwise -# that will strip the signature off of the modules. -# -# Don't sign modules for the zfcpdump variant as it is monolithic. - -%define __modsign_install_post \ - if [ "%{signmodules}" -eq "1" ]; then \ - if [ "%{with_pae}" -ne "0" ]; then \ - %{modsign_cmd} certs/signing_key.pem.sign+lpae certs/signing_key.x509.sign+lpae $RPM_BUILD_ROOT/lib/modules/%{KVERREL}+lpae/ \ - fi \ - if [ "%{with_debug}" -ne "0" ]; then \ - %{modsign_cmd} certs/signing_key.pem.sign+debug certs/signing_key.x509.sign+debug $RPM_BUILD_ROOT/lib/modules/%{KVERREL}+debug/ \ - fi \ - if [ "%{with_up}" -ne "0" ]; then \ - %{modsign_cmd} certs/signing_key.pem.sign certs/signing_key.x509.sign $RPM_BUILD_ROOT/lib/modules/%{KVERREL}/ \ - fi \ - fi \ - if [ "%{zipmodules}" -eq "1" ]; then \ - find $RPM_BUILD_ROOT/lib/modules/ -type f -name '*.ko' | xargs -P${RPM_BUILD_NCPUS} -r xz; \ - fi \ -%{nil} - -### -### Special hacks for debuginfo subpackages. -### - -# This macro is used by %%install, so we must redefine it before that. -%define debug_package %{nil} - -%if %{with_debuginfo} - -%ifnarch noarch -%global __debug_package 1 -%files -f debugfiles.list debuginfo-common-%{_target_cpu} -%endif - -%endif - -# We don't want to package debuginfo for self-tests and samples but -# we have to delete them to avoid an error messages about unpackaged -# files. -# Delete the debuginfo for kernel-devel files -%define __remove_unwanted_dbginfo_install_post \ - if [ "%{with_selftests}" -ne "0" ]; then \ - rm -rf $RPM_BUILD_ROOT/usr/lib/debug/usr/libexec/ksamples; \ - rm -rf $RPM_BUILD_ROOT/usr/lib/debug/usr/libexec/kselftests; \ - fi \ - rm -rf $RPM_BUILD_ROOT/usr/lib/debug/usr/src; \ -%{nil} - -# -# Disgusting hack alert! We need to ensure we sign modules *after* all -# invocations of strip occur, which is in __debug_install_post if -# find-debuginfo.sh runs, and __os_install_post if not. -# -%define __spec_install_post \ - %{?__debug_package:%{__debug_install_post}}\ - %{__arch_install_post}\ - %{__os_install_post}\ - %{__remove_unwanted_dbginfo_install_post}\ - %{__modsign_install_post} - -### -### install -### - -%install - -cd linux-%{KVERREL} - -%if %{with_doc} -docdir=$RPM_BUILD_ROOT%{_datadir}/doc/kernel-doc-%{specversion}-%{pkgrelease} - -# copy the source over -mkdir -p $docdir -tar -h -f - --exclude=man --exclude='.*' -c Documentation | tar xf - -C $docdir - -# with_doc -%endif - -# We have to do the headers install before the tools install because the -# kernel headers_install will remove any header files in /usr/include that -# it doesn't install itself. - -%if %{with_headers} -# Install kernel headers -%{__make} ARCH=%{hdrarch} INSTALL_HDR_PATH=$RPM_BUILD_ROOT/usr headers_install - -find $RPM_BUILD_ROOT/usr/include \ - \( -name .install -o -name .check -o \ - -name ..install.cmd -o -name ..check.cmd \) -delete - -%endif - -%if %{with_cross_headers} -%if 0%{?fedora} -HDR_ARCH_LIST='arm arm64 powerpc s390 x86' -%else -HDR_ARCH_LIST='arm64 powerpc s390 x86' -%endif -mkdir -p $RPM_BUILD_ROOT/usr/tmp-headers - -for arch in $HDR_ARCH_LIST; do - mkdir $RPM_BUILD_ROOT/usr/tmp-headers/arch-${arch} - %{__make} ARCH=${arch} INSTALL_HDR_PATH=$RPM_BUILD_ROOT/usr/tmp-headers/arch-${arch} headers_install -done - -find $RPM_BUILD_ROOT/usr/tmp-headers \ - \( -name .install -o -name .check -o \ - -name ..install.cmd -o -name ..check.cmd \) -delete - -# Copy all the architectures we care about to their respective asm directories -for arch in $HDR_ARCH_LIST ; do - mkdir -p $RPM_BUILD_ROOT/usr/${arch}-linux-gnu/include - mv $RPM_BUILD_ROOT/usr/tmp-headers/arch-${arch}/include/* $RPM_BUILD_ROOT/usr/${arch}-linux-gnu/include/ -done - -rm -rf $RPM_BUILD_ROOT/usr/tmp-headers -%endif - -%if %{with_kernel_abi_stablelists} -# kabi directory -INSTALL_KABI_PATH=$RPM_BUILD_ROOT/lib/modules/ -mkdir -p $INSTALL_KABI_PATH - -# install kabi releases directories -tar xjvf %{SOURCE300} -C $INSTALL_KABI_PATH -# with_kernel_abi_stablelists -%endif - -%if %{with_perf} -# perf tool binary and supporting scripts/binaries -%{perf_make} DESTDIR=$RPM_BUILD_ROOT lib=%{_lib} install-bin -# remove the 'trace' symlink. -rm -f %{buildroot}%{_bindir}/trace - -# For both of the below, yes, this should be using a macro but right now -# it's hard coded and we don't actually want it anyway right now. -# Whoever wants examples can fix it up! - -# remove examples -rm -rf %{buildroot}/usr/lib/perf/examples -rm -rf %{buildroot}/usr/lib/perf/include - -# python-perf extension -%{perf_make} DESTDIR=$RPM_BUILD_ROOT install-python_ext - -# perf man pages (note: implicit rpm magic compresses them later) -mkdir -p %{buildroot}/%{_mandir}/man1 -%{perf_make} DESTDIR=$RPM_BUILD_ROOT install-man - -# remove any tracevent files, eg. its plugins still gets built and installed, -# even if we build against system's libtracevent during perf build (by setting -# LIBTRACEEVENT_DYNAMIC=1 above in perf_make macro). Those files should already -# ship with libtraceevent package. -rm -rf %{buildroot}%{_libdir}/traceevent -%endif - -%if %{with_tools} -%ifarch %{cpupowerarchs} -%{make} -C tools/power/cpupower DESTDIR=$RPM_BUILD_ROOT libdir=%{_libdir} mandir=%{_mandir} CPUFREQ_BENCH=false install -rm -f %{buildroot}%{_libdir}/*.{a,la} -%find_lang cpupower -mv cpupower.lang ../ -%ifarch x86_64 - pushd tools/power/cpupower/debug/x86_64 - install -m755 centrino-decode %{buildroot}%{_bindir}/centrino-decode - install -m755 powernow-k8-decode %{buildroot}%{_bindir}/powernow-k8-decode - popd -%endif -chmod 0755 %{buildroot}%{_libdir}/libcpupower.so* -mkdir -p %{buildroot}%{_unitdir} %{buildroot}%{_sysconfdir}/sysconfig -install -m644 %{SOURCE2000} %{buildroot}%{_unitdir}/cpupower.service -install -m644 %{SOURCE2001} %{buildroot}%{_sysconfdir}/sysconfig/cpupower -%endif -%ifarch x86_64 - mkdir -p %{buildroot}%{_mandir}/man8 - pushd tools/power/x86/x86_energy_perf_policy - %{tools_make} DESTDIR=%{buildroot} install - popd - pushd tools/power/x86/turbostat - %{tools_make} DESTDIR=%{buildroot} install - popd - pushd tools/power/x86/intel-speed-select - %{tools_make} DESTDIR=%{buildroot} install - popd - pushd tools/arch/x86/intel_sdsi - %{tools_make} CFLAGS="${RPM_OPT_FLAGS}" DESTDIR=%{buildroot} install - popd -%endif -pushd tools/thermal/tmon -%{tools_make} INSTALL_ROOT=%{buildroot} install -popd -pushd tools/iio -%{tools_make} DESTDIR=%{buildroot} install -popd -pushd tools/gpio -%{tools_make} DESTDIR=%{buildroot} install -popd -install -m644 -D %{SOURCE2002} %{buildroot}%{_sysconfdir}/logrotate.d/kvm_stat -pushd tools/kvm/kvm_stat -%{__make} INSTALL_ROOT=%{buildroot} install-tools -%{__make} INSTALL_ROOT=%{buildroot} install-man -install -m644 -D kvm_stat.service %{buildroot}%{_unitdir}/kvm_stat.service -popd -# install VM tools -pushd tools/vm/ -install -m755 slabinfo %{buildroot}%{_bindir}/slabinfo -install -m755 page_owner_sort %{buildroot}%{_bindir}/page_owner_sort -popd -%endif - -if [ -f $DevelDir/vmlinux.h ]; then - RPM_VMLINUX_H=$DevelDir/vmlinux.h -fi - -%if %{with_bpftool} -pushd tools/bpf/bpftool -%{bpftool_make} prefix=%{_prefix} bash_compdir=%{_sysconfdir}/bash_completion.d/ mandir=%{_mandir} install doc-install -popd -%endif - -%if %{with_selftests} -pushd samples -install -d %{buildroot}%{_libexecdir}/ksamples -# install bpf samples -pushd bpf -install -d %{buildroot}%{_libexecdir}/ksamples/bpf -find -type f -executable -exec install -m755 {} %{buildroot}%{_libexecdir}/ksamples/bpf \; -install -m755 *.sh %{buildroot}%{_libexecdir}/ksamples/bpf -# test_lwt_bpf.sh compiles test_lwt_bpf.c when run; this works only from the -# kernel tree. Just remove it. -rm %{buildroot}%{_libexecdir}/ksamples/bpf/test_lwt_bpf.sh -install -m644 *_kern.o %{buildroot}%{_libexecdir}/ksamples/bpf || true -install -m644 tcp_bpf.readme %{buildroot}%{_libexecdir}/ksamples/bpf -popd -# install pktgen samples -pushd pktgen -install -d %{buildroot}%{_libexecdir}/ksamples/pktgen -find . -type f -executable -exec install -m755 {} %{buildroot}%{_libexecdir}/ksamples/pktgen/{} \; -find . -type f ! -executable -exec install -m644 {} %{buildroot}%{_libexecdir}/ksamples/pktgen/{} \; -popd -popd -# install vm selftests -pushd tools/testing/selftests/vm -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/vm/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/vm/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/vm/{} \; -popd -# install drivers/net/mlxsw selftests -pushd tools/testing/selftests/drivers/net/mlxsw -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/drivers/net/mlxsw/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/drivers/net/mlxsw/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/drivers/net/mlxsw/{} \; -popd -# install drivers/net/netdevsim selftests -pushd tools/testing/selftests/drivers/net/netdevsim -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/drivers/net/netdevsim/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/drivers/net/netdevsim/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/drivers/net/netdevsim/{} \; -popd -# install net/forwarding selftests -pushd tools/testing/selftests/net/forwarding -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/net/forwarding/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/net/forwarding/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/net/forwarding/{} \; -popd -# install net/mptcp selftests -pushd tools/testing/selftests/net/mptcp -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/net/mptcp/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/net/mptcp/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/net/mptcp/{} \; -popd -# install tc-testing selftests -pushd tools/testing/selftests/tc-testing -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/tc-testing/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/tc-testing/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/tc-testing/{} \; -popd -# install livepatch selftests -pushd tools/testing/selftests/livepatch -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/livepatch/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/livepatch/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/livepatch/{} \; -popd -# install netfilter selftests -pushd tools/testing/selftests/netfilter -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/netfilter/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/netfilter/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/netfilter/{} \; -popd -%endif - -### -### clean -### - -### -### scripts -### - -%if %{with_tools} -%post -n kernel-tools-libs -/sbin/ldconfig - -%postun -n kernel-tools-libs -/sbin/ldconfig -%endif - -# -# This macro defines a %%post script for a kernel*-devel package. -# %%kernel_devel_post [<subpackage>] -# Note we don't run hardlink if ostree is in use, as ostree is -# a far more sophisticated hardlink implementation. -# https://github.com/projectatomic/rpm-ostree/commit/58a79056a889be8814aa51f507b2c7a4dccee526 -# -# The deletion of *.hardlink-temporary files is a temporary workaround -# for this bug in the hardlink binary (fixed in util-linux 2.38): -# https://github.com/util-linux/util-linux/issues/1602 -# -%define kernel_devel_post() \ -%{expand:%%post %{?1:%{1}-}devel}\ -if [ -f /etc/sysconfig/kernel ]\ -then\ - . /etc/sysconfig/kernel || exit $?\ -fi\ -if [ "$HARDLINK" != "no" -a -x /usr/bin/hardlink -a ! -e /run/ostree-booted ] \ -then\ - (cd /usr/src/kernels/%{KVERREL}%{?1:+%{1}} &&\ - /usr/bin/find . -type f | while read f; do\ - hardlink -c /usr/src/kernels/*%{?dist}.*/$f $f > /dev/null\ - done;\ - /usr/bin/find /usr/src/kernels -type f -name '*.hardlink-temporary' -delete\ - )\ -fi\ -%{nil} - -# -# This macro defines a %%post script for a kernel*-modules-extra package. -# It also defines a %%postun script that does the same thing. -# %%kernel_modules_extra_post [<subpackage>] -# -%define kernel_modules_extra_post() \ -%{expand:%%post %{?1:%{1}-}modules-extra}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil}\ -%{expand:%%postun %{?1:%{1}-}modules-extra}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil} - -# -# This macro defines a %%post script for a kernel*-modules-internal package. -# It also defines a %%postun script that does the same thing. -# %%kernel_modules_internal_post [<subpackage>] -# -%define kernel_modules_internal_post() \ -%{expand:%%post %{?1:%{1}-}modules-internal}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil}\ -%{expand:%%postun %{?1:%{1}-}modules-internal}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil} - -# -# This macro defines a %%post script for a kernel*-modules package. -# It also defines a %%postun script that does the same thing. -# %%kernel_modules_post [<subpackage>] -# -%define kernel_modules_post() \ -%{expand:%%post %{?1:%{1}-}modules}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -if [ ! -f %{_localstatedir}/lib/rpm-state/%{name}/installing_core_%{KVERREL}%{?1:+%{1}} ]; then\ - mkdir -p %{_localstatedir}/lib/rpm-state/%{name}\ - touch %{_localstatedir}/lib/rpm-state/%{name}/need_to_run_dracut_%{KVERREL}%{?1:+%{1}}\ -fi\ -%{nil}\ -%{expand:%%postun %{?1:%{1}-}modules}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil}\ -%{expand:%%posttrans %{?1:%{1}-}modules}\ -if [ -f %{_localstatedir}/lib/rpm-state/%{name}/need_to_run_dracut_%{KVERREL}%{?1:+%{1}} ]; then\ - rm -f %{_localstatedir}/lib/rpm-state/%{name}/need_to_run_dracut_%{KVERREL}%{?1:+%{1}}\ - echo "Running: dracut -f --kver %{KVERREL}%{?1:+%{1}}"\ - dracut -f --kver "%{KVERREL}%{?1:+%{1}}" || exit $?\ -fi\ -%{nil} - -# This macro defines a %%posttrans script for a kernel package. -# %%kernel_variant_posttrans [<subpackage>] -# More text can follow to go at the end of this variant's %%post. -# -%define kernel_variant_posttrans() \ -%{expand:%%posttrans %{?1:%{1}-}core}\ -%if 0%{!?fedora:1}\ -if [ -x %{_sbindir}/weak-modules ]\ -then\ - %{_sbindir}/weak-modules --add-kernel %{KVERREL}%{?1:+%{1}} || exit $?\ -fi\ -%endif\ -rm -f %{_localstatedir}/lib/rpm-state/%{name}/installing_core_%{KVERREL}%{?1:+%{1}}\ -/bin/kernel-install add %{KVERREL}%{?1:+%{1}} /lib/modules/%{KVERREL}%{?1:+%{1}}/vmlinuz || exit $?\ -%{nil} - -# -# This macro defines a %%post script for a kernel package and its devel package. -# %%kernel_variant_post [-v <subpackage>] [-r <replace>] -# More text can follow to go at the end of this variant's %%post. -# -%define kernel_variant_post(v:r:) \ -%{expand:%%kernel_devel_post %{?-v*}}\ -%{expand:%%kernel_modules_post %{?-v*}}\ -%{expand:%%kernel_modules_extra_post %{?-v*}}\ -%{expand:%%kernel_modules_internal_post %{?-v*}}\ -%{expand:%%kernel_variant_posttrans %{?-v*}}\ -%{expand:%%post %{?-v*:%{-v*}-}core}\ -%{-r:\ -if [ `uname -i` == "x86_64" -o `uname -i` == "i386" ] &&\ - [ -f /etc/sysconfig/kernel ]; then\ - /bin/sed -r -i -e 's/^DEFAULTKERNEL=%{-r*}$/DEFAULTKERNEL=kernel%{?-v:-%{-v*}}/' /etc/sysconfig/kernel || exit $?\ -fi}\ -mkdir -p %{_localstatedir}/lib/rpm-state/%{name}\ -touch %{_localstatedir}/lib/rpm-state/%{name}/installing_core_%{KVERREL}%{?1:+%{1}}\ -%{nil} - -# -# This macro defines a %%preun script for a kernel package. -# %%kernel_variant_preun <subpackage> -# -%define kernel_variant_preun() \ -%{expand:%%preun %{?1:%{1}-}core}\ -/bin/kernel-install remove %{KVERREL}%{?1:+%{1}} /lib/modules/%{KVERREL}%{?1:+%{1}}/vmlinuz || exit $?\ -if [ -x %{_sbindir}/weak-modules ]\ -then\ - %{_sbindir}/weak-modules --remove-kernel %{KVERREL}%{?1:+%{1}} || exit $?\ -fi\ -%{nil} - -%kernel_variant_preun -%kernel_variant_post -r kernel-smp - -%if %{with_pae} -%kernel_variant_preun lpae -%kernel_variant_post -v lpae -r (kernel|kernel-smp) -%endif - -%if %{with_debug} -%kernel_variant_preun debug -%kernel_variant_post -v debug -%endif - -%if %{with_zfcpdump} -%kernel_variant_preun zfcpdump -%kernel_variant_post -v zfcpdump -%endif - -if [ -x /sbin/ldconfig ] -then - /sbin/ldconfig -X || exit $? -fi - -### -### file lists -### - -%if %{with_headers} -%files headers -/usr/include/* -%endif - -%if %{with_cross_headers} -%files cross-headers -/usr/*-linux-gnu/include/* -%endif - -%if %{with_kernel_abi_stablelists} -%files -n kernel-abi-stablelists -/lib/modules/kabi-* -%endif - -%if %{with_kabidw_base} -%ifarch x86_64 s390x ppc64 ppc64le aarch64 -%files kernel-kabidw-base-internal -%defattr(-,root,root) -/kabidw-base/%{_target_cpu}/* -%endif -%endif - -# only some architecture builds need kernel-doc -%if %{with_doc} -%files doc -%defattr(-,root,root) -%{_datadir}/doc/kernel-doc-%{specversion}-%{pkgrelease}/Documentation/* -%dir %{_datadir}/doc/kernel-doc-%{specversion}-%{pkgrelease}/Documentation -%dir %{_datadir}/doc/kernel-doc-%{specversion}-%{pkgrelease} -%endif - -%if %{with_perf} -%files -n perf -%{_bindir}/perf -%{_libdir}/libperf-jvmti.so -%dir %{_libexecdir}/perf-core -%{_libexecdir}/perf-core/* -%{_datadir}/perf-core/* -%{_mandir}/man[1-8]/perf* -%{_sysconfdir}/bash_completion.d/perf -%doc linux-%{KVERREL}/tools/perf/Documentation/examples.txt -%{_docdir}/perf-tip/tips.txt - -%files -n python3-perf -%{python3_sitearch}/* - -%if %{with_debuginfo} -%files -f perf-debuginfo.list -n perf-debuginfo - -%files -f python3-perf-debuginfo.list -n python3-perf-debuginfo -%endif -# with_perf -%endif - -%if %{with_tools} -%ifnarch %{cpupowerarchs} -%files -n kernel-tools -%else -%files -n kernel-tools -f cpupower.lang -%{_bindir}/cpupower -%{_datadir}/bash-completion/completions/cpupower -%ifarch x86_64 -%{_bindir}/centrino-decode -%{_bindir}/powernow-k8-decode -%endif -%{_unitdir}/cpupower.service -%{_mandir}/man[1-8]/cpupower* -%config(noreplace) %{_sysconfdir}/sysconfig/cpupower -%ifarch x86_64 -%{_bindir}/x86_energy_perf_policy -%{_mandir}/man8/x86_energy_perf_policy* -%{_bindir}/turbostat -%{_mandir}/man8/turbostat* -%{_bindir}/intel-speed-select -%{_sbindir}/intel_sdsi -%endif -# cpupowerarchs -%endif -%{_bindir}/tmon -%{_bindir}/iio_event_monitor -%{_bindir}/iio_generic_buffer -%{_bindir}/lsiio -%{_bindir}/lsgpio -%{_bindir}/gpio-hammer -%{_bindir}/gpio-event-mon -%{_bindir}/gpio-watch -%{_mandir}/man1/kvm_stat* -%{_bindir}/kvm_stat -%{_unitdir}/kvm_stat.service -%config(noreplace) %{_sysconfdir}/logrotate.d/kvm_stat -%{_bindir}/page_owner_sort -%{_bindir}/slabinfo - -%if %{with_debuginfo} -%files -f kernel-tools-debuginfo.list -n kernel-tools-debuginfo -%endif - -%ifarch %{cpupowerarchs} -%files -n kernel-tools-libs -%{_libdir}/libcpupower.so.0 -%{_libdir}/libcpupower.so.0.0.1 - -%files -n kernel-tools-libs-devel -%{_libdir}/libcpupower.so -%{_includedir}/cpufreq.h -%endif -# with_tools -%endif - -%if %{with_bpftool} -%files -n bpftool -%{_sbindir}/bpftool -%{_sysconfdir}/bash_completion.d/bpftool -%{_mandir}/man8/bpftool-cgroup.8.gz -%{_mandir}/man8/bpftool-gen.8.gz -%{_mandir}/man8/bpftool-iter.8.gz -%{_mandir}/man8/bpftool-link.8.gz -%{_mandir}/man8/bpftool-map.8.gz -%{_mandir}/man8/bpftool-prog.8.gz -%{_mandir}/man8/bpftool-perf.8.gz -%{_mandir}/man8/bpftool.8.gz -%{_mandir}/man8/bpftool-net.8.gz -%{_mandir}/man8/bpftool-feature.8.gz -%{_mandir}/man8/bpftool-btf.8.gz -%{_mandir}/man8/bpftool-struct_ops.8.gz - -%if %{with_debuginfo} -%files -f bpftool-debuginfo.list -n bpftool-debuginfo -%defattr(-,root,root) -%endif -%endif - -%if %{with_selftests} -%files selftests-internal -%{_libexecdir}/ksamples -%{_libexecdir}/kselftests -%endif - -# empty meta-package -%ifnarch %nobuildarches noarch -%files -%endif - -%if %{with_gcov} -%ifnarch %nobuildarches noarch -%files gcov -%{_builddir} -%endif -%endif - -# This is %%{image_install_path} on an arch where that includes ELF files, -# or empty otherwise. -%define elf_image_install_path %{?kernel_image_elf:%{image_install_path}} - -# -# This macro defines the %%files sections for a kernel package -# and its devel and debuginfo packages. -# %%kernel_variant_files [-k vmlinux] <use_vdso> <condition> <subpackage> -# -%define kernel_variant_files(k:) \ -%if %{2}\ -%{expand:%%files -f kernel-%{?3:%{3}-}core.list %{?1:-f kernel-%{?3:%{3}-}ldsoconf.list} %{?3:%{3}-}core}\ -%{!?_licensedir:%global license %%doc}\ -%license linux-%{KVERREL}/COPYING-%{version}-%{release}\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/%{?-k:%{-k*}}%{!?-k:vmlinuz}\ -%ghost /%{image_install_path}/%{?-k:%{-k*}}%{!?-k:vmlinuz}-%{KVERREL}%{?3:+%{3}}\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/.vmlinuz.hmac \ -%ghost /%{image_install_path}/.vmlinuz-%{KVERREL}%{?3:+%{3}}.hmac \ -%ifarch %{arm} aarch64\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/dtb \ -%ghost /%{image_install_path}/dtb-%{KVERREL}%{?3:+%{3}} \ -%endif\ -%attr(0600, root, root) /lib/modules/%{KVERREL}%{?3:+%{3}}/System.map\ -%ghost %attr(0600, root, root) /boot/System.map-%{KVERREL}%{?3:+%{3}}\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/symvers.gz\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/config\ -%ghost %attr(0600, root, root) /boot/symvers-%{KVERREL}%{?3:+%{3}}.gz\ -%ghost %attr(0600, root, root) /boot/initramfs-%{KVERREL}%{?3:+%{3}}.img\ -%ghost %attr(0644, root, root) /boot/config-%{KVERREL}%{?3:+%{3}}\ -%dir /lib/modules\ -%dir /lib/modules/%{KVERREL}%{?3:+%{3}}\ -%dir /lib/modules/%{KVERREL}%{?3:+%{3}}/kernel\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/build\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/source\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/updates\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/weak-updates\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/systemtap\ -%{_datadir}/doc/kernel-keys/%{KVERREL}%{?3:+%{3}}\ -%if %{1}\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/vdso\ -%endif\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/modules.*\ -%{expand:%%files -f kernel-%{?3:%{3}-}modules.list %{?3:%{3}-}modules}\ -%{expand:%%files %{?3:%{3}-}devel}\ -%defverify(not mtime)\ -/usr/src/kernels/%{KVERREL}%{?3:+%{3}}\ -%{expand:%%files %{?3:%{3}-}devel-matched}\ -%{expand:%%files -f kernel-%{?3:%{3}-}modules-extra.list %{?3:%{3}-}modules-extra}\ -%config(noreplace) /etc/modprobe.d/*-blacklist.conf\ -%{expand:%%files -f kernel-%{?3:%{3}-}modules-internal.list %{?3:%{3}-}modules-internal}\ -%if %{with_debuginfo}\ -%ifnarch noarch\ -%{expand:%%files -f debuginfo%{?3}.list %{?3:%{3}-}debuginfo}\ -%endif\ -%endif\ -%if %{?3:1} %{!?3:0}\ -%{expand:%%files %{3}}\ -%endif\ -%endif\ -%{nil} - -%kernel_variant_files %{_use_vdso} %{with_up} -%kernel_variant_files %{_use_vdso} %{with_debug} debug -%if %{with_debug_meta} -%files debug -%files debug-core -%files debug-devel -%files debug-devel-matched -%files debug-modules -%files debug-modules-extra -%endif -%kernel_variant_files %{use_vdso} %{with_pae} lpae -%kernel_variant_files %{_use_vdso} %{with_zfcpdump} zfcpdump - -%define kernel_variant_ipaclones(k:) \ -%if %{1}\ -%if %{with_ipaclones}\ -%{expand:%%files %{?2:%{2}-}ipaclones-internal}\ -%defattr(-,root,root)\ -%defverify(not mtime)\ -/usr/src/kernels/%{KVERREL}%{?2:+%{2}}-ipaclones\ -%endif\ -%endif\ -%{nil} - -%kernel_variant_ipaclones %{with_up} - -# plz don't put in a version string unless you're going to tag -# and build. -# -# -%changelog Mon Mar 28 2022 Fedora Kernel Team <kernel-team@xxxxxxxxxxxxxxxxx> [5.16.0-0.rc5.6.test] - -### -# The following Emacs magic makes C-c C-e use UTC dates. -# Local Variables: -# rpm-change-log-uses-utc: t -# End: -### diff --git a/redhat/self-test/data/fedora-2585cf9dfaad.fc25.spec b/redhat/self-test/data/fedora-2585cf9dfaad.fc25.spec index blahblah..blahblah 100755 --- a/redhat/self-test/data/fedora-2585cf9dfaad.fc25.spec +++ b/redhat/self-test/data/fedora-2585cf9dfaad.fc25.spec @@ -1,3050 +1,13 @@ -# All Global changes to build and install go here. -# Per the below section about __spec_install_pre, any rpm -# environment changes that affect %%install need to go -# here before the %%install macro is pre-built. - -# Disable LTO in userspace packages. -%global _lto_cflags %{nil} - -# Option to enable compiling with clang instead of gcc. -%bcond_with toolchain_clang - -%if %{with toolchain_clang} -%global toolchain clang -%endif - -# Compile the kernel with LTO (only supported when building with clang). -%bcond_with clang_lto - -%if %{with clang_lto} && %{without toolchain_clang} -{error:clang_lto requires --with toolchain_clang} -%endif - -# Cross compile on copr for arm -# See https://bugzilla.redhat.com/1879599 -%if 0%{?_with_cross_arm:1} -%global _target_cpu armv7hl -%global _arch arm -%global _build_arch arm -%global _with_cross 1 -%endif - -# The kernel's %%install section is special -# Normally the %%install section starts by cleaning up the BUILD_ROOT -# like so: -# -# %%__spec_install_pre %%{___build_pre}\ -# [ "$RPM_BUILD_ROOT" != "/" ] && rm -rf "${RPM_BUILD_ROOT}"\ -# mkdir -p `dirname "$RPM_BUILD_ROOT"`\ -# mkdir "$RPM_BUILD_ROOT"\ -# %%{nil} -# -# But because of kernel variants, the %%build section, specifically -# BuildKernel(), moves each variant to its final destination as the -# variant is built. This violates the expectation of the %%install -# section. As a result we snapshot the current env variables and -# purposely leave out the removal section. All global wide changes -# should be added above this line otherwise the %%install section -# will not see them. -%global __spec_install_pre %{___build_pre} - -# At the time of this writing (2019-03), RHEL8 packages use w2.xzdio -# compression for rpms (xz, level 2). -# Kernel has several large (hundreds of mbytes) rpms, they take ~5 mins -# to compress by single-threaded xz. Switch to threaded compression, -# and from level 2 to 3 to keep compressed sizes close to "w2" results. -# -# NB: if default compression in /usr/lib/rpm/redhat/macros ever changes, -# this one might need tweaking (e.g. if default changes to w3.xzdio, -# change below to w4T.xzdio): -# -# This is disabled on i686 as it triggers oom errors - -%ifnarch i686 -%define _binary_payload w3T.xzdio -%endif - -Summary: The Linux kernel -%if 0%{?fedora} -%define secure_boot_arch x86_64 -%else -%define secure_boot_arch x86_64 aarch64 s390x ppc64le -%endif - -# Signing for secure boot authentication -%ifarch %{secure_boot_arch} -%global signkernel 1 -%else -%global signkernel 0 -%endif - -# Sign modules on all arches -%global signmodules 1 - -# Compress modules only for architectures that build modules -%ifarch noarch -%global zipmodules 0 -%else -%global zipmodules 1 -%endif - -%if %{zipmodules} -%global zipsed -e 's/\.ko$/\.ko.xz/' -# for parallel xz processes, replace with 1 to go back to single process -%endif - -%if 0%{?fedora} -%define primary_target fedora -%else -%define primary_target rhel -%endif - -# -# genspec.sh variables -# - -# Include Fedora files %global include_fedora 1 -# Include RHEL files %global include_rhel 1 -# Provide Patchlist.changelog file %global patchlist_changelog 1 -# Set released_kernel to 1 when the upstream source tarball contains a -# kernel release. (This includes prepatch or "rc" releases.) -# Set released_kernel to 0 when the upstream source tarball contains an -# unreleased kernel development snapshot. %global released_kernel 0 -# Set debugbuildsenabled to 1 to build separate base and debug kernels -# (on supported architectures). The kernel-debug-* subpackages will -# contain the debug kernel. -# Set debugbuildsenabled to 0 to not build a separate debug kernel, but -# to build the base kernel using the debug configuration. (Specifying -# the --with-release option overrides this setting.) -%define debugbuildsenabled 1 %define buildid .test %define specversion 5.16.0 %define patchversion 5.16 %define pkgrelease 0.rc5.6.test %define kversion 5 %define tarfile_release 5.16-rc5 -# This is needed to do merge window version magic %define patchlevel 16 -# allow pkg_release to have configurable %%{?dist} tag %define specrelease 0.rc5.6%{?buildid}%{?dist} - -# -# End of genspec.sh variables -# - -%define pkg_release %{specrelease} - -# libexec dir is not used by the linker, so the shared object there -# should not be exported to RPM provides -%global __provides_exclude_from ^%{_libexecdir}/kselftests - -# The following build options are enabled by default, but may become disabled -# by later architecture-specific checks. These can also be disabled by using -# --without <opt> in the rpmbuild command, or by forcing these values to 0. -# -# standard kernel -%define with_up %{?_without_up: 0} %{?!_without_up: 1} -# kernel PAE (only valid for ARM (lpae)) -%define with_pae %{?_without_pae: 0} %{?!_without_pae: 1} -# kernel-debug -%define with_debug %{?_without_debug: 0} %{?!_without_debug: 1} -# kernel-zfcpdump (s390 specific kernel for zfcpdump) -%define with_zfcpdump %{?_without_zfcpdump: 0} %{?!_without_zfcpdump: 1} -# kernel-doc -%define with_doc %{?_without_doc: 0} %{?!_without_doc: 1} -# kernel-headers -%define with_headers %{?_without_headers: 0} %{?!_without_headers: 1} -%define with_cross_headers %{?_without_cross_headers: 0} %{?!_without_cross_headers: 1} -# perf -%define with_perf %{?_without_perf: 0} %{?!_without_perf: 1} -# tools -%define with_tools %{?_without_tools: 0} %{?!_without_tools: 1} -# bpf tool -%define with_bpftool %{?_without_bpftool: 0} %{?!_without_bpftool: 1} -# kernel-debuginfo -%define with_debuginfo %{?_without_debuginfo: 0} %{?!_without_debuginfo: 1} -# kernel-abi-stablelists -%define with_kernel_abi_stablelists %{?_without_kernel_abi_stablelists: 0} %{?!_without_kernel_abi_stablelists: 1} -# internal samples and selftests -%define with_selftests %{?_without_selftests: 0} %{?!_without_selftests: 1} -# -# Additional options for user-friendly one-off kernel building: -# -# Only build the base kernel (--with baseonly): -%define with_baseonly %{?_with_baseonly: 1} %{?!_with_baseonly: 0} -# Only build the pae kernel (--with paeonly): -%define with_paeonly %{?_with_paeonly: 1} %{?!_with_paeonly: 0} -# Only build the debug kernel (--with dbgonly): -%define with_dbgonly %{?_with_dbgonly: 1} %{?!_with_dbgonly: 0} -# Control whether we perform a compat. check against published ABI. -%define with_kabichk %{?_without_kabichk: 0} %{?!_without_kabichk: 1} -# Temporarily disable kabi checks until RC. -%define with_kabichk 0 -# Control whether we perform a compat. check against DUP ABI. -%define with_kabidupchk %{?_with_kabidupchk: 1} %{?!_with_kabidupchk: 0} -# -# Control whether to run an extensive DWARF based kABI check. -# Note that this option needs to have baseline setup in SOURCE300. -%define with_kabidwchk %{?_without_kabidwchk: 0} %{?!_without_kabidwchk: 1} -%define with_kabidw_base %{?_with_kabidw_base: 1} %{?!_with_kabidw_base: 0} -# -# Control whether to install the vdso directories. -%define with_vdso_install %{?_without_vdso_install: 0} %{?!_without_vdso_install: 1} -# -# should we do C=1 builds with sparse -%define with_sparse %{?_with_sparse: 1} %{?!_with_sparse: 0} -# -# Cross compile requested? -%define with_cross %{?_with_cross: 1} %{?!_with_cross: 0} -# -# build a release kernel on rawhide -%define with_release %{?_with_release: 1} %{?!_with_release: 0} - -# verbose build, i.e. no silent rules and V=1 -%define with_verbose %{?_with_verbose: 1} %{?!_with_verbose: 0} - -# -# check for mismatched config options -%define with_configchecks %{?_without_configchecks: 0} %{?!_without_configchecks: 1} - -# -# gcov support -%define with_gcov %{?_with_gcov:1}%{?!_with_gcov:0} - -# -# ipa_clone support -%define with_ipaclones %{?_without_ipaclones: 0} %{?!_without_ipaclones: 1} - -# Want to build a vanilla kernel build without any non-upstream patches? -%define with_vanilla %{?_with_vanilla: 1} %{?!_with_vanilla: 0} - -%if 0%{?fedora} -# Kernel headers are being split out into a separate package -%define with_headers 0 -%define with_cross_headers 0 -# no ipa_clone for now -%define with_ipaclones 0 -# no stablelist -%define with_kernel_abi_stablelists 0 -# Fedora builds these separately -%define with_perf 0 -%define with_tools 0 -%define with_bpftool 0 -# selftests turns on bpftool -%define with_selftests 0 -%endif - -%if %{with_verbose} -%define make_opts V=1 -%else -%define make_opts -s -%endif - -%if %{with toolchain_clang} -%ifarch s390x ppc64le -%global llvm_ias 0 -%else -%global llvm_ias 1 -%endif -%global clang_make_opts HOSTCC=clang CC=clang LLVM_IAS=%{llvm_ias} -%if %{with clang_lto} -%global clang_make_opts %{clang_make_opts} LD=ld.lld HOSTLD=ld.lld AR=llvm-ar NM=llvm-nm HOSTAR=llvm-ar HOSTNM=llvm-nm -%endif -%global make_opts %{make_opts} %{clang_make_opts} -# clang does not support the -fdump-ipa-clones option -%global with_ipaclones 0 -%endif - -# turn off debug kernel and kabichk for gcov builds -%if %{with_gcov} -%define with_debug 0 -%define with_kabichk 0 -%define with_kabidupchk 0 -%define with_kabidwchk 0 -%define with_kabidw_base 0 -%define with_kernel_abi_stablelists 0 -%endif - -# turn off kABI DWARF-based check if we're generating the base dataset -%if %{with_kabidw_base} -%define with_kabidwchk 0 -%endif - -# kpatch_kcflags are extra compiler flags applied to base kernel -# -fdump-ipa-clones is enabled only for base kernels on selected arches -%if %{with_ipaclones} -%ifarch x86_64 ppc64le -%define kpatch_kcflags -fdump-ipa-clones -%else -%define with_ipaclones 0 -%endif -%endif - -%define make_target bzImage -%define image_install_path boot - -%define KVERREL %{version}-%{release}.%{_target_cpu} -%define KVERREL_RE %(echo %KVERREL | sed 's/+/[+]/g') -%define hdrarch %_target_cpu -%define asmarch %_target_cpu - -%if 0%{!?nopatches:1} -%define nopatches 0 -%endif - -%if %{with_vanilla} -%define nopatches 1 -%endif - -%if %{with_release} -%define debugbuildsenabled 1 -%endif - -%if !%{with_debuginfo} -%define _enable_debug_packages 0 -%endif -%define debuginfodir /usr/lib/debug -# Needed because we override almost everything involving build-ids -# and debuginfo generation. Currently we rely on the old alldebug setting. -%global _build_id_links alldebug - -# kernel PAE is only built on ARMv7 -%ifnarch armv7hl -%define with_pae 0 -%endif - -# if requested, only build base kernel -%if %{with_baseonly} -%define with_pae 0 -%define with_debug 0 -%define with_vdso_install 0 -%define with_perf 0 -%define with_tools 0 -%define with_bpftool 0 -%define with_kernel_abi_stablelists 0 -%define with_selftests 0 -%define with_cross 0 -%define with_cross_headers 0 -%define with_ipaclones 0 -%endif - -# if requested, only build pae kernel -%if %{with_paeonly} -%define with_up 0 -%define with_debug 0 -%endif - -# if requested, only build debug kernel -%if %{with_dbgonly} -%define with_up 0 -%define with_vdso_install 0 -%define with_perf 0 -%define with_tools 0 -%define with_bpftool 0 -%define with_kernel_abi_stablelists 0 -%define with_selftests 0 -%define with_cross 0 -%define with_cross_headers 0 -%define with_ipaclones 0 -%endif - -# turn off kABI DUP check and DWARF-based check if kABI check is disabled -%if !%{with_kabichk} -%define with_kabidupchk 0 -%define with_kabidwchk 0 -%endif - -%if %{with_vdso_install} -%define use_vdso 1 -%endif - -# selftests require bpftool to be built -%if %{with_selftests} -%define with_bpftool 1 -%endif - -%ifnarch noarch -%define with_kernel_abi_stablelists 0 -%endif - -# Overrides for generic default options - -# only package docs noarch -%ifnarch noarch -%define with_doc 0 -%define doc_build_fail true -%endif - -%if 0%{?fedora} -# don't do debug builds on anything but i686 and x86_64 -%ifnarch i686 x86_64 -%define with_debug 0 -%endif -%endif - -# don't build noarch kernels or headers (duh) -%ifarch noarch -%define with_up 0 -%define with_headers 0 -%define with_cross_headers 0 -%define with_tools 0 -%define with_perf 0 -%define with_bpftool 0 -%define with_selftests 0 -%define with_debug 0 -%define all_arch_configs kernel-%{version}-*.config -%endif - -# sparse blows up on ppc -%ifnarch ppc64le -%define with_sparse 0 -%endif - -# zfcpdump mechanism is s390 only -%ifnarch s390x -%define with_zfcpdump 0 -%endif - -%if 0%{?fedora} -# This is not for Fedora -%define with_zfcpdump 0 -%endif - -# Per-arch tweaks - -%ifarch i686 -%define asmarch x86 -%define hdrarch i386 -%define all_arch_configs kernel-%{version}-i?86*.config -%define kernel_image arch/x86/boot/bzImage -%endif - -%ifarch x86_64 -%define asmarch x86 -%define all_arch_configs kernel-%{version}-x86_64*.config -%define kernel_image arch/x86/boot/bzImage -%endif - -%ifarch ppc64le -%define asmarch powerpc -%define hdrarch powerpc -%define make_target vmlinux -%define kernel_image vmlinux -%define kernel_image_elf 1 -%define use_vdso 0 -%define all_arch_configs kernel-%{version}-ppc64le*.config -%endif - -%ifarch s390x -%define asmarch s390 -%define hdrarch s390 -%define all_arch_configs kernel-%{version}-s390x.config -%define kernel_image arch/s390/boot/bzImage -%define vmlinux_decompressor arch/s390/boot/compressed/vmlinux -%endif - -%ifarch %{arm} -%define all_arch_configs kernel-%{version}-arm*.config -%define skip_nonpae_vdso 1 -%define asmarch arm -%define hdrarch arm -%define make_target bzImage -%define kernel_image arch/arm/boot/zImage -# http://lists.infradead.org/pipermail/linux-arm-kernel/2012-March/091404.html -%define kernel_mflags KALLSYMS_EXTRA_PASS=1 -# we only build headers/perf/tools on the base arm arches -# just like we used to only build them on i386 for x86 -%ifnarch armv7hl -%define with_headers 0 -%define with_cross_headers 0 -%endif -# These currently don't compile on armv7 -%define with_selftests 0 -%endif - -%ifarch aarch64 -%define all_arch_configs kernel-%{version}-aarch64*.config -%define asmarch arm64 -%define hdrarch arm64 -%define make_target Image.gz -%define kernel_image arch/arm64/boot/Image.gz -%endif - -# Should make listnewconfig fail if there's config options -# printed out? -%if %{nopatches} -%define with_configchecks 0 -%endif - -# To temporarily exclude an architecture from being built, add it to -# %%nobuildarches. Do _NOT_ use the ExclusiveArch: line, because if we -# don't build kernel-headers then the new build system will no longer let -# us use the previous build of that package -- it'll just be completely AWOL. -# Which is a BadThing(tm). - -# We only build kernel-headers on the following... -%if 0%{?fedora} -%define nobuildarches i386 -%else -%define nobuildarches i386 i686 %{arm} -%endif - -%ifarch %nobuildarches -# disable BuildKernel commands -%define with_up 0 -%define with_debug 0 -%define with_pae 0 -%define with_zfcpdump 0 - -%define with_debuginfo 0 -%define with_perf 0 -%define with_tools 0 -%define with_bpftool 0 -%define with_selftests 0 -%define _enable_debug_packages 0 -%endif - -# Architectures we build tools/cpupower on -%if 0%{?fedora} -%define cpupowerarchs %{ix86} x86_64 ppc64le %{arm} aarch64 -%else -%define cpupowerarchs i686 x86_64 ppc64le aarch64 -%endif - -%if 0%{?use_vdso} - -%if 0%{?skip_nonpae_vdso} -%define _use_vdso 0 -%else -%define _use_vdso 1 -%endif - -%else -%define _use_vdso 0 -%endif - -# If build of debug packages is disabled, we need to know if we want to create -# meta debug packages or not, after we define with_debug for all specific cases -# above. So this must be at the end here, after all cases of with_debug or not. -%define with_debug_meta 0 -%if !%{debugbuildsenabled} -%if %{with_debug} -%define with_debug_meta 1 -%endif -%define with_debug 0 -%endif - - -# -# Packages that need to be installed before the kernel is, because the %%post -# scripts use them. -# -%define kernel_prereq coreutils, systemd >= 203-2, /usr/bin/kernel-install -%define initrd_prereq dracut >= 027 - - -Name: kernel -License: GPLv2 and Redistributable, no modification permitted -URL: https://www.kernel.org/ -Version: %{specversion} -Release: %{pkg_release} -# DO NOT CHANGE THE 'ExclusiveArch' LINE TO TEMPORARILY EXCLUDE AN ARCHITECTURE BUILD. -# SET %%nobuildarches (ABOVE) INSTEAD -%if 0%{?fedora} -ExclusiveArch: noarch x86_64 s390x %{arm} aarch64 ppc64le -%else -ExclusiveArch: noarch i386 i686 x86_64 s390x %{arm} aarch64 ppc64le -%endif -ExclusiveOS: Linux -%ifnarch %{nobuildarches} -Requires: kernel-core-uname-r = %{KVERREL} -Requires: kernel-modules-uname-r = %{KVERREL} -%endif - - -# -# List the packages used during the kernel build -# -BuildRequires: kmod, patch, bash, coreutils, tar, git-core, which -BuildRequires: bzip2, xz, findutils, gzip, m4, perl-interpreter, perl-Carp, perl-devel, perl-generators, make, diffutils, gawk -BuildRequires: gcc, binutils, redhat-rpm-config, hmaccalc, bison, flex, gcc-c++ -BuildRequires: net-tools, hostname, bc, elfutils-devel -BuildRequires: dwarves -BuildRequires: python3-devel -BuildRequires: gcc-plugin-devel -# glibc-static is required for a consistent build environment (specifically -# CONFIG_CC_CAN_LINK_STATIC=y). -BuildRequires: glibc-static -%ifnarch %{nobuildarches} noarch -BuildRequires: bpftool -%endif -%if %{with_headers} -BuildRequires: rsync -%endif -%if %{with_doc} -BuildRequires: xmlto, asciidoc, python3-sphinx, python3-sphinx_rtd_theme -%endif -%if %{with_sparse} -BuildRequires: sparse -%endif -%if %{with_perf} -BuildRequires: zlib-devel binutils-devel newt-devel perl(ExtUtils::Embed) bison flex xz-devel -BuildRequires: audit-libs-devel -BuildRequires: java-devel -BuildRequires: libbpf-devel -BuildRequires: libbabeltrace-devel -BuildRequires: libtraceevent-devel -%ifnarch %{arm} s390x -BuildRequires: numactl-devel -%endif -%ifarch aarch64 -BuildRequires: opencsd-devel >= 1.0.0 -%endif -%endif -%if %{with_tools} -BuildRequires: gettext ncurses-devel -BuildRequires: libcap-devel libcap-ng-devel -%ifnarch s390x -BuildRequires: pciutils-devel -%endif -%ifarch i686 x86_64 -BuildRequires: libnl3-devel -%endif -%endif -%if %{with_tools} || %{signmodules} || %{signkernel} -BuildRequires: openssl-devel -%endif -%if %{with_bpftool} -BuildRequires: python3-docutils -BuildRequires: zlib-devel binutils-devel -%endif -%if %{with_selftests} -BuildRequires: clang llvm -%ifnarch %{arm} -BuildRequires: numactl-devel -%endif -BuildRequires: libcap-devel libcap-ng-devel rsync libmnl-devel -%endif -BuildConflicts: rhbuildsys(DiskFree) < 500Mb -%if %{with_debuginfo} -BuildRequires: rpm-build, elfutils -BuildConflicts: rpm < 4.13.0.1-19 -BuildConflicts: dwarves < 1.13 -# Most of these should be enabled after more investigation -%undefine _include_minidebuginfo -%undefine _find_debuginfo_dwz_opts -%undefine _unique_build_ids -%undefine _unique_debug_names -%undefine _unique_debug_srcs -%undefine _debugsource_packages -%undefine _debuginfo_subpackages -%global _find_debuginfo_opts -r -%global _missing_build_ids_terminate_build 1 -%global _no_recompute_build_ids 1 -%endif -%if %{with_kabidwchk} || %{with_kabidw_base} -BuildRequires: kabi-dw -%endif - -%if %{signkernel}%{signmodules} -BuildRequires: openssl -%if %{signkernel} -# ELN uses Fedora signing process, so exclude -%if 0%{?rhel}%{?centos} && !0%{?eln} -BuildRequires: system-sb-certs -%endif -%ifarch x86_64 aarch64 -BuildRequires: nss-tools -BuildRequires: pesign >= 0.10-4 -%endif -%endif -%endif - -%if %{with_cross} -BuildRequires: binutils-%{_build_arch}-linux-gnu, gcc-%{_build_arch}-linux-gnu -%define cross_opts CROSS_COMPILE=%{_build_arch}-linux-gnu- -%define __strip %{_build_arch}-linux-gnu-strip -%endif - -# These below are required to build man pages -%if %{with_perf} -BuildRequires: xmlto -%endif -%if %{with_perf} || %{with_tools} -BuildRequires: asciidoc -%endif - -%if %{with toolchain_clang} -BuildRequires: clang -%endif - -%if %{with clang_lto} -BuildRequires: llvm -BuildRequires: lld -%endif - -# Because this is the kernel, it's hard to get a single upstream URL -# to represent the base without needing to do a bunch of patching. This -# tarball is generated from a src-git tree. If you want to see the -# exact git commit you can run -# -# xzcat -qq ${TARBALL} | git get-tar-commit-id -Source0: linux-%{tarfile_release}.tar.xz - -Source1: Makefile.rhelver - - -# Name of the packaged file containing signing key -%ifarch ppc64le -%define signing_key_filename kernel-signing-ppc.cer -%endif -%ifarch s390x -%define signing_key_filename kernel-signing-s390.cer -%endif - -%if %{?released_kernel} - -Source10: redhatsecurebootca5.cer -Source11: redhatsecurebootca1.cer -Source12: redhatsecureboot501.cer -Source13: redhatsecureboot301.cer -Source14: secureboot_s390.cer -Source15: secureboot_ppc.cer - -%define secureboot_ca_1 %{SOURCE10} -%define secureboot_ca_0 %{SOURCE11} -%ifarch x86_64 aarch64 -%define secureboot_key_1 %{SOURCE12} -%define pesign_name_1 redhatsecureboot501 -%define secureboot_key_0 %{SOURCE13} -%define pesign_name_0 redhatsecureboot301 -%endif -%ifarch s390x -%define secureboot_key_0 %{SOURCE14} -%define pesign_name_0 redhatsecureboot302 -%endif -%ifarch ppc64le -%define secureboot_key_0 %{SOURCE15} -%define pesign_name_0 redhatsecureboot303 -%endif - -# released_kernel -%else - -Source10: redhatsecurebootca4.cer -Source11: redhatsecurebootca2.cer -Source12: redhatsecureboot401.cer -Source13: redhatsecureboot003.cer - -%define secureboot_ca_1 %{SOURCE10} -%define secureboot_ca_0 %{SOURCE11} -%define secureboot_key_1 %{SOURCE12} -%define pesign_name_1 redhatsecureboot401 -%define secureboot_key_0 %{SOURCE13} -%define pesign_name_0 redhatsecureboot003 - -# released_kernel -%endif - -Source20: mod-denylist.sh -Source21: mod-sign.sh -Source22: parallel_xz.sh - -%define modsign_cmd %{SOURCE21} - -%if 0%{?include_rhel} -Source23: x509.genkey.rhel - -Source24: kernel-aarch64-rhel.config -Source25: kernel-aarch64-debug-rhel.config -Source26: mod-extra.list.rhel - -Source27: kernel-ppc64le-rhel.config -Source28: kernel-ppc64le-debug-rhel.config -Source29: kernel-s390x-rhel.config -Source30: kernel-s390x-debug-rhel.config -Source31: kernel-s390x-zfcpdump-rhel.config -Source32: kernel-x86_64-rhel.config -Source33: kernel-x86_64-debug-rhel.config - -Source34: filter-x86_64.sh.rhel -Source35: filter-armv7hl.sh.rhel -Source37: filter-aarch64.sh.rhel -Source38: filter-ppc64le.sh.rhel -Source39: filter-s390x.sh.rhel -Source40: filter-modules.sh.rhel - -Source41: x509.genkey.centos -%endif - -%if 0%{?include_fedora} -Source50: x509.genkey.fedora -Source51: mod-extra.list.fedora - -Source52: kernel-aarch64-fedora.config -Source53: kernel-aarch64-debug-fedora.config -Source54: kernel-armv7hl-fedora.config -Source55: kernel-armv7hl-debug-fedora.config -Source56: kernel-armv7hl-lpae-fedora.config -Source57: kernel-armv7hl-lpae-debug-fedora.config -Source60: kernel-ppc64le-fedora.config -Source61: kernel-ppc64le-debug-fedora.config -Source62: kernel-s390x-fedora.config -Source63: kernel-s390x-debug-fedora.config -Source64: kernel-x86_64-fedora.config -Source65: kernel-x86_64-debug-fedora.config - -Source67: filter-x86_64.sh.fedora -Source68: filter-armv7hl.sh.fedora -Source70: filter-aarch64.sh.fedora -Source71: filter-ppc64le.sh.fedora -Source72: filter-s390x.sh.fedora -Source73: filter-modules.sh.fedora -%endif - -Source75: partial-kgcov-snip.config -Source80: generate_all_configs.sh -Source81: process_configs.sh - -Source82: update_scripts.sh - -Source84: mod-internal.list - -Source100: rheldup3.x509 -Source101: rhelkpatch1.x509 - -Source200: check-kabi - -Source201: Module.kabi_aarch64 -Source202: Module.kabi_ppc64le -Source203: Module.kabi_s390x -Source204: Module.kabi_x86_64 - -Source210: Module.kabi_dup_aarch64 -Source211: Module.kabi_dup_ppc64le -Source212: Module.kabi_dup_s390x -Source213: Module.kabi_dup_x86_64 - -Source300: kernel-abi-stablelists-%{specversion}-%{pkgrelease}.tar.bz2 -Source301: kernel-kabi-dw-%{specversion}-%{pkgrelease}.tar.bz2 - -# Sources for kernel-tools -Source2000: cpupower.service -Source2001: cpupower.config -Source2002: kvm_stat.logrotate - -# Some people enjoy building customized kernels from the dist-git in Fedora and -# use this to override configuration options. One day they may all use the -# source tree, but in the mean time we carry this to support the legacy workflow -Source3000: merge.pl -Source3001: kernel-local -%if %{patchlist_changelog} -Source3002: Patchlist.changelog -%endif - -Source4000: README.rst -Source4001: rpminspect.yaml -Source4002: gating.yaml - -## Patches needed for building this package - -%if !%{nopatches} - -Patch1: patch-%{patchversion}-redhat.patch -%endif - -# empty final patch to facilitate testing of kernel patches -Patch999999: linux-kernel-test.patch - -# END OF PATCH DEFINITIONS - -%description -The kernel meta package - -# -# This macro does requires, provides, conflicts, obsoletes for a kernel package. -# %%kernel_reqprovconf <subpackage> -# It uses any kernel_<subpackage>_conflicts and kernel_<subpackage>_obsoletes -# macros defined above. -# -%define kernel_reqprovconf \ -Provides: kernel = %{specversion}-%{pkg_release}\ -Provides: kernel-%{_target_cpu} = %{specversion}-%{pkg_release}%{?1:+%{1}}\ -Provides: kernel-drm-nouveau = 16\ -Provides: kernel-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires(pre): %{kernel_prereq}\ -Requires(pre): %{initrd_prereq}\ -Requires(pre): ((linux-firmware >= 20150904-56.git6ebf5d57) if linux-firmware)\ -Recommends: linux-firmware\ -Requires(preun): systemd >= 200\ -Conflicts: xfsprogs < 4.3.0-1\ -Conflicts: xorg-x11-drv-vmmouse < 13.0.99\ -%{expand:%%{?kernel%{?1:_%{1}}_conflicts:Conflicts: %%{kernel%{?1:_%{1}}_conflicts}}}\ -%{expand:%%{?kernel%{?1:_%{1}}_obsoletes:Obsoletes: %%{kernel%{?1:_%{1}}_obsoletes}}}\ -%{expand:%%{?kernel%{?1:_%{1}}_provides:Provides: %%{kernel%{?1:_%{1}}_provides}}}\ -# We can't let RPM do the dependencies automatic because it'll then pick up\ -# a correct but undesirable perl dependency from the module headers which\ -# isn't required for the kernel proper to function\ -AutoReq: no\ -AutoProv: yes\ -%{nil} - - -%package doc -Summary: Various documentation bits found in the kernel source -Group: Documentation -%description doc -This package contains documentation files from the kernel -source. Various bits of information about the Linux kernel and the -device drivers shipped with it are documented in these files. - -You'll want to install this package if you need a reference to the -options that can be passed to Linux kernel modules at load time. - - -%package headers -Summary: Header files for the Linux kernel for use by glibc -Obsoletes: glibc-kernheaders < 3.0-46 -Provides: glibc-kernheaders = 3.0-46 -%description headers -Kernel-headers includes the C header files that specify the interface -between the Linux kernel and userspace libraries and programs. The -header files define structures and constants that are needed for -building most standard programs and are also needed for rebuilding the -glibc package. - -%package cross-headers -Summary: Header files for the Linux kernel for use by cross-glibc -%description cross-headers -Kernel-cross-headers includes the C header files that specify the interface -between the Linux kernel and userspace libraries and programs. The -header files define structures and constants that are needed for -building most standard programs and are also needed for rebuilding the -cross-glibc package. - - -%package debuginfo-common-%{_target_cpu} -Summary: Kernel source files used by %{name}-debuginfo packages -Provides: installonlypkg(kernel) -%description debuginfo-common-%{_target_cpu} -This package is required by %{name}-debuginfo subpackages. -It provides the kernel source files common to all builds. - -%if %{with_perf} -%package -n perf -Summary: Performance monitoring for the Linux kernel -Requires: bzip2 -License: GPLv2 -%description -n perf -This package contains the perf tool, which enables performance monitoring -of the Linux kernel. - -%package -n perf-debuginfo -Summary: Debug information for package perf -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release} -AutoReqProv: no -%description -n perf-debuginfo -This package provides debug information for the perf package. - -# Note that this pattern only works right to match the .build-id -# symlinks because of the trailing nonmatching alternation and -# the leading .*, because of find-debuginfo.sh's buggy handling -# of matching the pattern against the symlinks file. -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{_bindir}/perf(\.debug)?|.*%%{_libexecdir}/perf-core/.*|.*%%{_libdir}/libperf-jvmti.so(\.debug)?|XXX' -o perf-debuginfo.list} - -%package -n python3-perf -Summary: Python bindings for apps which will manipulate perf events -%description -n python3-perf -The python3-perf package contains a module that permits applications -written in the Python programming language to use the interface -to manipulate perf events. - -%package -n python3-perf-debuginfo -Summary: Debug information for package perf python bindings -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release} -AutoReqProv: no -%description -n python3-perf-debuginfo -This package provides debug information for the perf python bindings. - -# the python_sitearch macro should already be defined from above -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{python3_sitearch}/perf.*so(\.debug)?|XXX' -o python3-perf-debuginfo.list} - -# with_perf -%endif - -%if %{with_tools} -%package -n kernel-tools -Summary: Assortment of tools for the Linux kernel -License: GPLv2 -%ifarch %{cpupowerarchs} -Provides: cpupowerutils = 1:009-0.6.p1 -Obsoletes: cpupowerutils < 1:009-0.6.p1 -Provides: cpufreq-utils = 1:009-0.6.p1 -Provides: cpufrequtils = 1:009-0.6.p1 -Obsoletes: cpufreq-utils < 1:009-0.6.p1 -Obsoletes: cpufrequtils < 1:009-0.6.p1 -Obsoletes: cpuspeed < 1:1.5-16 -Requires: kernel-tools-libs = %{version}-%{release} -%endif -%define __requires_exclude ^%{_bindir}/python -%description -n kernel-tools -This package contains the tools/ directory from the kernel source -and the supporting documentation. - -%package -n kernel-tools-libs -Summary: Libraries for the kernels-tools -License: GPLv2 -%description -n kernel-tools-libs -This package contains the libraries built from the tools/ directory -from the kernel source. - -%package -n kernel-tools-libs-devel -Summary: Assortment of tools for the Linux kernel -License: GPLv2 -Requires: kernel-tools = %{version}-%{release} -%ifarch %{cpupowerarchs} -Provides: cpupowerutils-devel = 1:009-0.6.p1 -Obsoletes: cpupowerutils-devel < 1:009-0.6.p1 -%endif -Requires: kernel-tools-libs = %{version}-%{release} -Provides: kernel-tools-devel -%description -n kernel-tools-libs-devel -This package contains the development files for the tools/ directory from -the kernel source. - -%package -n kernel-tools-debuginfo -Summary: Debug information for package kernel-tools -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release} -AutoReqProv: no -%description -n kernel-tools-debuginfo -This package provides debug information for package kernel-tools. - -# Note that this pattern only works right to match the .build-id -# symlinks because of the trailing nonmatching alternation and -# the leading .*, because of find-debuginfo.sh's buggy handling -# of matching the pattern against the symlinks file. -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{_bindir}/centrino-decode(\.debug)?|.*%%{_bindir}/powernow-k8-decode(\.debug)?|.*%%{_bindir}/cpupower(\.debug)?|.*%%{_libdir}/libcpupower.*|.*%%{_bindir}/turbostat(\.debug)?|.*%%{_bindir}/x86_energy_perf_policy(\.debug)?|.*%%{_bindir}/tmon(\.debug)?|.*%%{_bindir}/lsgpio(\.debug)?|.*%%{_bindir}/gpio-hammer(\.debug)?|.*%%{_bindir}/gpio-event-mon(\.debug)?|.*%%{_bindir}/gpio-watch(\.debug)?|.*%%{_bindir}/iio_event_monitor(\.debug)?|.*%%{_bindir}/iio_generic_buffer(\.debug)?|.*%%{_bindir}/lsiio(\.debug)?|.*%%{_bindir}/intel-speed-select(\.debug)?|.*%%{_bindir}/page_owner_sort(\.debug)?|.*%%{_bindir}/slabinfo(\.debug)?|.*%%{_sbindir}/intel_sdsi(\.debug)?|XXX' -o kernel-tools-debuginfo.list} - -# with_tools -%endif - -%if %{with_bpftool} - -%package -n bpftool -Summary: Inspection and simple manipulation of eBPF programs and maps -License: GPLv2 -%description -n bpftool -This package contains the bpftool, which allows inspection and simple -manipulation of eBPF programs and maps. - -%package -n bpftool-debuginfo -Summary: Debug information for package bpftool -Group: Development/Debug -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release} -AutoReqProv: no -%description -n bpftool-debuginfo -This package provides debug information for the bpftool package. - -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{_sbindir}/bpftool(\.debug)?|XXX' -o bpftool-debuginfo.list} - -# with_bpftool -%endif - -%if %{with_selftests} - -%package selftests-internal -Summary: Kernel samples and selftests -License: GPLv2 -Requires: binutils, bpftool, iproute-tc, nmap-ncat, python3 -%description selftests-internal -Kernel sample programs and selftests. - -# Note that this pattern only works right to match the .build-id -# symlinks because of the trailing nonmatching alternation and -# the leading .*, because of find-debuginfo.sh's buggy handling -# of matching the pattern against the symlinks file. -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{_libexecdir}/(ksamples|kselftests)/.*|XXX' -o selftests-debuginfo.list} - -# with_selftests -%endif - -%if %{with_gcov} -%package gcov -Summary: gcov graph and source files for coverage data collection. -%description gcov -kernel-gcov includes the gcov graph and source files for gcov coverage collection. -%endif - -%package -n kernel-abi-stablelists -Summary: The Red Hat Enterprise Linux kernel ABI symbol stablelists -AutoReqProv: no -%description -n kernel-abi-stablelists -The kABI package contains information pertaining to the Red Hat Enterprise -Linux kernel ABI, including lists of kernel symbols that are needed by -external Linux kernel modules, and a yum plugin to aid enforcement. - -%if %{with_kabidw_base} -%package kernel-kabidw-base-internal -Summary: The baseline dataset for kABI verification using DWARF data -Group: System Environment/Kernel -AutoReqProv: no -%description kernel-kabidw-base-internal -The package contains data describing the current ABI of the Red Hat Enterprise -Linux kernel, suitable for the kabi-dw tool. -%endif - -# -# This macro creates a kernel-<subpackage>-debuginfo package. -# %%kernel_debuginfo_package <subpackage> -# -# Explanation of the find_debuginfo_opts: We build multiple kernels (debug -# pae etc.) so the regex filters those kernels appropriately. We also -# have to package several binaries as part of kernel-devel but getting -# unique build-ids is tricky for these userspace binaries. We don't really -# care about debugging those so we just filter those out and remove it. -%define kernel_debuginfo_package() \ -%package %{?1:%{1}-}debuginfo\ -Summary: Debug information for package %{name}%{?1:-%{1}}\ -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release}\ -Provides: %{name}%{?1:-%{1}}-debuginfo-%{_target_cpu} = %{version}-%{release}\ -Provides: installonlypkg(kernel)\ -AutoReqProv: no\ -%description %{?1:%{1}-}debuginfo\ -This package provides debug information for package %{name}%{?1:-%{1}}.\ -This is required to use SystemTap with %{name}%{?1:-%{1}}-%{KVERREL}.\ -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} --keep-section '.BTF' -p '.*\/usr\/src\/kernels/.*|XXX' -o ignored-debuginfo.list -p '/.*/%%{KVERREL_RE}%{?1:[+]%{1}}/.*|/.*%%{KVERREL_RE}%{?1:\+%{1}}(\.debug)?' -o debuginfo%{?1}.list}\ -%{nil} - -# -# This macro creates a kernel-<subpackage>-devel package. -# %%kernel_devel_package [-m] <subpackage> <pretty-name> -# -%define kernel_devel_package(m) \ -%package %{?1:%{1}-}devel\ -Summary: Development package for building kernel modules to match the %{?2:%{2} }kernel\ -Provides: kernel%{?1:-%{1}}-devel-%{_target_cpu} = %{version}-%{release}\ -Provides: kernel-devel-%{_target_cpu} = %{version}-%{release}%{?1:+%{1}}\ -Provides: kernel-devel-uname-r = %{KVERREL}%{?1:+%{1}}\ -Provides: installonlypkg(kernel)\ -AutoReqProv: no\ -Requires(pre): findutils\ -Requires: findutils\ -Requires: perl-interpreter\ -Requires: openssl-devel\ -Requires: elfutils-libelf-devel\ -Requires: bison\ -Requires: flex\ -Requires: make\ -Requires: gcc\ -%if %{-m:1}%{!-m:0}\ -Requires: kernel-devel-uname-r = %{KVERREL}\ -%endif\ -%description %{?1:%{1}-}devel\ -This package provides kernel headers and makefiles sufficient to build modules\ -against the %{?2:%{2} }kernel package.\ -%{nil} - -# -# This macro creates an empty kernel-<subpackage>-devel-matched package that -# requires both the core and devel packages locked on the same version. -# %%kernel_devel_matched_package [-m] <subpackage> <pretty-name> -# -%define kernel_devel_matched_package(m) \ -%package %{?1:%{1}-}devel-matched\ -Summary: Meta package to install matching core and devel packages for a given %{?2:%{2} }kernel\ -Requires: kernel%{?1:-%{1}}-devel = %{version}-%{release}\ -Requires: kernel%{?1:-%{1}}-core = %{version}-%{release}\ -%description %{?1:%{1}-}devel-matched\ -This meta package is used to install matching core and devel packages for a given %{?2:%{2} }kernel.\ -%{nil} - -# -# kernel-<variant>-ipaclones-internal package -# -%define kernel_ipaclones_package() \ -%package %{?1:%{1}-}ipaclones-internal\ -Summary: *.ipa-clones files generated by -fdump-ipa-clones for kernel%{?1:-%{1}}\ -Group: System Environment/Kernel\ -AutoReqProv: no\ -%description %{?1:%{1}-}ipaclones-internal\ -This package provides *.ipa-clones files.\ -%{nil} - -# -# This macro creates a kernel-<subpackage>-modules-internal package. -# %%kernel_modules_internal_package <subpackage> <pretty-name> -# -%define kernel_modules_internal_package() \ -%package %{?1:%{1}-}modules-internal\ -Summary: Extra kernel modules to match the %{?2:%{2} }kernel\ -Group: System Environment/Kernel\ -Provides: kernel%{?1:-%{1}}-modules-internal-%{_target_cpu} = %{version}-%{release}\ -Provides: kernel%{?1:-%{1}}-modules-internal-%{_target_cpu} = %{version}-%{release}%{?1:+%{1}}\ -Provides: kernel%{?1:-%{1}}-modules-internal = %{version}-%{release}%{?1:+%{1}}\ -Provides: installonlypkg(kernel-module)\ -Provides: kernel%{?1:-%{1}}-modules-internal-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel%{?1:-%{1}}-modules-uname-r = %{KVERREL}%{?1:+%{1}}\ -AutoReq: no\ -AutoProv: yes\ -%description %{?1:%{1}-}modules-internal\ -This package provides kernel modules for the %{?2:%{2} }kernel package for Red Hat internal usage.\ -%{nil} - -# -# This macro creates a kernel-<subpackage>-modules-extra package. -# %%kernel_modules_extra_package [-m] <subpackage> <pretty-name> -# -%define kernel_modules_extra_package(m) \ -%package %{?1:%{1}-}modules-extra\ -Summary: Extra kernel modules to match the %{?2:%{2} }kernel\ -Provides: kernel%{?1:-%{1}}-modules-extra-%{_target_cpu} = %{version}-%{release}\ -Provides: kernel%{?1:-%{1}}-modules-extra-%{_target_cpu} = %{version}-%{release}%{?1:+%{1}}\ -Provides: kernel%{?1:-%{1}}-modules-extra = %{version}-%{release}%{?1:+%{1}}\ -Provides: installonlypkg(kernel-module)\ -Provides: kernel%{?1:-%{1}}-modules-extra-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel%{?1:-%{1}}-modules-uname-r = %{KVERREL}%{?1:+%{1}}\ -%if %{-m:1}%{!-m:0}\ -Requires: kernel-modules-extra-uname-r = %{KVERREL}\ -%endif\ -AutoReq: no\ -AutoProv: yes\ -%description %{?1:%{1}-}modules-extra\ -This package provides less commonly used kernel modules for the %{?2:%{2} }kernel package.\ -%{nil} - -# -# This macro creates a kernel-<subpackage>-modules package. -# %%kernel_modules_package [-m] <subpackage> <pretty-name> -# -%define kernel_modules_package(m) \ -%package %{?1:%{1}-}modules\ -Summary: kernel modules to match the %{?2:%{2}-}core kernel\ -Provides: kernel%{?1:-%{1}}-modules-%{_target_cpu} = %{version}-%{release}\ -Provides: kernel-modules-%{_target_cpu} = %{version}-%{release}%{?1:+%{1}}\ -Provides: kernel-modules = %{version}-%{release}%{?1:+%{1}}\ -Provides: installonlypkg(kernel-module)\ -Provides: kernel%{?1:-%{1}}-modules-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel-uname-r = %{KVERREL}%{?1:+%{1}}\ -%if %{-m:1}%{!-m:0}\ -Requires: kernel-modules-uname-r = %{KVERREL}\ -%endif\ -AutoReq: no\ -AutoProv: yes\ -%description %{?1:%{1}-}modules\ -This package provides commonly used kernel modules for the %{?2:%{2}-}core kernel package.\ -%{nil} - -# -# this macro creates a kernel-<subpackage> meta package. -# %%kernel_meta_package <subpackage> -# -%define kernel_meta_package() \ -%package %{1}\ -summary: kernel meta-package for the %{1} kernel\ -Requires: kernel-%{1}-core-uname-r = %{KVERREL}+%{1}\ -Requires: kernel-%{1}-modules-uname-r = %{KVERREL}+%{1}\ -Provides: installonlypkg(kernel)\ -%description %{1}\ -The meta-package for the %{1} kernel\ -%{nil} - -# -# This macro creates a kernel-<subpackage> and its -devel and -debuginfo too. -# %%define variant_summary The Linux kernel compiled for <configuration> -# %%kernel_variant_package [-n <pretty-name>] [-m] <subpackage> -# -%define kernel_variant_package(n:m) \ -%package %{?1:%{1}-}core\ -Summary: %{variant_summary}\ -Provides: kernel-%{?1:%{1}-}core-uname-r = %{KVERREL}%{?1:+%{1}}\ -Provides: installonlypkg(kernel)\ -%if %{-m:1}%{!-m:0}\ -Requires: kernel-core-uname-r = %{KVERREL}\ -%endif\ -%{expand:%%kernel_reqprovconf}\ -%if %{?1:1} %{!?1:0} \ -%{expand:%%kernel_meta_package %{?1:%{1}}}\ -%endif\ -%{expand:%%kernel_devel_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}} %{-m:%{-m}}}\ -%{expand:%%kernel_devel_matched_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}} %{-m:%{-m}}}\ -%{expand:%%kernel_modules_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}} %{-m:%{-m}}}\ -%{expand:%%kernel_modules_extra_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}} %{-m:%{-m}}}\ -%if %{-m:0}%{!-m:1}\ -%{expand:%%kernel_modules_internal_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}}}\ -%{expand:%%kernel_debuginfo_package %{?1:%{1}}}\ -%endif\ -%{nil} - -# Now, each variant package. - -%if %{with_pae} -%define variant_summary The Linux kernel compiled for Cortex-A15 -%kernel_variant_package lpae -%description lpae-core -This package includes a version of the Linux kernel with support for -Cortex-A15 devices with LPAE and HW virtualisation support -%endif - -%if %{with_zfcpdump} -%define variant_summary The Linux kernel compiled for zfcpdump usage -%kernel_variant_package zfcpdump -%description zfcpdump-core -The kernel package contains the Linux kernel (vmlinuz) for use by the -zfcpdump infrastructure. -# with_zfcpdump -%endif - -%define variant_summary The Linux kernel compiled with extra debugging enabled -%if !%{debugbuildsenabled} -%kernel_variant_package -m debug -%else -%kernel_variant_package debug -%endif -%description debug-core -The kernel package contains the Linux kernel (vmlinuz), the core of any -Linux operating system. The kernel handles the basic functions -of the operating system: memory allocation, process allocation, device -input and output, etc. - -This variant of the kernel has numerous debugging options enabled. -It should only be installed when trying to gather additional information -on kernel bugs, as some of these options impact performance noticably. - -# And finally the main -core package - -%define variant_summary The Linux kernel -%kernel_variant_package -%description core -The kernel package contains the Linux kernel (vmlinuz), the core of any -Linux operating system. The kernel handles the basic functions -of the operating system: memory allocation, process allocation, device -input and output, etc. - -%if %{with_ipaclones} -%kernel_ipaclones_package -%endif - -%prep -# do a few sanity-checks for --with *only builds -%if %{with_baseonly} -%if !%{with_up} -echo "Cannot build --with baseonly, up build is disabled" -exit 1 -%endif -%endif - -# more sanity checking; do it quietly -if [ "%{patches}" != "%%{patches}" ] ; then - for patch in %{patches} ; do - if [ ! -f $patch ] ; then - echo "ERROR: Patch ${patch##/*/} listed in specfile but is missing" - exit 1 - fi - done -fi 2>/dev/null - -patch_command='patch -p1 -F1 -s' -ApplyPatch() -{ - local patch=$1 - shift - if [ ! -f $RPM_SOURCE_DIR/$patch ]; then - exit 1 - fi - if ! grep -E "^Patch[0-9]+: $patch\$" %{_specdir}/${RPM_PACKAGE_NAME}.spec ; then - if [ "${patch:0:8}" != "patch-%{kversion}." ] ; then - echo "ERROR: Patch $patch not listed as a source patch in specfile" - exit 1 - fi - fi 2>/dev/null - case "$patch" in - *.bz2) bunzip2 < "$RPM_SOURCE_DIR/$patch" | $patch_command ${1+"$@"} ;; - *.gz) gunzip < "$RPM_SOURCE_DIR/$patch" | $patch_command ${1+"$@"} ;; - *.xz) unxz < "$RPM_SOURCE_DIR/$patch" | $patch_command ${1+"$@"} ;; - *) $patch_command ${1+"$@"} < "$RPM_SOURCE_DIR/$patch" ;; - esac -} - -# don't apply patch if it's empty -ApplyOptionalPatch() -{ - local patch=$1 - shift - if [ ! -f $RPM_SOURCE_DIR/$patch ]; then - exit 1 - fi - local C=$(wc -l $RPM_SOURCE_DIR/$patch | awk '{print $1}') - if [ "$C" -gt 9 ]; then - ApplyPatch $patch ${1+"$@"} - fi -} - -%setup -q -n kernel-%{tarfile_release} -c -mv linux-%{tarfile_release} linux-%{KVERREL} - -cd linux-%{KVERREL} -cp -a %{SOURCE1} . - -%if !%{nopatches} - -ApplyOptionalPatch patch-%{patchversion}-redhat.patch -%endif - -ApplyOptionalPatch linux-kernel-test.patch - -# END OF PATCH APPLICATIONS - -# Any further pre-build tree manipulations happen here. - -chmod +x scripts/checkpatch.pl -mv COPYING COPYING-%{version}-%{release} - -# This Prevents scripts/setlocalversion from mucking with our version numbers. -touch .scmversion - -# Mangle /usr/bin/python shebangs to /usr/bin/python3 -# Mangle all Python shebangs to be Python 3 explicitly -# -p preserves timestamps -# -n prevents creating ~backup files -# -i specifies the interpreter for the shebang -# This fixes errors such as -# *** ERROR: ambiguous python shebang in /usr/bin/kvm_stat: #!/usr/bin/python. Change it to python3 (or python2) explicitly. -# We patch all sources below for which we got a report/error. -pathfix.py -i "%{__python3} %{py3_shbang_opts}" -p -n \ - tools/kvm/kvm_stat/kvm_stat \ - scripts/show_delta \ - scripts/diffconfig \ - scripts/bloat-o-meter \ - scripts/jobserver-exec \ - tools \ - Documentation \ - scripts/clang-tools - -# only deal with configs if we are going to build for the arch -%ifnarch %nobuildarches - -if [ -L configs ]; then - rm -f configs -fi -mkdir configs -cd configs - -# Drop some necessary files from the source dir into the buildroot -cp $RPM_SOURCE_DIR/kernel-*.config . -cp %{SOURCE80} . -# merge.pl -cp %{SOURCE3000} . -# kernel-local -cp %{SOURCE3001} . -FLAVOR=%{primary_target} SPECVERSION=%{version} ./generate_all_configs.sh %{debugbuildsenabled} - -# Merge in any user-provided local config option changes -%ifnarch %nobuildarches -for i in %{all_arch_configs} -do - mv $i $i.tmp - ./merge.pl %{SOURCE3001} $i.tmp > $i -%if %{with_gcov} - echo "Merging with gcov options" - cat %{SOURCE75} - mv $i $i.tmp - ./merge.pl %{SOURCE75} $i.tmp > $i -%endif - rm $i.tmp -done -%endif - -%if %{with clang_lto} -for i in *aarch64*.config *x86_64*.config; do - sed -i 's/# CONFIG_LTO_CLANG_THIN is not set/CONFIG_LTO_CLANG_THIN=y/' $i - sed -i 's/CONFIG_LTO_NONE=y/# CONFIG_LTO_NONE is not set/' $i -done -%endif - -# Add DUP and kpatch certificates to system trusted keys for RHEL -%if 0%{?rhel} -%if %{signkernel}%{signmodules} -openssl x509 -inform der -in %{SOURCE100} -out rheldup3.pem -openssl x509 -inform der -in %{SOURCE101} -out rhelkpatch1.pem -cat rheldup3.pem rhelkpatch1.pem > ../certs/rhel.pem -%ifarch s390x ppc64le -openssl x509 -inform der -in %{secureboot_ca_0} -out secureboot.pem -cat secureboot.pem >> ../certs/rhel.pem -%endif -for i in *.config; do - sed -i 's@CONFIG_SYSTEM_TRUSTED_KEYS=""@CONFIG_SYSTEM_TRUSTED_KEYS="certs/rhel.pem"@' $i -done -%endif -%endif - -cp %{SOURCE81} . -OPTS="" -%if %{with_configchecks} - OPTS="$OPTS -w -n -c" -%endif -%if %{with clang_lto} -for opt in %{clang_make_opts}; do - OPTS="$OPTS -m $opt" -done -%endif -RHJOBS=$RPM_BUILD_NCPUS PACKAGE_NAME=kernel ./process_configs.sh $OPTS ${specversion} - -cp %{SOURCE82} . -RPM_SOURCE_DIR=$RPM_SOURCE_DIR ./update_scripts.sh %{primary_target} - -# We may want to override files from the primary target in case of building -# against a flavour of it (eg. centos not rhel), thus override it here if -# necessary -if [ "%{primary_target}" == "rhel" ]; then -%if 0%{?centos} - echo "Updating scripts/sources to centos version" - RPM_SOURCE_DIR=$RPM_SOURCE_DIR ./update_scripts.sh centos -%else - echo "Not updating scripts/sources to centos version" -%endif -fi - -# end of kernel config -%endif - -cd .. -# # End of Configs stuff - -# get rid of unwanted files resulting from patch fuzz -find . \( -name "*.orig" -o -name "*~" \) -delete >/dev/null - -# remove unnecessary SCM files -find . -name .gitignore -delete >/dev/null - -cd .. - -### -### build -### -%build - -%if %{with_sparse} -%define sparse_mflags C=1 -%endif - -cp_vmlinux() -{ - eu-strip --remove-comment -o "$2" "$1" -} - -# Note we need to disable these flags for cross builds because the flags -# from redhat-rpm-config assume that host == target so target arch -# flags cause issues with the host compiler. -%if !%{with_cross} -%define build_hostcflags %{?build_cflags} -%define build_hostldflags %{?build_ldflags} -%endif - -%define make %{__make} %{?cross_opts} %{?make_opts} HOSTCFLAGS="%{?build_hostcflags}" HOSTLDFLAGS="%{?build_hostldflags}" - -InitBuildVars() { - # Initialize the kernel .config file and create some variables that are - # needed for the actual build process. - - Variant=$1 - - # Pick the right kernel config file - Config=kernel-%{version}-%{_target_cpu}${Variant:+-${Variant}}.config - DevelDir=/usr/src/kernels/%{KVERREL}${Variant:++${Variant}} - - KernelVer=%{version}-%{release}.%{_target_cpu}${Variant:++${Variant}} - - # make sure EXTRAVERSION says what we want it to say - # Trim the release if this is a CI build, since KERNELVERSION is limited to 64 characters - ShortRel=$(perl -e "print \"%{release}\" =~ s/\.pr\.[0-9A-Fa-f]{32}//r") - perl -p -i -e "s/^EXTRAVERSION.*/EXTRAVERSION = -${ShortRel}.%{_target_cpu}${Variant:++${Variant}}/" Makefile - - # if pre-rc1 devel kernel, must fix up PATCHLEVEL for our versioning scheme - # if we are post rc1 this should match anyway so this won't matter - perl -p -i -e 's/^PATCHLEVEL.*/PATCHLEVEL = %{patchlevel}/' Makefile - - %{make} %{?_smp_mflags} mrproper - cp configs/$Config .config - - %if %{signkernel}%{signmodules} - cp configs/x509.genkey certs/. - %endif - - Arch=`head -1 .config | cut -b 3-` - echo USING ARCH=$Arch - - KCFLAGS="%{?kcflags}" - - # add kpatch flags for base kernel - if [ "$Variant" == "" ]; then - KCFLAGS="$KCFLAGS %{?kpatch_kcflags}" - fi -} - -BuildKernel() { - MakeTarget=$1 - KernelImage=$2 - DoVDSO=$3 - Variant=$4 - InstallName=${5:-vmlinuz} - - DoModules=1 - if [ "$Variant" = "zfcpdump" ]; then - DoModules=0 - fi - - # When the bootable image is just the ELF kernel, strip it. - # We already copy the unstripped file into the debuginfo package. - if [ "$KernelImage" = vmlinux ]; then - CopyKernel=cp_vmlinux - else - CopyKernel=cp - fi - - InitBuildVars $Variant - - echo BUILDING A KERNEL FOR ${Variant} %{_target_cpu}... - - %{make} ARCH=$Arch olddefconfig >/dev/null - - # This ensures build-ids are unique to allow parallel debuginfo - perl -p -i -e "s/^CONFIG_BUILD_SALT.*/CONFIG_BUILD_SALT=\"%{KVERREL}\"/" .config - %{make} ARCH=$Arch KCFLAGS="$KCFLAGS" WITH_GCOV="%{?with_gcov}" %{?_smp_mflags} $MakeTarget %{?sparse_mflags} %{?kernel_mflags} - if [ $DoModules -eq 1 ]; then - %{make} ARCH=$Arch KCFLAGS="$KCFLAGS" WITH_GCOV="%{?with_gcov}" %{?_smp_mflags} modules %{?sparse_mflags} || exit 1 - fi - - mkdir -p $RPM_BUILD_ROOT/%{image_install_path} - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/systemtap -%if %{with_debuginfo} - mkdir -p $RPM_BUILD_ROOT%{debuginfodir}/%{image_install_path} -%endif - -%ifarch %{arm} aarch64 - %{make} ARCH=$Arch dtbs INSTALL_DTBS_PATH=$RPM_BUILD_ROOT/%{image_install_path}/dtb-$KernelVer - %{make} ARCH=$Arch dtbs_install INSTALL_DTBS_PATH=$RPM_BUILD_ROOT/%{image_install_path}/dtb-$KernelVer - cp -r $RPM_BUILD_ROOT/%{image_install_path}/dtb-$KernelVer $RPM_BUILD_ROOT/lib/modules/$KernelVer/dtb - find arch/$Arch/boot/dts -name '*.dtb' -type f -delete -%endif - - # Start installing the results - install -m 644 .config $RPM_BUILD_ROOT/boot/config-$KernelVer - install -m 644 .config $RPM_BUILD_ROOT/lib/modules/$KernelVer/config - install -m 644 System.map $RPM_BUILD_ROOT/boot/System.map-$KernelVer - install -m 644 System.map $RPM_BUILD_ROOT/lib/modules/$KernelVer/System.map - - # We estimate the size of the initramfs because rpm needs to take this size - # into consideration when performing disk space calculations. (See bz #530778) - dd if=/dev/zero of=$RPM_BUILD_ROOT/boot/initramfs-$KernelVer.img bs=1M count=20 - - if [ -f arch/$Arch/boot/zImage.stub ]; then - cp arch/$Arch/boot/zImage.stub $RPM_BUILD_ROOT/%{image_install_path}/zImage.stub-$KernelVer || : - cp arch/$Arch/boot/zImage.stub $RPM_BUILD_ROOT/lib/modules/$KernelVer/zImage.stub-$KernelVer || : - fi - - %if %{signkernel} - if [ "$KernelImage" = vmlinux ]; then - # We can't strip and sign $KernelImage in place, because - # we need to preserve original vmlinux for debuginfo. - # Use a copy for signing. - $CopyKernel $KernelImage $KernelImage.tosign - KernelImage=$KernelImage.tosign - CopyKernel=cp - fi - - # Sign the image if we're using EFI - # aarch64 kernels are gziped EFI images - KernelExtension=${KernelImage##*.} - if [ "$KernelExtension" == "gz" ]; then - SignImage=${KernelImage%.*} - else - SignImage=$KernelImage - fi - - %ifarch x86_64 aarch64 - %pesign -s -i $SignImage -o vmlinuz.tmp -a %{secureboot_ca_0} -c %{secureboot_key_0} -n %{pesign_name_0} - %pesign -s -i vmlinuz.tmp -o vmlinuz.signed -a %{secureboot_ca_1} -c %{secureboot_key_1} -n %{pesign_name_1} - rm vmlinuz.tmp - %endif - %ifarch s390x ppc64le - if [ -x /usr/bin/rpm-sign ]; then - rpm-sign --key "%{pesign_name_0}" --lkmsign $SignImage --output vmlinuz.signed - elif [ $DoModules -eq 1 ]; then - chmod +x scripts/sign-file - ./scripts/sign-file -p sha256 certs/signing_key.pem certs/signing_key.x509 $SignImage vmlinuz.signed - else - mv $SignImage vmlinuz.signed - fi - %endif - - if [ ! -s vmlinuz.signed ]; then - echo "pesigning failed" - exit 1 - fi - mv vmlinuz.signed $SignImage - if [ "$KernelExtension" == "gz" ]; then - gzip -f9 $SignImage - fi - # signkernel - %endif - - $CopyKernel $KernelImage \ - $RPM_BUILD_ROOT/%{image_install_path}/$InstallName-$KernelVer - chmod 755 $RPM_BUILD_ROOT/%{image_install_path}/$InstallName-$KernelVer - cp $RPM_BUILD_ROOT/%{image_install_path}/$InstallName-$KernelVer $RPM_BUILD_ROOT/lib/modules/$KernelVer/$InstallName - - # hmac sign the kernel for FIPS - echo "Creating hmac file: $RPM_BUILD_ROOT/%{image_install_path}/.vmlinuz-$KernelVer.hmac" - ls -l $RPM_BUILD_ROOT/%{image_install_path}/$InstallName-$KernelVer - (cd $RPM_BUILD_ROOT/%{image_install_path} && sha512hmac $InstallName-$KernelVer) > $RPM_BUILD_ROOT/%{image_install_path}/.vmlinuz-$KernelVer.hmac; - cp $RPM_BUILD_ROOT/%{image_install_path}/.vmlinuz-$KernelVer.hmac $RPM_BUILD_ROOT/lib/modules/$KernelVer/.vmlinuz.hmac - - if [ $DoModules -eq 1 ]; then - # Override $(mod-fw) because we don't want it to install any firmware - # we'll get it from the linux-firmware package and we don't want conflicts - %{make} %{?_smp_mflags} ARCH=$Arch INSTALL_MOD_PATH=$RPM_BUILD_ROOT %{?_smp_mflags} modules_install KERNELRELEASE=$KernelVer mod-fw= - fi - -%if %{with_gcov} - # install gcov-needed files to $BUILDROOT/$BUILD/...: - # gcov_info->filename is absolute path - # gcno references to sources can use absolute paths (e.g. in out-of-tree builds) - # sysfs symlink targets (set up at compile time) use absolute paths to BUILD dir - find . \( -name '*.gcno' -o -name '*.[chS]' \) -exec install -D '{}' "$RPM_BUILD_ROOT/$(pwd)/{}" \; -%endif - - # add an a noop %%defattr statement 'cause rpm doesn't like empty file list files - echo '%%defattr(-,-,-)' > ../kernel${Variant:+-${Variant}}-ldsoconf.list - if [ $DoVDSO -ne 0 ]; then - %{make} ARCH=$Arch INSTALL_MOD_PATH=$RPM_BUILD_ROOT vdso_install KERNELRELEASE=$KernelVer - if [ -s ldconfig-kernel.conf ]; then - install -D -m 444 ldconfig-kernel.conf \ - $RPM_BUILD_ROOT/etc/ld.so.conf.d/kernel-$KernelVer.conf - echo /etc/ld.so.conf.d/kernel-$KernelVer.conf >> ../kernel${Variant:+-${Variant}}-ldsoconf.list - fi - - rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/vdso/.build-id - fi - - # And save the headers/makefiles etc for building modules against - # - # This all looks scary, but the end result is supposed to be: - # * all arch relevant include/ files - # * all Makefile/Kconfig files - # * all script/ files - - rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/source - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - (cd $RPM_BUILD_ROOT/lib/modules/$KernelVer ; ln -s build source) - # dirs for additional modules per module-init-tools, kbuild/modules.txt - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/updates - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/weak-updates - # CONFIG_KERNEL_HEADER_TEST generates some extra files in the process of - # testing so just delete - find . -name *.h.s -delete - # first copy everything - cp --parents `find -type f -name "Makefile*" -o -name "Kconfig*"` $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - if [ ! -e Module.symvers ]; then - touch Module.symvers - fi - cp Module.symvers $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp System.map $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - if [ -s Module.markers ]; then - cp Module.markers $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - fi - - # create the kABI metadata for use in packaging - # NOTENOTE: the name symvers is used by the rpm backend - # NOTENOTE: to discover and run the /usr/lib/rpm/fileattrs/kabi.attr - # NOTENOTE: script which dynamically adds exported kernel symbol - # NOTENOTE: checksums to the rpm metadata provides list. - # NOTENOTE: if you change the symvers name, update the backend too - echo "**** GENERATING kernel ABI metadata ****" - gzip -c9 < Module.symvers > $RPM_BUILD_ROOT/boot/symvers-$KernelVer.gz - cp $RPM_BUILD_ROOT/boot/symvers-$KernelVer.gz $RPM_BUILD_ROOT/lib/modules/$KernelVer/symvers.gz - -%if %{with_kabichk} - echo "**** kABI checking is enabled in kernel SPEC file. ****" - chmod 0755 $RPM_SOURCE_DIR/check-kabi - if [ -e $RPM_SOURCE_DIR/Module.kabi_%{_target_cpu}$Variant ]; then - cp $RPM_SOURCE_DIR/Module.kabi_%{_target_cpu}$Variant $RPM_BUILD_ROOT/Module.kabi - $RPM_SOURCE_DIR/check-kabi -k $RPM_BUILD_ROOT/Module.kabi -s Module.symvers || exit 1 - # for now, don't keep it around. - rm $RPM_BUILD_ROOT/Module.kabi - else - echo "**** NOTE: Cannot find reference Module.kabi file. ****" - fi -%endif - -%if %{with_kabidupchk} - echo "**** kABI DUP checking is enabled in kernel SPEC file. ****" - if [ -e $RPM_SOURCE_DIR/Module.kabi_dup_%{_target_cpu}$Variant ]; then - cp $RPM_SOURCE_DIR/Module.kabi_dup_%{_target_cpu}$Variant $RPM_BUILD_ROOT/Module.kabi - $RPM_SOURCE_DIR/check-kabi -k $RPM_BUILD_ROOT/Module.kabi -s Module.symvers || exit 1 - # for now, don't keep it around. - rm $RPM_BUILD_ROOT/Module.kabi - else - echo "**** NOTE: Cannot find DUP reference Module.kabi file. ****" - fi -%endif - -%if %{with_kabidw_base} - # Don't build kabi base for debug kernels - if [ "$Variant" != "zfcpdump" -a "$Variant" != "debug" ]; then - mkdir -p $RPM_BUILD_ROOT/kabi-dwarf - tar xjvf %{SOURCE301} -C $RPM_BUILD_ROOT/kabi-dwarf - - mkdir -p $RPM_BUILD_ROOT/kabi-dwarf/stablelists - tar xjvf %{SOURCE300} -C $RPM_BUILD_ROOT/kabi-dwarf/stablelists - - echo "**** GENERATING DWARF-based kABI baseline dataset ****" - chmod 0755 $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh - $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh generate \ - "$RPM_BUILD_ROOT/kabi-dwarf/stablelists/kabi-current/kabi_stablelist_%{_target_cpu}" \ - "$(pwd)" \ - "$RPM_BUILD_ROOT/kabidw-base/%{_target_cpu}${Variant:+.${Variant}}" || : - - rm -rf $RPM_BUILD_ROOT/kabi-dwarf - fi -%endif - -%if %{with_kabidwchk} - if [ "$Variant" != "zfcpdump" ]; then - mkdir -p $RPM_BUILD_ROOT/kabi-dwarf - tar xjvf %{SOURCE301} -C $RPM_BUILD_ROOT/kabi-dwarf - if [ -d "$RPM_BUILD_ROOT/kabi-dwarf/base/%{_target_cpu}${Variant:+.${Variant}}" ]; then - mkdir -p $RPM_BUILD_ROOT/kabi-dwarf/stablelists - tar xjvf %{SOURCE300} -C $RPM_BUILD_ROOT/kabi-dwarf/stablelists - - echo "**** GENERATING DWARF-based kABI dataset ****" - chmod 0755 $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh - $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh generate \ - "$RPM_BUILD_ROOT/kabi-dwarf/stablelists/kabi-current/kabi_stablelist_%{_target_cpu}" \ - "$(pwd)" \ - "$RPM_BUILD_ROOT/kabi-dwarf/base/%{_target_cpu}${Variant:+.${Variant}}.tmp" || : - - echo "**** kABI DWARF-based comparison report ****" - $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh compare \ - "$RPM_BUILD_ROOT/kabi-dwarf/base/%{_target_cpu}${Variant:+.${Variant}}" \ - "$RPM_BUILD_ROOT/kabi-dwarf/base/%{_target_cpu}${Variant:+.${Variant}}.tmp" || : - echo "**** End of kABI DWARF-based comparison report ****" - else - echo "**** Baseline dataset for kABI DWARF-BASED comparison report not found ****" - fi - - rm -rf $RPM_BUILD_ROOT/kabi-dwarf - fi -%endif - - # then drop all but the needed Makefiles/Kconfig files - rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts - rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include - cp .config $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a scripts $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts/tracing - rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts/spdxcheck.py - -%ifarch s390x - # CONFIG_EXPOLINE_EXTERN=y produces arch/s390/lib/expoline.o - # which is needed during external module build. - if [ -f arch/s390/lib/expoline.o ]; then - cp -a --parents arch/s390/lib/expoline.o $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - fi -%endif - - # Files for 'make scripts' to succeed with kernel-devel. - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/security/selinux/include - cp -a --parents security/selinux/include/classmap.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents security/selinux/include/initial_sid_to_string.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/tools/include/tools - cp -a --parents tools/include/tools/be_byteshift.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/tools/le_byteshift.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - - # Files for 'make prepare' to succeed with kernel-devel. - cp -a --parents tools/include/linux/compiler* $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/linux/types.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/build/Build.include $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/build/Build $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/build/fixdep.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/objtool/sync-check.sh $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/bpf/resolve_btfids $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - - cp --parents security/selinux/include/policycap_names.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents security/selinux/include/policycap.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - - cp -a --parents tools/include/asm-generic $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/linux $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/uapi/asm $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/uapi/asm-generic $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/uapi/linux $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/vdso $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/scripts/utilities.mak $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/lib/subcmd $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/lib/*.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/objtool/*.[ch] $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/objtool/Build $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/objtool/include/objtool/*.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/lib/bpf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/lib/bpf/Build $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - - if [ -f tools/objtool/objtool ]; then - cp -a tools/objtool/objtool $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/tools/objtool/ || : - fi - if [ -f tools/objtool/fixdep ]; then - cp -a tools/objtool/fixdep $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/tools/objtool/ || : - fi - if [ -d arch/$Arch/scripts ]; then - cp -a arch/$Arch/scripts $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/arch/%{_arch} || : - fi - if [ -f arch/$Arch/*lds ]; then - cp -a arch/$Arch/*lds $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/arch/%{_arch}/ || : - fi - if [ -f arch/%{asmarch}/kernel/module.lds ]; then - cp -a --parents arch/%{asmarch}/kernel/module.lds $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - fi - find $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts \( -iname "*.o" -o -iname "*.cmd" \) -exec rm -f {} + -%ifarch ppc64le - cp -a --parents arch/powerpc/lib/crtsavres.[So] $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ -%endif - if [ -d arch/%{asmarch}/include ]; then - cp -a --parents arch/%{asmarch}/include $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - fi -%ifarch aarch64 - # arch/arm64/include/asm/xen references arch/arm - cp -a --parents arch/arm/include/asm/xen $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - # arch/arm64/include/asm/opcodes.h references arch/arm - cp -a --parents arch/arm/include/asm/opcodes.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ -%endif - # include the machine specific headers for ARM variants, if available. -%ifarch %{arm} - if [ -d arch/%{asmarch}/mach-${Variant}/include ]; then - cp -a --parents arch/%{asmarch}/mach-${Variant}/include $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - fi - # include a few files for 'make prepare' - cp -a --parents arch/arm/tools/gen-mach-types $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/arm/tools/mach-types $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - -%endif - cp -a include $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include -%ifarch i686 x86_64 - # files for 'make prepare' to succeed with kernel-devel - cp -a --parents arch/x86/entry/syscalls/syscall_32.tbl $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/entry/syscalls/syscall_64.tbl $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs_32.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs_64.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs_common.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/purgatory/purgatory.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/purgatory/stack.S $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/purgatory/setup-x86_64.S $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/purgatory/entry64.S $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/boot/string.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/boot/string.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/boot/ctype.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - - cp -a --parents scripts/syscalltbl.sh $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents scripts/syscallhdr.sh $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - - cp -a --parents tools/arch/x86/include/asm $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/arch/x86/include/uapi/asm $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/objtool/arch/x86/lib $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/arch/x86/lib/ $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/arch/x86/tools/gen-insn-attr-x86.awk $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/objtool/arch/x86/ $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - -%endif - # Clean up intermediate tools files - find $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/tools \( -iname "*.o" -o -iname "*.cmd" \) -exec rm -f {} + - - # Make sure the Makefile, version.h, and auto.conf have a matching - # timestamp so that external modules can be built - touch -r $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/Makefile \ - $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include/generated/uapi/linux/version.h \ - $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include/config/auto.conf - -%if %{with_debuginfo} - eu-readelf -n vmlinux | grep "Build ID" | awk '{print $NF}' > vmlinux.id - cp vmlinux.id $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/vmlinux.id - - # - # save the vmlinux file for kernel debugging into the kernel-debuginfo rpm - # - mkdir -p $RPM_BUILD_ROOT%{debuginfodir}/lib/modules/$KernelVer - cp vmlinux $RPM_BUILD_ROOT%{debuginfodir}/lib/modules/$KernelVer - if [ -n "%{vmlinux_decompressor}" ]; then - eu-readelf -n %{vmlinux_decompressor} | grep "Build ID" | awk '{print $NF}' > vmlinux.decompressor.id - # Without build-id the build will fail. But for s390 the build-id - # wasn't added before 5.11. In case it is missing prefer not - # packaging the debuginfo over a build failure. - if [ -s vmlinux.decompressor.id ]; then - cp vmlinux.decompressor.id $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/vmlinux.decompressor.id - cp %{vmlinux_decompressor} $RPM_BUILD_ROOT%{debuginfodir}/lib/modules/$KernelVer/vmlinux.decompressor - fi - fi -%endif - - find $RPM_BUILD_ROOT/lib/modules/$KernelVer -name "*.ko" -type f >modnames - - # mark modules executable so that strip-to-file can strip them - xargs --no-run-if-empty chmod u+x < modnames - - # Generate a list of modules for block and networking. - - grep -F /drivers/ modnames | xargs --no-run-if-empty nm -upA | - sed -n 's,^.*/\([^/]*\.ko\): *U \(.*\)$,\1 \2,p' > drivers.undef - - collect_modules_list() - { - sed -r -n -e "s/^([^ ]+) \\.?($2)\$/\\1/p" drivers.undef | - LC_ALL=C sort -u > $RPM_BUILD_ROOT/lib/modules/$KernelVer/modules.$1 - if [ ! -z "$3" ]; then - sed -r -e "/^($3)\$/d" -i $RPM_BUILD_ROOT/lib/modules/$KernelVer/modules.$1 - fi - } - - collect_modules_list networking \ - 'register_netdev|ieee80211_register_hw|usbnet_probe|phy_driver_register|rt(l_|2x00)(pci|usb)_probe|register_netdevice' - collect_modules_list block \ - 'ata_scsi_ioctl|scsi_add_host|scsi_add_host_with_dma|blk_alloc_queue|blk_init_queue|register_mtd_blktrans|scsi_esp_register|scsi_register_device_handler|blk_queue_physical_block_size' 'pktcdvd.ko|dm-mod.ko' - collect_modules_list drm \ - 'drm_open|drm_init' - collect_modules_list modesetting \ - 'drm_crtc_init' - - # detect missing or incorrect license tags - ( find $RPM_BUILD_ROOT/lib/modules/$KernelVer -name '*.ko' | xargs /sbin/modinfo -l | \ - grep -E -v 'GPL( v2)?$|Dual BSD/GPL$|Dual MPL/GPL$|GPL and additional rights$' ) && exit 1 - - remove_depmod_files() - { - # remove files that will be auto generated by depmod at rpm -i time - pushd $RPM_BUILD_ROOT/lib/modules/$KernelVer/ - rm -f modules.{alias,alias.bin,builtin.alias.bin,builtin.bin} \ - modules.{dep,dep.bin,devname,softdep,symbols,symbols.bin} - popd - } - - remove_depmod_files - - # Identify modules in the kernel-modules-extras package - %{SOURCE20} $RPM_BUILD_ROOT lib/modules/$KernelVer $(realpath configs/mod-extra.list) - # Identify modules in the kernel-modules-extras package - %{SOURCE20} $RPM_BUILD_ROOT lib/modules/$KernelVer %{SOURCE84} internal - - # - # Generate the kernel-core and kernel-modules files lists - # - - # Copy the System.map file for depmod to use, and create a backup of the - # full module tree so we can restore it after we're done filtering - cp System.map $RPM_BUILD_ROOT/. - cp configs/filter-*.sh $RPM_BUILD_ROOT/. - pushd $RPM_BUILD_ROOT - mkdir restore - cp -r lib/modules/$KernelVer/* restore/. - - # don't include anything going into kernel-modules-extra in the file lists - xargs rm -rf < mod-extra.list - # don't include anything going int kernel-modules-internal in the file lists - xargs rm -rf < mod-internal.list - - if [ $DoModules -eq 1 ]; then - # Find all the module files and filter them out into the core and - # modules lists. This actually removes anything going into -modules - # from the dir. - find lib/modules/$KernelVer/kernel -name *.ko | sort -n > modules.list - ./filter-modules.sh modules.list %{_target_cpu} - rm filter-*.sh - - # Run depmod on the resulting module tree and make sure it isn't broken - depmod -b . -aeF ./System.map $KernelVer &> depmod.out - if [ -s depmod.out ]; then - echo "Depmod failure" - cat depmod.out - exit 1 - else - rm depmod.out - fi - else - # Ensure important files/directories exist to let the packaging succeed - echo '%%defattr(-,-,-)' > modules.list - echo '%%defattr(-,-,-)' > k-d.list - mkdir -p lib/modules/$KernelVer/kernel - # Add files usually created by make modules, needed to prevent errors - # thrown by depmod during package installation - touch lib/modules/$KernelVer/modules.order - touch lib/modules/$KernelVer/modules.builtin - fi - - remove_depmod_files - - # Go back and find all of the various directories in the tree. We use this - # for the dir lists in kernel-core - find lib/modules/$KernelVer/kernel -mindepth 1 -type d | sort -n > module-dirs.list - - # Cleanup - rm System.map - # Just "cp -r" can be very slow: here, it rewrites _existing files_ - # with open(O_TRUNC). Many filesystems synchronously wait for metadata - # update for such file rewrites (seen in strace as final close syscall - # taking a long time). On a rotational disk, cp was observed to take - # more than 5 minutes on ext4 and more than 15 minutes (!) on xfs. - # With --remove-destination, we avoid this, and copying - # (with enough RAM to cache it) takes 5 seconds: - cp -r --remove-destination restore/* lib/modules/$KernelVer/. - rm -rf restore - popd - - # Make sure the files lists start with absolute paths or rpmbuild fails. - # Also add in the dir entries - sed -e 's/^lib*/\/lib/' %{?zipsed} $RPM_BUILD_ROOT/k-d.list > ../kernel${Variant:+-${Variant}}-modules.list - sed -e 's/^lib*/%dir \/lib/' %{?zipsed} $RPM_BUILD_ROOT/module-dirs.list > ../kernel${Variant:+-${Variant}}-core.list - sed -e 's/^lib*/\/lib/' %{?zipsed} $RPM_BUILD_ROOT/modules.list >> ../kernel${Variant:+-${Variant}}-core.list - sed -e 's/^lib*/\/lib/' %{?zipsed} $RPM_BUILD_ROOT/mod-extra.list >> ../kernel${Variant:+-${Variant}}-modules-extra.list - sed -e 's/^lib*/\/lib/' %{?zipsed} $RPM_BUILD_ROOT/mod-internal.list >> ../kernel${Variant:+-${Variant}}-modules-internal.list - - # Cleanup - rm -f $RPM_BUILD_ROOT/k-d.list - rm -f $RPM_BUILD_ROOT/modules.list - rm -f $RPM_BUILD_ROOT/module-dirs.list - rm -f $RPM_BUILD_ROOT/mod-extra.list - rm -f $RPM_BUILD_ROOT/mod-internal.list - -%if %{signmodules} - if [ $DoModules -eq 1 ]; then - # Save the signing keys so we can sign the modules in __modsign_install_post - cp certs/signing_key.pem certs/signing_key.pem.sign${Variant:++${Variant}} - cp certs/signing_key.x509 certs/signing_key.x509.sign${Variant:++${Variant}} - fi -%endif - - # Move the devel headers out of the root file system - mkdir -p $RPM_BUILD_ROOT/usr/src/kernels - mv $RPM_BUILD_ROOT/lib/modules/$KernelVer/build $RPM_BUILD_ROOT/$DevelDir - - # This is going to create a broken link during the build, but we don't use - # it after this point. We need the link to actually point to something - # when kernel-devel is installed, and a relative link doesn't work across - # the F17 UsrMove feature. - ln -sf $DevelDir $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - -%ifnarch armv7hl - # Generate vmlinux.h and put it to kernel-devel path - bpftool btf dump file vmlinux format c > $RPM_BUILD_ROOT/$DevelDir/vmlinux.h -%endif - - # prune junk from kernel-devel - find $RPM_BUILD_ROOT/usr/src/kernels -name ".*.cmd" -delete - - # Red Hat UEFI Secure Boot CA cert, which can be used to authenticate the kernel - mkdir -p $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer - %ifarch x86_64 aarch64 - install -m 0644 %{secureboot_ca_0} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca-20200609.cer - install -m 0644 %{secureboot_ca_1} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca-20140212.cer - ln -s kernel-signing-ca-20200609.cer $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca.cer - %else - install -m 0644 %{secureboot_ca_0} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca.cer - %endif - %ifarch s390x ppc64le - if [ $DoModules -eq 1 ]; then - if [ -x /usr/bin/rpm-sign ]; then - install -m 0644 %{secureboot_key_0} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/%{signing_key_filename} - else - install -m 0644 certs/signing_key.x509.sign${Variant:++${Variant}} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca.cer - openssl x509 -in certs/signing_key.pem.sign${Variant:++${Variant}} -outform der -out $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/%{signing_key_filename} - chmod 0644 $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/%{signing_key_filename} - fi - fi - %endif - -%if %{with_ipaclones} - MAXPROCS=$(echo %{?_smp_mflags} | sed -n 's/-j\s*\([0-9]\+\)/\1/p') - if [ -z "$MAXPROCS" ]; then - MAXPROCS=1 - fi - if [ "$Variant" == "" ]; then - mkdir -p $RPM_BUILD_ROOT/$DevelDir-ipaclones - find . -name '*.ipa-clones' | xargs -i{} -r -n 1 -P $MAXPROCS install -m 644 -D "{}" "$RPM_BUILD_ROOT/$DevelDir-ipaclones/{}" - fi -%endif - -} - -### -# DO it... -### - -# prepare directories -rm -rf $RPM_BUILD_ROOT -mkdir -p $RPM_BUILD_ROOT/boot -mkdir -p $RPM_BUILD_ROOT%{_libexecdir} - -cd linux-%{KVERREL} - - -%if %{with_debug} -BuildKernel %make_target %kernel_image %{_use_vdso} debug -%endif - -%if %{with_zfcpdump} -BuildKernel %make_target %kernel_image %{_use_vdso} zfcpdump -%endif - -%if %{with_pae} -BuildKernel %make_target %kernel_image %{use_vdso} lpae -%endif - -%if %{with_up} -BuildKernel %make_target %kernel_image %{_use_vdso} -%endif - -%ifnarch noarch i686 -%if !%{with_debug} && !%{with_zfcpdump} && !%{with_pae} && !%{with_up} -# If only building the user space tools, then initialize the build environment -# and some variables so that the various userspace tools can be built. -InitBuildVars -%endif -%endif - -%ifarch aarch64 -%global perf_build_extra_opts CORESIGHT=1 -%endif -%global perf_make \ - %{__make} %{?make_opts} EXTRA_CFLAGS="${RPM_OPT_FLAGS}" LDFLAGS="%{__global_ldflags}" %{?cross_opts} -C tools/perf V=1 NO_PERF_READ_VDSO32=1 NO_PERF_READ_VDSOX32=1 WERROR=0 NO_LIBUNWIND=1 HAVE_CPLUS_DEMANGLE=1 NO_GTK2=1 NO_STRLCPY=1 NO_BIONIC=1 LIBBPF_DYNAMIC=1 LIBTRACEEVENT_DYNAMIC=1 %{?perf_build_extra_opts} prefix=%{_prefix} PYTHON=%{__python3} -%if %{with_perf} -# perf -# make sure check-headers.sh is executable -chmod +x tools/perf/check-headers.sh -%{perf_make} DESTDIR=$RPM_BUILD_ROOT all -%endif - -%global tools_make \ - CFLAGS="${RPM_OPT_FLAGS}" LDFLAGS="%{__global_ldflags}" %{make} %{?make_opts} - -%if %{with_tools} -%ifarch %{cpupowerarchs} -# cpupower -# make sure version-gen.sh is executable. -chmod +x tools/power/cpupower/utils/version-gen.sh -%{tools_make} %{?_smp_mflags} -C tools/power/cpupower CPUFREQ_BENCH=false DEBUG=false -%ifarch x86_64 - pushd tools/power/cpupower/debug/x86_64 - %{tools_make} %{?_smp_mflags} centrino-decode powernow-k8-decode - popd -%endif -%ifarch x86_64 - pushd tools/power/x86/x86_energy_perf_policy/ - %{tools_make} - popd - pushd tools/power/x86/turbostat - %{tools_make} - popd - pushd tools/power/x86/intel-speed-select - %{tools_make} - popd - pushd tools/arch/x86/intel_sdsi - %{tools_make} CFLAGS="${RPM_OPT_FLAGS}" - popd -%endif -%endif -pushd tools/thermal/tmon/ -%{tools_make} -popd -pushd tools/iio/ -%{tools_make} -popd -pushd tools/gpio/ -%{tools_make} -popd -# build VM tools -pushd tools/vm/ -%{tools_make} slabinfo page_owner_sort -popd -%endif - -if [ -f $DevelDir/vmlinux.h ]; then - RPM_VMLINUX_H=$DevelDir/vmlinux.h -fi - -%global bpftool_make \ - %{__make} EXTRA_CFLAGS="${RPM_OPT_FLAGS}" EXTRA_LDFLAGS="%{__global_ldflags}" DESTDIR=$RPM_BUILD_ROOT %{?make_opts} VMLINUX_H="${RPM_VMLINUX_H}" V=1 -%if %{with_bpftool} -pushd tools/bpf/bpftool -%{bpftool_make} -popd -%endif - -%if %{with_selftests} -# Unfortunately, samples/bpf/Makefile expects that the headers are installed -# in the source tree. We installed them previously to $RPM_BUILD_ROOT/usr -# but there's no way to tell the Makefile to take them from there. -%{make} %{?_smp_mflags} headers_install -%{make} %{?_smp_mflags} ARCH=$Arch V=1 M=samples/bpf/ || true - -# Prevent bpf selftests to build bpftool repeatedly: -export BPFTOOL=$(pwd)/tools/bpf/bpftool/bpftool - -pushd tools/testing/selftests -# We need to install here because we need to call make with ARCH set which -# doesn't seem possible to do in the install section. -%{make} %{?_smp_mflags} ARCH=$Arch V=1 TARGETS="bpf vm livepatch net net/forwarding net/mptcp netfilter tc-testing" SKIP_TARGETS="" INSTALL_PATH=%{buildroot}%{_libexecdir}/kselftests VMLINUX_H="${RPM_VMLINUX_H}" install - -# 'make install' for bpf is broken and upstream refuses to fix it. -# Install the needed files manually. -for dir in bpf bpf/no_alu32 bpf/progs; do - # In ARK, the rpm build continues even if some of the selftests - # cannot be built. It's not always possible to build selftests, - # as upstream sometimes dependens on too new llvm version or has - # other issues. If something did not get built, just skip it. - test -d $dir || continue - mkdir -p %{buildroot}%{_libexecdir}/kselftests/$dir - find $dir -maxdepth 1 -type f \( -executable -o -name '*.py' -o -name settings -o \ - -name 'btf_dump_test_case_*.c' -o -name '*.ko' -o \ - -name '*.o' -exec sh -c 'readelf -h "{}" | grep -q "^ Machine:.*BPF"' \; \) -print0 | \ - xargs -0 cp -t %{buildroot}%{_libexecdir}/kselftests/$dir || true -done -popd -export -n BPFTOOL -%endif - -%if %{with_doc} -# Make the HTML pages. -%{__make} PYTHON=/usr/bin/python3 htmldocs || %{doc_build_fail} - -# sometimes non-world-readable files sneak into the kernel source tree -chmod -R a=rX Documentation -find Documentation -type d | xargs chmod u+w -%endif - -# In the modsign case, we do 3 things. 1) We check the "variant" and hard -# code the value in the following invocations. This is somewhat sub-optimal -# but we're doing this inside of an RPM macro and it isn't as easy as it -# could be because of that. 2) We restore the .tmp_versions/ directory from -# the one we saved off in BuildKernel above. This is to make sure we're -# signing the modules we actually built/installed in that variant. 3) We -# grab the arch and invoke mod-sign.sh command to actually sign the modules. -# -# We have to do all of those things _after_ find-debuginfo runs, otherwise -# that will strip the signature off of the modules. -# -# Don't sign modules for the zfcpdump variant as it is monolithic. - -%define __modsign_install_post \ - if [ "%{signmodules}" -eq "1" ]; then \ - if [ "%{with_pae}" -ne "0" ]; then \ - %{modsign_cmd} certs/signing_key.pem.sign+lpae certs/signing_key.x509.sign+lpae $RPM_BUILD_ROOT/lib/modules/%{KVERREL}+lpae/ \ - fi \ - if [ "%{with_debug}" -ne "0" ]; then \ - %{modsign_cmd} certs/signing_key.pem.sign+debug certs/signing_key.x509.sign+debug $RPM_BUILD_ROOT/lib/modules/%{KVERREL}+debug/ \ - fi \ - if [ "%{with_up}" -ne "0" ]; then \ - %{modsign_cmd} certs/signing_key.pem.sign certs/signing_key.x509.sign $RPM_BUILD_ROOT/lib/modules/%{KVERREL}/ \ - fi \ - fi \ - if [ "%{zipmodules}" -eq "1" ]; then \ - find $RPM_BUILD_ROOT/lib/modules/ -type f -name '*.ko' | xargs -P${RPM_BUILD_NCPUS} -r xz; \ - fi \ -%{nil} - -### -### Special hacks for debuginfo subpackages. -### - -# This macro is used by %%install, so we must redefine it before that. -%define debug_package %{nil} - -%if %{with_debuginfo} - -%ifnarch noarch -%global __debug_package 1 -%files -f debugfiles.list debuginfo-common-%{_target_cpu} -%endif - -%endif - -# We don't want to package debuginfo for self-tests and samples but -# we have to delete them to avoid an error messages about unpackaged -# files. -# Delete the debuginfo for kernel-devel files -%define __remove_unwanted_dbginfo_install_post \ - if [ "%{with_selftests}" -ne "0" ]; then \ - rm -rf $RPM_BUILD_ROOT/usr/lib/debug/usr/libexec/ksamples; \ - rm -rf $RPM_BUILD_ROOT/usr/lib/debug/usr/libexec/kselftests; \ - fi \ - rm -rf $RPM_BUILD_ROOT/usr/lib/debug/usr/src; \ -%{nil} - -# -# Disgusting hack alert! We need to ensure we sign modules *after* all -# invocations of strip occur, which is in __debug_install_post if -# find-debuginfo.sh runs, and __os_install_post if not. -# -%define __spec_install_post \ - %{?__debug_package:%{__debug_install_post}}\ - %{__arch_install_post}\ - %{__os_install_post}\ - %{__remove_unwanted_dbginfo_install_post}\ - %{__modsign_install_post} - -### -### install -### - -%install - -cd linux-%{KVERREL} - -%if %{with_doc} -docdir=$RPM_BUILD_ROOT%{_datadir}/doc/kernel-doc-%{specversion}-%{pkgrelease} - -# copy the source over -mkdir -p $docdir -tar -h -f - --exclude=man --exclude='.*' -c Documentation | tar xf - -C $docdir - -# with_doc -%endif - -# We have to do the headers install before the tools install because the -# kernel headers_install will remove any header files in /usr/include that -# it doesn't install itself. - -%if %{with_headers} -# Install kernel headers -%{__make} ARCH=%{hdrarch} INSTALL_HDR_PATH=$RPM_BUILD_ROOT/usr headers_install - -find $RPM_BUILD_ROOT/usr/include \ - \( -name .install -o -name .check -o \ - -name ..install.cmd -o -name ..check.cmd \) -delete - -%endif - -%if %{with_cross_headers} -%if 0%{?fedora} -HDR_ARCH_LIST='arm arm64 powerpc s390 x86' -%else -HDR_ARCH_LIST='arm64 powerpc s390 x86' -%endif -mkdir -p $RPM_BUILD_ROOT/usr/tmp-headers - -for arch in $HDR_ARCH_LIST; do - mkdir $RPM_BUILD_ROOT/usr/tmp-headers/arch-${arch} - %{__make} ARCH=${arch} INSTALL_HDR_PATH=$RPM_BUILD_ROOT/usr/tmp-headers/arch-${arch} headers_install -done - -find $RPM_BUILD_ROOT/usr/tmp-headers \ - \( -name .install -o -name .check -o \ - -name ..install.cmd -o -name ..check.cmd \) -delete - -# Copy all the architectures we care about to their respective asm directories -for arch in $HDR_ARCH_LIST ; do - mkdir -p $RPM_BUILD_ROOT/usr/${arch}-linux-gnu/include - mv $RPM_BUILD_ROOT/usr/tmp-headers/arch-${arch}/include/* $RPM_BUILD_ROOT/usr/${arch}-linux-gnu/include/ -done - -rm -rf $RPM_BUILD_ROOT/usr/tmp-headers -%endif - -%if %{with_kernel_abi_stablelists} -# kabi directory -INSTALL_KABI_PATH=$RPM_BUILD_ROOT/lib/modules/ -mkdir -p $INSTALL_KABI_PATH - -# install kabi releases directories -tar xjvf %{SOURCE300} -C $INSTALL_KABI_PATH -# with_kernel_abi_stablelists -%endif - -%if %{with_perf} -# perf tool binary and supporting scripts/binaries -%{perf_make} DESTDIR=$RPM_BUILD_ROOT lib=%{_lib} install-bin -# remove the 'trace' symlink. -rm -f %{buildroot}%{_bindir}/trace - -# For both of the below, yes, this should be using a macro but right now -# it's hard coded and we don't actually want it anyway right now. -# Whoever wants examples can fix it up! - -# remove examples -rm -rf %{buildroot}/usr/lib/perf/examples -rm -rf %{buildroot}/usr/lib/perf/include - -# python-perf extension -%{perf_make} DESTDIR=$RPM_BUILD_ROOT install-python_ext - -# perf man pages (note: implicit rpm magic compresses them later) -mkdir -p %{buildroot}/%{_mandir}/man1 -%{perf_make} DESTDIR=$RPM_BUILD_ROOT install-man - -# remove any tracevent files, eg. its plugins still gets built and installed, -# even if we build against system's libtracevent during perf build (by setting -# LIBTRACEEVENT_DYNAMIC=1 above in perf_make macro). Those files should already -# ship with libtraceevent package. -rm -rf %{buildroot}%{_libdir}/traceevent -%endif - -%if %{with_tools} -%ifarch %{cpupowerarchs} -%{make} -C tools/power/cpupower DESTDIR=$RPM_BUILD_ROOT libdir=%{_libdir} mandir=%{_mandir} CPUFREQ_BENCH=false install -rm -f %{buildroot}%{_libdir}/*.{a,la} -%find_lang cpupower -mv cpupower.lang ../ -%ifarch x86_64 - pushd tools/power/cpupower/debug/x86_64 - install -m755 centrino-decode %{buildroot}%{_bindir}/centrino-decode - install -m755 powernow-k8-decode %{buildroot}%{_bindir}/powernow-k8-decode - popd -%endif -chmod 0755 %{buildroot}%{_libdir}/libcpupower.so* -mkdir -p %{buildroot}%{_unitdir} %{buildroot}%{_sysconfdir}/sysconfig -install -m644 %{SOURCE2000} %{buildroot}%{_unitdir}/cpupower.service -install -m644 %{SOURCE2001} %{buildroot}%{_sysconfdir}/sysconfig/cpupower -%endif -%ifarch x86_64 - mkdir -p %{buildroot}%{_mandir}/man8 - pushd tools/power/x86/x86_energy_perf_policy - %{tools_make} DESTDIR=%{buildroot} install - popd - pushd tools/power/x86/turbostat - %{tools_make} DESTDIR=%{buildroot} install - popd - pushd tools/power/x86/intel-speed-select - %{tools_make} DESTDIR=%{buildroot} install - popd - pushd tools/arch/x86/intel_sdsi - %{tools_make} CFLAGS="${RPM_OPT_FLAGS}" DESTDIR=%{buildroot} install - popd -%endif -pushd tools/thermal/tmon -%{tools_make} INSTALL_ROOT=%{buildroot} install -popd -pushd tools/iio -%{tools_make} DESTDIR=%{buildroot} install -popd -pushd tools/gpio -%{tools_make} DESTDIR=%{buildroot} install -popd -install -m644 -D %{SOURCE2002} %{buildroot}%{_sysconfdir}/logrotate.d/kvm_stat -pushd tools/kvm/kvm_stat -%{__make} INSTALL_ROOT=%{buildroot} install-tools -%{__make} INSTALL_ROOT=%{buildroot} install-man -install -m644 -D kvm_stat.service %{buildroot}%{_unitdir}/kvm_stat.service -popd -# install VM tools -pushd tools/vm/ -install -m755 slabinfo %{buildroot}%{_bindir}/slabinfo -install -m755 page_owner_sort %{buildroot}%{_bindir}/page_owner_sort -popd -%endif - -if [ -f $DevelDir/vmlinux.h ]; then - RPM_VMLINUX_H=$DevelDir/vmlinux.h -fi - -%if %{with_bpftool} -pushd tools/bpf/bpftool -%{bpftool_make} prefix=%{_prefix} bash_compdir=%{_sysconfdir}/bash_completion.d/ mandir=%{_mandir} install doc-install -popd -%endif - -%if %{with_selftests} -pushd samples -install -d %{buildroot}%{_libexecdir}/ksamples -# install bpf samples -pushd bpf -install -d %{buildroot}%{_libexecdir}/ksamples/bpf -find -type f -executable -exec install -m755 {} %{buildroot}%{_libexecdir}/ksamples/bpf \; -install -m755 *.sh %{buildroot}%{_libexecdir}/ksamples/bpf -# test_lwt_bpf.sh compiles test_lwt_bpf.c when run; this works only from the -# kernel tree. Just remove it. -rm %{buildroot}%{_libexecdir}/ksamples/bpf/test_lwt_bpf.sh -install -m644 *_kern.o %{buildroot}%{_libexecdir}/ksamples/bpf || true -install -m644 tcp_bpf.readme %{buildroot}%{_libexecdir}/ksamples/bpf -popd -# install pktgen samples -pushd pktgen -install -d %{buildroot}%{_libexecdir}/ksamples/pktgen -find . -type f -executable -exec install -m755 {} %{buildroot}%{_libexecdir}/ksamples/pktgen/{} \; -find . -type f ! -executable -exec install -m644 {} %{buildroot}%{_libexecdir}/ksamples/pktgen/{} \; -popd -popd -# install vm selftests -pushd tools/testing/selftests/vm -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/vm/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/vm/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/vm/{} \; -popd -# install drivers/net/mlxsw selftests -pushd tools/testing/selftests/drivers/net/mlxsw -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/drivers/net/mlxsw/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/drivers/net/mlxsw/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/drivers/net/mlxsw/{} \; -popd -# install drivers/net/netdevsim selftests -pushd tools/testing/selftests/drivers/net/netdevsim -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/drivers/net/netdevsim/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/drivers/net/netdevsim/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/drivers/net/netdevsim/{} \; -popd -# install net/forwarding selftests -pushd tools/testing/selftests/net/forwarding -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/net/forwarding/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/net/forwarding/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/net/forwarding/{} \; -popd -# install net/mptcp selftests -pushd tools/testing/selftests/net/mptcp -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/net/mptcp/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/net/mptcp/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/net/mptcp/{} \; -popd -# install tc-testing selftests -pushd tools/testing/selftests/tc-testing -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/tc-testing/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/tc-testing/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/tc-testing/{} \; -popd -# install livepatch selftests -pushd tools/testing/selftests/livepatch -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/livepatch/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/livepatch/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/livepatch/{} \; -popd -# install netfilter selftests -pushd tools/testing/selftests/netfilter -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/netfilter/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/netfilter/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/netfilter/{} \; -popd -%endif - -### -### clean -### - -### -### scripts -### - -%if %{with_tools} -%post -n kernel-tools-libs -/sbin/ldconfig - -%postun -n kernel-tools-libs -/sbin/ldconfig -%endif - -# -# This macro defines a %%post script for a kernel*-devel package. -# %%kernel_devel_post [<subpackage>] -# Note we don't run hardlink if ostree is in use, as ostree is -# a far more sophisticated hardlink implementation. -# https://github.com/projectatomic/rpm-ostree/commit/58a79056a889be8814aa51f507b2c7a4dccee526 -# -# The deletion of *.hardlink-temporary files is a temporary workaround -# for this bug in the hardlink binary (fixed in util-linux 2.38): -# https://github.com/util-linux/util-linux/issues/1602 -# -%define kernel_devel_post() \ -%{expand:%%post %{?1:%{1}-}devel}\ -if [ -f /etc/sysconfig/kernel ]\ -then\ - . /etc/sysconfig/kernel || exit $?\ -fi\ -if [ "$HARDLINK" != "no" -a -x /usr/bin/hardlink -a ! -e /run/ostree-booted ] \ -then\ - (cd /usr/src/kernels/%{KVERREL}%{?1:+%{1}} &&\ - /usr/bin/find . -type f | while read f; do\ - hardlink -c /usr/src/kernels/*%{?dist}.*/$f $f > /dev/null\ - done;\ - /usr/bin/find /usr/src/kernels -type f -name '*.hardlink-temporary' -delete\ - )\ -fi\ -%{nil} - -# -# This macro defines a %%post script for a kernel*-modules-extra package. -# It also defines a %%postun script that does the same thing. -# %%kernel_modules_extra_post [<subpackage>] -# -%define kernel_modules_extra_post() \ -%{expand:%%post %{?1:%{1}-}modules-extra}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil}\ -%{expand:%%postun %{?1:%{1}-}modules-extra}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil} - -# -# This macro defines a %%post script for a kernel*-modules-internal package. -# It also defines a %%postun script that does the same thing. -# %%kernel_modules_internal_post [<subpackage>] -# -%define kernel_modules_internal_post() \ -%{expand:%%post %{?1:%{1}-}modules-internal}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil}\ -%{expand:%%postun %{?1:%{1}-}modules-internal}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil} - -# -# This macro defines a %%post script for a kernel*-modules package. -# It also defines a %%postun script that does the same thing. -# %%kernel_modules_post [<subpackage>] -# -%define kernel_modules_post() \ -%{expand:%%post %{?1:%{1}-}modules}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -if [ ! -f %{_localstatedir}/lib/rpm-state/%{name}/installing_core_%{KVERREL}%{?1:+%{1}} ]; then\ - mkdir -p %{_localstatedir}/lib/rpm-state/%{name}\ - touch %{_localstatedir}/lib/rpm-state/%{name}/need_to_run_dracut_%{KVERREL}%{?1:+%{1}}\ -fi\ -%{nil}\ -%{expand:%%postun %{?1:%{1}-}modules}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil}\ -%{expand:%%posttrans %{?1:%{1}-}modules}\ -if [ -f %{_localstatedir}/lib/rpm-state/%{name}/need_to_run_dracut_%{KVERREL}%{?1:+%{1}} ]; then\ - rm -f %{_localstatedir}/lib/rpm-state/%{name}/need_to_run_dracut_%{KVERREL}%{?1:+%{1}}\ - echo "Running: dracut -f --kver %{KVERREL}%{?1:+%{1}}"\ - dracut -f --kver "%{KVERREL}%{?1:+%{1}}" || exit $?\ -fi\ -%{nil} - -# This macro defines a %%posttrans script for a kernel package. -# %%kernel_variant_posttrans [<subpackage>] -# More text can follow to go at the end of this variant's %%post. -# -%define kernel_variant_posttrans() \ -%{expand:%%posttrans %{?1:%{1}-}core}\ -%if 0%{!?fedora:1}\ -if [ -x %{_sbindir}/weak-modules ]\ -then\ - %{_sbindir}/weak-modules --add-kernel %{KVERREL}%{?1:+%{1}} || exit $?\ -fi\ -%endif\ -rm -f %{_localstatedir}/lib/rpm-state/%{name}/installing_core_%{KVERREL}%{?1:+%{1}}\ -/bin/kernel-install add %{KVERREL}%{?1:+%{1}} /lib/modules/%{KVERREL}%{?1:+%{1}}/vmlinuz || exit $?\ -%{nil} - -# -# This macro defines a %%post script for a kernel package and its devel package. -# %%kernel_variant_post [-v <subpackage>] [-r <replace>] -# More text can follow to go at the end of this variant's %%post. -# -%define kernel_variant_post(v:r:) \ -%{expand:%%kernel_devel_post %{?-v*}}\ -%{expand:%%kernel_modules_post %{?-v*}}\ -%{expand:%%kernel_modules_extra_post %{?-v*}}\ -%{expand:%%kernel_modules_internal_post %{?-v*}}\ -%{expand:%%kernel_variant_posttrans %{?-v*}}\ -%{expand:%%post %{?-v*:%{-v*}-}core}\ -%{-r:\ -if [ `uname -i` == "x86_64" -o `uname -i` == "i386" ] &&\ - [ -f /etc/sysconfig/kernel ]; then\ - /bin/sed -r -i -e 's/^DEFAULTKERNEL=%{-r*}$/DEFAULTKERNEL=kernel%{?-v:-%{-v*}}/' /etc/sysconfig/kernel || exit $?\ -fi}\ -mkdir -p %{_localstatedir}/lib/rpm-state/%{name}\ -touch %{_localstatedir}/lib/rpm-state/%{name}/installing_core_%{KVERREL}%{?1:+%{1}}\ -%{nil} - -# -# This macro defines a %%preun script for a kernel package. -# %%kernel_variant_preun <subpackage> -# -%define kernel_variant_preun() \ -%{expand:%%preun %{?1:%{1}-}core}\ -/bin/kernel-install remove %{KVERREL}%{?1:+%{1}} /lib/modules/%{KVERREL}%{?1:+%{1}}/vmlinuz || exit $?\ -if [ -x %{_sbindir}/weak-modules ]\ -then\ - %{_sbindir}/weak-modules --remove-kernel %{KVERREL}%{?1:+%{1}} || exit $?\ -fi\ -%{nil} - -%kernel_variant_preun -%kernel_variant_post -r kernel-smp - -%if %{with_pae} -%kernel_variant_preun lpae -%kernel_variant_post -v lpae -r (kernel|kernel-smp) -%endif - -%if %{with_debug} -%kernel_variant_preun debug -%kernel_variant_post -v debug -%endif - -%if %{with_zfcpdump} -%kernel_variant_preun zfcpdump -%kernel_variant_post -v zfcpdump -%endif - -if [ -x /sbin/ldconfig ] -then - /sbin/ldconfig -X || exit $? -fi - -### -### file lists -### - -%if %{with_headers} -%files headers -/usr/include/* -%endif - -%if %{with_cross_headers} -%files cross-headers -/usr/*-linux-gnu/include/* -%endif - -%if %{with_kernel_abi_stablelists} -%files -n kernel-abi-stablelists -/lib/modules/kabi-* -%endif - -%if %{with_kabidw_base} -%ifarch x86_64 s390x ppc64 ppc64le aarch64 -%files kernel-kabidw-base-internal -%defattr(-,root,root) -/kabidw-base/%{_target_cpu}/* -%endif -%endif - -# only some architecture builds need kernel-doc -%if %{with_doc} -%files doc -%defattr(-,root,root) -%{_datadir}/doc/kernel-doc-%{specversion}-%{pkgrelease}/Documentation/* -%dir %{_datadir}/doc/kernel-doc-%{specversion}-%{pkgrelease}/Documentation -%dir %{_datadir}/doc/kernel-doc-%{specversion}-%{pkgrelease} -%endif - -%if %{with_perf} -%files -n perf -%{_bindir}/perf -%{_libdir}/libperf-jvmti.so -%dir %{_libexecdir}/perf-core -%{_libexecdir}/perf-core/* -%{_datadir}/perf-core/* -%{_mandir}/man[1-8]/perf* -%{_sysconfdir}/bash_completion.d/perf -%doc linux-%{KVERREL}/tools/perf/Documentation/examples.txt -%{_docdir}/perf-tip/tips.txt - -%files -n python3-perf -%{python3_sitearch}/* - -%if %{with_debuginfo} -%files -f perf-debuginfo.list -n perf-debuginfo - -%files -f python3-perf-debuginfo.list -n python3-perf-debuginfo -%endif -# with_perf -%endif - -%if %{with_tools} -%ifnarch %{cpupowerarchs} -%files -n kernel-tools -%else -%files -n kernel-tools -f cpupower.lang -%{_bindir}/cpupower -%{_datadir}/bash-completion/completions/cpupower -%ifarch x86_64 -%{_bindir}/centrino-decode -%{_bindir}/powernow-k8-decode -%endif -%{_unitdir}/cpupower.service -%{_mandir}/man[1-8]/cpupower* -%config(noreplace) %{_sysconfdir}/sysconfig/cpupower -%ifarch x86_64 -%{_bindir}/x86_energy_perf_policy -%{_mandir}/man8/x86_energy_perf_policy* -%{_bindir}/turbostat -%{_mandir}/man8/turbostat* -%{_bindir}/intel-speed-select -%{_sbindir}/intel_sdsi -%endif -# cpupowerarchs -%endif -%{_bindir}/tmon -%{_bindir}/iio_event_monitor -%{_bindir}/iio_generic_buffer -%{_bindir}/lsiio -%{_bindir}/lsgpio -%{_bindir}/gpio-hammer -%{_bindir}/gpio-event-mon -%{_bindir}/gpio-watch -%{_mandir}/man1/kvm_stat* -%{_bindir}/kvm_stat -%{_unitdir}/kvm_stat.service -%config(noreplace) %{_sysconfdir}/logrotate.d/kvm_stat -%{_bindir}/page_owner_sort -%{_bindir}/slabinfo - -%if %{with_debuginfo} -%files -f kernel-tools-debuginfo.list -n kernel-tools-debuginfo -%endif - -%ifarch %{cpupowerarchs} -%files -n kernel-tools-libs -%{_libdir}/libcpupower.so.0 -%{_libdir}/libcpupower.so.0.0.1 - -%files -n kernel-tools-libs-devel -%{_libdir}/libcpupower.so -%{_includedir}/cpufreq.h -%endif -# with_tools -%endif - -%if %{with_bpftool} -%files -n bpftool -%{_sbindir}/bpftool -%{_sysconfdir}/bash_completion.d/bpftool -%{_mandir}/man8/bpftool-cgroup.8.gz -%{_mandir}/man8/bpftool-gen.8.gz -%{_mandir}/man8/bpftool-iter.8.gz -%{_mandir}/man8/bpftool-link.8.gz -%{_mandir}/man8/bpftool-map.8.gz -%{_mandir}/man8/bpftool-prog.8.gz -%{_mandir}/man8/bpftool-perf.8.gz -%{_mandir}/man8/bpftool.8.gz -%{_mandir}/man8/bpftool-net.8.gz -%{_mandir}/man8/bpftool-feature.8.gz -%{_mandir}/man8/bpftool-btf.8.gz -%{_mandir}/man8/bpftool-struct_ops.8.gz - -%if %{with_debuginfo} -%files -f bpftool-debuginfo.list -n bpftool-debuginfo -%defattr(-,root,root) -%endif -%endif - -%if %{with_selftests} -%files selftests-internal -%{_libexecdir}/ksamples -%{_libexecdir}/kselftests -%endif - -# empty meta-package -%ifnarch %nobuildarches noarch -%files -%endif - -%if %{with_gcov} -%ifnarch %nobuildarches noarch -%files gcov -%{_builddir} -%endif -%endif - -# This is %%{image_install_path} on an arch where that includes ELF files, -# or empty otherwise. -%define elf_image_install_path %{?kernel_image_elf:%{image_install_path}} - -# -# This macro defines the %%files sections for a kernel package -# and its devel and debuginfo packages. -# %%kernel_variant_files [-k vmlinux] <use_vdso> <condition> <subpackage> -# -%define kernel_variant_files(k:) \ -%if %{2}\ -%{expand:%%files -f kernel-%{?3:%{3}-}core.list %{?1:-f kernel-%{?3:%{3}-}ldsoconf.list} %{?3:%{3}-}core}\ -%{!?_licensedir:%global license %%doc}\ -%license linux-%{KVERREL}/COPYING-%{version}-%{release}\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/%{?-k:%{-k*}}%{!?-k:vmlinuz}\ -%ghost /%{image_install_path}/%{?-k:%{-k*}}%{!?-k:vmlinuz}-%{KVERREL}%{?3:+%{3}}\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/.vmlinuz.hmac \ -%ghost /%{image_install_path}/.vmlinuz-%{KVERREL}%{?3:+%{3}}.hmac \ -%ifarch %{arm} aarch64\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/dtb \ -%ghost /%{image_install_path}/dtb-%{KVERREL}%{?3:+%{3}} \ -%endif\ -%attr(0600, root, root) /lib/modules/%{KVERREL}%{?3:+%{3}}/System.map\ -%ghost %attr(0600, root, root) /boot/System.map-%{KVERREL}%{?3:+%{3}}\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/symvers.gz\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/config\ -%ghost %attr(0600, root, root) /boot/symvers-%{KVERREL}%{?3:+%{3}}.gz\ -%ghost %attr(0600, root, root) /boot/initramfs-%{KVERREL}%{?3:+%{3}}.img\ -%ghost %attr(0644, root, root) /boot/config-%{KVERREL}%{?3:+%{3}}\ -%dir /lib/modules\ -%dir /lib/modules/%{KVERREL}%{?3:+%{3}}\ -%dir /lib/modules/%{KVERREL}%{?3:+%{3}}/kernel\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/build\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/source\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/updates\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/weak-updates\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/systemtap\ -%{_datadir}/doc/kernel-keys/%{KVERREL}%{?3:+%{3}}\ -%if %{1}\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/vdso\ -%endif\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/modules.*\ -%{expand:%%files -f kernel-%{?3:%{3}-}modules.list %{?3:%{3}-}modules}\ -%{expand:%%files %{?3:%{3}-}devel}\ -%defverify(not mtime)\ -/usr/src/kernels/%{KVERREL}%{?3:+%{3}}\ -%{expand:%%files %{?3:%{3}-}devel-matched}\ -%{expand:%%files -f kernel-%{?3:%{3}-}modules-extra.list %{?3:%{3}-}modules-extra}\ -%config(noreplace) /etc/modprobe.d/*-blacklist.conf\ -%{expand:%%files -f kernel-%{?3:%{3}-}modules-internal.list %{?3:%{3}-}modules-internal}\ -%if %{with_debuginfo}\ -%ifnarch noarch\ -%{expand:%%files -f debuginfo%{?3}.list %{?3:%{3}-}debuginfo}\ -%endif\ -%endif\ -%if %{?3:1} %{!?3:0}\ -%{expand:%%files %{3}}\ -%endif\ -%endif\ -%{nil} - -%kernel_variant_files %{_use_vdso} %{with_up} -%kernel_variant_files %{_use_vdso} %{with_debug} debug -%if %{with_debug_meta} -%files debug -%files debug-core -%files debug-devel -%files debug-devel-matched -%files debug-modules -%files debug-modules-extra -%endif -%kernel_variant_files %{use_vdso} %{with_pae} lpae -%kernel_variant_files %{_use_vdso} %{with_zfcpdump} zfcpdump - -%define kernel_variant_ipaclones(k:) \ -%if %{1}\ -%if %{with_ipaclones}\ -%{expand:%%files %{?2:%{2}-}ipaclones-internal}\ -%defattr(-,root,root)\ -%defverify(not mtime)\ -/usr/src/kernels/%{KVERREL}%{?2:+%{2}}-ipaclones\ -%endif\ -%endif\ -%{nil} - -%kernel_variant_ipaclones %{with_up} - -# plz don't put in a version string unless you're going to tag -# and build. -# -# -%changelog Mon Mar 28 2022 Fedora Kernel Team <kernel-team@xxxxxxxxxxxxxxxxx> [5.16.0-0.rc5.6.test] - -### -# The following Emacs magic makes C-c C-e use UTC dates. -# Local Variables: -# rpm-change-log-uses-utc: t -# End: -### diff --git a/redhat/self-test/data/fedora-78e36f3b0dae.el7.spec b/redhat/self-test/data/fedora-78e36f3b0dae.el7.spec index blahblah..blahblah 100755 --- a/redhat/self-test/data/fedora-78e36f3b0dae.el7.spec +++ b/redhat/self-test/data/fedora-78e36f3b0dae.el7.spec @@ -1,125 +1,7 @@ -# All Global changes to build and install go here. -# Per the below section about __spec_install_pre, any rpm -# environment changes that affect %%install need to go -# here before the %%install macro is pre-built. - -# Disable LTO in userspace packages. -%global _lto_cflags %{nil} - -# Option to enable compiling with clang instead of gcc. -%bcond_with toolchain_clang - -%if %{with toolchain_clang} -%global toolchain clang -%endif - -# Compile the kernel with LTO (only supported when building with clang). -%bcond_with clang_lto - -%if %{with clang_lto} && %{without toolchain_clang} -{error:clang_lto requires --with toolchain_clang} -%endif - -# Cross compile on copr for arm -# See https://bugzilla.redhat.com/1879599 -%if 0%{?_with_cross_arm:1} -%global _target_cpu armv7hl -%global _arch arm -%global _build_arch arm -%global _with_cross 1 -%endif - -# The kernel's %%install section is special -# Normally the %%install section starts by cleaning up the BUILD_ROOT -# like so: -# -# %%__spec_install_pre %%{___build_pre}\ -# [ "$RPM_BUILD_ROOT" != "/" ] && rm -rf "${RPM_BUILD_ROOT}"\ -# mkdir -p `dirname "$RPM_BUILD_ROOT"`\ -# mkdir "$RPM_BUILD_ROOT"\ -# %%{nil} -# -# But because of kernel variants, the %%build section, specifically -# BuildKernel(), moves each variant to its final destination as the -# variant is built. This violates the expectation of the %%install -# section. As a result we snapshot the current env variables and -# purposely leave out the removal section. All global wide changes -# should be added above this line otherwise the %%install section -# will not see them. -%global __spec_install_pre %{___build_pre} - -# At the time of this writing (2019-03), RHEL8 packages use w2.xzdio -# compression for rpms (xz, level 2). -# Kernel has several large (hundreds of mbytes) rpms, they take ~5 mins -# to compress by single-threaded xz. Switch to threaded compression, -# and from level 2 to 3 to keep compressed sizes close to "w2" results. -# -# NB: if default compression in /usr/lib/rpm/redhat/macros ever changes, -# this one might need tweaking (e.g. if default changes to w3.xzdio, -# change below to w4T.xzdio): -# -# This is disabled on i686 as it triggers oom errors - -%ifnarch i686 -%define _binary_payload w3T.xzdio -%endif - -Summary: The Linux kernel -%if 0%{?fedora} -%define secure_boot_arch x86_64 -%else -%define secure_boot_arch x86_64 aarch64 s390x ppc64le -%endif - -# Signing for secure boot authentication -%ifarch %{secure_boot_arch} -%global signkernel 1 -%else -%global signkernel 0 -%endif - -# Sign modules on all arches -%global signmodules 1 - -# Compress modules only for architectures that build modules -%ifarch noarch -%global zipmodules 0 -%else -%global zipmodules 1 -%endif - -%if %{zipmodules} -%global zipsed -e 's/\.ko$/\.ko.xz/' -# for parallel xz processes, replace with 1 to go back to single process -%endif - -%if 0%{?fedora} -%define primary_target fedora -%else -%define primary_target rhel -%endif - -# -# genspec.sh variables -# - -# Include Fedora files %global include_fedora 1 -# Include RHEL files %global include_rhel 1 -# Provide Patchlist.changelog file %global patchlist_changelog 1 -# Set released_kernel to 1 when the upstream source tarball contains a -# kernel release. (This includes prepatch or "rc" releases.) -# Set released_kernel to 0 when the upstream source tarball contains an -# unreleased kernel development snapshot. %global released_kernel 0 -# Set debugbuildsenabled to 1 to build separate base and debug kernels -# (on supported architectures). The kernel-debug-* subpackages will -# contain the debug kernel. -# Set debugbuildsenabled to 0 to not build a separate debug kernel, but -# to build the base kernel using the debug configuration. (Specifying -# the --with-release option overrides this setting.) %define debugbuildsenabled 0 %define buildid .test %define specversion 5.17.0 @@ -127,2924 +9,6 @@ Summary: The Linux kernel %define pkgrelease 0.rc0.78e36f3b0dae.6.test %define kversion 5 %define tarfile_release 5.16-11523-g78e36f3b0dae -# This is needed to do merge window version magic %define patchlevel 17 -# allow pkg_release to have configurable %%{?dist} tag %define specrelease 0.rc0.78e36f3b0dae.6%{?buildid}%{?dist} - -# -# End of genspec.sh variables -# - -%define pkg_release %{specrelease} - -# libexec dir is not used by the linker, so the shared object there -# should not be exported to RPM provides -%global __provides_exclude_from ^%{_libexecdir}/kselftests - -# The following build options are enabled by default, but may become disabled -# by later architecture-specific checks. These can also be disabled by using -# --without <opt> in the rpmbuild command, or by forcing these values to 0. -# -# standard kernel -%define with_up %{?_without_up: 0} %{?!_without_up: 1} -# kernel PAE (only valid for ARM (lpae)) -%define with_pae %{?_without_pae: 0} %{?!_without_pae: 1} -# kernel-debug -%define with_debug %{?_without_debug: 0} %{?!_without_debug: 1} -# kernel-zfcpdump (s390 specific kernel for zfcpdump) -%define with_zfcpdump %{?_without_zfcpdump: 0} %{?!_without_zfcpdump: 1} -# kernel-doc -%define with_doc %{?_without_doc: 0} %{?!_without_doc: 1} -# kernel-headers -%define with_headers %{?_without_headers: 0} %{?!_without_headers: 1} -%define with_cross_headers %{?_without_cross_headers: 0} %{?!_without_cross_headers: 1} -# perf -%define with_perf %{?_without_perf: 0} %{?!_without_perf: 1} -# tools -%define with_tools %{?_without_tools: 0} %{?!_without_tools: 1} -# bpf tool -%define with_bpftool %{?_without_bpftool: 0} %{?!_without_bpftool: 1} -# kernel-debuginfo -%define with_debuginfo %{?_without_debuginfo: 0} %{?!_without_debuginfo: 1} -# kernel-abi-stablelists -%define with_kernel_abi_stablelists %{?_without_kernel_abi_stablelists: 0} %{?!_without_kernel_abi_stablelists: 1} -# internal samples and selftests -%define with_selftests %{?_without_selftests: 0} %{?!_without_selftests: 1} -# -# Additional options for user-friendly one-off kernel building: -# -# Only build the base kernel (--with baseonly): -%define with_baseonly %{?_with_baseonly: 1} %{?!_with_baseonly: 0} -# Only build the pae kernel (--with paeonly): -%define with_paeonly %{?_with_paeonly: 1} %{?!_with_paeonly: 0} -# Only build the debug kernel (--with dbgonly): -%define with_dbgonly %{?_with_dbgonly: 1} %{?!_with_dbgonly: 0} -# Control whether we perform a compat. check against published ABI. -%define with_kabichk %{?_without_kabichk: 0} %{?!_without_kabichk: 1} -# Temporarily disable kabi checks until RC. -%define with_kabichk 0 -# Control whether we perform a compat. check against DUP ABI. -%define with_kabidupchk %{?_with_kabidupchk: 1} %{?!_with_kabidupchk: 0} -# -# Control whether to run an extensive DWARF based kABI check. -# Note that this option needs to have baseline setup in SOURCE300. -%define with_kabidwchk %{?_without_kabidwchk: 0} %{?!_without_kabidwchk: 1} -%define with_kabidw_base %{?_with_kabidw_base: 1} %{?!_with_kabidw_base: 0} -# -# Control whether to install the vdso directories. -%define with_vdso_install %{?_without_vdso_install: 0} %{?!_without_vdso_install: 1} -# -# should we do C=1 builds with sparse -%define with_sparse %{?_with_sparse: 1} %{?!_with_sparse: 0} -# -# Cross compile requested? -%define with_cross %{?_with_cross: 1} %{?!_with_cross: 0} -# -# build a release kernel on rawhide -%define with_release %{?_with_release: 1} %{?!_with_release: 0} - -# verbose build, i.e. no silent rules and V=1 -%define with_verbose %{?_with_verbose: 1} %{?!_with_verbose: 0} - -# -# check for mismatched config options -%define with_configchecks %{?_without_configchecks: 0} %{?!_without_configchecks: 1} - -# -# gcov support -%define with_gcov %{?_with_gcov:1}%{?!_with_gcov:0} - -# -# ipa_clone support -%define with_ipaclones %{?_without_ipaclones: 0} %{?!_without_ipaclones: 1} - -# Want to build a vanilla kernel build without any non-upstream patches? -%define with_vanilla %{?_with_vanilla: 1} %{?!_with_vanilla: 0} - -%if 0%{?fedora} -# Kernel headers are being split out into a separate package -%define with_headers 0 -%define with_cross_headers 0 -# no ipa_clone for now -%define with_ipaclones 0 -# no stablelist -%define with_kernel_abi_stablelists 0 -# Fedora builds these separately -%define with_perf 0 -%define with_tools 0 -%define with_bpftool 0 -# selftests turns on bpftool -%define with_selftests 0 -%endif - -%if %{with_verbose} -%define make_opts V=1 -%else -%define make_opts -s -%endif - -%if %{with toolchain_clang} -%ifarch s390x ppc64le -%global llvm_ias 0 -%else -%global llvm_ias 1 -%endif -%global clang_make_opts HOSTCC=clang CC=clang LLVM_IAS=%{llvm_ias} -%if %{with clang_lto} -%global clang_make_opts %{clang_make_opts} LD=ld.lld HOSTLD=ld.lld AR=llvm-ar NM=llvm-nm HOSTAR=llvm-ar HOSTNM=llvm-nm -%endif -%global make_opts %{make_opts} %{clang_make_opts} -# clang does not support the -fdump-ipa-clones option -%global with_ipaclones 0 -%endif - -# turn off debug kernel and kabichk for gcov builds -%if %{with_gcov} -%define with_debug 0 -%define with_kabichk 0 -%define with_kabidupchk 0 -%define with_kabidwchk 0 -%define with_kabidw_base 0 -%define with_kernel_abi_stablelists 0 -%endif - -# turn off kABI DWARF-based check if we're generating the base dataset -%if %{with_kabidw_base} -%define with_kabidwchk 0 -%endif - -# kpatch_kcflags are extra compiler flags applied to base kernel -# -fdump-ipa-clones is enabled only for base kernels on selected arches -%if %{with_ipaclones} -%ifarch x86_64 ppc64le -%define kpatch_kcflags -fdump-ipa-clones -%else -%define with_ipaclones 0 -%endif -%endif - -%define make_target bzImage -%define image_install_path boot - -%define KVERREL %{version}-%{release}.%{_target_cpu} -%define KVERREL_RE %(echo %KVERREL | sed 's/+/[+]/g') -%define hdrarch %_target_cpu -%define asmarch %_target_cpu - -%if 0%{!?nopatches:1} -%define nopatches 0 -%endif - -%if %{with_vanilla} -%define nopatches 1 -%endif - -%if %{with_release} -%define debugbuildsenabled 1 -%endif - -%if !%{with_debuginfo} -%define _enable_debug_packages 0 -%endif -%define debuginfodir /usr/lib/debug -# Needed because we override almost everything involving build-ids -# and debuginfo generation. Currently we rely on the old alldebug setting. -%global _build_id_links alldebug - -# kernel PAE is only built on ARMv7 -%ifnarch armv7hl -%define with_pae 0 -%endif - -# if requested, only build base kernel -%if %{with_baseonly} -%define with_pae 0 -%define with_debug 0 -%define with_vdso_install 0 -%define with_perf 0 -%define with_tools 0 -%define with_bpftool 0 -%define with_kernel_abi_stablelists 0 -%define with_selftests 0 -%define with_cross 0 -%define with_cross_headers 0 -%define with_ipaclones 0 -%endif - -# if requested, only build pae kernel -%if %{with_paeonly} -%define with_up 0 -%define with_debug 0 -%endif - -# if requested, only build debug kernel -%if %{with_dbgonly} -%define with_up 0 -%define with_vdso_install 0 -%define with_perf 0 -%define with_tools 0 -%define with_bpftool 0 -%define with_kernel_abi_stablelists 0 -%define with_selftests 0 -%define with_cross 0 -%define with_cross_headers 0 -%define with_ipaclones 0 -%endif - -# turn off kABI DUP check and DWARF-based check if kABI check is disabled -%if !%{with_kabichk} -%define with_kabidupchk 0 -%define with_kabidwchk 0 -%endif - -%if %{with_vdso_install} -%define use_vdso 1 -%endif - -# selftests require bpftool to be built -%if %{with_selftests} -%define with_bpftool 1 -%endif - -%ifnarch noarch -%define with_kernel_abi_stablelists 0 -%endif - -# Overrides for generic default options - -# only package docs noarch -%ifnarch noarch -%define with_doc 0 -%define doc_build_fail true -%endif - -%if 0%{?fedora} -# don't do debug builds on anything but i686 and x86_64 -%ifnarch i686 x86_64 -%define with_debug 0 -%endif -%endif - -# don't build noarch kernels or headers (duh) -%ifarch noarch -%define with_up 0 -%define with_headers 0 -%define with_cross_headers 0 -%define with_tools 0 -%define with_perf 0 -%define with_bpftool 0 -%define with_selftests 0 -%define with_debug 0 -%define all_arch_configs kernel-%{version}-*.config -%endif - -# sparse blows up on ppc -%ifnarch ppc64le -%define with_sparse 0 -%endif - -# zfcpdump mechanism is s390 only -%ifnarch s390x -%define with_zfcpdump 0 -%endif - -%if 0%{?fedora} -# This is not for Fedora -%define with_zfcpdump 0 -%endif - -# Per-arch tweaks - -%ifarch i686 -%define asmarch x86 -%define hdrarch i386 -%define all_arch_configs kernel-%{version}-i?86*.config -%define kernel_image arch/x86/boot/bzImage -%endif - -%ifarch x86_64 -%define asmarch x86 -%define all_arch_configs kernel-%{version}-x86_64*.config -%define kernel_image arch/x86/boot/bzImage -%endif - -%ifarch ppc64le -%define asmarch powerpc -%define hdrarch powerpc -%define make_target vmlinux -%define kernel_image vmlinux -%define kernel_image_elf 1 -%define use_vdso 0 -%define all_arch_configs kernel-%{version}-ppc64le*.config -%endif - -%ifarch s390x -%define asmarch s390 -%define hdrarch s390 -%define all_arch_configs kernel-%{version}-s390x.config -%define kernel_image arch/s390/boot/bzImage -%define vmlinux_decompressor arch/s390/boot/compressed/vmlinux -%endif - -%ifarch %{arm} -%define all_arch_configs kernel-%{version}-arm*.config -%define skip_nonpae_vdso 1 -%define asmarch arm -%define hdrarch arm -%define make_target bzImage -%define kernel_image arch/arm/boot/zImage -# http://lists.infradead.org/pipermail/linux-arm-kernel/2012-March/091404.html -%define kernel_mflags KALLSYMS_EXTRA_PASS=1 -# we only build headers/perf/tools on the base arm arches -# just like we used to only build them on i386 for x86 -%ifnarch armv7hl -%define with_headers 0 -%define with_cross_headers 0 -%endif -# These currently don't compile on armv7 -%define with_selftests 0 -%endif - -%ifarch aarch64 -%define all_arch_configs kernel-%{version}-aarch64*.config -%define asmarch arm64 -%define hdrarch arm64 -%define make_target Image.gz -%define kernel_image arch/arm64/boot/Image.gz -%endif - -# Should make listnewconfig fail if there's config options -# printed out? -%if %{nopatches} -%define with_configchecks 0 -%endif - -# To temporarily exclude an architecture from being built, add it to -# %%nobuildarches. Do _NOT_ use the ExclusiveArch: line, because if we -# don't build kernel-headers then the new build system will no longer let -# us use the previous build of that package -- it'll just be completely AWOL. -# Which is a BadThing(tm). - -# We only build kernel-headers on the following... -%if 0%{?fedora} -%define nobuildarches i386 -%else -%define nobuildarches i386 i686 %{arm} -%endif - -%ifarch %nobuildarches -# disable BuildKernel commands -%define with_up 0 -%define with_debug 0 -%define with_pae 0 -%define with_zfcpdump 0 - -%define with_debuginfo 0 -%define with_perf 0 -%define with_tools 0 -%define with_bpftool 0 -%define with_selftests 0 -%define _enable_debug_packages 0 -%endif - -# Architectures we build tools/cpupower on -%if 0%{?fedora} -%define cpupowerarchs %{ix86} x86_64 ppc64le %{arm} aarch64 -%else -%define cpupowerarchs i686 x86_64 ppc64le aarch64 -%endif - -%if 0%{?use_vdso} - -%if 0%{?skip_nonpae_vdso} -%define _use_vdso 0 -%else -%define _use_vdso 1 -%endif - -%else -%define _use_vdso 0 -%endif - -# If build of debug packages is disabled, we need to know if we want to create -# meta debug packages or not, after we define with_debug for all specific cases -# above. So this must be at the end here, after all cases of with_debug or not. -%define with_debug_meta 0 -%if !%{debugbuildsenabled} -%if %{with_debug} -%define with_debug_meta 1 -%endif -%define with_debug 0 -%endif - - -# -# Packages that need to be installed before the kernel is, because the %%post -# scripts use them. -# -%define kernel_prereq coreutils, systemd >= 203-2, /usr/bin/kernel-install -%define initrd_prereq dracut >= 027 - - -Name: kernel -License: GPLv2 and Redistributable, no modification permitted -URL: https://www.kernel.org/ -Version: %{specversion} -Release: %{pkg_release} -# DO NOT CHANGE THE 'ExclusiveArch' LINE TO TEMPORARILY EXCLUDE AN ARCHITECTURE BUILD. -# SET %%nobuildarches (ABOVE) INSTEAD -%if 0%{?fedora} -ExclusiveArch: noarch x86_64 s390x %{arm} aarch64 ppc64le -%else -ExclusiveArch: noarch i386 i686 x86_64 s390x %{arm} aarch64 ppc64le -%endif -ExclusiveOS: Linux -%ifnarch %{nobuildarches} -Requires: kernel-core-uname-r = %{KVERREL} -Requires: kernel-modules-uname-r = %{KVERREL} -%endif - - -# -# List the packages used during the kernel build -# -BuildRequires: kmod, patch, bash, coreutils, tar, git-core, which -BuildRequires: bzip2, xz, findutils, gzip, m4, perl-interpreter, perl-Carp, perl-devel, perl-generators, make, diffutils, gawk -BuildRequires: gcc, binutils, redhat-rpm-config, hmaccalc, bison, flex, gcc-c++ -BuildRequires: net-tools, hostname, bc, elfutils-devel -BuildRequires: dwarves -BuildRequires: python3-devel -BuildRequires: gcc-plugin-devel -# glibc-static is required for a consistent build environment (specifically -# CONFIG_CC_CAN_LINK_STATIC=y). -BuildRequires: glibc-static -%ifnarch %{nobuildarches} noarch -BuildRequires: bpftool -%endif -%if %{with_headers} -BuildRequires: rsync -%endif -%if %{with_doc} -BuildRequires: xmlto, asciidoc, python3-sphinx, python3-sphinx_rtd_theme -%endif -%if %{with_sparse} -BuildRequires: sparse -%endif -%if %{with_perf} -BuildRequires: zlib-devel binutils-devel newt-devel perl(ExtUtils::Embed) bison flex xz-devel -BuildRequires: audit-libs-devel -BuildRequires: java-devel -BuildRequires: libbpf-devel -BuildRequires: libbabeltrace-devel -BuildRequires: libtraceevent-devel -%ifnarch %{arm} s390x -BuildRequires: numactl-devel -%endif -%ifarch aarch64 -BuildRequires: opencsd-devel >= 1.0.0 -%endif -%endif -%if %{with_tools} -BuildRequires: gettext ncurses-devel -BuildRequires: libcap-devel libcap-ng-devel -%ifnarch s390x -BuildRequires: pciutils-devel -%endif -%ifarch i686 x86_64 -BuildRequires: libnl3-devel -%endif -%endif -%if %{with_tools} || %{signmodules} || %{signkernel} -BuildRequires: openssl-devel -%endif -%if %{with_bpftool} -BuildRequires: python3-docutils -BuildRequires: zlib-devel binutils-devel -%endif -%if %{with_selftests} -BuildRequires: clang llvm -%ifnarch %{arm} -BuildRequires: numactl-devel -%endif -BuildRequires: libcap-devel libcap-ng-devel rsync libmnl-devel -%endif -BuildConflicts: rhbuildsys(DiskFree) < 500Mb -%if %{with_debuginfo} -BuildRequires: rpm-build, elfutils -BuildConflicts: rpm < 4.13.0.1-19 -BuildConflicts: dwarves < 1.13 -# Most of these should be enabled after more investigation -%undefine _include_minidebuginfo -%undefine _find_debuginfo_dwz_opts -%undefine _unique_build_ids -%undefine _unique_debug_names -%undefine _unique_debug_srcs -%undefine _debugsource_packages -%undefine _debuginfo_subpackages -%global _find_debuginfo_opts -r -%global _missing_build_ids_terminate_build 1 -%global _no_recompute_build_ids 1 -%endif -%if %{with_kabidwchk} || %{with_kabidw_base} -BuildRequires: kabi-dw -%endif - -%if %{signkernel}%{signmodules} -BuildRequires: openssl -%if %{signkernel} -# ELN uses Fedora signing process, so exclude -%if 0%{?rhel}%{?centos} && !0%{?eln} -BuildRequires: system-sb-certs -%endif -%ifarch x86_64 aarch64 -BuildRequires: nss-tools -BuildRequires: pesign >= 0.10-4 -%endif -%endif -%endif - -%if %{with_cross} -BuildRequires: binutils-%{_build_arch}-linux-gnu, gcc-%{_build_arch}-linux-gnu -%define cross_opts CROSS_COMPILE=%{_build_arch}-linux-gnu- -%define __strip %{_build_arch}-linux-gnu-strip -%endif - -# These below are required to build man pages -%if %{with_perf} -BuildRequires: xmlto -%endif -%if %{with_perf} || %{with_tools} -BuildRequires: asciidoc -%endif - -%if %{with toolchain_clang} -BuildRequires: clang -%endif - -%if %{with clang_lto} -BuildRequires: llvm -BuildRequires: lld -%endif - -# Because this is the kernel, it's hard to get a single upstream URL -# to represent the base without needing to do a bunch of patching. This -# tarball is generated from a src-git tree. If you want to see the -# exact git commit you can run -# -# xzcat -qq ${TARBALL} | git get-tar-commit-id -Source0: linux-%{tarfile_release}.tar.xz - -Source1: Makefile.rhelver - - -# Name of the packaged file containing signing key -%ifarch ppc64le -%define signing_key_filename kernel-signing-ppc.cer -%endif -%ifarch s390x -%define signing_key_filename kernel-signing-s390.cer -%endif - -%if %{?released_kernel} - -Source10: redhatsecurebootca5.cer -Source11: redhatsecurebootca1.cer -Source12: redhatsecureboot501.cer -Source13: redhatsecureboot301.cer -Source14: secureboot_s390.cer -Source15: secureboot_ppc.cer - -%define secureboot_ca_1 %{SOURCE10} -%define secureboot_ca_0 %{SOURCE11} -%ifarch x86_64 aarch64 -%define secureboot_key_1 %{SOURCE12} -%define pesign_name_1 redhatsecureboot501 -%define secureboot_key_0 %{SOURCE13} -%define pesign_name_0 redhatsecureboot301 -%endif -%ifarch s390x -%define secureboot_key_0 %{SOURCE14} -%define pesign_name_0 redhatsecureboot302 -%endif -%ifarch ppc64le -%define secureboot_key_0 %{SOURCE15} -%define pesign_name_0 redhatsecureboot303 -%endif - -# released_kernel -%else - -Source10: redhatsecurebootca4.cer -Source11: redhatsecurebootca2.cer -Source12: redhatsecureboot401.cer -Source13: redhatsecureboot003.cer - -%define secureboot_ca_1 %{SOURCE10} -%define secureboot_ca_0 %{SOURCE11} -%define secureboot_key_1 %{SOURCE12} -%define pesign_name_1 redhatsecureboot401 -%define secureboot_key_0 %{SOURCE13} -%define pesign_name_0 redhatsecureboot003 - -# released_kernel -%endif - -Source20: mod-denylist.sh -Source21: mod-sign.sh -Source22: parallel_xz.sh - -%define modsign_cmd %{SOURCE21} - -%if 0%{?include_rhel} -Source23: x509.genkey.rhel - -Source24: kernel-aarch64-rhel.config -Source25: kernel-aarch64-debug-rhel.config -Source26: mod-extra.list.rhel - -Source27: kernel-ppc64le-rhel.config -Source28: kernel-ppc64le-debug-rhel.config -Source29: kernel-s390x-rhel.config -Source30: kernel-s390x-debug-rhel.config -Source31: kernel-s390x-zfcpdump-rhel.config -Source32: kernel-x86_64-rhel.config -Source33: kernel-x86_64-debug-rhel.config - -Source34: filter-x86_64.sh.rhel -Source35: filter-armv7hl.sh.rhel -Source37: filter-aarch64.sh.rhel -Source38: filter-ppc64le.sh.rhel -Source39: filter-s390x.sh.rhel -Source40: filter-modules.sh.rhel - -Source41: x509.genkey.centos -%endif - -%if 0%{?include_fedora} -Source50: x509.genkey.fedora -Source51: mod-extra.list.fedora - -Source52: kernel-aarch64-fedora.config -Source53: kernel-aarch64-debug-fedora.config -Source54: kernel-armv7hl-fedora.config -Source55: kernel-armv7hl-debug-fedora.config -Source56: kernel-armv7hl-lpae-fedora.config -Source57: kernel-armv7hl-lpae-debug-fedora.config -Source60: kernel-ppc64le-fedora.config -Source61: kernel-ppc64le-debug-fedora.config -Source62: kernel-s390x-fedora.config -Source63: kernel-s390x-debug-fedora.config -Source64: kernel-x86_64-fedora.config -Source65: kernel-x86_64-debug-fedora.config - -Source67: filter-x86_64.sh.fedora -Source68: filter-armv7hl.sh.fedora -Source70: filter-aarch64.sh.fedora -Source71: filter-ppc64le.sh.fedora -Source72: filter-s390x.sh.fedora -Source73: filter-modules.sh.fedora -%endif - -Source75: partial-kgcov-snip.config -Source80: generate_all_configs.sh -Source81: process_configs.sh - -Source82: update_scripts.sh - -Source84: mod-internal.list - -Source100: rheldup3.x509 -Source101: rhelkpatch1.x509 - -Source200: check-kabi - -Source201: Module.kabi_aarch64 -Source202: Module.kabi_ppc64le -Source203: Module.kabi_s390x -Source204: Module.kabi_x86_64 - -Source210: Module.kabi_dup_aarch64 -Source211: Module.kabi_dup_ppc64le -Source212: Module.kabi_dup_s390x -Source213: Module.kabi_dup_x86_64 - -Source300: kernel-abi-stablelists-%{specversion}-%{pkgrelease}.tar.bz2 -Source301: kernel-kabi-dw-%{specversion}-%{pkgrelease}.tar.bz2 - -# Sources for kernel-tools -Source2000: cpupower.service -Source2001: cpupower.config -Source2002: kvm_stat.logrotate - -# Some people enjoy building customized kernels from the dist-git in Fedora and -# use this to override configuration options. One day they may all use the -# source tree, but in the mean time we carry this to support the legacy workflow -Source3000: merge.pl -Source3001: kernel-local -%if %{patchlist_changelog} -Source3002: Patchlist.changelog -%endif - -Source4000: README.rst -Source4001: rpminspect.yaml -Source4002: gating.yaml - -## Patches needed for building this package - -%if !%{nopatches} - -Patch1: patch-%{patchversion}-redhat.patch -%endif - -# empty final patch to facilitate testing of kernel patches -Patch999999: linux-kernel-test.patch - -# END OF PATCH DEFINITIONS - -%description -The kernel meta package - -# -# This macro does requires, provides, conflicts, obsoletes for a kernel package. -# %%kernel_reqprovconf <subpackage> -# It uses any kernel_<subpackage>_conflicts and kernel_<subpackage>_obsoletes -# macros defined above. -# -%define kernel_reqprovconf \ -Provides: kernel = %{specversion}-%{pkg_release}\ -Provides: kernel-%{_target_cpu} = %{specversion}-%{pkg_release}%{?1:+%{1}}\ -Provides: kernel-drm-nouveau = 16\ -Provides: kernel-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires(pre): %{kernel_prereq}\ -Requires(pre): %{initrd_prereq}\ -Requires(pre): ((linux-firmware >= 20150904-56.git6ebf5d57) if linux-firmware)\ -Recommends: linux-firmware\ -Requires(preun): systemd >= 200\ -Conflicts: xfsprogs < 4.3.0-1\ -Conflicts: xorg-x11-drv-vmmouse < 13.0.99\ -%{expand:%%{?kernel%{?1:_%{1}}_conflicts:Conflicts: %%{kernel%{?1:_%{1}}_conflicts}}}\ -%{expand:%%{?kernel%{?1:_%{1}}_obsoletes:Obsoletes: %%{kernel%{?1:_%{1}}_obsoletes}}}\ -%{expand:%%{?kernel%{?1:_%{1}}_provides:Provides: %%{kernel%{?1:_%{1}}_provides}}}\ -# We can't let RPM do the dependencies automatic because it'll then pick up\ -# a correct but undesirable perl dependency from the module headers which\ -# isn't required for the kernel proper to function\ -AutoReq: no\ -AutoProv: yes\ -%{nil} - - -%package doc -Summary: Various documentation bits found in the kernel source -Group: Documentation -%description doc -This package contains documentation files from the kernel -source. Various bits of information about the Linux kernel and the -device drivers shipped with it are documented in these files. - -You'll want to install this package if you need a reference to the -options that can be passed to Linux kernel modules at load time. - - -%package headers -Summary: Header files for the Linux kernel for use by glibc -Obsoletes: glibc-kernheaders < 3.0-46 -Provides: glibc-kernheaders = 3.0-46 -%description headers -Kernel-headers includes the C header files that specify the interface -between the Linux kernel and userspace libraries and programs. The -header files define structures and constants that are needed for -building most standard programs and are also needed for rebuilding the -glibc package. - -%package cross-headers -Summary: Header files for the Linux kernel for use by cross-glibc -%description cross-headers -Kernel-cross-headers includes the C header files that specify the interface -between the Linux kernel and userspace libraries and programs. The -header files define structures and constants that are needed for -building most standard programs and are also needed for rebuilding the -cross-glibc package. - - -%package debuginfo-common-%{_target_cpu} -Summary: Kernel source files used by %{name}-debuginfo packages -Provides: installonlypkg(kernel) -%description debuginfo-common-%{_target_cpu} -This package is required by %{name}-debuginfo subpackages. -It provides the kernel source files common to all builds. - -%if %{with_perf} -%package -n perf -Summary: Performance monitoring for the Linux kernel -Requires: bzip2 -License: GPLv2 -%description -n perf -This package contains the perf tool, which enables performance monitoring -of the Linux kernel. - -%package -n perf-debuginfo -Summary: Debug information for package perf -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release} -AutoReqProv: no -%description -n perf-debuginfo -This package provides debug information for the perf package. - -# Note that this pattern only works right to match the .build-id -# symlinks because of the trailing nonmatching alternation and -# the leading .*, because of find-debuginfo.sh's buggy handling -# of matching the pattern against the symlinks file. -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{_bindir}/perf(\.debug)?|.*%%{_libexecdir}/perf-core/.*|.*%%{_libdir}/libperf-jvmti.so(\.debug)?|XXX' -o perf-debuginfo.list} - -%package -n python3-perf -Summary: Python bindings for apps which will manipulate perf events -%description -n python3-perf -The python3-perf package contains a module that permits applications -written in the Python programming language to use the interface -to manipulate perf events. - -%package -n python3-perf-debuginfo -Summary: Debug information for package perf python bindings -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release} -AutoReqProv: no -%description -n python3-perf-debuginfo -This package provides debug information for the perf python bindings. - -# the python_sitearch macro should already be defined from above -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{python3_sitearch}/perf.*so(\.debug)?|XXX' -o python3-perf-debuginfo.list} - -# with_perf -%endif - -%if %{with_tools} -%package -n kernel-tools -Summary: Assortment of tools for the Linux kernel -License: GPLv2 -%ifarch %{cpupowerarchs} -Provides: cpupowerutils = 1:009-0.6.p1 -Obsoletes: cpupowerutils < 1:009-0.6.p1 -Provides: cpufreq-utils = 1:009-0.6.p1 -Provides: cpufrequtils = 1:009-0.6.p1 -Obsoletes: cpufreq-utils < 1:009-0.6.p1 -Obsoletes: cpufrequtils < 1:009-0.6.p1 -Obsoletes: cpuspeed < 1:1.5-16 -Requires: kernel-tools-libs = %{version}-%{release} -%endif -%define __requires_exclude ^%{_bindir}/python -%description -n kernel-tools -This package contains the tools/ directory from the kernel source -and the supporting documentation. - -%package -n kernel-tools-libs -Summary: Libraries for the kernels-tools -License: GPLv2 -%description -n kernel-tools-libs -This package contains the libraries built from the tools/ directory -from the kernel source. - -%package -n kernel-tools-libs-devel -Summary: Assortment of tools for the Linux kernel -License: GPLv2 -Requires: kernel-tools = %{version}-%{release} -%ifarch %{cpupowerarchs} -Provides: cpupowerutils-devel = 1:009-0.6.p1 -Obsoletes: cpupowerutils-devel < 1:009-0.6.p1 -%endif -Requires: kernel-tools-libs = %{version}-%{release} -Provides: kernel-tools-devel -%description -n kernel-tools-libs-devel -This package contains the development files for the tools/ directory from -the kernel source. - -%package -n kernel-tools-debuginfo -Summary: Debug information for package kernel-tools -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release} -AutoReqProv: no -%description -n kernel-tools-debuginfo -This package provides debug information for package kernel-tools. - -# Note that this pattern only works right to match the .build-id -# symlinks because of the trailing nonmatching alternation and -# the leading .*, because of find-debuginfo.sh's buggy handling -# of matching the pattern against the symlinks file. -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{_bindir}/centrino-decode(\.debug)?|.*%%{_bindir}/powernow-k8-decode(\.debug)?|.*%%{_bindir}/cpupower(\.debug)?|.*%%{_libdir}/libcpupower.*|.*%%{_bindir}/turbostat(\.debug)?|.*%%{_bindir}/x86_energy_perf_policy(\.debug)?|.*%%{_bindir}/tmon(\.debug)?|.*%%{_bindir}/lsgpio(\.debug)?|.*%%{_bindir}/gpio-hammer(\.debug)?|.*%%{_bindir}/gpio-event-mon(\.debug)?|.*%%{_bindir}/gpio-watch(\.debug)?|.*%%{_bindir}/iio_event_monitor(\.debug)?|.*%%{_bindir}/iio_generic_buffer(\.debug)?|.*%%{_bindir}/lsiio(\.debug)?|.*%%{_bindir}/intel-speed-select(\.debug)?|.*%%{_bindir}/page_owner_sort(\.debug)?|.*%%{_bindir}/slabinfo(\.debug)?|.*%%{_sbindir}/intel_sdsi(\.debug)?|XXX' -o kernel-tools-debuginfo.list} - -# with_tools -%endif - -%if %{with_bpftool} - -%package -n bpftool -Summary: Inspection and simple manipulation of eBPF programs and maps -License: GPLv2 -%description -n bpftool -This package contains the bpftool, which allows inspection and simple -manipulation of eBPF programs and maps. - -%package -n bpftool-debuginfo -Summary: Debug information for package bpftool -Group: Development/Debug -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release} -AutoReqProv: no -%description -n bpftool-debuginfo -This package provides debug information for the bpftool package. - -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{_sbindir}/bpftool(\.debug)?|XXX' -o bpftool-debuginfo.list} - -# with_bpftool -%endif - -%if %{with_selftests} - -%package selftests-internal -Summary: Kernel samples and selftests -License: GPLv2 -Requires: binutils, bpftool, iproute-tc, nmap-ncat, python3 -%description selftests-internal -Kernel sample programs and selftests. - -# Note that this pattern only works right to match the .build-id -# symlinks because of the trailing nonmatching alternation and -# the leading .*, because of find-debuginfo.sh's buggy handling -# of matching the pattern against the symlinks file. -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{_libexecdir}/(ksamples|kselftests)/.*|XXX' -o selftests-debuginfo.list} - -# with_selftests -%endif - -%if %{with_gcov} -%package gcov -Summary: gcov graph and source files for coverage data collection. -%description gcov -kernel-gcov includes the gcov graph and source files for gcov coverage collection. -%endif - -%package -n kernel-abi-stablelists -Summary: The Red Hat Enterprise Linux kernel ABI symbol stablelists -AutoReqProv: no -%description -n kernel-abi-stablelists -The kABI package contains information pertaining to the Red Hat Enterprise -Linux kernel ABI, including lists of kernel symbols that are needed by -external Linux kernel modules, and a yum plugin to aid enforcement. - -%if %{with_kabidw_base} -%package kernel-kabidw-base-internal -Summary: The baseline dataset for kABI verification using DWARF data -Group: System Environment/Kernel -AutoReqProv: no -%description kernel-kabidw-base-internal -The package contains data describing the current ABI of the Red Hat Enterprise -Linux kernel, suitable for the kabi-dw tool. -%endif - -# -# This macro creates a kernel-<subpackage>-debuginfo package. -# %%kernel_debuginfo_package <subpackage> -# -# Explanation of the find_debuginfo_opts: We build multiple kernels (debug -# pae etc.) so the regex filters those kernels appropriately. We also -# have to package several binaries as part of kernel-devel but getting -# unique build-ids is tricky for these userspace binaries. We don't really -# care about debugging those so we just filter those out and remove it. -%define kernel_debuginfo_package() \ -%package %{?1:%{1}-}debuginfo\ -Summary: Debug information for package %{name}%{?1:-%{1}}\ -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release}\ -Provides: %{name}%{?1:-%{1}}-debuginfo-%{_target_cpu} = %{version}-%{release}\ -Provides: installonlypkg(kernel)\ -AutoReqProv: no\ -%description %{?1:%{1}-}debuginfo\ -This package provides debug information for package %{name}%{?1:-%{1}}.\ -This is required to use SystemTap with %{name}%{?1:-%{1}}-%{KVERREL}.\ -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} --keep-section '.BTF' -p '.*\/usr\/src\/kernels/.*|XXX' -o ignored-debuginfo.list -p '/.*/%%{KVERREL_RE}%{?1:[+]%{1}}/.*|/.*%%{KVERREL_RE}%{?1:\+%{1}}(\.debug)?' -o debuginfo%{?1}.list}\ -%{nil} - -# -# This macro creates a kernel-<subpackage>-devel package. -# %%kernel_devel_package [-m] <subpackage> <pretty-name> -# -%define kernel_devel_package(m) \ -%package %{?1:%{1}-}devel\ -Summary: Development package for building kernel modules to match the %{?2:%{2} }kernel\ -Provides: kernel%{?1:-%{1}}-devel-%{_target_cpu} = %{version}-%{release}\ -Provides: kernel-devel-%{_target_cpu} = %{version}-%{release}%{?1:+%{1}}\ -Provides: kernel-devel-uname-r = %{KVERREL}%{?1:+%{1}}\ -Provides: installonlypkg(kernel)\ -AutoReqProv: no\ -Requires(pre): findutils\ -Requires: findutils\ -Requires: perl-interpreter\ -Requires: openssl-devel\ -Requires: elfutils-libelf-devel\ -Requires: bison\ -Requires: flex\ -Requires: make\ -Requires: gcc\ -%if %{-m:1}%{!-m:0}\ -Requires: kernel-devel-uname-r = %{KVERREL}\ -%endif\ -%description %{?1:%{1}-}devel\ -This package provides kernel headers and makefiles sufficient to build modules\ -against the %{?2:%{2} }kernel package.\ -%{nil} - -# -# This macro creates an empty kernel-<subpackage>-devel-matched package that -# requires both the core and devel packages locked on the same version. -# %%kernel_devel_matched_package [-m] <subpackage> <pretty-name> -# -%define kernel_devel_matched_package(m) \ -%package %{?1:%{1}-}devel-matched\ -Summary: Meta package to install matching core and devel packages for a given %{?2:%{2} }kernel\ -Requires: kernel%{?1:-%{1}}-devel = %{version}-%{release}\ -Requires: kernel%{?1:-%{1}}-core = %{version}-%{release}\ -%description %{?1:%{1}-}devel-matched\ -This meta package is used to install matching core and devel packages for a given %{?2:%{2} }kernel.\ -%{nil} - -# -# kernel-<variant>-ipaclones-internal package -# -%define kernel_ipaclones_package() \ -%package %{?1:%{1}-}ipaclones-internal\ -Summary: *.ipa-clones files generated by -fdump-ipa-clones for kernel%{?1:-%{1}}\ -Group: System Environment/Kernel\ -AutoReqProv: no\ -%description %{?1:%{1}-}ipaclones-internal\ -This package provides *.ipa-clones files.\ -%{nil} - -# -# This macro creates a kernel-<subpackage>-modules-internal package. -# %%kernel_modules_internal_package <subpackage> <pretty-name> -# -%define kernel_modules_internal_package() \ -%package %{?1:%{1}-}modules-internal\ -Summary: Extra kernel modules to match the %{?2:%{2} }kernel\ -Group: System Environment/Kernel\ -Provides: kernel%{?1:-%{1}}-modules-internal-%{_target_cpu} = %{version}-%{release}\ -Provides: kernel%{?1:-%{1}}-modules-internal-%{_target_cpu} = %{version}-%{release}%{?1:+%{1}}\ -Provides: kernel%{?1:-%{1}}-modules-internal = %{version}-%{release}%{?1:+%{1}}\ -Provides: installonlypkg(kernel-module)\ -Provides: kernel%{?1:-%{1}}-modules-internal-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel%{?1:-%{1}}-modules-uname-r = %{KVERREL}%{?1:+%{1}}\ -AutoReq: no\ -AutoProv: yes\ -%description %{?1:%{1}-}modules-internal\ -This package provides kernel modules for the %{?2:%{2} }kernel package for Red Hat internal usage.\ -%{nil} - -# -# This macro creates a kernel-<subpackage>-modules-extra package. -# %%kernel_modules_extra_package [-m] <subpackage> <pretty-name> -# -%define kernel_modules_extra_package(m) \ -%package %{?1:%{1}-}modules-extra\ -Summary: Extra kernel modules to match the %{?2:%{2} }kernel\ -Provides: kernel%{?1:-%{1}}-modules-extra-%{_target_cpu} = %{version}-%{release}\ -Provides: kernel%{?1:-%{1}}-modules-extra-%{_target_cpu} = %{version}-%{release}%{?1:+%{1}}\ -Provides: kernel%{?1:-%{1}}-modules-extra = %{version}-%{release}%{?1:+%{1}}\ -Provides: installonlypkg(kernel-module)\ -Provides: kernel%{?1:-%{1}}-modules-extra-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel%{?1:-%{1}}-modules-uname-r = %{KVERREL}%{?1:+%{1}}\ -%if %{-m:1}%{!-m:0}\ -Requires: kernel-modules-extra-uname-r = %{KVERREL}\ -%endif\ -AutoReq: no\ -AutoProv: yes\ -%description %{?1:%{1}-}modules-extra\ -This package provides less commonly used kernel modules for the %{?2:%{2} }kernel package.\ -%{nil} - -# -# This macro creates a kernel-<subpackage>-modules package. -# %%kernel_modules_package [-m] <subpackage> <pretty-name> -# -%define kernel_modules_package(m) \ -%package %{?1:%{1}-}modules\ -Summary: kernel modules to match the %{?2:%{2}-}core kernel\ -Provides: kernel%{?1:-%{1}}-modules-%{_target_cpu} = %{version}-%{release}\ -Provides: kernel-modules-%{_target_cpu} = %{version}-%{release}%{?1:+%{1}}\ -Provides: kernel-modules = %{version}-%{release}%{?1:+%{1}}\ -Provides: installonlypkg(kernel-module)\ -Provides: kernel%{?1:-%{1}}-modules-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel-uname-r = %{KVERREL}%{?1:+%{1}}\ -%if %{-m:1}%{!-m:0}\ -Requires: kernel-modules-uname-r = %{KVERREL}\ -%endif\ -AutoReq: no\ -AutoProv: yes\ -%description %{?1:%{1}-}modules\ -This package provides commonly used kernel modules for the %{?2:%{2}-}core kernel package.\ -%{nil} - -# -# this macro creates a kernel-<subpackage> meta package. -# %%kernel_meta_package <subpackage> -# -%define kernel_meta_package() \ -%package %{1}\ -summary: kernel meta-package for the %{1} kernel\ -Requires: kernel-%{1}-core-uname-r = %{KVERREL}+%{1}\ -Requires: kernel-%{1}-modules-uname-r = %{KVERREL}+%{1}\ -Provides: installonlypkg(kernel)\ -%description %{1}\ -The meta-package for the %{1} kernel\ -%{nil} - -# -# This macro creates a kernel-<subpackage> and its -devel and -debuginfo too. -# %%define variant_summary The Linux kernel compiled for <configuration> -# %%kernel_variant_package [-n <pretty-name>] [-m] <subpackage> -# -%define kernel_variant_package(n:m) \ -%package %{?1:%{1}-}core\ -Summary: %{variant_summary}\ -Provides: kernel-%{?1:%{1}-}core-uname-r = %{KVERREL}%{?1:+%{1}}\ -Provides: installonlypkg(kernel)\ -%if %{-m:1}%{!-m:0}\ -Requires: kernel-core-uname-r = %{KVERREL}\ -%endif\ -%{expand:%%kernel_reqprovconf}\ -%if %{?1:1} %{!?1:0} \ -%{expand:%%kernel_meta_package %{?1:%{1}}}\ -%endif\ -%{expand:%%kernel_devel_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}} %{-m:%{-m}}}\ -%{expand:%%kernel_devel_matched_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}} %{-m:%{-m}}}\ -%{expand:%%kernel_modules_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}} %{-m:%{-m}}}\ -%{expand:%%kernel_modules_extra_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}} %{-m:%{-m}}}\ -%if %{-m:0}%{!-m:1}\ -%{expand:%%kernel_modules_internal_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}}}\ -%{expand:%%kernel_debuginfo_package %{?1:%{1}}}\ -%endif\ -%{nil} - -# Now, each variant package. - -%if %{with_pae} -%define variant_summary The Linux kernel compiled for Cortex-A15 -%kernel_variant_package lpae -%description lpae-core -This package includes a version of the Linux kernel with support for -Cortex-A15 devices with LPAE and HW virtualisation support -%endif - -%if %{with_zfcpdump} -%define variant_summary The Linux kernel compiled for zfcpdump usage -%kernel_variant_package zfcpdump -%description zfcpdump-core -The kernel package contains the Linux kernel (vmlinuz) for use by the -zfcpdump infrastructure. -# with_zfcpdump -%endif - -%define variant_summary The Linux kernel compiled with extra debugging enabled -%if !%{debugbuildsenabled} -%kernel_variant_package -m debug -%else -%kernel_variant_package debug -%endif -%description debug-core -The kernel package contains the Linux kernel (vmlinuz), the core of any -Linux operating system. The kernel handles the basic functions -of the operating system: memory allocation, process allocation, device -input and output, etc. - -This variant of the kernel has numerous debugging options enabled. -It should only be installed when trying to gather additional information -on kernel bugs, as some of these options impact performance noticably. - -# And finally the main -core package - -%define variant_summary The Linux kernel -%kernel_variant_package -%description core -The kernel package contains the Linux kernel (vmlinuz), the core of any -Linux operating system. The kernel handles the basic functions -of the operating system: memory allocation, process allocation, device -input and output, etc. - -%if %{with_ipaclones} -%kernel_ipaclones_package -%endif - -%prep -# do a few sanity-checks for --with *only builds -%if %{with_baseonly} -%if !%{with_up} -echo "Cannot build --with baseonly, up build is disabled" -exit 1 -%endif -%endif - -# more sanity checking; do it quietly -if [ "%{patches}" != "%%{patches}" ] ; then - for patch in %{patches} ; do - if [ ! -f $patch ] ; then - echo "ERROR: Patch ${patch##/*/} listed in specfile but is missing" - exit 1 - fi - done -fi 2>/dev/null - -patch_command='patch -p1 -F1 -s' -ApplyPatch() -{ - local patch=$1 - shift - if [ ! -f $RPM_SOURCE_DIR/$patch ]; then - exit 1 - fi - if ! grep -E "^Patch[0-9]+: $patch\$" %{_specdir}/${RPM_PACKAGE_NAME}.spec ; then - if [ "${patch:0:8}" != "patch-%{kversion}." ] ; then - echo "ERROR: Patch $patch not listed as a source patch in specfile" - exit 1 - fi - fi 2>/dev/null - case "$patch" in - *.bz2) bunzip2 < "$RPM_SOURCE_DIR/$patch" | $patch_command ${1+"$@"} ;; - *.gz) gunzip < "$RPM_SOURCE_DIR/$patch" | $patch_command ${1+"$@"} ;; - *.xz) unxz < "$RPM_SOURCE_DIR/$patch" | $patch_command ${1+"$@"} ;; - *) $patch_command ${1+"$@"} < "$RPM_SOURCE_DIR/$patch" ;; - esac -} - -# don't apply patch if it's empty -ApplyOptionalPatch() -{ - local patch=$1 - shift - if [ ! -f $RPM_SOURCE_DIR/$patch ]; then - exit 1 - fi - local C=$(wc -l $RPM_SOURCE_DIR/$patch | awk '{print $1}') - if [ "$C" -gt 9 ]; then - ApplyPatch $patch ${1+"$@"} - fi -} - -%setup -q -n kernel-%{tarfile_release} -c -mv linux-%{tarfile_release} linux-%{KVERREL} - -cd linux-%{KVERREL} -cp -a %{SOURCE1} . - -%if !%{nopatches} - -ApplyOptionalPatch patch-%{patchversion}-redhat.patch -%endif - -ApplyOptionalPatch linux-kernel-test.patch - -# END OF PATCH APPLICATIONS - -# Any further pre-build tree manipulations happen here. - -chmod +x scripts/checkpatch.pl -mv COPYING COPYING-%{version}-%{release} - -# This Prevents scripts/setlocalversion from mucking with our version numbers. -touch .scmversion - -# Mangle /usr/bin/python shebangs to /usr/bin/python3 -# Mangle all Python shebangs to be Python 3 explicitly -# -p preserves timestamps -# -n prevents creating ~backup files -# -i specifies the interpreter for the shebang -# This fixes errors such as -# *** ERROR: ambiguous python shebang in /usr/bin/kvm_stat: #!/usr/bin/python. Change it to python3 (or python2) explicitly. -# We patch all sources below for which we got a report/error. -pathfix.py -i "%{__python3} %{py3_shbang_opts}" -p -n \ - tools/kvm/kvm_stat/kvm_stat \ - scripts/show_delta \ - scripts/diffconfig \ - scripts/bloat-o-meter \ - scripts/jobserver-exec \ - tools \ - Documentation \ - scripts/clang-tools - -# only deal with configs if we are going to build for the arch -%ifnarch %nobuildarches - -if [ -L configs ]; then - rm -f configs -fi -mkdir configs -cd configs - -# Drop some necessary files from the source dir into the buildroot -cp $RPM_SOURCE_DIR/kernel-*.config . -cp %{SOURCE80} . -# merge.pl -cp %{SOURCE3000} . -# kernel-local -cp %{SOURCE3001} . -FLAVOR=%{primary_target} SPECVERSION=%{version} ./generate_all_configs.sh %{debugbuildsenabled} - -# Merge in any user-provided local config option changes -%ifnarch %nobuildarches -for i in %{all_arch_configs} -do - mv $i $i.tmp - ./merge.pl %{SOURCE3001} $i.tmp > $i -%if %{with_gcov} - echo "Merging with gcov options" - cat %{SOURCE75} - mv $i $i.tmp - ./merge.pl %{SOURCE75} $i.tmp > $i -%endif - rm $i.tmp -done -%endif - -%if %{with clang_lto} -for i in *aarch64*.config *x86_64*.config; do - sed -i 's/# CONFIG_LTO_CLANG_THIN is not set/CONFIG_LTO_CLANG_THIN=y/' $i - sed -i 's/CONFIG_LTO_NONE=y/# CONFIG_LTO_NONE is not set/' $i -done -%endif - -# Add DUP and kpatch certificates to system trusted keys for RHEL -%if 0%{?rhel} -%if %{signkernel}%{signmodules} -openssl x509 -inform der -in %{SOURCE100} -out rheldup3.pem -openssl x509 -inform der -in %{SOURCE101} -out rhelkpatch1.pem -cat rheldup3.pem rhelkpatch1.pem > ../certs/rhel.pem -%ifarch s390x ppc64le -openssl x509 -inform der -in %{secureboot_ca_0} -out secureboot.pem -cat secureboot.pem >> ../certs/rhel.pem -%endif -for i in *.config; do - sed -i 's@CONFIG_SYSTEM_TRUSTED_KEYS=""@CONFIG_SYSTEM_TRUSTED_KEYS="certs/rhel.pem"@' $i -done -%endif -%endif - -cp %{SOURCE81} . -OPTS="" -%if %{with_configchecks} - OPTS="$OPTS -w -n -c" -%endif -%if %{with clang_lto} -for opt in %{clang_make_opts}; do - OPTS="$OPTS -m $opt" -done -%endif -RHJOBS=$RPM_BUILD_NCPUS PACKAGE_NAME=kernel ./process_configs.sh $OPTS ${specversion} - -cp %{SOURCE82} . -RPM_SOURCE_DIR=$RPM_SOURCE_DIR ./update_scripts.sh %{primary_target} - -# We may want to override files from the primary target in case of building -# against a flavour of it (eg. centos not rhel), thus override it here if -# necessary -if [ "%{primary_target}" == "rhel" ]; then -%if 0%{?centos} - echo "Updating scripts/sources to centos version" - RPM_SOURCE_DIR=$RPM_SOURCE_DIR ./update_scripts.sh centos -%else - echo "Not updating scripts/sources to centos version" -%endif -fi - -# end of kernel config -%endif - -cd .. -# # End of Configs stuff - -# get rid of unwanted files resulting from patch fuzz -find . \( -name "*.orig" -o -name "*~" \) -delete >/dev/null - -# remove unnecessary SCM files -find . -name .gitignore -delete >/dev/null - -cd .. - -### -### build -### -%build - -%if %{with_sparse} -%define sparse_mflags C=1 -%endif - -cp_vmlinux() -{ - eu-strip --remove-comment -o "$2" "$1" -} - -# Note we need to disable these flags for cross builds because the flags -# from redhat-rpm-config assume that host == target so target arch -# flags cause issues with the host compiler. -%if !%{with_cross} -%define build_hostcflags %{?build_cflags} -%define build_hostldflags %{?build_ldflags} -%endif - -%define make %{__make} %{?cross_opts} %{?make_opts} HOSTCFLAGS="%{?build_hostcflags}" HOSTLDFLAGS="%{?build_hostldflags}" - -InitBuildVars() { - # Initialize the kernel .config file and create some variables that are - # needed for the actual build process. - - Variant=$1 - - # Pick the right kernel config file - Config=kernel-%{version}-%{_target_cpu}${Variant:+-${Variant}}.config - DevelDir=/usr/src/kernels/%{KVERREL}${Variant:++${Variant}} - - KernelVer=%{version}-%{release}.%{_target_cpu}${Variant:++${Variant}} - - # make sure EXTRAVERSION says what we want it to say - # Trim the release if this is a CI build, since KERNELVERSION is limited to 64 characters - ShortRel=$(perl -e "print \"%{release}\" =~ s/\.pr\.[0-9A-Fa-f]{32}//r") - perl -p -i -e "s/^EXTRAVERSION.*/EXTRAVERSION = -${ShortRel}.%{_target_cpu}${Variant:++${Variant}}/" Makefile - - # if pre-rc1 devel kernel, must fix up PATCHLEVEL for our versioning scheme - # if we are post rc1 this should match anyway so this won't matter - perl -p -i -e 's/^PATCHLEVEL.*/PATCHLEVEL = %{patchlevel}/' Makefile - - %{make} %{?_smp_mflags} mrproper - cp configs/$Config .config - - %if %{signkernel}%{signmodules} - cp configs/x509.genkey certs/. - %endif - - Arch=`head -1 .config | cut -b 3-` - echo USING ARCH=$Arch - - KCFLAGS="%{?kcflags}" - - # add kpatch flags for base kernel - if [ "$Variant" == "" ]; then - KCFLAGS="$KCFLAGS %{?kpatch_kcflags}" - fi -} - -BuildKernel() { - MakeTarget=$1 - KernelImage=$2 - DoVDSO=$3 - Variant=$4 - InstallName=${5:-vmlinuz} - - DoModules=1 - if [ "$Variant" = "zfcpdump" ]; then - DoModules=0 - fi - - # When the bootable image is just the ELF kernel, strip it. - # We already copy the unstripped file into the debuginfo package. - if [ "$KernelImage" = vmlinux ]; then - CopyKernel=cp_vmlinux - else - CopyKernel=cp - fi - - InitBuildVars $Variant - - echo BUILDING A KERNEL FOR ${Variant} %{_target_cpu}... - - %{make} ARCH=$Arch olddefconfig >/dev/null - - # This ensures build-ids are unique to allow parallel debuginfo - perl -p -i -e "s/^CONFIG_BUILD_SALT.*/CONFIG_BUILD_SALT=\"%{KVERREL}\"/" .config - %{make} ARCH=$Arch KCFLAGS="$KCFLAGS" WITH_GCOV="%{?with_gcov}" %{?_smp_mflags} $MakeTarget %{?sparse_mflags} %{?kernel_mflags} - if [ $DoModules -eq 1 ]; then - %{make} ARCH=$Arch KCFLAGS="$KCFLAGS" WITH_GCOV="%{?with_gcov}" %{?_smp_mflags} modules %{?sparse_mflags} || exit 1 - fi - - mkdir -p $RPM_BUILD_ROOT/%{image_install_path} - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/systemtap -%if %{with_debuginfo} - mkdir -p $RPM_BUILD_ROOT%{debuginfodir}/%{image_install_path} -%endif - -%ifarch %{arm} aarch64 - %{make} ARCH=$Arch dtbs INSTALL_DTBS_PATH=$RPM_BUILD_ROOT/%{image_install_path}/dtb-$KernelVer - %{make} ARCH=$Arch dtbs_install INSTALL_DTBS_PATH=$RPM_BUILD_ROOT/%{image_install_path}/dtb-$KernelVer - cp -r $RPM_BUILD_ROOT/%{image_install_path}/dtb-$KernelVer $RPM_BUILD_ROOT/lib/modules/$KernelVer/dtb - find arch/$Arch/boot/dts -name '*.dtb' -type f -delete -%endif - - # Start installing the results - install -m 644 .config $RPM_BUILD_ROOT/boot/config-$KernelVer - install -m 644 .config $RPM_BUILD_ROOT/lib/modules/$KernelVer/config - install -m 644 System.map $RPM_BUILD_ROOT/boot/System.map-$KernelVer - install -m 644 System.map $RPM_BUILD_ROOT/lib/modules/$KernelVer/System.map - - # We estimate the size of the initramfs because rpm needs to take this size - # into consideration when performing disk space calculations. (See bz #530778) - dd if=/dev/zero of=$RPM_BUILD_ROOT/boot/initramfs-$KernelVer.img bs=1M count=20 - - if [ -f arch/$Arch/boot/zImage.stub ]; then - cp arch/$Arch/boot/zImage.stub $RPM_BUILD_ROOT/%{image_install_path}/zImage.stub-$KernelVer || : - cp arch/$Arch/boot/zImage.stub $RPM_BUILD_ROOT/lib/modules/$KernelVer/zImage.stub-$KernelVer || : - fi - - %if %{signkernel} - if [ "$KernelImage" = vmlinux ]; then - # We can't strip and sign $KernelImage in place, because - # we need to preserve original vmlinux for debuginfo. - # Use a copy for signing. - $CopyKernel $KernelImage $KernelImage.tosign - KernelImage=$KernelImage.tosign - CopyKernel=cp - fi - - # Sign the image if we're using EFI - # aarch64 kernels are gziped EFI images - KernelExtension=${KernelImage##*.} - if [ "$KernelExtension" == "gz" ]; then - SignImage=${KernelImage%.*} - else - SignImage=$KernelImage - fi - - %ifarch x86_64 aarch64 - %pesign -s -i $SignImage -o vmlinuz.tmp -a %{secureboot_ca_0} -c %{secureboot_key_0} -n %{pesign_name_0} - %pesign -s -i vmlinuz.tmp -o vmlinuz.signed -a %{secureboot_ca_1} -c %{secureboot_key_1} -n %{pesign_name_1} - rm vmlinuz.tmp - %endif - %ifarch s390x ppc64le - if [ -x /usr/bin/rpm-sign ]; then - rpm-sign --key "%{pesign_name_0}" --lkmsign $SignImage --output vmlinuz.signed - elif [ $DoModules -eq 1 ]; then - chmod +x scripts/sign-file - ./scripts/sign-file -p sha256 certs/signing_key.pem certs/signing_key.x509 $SignImage vmlinuz.signed - else - mv $SignImage vmlinuz.signed - fi - %endif - - if [ ! -s vmlinuz.signed ]; then - echo "pesigning failed" - exit 1 - fi - mv vmlinuz.signed $SignImage - if [ "$KernelExtension" == "gz" ]; then - gzip -f9 $SignImage - fi - # signkernel - %endif - - $CopyKernel $KernelImage \ - $RPM_BUILD_ROOT/%{image_install_path}/$InstallName-$KernelVer - chmod 755 $RPM_BUILD_ROOT/%{image_install_path}/$InstallName-$KernelVer - cp $RPM_BUILD_ROOT/%{image_install_path}/$InstallName-$KernelVer $RPM_BUILD_ROOT/lib/modules/$KernelVer/$InstallName - - # hmac sign the kernel for FIPS - echo "Creating hmac file: $RPM_BUILD_ROOT/%{image_install_path}/.vmlinuz-$KernelVer.hmac" - ls -l $RPM_BUILD_ROOT/%{image_install_path}/$InstallName-$KernelVer - (cd $RPM_BUILD_ROOT/%{image_install_path} && sha512hmac $InstallName-$KernelVer) > $RPM_BUILD_ROOT/%{image_install_path}/.vmlinuz-$KernelVer.hmac; - cp $RPM_BUILD_ROOT/%{image_install_path}/.vmlinuz-$KernelVer.hmac $RPM_BUILD_ROOT/lib/modules/$KernelVer/.vmlinuz.hmac - - if [ $DoModules -eq 1 ]; then - # Override $(mod-fw) because we don't want it to install any firmware - # we'll get it from the linux-firmware package and we don't want conflicts - %{make} %{?_smp_mflags} ARCH=$Arch INSTALL_MOD_PATH=$RPM_BUILD_ROOT %{?_smp_mflags} modules_install KERNELRELEASE=$KernelVer mod-fw= - fi - -%if %{with_gcov} - # install gcov-needed files to $BUILDROOT/$BUILD/...: - # gcov_info->filename is absolute path - # gcno references to sources can use absolute paths (e.g. in out-of-tree builds) - # sysfs symlink targets (set up at compile time) use absolute paths to BUILD dir - find . \( -name '*.gcno' -o -name '*.[chS]' \) -exec install -D '{}' "$RPM_BUILD_ROOT/$(pwd)/{}" \; -%endif - - # add an a noop %%defattr statement 'cause rpm doesn't like empty file list files - echo '%%defattr(-,-,-)' > ../kernel${Variant:+-${Variant}}-ldsoconf.list - if [ $DoVDSO -ne 0 ]; then - %{make} ARCH=$Arch INSTALL_MOD_PATH=$RPM_BUILD_ROOT vdso_install KERNELRELEASE=$KernelVer - if [ -s ldconfig-kernel.conf ]; then - install -D -m 444 ldconfig-kernel.conf \ - $RPM_BUILD_ROOT/etc/ld.so.conf.d/kernel-$KernelVer.conf - echo /etc/ld.so.conf.d/kernel-$KernelVer.conf >> ../kernel${Variant:+-${Variant}}-ldsoconf.list - fi - - rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/vdso/.build-id - fi - - # And save the headers/makefiles etc for building modules against - # - # This all looks scary, but the end result is supposed to be: - # * all arch relevant include/ files - # * all Makefile/Kconfig files - # * all script/ files - - rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/source - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - (cd $RPM_BUILD_ROOT/lib/modules/$KernelVer ; ln -s build source) - # dirs for additional modules per module-init-tools, kbuild/modules.txt - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/updates - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/weak-updates - # CONFIG_KERNEL_HEADER_TEST generates some extra files in the process of - # testing so just delete - find . -name *.h.s -delete - # first copy everything - cp --parents `find -type f -name "Makefile*" -o -name "Kconfig*"` $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - if [ ! -e Module.symvers ]; then - touch Module.symvers - fi - cp Module.symvers $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp System.map $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - if [ -s Module.markers ]; then - cp Module.markers $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - fi - - # create the kABI metadata for use in packaging - # NOTENOTE: the name symvers is used by the rpm backend - # NOTENOTE: to discover and run the /usr/lib/rpm/fileattrs/kabi.attr - # NOTENOTE: script which dynamically adds exported kernel symbol - # NOTENOTE: checksums to the rpm metadata provides list. - # NOTENOTE: if you change the symvers name, update the backend too - echo "**** GENERATING kernel ABI metadata ****" - gzip -c9 < Module.symvers > $RPM_BUILD_ROOT/boot/symvers-$KernelVer.gz - cp $RPM_BUILD_ROOT/boot/symvers-$KernelVer.gz $RPM_BUILD_ROOT/lib/modules/$KernelVer/symvers.gz - -%if %{with_kabichk} - echo "**** kABI checking is enabled in kernel SPEC file. ****" - chmod 0755 $RPM_SOURCE_DIR/check-kabi - if [ -e $RPM_SOURCE_DIR/Module.kabi_%{_target_cpu}$Variant ]; then - cp $RPM_SOURCE_DIR/Module.kabi_%{_target_cpu}$Variant $RPM_BUILD_ROOT/Module.kabi - $RPM_SOURCE_DIR/check-kabi -k $RPM_BUILD_ROOT/Module.kabi -s Module.symvers || exit 1 - # for now, don't keep it around. - rm $RPM_BUILD_ROOT/Module.kabi - else - echo "**** NOTE: Cannot find reference Module.kabi file. ****" - fi -%endif - -%if %{with_kabidupchk} - echo "**** kABI DUP checking is enabled in kernel SPEC file. ****" - if [ -e $RPM_SOURCE_DIR/Module.kabi_dup_%{_target_cpu}$Variant ]; then - cp $RPM_SOURCE_DIR/Module.kabi_dup_%{_target_cpu}$Variant $RPM_BUILD_ROOT/Module.kabi - $RPM_SOURCE_DIR/check-kabi -k $RPM_BUILD_ROOT/Module.kabi -s Module.symvers || exit 1 - # for now, don't keep it around. - rm $RPM_BUILD_ROOT/Module.kabi - else - echo "**** NOTE: Cannot find DUP reference Module.kabi file. ****" - fi -%endif - -%if %{with_kabidw_base} - # Don't build kabi base for debug kernels - if [ "$Variant" != "zfcpdump" -a "$Variant" != "debug" ]; then - mkdir -p $RPM_BUILD_ROOT/kabi-dwarf - tar xjvf %{SOURCE301} -C $RPM_BUILD_ROOT/kabi-dwarf - - mkdir -p $RPM_BUILD_ROOT/kabi-dwarf/stablelists - tar xjvf %{SOURCE300} -C $RPM_BUILD_ROOT/kabi-dwarf/stablelists - - echo "**** GENERATING DWARF-based kABI baseline dataset ****" - chmod 0755 $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh - $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh generate \ - "$RPM_BUILD_ROOT/kabi-dwarf/stablelists/kabi-current/kabi_stablelist_%{_target_cpu}" \ - "$(pwd)" \ - "$RPM_BUILD_ROOT/kabidw-base/%{_target_cpu}${Variant:+.${Variant}}" || : - - rm -rf $RPM_BUILD_ROOT/kabi-dwarf - fi -%endif - -%if %{with_kabidwchk} - if [ "$Variant" != "zfcpdump" ]; then - mkdir -p $RPM_BUILD_ROOT/kabi-dwarf - tar xjvf %{SOURCE301} -C $RPM_BUILD_ROOT/kabi-dwarf - if [ -d "$RPM_BUILD_ROOT/kabi-dwarf/base/%{_target_cpu}${Variant:+.${Variant}}" ]; then - mkdir -p $RPM_BUILD_ROOT/kabi-dwarf/stablelists - tar xjvf %{SOURCE300} -C $RPM_BUILD_ROOT/kabi-dwarf/stablelists - - echo "**** GENERATING DWARF-based kABI dataset ****" - chmod 0755 $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh - $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh generate \ - "$RPM_BUILD_ROOT/kabi-dwarf/stablelists/kabi-current/kabi_stablelist_%{_target_cpu}" \ - "$(pwd)" \ - "$RPM_BUILD_ROOT/kabi-dwarf/base/%{_target_cpu}${Variant:+.${Variant}}.tmp" || : - - echo "**** kABI DWARF-based comparison report ****" - $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh compare \ - "$RPM_BUILD_ROOT/kabi-dwarf/base/%{_target_cpu}${Variant:+.${Variant}}" \ - "$RPM_BUILD_ROOT/kabi-dwarf/base/%{_target_cpu}${Variant:+.${Variant}}.tmp" || : - echo "**** End of kABI DWARF-based comparison report ****" - else - echo "**** Baseline dataset for kABI DWARF-BASED comparison report not found ****" - fi - - rm -rf $RPM_BUILD_ROOT/kabi-dwarf - fi -%endif - - # then drop all but the needed Makefiles/Kconfig files - rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts - rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include - cp .config $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a scripts $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts/tracing - rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts/spdxcheck.py - -%ifarch s390x - # CONFIG_EXPOLINE_EXTERN=y produces arch/s390/lib/expoline.o - # which is needed during external module build. - if [ -f arch/s390/lib/expoline.o ]; then - cp -a --parents arch/s390/lib/expoline.o $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - fi -%endif - - # Files for 'make scripts' to succeed with kernel-devel. - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/security/selinux/include - cp -a --parents security/selinux/include/classmap.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents security/selinux/include/initial_sid_to_string.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/tools/include/tools - cp -a --parents tools/include/tools/be_byteshift.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/tools/le_byteshift.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - - # Files for 'make prepare' to succeed with kernel-devel. - cp -a --parents tools/include/linux/compiler* $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/linux/types.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/build/Build.include $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/build/Build $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/build/fixdep.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/objtool/sync-check.sh $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/bpf/resolve_btfids $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - - cp --parents security/selinux/include/policycap_names.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents security/selinux/include/policycap.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - - cp -a --parents tools/include/asm-generic $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/linux $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/uapi/asm $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/uapi/asm-generic $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/uapi/linux $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/vdso $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/scripts/utilities.mak $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/lib/subcmd $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/lib/*.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/objtool/*.[ch] $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/objtool/Build $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/objtool/include/objtool/*.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/lib/bpf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/lib/bpf/Build $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - - if [ -f tools/objtool/objtool ]; then - cp -a tools/objtool/objtool $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/tools/objtool/ || : - fi - if [ -f tools/objtool/fixdep ]; then - cp -a tools/objtool/fixdep $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/tools/objtool/ || : - fi - if [ -d arch/$Arch/scripts ]; then - cp -a arch/$Arch/scripts $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/arch/%{_arch} || : - fi - if [ -f arch/$Arch/*lds ]; then - cp -a arch/$Arch/*lds $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/arch/%{_arch}/ || : - fi - if [ -f arch/%{asmarch}/kernel/module.lds ]; then - cp -a --parents arch/%{asmarch}/kernel/module.lds $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - fi - find $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts \( -iname "*.o" -o -iname "*.cmd" \) -exec rm -f {} + -%ifarch ppc64le - cp -a --parents arch/powerpc/lib/crtsavres.[So] $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ -%endif - if [ -d arch/%{asmarch}/include ]; then - cp -a --parents arch/%{asmarch}/include $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - fi -%ifarch aarch64 - # arch/arm64/include/asm/xen references arch/arm - cp -a --parents arch/arm/include/asm/xen $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - # arch/arm64/include/asm/opcodes.h references arch/arm - cp -a --parents arch/arm/include/asm/opcodes.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ -%endif - # include the machine specific headers for ARM variants, if available. -%ifarch %{arm} - if [ -d arch/%{asmarch}/mach-${Variant}/include ]; then - cp -a --parents arch/%{asmarch}/mach-${Variant}/include $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - fi - # include a few files for 'make prepare' - cp -a --parents arch/arm/tools/gen-mach-types $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/arm/tools/mach-types $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - -%endif - cp -a include $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include -%ifarch i686 x86_64 - # files for 'make prepare' to succeed with kernel-devel - cp -a --parents arch/x86/entry/syscalls/syscall_32.tbl $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/entry/syscalls/syscall_64.tbl $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs_32.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs_64.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs_common.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/purgatory/purgatory.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/purgatory/stack.S $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/purgatory/setup-x86_64.S $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/purgatory/entry64.S $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/boot/string.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/boot/string.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/boot/ctype.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - - cp -a --parents scripts/syscalltbl.sh $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents scripts/syscallhdr.sh $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - - cp -a --parents tools/arch/x86/include/asm $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/arch/x86/include/uapi/asm $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/objtool/arch/x86/lib $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/arch/x86/lib/ $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/arch/x86/tools/gen-insn-attr-x86.awk $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/objtool/arch/x86/ $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - -%endif - # Clean up intermediate tools files - find $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/tools \( -iname "*.o" -o -iname "*.cmd" \) -exec rm -f {} + - - # Make sure the Makefile, version.h, and auto.conf have a matching - # timestamp so that external modules can be built - touch -r $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/Makefile \ - $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include/generated/uapi/linux/version.h \ - $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include/config/auto.conf - -%if %{with_debuginfo} - eu-readelf -n vmlinux | grep "Build ID" | awk '{print $NF}' > vmlinux.id - cp vmlinux.id $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/vmlinux.id - - # - # save the vmlinux file for kernel debugging into the kernel-debuginfo rpm - # - mkdir -p $RPM_BUILD_ROOT%{debuginfodir}/lib/modules/$KernelVer - cp vmlinux $RPM_BUILD_ROOT%{debuginfodir}/lib/modules/$KernelVer - if [ -n "%{vmlinux_decompressor}" ]; then - eu-readelf -n %{vmlinux_decompressor} | grep "Build ID" | awk '{print $NF}' > vmlinux.decompressor.id - # Without build-id the build will fail. But for s390 the build-id - # wasn't added before 5.11. In case it is missing prefer not - # packaging the debuginfo over a build failure. - if [ -s vmlinux.decompressor.id ]; then - cp vmlinux.decompressor.id $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/vmlinux.decompressor.id - cp %{vmlinux_decompressor} $RPM_BUILD_ROOT%{debuginfodir}/lib/modules/$KernelVer/vmlinux.decompressor - fi - fi -%endif - - find $RPM_BUILD_ROOT/lib/modules/$KernelVer -name "*.ko" -type f >modnames - - # mark modules executable so that strip-to-file can strip them - xargs --no-run-if-empty chmod u+x < modnames - - # Generate a list of modules for block and networking. - - grep -F /drivers/ modnames | xargs --no-run-if-empty nm -upA | - sed -n 's,^.*/\([^/]*\.ko\): *U \(.*\)$,\1 \2,p' > drivers.undef - - collect_modules_list() - { - sed -r -n -e "s/^([^ ]+) \\.?($2)\$/\\1/p" drivers.undef | - LC_ALL=C sort -u > $RPM_BUILD_ROOT/lib/modules/$KernelVer/modules.$1 - if [ ! -z "$3" ]; then - sed -r -e "/^($3)\$/d" -i $RPM_BUILD_ROOT/lib/modules/$KernelVer/modules.$1 - fi - } - - collect_modules_list networking \ - 'register_netdev|ieee80211_register_hw|usbnet_probe|phy_driver_register|rt(l_|2x00)(pci|usb)_probe|register_netdevice' - collect_modules_list block \ - 'ata_scsi_ioctl|scsi_add_host|scsi_add_host_with_dma|blk_alloc_queue|blk_init_queue|register_mtd_blktrans|scsi_esp_register|scsi_register_device_handler|blk_queue_physical_block_size' 'pktcdvd.ko|dm-mod.ko' - collect_modules_list drm \ - 'drm_open|drm_init' - collect_modules_list modesetting \ - 'drm_crtc_init' - - # detect missing or incorrect license tags - ( find $RPM_BUILD_ROOT/lib/modules/$KernelVer -name '*.ko' | xargs /sbin/modinfo -l | \ - grep -E -v 'GPL( v2)?$|Dual BSD/GPL$|Dual MPL/GPL$|GPL and additional rights$' ) && exit 1 - - remove_depmod_files() - { - # remove files that will be auto generated by depmod at rpm -i time - pushd $RPM_BUILD_ROOT/lib/modules/$KernelVer/ - rm -f modules.{alias,alias.bin,builtin.alias.bin,builtin.bin} \ - modules.{dep,dep.bin,devname,softdep,symbols,symbols.bin} - popd - } - - remove_depmod_files - - # Identify modules in the kernel-modules-extras package - %{SOURCE20} $RPM_BUILD_ROOT lib/modules/$KernelVer $(realpath configs/mod-extra.list) - # Identify modules in the kernel-modules-extras package - %{SOURCE20} $RPM_BUILD_ROOT lib/modules/$KernelVer %{SOURCE84} internal - - # - # Generate the kernel-core and kernel-modules files lists - # - - # Copy the System.map file for depmod to use, and create a backup of the - # full module tree so we can restore it after we're done filtering - cp System.map $RPM_BUILD_ROOT/. - cp configs/filter-*.sh $RPM_BUILD_ROOT/. - pushd $RPM_BUILD_ROOT - mkdir restore - cp -r lib/modules/$KernelVer/* restore/. - - # don't include anything going into kernel-modules-extra in the file lists - xargs rm -rf < mod-extra.list - # don't include anything going int kernel-modules-internal in the file lists - xargs rm -rf < mod-internal.list - - if [ $DoModules -eq 1 ]; then - # Find all the module files and filter them out into the core and - # modules lists. This actually removes anything going into -modules - # from the dir. - find lib/modules/$KernelVer/kernel -name *.ko | sort -n > modules.list - ./filter-modules.sh modules.list %{_target_cpu} - rm filter-*.sh - - # Run depmod on the resulting module tree and make sure it isn't broken - depmod -b . -aeF ./System.map $KernelVer &> depmod.out - if [ -s depmod.out ]; then - echo "Depmod failure" - cat depmod.out - exit 1 - else - rm depmod.out - fi - else - # Ensure important files/directories exist to let the packaging succeed - echo '%%defattr(-,-,-)' > modules.list - echo '%%defattr(-,-,-)' > k-d.list - mkdir -p lib/modules/$KernelVer/kernel - # Add files usually created by make modules, needed to prevent errors - # thrown by depmod during package installation - touch lib/modules/$KernelVer/modules.order - touch lib/modules/$KernelVer/modules.builtin - fi - - remove_depmod_files - - # Go back and find all of the various directories in the tree. We use this - # for the dir lists in kernel-core - find lib/modules/$KernelVer/kernel -mindepth 1 -type d | sort -n > module-dirs.list - - # Cleanup - rm System.map - # Just "cp -r" can be very slow: here, it rewrites _existing files_ - # with open(O_TRUNC). Many filesystems synchronously wait for metadata - # update for such file rewrites (seen in strace as final close syscall - # taking a long time). On a rotational disk, cp was observed to take - # more than 5 minutes on ext4 and more than 15 minutes (!) on xfs. - # With --remove-destination, we avoid this, and copying - # (with enough RAM to cache it) takes 5 seconds: - cp -r --remove-destination restore/* lib/modules/$KernelVer/. - rm -rf restore - popd - - # Make sure the files lists start with absolute paths or rpmbuild fails. - # Also add in the dir entries - sed -e 's/^lib*/\/lib/' %{?zipsed} $RPM_BUILD_ROOT/k-d.list > ../kernel${Variant:+-${Variant}}-modules.list - sed -e 's/^lib*/%dir \/lib/' %{?zipsed} $RPM_BUILD_ROOT/module-dirs.list > ../kernel${Variant:+-${Variant}}-core.list - sed -e 's/^lib*/\/lib/' %{?zipsed} $RPM_BUILD_ROOT/modules.list >> ../kernel${Variant:+-${Variant}}-core.list - sed -e 's/^lib*/\/lib/' %{?zipsed} $RPM_BUILD_ROOT/mod-extra.list >> ../kernel${Variant:+-${Variant}}-modules-extra.list - sed -e 's/^lib*/\/lib/' %{?zipsed} $RPM_BUILD_ROOT/mod-internal.list >> ../kernel${Variant:+-${Variant}}-modules-internal.list - - # Cleanup - rm -f $RPM_BUILD_ROOT/k-d.list - rm -f $RPM_BUILD_ROOT/modules.list - rm -f $RPM_BUILD_ROOT/module-dirs.list - rm -f $RPM_BUILD_ROOT/mod-extra.list - rm -f $RPM_BUILD_ROOT/mod-internal.list - -%if %{signmodules} - if [ $DoModules -eq 1 ]; then - # Save the signing keys so we can sign the modules in __modsign_install_post - cp certs/signing_key.pem certs/signing_key.pem.sign${Variant:++${Variant}} - cp certs/signing_key.x509 certs/signing_key.x509.sign${Variant:++${Variant}} - fi -%endif - - # Move the devel headers out of the root file system - mkdir -p $RPM_BUILD_ROOT/usr/src/kernels - mv $RPM_BUILD_ROOT/lib/modules/$KernelVer/build $RPM_BUILD_ROOT/$DevelDir - - # This is going to create a broken link during the build, but we don't use - # it after this point. We need the link to actually point to something - # when kernel-devel is installed, and a relative link doesn't work across - # the F17 UsrMove feature. - ln -sf $DevelDir $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - -%ifnarch armv7hl - # Generate vmlinux.h and put it to kernel-devel path - bpftool btf dump file vmlinux format c > $RPM_BUILD_ROOT/$DevelDir/vmlinux.h -%endif - - # prune junk from kernel-devel - find $RPM_BUILD_ROOT/usr/src/kernels -name ".*.cmd" -delete - - # Red Hat UEFI Secure Boot CA cert, which can be used to authenticate the kernel - mkdir -p $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer - %ifarch x86_64 aarch64 - install -m 0644 %{secureboot_ca_0} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca-20200609.cer - install -m 0644 %{secureboot_ca_1} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca-20140212.cer - ln -s kernel-signing-ca-20200609.cer $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca.cer - %else - install -m 0644 %{secureboot_ca_0} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca.cer - %endif - %ifarch s390x ppc64le - if [ $DoModules -eq 1 ]; then - if [ -x /usr/bin/rpm-sign ]; then - install -m 0644 %{secureboot_key_0} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/%{signing_key_filename} - else - install -m 0644 certs/signing_key.x509.sign${Variant:++${Variant}} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca.cer - openssl x509 -in certs/signing_key.pem.sign${Variant:++${Variant}} -outform der -out $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/%{signing_key_filename} - chmod 0644 $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/%{signing_key_filename} - fi - fi - %endif - -%if %{with_ipaclones} - MAXPROCS=$(echo %{?_smp_mflags} | sed -n 's/-j\s*\([0-9]\+\)/\1/p') - if [ -z "$MAXPROCS" ]; then - MAXPROCS=1 - fi - if [ "$Variant" == "" ]; then - mkdir -p $RPM_BUILD_ROOT/$DevelDir-ipaclones - find . -name '*.ipa-clones' | xargs -i{} -r -n 1 -P $MAXPROCS install -m 644 -D "{}" "$RPM_BUILD_ROOT/$DevelDir-ipaclones/{}" - fi -%endif - -} - -### -# DO it... -### - -# prepare directories -rm -rf $RPM_BUILD_ROOT -mkdir -p $RPM_BUILD_ROOT/boot -mkdir -p $RPM_BUILD_ROOT%{_libexecdir} - -cd linux-%{KVERREL} - - -%if %{with_debug} -BuildKernel %make_target %kernel_image %{_use_vdso} debug -%endif - -%if %{with_zfcpdump} -BuildKernel %make_target %kernel_image %{_use_vdso} zfcpdump -%endif - -%if %{with_pae} -BuildKernel %make_target %kernel_image %{use_vdso} lpae -%endif - -%if %{with_up} -BuildKernel %make_target %kernel_image %{_use_vdso} -%endif - -%ifnarch noarch i686 -%if !%{with_debug} && !%{with_zfcpdump} && !%{with_pae} && !%{with_up} -# If only building the user space tools, then initialize the build environment -# and some variables so that the various userspace tools can be built. -InitBuildVars -%endif -%endif - -%ifarch aarch64 -%global perf_build_extra_opts CORESIGHT=1 -%endif -%global perf_make \ - %{__make} %{?make_opts} EXTRA_CFLAGS="${RPM_OPT_FLAGS}" LDFLAGS="%{__global_ldflags}" %{?cross_opts} -C tools/perf V=1 NO_PERF_READ_VDSO32=1 NO_PERF_READ_VDSOX32=1 WERROR=0 NO_LIBUNWIND=1 HAVE_CPLUS_DEMANGLE=1 NO_GTK2=1 NO_STRLCPY=1 NO_BIONIC=1 LIBBPF_DYNAMIC=1 LIBTRACEEVENT_DYNAMIC=1 %{?perf_build_extra_opts} prefix=%{_prefix} PYTHON=%{__python3} -%if %{with_perf} -# perf -# make sure check-headers.sh is executable -chmod +x tools/perf/check-headers.sh -%{perf_make} DESTDIR=$RPM_BUILD_ROOT all -%endif - -%global tools_make \ - CFLAGS="${RPM_OPT_FLAGS}" LDFLAGS="%{__global_ldflags}" %{make} %{?make_opts} - -%if %{with_tools} -%ifarch %{cpupowerarchs} -# cpupower -# make sure version-gen.sh is executable. -chmod +x tools/power/cpupower/utils/version-gen.sh -%{tools_make} %{?_smp_mflags} -C tools/power/cpupower CPUFREQ_BENCH=false DEBUG=false -%ifarch x86_64 - pushd tools/power/cpupower/debug/x86_64 - %{tools_make} %{?_smp_mflags} centrino-decode powernow-k8-decode - popd -%endif -%ifarch x86_64 - pushd tools/power/x86/x86_energy_perf_policy/ - %{tools_make} - popd - pushd tools/power/x86/turbostat - %{tools_make} - popd - pushd tools/power/x86/intel-speed-select - %{tools_make} - popd - pushd tools/arch/x86/intel_sdsi - %{tools_make} CFLAGS="${RPM_OPT_FLAGS}" - popd -%endif -%endif -pushd tools/thermal/tmon/ -%{tools_make} -popd -pushd tools/iio/ -%{tools_make} -popd -pushd tools/gpio/ -%{tools_make} -popd -# build VM tools -pushd tools/vm/ -%{tools_make} slabinfo page_owner_sort -popd -%endif - -if [ -f $DevelDir/vmlinux.h ]; then - RPM_VMLINUX_H=$DevelDir/vmlinux.h -fi - -%global bpftool_make \ - %{__make} EXTRA_CFLAGS="${RPM_OPT_FLAGS}" EXTRA_LDFLAGS="%{__global_ldflags}" DESTDIR=$RPM_BUILD_ROOT %{?make_opts} VMLINUX_H="${RPM_VMLINUX_H}" V=1 -%if %{with_bpftool} -pushd tools/bpf/bpftool -%{bpftool_make} -popd -%endif - -%if %{with_selftests} -# Unfortunately, samples/bpf/Makefile expects that the headers are installed -# in the source tree. We installed them previously to $RPM_BUILD_ROOT/usr -# but there's no way to tell the Makefile to take them from there. -%{make} %{?_smp_mflags} headers_install -%{make} %{?_smp_mflags} ARCH=$Arch V=1 M=samples/bpf/ || true - -# Prevent bpf selftests to build bpftool repeatedly: -export BPFTOOL=$(pwd)/tools/bpf/bpftool/bpftool - -pushd tools/testing/selftests -# We need to install here because we need to call make with ARCH set which -# doesn't seem possible to do in the install section. -%{make} %{?_smp_mflags} ARCH=$Arch V=1 TARGETS="bpf vm livepatch net net/forwarding net/mptcp netfilter tc-testing" SKIP_TARGETS="" INSTALL_PATH=%{buildroot}%{_libexecdir}/kselftests VMLINUX_H="${RPM_VMLINUX_H}" install - -# 'make install' for bpf is broken and upstream refuses to fix it. -# Install the needed files manually. -for dir in bpf bpf/no_alu32 bpf/progs; do - # In ARK, the rpm build continues even if some of the selftests - # cannot be built. It's not always possible to build selftests, - # as upstream sometimes dependens on too new llvm version or has - # other issues. If something did not get built, just skip it. - test -d $dir || continue - mkdir -p %{buildroot}%{_libexecdir}/kselftests/$dir - find $dir -maxdepth 1 -type f \( -executable -o -name '*.py' -o -name settings -o \ - -name 'btf_dump_test_case_*.c' -o -name '*.ko' -o \ - -name '*.o' -exec sh -c 'readelf -h "{}" | grep -q "^ Machine:.*BPF"' \; \) -print0 | \ - xargs -0 cp -t %{buildroot}%{_libexecdir}/kselftests/$dir || true -done -popd -export -n BPFTOOL -%endif - -%if %{with_doc} -# Make the HTML pages. -%{__make} PYTHON=/usr/bin/python3 htmldocs || %{doc_build_fail} - -# sometimes non-world-readable files sneak into the kernel source tree -chmod -R a=rX Documentation -find Documentation -type d | xargs chmod u+w -%endif - -# In the modsign case, we do 3 things. 1) We check the "variant" and hard -# code the value in the following invocations. This is somewhat sub-optimal -# but we're doing this inside of an RPM macro and it isn't as easy as it -# could be because of that. 2) We restore the .tmp_versions/ directory from -# the one we saved off in BuildKernel above. This is to make sure we're -# signing the modules we actually built/installed in that variant. 3) We -# grab the arch and invoke mod-sign.sh command to actually sign the modules. -# -# We have to do all of those things _after_ find-debuginfo runs, otherwise -# that will strip the signature off of the modules. -# -# Don't sign modules for the zfcpdump variant as it is monolithic. - -%define __modsign_install_post \ - if [ "%{signmodules}" -eq "1" ]; then \ - if [ "%{with_pae}" -ne "0" ]; then \ - %{modsign_cmd} certs/signing_key.pem.sign+lpae certs/signing_key.x509.sign+lpae $RPM_BUILD_ROOT/lib/modules/%{KVERREL}+lpae/ \ - fi \ - if [ "%{with_debug}" -ne "0" ]; then \ - %{modsign_cmd} certs/signing_key.pem.sign+debug certs/signing_key.x509.sign+debug $RPM_BUILD_ROOT/lib/modules/%{KVERREL}+debug/ \ - fi \ - if [ "%{with_up}" -ne "0" ]; then \ - %{modsign_cmd} certs/signing_key.pem.sign certs/signing_key.x509.sign $RPM_BUILD_ROOT/lib/modules/%{KVERREL}/ \ - fi \ - fi \ - if [ "%{zipmodules}" -eq "1" ]; then \ - find $RPM_BUILD_ROOT/lib/modules/ -type f -name '*.ko' | xargs -P${RPM_BUILD_NCPUS} -r xz; \ - fi \ -%{nil} - -### -### Special hacks for debuginfo subpackages. -### - -# This macro is used by %%install, so we must redefine it before that. -%define debug_package %{nil} - -%if %{with_debuginfo} - -%ifnarch noarch -%global __debug_package 1 -%files -f debugfiles.list debuginfo-common-%{_target_cpu} -%endif - -%endif - -# We don't want to package debuginfo for self-tests and samples but -# we have to delete them to avoid an error messages about unpackaged -# files. -# Delete the debuginfo for kernel-devel files -%define __remove_unwanted_dbginfo_install_post \ - if [ "%{with_selftests}" -ne "0" ]; then \ - rm -rf $RPM_BUILD_ROOT/usr/lib/debug/usr/libexec/ksamples; \ - rm -rf $RPM_BUILD_ROOT/usr/lib/debug/usr/libexec/kselftests; \ - fi \ - rm -rf $RPM_BUILD_ROOT/usr/lib/debug/usr/src; \ -%{nil} - -# -# Disgusting hack alert! We need to ensure we sign modules *after* all -# invocations of strip occur, which is in __debug_install_post if -# find-debuginfo.sh runs, and __os_install_post if not. -# -%define __spec_install_post \ - %{?__debug_package:%{__debug_install_post}}\ - %{__arch_install_post}\ - %{__os_install_post}\ - %{__remove_unwanted_dbginfo_install_post}\ - %{__modsign_install_post} - -### -### install -### - -%install - -cd linux-%{KVERREL} - -%if %{with_doc} -docdir=$RPM_BUILD_ROOT%{_datadir}/doc/kernel-doc-%{specversion}-%{pkgrelease} - -# copy the source over -mkdir -p $docdir -tar -h -f - --exclude=man --exclude='.*' -c Documentation | tar xf - -C $docdir - -# with_doc -%endif - -# We have to do the headers install before the tools install because the -# kernel headers_install will remove any header files in /usr/include that -# it doesn't install itself. - -%if %{with_headers} -# Install kernel headers -%{__make} ARCH=%{hdrarch} INSTALL_HDR_PATH=$RPM_BUILD_ROOT/usr headers_install - -find $RPM_BUILD_ROOT/usr/include \ - \( -name .install -o -name .check -o \ - -name ..install.cmd -o -name ..check.cmd \) -delete - -%endif - -%if %{with_cross_headers} -%if 0%{?fedora} -HDR_ARCH_LIST='arm arm64 powerpc s390 x86' -%else -HDR_ARCH_LIST='arm64 powerpc s390 x86' -%endif -mkdir -p $RPM_BUILD_ROOT/usr/tmp-headers - -for arch in $HDR_ARCH_LIST; do - mkdir $RPM_BUILD_ROOT/usr/tmp-headers/arch-${arch} - %{__make} ARCH=${arch} INSTALL_HDR_PATH=$RPM_BUILD_ROOT/usr/tmp-headers/arch-${arch} headers_install -done - -find $RPM_BUILD_ROOT/usr/tmp-headers \ - \( -name .install -o -name .check -o \ - -name ..install.cmd -o -name ..check.cmd \) -delete - -# Copy all the architectures we care about to their respective asm directories -for arch in $HDR_ARCH_LIST ; do - mkdir -p $RPM_BUILD_ROOT/usr/${arch}-linux-gnu/include - mv $RPM_BUILD_ROOT/usr/tmp-headers/arch-${arch}/include/* $RPM_BUILD_ROOT/usr/${arch}-linux-gnu/include/ -done - -rm -rf $RPM_BUILD_ROOT/usr/tmp-headers -%endif - -%if %{with_kernel_abi_stablelists} -# kabi directory -INSTALL_KABI_PATH=$RPM_BUILD_ROOT/lib/modules/ -mkdir -p $INSTALL_KABI_PATH - -# install kabi releases directories -tar xjvf %{SOURCE300} -C $INSTALL_KABI_PATH -# with_kernel_abi_stablelists -%endif - -%if %{with_perf} -# perf tool binary and supporting scripts/binaries -%{perf_make} DESTDIR=$RPM_BUILD_ROOT lib=%{_lib} install-bin -# remove the 'trace' symlink. -rm -f %{buildroot}%{_bindir}/trace - -# For both of the below, yes, this should be using a macro but right now -# it's hard coded and we don't actually want it anyway right now. -# Whoever wants examples can fix it up! - -# remove examples -rm -rf %{buildroot}/usr/lib/perf/examples -rm -rf %{buildroot}/usr/lib/perf/include - -# python-perf extension -%{perf_make} DESTDIR=$RPM_BUILD_ROOT install-python_ext - -# perf man pages (note: implicit rpm magic compresses them later) -mkdir -p %{buildroot}/%{_mandir}/man1 -%{perf_make} DESTDIR=$RPM_BUILD_ROOT install-man - -# remove any tracevent files, eg. its plugins still gets built and installed, -# even if we build against system's libtracevent during perf build (by setting -# LIBTRACEEVENT_DYNAMIC=1 above in perf_make macro). Those files should already -# ship with libtraceevent package. -rm -rf %{buildroot}%{_libdir}/traceevent -%endif - -%if %{with_tools} -%ifarch %{cpupowerarchs} -%{make} -C tools/power/cpupower DESTDIR=$RPM_BUILD_ROOT libdir=%{_libdir} mandir=%{_mandir} CPUFREQ_BENCH=false install -rm -f %{buildroot}%{_libdir}/*.{a,la} -%find_lang cpupower -mv cpupower.lang ../ -%ifarch x86_64 - pushd tools/power/cpupower/debug/x86_64 - install -m755 centrino-decode %{buildroot}%{_bindir}/centrino-decode - install -m755 powernow-k8-decode %{buildroot}%{_bindir}/powernow-k8-decode - popd -%endif -chmod 0755 %{buildroot}%{_libdir}/libcpupower.so* -mkdir -p %{buildroot}%{_unitdir} %{buildroot}%{_sysconfdir}/sysconfig -install -m644 %{SOURCE2000} %{buildroot}%{_unitdir}/cpupower.service -install -m644 %{SOURCE2001} %{buildroot}%{_sysconfdir}/sysconfig/cpupower -%endif -%ifarch x86_64 - mkdir -p %{buildroot}%{_mandir}/man8 - pushd tools/power/x86/x86_energy_perf_policy - %{tools_make} DESTDIR=%{buildroot} install - popd - pushd tools/power/x86/turbostat - %{tools_make} DESTDIR=%{buildroot} install - popd - pushd tools/power/x86/intel-speed-select - %{tools_make} DESTDIR=%{buildroot} install - popd - pushd tools/arch/x86/intel_sdsi - %{tools_make} CFLAGS="${RPM_OPT_FLAGS}" DESTDIR=%{buildroot} install - popd -%endif -pushd tools/thermal/tmon -%{tools_make} INSTALL_ROOT=%{buildroot} install -popd -pushd tools/iio -%{tools_make} DESTDIR=%{buildroot} install -popd -pushd tools/gpio -%{tools_make} DESTDIR=%{buildroot} install -popd -install -m644 -D %{SOURCE2002} %{buildroot}%{_sysconfdir}/logrotate.d/kvm_stat -pushd tools/kvm/kvm_stat -%{__make} INSTALL_ROOT=%{buildroot} install-tools -%{__make} INSTALL_ROOT=%{buildroot} install-man -install -m644 -D kvm_stat.service %{buildroot}%{_unitdir}/kvm_stat.service -popd -# install VM tools -pushd tools/vm/ -install -m755 slabinfo %{buildroot}%{_bindir}/slabinfo -install -m755 page_owner_sort %{buildroot}%{_bindir}/page_owner_sort -popd -%endif - -if [ -f $DevelDir/vmlinux.h ]; then - RPM_VMLINUX_H=$DevelDir/vmlinux.h -fi - -%if %{with_bpftool} -pushd tools/bpf/bpftool -%{bpftool_make} prefix=%{_prefix} bash_compdir=%{_sysconfdir}/bash_completion.d/ mandir=%{_mandir} install doc-install -popd -%endif - -%if %{with_selftests} -pushd samples -install -d %{buildroot}%{_libexecdir}/ksamples -# install bpf samples -pushd bpf -install -d %{buildroot}%{_libexecdir}/ksamples/bpf -find -type f -executable -exec install -m755 {} %{buildroot}%{_libexecdir}/ksamples/bpf \; -install -m755 *.sh %{buildroot}%{_libexecdir}/ksamples/bpf -# test_lwt_bpf.sh compiles test_lwt_bpf.c when run; this works only from the -# kernel tree. Just remove it. -rm %{buildroot}%{_libexecdir}/ksamples/bpf/test_lwt_bpf.sh -install -m644 *_kern.o %{buildroot}%{_libexecdir}/ksamples/bpf || true -install -m644 tcp_bpf.readme %{buildroot}%{_libexecdir}/ksamples/bpf -popd -# install pktgen samples -pushd pktgen -install -d %{buildroot}%{_libexecdir}/ksamples/pktgen -find . -type f -executable -exec install -m755 {} %{buildroot}%{_libexecdir}/ksamples/pktgen/{} \; -find . -type f ! -executable -exec install -m644 {} %{buildroot}%{_libexecdir}/ksamples/pktgen/{} \; -popd -popd -# install vm selftests -pushd tools/testing/selftests/vm -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/vm/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/vm/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/vm/{} \; -popd -# install drivers/net/mlxsw selftests -pushd tools/testing/selftests/drivers/net/mlxsw -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/drivers/net/mlxsw/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/drivers/net/mlxsw/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/drivers/net/mlxsw/{} \; -popd -# install drivers/net/netdevsim selftests -pushd tools/testing/selftests/drivers/net/netdevsim -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/drivers/net/netdevsim/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/drivers/net/netdevsim/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/drivers/net/netdevsim/{} \; -popd -# install net/forwarding selftests -pushd tools/testing/selftests/net/forwarding -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/net/forwarding/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/net/forwarding/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/net/forwarding/{} \; -popd -# install net/mptcp selftests -pushd tools/testing/selftests/net/mptcp -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/net/mptcp/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/net/mptcp/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/net/mptcp/{} \; -popd -# install tc-testing selftests -pushd tools/testing/selftests/tc-testing -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/tc-testing/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/tc-testing/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/tc-testing/{} \; -popd -# install livepatch selftests -pushd tools/testing/selftests/livepatch -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/livepatch/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/livepatch/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/livepatch/{} \; -popd -# install netfilter selftests -pushd tools/testing/selftests/netfilter -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/netfilter/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/netfilter/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/netfilter/{} \; -popd -%endif - -### -### clean -### - -### -### scripts -### - -%if %{with_tools} -%post -n kernel-tools-libs -/sbin/ldconfig - -%postun -n kernel-tools-libs -/sbin/ldconfig -%endif - -# -# This macro defines a %%post script for a kernel*-devel package. -# %%kernel_devel_post [<subpackage>] -# Note we don't run hardlink if ostree is in use, as ostree is -# a far more sophisticated hardlink implementation. -# https://github.com/projectatomic/rpm-ostree/commit/58a79056a889be8814aa51f507b2c7a4dccee526 -# -# The deletion of *.hardlink-temporary files is a temporary workaround -# for this bug in the hardlink binary (fixed in util-linux 2.38): -# https://github.com/util-linux/util-linux/issues/1602 -# -%define kernel_devel_post() \ -%{expand:%%post %{?1:%{1}-}devel}\ -if [ -f /etc/sysconfig/kernel ]\ -then\ - . /etc/sysconfig/kernel || exit $?\ -fi\ -if [ "$HARDLINK" != "no" -a -x /usr/bin/hardlink -a ! -e /run/ostree-booted ] \ -then\ - (cd /usr/src/kernels/%{KVERREL}%{?1:+%{1}} &&\ - /usr/bin/find . -type f | while read f; do\ - hardlink -c /usr/src/kernels/*%{?dist}.*/$f $f > /dev/null\ - done;\ - /usr/bin/find /usr/src/kernels -type f -name '*.hardlink-temporary' -delete\ - )\ -fi\ -%{nil} - -# -# This macro defines a %%post script for a kernel*-modules-extra package. -# It also defines a %%postun script that does the same thing. -# %%kernel_modules_extra_post [<subpackage>] -# -%define kernel_modules_extra_post() \ -%{expand:%%post %{?1:%{1}-}modules-extra}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil}\ -%{expand:%%postun %{?1:%{1}-}modules-extra}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil} - -# -# This macro defines a %%post script for a kernel*-modules-internal package. -# It also defines a %%postun script that does the same thing. -# %%kernel_modules_internal_post [<subpackage>] -# -%define kernel_modules_internal_post() \ -%{expand:%%post %{?1:%{1}-}modules-internal}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil}\ -%{expand:%%postun %{?1:%{1}-}modules-internal}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil} - -# -# This macro defines a %%post script for a kernel*-modules package. -# It also defines a %%postun script that does the same thing. -# %%kernel_modules_post [<subpackage>] -# -%define kernel_modules_post() \ -%{expand:%%post %{?1:%{1}-}modules}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -if [ ! -f %{_localstatedir}/lib/rpm-state/%{name}/installing_core_%{KVERREL}%{?1:+%{1}} ]; then\ - mkdir -p %{_localstatedir}/lib/rpm-state/%{name}\ - touch %{_localstatedir}/lib/rpm-state/%{name}/need_to_run_dracut_%{KVERREL}%{?1:+%{1}}\ -fi\ -%{nil}\ -%{expand:%%postun %{?1:%{1}-}modules}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil}\ -%{expand:%%posttrans %{?1:%{1}-}modules}\ -if [ -f %{_localstatedir}/lib/rpm-state/%{name}/need_to_run_dracut_%{KVERREL}%{?1:+%{1}} ]; then\ - rm -f %{_localstatedir}/lib/rpm-state/%{name}/need_to_run_dracut_%{KVERREL}%{?1:+%{1}}\ - echo "Running: dracut -f --kver %{KVERREL}%{?1:+%{1}}"\ - dracut -f --kver "%{KVERREL}%{?1:+%{1}}" || exit $?\ -fi\ -%{nil} - -# This macro defines a %%posttrans script for a kernel package. -# %%kernel_variant_posttrans [<subpackage>] -# More text can follow to go at the end of this variant's %%post. -# -%define kernel_variant_posttrans() \ -%{expand:%%posttrans %{?1:%{1}-}core}\ -%if 0%{!?fedora:1}\ -if [ -x %{_sbindir}/weak-modules ]\ -then\ - %{_sbindir}/weak-modules --add-kernel %{KVERREL}%{?1:+%{1}} || exit $?\ -fi\ -%endif\ -rm -f %{_localstatedir}/lib/rpm-state/%{name}/installing_core_%{KVERREL}%{?1:+%{1}}\ -/bin/kernel-install add %{KVERREL}%{?1:+%{1}} /lib/modules/%{KVERREL}%{?1:+%{1}}/vmlinuz || exit $?\ -%{nil} - -# -# This macro defines a %%post script for a kernel package and its devel package. -# %%kernel_variant_post [-v <subpackage>] [-r <replace>] -# More text can follow to go at the end of this variant's %%post. -# -%define kernel_variant_post(v:r:) \ -%{expand:%%kernel_devel_post %{?-v*}}\ -%{expand:%%kernel_modules_post %{?-v*}}\ -%{expand:%%kernel_modules_extra_post %{?-v*}}\ -%{expand:%%kernel_modules_internal_post %{?-v*}}\ -%{expand:%%kernel_variant_posttrans %{?-v*}}\ -%{expand:%%post %{?-v*:%{-v*}-}core}\ -%{-r:\ -if [ `uname -i` == "x86_64" -o `uname -i` == "i386" ] &&\ - [ -f /etc/sysconfig/kernel ]; then\ - /bin/sed -r -i -e 's/^DEFAULTKERNEL=%{-r*}$/DEFAULTKERNEL=kernel%{?-v:-%{-v*}}/' /etc/sysconfig/kernel || exit $?\ -fi}\ -mkdir -p %{_localstatedir}/lib/rpm-state/%{name}\ -touch %{_localstatedir}/lib/rpm-state/%{name}/installing_core_%{KVERREL}%{?1:+%{1}}\ -%{nil} - -# -# This macro defines a %%preun script for a kernel package. -# %%kernel_variant_preun <subpackage> -# -%define kernel_variant_preun() \ -%{expand:%%preun %{?1:%{1}-}core}\ -/bin/kernel-install remove %{KVERREL}%{?1:+%{1}} /lib/modules/%{KVERREL}%{?1:+%{1}}/vmlinuz || exit $?\ -if [ -x %{_sbindir}/weak-modules ]\ -then\ - %{_sbindir}/weak-modules --remove-kernel %{KVERREL}%{?1:+%{1}} || exit $?\ -fi\ -%{nil} - -%kernel_variant_preun -%kernel_variant_post -r kernel-smp - -%if %{with_pae} -%kernel_variant_preun lpae -%kernel_variant_post -v lpae -r (kernel|kernel-smp) -%endif - -%if %{with_debug} -%kernel_variant_preun debug -%kernel_variant_post -v debug -%endif - -%if %{with_zfcpdump} -%kernel_variant_preun zfcpdump -%kernel_variant_post -v zfcpdump -%endif - -if [ -x /sbin/ldconfig ] -then - /sbin/ldconfig -X || exit $? -fi - -### -### file lists -### - -%if %{with_headers} -%files headers -/usr/include/* -%endif - -%if %{with_cross_headers} -%files cross-headers -/usr/*-linux-gnu/include/* -%endif - -%if %{with_kernel_abi_stablelists} -%files -n kernel-abi-stablelists -/lib/modules/kabi-* -%endif - -%if %{with_kabidw_base} -%ifarch x86_64 s390x ppc64 ppc64le aarch64 -%files kernel-kabidw-base-internal -%defattr(-,root,root) -/kabidw-base/%{_target_cpu}/* -%endif -%endif - -# only some architecture builds need kernel-doc -%if %{with_doc} -%files doc -%defattr(-,root,root) -%{_datadir}/doc/kernel-doc-%{specversion}-%{pkgrelease}/Documentation/* -%dir %{_datadir}/doc/kernel-doc-%{specversion}-%{pkgrelease}/Documentation -%dir %{_datadir}/doc/kernel-doc-%{specversion}-%{pkgrelease} -%endif - -%if %{with_perf} -%files -n perf -%{_bindir}/perf -%{_libdir}/libperf-jvmti.so -%dir %{_libexecdir}/perf-core -%{_libexecdir}/perf-core/* -%{_datadir}/perf-core/* -%{_mandir}/man[1-8]/perf* -%{_sysconfdir}/bash_completion.d/perf -%doc linux-%{KVERREL}/tools/perf/Documentation/examples.txt -%{_docdir}/perf-tip/tips.txt - -%files -n python3-perf -%{python3_sitearch}/* - -%if %{with_debuginfo} -%files -f perf-debuginfo.list -n perf-debuginfo - -%files -f python3-perf-debuginfo.list -n python3-perf-debuginfo -%endif -# with_perf -%endif - -%if %{with_tools} -%ifnarch %{cpupowerarchs} -%files -n kernel-tools -%else -%files -n kernel-tools -f cpupower.lang -%{_bindir}/cpupower -%{_datadir}/bash-completion/completions/cpupower -%ifarch x86_64 -%{_bindir}/centrino-decode -%{_bindir}/powernow-k8-decode -%endif -%{_unitdir}/cpupower.service -%{_mandir}/man[1-8]/cpupower* -%config(noreplace) %{_sysconfdir}/sysconfig/cpupower -%ifarch x86_64 -%{_bindir}/x86_energy_perf_policy -%{_mandir}/man8/x86_energy_perf_policy* -%{_bindir}/turbostat -%{_mandir}/man8/turbostat* -%{_bindir}/intel-speed-select -%{_sbindir}/intel_sdsi -%endif -# cpupowerarchs -%endif -%{_bindir}/tmon -%{_bindir}/iio_event_monitor -%{_bindir}/iio_generic_buffer -%{_bindir}/lsiio -%{_bindir}/lsgpio -%{_bindir}/gpio-hammer -%{_bindir}/gpio-event-mon -%{_bindir}/gpio-watch -%{_mandir}/man1/kvm_stat* -%{_bindir}/kvm_stat -%{_unitdir}/kvm_stat.service -%config(noreplace) %{_sysconfdir}/logrotate.d/kvm_stat -%{_bindir}/page_owner_sort -%{_bindir}/slabinfo - -%if %{with_debuginfo} -%files -f kernel-tools-debuginfo.list -n kernel-tools-debuginfo -%endif - -%ifarch %{cpupowerarchs} -%files -n kernel-tools-libs -%{_libdir}/libcpupower.so.0 -%{_libdir}/libcpupower.so.0.0.1 - -%files -n kernel-tools-libs-devel -%{_libdir}/libcpupower.so -%{_includedir}/cpufreq.h -%endif -# with_tools -%endif - -%if %{with_bpftool} -%files -n bpftool -%{_sbindir}/bpftool -%{_sysconfdir}/bash_completion.d/bpftool -%{_mandir}/man8/bpftool-cgroup.8.gz -%{_mandir}/man8/bpftool-gen.8.gz -%{_mandir}/man8/bpftool-iter.8.gz -%{_mandir}/man8/bpftool-link.8.gz -%{_mandir}/man8/bpftool-map.8.gz -%{_mandir}/man8/bpftool-prog.8.gz -%{_mandir}/man8/bpftool-perf.8.gz -%{_mandir}/man8/bpftool.8.gz -%{_mandir}/man8/bpftool-net.8.gz -%{_mandir}/man8/bpftool-feature.8.gz -%{_mandir}/man8/bpftool-btf.8.gz -%{_mandir}/man8/bpftool-struct_ops.8.gz - -%if %{with_debuginfo} -%files -f bpftool-debuginfo.list -n bpftool-debuginfo -%defattr(-,root,root) -%endif -%endif - -%if %{with_selftests} -%files selftests-internal -%{_libexecdir}/ksamples -%{_libexecdir}/kselftests -%endif - -# empty meta-package -%ifnarch %nobuildarches noarch -%files -%endif - -%if %{with_gcov} -%ifnarch %nobuildarches noarch -%files gcov -%{_builddir} -%endif -%endif - -# This is %%{image_install_path} on an arch where that includes ELF files, -# or empty otherwise. -%define elf_image_install_path %{?kernel_image_elf:%{image_install_path}} - -# -# This macro defines the %%files sections for a kernel package -# and its devel and debuginfo packages. -# %%kernel_variant_files [-k vmlinux] <use_vdso> <condition> <subpackage> -# -%define kernel_variant_files(k:) \ -%if %{2}\ -%{expand:%%files -f kernel-%{?3:%{3}-}core.list %{?1:-f kernel-%{?3:%{3}-}ldsoconf.list} %{?3:%{3}-}core}\ -%{!?_licensedir:%global license %%doc}\ -%license linux-%{KVERREL}/COPYING-%{version}-%{release}\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/%{?-k:%{-k*}}%{!?-k:vmlinuz}\ -%ghost /%{image_install_path}/%{?-k:%{-k*}}%{!?-k:vmlinuz}-%{KVERREL}%{?3:+%{3}}\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/.vmlinuz.hmac \ -%ghost /%{image_install_path}/.vmlinuz-%{KVERREL}%{?3:+%{3}}.hmac \ -%ifarch %{arm} aarch64\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/dtb \ -%ghost /%{image_install_path}/dtb-%{KVERREL}%{?3:+%{3}} \ -%endif\ -%attr(0600, root, root) /lib/modules/%{KVERREL}%{?3:+%{3}}/System.map\ -%ghost %attr(0600, root, root) /boot/System.map-%{KVERREL}%{?3:+%{3}}\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/symvers.gz\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/config\ -%ghost %attr(0600, root, root) /boot/symvers-%{KVERREL}%{?3:+%{3}}.gz\ -%ghost %attr(0600, root, root) /boot/initramfs-%{KVERREL}%{?3:+%{3}}.img\ -%ghost %attr(0644, root, root) /boot/config-%{KVERREL}%{?3:+%{3}}\ -%dir /lib/modules\ -%dir /lib/modules/%{KVERREL}%{?3:+%{3}}\ -%dir /lib/modules/%{KVERREL}%{?3:+%{3}}/kernel\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/build\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/source\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/updates\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/weak-updates\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/systemtap\ -%{_datadir}/doc/kernel-keys/%{KVERREL}%{?3:+%{3}}\ -%if %{1}\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/vdso\ -%endif\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/modules.*\ -%{expand:%%files -f kernel-%{?3:%{3}-}modules.list %{?3:%{3}-}modules}\ -%{expand:%%files %{?3:%{3}-}devel}\ -%defverify(not mtime)\ -/usr/src/kernels/%{KVERREL}%{?3:+%{3}}\ -%{expand:%%files %{?3:%{3}-}devel-matched}\ -%{expand:%%files -f kernel-%{?3:%{3}-}modules-extra.list %{?3:%{3}-}modules-extra}\ -%config(noreplace) /etc/modprobe.d/*-blacklist.conf\ -%{expand:%%files -f kernel-%{?3:%{3}-}modules-internal.list %{?3:%{3}-}modules-internal}\ -%if %{with_debuginfo}\ -%ifnarch noarch\ -%{expand:%%files -f debuginfo%{?3}.list %{?3:%{3}-}debuginfo}\ -%endif\ -%endif\ -%if %{?3:1} %{!?3:0}\ -%{expand:%%files %{3}}\ -%endif\ -%endif\ -%{nil} - -%kernel_variant_files %{_use_vdso} %{with_up} -%kernel_variant_files %{_use_vdso} %{with_debug} debug -%if %{with_debug_meta} -%files debug -%files debug-core -%files debug-devel -%files debug-devel-matched -%files debug-modules -%files debug-modules-extra -%endif -%kernel_variant_files %{use_vdso} %{with_pae} lpae -%kernel_variant_files %{_use_vdso} %{with_zfcpdump} zfcpdump - -%define kernel_variant_ipaclones(k:) \ -%if %{1}\ -%if %{with_ipaclones}\ -%{expand:%%files %{?2:%{2}-}ipaclones-internal}\ -%defattr(-,root,root)\ -%defverify(not mtime)\ -/usr/src/kernels/%{KVERREL}%{?2:+%{2}}-ipaclones\ -%endif\ -%endif\ -%{nil} - -%kernel_variant_ipaclones %{with_up} - -# plz don't put in a version string unless you're going to tag -# and build. -# -# -%changelog Mon Mar 28 2022 Fedora Kernel Team <kernel-team@xxxxxxxxxxxxxxxxx> [5.17.0-0.rc0.78e36f3b0dae.6.test] - -### -# The following Emacs magic makes C-c C-e use UTC dates. -# Local Variables: -# rpm-change-log-uses-utc: t -# End: -### diff --git a/redhat/self-test/data/fedora-78e36f3b0dae.fc25.spec b/redhat/self-test/data/fedora-78e36f3b0dae.fc25.spec index blahblah..blahblah 100755 --- a/redhat/self-test/data/fedora-78e36f3b0dae.fc25.spec +++ b/redhat/self-test/data/fedora-78e36f3b0dae.fc25.spec @@ -1,125 +1,7 @@ -# All Global changes to build and install go here. -# Per the below section about __spec_install_pre, any rpm -# environment changes that affect %%install need to go -# here before the %%install macro is pre-built. - -# Disable LTO in userspace packages. -%global _lto_cflags %{nil} - -# Option to enable compiling with clang instead of gcc. -%bcond_with toolchain_clang - -%if %{with toolchain_clang} -%global toolchain clang -%endif - -# Compile the kernel with LTO (only supported when building with clang). -%bcond_with clang_lto - -%if %{with clang_lto} && %{without toolchain_clang} -{error:clang_lto requires --with toolchain_clang} -%endif - -# Cross compile on copr for arm -# See https://bugzilla.redhat.com/1879599 -%if 0%{?_with_cross_arm:1} -%global _target_cpu armv7hl -%global _arch arm -%global _build_arch arm -%global _with_cross 1 -%endif - -# The kernel's %%install section is special -# Normally the %%install section starts by cleaning up the BUILD_ROOT -# like so: -# -# %%__spec_install_pre %%{___build_pre}\ -# [ "$RPM_BUILD_ROOT" != "/" ] && rm -rf "${RPM_BUILD_ROOT}"\ -# mkdir -p `dirname "$RPM_BUILD_ROOT"`\ -# mkdir "$RPM_BUILD_ROOT"\ -# %%{nil} -# -# But because of kernel variants, the %%build section, specifically -# BuildKernel(), moves each variant to its final destination as the -# variant is built. This violates the expectation of the %%install -# section. As a result we snapshot the current env variables and -# purposely leave out the removal section. All global wide changes -# should be added above this line otherwise the %%install section -# will not see them. -%global __spec_install_pre %{___build_pre} - -# At the time of this writing (2019-03), RHEL8 packages use w2.xzdio -# compression for rpms (xz, level 2). -# Kernel has several large (hundreds of mbytes) rpms, they take ~5 mins -# to compress by single-threaded xz. Switch to threaded compression, -# and from level 2 to 3 to keep compressed sizes close to "w2" results. -# -# NB: if default compression in /usr/lib/rpm/redhat/macros ever changes, -# this one might need tweaking (e.g. if default changes to w3.xzdio, -# change below to w4T.xzdio): -# -# This is disabled on i686 as it triggers oom errors - -%ifnarch i686 -%define _binary_payload w3T.xzdio -%endif - -Summary: The Linux kernel -%if 0%{?fedora} -%define secure_boot_arch x86_64 -%else -%define secure_boot_arch x86_64 aarch64 s390x ppc64le -%endif - -# Signing for secure boot authentication -%ifarch %{secure_boot_arch} -%global signkernel 1 -%else -%global signkernel 0 -%endif - -# Sign modules on all arches -%global signmodules 1 - -# Compress modules only for architectures that build modules -%ifarch noarch -%global zipmodules 0 -%else -%global zipmodules 1 -%endif - -%if %{zipmodules} -%global zipsed -e 's/\.ko$/\.ko.xz/' -# for parallel xz processes, replace with 1 to go back to single process -%endif - -%if 0%{?fedora} -%define primary_target fedora -%else -%define primary_target rhel -%endif - -# -# genspec.sh variables -# - -# Include Fedora files %global include_fedora 1 -# Include RHEL files %global include_rhel 1 -# Provide Patchlist.changelog file %global patchlist_changelog 1 -# Set released_kernel to 1 when the upstream source tarball contains a -# kernel release. (This includes prepatch or "rc" releases.) -# Set released_kernel to 0 when the upstream source tarball contains an -# unreleased kernel development snapshot. %global released_kernel 0 -# Set debugbuildsenabled to 1 to build separate base and debug kernels -# (on supported architectures). The kernel-debug-* subpackages will -# contain the debug kernel. -# Set debugbuildsenabled to 0 to not build a separate debug kernel, but -# to build the base kernel using the debug configuration. (Specifying -# the --with-release option overrides this setting.) %define debugbuildsenabled 0 %define buildid .test %define specversion 5.17.0 @@ -127,2924 +9,6 @@ Summary: The Linux kernel %define pkgrelease 0.rc0.78e36f3b0dae.6.test %define kversion 5 %define tarfile_release 5.16-11523-g78e36f3b0dae -# This is needed to do merge window version magic %define patchlevel 17 -# allow pkg_release to have configurable %%{?dist} tag %define specrelease 0.rc0.78e36f3b0dae.6%{?buildid}%{?dist} - -# -# End of genspec.sh variables -# - -%define pkg_release %{specrelease} - -# libexec dir is not used by the linker, so the shared object there -# should not be exported to RPM provides -%global __provides_exclude_from ^%{_libexecdir}/kselftests - -# The following build options are enabled by default, but may become disabled -# by later architecture-specific checks. These can also be disabled by using -# --without <opt> in the rpmbuild command, or by forcing these values to 0. -# -# standard kernel -%define with_up %{?_without_up: 0} %{?!_without_up: 1} -# kernel PAE (only valid for ARM (lpae)) -%define with_pae %{?_without_pae: 0} %{?!_without_pae: 1} -# kernel-debug -%define with_debug %{?_without_debug: 0} %{?!_without_debug: 1} -# kernel-zfcpdump (s390 specific kernel for zfcpdump) -%define with_zfcpdump %{?_without_zfcpdump: 0} %{?!_without_zfcpdump: 1} -# kernel-doc -%define with_doc %{?_without_doc: 0} %{?!_without_doc: 1} -# kernel-headers -%define with_headers %{?_without_headers: 0} %{?!_without_headers: 1} -%define with_cross_headers %{?_without_cross_headers: 0} %{?!_without_cross_headers: 1} -# perf -%define with_perf %{?_without_perf: 0} %{?!_without_perf: 1} -# tools -%define with_tools %{?_without_tools: 0} %{?!_without_tools: 1} -# bpf tool -%define with_bpftool %{?_without_bpftool: 0} %{?!_without_bpftool: 1} -# kernel-debuginfo -%define with_debuginfo %{?_without_debuginfo: 0} %{?!_without_debuginfo: 1} -# kernel-abi-stablelists -%define with_kernel_abi_stablelists %{?_without_kernel_abi_stablelists: 0} %{?!_without_kernel_abi_stablelists: 1} -# internal samples and selftests -%define with_selftests %{?_without_selftests: 0} %{?!_without_selftests: 1} -# -# Additional options for user-friendly one-off kernel building: -# -# Only build the base kernel (--with baseonly): -%define with_baseonly %{?_with_baseonly: 1} %{?!_with_baseonly: 0} -# Only build the pae kernel (--with paeonly): -%define with_paeonly %{?_with_paeonly: 1} %{?!_with_paeonly: 0} -# Only build the debug kernel (--with dbgonly): -%define with_dbgonly %{?_with_dbgonly: 1} %{?!_with_dbgonly: 0} -# Control whether we perform a compat. check against published ABI. -%define with_kabichk %{?_without_kabichk: 0} %{?!_without_kabichk: 1} -# Temporarily disable kabi checks until RC. -%define with_kabichk 0 -# Control whether we perform a compat. check against DUP ABI. -%define with_kabidupchk %{?_with_kabidupchk: 1} %{?!_with_kabidupchk: 0} -# -# Control whether to run an extensive DWARF based kABI check. -# Note that this option needs to have baseline setup in SOURCE300. -%define with_kabidwchk %{?_without_kabidwchk: 0} %{?!_without_kabidwchk: 1} -%define with_kabidw_base %{?_with_kabidw_base: 1} %{?!_with_kabidw_base: 0} -# -# Control whether to install the vdso directories. -%define with_vdso_install %{?_without_vdso_install: 0} %{?!_without_vdso_install: 1} -# -# should we do C=1 builds with sparse -%define with_sparse %{?_with_sparse: 1} %{?!_with_sparse: 0} -# -# Cross compile requested? -%define with_cross %{?_with_cross: 1} %{?!_with_cross: 0} -# -# build a release kernel on rawhide -%define with_release %{?_with_release: 1} %{?!_with_release: 0} - -# verbose build, i.e. no silent rules and V=1 -%define with_verbose %{?_with_verbose: 1} %{?!_with_verbose: 0} - -# -# check for mismatched config options -%define with_configchecks %{?_without_configchecks: 0} %{?!_without_configchecks: 1} - -# -# gcov support -%define with_gcov %{?_with_gcov:1}%{?!_with_gcov:0} - -# -# ipa_clone support -%define with_ipaclones %{?_without_ipaclones: 0} %{?!_without_ipaclones: 1} - -# Want to build a vanilla kernel build without any non-upstream patches? -%define with_vanilla %{?_with_vanilla: 1} %{?!_with_vanilla: 0} - -%if 0%{?fedora} -# Kernel headers are being split out into a separate package -%define with_headers 0 -%define with_cross_headers 0 -# no ipa_clone for now -%define with_ipaclones 0 -# no stablelist -%define with_kernel_abi_stablelists 0 -# Fedora builds these separately -%define with_perf 0 -%define with_tools 0 -%define with_bpftool 0 -# selftests turns on bpftool -%define with_selftests 0 -%endif - -%if %{with_verbose} -%define make_opts V=1 -%else -%define make_opts -s -%endif - -%if %{with toolchain_clang} -%ifarch s390x ppc64le -%global llvm_ias 0 -%else -%global llvm_ias 1 -%endif -%global clang_make_opts HOSTCC=clang CC=clang LLVM_IAS=%{llvm_ias} -%if %{with clang_lto} -%global clang_make_opts %{clang_make_opts} LD=ld.lld HOSTLD=ld.lld AR=llvm-ar NM=llvm-nm HOSTAR=llvm-ar HOSTNM=llvm-nm -%endif -%global make_opts %{make_opts} %{clang_make_opts} -# clang does not support the -fdump-ipa-clones option -%global with_ipaclones 0 -%endif - -# turn off debug kernel and kabichk for gcov builds -%if %{with_gcov} -%define with_debug 0 -%define with_kabichk 0 -%define with_kabidupchk 0 -%define with_kabidwchk 0 -%define with_kabidw_base 0 -%define with_kernel_abi_stablelists 0 -%endif - -# turn off kABI DWARF-based check if we're generating the base dataset -%if %{with_kabidw_base} -%define with_kabidwchk 0 -%endif - -# kpatch_kcflags are extra compiler flags applied to base kernel -# -fdump-ipa-clones is enabled only for base kernels on selected arches -%if %{with_ipaclones} -%ifarch x86_64 ppc64le -%define kpatch_kcflags -fdump-ipa-clones -%else -%define with_ipaclones 0 -%endif -%endif - -%define make_target bzImage -%define image_install_path boot - -%define KVERREL %{version}-%{release}.%{_target_cpu} -%define KVERREL_RE %(echo %KVERREL | sed 's/+/[+]/g') -%define hdrarch %_target_cpu -%define asmarch %_target_cpu - -%if 0%{!?nopatches:1} -%define nopatches 0 -%endif - -%if %{with_vanilla} -%define nopatches 1 -%endif - -%if %{with_release} -%define debugbuildsenabled 1 -%endif - -%if !%{with_debuginfo} -%define _enable_debug_packages 0 -%endif -%define debuginfodir /usr/lib/debug -# Needed because we override almost everything involving build-ids -# and debuginfo generation. Currently we rely on the old alldebug setting. -%global _build_id_links alldebug - -# kernel PAE is only built on ARMv7 -%ifnarch armv7hl -%define with_pae 0 -%endif - -# if requested, only build base kernel -%if %{with_baseonly} -%define with_pae 0 -%define with_debug 0 -%define with_vdso_install 0 -%define with_perf 0 -%define with_tools 0 -%define with_bpftool 0 -%define with_kernel_abi_stablelists 0 -%define with_selftests 0 -%define with_cross 0 -%define with_cross_headers 0 -%define with_ipaclones 0 -%endif - -# if requested, only build pae kernel -%if %{with_paeonly} -%define with_up 0 -%define with_debug 0 -%endif - -# if requested, only build debug kernel -%if %{with_dbgonly} -%define with_up 0 -%define with_vdso_install 0 -%define with_perf 0 -%define with_tools 0 -%define with_bpftool 0 -%define with_kernel_abi_stablelists 0 -%define with_selftests 0 -%define with_cross 0 -%define with_cross_headers 0 -%define with_ipaclones 0 -%endif - -# turn off kABI DUP check and DWARF-based check if kABI check is disabled -%if !%{with_kabichk} -%define with_kabidupchk 0 -%define with_kabidwchk 0 -%endif - -%if %{with_vdso_install} -%define use_vdso 1 -%endif - -# selftests require bpftool to be built -%if %{with_selftests} -%define with_bpftool 1 -%endif - -%ifnarch noarch -%define with_kernel_abi_stablelists 0 -%endif - -# Overrides for generic default options - -# only package docs noarch -%ifnarch noarch -%define with_doc 0 -%define doc_build_fail true -%endif - -%if 0%{?fedora} -# don't do debug builds on anything but i686 and x86_64 -%ifnarch i686 x86_64 -%define with_debug 0 -%endif -%endif - -# don't build noarch kernels or headers (duh) -%ifarch noarch -%define with_up 0 -%define with_headers 0 -%define with_cross_headers 0 -%define with_tools 0 -%define with_perf 0 -%define with_bpftool 0 -%define with_selftests 0 -%define with_debug 0 -%define all_arch_configs kernel-%{version}-*.config -%endif - -# sparse blows up on ppc -%ifnarch ppc64le -%define with_sparse 0 -%endif - -# zfcpdump mechanism is s390 only -%ifnarch s390x -%define with_zfcpdump 0 -%endif - -%if 0%{?fedora} -# This is not for Fedora -%define with_zfcpdump 0 -%endif - -# Per-arch tweaks - -%ifarch i686 -%define asmarch x86 -%define hdrarch i386 -%define all_arch_configs kernel-%{version}-i?86*.config -%define kernel_image arch/x86/boot/bzImage -%endif - -%ifarch x86_64 -%define asmarch x86 -%define all_arch_configs kernel-%{version}-x86_64*.config -%define kernel_image arch/x86/boot/bzImage -%endif - -%ifarch ppc64le -%define asmarch powerpc -%define hdrarch powerpc -%define make_target vmlinux -%define kernel_image vmlinux -%define kernel_image_elf 1 -%define use_vdso 0 -%define all_arch_configs kernel-%{version}-ppc64le*.config -%endif - -%ifarch s390x -%define asmarch s390 -%define hdrarch s390 -%define all_arch_configs kernel-%{version}-s390x.config -%define kernel_image arch/s390/boot/bzImage -%define vmlinux_decompressor arch/s390/boot/compressed/vmlinux -%endif - -%ifarch %{arm} -%define all_arch_configs kernel-%{version}-arm*.config -%define skip_nonpae_vdso 1 -%define asmarch arm -%define hdrarch arm -%define make_target bzImage -%define kernel_image arch/arm/boot/zImage -# http://lists.infradead.org/pipermail/linux-arm-kernel/2012-March/091404.html -%define kernel_mflags KALLSYMS_EXTRA_PASS=1 -# we only build headers/perf/tools on the base arm arches -# just like we used to only build them on i386 for x86 -%ifnarch armv7hl -%define with_headers 0 -%define with_cross_headers 0 -%endif -# These currently don't compile on armv7 -%define with_selftests 0 -%endif - -%ifarch aarch64 -%define all_arch_configs kernel-%{version}-aarch64*.config -%define asmarch arm64 -%define hdrarch arm64 -%define make_target Image.gz -%define kernel_image arch/arm64/boot/Image.gz -%endif - -# Should make listnewconfig fail if there's config options -# printed out? -%if %{nopatches} -%define with_configchecks 0 -%endif - -# To temporarily exclude an architecture from being built, add it to -# %%nobuildarches. Do _NOT_ use the ExclusiveArch: line, because if we -# don't build kernel-headers then the new build system will no longer let -# us use the previous build of that package -- it'll just be completely AWOL. -# Which is a BadThing(tm). - -# We only build kernel-headers on the following... -%if 0%{?fedora} -%define nobuildarches i386 -%else -%define nobuildarches i386 i686 %{arm} -%endif - -%ifarch %nobuildarches -# disable BuildKernel commands -%define with_up 0 -%define with_debug 0 -%define with_pae 0 -%define with_zfcpdump 0 - -%define with_debuginfo 0 -%define with_perf 0 -%define with_tools 0 -%define with_bpftool 0 -%define with_selftests 0 -%define _enable_debug_packages 0 -%endif - -# Architectures we build tools/cpupower on -%if 0%{?fedora} -%define cpupowerarchs %{ix86} x86_64 ppc64le %{arm} aarch64 -%else -%define cpupowerarchs i686 x86_64 ppc64le aarch64 -%endif - -%if 0%{?use_vdso} - -%if 0%{?skip_nonpae_vdso} -%define _use_vdso 0 -%else -%define _use_vdso 1 -%endif - -%else -%define _use_vdso 0 -%endif - -# If build of debug packages is disabled, we need to know if we want to create -# meta debug packages or not, after we define with_debug for all specific cases -# above. So this must be at the end here, after all cases of with_debug or not. -%define with_debug_meta 0 -%if !%{debugbuildsenabled} -%if %{with_debug} -%define with_debug_meta 1 -%endif -%define with_debug 0 -%endif - - -# -# Packages that need to be installed before the kernel is, because the %%post -# scripts use them. -# -%define kernel_prereq coreutils, systemd >= 203-2, /usr/bin/kernel-install -%define initrd_prereq dracut >= 027 - - -Name: kernel -License: GPLv2 and Redistributable, no modification permitted -URL: https://www.kernel.org/ -Version: %{specversion} -Release: %{pkg_release} -# DO NOT CHANGE THE 'ExclusiveArch' LINE TO TEMPORARILY EXCLUDE AN ARCHITECTURE BUILD. -# SET %%nobuildarches (ABOVE) INSTEAD -%if 0%{?fedora} -ExclusiveArch: noarch x86_64 s390x %{arm} aarch64 ppc64le -%else -ExclusiveArch: noarch i386 i686 x86_64 s390x %{arm} aarch64 ppc64le -%endif -ExclusiveOS: Linux -%ifnarch %{nobuildarches} -Requires: kernel-core-uname-r = %{KVERREL} -Requires: kernel-modules-uname-r = %{KVERREL} -%endif - - -# -# List the packages used during the kernel build -# -BuildRequires: kmod, patch, bash, coreutils, tar, git-core, which -BuildRequires: bzip2, xz, findutils, gzip, m4, perl-interpreter, perl-Carp, perl-devel, perl-generators, make, diffutils, gawk -BuildRequires: gcc, binutils, redhat-rpm-config, hmaccalc, bison, flex, gcc-c++ -BuildRequires: net-tools, hostname, bc, elfutils-devel -BuildRequires: dwarves -BuildRequires: python3-devel -BuildRequires: gcc-plugin-devel -# glibc-static is required for a consistent build environment (specifically -# CONFIG_CC_CAN_LINK_STATIC=y). -BuildRequires: glibc-static -%ifnarch %{nobuildarches} noarch -BuildRequires: bpftool -%endif -%if %{with_headers} -BuildRequires: rsync -%endif -%if %{with_doc} -BuildRequires: xmlto, asciidoc, python3-sphinx, python3-sphinx_rtd_theme -%endif -%if %{with_sparse} -BuildRequires: sparse -%endif -%if %{with_perf} -BuildRequires: zlib-devel binutils-devel newt-devel perl(ExtUtils::Embed) bison flex xz-devel -BuildRequires: audit-libs-devel -BuildRequires: java-devel -BuildRequires: libbpf-devel -BuildRequires: libbabeltrace-devel -BuildRequires: libtraceevent-devel -%ifnarch %{arm} s390x -BuildRequires: numactl-devel -%endif -%ifarch aarch64 -BuildRequires: opencsd-devel >= 1.0.0 -%endif -%endif -%if %{with_tools} -BuildRequires: gettext ncurses-devel -BuildRequires: libcap-devel libcap-ng-devel -%ifnarch s390x -BuildRequires: pciutils-devel -%endif -%ifarch i686 x86_64 -BuildRequires: libnl3-devel -%endif -%endif -%if %{with_tools} || %{signmodules} || %{signkernel} -BuildRequires: openssl-devel -%endif -%if %{with_bpftool} -BuildRequires: python3-docutils -BuildRequires: zlib-devel binutils-devel -%endif -%if %{with_selftests} -BuildRequires: clang llvm -%ifnarch %{arm} -BuildRequires: numactl-devel -%endif -BuildRequires: libcap-devel libcap-ng-devel rsync libmnl-devel -%endif -BuildConflicts: rhbuildsys(DiskFree) < 500Mb -%if %{with_debuginfo} -BuildRequires: rpm-build, elfutils -BuildConflicts: rpm < 4.13.0.1-19 -BuildConflicts: dwarves < 1.13 -# Most of these should be enabled after more investigation -%undefine _include_minidebuginfo -%undefine _find_debuginfo_dwz_opts -%undefine _unique_build_ids -%undefine _unique_debug_names -%undefine _unique_debug_srcs -%undefine _debugsource_packages -%undefine _debuginfo_subpackages -%global _find_debuginfo_opts -r -%global _missing_build_ids_terminate_build 1 -%global _no_recompute_build_ids 1 -%endif -%if %{with_kabidwchk} || %{with_kabidw_base} -BuildRequires: kabi-dw -%endif - -%if %{signkernel}%{signmodules} -BuildRequires: openssl -%if %{signkernel} -# ELN uses Fedora signing process, so exclude -%if 0%{?rhel}%{?centos} && !0%{?eln} -BuildRequires: system-sb-certs -%endif -%ifarch x86_64 aarch64 -BuildRequires: nss-tools -BuildRequires: pesign >= 0.10-4 -%endif -%endif -%endif - -%if %{with_cross} -BuildRequires: binutils-%{_build_arch}-linux-gnu, gcc-%{_build_arch}-linux-gnu -%define cross_opts CROSS_COMPILE=%{_build_arch}-linux-gnu- -%define __strip %{_build_arch}-linux-gnu-strip -%endif - -# These below are required to build man pages -%if %{with_perf} -BuildRequires: xmlto -%endif -%if %{with_perf} || %{with_tools} -BuildRequires: asciidoc -%endif - -%if %{with toolchain_clang} -BuildRequires: clang -%endif - -%if %{with clang_lto} -BuildRequires: llvm -BuildRequires: lld -%endif - -# Because this is the kernel, it's hard to get a single upstream URL -# to represent the base without needing to do a bunch of patching. This -# tarball is generated from a src-git tree. If you want to see the -# exact git commit you can run -# -# xzcat -qq ${TARBALL} | git get-tar-commit-id -Source0: linux-%{tarfile_release}.tar.xz - -Source1: Makefile.rhelver - - -# Name of the packaged file containing signing key -%ifarch ppc64le -%define signing_key_filename kernel-signing-ppc.cer -%endif -%ifarch s390x -%define signing_key_filename kernel-signing-s390.cer -%endif - -%if %{?released_kernel} - -Source10: redhatsecurebootca5.cer -Source11: redhatsecurebootca1.cer -Source12: redhatsecureboot501.cer -Source13: redhatsecureboot301.cer -Source14: secureboot_s390.cer -Source15: secureboot_ppc.cer - -%define secureboot_ca_1 %{SOURCE10} -%define secureboot_ca_0 %{SOURCE11} -%ifarch x86_64 aarch64 -%define secureboot_key_1 %{SOURCE12} -%define pesign_name_1 redhatsecureboot501 -%define secureboot_key_0 %{SOURCE13} -%define pesign_name_0 redhatsecureboot301 -%endif -%ifarch s390x -%define secureboot_key_0 %{SOURCE14} -%define pesign_name_0 redhatsecureboot302 -%endif -%ifarch ppc64le -%define secureboot_key_0 %{SOURCE15} -%define pesign_name_0 redhatsecureboot303 -%endif - -# released_kernel -%else - -Source10: redhatsecurebootca4.cer -Source11: redhatsecurebootca2.cer -Source12: redhatsecureboot401.cer -Source13: redhatsecureboot003.cer - -%define secureboot_ca_1 %{SOURCE10} -%define secureboot_ca_0 %{SOURCE11} -%define secureboot_key_1 %{SOURCE12} -%define pesign_name_1 redhatsecureboot401 -%define secureboot_key_0 %{SOURCE13} -%define pesign_name_0 redhatsecureboot003 - -# released_kernel -%endif - -Source20: mod-denylist.sh -Source21: mod-sign.sh -Source22: parallel_xz.sh - -%define modsign_cmd %{SOURCE21} - -%if 0%{?include_rhel} -Source23: x509.genkey.rhel - -Source24: kernel-aarch64-rhel.config -Source25: kernel-aarch64-debug-rhel.config -Source26: mod-extra.list.rhel - -Source27: kernel-ppc64le-rhel.config -Source28: kernel-ppc64le-debug-rhel.config -Source29: kernel-s390x-rhel.config -Source30: kernel-s390x-debug-rhel.config -Source31: kernel-s390x-zfcpdump-rhel.config -Source32: kernel-x86_64-rhel.config -Source33: kernel-x86_64-debug-rhel.config - -Source34: filter-x86_64.sh.rhel -Source35: filter-armv7hl.sh.rhel -Source37: filter-aarch64.sh.rhel -Source38: filter-ppc64le.sh.rhel -Source39: filter-s390x.sh.rhel -Source40: filter-modules.sh.rhel - -Source41: x509.genkey.centos -%endif - -%if 0%{?include_fedora} -Source50: x509.genkey.fedora -Source51: mod-extra.list.fedora - -Source52: kernel-aarch64-fedora.config -Source53: kernel-aarch64-debug-fedora.config -Source54: kernel-armv7hl-fedora.config -Source55: kernel-armv7hl-debug-fedora.config -Source56: kernel-armv7hl-lpae-fedora.config -Source57: kernel-armv7hl-lpae-debug-fedora.config -Source60: kernel-ppc64le-fedora.config -Source61: kernel-ppc64le-debug-fedora.config -Source62: kernel-s390x-fedora.config -Source63: kernel-s390x-debug-fedora.config -Source64: kernel-x86_64-fedora.config -Source65: kernel-x86_64-debug-fedora.config - -Source67: filter-x86_64.sh.fedora -Source68: filter-armv7hl.sh.fedora -Source70: filter-aarch64.sh.fedora -Source71: filter-ppc64le.sh.fedora -Source72: filter-s390x.sh.fedora -Source73: filter-modules.sh.fedora -%endif - -Source75: partial-kgcov-snip.config -Source80: generate_all_configs.sh -Source81: process_configs.sh - -Source82: update_scripts.sh - -Source84: mod-internal.list - -Source100: rheldup3.x509 -Source101: rhelkpatch1.x509 - -Source200: check-kabi - -Source201: Module.kabi_aarch64 -Source202: Module.kabi_ppc64le -Source203: Module.kabi_s390x -Source204: Module.kabi_x86_64 - -Source210: Module.kabi_dup_aarch64 -Source211: Module.kabi_dup_ppc64le -Source212: Module.kabi_dup_s390x -Source213: Module.kabi_dup_x86_64 - -Source300: kernel-abi-stablelists-%{specversion}-%{pkgrelease}.tar.bz2 -Source301: kernel-kabi-dw-%{specversion}-%{pkgrelease}.tar.bz2 - -# Sources for kernel-tools -Source2000: cpupower.service -Source2001: cpupower.config -Source2002: kvm_stat.logrotate - -# Some people enjoy building customized kernels from the dist-git in Fedora and -# use this to override configuration options. One day they may all use the -# source tree, but in the mean time we carry this to support the legacy workflow -Source3000: merge.pl -Source3001: kernel-local -%if %{patchlist_changelog} -Source3002: Patchlist.changelog -%endif - -Source4000: README.rst -Source4001: rpminspect.yaml -Source4002: gating.yaml - -## Patches needed for building this package - -%if !%{nopatches} - -Patch1: patch-%{patchversion}-redhat.patch -%endif - -# empty final patch to facilitate testing of kernel patches -Patch999999: linux-kernel-test.patch - -# END OF PATCH DEFINITIONS - -%description -The kernel meta package - -# -# This macro does requires, provides, conflicts, obsoletes for a kernel package. -# %%kernel_reqprovconf <subpackage> -# It uses any kernel_<subpackage>_conflicts and kernel_<subpackage>_obsoletes -# macros defined above. -# -%define kernel_reqprovconf \ -Provides: kernel = %{specversion}-%{pkg_release}\ -Provides: kernel-%{_target_cpu} = %{specversion}-%{pkg_release}%{?1:+%{1}}\ -Provides: kernel-drm-nouveau = 16\ -Provides: kernel-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires(pre): %{kernel_prereq}\ -Requires(pre): %{initrd_prereq}\ -Requires(pre): ((linux-firmware >= 20150904-56.git6ebf5d57) if linux-firmware)\ -Recommends: linux-firmware\ -Requires(preun): systemd >= 200\ -Conflicts: xfsprogs < 4.3.0-1\ -Conflicts: xorg-x11-drv-vmmouse < 13.0.99\ -%{expand:%%{?kernel%{?1:_%{1}}_conflicts:Conflicts: %%{kernel%{?1:_%{1}}_conflicts}}}\ -%{expand:%%{?kernel%{?1:_%{1}}_obsoletes:Obsoletes: %%{kernel%{?1:_%{1}}_obsoletes}}}\ -%{expand:%%{?kernel%{?1:_%{1}}_provides:Provides: %%{kernel%{?1:_%{1}}_provides}}}\ -# We can't let RPM do the dependencies automatic because it'll then pick up\ -# a correct but undesirable perl dependency from the module headers which\ -# isn't required for the kernel proper to function\ -AutoReq: no\ -AutoProv: yes\ -%{nil} - - -%package doc -Summary: Various documentation bits found in the kernel source -Group: Documentation -%description doc -This package contains documentation files from the kernel -source. Various bits of information about the Linux kernel and the -device drivers shipped with it are documented in these files. - -You'll want to install this package if you need a reference to the -options that can be passed to Linux kernel modules at load time. - - -%package headers -Summary: Header files for the Linux kernel for use by glibc -Obsoletes: glibc-kernheaders < 3.0-46 -Provides: glibc-kernheaders = 3.0-46 -%description headers -Kernel-headers includes the C header files that specify the interface -between the Linux kernel and userspace libraries and programs. The -header files define structures and constants that are needed for -building most standard programs and are also needed for rebuilding the -glibc package. - -%package cross-headers -Summary: Header files for the Linux kernel for use by cross-glibc -%description cross-headers -Kernel-cross-headers includes the C header files that specify the interface -between the Linux kernel and userspace libraries and programs. The -header files define structures and constants that are needed for -building most standard programs and are also needed for rebuilding the -cross-glibc package. - - -%package debuginfo-common-%{_target_cpu} -Summary: Kernel source files used by %{name}-debuginfo packages -Provides: installonlypkg(kernel) -%description debuginfo-common-%{_target_cpu} -This package is required by %{name}-debuginfo subpackages. -It provides the kernel source files common to all builds. - -%if %{with_perf} -%package -n perf -Summary: Performance monitoring for the Linux kernel -Requires: bzip2 -License: GPLv2 -%description -n perf -This package contains the perf tool, which enables performance monitoring -of the Linux kernel. - -%package -n perf-debuginfo -Summary: Debug information for package perf -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release} -AutoReqProv: no -%description -n perf-debuginfo -This package provides debug information for the perf package. - -# Note that this pattern only works right to match the .build-id -# symlinks because of the trailing nonmatching alternation and -# the leading .*, because of find-debuginfo.sh's buggy handling -# of matching the pattern against the symlinks file. -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{_bindir}/perf(\.debug)?|.*%%{_libexecdir}/perf-core/.*|.*%%{_libdir}/libperf-jvmti.so(\.debug)?|XXX' -o perf-debuginfo.list} - -%package -n python3-perf -Summary: Python bindings for apps which will manipulate perf events -%description -n python3-perf -The python3-perf package contains a module that permits applications -written in the Python programming language to use the interface -to manipulate perf events. - -%package -n python3-perf-debuginfo -Summary: Debug information for package perf python bindings -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release} -AutoReqProv: no -%description -n python3-perf-debuginfo -This package provides debug information for the perf python bindings. - -# the python_sitearch macro should already be defined from above -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{python3_sitearch}/perf.*so(\.debug)?|XXX' -o python3-perf-debuginfo.list} - -# with_perf -%endif - -%if %{with_tools} -%package -n kernel-tools -Summary: Assortment of tools for the Linux kernel -License: GPLv2 -%ifarch %{cpupowerarchs} -Provides: cpupowerutils = 1:009-0.6.p1 -Obsoletes: cpupowerutils < 1:009-0.6.p1 -Provides: cpufreq-utils = 1:009-0.6.p1 -Provides: cpufrequtils = 1:009-0.6.p1 -Obsoletes: cpufreq-utils < 1:009-0.6.p1 -Obsoletes: cpufrequtils < 1:009-0.6.p1 -Obsoletes: cpuspeed < 1:1.5-16 -Requires: kernel-tools-libs = %{version}-%{release} -%endif -%define __requires_exclude ^%{_bindir}/python -%description -n kernel-tools -This package contains the tools/ directory from the kernel source -and the supporting documentation. - -%package -n kernel-tools-libs -Summary: Libraries for the kernels-tools -License: GPLv2 -%description -n kernel-tools-libs -This package contains the libraries built from the tools/ directory -from the kernel source. - -%package -n kernel-tools-libs-devel -Summary: Assortment of tools for the Linux kernel -License: GPLv2 -Requires: kernel-tools = %{version}-%{release} -%ifarch %{cpupowerarchs} -Provides: cpupowerutils-devel = 1:009-0.6.p1 -Obsoletes: cpupowerutils-devel < 1:009-0.6.p1 -%endif -Requires: kernel-tools-libs = %{version}-%{release} -Provides: kernel-tools-devel -%description -n kernel-tools-libs-devel -This package contains the development files for the tools/ directory from -the kernel source. - -%package -n kernel-tools-debuginfo -Summary: Debug information for package kernel-tools -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release} -AutoReqProv: no -%description -n kernel-tools-debuginfo -This package provides debug information for package kernel-tools. - -# Note that this pattern only works right to match the .build-id -# symlinks because of the trailing nonmatching alternation and -# the leading .*, because of find-debuginfo.sh's buggy handling -# of matching the pattern against the symlinks file. -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{_bindir}/centrino-decode(\.debug)?|.*%%{_bindir}/powernow-k8-decode(\.debug)?|.*%%{_bindir}/cpupower(\.debug)?|.*%%{_libdir}/libcpupower.*|.*%%{_bindir}/turbostat(\.debug)?|.*%%{_bindir}/x86_energy_perf_policy(\.debug)?|.*%%{_bindir}/tmon(\.debug)?|.*%%{_bindir}/lsgpio(\.debug)?|.*%%{_bindir}/gpio-hammer(\.debug)?|.*%%{_bindir}/gpio-event-mon(\.debug)?|.*%%{_bindir}/gpio-watch(\.debug)?|.*%%{_bindir}/iio_event_monitor(\.debug)?|.*%%{_bindir}/iio_generic_buffer(\.debug)?|.*%%{_bindir}/lsiio(\.debug)?|.*%%{_bindir}/intel-speed-select(\.debug)?|.*%%{_bindir}/page_owner_sort(\.debug)?|.*%%{_bindir}/slabinfo(\.debug)?|.*%%{_sbindir}/intel_sdsi(\.debug)?|XXX' -o kernel-tools-debuginfo.list} - -# with_tools -%endif - -%if %{with_bpftool} - -%package -n bpftool -Summary: Inspection and simple manipulation of eBPF programs and maps -License: GPLv2 -%description -n bpftool -This package contains the bpftool, which allows inspection and simple -manipulation of eBPF programs and maps. - -%package -n bpftool-debuginfo -Summary: Debug information for package bpftool -Group: Development/Debug -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release} -AutoReqProv: no -%description -n bpftool-debuginfo -This package provides debug information for the bpftool package. - -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{_sbindir}/bpftool(\.debug)?|XXX' -o bpftool-debuginfo.list} - -# with_bpftool -%endif - -%if %{with_selftests} - -%package selftests-internal -Summary: Kernel samples and selftests -License: GPLv2 -Requires: binutils, bpftool, iproute-tc, nmap-ncat, python3 -%description selftests-internal -Kernel sample programs and selftests. - -# Note that this pattern only works right to match the .build-id -# symlinks because of the trailing nonmatching alternation and -# the leading .*, because of find-debuginfo.sh's buggy handling -# of matching the pattern against the symlinks file. -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{_libexecdir}/(ksamples|kselftests)/.*|XXX' -o selftests-debuginfo.list} - -# with_selftests -%endif - -%if %{with_gcov} -%package gcov -Summary: gcov graph and source files for coverage data collection. -%description gcov -kernel-gcov includes the gcov graph and source files for gcov coverage collection. -%endif - -%package -n kernel-abi-stablelists -Summary: The Red Hat Enterprise Linux kernel ABI symbol stablelists -AutoReqProv: no -%description -n kernel-abi-stablelists -The kABI package contains information pertaining to the Red Hat Enterprise -Linux kernel ABI, including lists of kernel symbols that are needed by -external Linux kernel modules, and a yum plugin to aid enforcement. - -%if %{with_kabidw_base} -%package kernel-kabidw-base-internal -Summary: The baseline dataset for kABI verification using DWARF data -Group: System Environment/Kernel -AutoReqProv: no -%description kernel-kabidw-base-internal -The package contains data describing the current ABI of the Red Hat Enterprise -Linux kernel, suitable for the kabi-dw tool. -%endif - -# -# This macro creates a kernel-<subpackage>-debuginfo package. -# %%kernel_debuginfo_package <subpackage> -# -# Explanation of the find_debuginfo_opts: We build multiple kernels (debug -# pae etc.) so the regex filters those kernels appropriately. We also -# have to package several binaries as part of kernel-devel but getting -# unique build-ids is tricky for these userspace binaries. We don't really -# care about debugging those so we just filter those out and remove it. -%define kernel_debuginfo_package() \ -%package %{?1:%{1}-}debuginfo\ -Summary: Debug information for package %{name}%{?1:-%{1}}\ -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release}\ -Provides: %{name}%{?1:-%{1}}-debuginfo-%{_target_cpu} = %{version}-%{release}\ -Provides: installonlypkg(kernel)\ -AutoReqProv: no\ -%description %{?1:%{1}-}debuginfo\ -This package provides debug information for package %{name}%{?1:-%{1}}.\ -This is required to use SystemTap with %{name}%{?1:-%{1}}-%{KVERREL}.\ -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} --keep-section '.BTF' -p '.*\/usr\/src\/kernels/.*|XXX' -o ignored-debuginfo.list -p '/.*/%%{KVERREL_RE}%{?1:[+]%{1}}/.*|/.*%%{KVERREL_RE}%{?1:\+%{1}}(\.debug)?' -o debuginfo%{?1}.list}\ -%{nil} - -# -# This macro creates a kernel-<subpackage>-devel package. -# %%kernel_devel_package [-m] <subpackage> <pretty-name> -# -%define kernel_devel_package(m) \ -%package %{?1:%{1}-}devel\ -Summary: Development package for building kernel modules to match the %{?2:%{2} }kernel\ -Provides: kernel%{?1:-%{1}}-devel-%{_target_cpu} = %{version}-%{release}\ -Provides: kernel-devel-%{_target_cpu} = %{version}-%{release}%{?1:+%{1}}\ -Provides: kernel-devel-uname-r = %{KVERREL}%{?1:+%{1}}\ -Provides: installonlypkg(kernel)\ -AutoReqProv: no\ -Requires(pre): findutils\ -Requires: findutils\ -Requires: perl-interpreter\ -Requires: openssl-devel\ -Requires: elfutils-libelf-devel\ -Requires: bison\ -Requires: flex\ -Requires: make\ -Requires: gcc\ -%if %{-m:1}%{!-m:0}\ -Requires: kernel-devel-uname-r = %{KVERREL}\ -%endif\ -%description %{?1:%{1}-}devel\ -This package provides kernel headers and makefiles sufficient to build modules\ -against the %{?2:%{2} }kernel package.\ -%{nil} - -# -# This macro creates an empty kernel-<subpackage>-devel-matched package that -# requires both the core and devel packages locked on the same version. -# %%kernel_devel_matched_package [-m] <subpackage> <pretty-name> -# -%define kernel_devel_matched_package(m) \ -%package %{?1:%{1}-}devel-matched\ -Summary: Meta package to install matching core and devel packages for a given %{?2:%{2} }kernel\ -Requires: kernel%{?1:-%{1}}-devel = %{version}-%{release}\ -Requires: kernel%{?1:-%{1}}-core = %{version}-%{release}\ -%description %{?1:%{1}-}devel-matched\ -This meta package is used to install matching core and devel packages for a given %{?2:%{2} }kernel.\ -%{nil} - -# -# kernel-<variant>-ipaclones-internal package -# -%define kernel_ipaclones_package() \ -%package %{?1:%{1}-}ipaclones-internal\ -Summary: *.ipa-clones files generated by -fdump-ipa-clones for kernel%{?1:-%{1}}\ -Group: System Environment/Kernel\ -AutoReqProv: no\ -%description %{?1:%{1}-}ipaclones-internal\ -This package provides *.ipa-clones files.\ -%{nil} - -# -# This macro creates a kernel-<subpackage>-modules-internal package. -# %%kernel_modules_internal_package <subpackage> <pretty-name> -# -%define kernel_modules_internal_package() \ -%package %{?1:%{1}-}modules-internal\ -Summary: Extra kernel modules to match the %{?2:%{2} }kernel\ -Group: System Environment/Kernel\ -Provides: kernel%{?1:-%{1}}-modules-internal-%{_target_cpu} = %{version}-%{release}\ -Provides: kernel%{?1:-%{1}}-modules-internal-%{_target_cpu} = %{version}-%{release}%{?1:+%{1}}\ -Provides: kernel%{?1:-%{1}}-modules-internal = %{version}-%{release}%{?1:+%{1}}\ -Provides: installonlypkg(kernel-module)\ -Provides: kernel%{?1:-%{1}}-modules-internal-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel%{?1:-%{1}}-modules-uname-r = %{KVERREL}%{?1:+%{1}}\ -AutoReq: no\ -AutoProv: yes\ -%description %{?1:%{1}-}modules-internal\ -This package provides kernel modules for the %{?2:%{2} }kernel package for Red Hat internal usage.\ -%{nil} - -# -# This macro creates a kernel-<subpackage>-modules-extra package. -# %%kernel_modules_extra_package [-m] <subpackage> <pretty-name> -# -%define kernel_modules_extra_package(m) \ -%package %{?1:%{1}-}modules-extra\ -Summary: Extra kernel modules to match the %{?2:%{2} }kernel\ -Provides: kernel%{?1:-%{1}}-modules-extra-%{_target_cpu} = %{version}-%{release}\ -Provides: kernel%{?1:-%{1}}-modules-extra-%{_target_cpu} = %{version}-%{release}%{?1:+%{1}}\ -Provides: kernel%{?1:-%{1}}-modules-extra = %{version}-%{release}%{?1:+%{1}}\ -Provides: installonlypkg(kernel-module)\ -Provides: kernel%{?1:-%{1}}-modules-extra-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel%{?1:-%{1}}-modules-uname-r = %{KVERREL}%{?1:+%{1}}\ -%if %{-m:1}%{!-m:0}\ -Requires: kernel-modules-extra-uname-r = %{KVERREL}\ -%endif\ -AutoReq: no\ -AutoProv: yes\ -%description %{?1:%{1}-}modules-extra\ -This package provides less commonly used kernel modules for the %{?2:%{2} }kernel package.\ -%{nil} - -# -# This macro creates a kernel-<subpackage>-modules package. -# %%kernel_modules_package [-m] <subpackage> <pretty-name> -# -%define kernel_modules_package(m) \ -%package %{?1:%{1}-}modules\ -Summary: kernel modules to match the %{?2:%{2}-}core kernel\ -Provides: kernel%{?1:-%{1}}-modules-%{_target_cpu} = %{version}-%{release}\ -Provides: kernel-modules-%{_target_cpu} = %{version}-%{release}%{?1:+%{1}}\ -Provides: kernel-modules = %{version}-%{release}%{?1:+%{1}}\ -Provides: installonlypkg(kernel-module)\ -Provides: kernel%{?1:-%{1}}-modules-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel-uname-r = %{KVERREL}%{?1:+%{1}}\ -%if %{-m:1}%{!-m:0}\ -Requires: kernel-modules-uname-r = %{KVERREL}\ -%endif\ -AutoReq: no\ -AutoProv: yes\ -%description %{?1:%{1}-}modules\ -This package provides commonly used kernel modules for the %{?2:%{2}-}core kernel package.\ -%{nil} - -# -# this macro creates a kernel-<subpackage> meta package. -# %%kernel_meta_package <subpackage> -# -%define kernel_meta_package() \ -%package %{1}\ -summary: kernel meta-package for the %{1} kernel\ -Requires: kernel-%{1}-core-uname-r = %{KVERREL}+%{1}\ -Requires: kernel-%{1}-modules-uname-r = %{KVERREL}+%{1}\ -Provides: installonlypkg(kernel)\ -%description %{1}\ -The meta-package for the %{1} kernel\ -%{nil} - -# -# This macro creates a kernel-<subpackage> and its -devel and -debuginfo too. -# %%define variant_summary The Linux kernel compiled for <configuration> -# %%kernel_variant_package [-n <pretty-name>] [-m] <subpackage> -# -%define kernel_variant_package(n:m) \ -%package %{?1:%{1}-}core\ -Summary: %{variant_summary}\ -Provides: kernel-%{?1:%{1}-}core-uname-r = %{KVERREL}%{?1:+%{1}}\ -Provides: installonlypkg(kernel)\ -%if %{-m:1}%{!-m:0}\ -Requires: kernel-core-uname-r = %{KVERREL}\ -%endif\ -%{expand:%%kernel_reqprovconf}\ -%if %{?1:1} %{!?1:0} \ -%{expand:%%kernel_meta_package %{?1:%{1}}}\ -%endif\ -%{expand:%%kernel_devel_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}} %{-m:%{-m}}}\ -%{expand:%%kernel_devel_matched_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}} %{-m:%{-m}}}\ -%{expand:%%kernel_modules_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}} %{-m:%{-m}}}\ -%{expand:%%kernel_modules_extra_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}} %{-m:%{-m}}}\ -%if %{-m:0}%{!-m:1}\ -%{expand:%%kernel_modules_internal_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}}}\ -%{expand:%%kernel_debuginfo_package %{?1:%{1}}}\ -%endif\ -%{nil} - -# Now, each variant package. - -%if %{with_pae} -%define variant_summary The Linux kernel compiled for Cortex-A15 -%kernel_variant_package lpae -%description lpae-core -This package includes a version of the Linux kernel with support for -Cortex-A15 devices with LPAE and HW virtualisation support -%endif - -%if %{with_zfcpdump} -%define variant_summary The Linux kernel compiled for zfcpdump usage -%kernel_variant_package zfcpdump -%description zfcpdump-core -The kernel package contains the Linux kernel (vmlinuz) for use by the -zfcpdump infrastructure. -# with_zfcpdump -%endif - -%define variant_summary The Linux kernel compiled with extra debugging enabled -%if !%{debugbuildsenabled} -%kernel_variant_package -m debug -%else -%kernel_variant_package debug -%endif -%description debug-core -The kernel package contains the Linux kernel (vmlinuz), the core of any -Linux operating system. The kernel handles the basic functions -of the operating system: memory allocation, process allocation, device -input and output, etc. - -This variant of the kernel has numerous debugging options enabled. -It should only be installed when trying to gather additional information -on kernel bugs, as some of these options impact performance noticably. - -# And finally the main -core package - -%define variant_summary The Linux kernel -%kernel_variant_package -%description core -The kernel package contains the Linux kernel (vmlinuz), the core of any -Linux operating system. The kernel handles the basic functions -of the operating system: memory allocation, process allocation, device -input and output, etc. - -%if %{with_ipaclones} -%kernel_ipaclones_package -%endif - -%prep -# do a few sanity-checks for --with *only builds -%if %{with_baseonly} -%if !%{with_up} -echo "Cannot build --with baseonly, up build is disabled" -exit 1 -%endif -%endif - -# more sanity checking; do it quietly -if [ "%{patches}" != "%%{patches}" ] ; then - for patch in %{patches} ; do - if [ ! -f $patch ] ; then - echo "ERROR: Patch ${patch##/*/} listed in specfile but is missing" - exit 1 - fi - done -fi 2>/dev/null - -patch_command='patch -p1 -F1 -s' -ApplyPatch() -{ - local patch=$1 - shift - if [ ! -f $RPM_SOURCE_DIR/$patch ]; then - exit 1 - fi - if ! grep -E "^Patch[0-9]+: $patch\$" %{_specdir}/${RPM_PACKAGE_NAME}.spec ; then - if [ "${patch:0:8}" != "patch-%{kversion}." ] ; then - echo "ERROR: Patch $patch not listed as a source patch in specfile" - exit 1 - fi - fi 2>/dev/null - case "$patch" in - *.bz2) bunzip2 < "$RPM_SOURCE_DIR/$patch" | $patch_command ${1+"$@"} ;; - *.gz) gunzip < "$RPM_SOURCE_DIR/$patch" | $patch_command ${1+"$@"} ;; - *.xz) unxz < "$RPM_SOURCE_DIR/$patch" | $patch_command ${1+"$@"} ;; - *) $patch_command ${1+"$@"} < "$RPM_SOURCE_DIR/$patch" ;; - esac -} - -# don't apply patch if it's empty -ApplyOptionalPatch() -{ - local patch=$1 - shift - if [ ! -f $RPM_SOURCE_DIR/$patch ]; then - exit 1 - fi - local C=$(wc -l $RPM_SOURCE_DIR/$patch | awk '{print $1}') - if [ "$C" -gt 9 ]; then - ApplyPatch $patch ${1+"$@"} - fi -} - -%setup -q -n kernel-%{tarfile_release} -c -mv linux-%{tarfile_release} linux-%{KVERREL} - -cd linux-%{KVERREL} -cp -a %{SOURCE1} . - -%if !%{nopatches} - -ApplyOptionalPatch patch-%{patchversion}-redhat.patch -%endif - -ApplyOptionalPatch linux-kernel-test.patch - -# END OF PATCH APPLICATIONS - -# Any further pre-build tree manipulations happen here. - -chmod +x scripts/checkpatch.pl -mv COPYING COPYING-%{version}-%{release} - -# This Prevents scripts/setlocalversion from mucking with our version numbers. -touch .scmversion - -# Mangle /usr/bin/python shebangs to /usr/bin/python3 -# Mangle all Python shebangs to be Python 3 explicitly -# -p preserves timestamps -# -n prevents creating ~backup files -# -i specifies the interpreter for the shebang -# This fixes errors such as -# *** ERROR: ambiguous python shebang in /usr/bin/kvm_stat: #!/usr/bin/python. Change it to python3 (or python2) explicitly. -# We patch all sources below for which we got a report/error. -pathfix.py -i "%{__python3} %{py3_shbang_opts}" -p -n \ - tools/kvm/kvm_stat/kvm_stat \ - scripts/show_delta \ - scripts/diffconfig \ - scripts/bloat-o-meter \ - scripts/jobserver-exec \ - tools \ - Documentation \ - scripts/clang-tools - -# only deal with configs if we are going to build for the arch -%ifnarch %nobuildarches - -if [ -L configs ]; then - rm -f configs -fi -mkdir configs -cd configs - -# Drop some necessary files from the source dir into the buildroot -cp $RPM_SOURCE_DIR/kernel-*.config . -cp %{SOURCE80} . -# merge.pl -cp %{SOURCE3000} . -# kernel-local -cp %{SOURCE3001} . -FLAVOR=%{primary_target} SPECVERSION=%{version} ./generate_all_configs.sh %{debugbuildsenabled} - -# Merge in any user-provided local config option changes -%ifnarch %nobuildarches -for i in %{all_arch_configs} -do - mv $i $i.tmp - ./merge.pl %{SOURCE3001} $i.tmp > $i -%if %{with_gcov} - echo "Merging with gcov options" - cat %{SOURCE75} - mv $i $i.tmp - ./merge.pl %{SOURCE75} $i.tmp > $i -%endif - rm $i.tmp -done -%endif - -%if %{with clang_lto} -for i in *aarch64*.config *x86_64*.config; do - sed -i 's/# CONFIG_LTO_CLANG_THIN is not set/CONFIG_LTO_CLANG_THIN=y/' $i - sed -i 's/CONFIG_LTO_NONE=y/# CONFIG_LTO_NONE is not set/' $i -done -%endif - -# Add DUP and kpatch certificates to system trusted keys for RHEL -%if 0%{?rhel} -%if %{signkernel}%{signmodules} -openssl x509 -inform der -in %{SOURCE100} -out rheldup3.pem -openssl x509 -inform der -in %{SOURCE101} -out rhelkpatch1.pem -cat rheldup3.pem rhelkpatch1.pem > ../certs/rhel.pem -%ifarch s390x ppc64le -openssl x509 -inform der -in %{secureboot_ca_0} -out secureboot.pem -cat secureboot.pem >> ../certs/rhel.pem -%endif -for i in *.config; do - sed -i 's@CONFIG_SYSTEM_TRUSTED_KEYS=""@CONFIG_SYSTEM_TRUSTED_KEYS="certs/rhel.pem"@' $i -done -%endif -%endif - -cp %{SOURCE81} . -OPTS="" -%if %{with_configchecks} - OPTS="$OPTS -w -n -c" -%endif -%if %{with clang_lto} -for opt in %{clang_make_opts}; do - OPTS="$OPTS -m $opt" -done -%endif -RHJOBS=$RPM_BUILD_NCPUS PACKAGE_NAME=kernel ./process_configs.sh $OPTS ${specversion} - -cp %{SOURCE82} . -RPM_SOURCE_DIR=$RPM_SOURCE_DIR ./update_scripts.sh %{primary_target} - -# We may want to override files from the primary target in case of building -# against a flavour of it (eg. centos not rhel), thus override it here if -# necessary -if [ "%{primary_target}" == "rhel" ]; then -%if 0%{?centos} - echo "Updating scripts/sources to centos version" - RPM_SOURCE_DIR=$RPM_SOURCE_DIR ./update_scripts.sh centos -%else - echo "Not updating scripts/sources to centos version" -%endif -fi - -# end of kernel config -%endif - -cd .. -# # End of Configs stuff - -# get rid of unwanted files resulting from patch fuzz -find . \( -name "*.orig" -o -name "*~" \) -delete >/dev/null - -# remove unnecessary SCM files -find . -name .gitignore -delete >/dev/null - -cd .. - -### -### build -### -%build - -%if %{with_sparse} -%define sparse_mflags C=1 -%endif - -cp_vmlinux() -{ - eu-strip --remove-comment -o "$2" "$1" -} - -# Note we need to disable these flags for cross builds because the flags -# from redhat-rpm-config assume that host == target so target arch -# flags cause issues with the host compiler. -%if !%{with_cross} -%define build_hostcflags %{?build_cflags} -%define build_hostldflags %{?build_ldflags} -%endif - -%define make %{__make} %{?cross_opts} %{?make_opts} HOSTCFLAGS="%{?build_hostcflags}" HOSTLDFLAGS="%{?build_hostldflags}" - -InitBuildVars() { - # Initialize the kernel .config file and create some variables that are - # needed for the actual build process. - - Variant=$1 - - # Pick the right kernel config file - Config=kernel-%{version}-%{_target_cpu}${Variant:+-${Variant}}.config - DevelDir=/usr/src/kernels/%{KVERREL}${Variant:++${Variant}} - - KernelVer=%{version}-%{release}.%{_target_cpu}${Variant:++${Variant}} - - # make sure EXTRAVERSION says what we want it to say - # Trim the release if this is a CI build, since KERNELVERSION is limited to 64 characters - ShortRel=$(perl -e "print \"%{release}\" =~ s/\.pr\.[0-9A-Fa-f]{32}//r") - perl -p -i -e "s/^EXTRAVERSION.*/EXTRAVERSION = -${ShortRel}.%{_target_cpu}${Variant:++${Variant}}/" Makefile - - # if pre-rc1 devel kernel, must fix up PATCHLEVEL for our versioning scheme - # if we are post rc1 this should match anyway so this won't matter - perl -p -i -e 's/^PATCHLEVEL.*/PATCHLEVEL = %{patchlevel}/' Makefile - - %{make} %{?_smp_mflags} mrproper - cp configs/$Config .config - - %if %{signkernel}%{signmodules} - cp configs/x509.genkey certs/. - %endif - - Arch=`head -1 .config | cut -b 3-` - echo USING ARCH=$Arch - - KCFLAGS="%{?kcflags}" - - # add kpatch flags for base kernel - if [ "$Variant" == "" ]; then - KCFLAGS="$KCFLAGS %{?kpatch_kcflags}" - fi -} - -BuildKernel() { - MakeTarget=$1 - KernelImage=$2 - DoVDSO=$3 - Variant=$4 - InstallName=${5:-vmlinuz} - - DoModules=1 - if [ "$Variant" = "zfcpdump" ]; then - DoModules=0 - fi - - # When the bootable image is just the ELF kernel, strip it. - # We already copy the unstripped file into the debuginfo package. - if [ "$KernelImage" = vmlinux ]; then - CopyKernel=cp_vmlinux - else - CopyKernel=cp - fi - - InitBuildVars $Variant - - echo BUILDING A KERNEL FOR ${Variant} %{_target_cpu}... - - %{make} ARCH=$Arch olddefconfig >/dev/null - - # This ensures build-ids are unique to allow parallel debuginfo - perl -p -i -e "s/^CONFIG_BUILD_SALT.*/CONFIG_BUILD_SALT=\"%{KVERREL}\"/" .config - %{make} ARCH=$Arch KCFLAGS="$KCFLAGS" WITH_GCOV="%{?with_gcov}" %{?_smp_mflags} $MakeTarget %{?sparse_mflags} %{?kernel_mflags} - if [ $DoModules -eq 1 ]; then - %{make} ARCH=$Arch KCFLAGS="$KCFLAGS" WITH_GCOV="%{?with_gcov}" %{?_smp_mflags} modules %{?sparse_mflags} || exit 1 - fi - - mkdir -p $RPM_BUILD_ROOT/%{image_install_path} - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/systemtap -%if %{with_debuginfo} - mkdir -p $RPM_BUILD_ROOT%{debuginfodir}/%{image_install_path} -%endif - -%ifarch %{arm} aarch64 - %{make} ARCH=$Arch dtbs INSTALL_DTBS_PATH=$RPM_BUILD_ROOT/%{image_install_path}/dtb-$KernelVer - %{make} ARCH=$Arch dtbs_install INSTALL_DTBS_PATH=$RPM_BUILD_ROOT/%{image_install_path}/dtb-$KernelVer - cp -r $RPM_BUILD_ROOT/%{image_install_path}/dtb-$KernelVer $RPM_BUILD_ROOT/lib/modules/$KernelVer/dtb - find arch/$Arch/boot/dts -name '*.dtb' -type f -delete -%endif - - # Start installing the results - install -m 644 .config $RPM_BUILD_ROOT/boot/config-$KernelVer - install -m 644 .config $RPM_BUILD_ROOT/lib/modules/$KernelVer/config - install -m 644 System.map $RPM_BUILD_ROOT/boot/System.map-$KernelVer - install -m 644 System.map $RPM_BUILD_ROOT/lib/modules/$KernelVer/System.map - - # We estimate the size of the initramfs because rpm needs to take this size - # into consideration when performing disk space calculations. (See bz #530778) - dd if=/dev/zero of=$RPM_BUILD_ROOT/boot/initramfs-$KernelVer.img bs=1M count=20 - - if [ -f arch/$Arch/boot/zImage.stub ]; then - cp arch/$Arch/boot/zImage.stub $RPM_BUILD_ROOT/%{image_install_path}/zImage.stub-$KernelVer || : - cp arch/$Arch/boot/zImage.stub $RPM_BUILD_ROOT/lib/modules/$KernelVer/zImage.stub-$KernelVer || : - fi - - %if %{signkernel} - if [ "$KernelImage" = vmlinux ]; then - # We can't strip and sign $KernelImage in place, because - # we need to preserve original vmlinux for debuginfo. - # Use a copy for signing. - $CopyKernel $KernelImage $KernelImage.tosign - KernelImage=$KernelImage.tosign - CopyKernel=cp - fi - - # Sign the image if we're using EFI - # aarch64 kernels are gziped EFI images - KernelExtension=${KernelImage##*.} - if [ "$KernelExtension" == "gz" ]; then - SignImage=${KernelImage%.*} - else - SignImage=$KernelImage - fi - - %ifarch x86_64 aarch64 - %pesign -s -i $SignImage -o vmlinuz.tmp -a %{secureboot_ca_0} -c %{secureboot_key_0} -n %{pesign_name_0} - %pesign -s -i vmlinuz.tmp -o vmlinuz.signed -a %{secureboot_ca_1} -c %{secureboot_key_1} -n %{pesign_name_1} - rm vmlinuz.tmp - %endif - %ifarch s390x ppc64le - if [ -x /usr/bin/rpm-sign ]; then - rpm-sign --key "%{pesign_name_0}" --lkmsign $SignImage --output vmlinuz.signed - elif [ $DoModules -eq 1 ]; then - chmod +x scripts/sign-file - ./scripts/sign-file -p sha256 certs/signing_key.pem certs/signing_key.x509 $SignImage vmlinuz.signed - else - mv $SignImage vmlinuz.signed - fi - %endif - - if [ ! -s vmlinuz.signed ]; then - echo "pesigning failed" - exit 1 - fi - mv vmlinuz.signed $SignImage - if [ "$KernelExtension" == "gz" ]; then - gzip -f9 $SignImage - fi - # signkernel - %endif - - $CopyKernel $KernelImage \ - $RPM_BUILD_ROOT/%{image_install_path}/$InstallName-$KernelVer - chmod 755 $RPM_BUILD_ROOT/%{image_install_path}/$InstallName-$KernelVer - cp $RPM_BUILD_ROOT/%{image_install_path}/$InstallName-$KernelVer $RPM_BUILD_ROOT/lib/modules/$KernelVer/$InstallName - - # hmac sign the kernel for FIPS - echo "Creating hmac file: $RPM_BUILD_ROOT/%{image_install_path}/.vmlinuz-$KernelVer.hmac" - ls -l $RPM_BUILD_ROOT/%{image_install_path}/$InstallName-$KernelVer - (cd $RPM_BUILD_ROOT/%{image_install_path} && sha512hmac $InstallName-$KernelVer) > $RPM_BUILD_ROOT/%{image_install_path}/.vmlinuz-$KernelVer.hmac; - cp $RPM_BUILD_ROOT/%{image_install_path}/.vmlinuz-$KernelVer.hmac $RPM_BUILD_ROOT/lib/modules/$KernelVer/.vmlinuz.hmac - - if [ $DoModules -eq 1 ]; then - # Override $(mod-fw) because we don't want it to install any firmware - # we'll get it from the linux-firmware package and we don't want conflicts - %{make} %{?_smp_mflags} ARCH=$Arch INSTALL_MOD_PATH=$RPM_BUILD_ROOT %{?_smp_mflags} modules_install KERNELRELEASE=$KernelVer mod-fw= - fi - -%if %{with_gcov} - # install gcov-needed files to $BUILDROOT/$BUILD/...: - # gcov_info->filename is absolute path - # gcno references to sources can use absolute paths (e.g. in out-of-tree builds) - # sysfs symlink targets (set up at compile time) use absolute paths to BUILD dir - find . \( -name '*.gcno' -o -name '*.[chS]' \) -exec install -D '{}' "$RPM_BUILD_ROOT/$(pwd)/{}" \; -%endif - - # add an a noop %%defattr statement 'cause rpm doesn't like empty file list files - echo '%%defattr(-,-,-)' > ../kernel${Variant:+-${Variant}}-ldsoconf.list - if [ $DoVDSO -ne 0 ]; then - %{make} ARCH=$Arch INSTALL_MOD_PATH=$RPM_BUILD_ROOT vdso_install KERNELRELEASE=$KernelVer - if [ -s ldconfig-kernel.conf ]; then - install -D -m 444 ldconfig-kernel.conf \ - $RPM_BUILD_ROOT/etc/ld.so.conf.d/kernel-$KernelVer.conf - echo /etc/ld.so.conf.d/kernel-$KernelVer.conf >> ../kernel${Variant:+-${Variant}}-ldsoconf.list - fi - - rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/vdso/.build-id - fi - - # And save the headers/makefiles etc for building modules against - # - # This all looks scary, but the end result is supposed to be: - # * all arch relevant include/ files - # * all Makefile/Kconfig files - # * all script/ files - - rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/source - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - (cd $RPM_BUILD_ROOT/lib/modules/$KernelVer ; ln -s build source) - # dirs for additional modules per module-init-tools, kbuild/modules.txt - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/updates - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/weak-updates - # CONFIG_KERNEL_HEADER_TEST generates some extra files in the process of - # testing so just delete - find . -name *.h.s -delete - # first copy everything - cp --parents `find -type f -name "Makefile*" -o -name "Kconfig*"` $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - if [ ! -e Module.symvers ]; then - touch Module.symvers - fi - cp Module.symvers $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp System.map $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - if [ -s Module.markers ]; then - cp Module.markers $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - fi - - # create the kABI metadata for use in packaging - # NOTENOTE: the name symvers is used by the rpm backend - # NOTENOTE: to discover and run the /usr/lib/rpm/fileattrs/kabi.attr - # NOTENOTE: script which dynamically adds exported kernel symbol - # NOTENOTE: checksums to the rpm metadata provides list. - # NOTENOTE: if you change the symvers name, update the backend too - echo "**** GENERATING kernel ABI metadata ****" - gzip -c9 < Module.symvers > $RPM_BUILD_ROOT/boot/symvers-$KernelVer.gz - cp $RPM_BUILD_ROOT/boot/symvers-$KernelVer.gz $RPM_BUILD_ROOT/lib/modules/$KernelVer/symvers.gz - -%if %{with_kabichk} - echo "**** kABI checking is enabled in kernel SPEC file. ****" - chmod 0755 $RPM_SOURCE_DIR/check-kabi - if [ -e $RPM_SOURCE_DIR/Module.kabi_%{_target_cpu}$Variant ]; then - cp $RPM_SOURCE_DIR/Module.kabi_%{_target_cpu}$Variant $RPM_BUILD_ROOT/Module.kabi - $RPM_SOURCE_DIR/check-kabi -k $RPM_BUILD_ROOT/Module.kabi -s Module.symvers || exit 1 - # for now, don't keep it around. - rm $RPM_BUILD_ROOT/Module.kabi - else - echo "**** NOTE: Cannot find reference Module.kabi file. ****" - fi -%endif - -%if %{with_kabidupchk} - echo "**** kABI DUP checking is enabled in kernel SPEC file. ****" - if [ -e $RPM_SOURCE_DIR/Module.kabi_dup_%{_target_cpu}$Variant ]; then - cp $RPM_SOURCE_DIR/Module.kabi_dup_%{_target_cpu}$Variant $RPM_BUILD_ROOT/Module.kabi - $RPM_SOURCE_DIR/check-kabi -k $RPM_BUILD_ROOT/Module.kabi -s Module.symvers || exit 1 - # for now, don't keep it around. - rm $RPM_BUILD_ROOT/Module.kabi - else - echo "**** NOTE: Cannot find DUP reference Module.kabi file. ****" - fi -%endif - -%if %{with_kabidw_base} - # Don't build kabi base for debug kernels - if [ "$Variant" != "zfcpdump" -a "$Variant" != "debug" ]; then - mkdir -p $RPM_BUILD_ROOT/kabi-dwarf - tar xjvf %{SOURCE301} -C $RPM_BUILD_ROOT/kabi-dwarf - - mkdir -p $RPM_BUILD_ROOT/kabi-dwarf/stablelists - tar xjvf %{SOURCE300} -C $RPM_BUILD_ROOT/kabi-dwarf/stablelists - - echo "**** GENERATING DWARF-based kABI baseline dataset ****" - chmod 0755 $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh - $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh generate \ - "$RPM_BUILD_ROOT/kabi-dwarf/stablelists/kabi-current/kabi_stablelist_%{_target_cpu}" \ - "$(pwd)" \ - "$RPM_BUILD_ROOT/kabidw-base/%{_target_cpu}${Variant:+.${Variant}}" || : - - rm -rf $RPM_BUILD_ROOT/kabi-dwarf - fi -%endif - -%if %{with_kabidwchk} - if [ "$Variant" != "zfcpdump" ]; then - mkdir -p $RPM_BUILD_ROOT/kabi-dwarf - tar xjvf %{SOURCE301} -C $RPM_BUILD_ROOT/kabi-dwarf - if [ -d "$RPM_BUILD_ROOT/kabi-dwarf/base/%{_target_cpu}${Variant:+.${Variant}}" ]; then - mkdir -p $RPM_BUILD_ROOT/kabi-dwarf/stablelists - tar xjvf %{SOURCE300} -C $RPM_BUILD_ROOT/kabi-dwarf/stablelists - - echo "**** GENERATING DWARF-based kABI dataset ****" - chmod 0755 $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh - $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh generate \ - "$RPM_BUILD_ROOT/kabi-dwarf/stablelists/kabi-current/kabi_stablelist_%{_target_cpu}" \ - "$(pwd)" \ - "$RPM_BUILD_ROOT/kabi-dwarf/base/%{_target_cpu}${Variant:+.${Variant}}.tmp" || : - - echo "**** kABI DWARF-based comparison report ****" - $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh compare \ - "$RPM_BUILD_ROOT/kabi-dwarf/base/%{_target_cpu}${Variant:+.${Variant}}" \ - "$RPM_BUILD_ROOT/kabi-dwarf/base/%{_target_cpu}${Variant:+.${Variant}}.tmp" || : - echo "**** End of kABI DWARF-based comparison report ****" - else - echo "**** Baseline dataset for kABI DWARF-BASED comparison report not found ****" - fi - - rm -rf $RPM_BUILD_ROOT/kabi-dwarf - fi -%endif - - # then drop all but the needed Makefiles/Kconfig files - rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts - rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include - cp .config $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a scripts $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts/tracing - rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts/spdxcheck.py - -%ifarch s390x - # CONFIG_EXPOLINE_EXTERN=y produces arch/s390/lib/expoline.o - # which is needed during external module build. - if [ -f arch/s390/lib/expoline.o ]; then - cp -a --parents arch/s390/lib/expoline.o $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - fi -%endif - - # Files for 'make scripts' to succeed with kernel-devel. - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/security/selinux/include - cp -a --parents security/selinux/include/classmap.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents security/selinux/include/initial_sid_to_string.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/tools/include/tools - cp -a --parents tools/include/tools/be_byteshift.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/tools/le_byteshift.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - - # Files for 'make prepare' to succeed with kernel-devel. - cp -a --parents tools/include/linux/compiler* $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/linux/types.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/build/Build.include $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/build/Build $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/build/fixdep.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/objtool/sync-check.sh $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/bpf/resolve_btfids $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - - cp --parents security/selinux/include/policycap_names.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents security/selinux/include/policycap.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - - cp -a --parents tools/include/asm-generic $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/linux $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/uapi/asm $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/uapi/asm-generic $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/uapi/linux $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/vdso $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/scripts/utilities.mak $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/lib/subcmd $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/lib/*.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/objtool/*.[ch] $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/objtool/Build $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/objtool/include/objtool/*.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/lib/bpf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/lib/bpf/Build $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - - if [ -f tools/objtool/objtool ]; then - cp -a tools/objtool/objtool $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/tools/objtool/ || : - fi - if [ -f tools/objtool/fixdep ]; then - cp -a tools/objtool/fixdep $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/tools/objtool/ || : - fi - if [ -d arch/$Arch/scripts ]; then - cp -a arch/$Arch/scripts $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/arch/%{_arch} || : - fi - if [ -f arch/$Arch/*lds ]; then - cp -a arch/$Arch/*lds $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/arch/%{_arch}/ || : - fi - if [ -f arch/%{asmarch}/kernel/module.lds ]; then - cp -a --parents arch/%{asmarch}/kernel/module.lds $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - fi - find $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts \( -iname "*.o" -o -iname "*.cmd" \) -exec rm -f {} + -%ifarch ppc64le - cp -a --parents arch/powerpc/lib/crtsavres.[So] $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ -%endif - if [ -d arch/%{asmarch}/include ]; then - cp -a --parents arch/%{asmarch}/include $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - fi -%ifarch aarch64 - # arch/arm64/include/asm/xen references arch/arm - cp -a --parents arch/arm/include/asm/xen $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - # arch/arm64/include/asm/opcodes.h references arch/arm - cp -a --parents arch/arm/include/asm/opcodes.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ -%endif - # include the machine specific headers for ARM variants, if available. -%ifarch %{arm} - if [ -d arch/%{asmarch}/mach-${Variant}/include ]; then - cp -a --parents arch/%{asmarch}/mach-${Variant}/include $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - fi - # include a few files for 'make prepare' - cp -a --parents arch/arm/tools/gen-mach-types $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/arm/tools/mach-types $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - -%endif - cp -a include $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include -%ifarch i686 x86_64 - # files for 'make prepare' to succeed with kernel-devel - cp -a --parents arch/x86/entry/syscalls/syscall_32.tbl $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/entry/syscalls/syscall_64.tbl $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs_32.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs_64.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs_common.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/purgatory/purgatory.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/purgatory/stack.S $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/purgatory/setup-x86_64.S $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/purgatory/entry64.S $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/boot/string.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/boot/string.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/boot/ctype.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - - cp -a --parents scripts/syscalltbl.sh $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents scripts/syscallhdr.sh $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - - cp -a --parents tools/arch/x86/include/asm $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/arch/x86/include/uapi/asm $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/objtool/arch/x86/lib $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/arch/x86/lib/ $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/arch/x86/tools/gen-insn-attr-x86.awk $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/objtool/arch/x86/ $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - -%endif - # Clean up intermediate tools files - find $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/tools \( -iname "*.o" -o -iname "*.cmd" \) -exec rm -f {} + - - # Make sure the Makefile, version.h, and auto.conf have a matching - # timestamp so that external modules can be built - touch -r $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/Makefile \ - $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include/generated/uapi/linux/version.h \ - $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include/config/auto.conf - -%if %{with_debuginfo} - eu-readelf -n vmlinux | grep "Build ID" | awk '{print $NF}' > vmlinux.id - cp vmlinux.id $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/vmlinux.id - - # - # save the vmlinux file for kernel debugging into the kernel-debuginfo rpm - # - mkdir -p $RPM_BUILD_ROOT%{debuginfodir}/lib/modules/$KernelVer - cp vmlinux $RPM_BUILD_ROOT%{debuginfodir}/lib/modules/$KernelVer - if [ -n "%{vmlinux_decompressor}" ]; then - eu-readelf -n %{vmlinux_decompressor} | grep "Build ID" | awk '{print $NF}' > vmlinux.decompressor.id - # Without build-id the build will fail. But for s390 the build-id - # wasn't added before 5.11. In case it is missing prefer not - # packaging the debuginfo over a build failure. - if [ -s vmlinux.decompressor.id ]; then - cp vmlinux.decompressor.id $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/vmlinux.decompressor.id - cp %{vmlinux_decompressor} $RPM_BUILD_ROOT%{debuginfodir}/lib/modules/$KernelVer/vmlinux.decompressor - fi - fi -%endif - - find $RPM_BUILD_ROOT/lib/modules/$KernelVer -name "*.ko" -type f >modnames - - # mark modules executable so that strip-to-file can strip them - xargs --no-run-if-empty chmod u+x < modnames - - # Generate a list of modules for block and networking. - - grep -F /drivers/ modnames | xargs --no-run-if-empty nm -upA | - sed -n 's,^.*/\([^/]*\.ko\): *U \(.*\)$,\1 \2,p' > drivers.undef - - collect_modules_list() - { - sed -r -n -e "s/^([^ ]+) \\.?($2)\$/\\1/p" drivers.undef | - LC_ALL=C sort -u > $RPM_BUILD_ROOT/lib/modules/$KernelVer/modules.$1 - if [ ! -z "$3" ]; then - sed -r -e "/^($3)\$/d" -i $RPM_BUILD_ROOT/lib/modules/$KernelVer/modules.$1 - fi - } - - collect_modules_list networking \ - 'register_netdev|ieee80211_register_hw|usbnet_probe|phy_driver_register|rt(l_|2x00)(pci|usb)_probe|register_netdevice' - collect_modules_list block \ - 'ata_scsi_ioctl|scsi_add_host|scsi_add_host_with_dma|blk_alloc_queue|blk_init_queue|register_mtd_blktrans|scsi_esp_register|scsi_register_device_handler|blk_queue_physical_block_size' 'pktcdvd.ko|dm-mod.ko' - collect_modules_list drm \ - 'drm_open|drm_init' - collect_modules_list modesetting \ - 'drm_crtc_init' - - # detect missing or incorrect license tags - ( find $RPM_BUILD_ROOT/lib/modules/$KernelVer -name '*.ko' | xargs /sbin/modinfo -l | \ - grep -E -v 'GPL( v2)?$|Dual BSD/GPL$|Dual MPL/GPL$|GPL and additional rights$' ) && exit 1 - - remove_depmod_files() - { - # remove files that will be auto generated by depmod at rpm -i time - pushd $RPM_BUILD_ROOT/lib/modules/$KernelVer/ - rm -f modules.{alias,alias.bin,builtin.alias.bin,builtin.bin} \ - modules.{dep,dep.bin,devname,softdep,symbols,symbols.bin} - popd - } - - remove_depmod_files - - # Identify modules in the kernel-modules-extras package - %{SOURCE20} $RPM_BUILD_ROOT lib/modules/$KernelVer $(realpath configs/mod-extra.list) - # Identify modules in the kernel-modules-extras package - %{SOURCE20} $RPM_BUILD_ROOT lib/modules/$KernelVer %{SOURCE84} internal - - # - # Generate the kernel-core and kernel-modules files lists - # - - # Copy the System.map file for depmod to use, and create a backup of the - # full module tree so we can restore it after we're done filtering - cp System.map $RPM_BUILD_ROOT/. - cp configs/filter-*.sh $RPM_BUILD_ROOT/. - pushd $RPM_BUILD_ROOT - mkdir restore - cp -r lib/modules/$KernelVer/* restore/. - - # don't include anything going into kernel-modules-extra in the file lists - xargs rm -rf < mod-extra.list - # don't include anything going int kernel-modules-internal in the file lists - xargs rm -rf < mod-internal.list - - if [ $DoModules -eq 1 ]; then - # Find all the module files and filter them out into the core and - # modules lists. This actually removes anything going into -modules - # from the dir. - find lib/modules/$KernelVer/kernel -name *.ko | sort -n > modules.list - ./filter-modules.sh modules.list %{_target_cpu} - rm filter-*.sh - - # Run depmod on the resulting module tree and make sure it isn't broken - depmod -b . -aeF ./System.map $KernelVer &> depmod.out - if [ -s depmod.out ]; then - echo "Depmod failure" - cat depmod.out - exit 1 - else - rm depmod.out - fi - else - # Ensure important files/directories exist to let the packaging succeed - echo '%%defattr(-,-,-)' > modules.list - echo '%%defattr(-,-,-)' > k-d.list - mkdir -p lib/modules/$KernelVer/kernel - # Add files usually created by make modules, needed to prevent errors - # thrown by depmod during package installation - touch lib/modules/$KernelVer/modules.order - touch lib/modules/$KernelVer/modules.builtin - fi - - remove_depmod_files - - # Go back and find all of the various directories in the tree. We use this - # for the dir lists in kernel-core - find lib/modules/$KernelVer/kernel -mindepth 1 -type d | sort -n > module-dirs.list - - # Cleanup - rm System.map - # Just "cp -r" can be very slow: here, it rewrites _existing files_ - # with open(O_TRUNC). Many filesystems synchronously wait for metadata - # update for such file rewrites (seen in strace as final close syscall - # taking a long time). On a rotational disk, cp was observed to take - # more than 5 minutes on ext4 and more than 15 minutes (!) on xfs. - # With --remove-destination, we avoid this, and copying - # (with enough RAM to cache it) takes 5 seconds: - cp -r --remove-destination restore/* lib/modules/$KernelVer/. - rm -rf restore - popd - - # Make sure the files lists start with absolute paths or rpmbuild fails. - # Also add in the dir entries - sed -e 's/^lib*/\/lib/' %{?zipsed} $RPM_BUILD_ROOT/k-d.list > ../kernel${Variant:+-${Variant}}-modules.list - sed -e 's/^lib*/%dir \/lib/' %{?zipsed} $RPM_BUILD_ROOT/module-dirs.list > ../kernel${Variant:+-${Variant}}-core.list - sed -e 's/^lib*/\/lib/' %{?zipsed} $RPM_BUILD_ROOT/modules.list >> ../kernel${Variant:+-${Variant}}-core.list - sed -e 's/^lib*/\/lib/' %{?zipsed} $RPM_BUILD_ROOT/mod-extra.list >> ../kernel${Variant:+-${Variant}}-modules-extra.list - sed -e 's/^lib*/\/lib/' %{?zipsed} $RPM_BUILD_ROOT/mod-internal.list >> ../kernel${Variant:+-${Variant}}-modules-internal.list - - # Cleanup - rm -f $RPM_BUILD_ROOT/k-d.list - rm -f $RPM_BUILD_ROOT/modules.list - rm -f $RPM_BUILD_ROOT/module-dirs.list - rm -f $RPM_BUILD_ROOT/mod-extra.list - rm -f $RPM_BUILD_ROOT/mod-internal.list - -%if %{signmodules} - if [ $DoModules -eq 1 ]; then - # Save the signing keys so we can sign the modules in __modsign_install_post - cp certs/signing_key.pem certs/signing_key.pem.sign${Variant:++${Variant}} - cp certs/signing_key.x509 certs/signing_key.x509.sign${Variant:++${Variant}} - fi -%endif - - # Move the devel headers out of the root file system - mkdir -p $RPM_BUILD_ROOT/usr/src/kernels - mv $RPM_BUILD_ROOT/lib/modules/$KernelVer/build $RPM_BUILD_ROOT/$DevelDir - - # This is going to create a broken link during the build, but we don't use - # it after this point. We need the link to actually point to something - # when kernel-devel is installed, and a relative link doesn't work across - # the F17 UsrMove feature. - ln -sf $DevelDir $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - -%ifnarch armv7hl - # Generate vmlinux.h and put it to kernel-devel path - bpftool btf dump file vmlinux format c > $RPM_BUILD_ROOT/$DevelDir/vmlinux.h -%endif - - # prune junk from kernel-devel - find $RPM_BUILD_ROOT/usr/src/kernels -name ".*.cmd" -delete - - # Red Hat UEFI Secure Boot CA cert, which can be used to authenticate the kernel - mkdir -p $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer - %ifarch x86_64 aarch64 - install -m 0644 %{secureboot_ca_0} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca-20200609.cer - install -m 0644 %{secureboot_ca_1} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca-20140212.cer - ln -s kernel-signing-ca-20200609.cer $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca.cer - %else - install -m 0644 %{secureboot_ca_0} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca.cer - %endif - %ifarch s390x ppc64le - if [ $DoModules -eq 1 ]; then - if [ -x /usr/bin/rpm-sign ]; then - install -m 0644 %{secureboot_key_0} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/%{signing_key_filename} - else - install -m 0644 certs/signing_key.x509.sign${Variant:++${Variant}} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca.cer - openssl x509 -in certs/signing_key.pem.sign${Variant:++${Variant}} -outform der -out $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/%{signing_key_filename} - chmod 0644 $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/%{signing_key_filename} - fi - fi - %endif - -%if %{with_ipaclones} - MAXPROCS=$(echo %{?_smp_mflags} | sed -n 's/-j\s*\([0-9]\+\)/\1/p') - if [ -z "$MAXPROCS" ]; then - MAXPROCS=1 - fi - if [ "$Variant" == "" ]; then - mkdir -p $RPM_BUILD_ROOT/$DevelDir-ipaclones - find . -name '*.ipa-clones' | xargs -i{} -r -n 1 -P $MAXPROCS install -m 644 -D "{}" "$RPM_BUILD_ROOT/$DevelDir-ipaclones/{}" - fi -%endif - -} - -### -# DO it... -### - -# prepare directories -rm -rf $RPM_BUILD_ROOT -mkdir -p $RPM_BUILD_ROOT/boot -mkdir -p $RPM_BUILD_ROOT%{_libexecdir} - -cd linux-%{KVERREL} - - -%if %{with_debug} -BuildKernel %make_target %kernel_image %{_use_vdso} debug -%endif - -%if %{with_zfcpdump} -BuildKernel %make_target %kernel_image %{_use_vdso} zfcpdump -%endif - -%if %{with_pae} -BuildKernel %make_target %kernel_image %{use_vdso} lpae -%endif - -%if %{with_up} -BuildKernel %make_target %kernel_image %{_use_vdso} -%endif - -%ifnarch noarch i686 -%if !%{with_debug} && !%{with_zfcpdump} && !%{with_pae} && !%{with_up} -# If only building the user space tools, then initialize the build environment -# and some variables so that the various userspace tools can be built. -InitBuildVars -%endif -%endif - -%ifarch aarch64 -%global perf_build_extra_opts CORESIGHT=1 -%endif -%global perf_make \ - %{__make} %{?make_opts} EXTRA_CFLAGS="${RPM_OPT_FLAGS}" LDFLAGS="%{__global_ldflags}" %{?cross_opts} -C tools/perf V=1 NO_PERF_READ_VDSO32=1 NO_PERF_READ_VDSOX32=1 WERROR=0 NO_LIBUNWIND=1 HAVE_CPLUS_DEMANGLE=1 NO_GTK2=1 NO_STRLCPY=1 NO_BIONIC=1 LIBBPF_DYNAMIC=1 LIBTRACEEVENT_DYNAMIC=1 %{?perf_build_extra_opts} prefix=%{_prefix} PYTHON=%{__python3} -%if %{with_perf} -# perf -# make sure check-headers.sh is executable -chmod +x tools/perf/check-headers.sh -%{perf_make} DESTDIR=$RPM_BUILD_ROOT all -%endif - -%global tools_make \ - CFLAGS="${RPM_OPT_FLAGS}" LDFLAGS="%{__global_ldflags}" %{make} %{?make_opts} - -%if %{with_tools} -%ifarch %{cpupowerarchs} -# cpupower -# make sure version-gen.sh is executable. -chmod +x tools/power/cpupower/utils/version-gen.sh -%{tools_make} %{?_smp_mflags} -C tools/power/cpupower CPUFREQ_BENCH=false DEBUG=false -%ifarch x86_64 - pushd tools/power/cpupower/debug/x86_64 - %{tools_make} %{?_smp_mflags} centrino-decode powernow-k8-decode - popd -%endif -%ifarch x86_64 - pushd tools/power/x86/x86_energy_perf_policy/ - %{tools_make} - popd - pushd tools/power/x86/turbostat - %{tools_make} - popd - pushd tools/power/x86/intel-speed-select - %{tools_make} - popd - pushd tools/arch/x86/intel_sdsi - %{tools_make} CFLAGS="${RPM_OPT_FLAGS}" - popd -%endif -%endif -pushd tools/thermal/tmon/ -%{tools_make} -popd -pushd tools/iio/ -%{tools_make} -popd -pushd tools/gpio/ -%{tools_make} -popd -# build VM tools -pushd tools/vm/ -%{tools_make} slabinfo page_owner_sort -popd -%endif - -if [ -f $DevelDir/vmlinux.h ]; then - RPM_VMLINUX_H=$DevelDir/vmlinux.h -fi - -%global bpftool_make \ - %{__make} EXTRA_CFLAGS="${RPM_OPT_FLAGS}" EXTRA_LDFLAGS="%{__global_ldflags}" DESTDIR=$RPM_BUILD_ROOT %{?make_opts} VMLINUX_H="${RPM_VMLINUX_H}" V=1 -%if %{with_bpftool} -pushd tools/bpf/bpftool -%{bpftool_make} -popd -%endif - -%if %{with_selftests} -# Unfortunately, samples/bpf/Makefile expects that the headers are installed -# in the source tree. We installed them previously to $RPM_BUILD_ROOT/usr -# but there's no way to tell the Makefile to take them from there. -%{make} %{?_smp_mflags} headers_install -%{make} %{?_smp_mflags} ARCH=$Arch V=1 M=samples/bpf/ || true - -# Prevent bpf selftests to build bpftool repeatedly: -export BPFTOOL=$(pwd)/tools/bpf/bpftool/bpftool - -pushd tools/testing/selftests -# We need to install here because we need to call make with ARCH set which -# doesn't seem possible to do in the install section. -%{make} %{?_smp_mflags} ARCH=$Arch V=1 TARGETS="bpf vm livepatch net net/forwarding net/mptcp netfilter tc-testing" SKIP_TARGETS="" INSTALL_PATH=%{buildroot}%{_libexecdir}/kselftests VMLINUX_H="${RPM_VMLINUX_H}" install - -# 'make install' for bpf is broken and upstream refuses to fix it. -# Install the needed files manually. -for dir in bpf bpf/no_alu32 bpf/progs; do - # In ARK, the rpm build continues even if some of the selftests - # cannot be built. It's not always possible to build selftests, - # as upstream sometimes dependens on too new llvm version or has - # other issues. If something did not get built, just skip it. - test -d $dir || continue - mkdir -p %{buildroot}%{_libexecdir}/kselftests/$dir - find $dir -maxdepth 1 -type f \( -executable -o -name '*.py' -o -name settings -o \ - -name 'btf_dump_test_case_*.c' -o -name '*.ko' -o \ - -name '*.o' -exec sh -c 'readelf -h "{}" | grep -q "^ Machine:.*BPF"' \; \) -print0 | \ - xargs -0 cp -t %{buildroot}%{_libexecdir}/kselftests/$dir || true -done -popd -export -n BPFTOOL -%endif - -%if %{with_doc} -# Make the HTML pages. -%{__make} PYTHON=/usr/bin/python3 htmldocs || %{doc_build_fail} - -# sometimes non-world-readable files sneak into the kernel source tree -chmod -R a=rX Documentation -find Documentation -type d | xargs chmod u+w -%endif - -# In the modsign case, we do 3 things. 1) We check the "variant" and hard -# code the value in the following invocations. This is somewhat sub-optimal -# but we're doing this inside of an RPM macro and it isn't as easy as it -# could be because of that. 2) We restore the .tmp_versions/ directory from -# the one we saved off in BuildKernel above. This is to make sure we're -# signing the modules we actually built/installed in that variant. 3) We -# grab the arch and invoke mod-sign.sh command to actually sign the modules. -# -# We have to do all of those things _after_ find-debuginfo runs, otherwise -# that will strip the signature off of the modules. -# -# Don't sign modules for the zfcpdump variant as it is monolithic. - -%define __modsign_install_post \ - if [ "%{signmodules}" -eq "1" ]; then \ - if [ "%{with_pae}" -ne "0" ]; then \ - %{modsign_cmd} certs/signing_key.pem.sign+lpae certs/signing_key.x509.sign+lpae $RPM_BUILD_ROOT/lib/modules/%{KVERREL}+lpae/ \ - fi \ - if [ "%{with_debug}" -ne "0" ]; then \ - %{modsign_cmd} certs/signing_key.pem.sign+debug certs/signing_key.x509.sign+debug $RPM_BUILD_ROOT/lib/modules/%{KVERREL}+debug/ \ - fi \ - if [ "%{with_up}" -ne "0" ]; then \ - %{modsign_cmd} certs/signing_key.pem.sign certs/signing_key.x509.sign $RPM_BUILD_ROOT/lib/modules/%{KVERREL}/ \ - fi \ - fi \ - if [ "%{zipmodules}" -eq "1" ]; then \ - find $RPM_BUILD_ROOT/lib/modules/ -type f -name '*.ko' | xargs -P${RPM_BUILD_NCPUS} -r xz; \ - fi \ -%{nil} - -### -### Special hacks for debuginfo subpackages. -### - -# This macro is used by %%install, so we must redefine it before that. -%define debug_package %{nil} - -%if %{with_debuginfo} - -%ifnarch noarch -%global __debug_package 1 -%files -f debugfiles.list debuginfo-common-%{_target_cpu} -%endif - -%endif - -# We don't want to package debuginfo for self-tests and samples but -# we have to delete them to avoid an error messages about unpackaged -# files. -# Delete the debuginfo for kernel-devel files -%define __remove_unwanted_dbginfo_install_post \ - if [ "%{with_selftests}" -ne "0" ]; then \ - rm -rf $RPM_BUILD_ROOT/usr/lib/debug/usr/libexec/ksamples; \ - rm -rf $RPM_BUILD_ROOT/usr/lib/debug/usr/libexec/kselftests; \ - fi \ - rm -rf $RPM_BUILD_ROOT/usr/lib/debug/usr/src; \ -%{nil} - -# -# Disgusting hack alert! We need to ensure we sign modules *after* all -# invocations of strip occur, which is in __debug_install_post if -# find-debuginfo.sh runs, and __os_install_post if not. -# -%define __spec_install_post \ - %{?__debug_package:%{__debug_install_post}}\ - %{__arch_install_post}\ - %{__os_install_post}\ - %{__remove_unwanted_dbginfo_install_post}\ - %{__modsign_install_post} - -### -### install -### - -%install - -cd linux-%{KVERREL} - -%if %{with_doc} -docdir=$RPM_BUILD_ROOT%{_datadir}/doc/kernel-doc-%{specversion}-%{pkgrelease} - -# copy the source over -mkdir -p $docdir -tar -h -f - --exclude=man --exclude='.*' -c Documentation | tar xf - -C $docdir - -# with_doc -%endif - -# We have to do the headers install before the tools install because the -# kernel headers_install will remove any header files in /usr/include that -# it doesn't install itself. - -%if %{with_headers} -# Install kernel headers -%{__make} ARCH=%{hdrarch} INSTALL_HDR_PATH=$RPM_BUILD_ROOT/usr headers_install - -find $RPM_BUILD_ROOT/usr/include \ - \( -name .install -o -name .check -o \ - -name ..install.cmd -o -name ..check.cmd \) -delete - -%endif - -%if %{with_cross_headers} -%if 0%{?fedora} -HDR_ARCH_LIST='arm arm64 powerpc s390 x86' -%else -HDR_ARCH_LIST='arm64 powerpc s390 x86' -%endif -mkdir -p $RPM_BUILD_ROOT/usr/tmp-headers - -for arch in $HDR_ARCH_LIST; do - mkdir $RPM_BUILD_ROOT/usr/tmp-headers/arch-${arch} - %{__make} ARCH=${arch} INSTALL_HDR_PATH=$RPM_BUILD_ROOT/usr/tmp-headers/arch-${arch} headers_install -done - -find $RPM_BUILD_ROOT/usr/tmp-headers \ - \( -name .install -o -name .check -o \ - -name ..install.cmd -o -name ..check.cmd \) -delete - -# Copy all the architectures we care about to their respective asm directories -for arch in $HDR_ARCH_LIST ; do - mkdir -p $RPM_BUILD_ROOT/usr/${arch}-linux-gnu/include - mv $RPM_BUILD_ROOT/usr/tmp-headers/arch-${arch}/include/* $RPM_BUILD_ROOT/usr/${arch}-linux-gnu/include/ -done - -rm -rf $RPM_BUILD_ROOT/usr/tmp-headers -%endif - -%if %{with_kernel_abi_stablelists} -# kabi directory -INSTALL_KABI_PATH=$RPM_BUILD_ROOT/lib/modules/ -mkdir -p $INSTALL_KABI_PATH - -# install kabi releases directories -tar xjvf %{SOURCE300} -C $INSTALL_KABI_PATH -# with_kernel_abi_stablelists -%endif - -%if %{with_perf} -# perf tool binary and supporting scripts/binaries -%{perf_make} DESTDIR=$RPM_BUILD_ROOT lib=%{_lib} install-bin -# remove the 'trace' symlink. -rm -f %{buildroot}%{_bindir}/trace - -# For both of the below, yes, this should be using a macro but right now -# it's hard coded and we don't actually want it anyway right now. -# Whoever wants examples can fix it up! - -# remove examples -rm -rf %{buildroot}/usr/lib/perf/examples -rm -rf %{buildroot}/usr/lib/perf/include - -# python-perf extension -%{perf_make} DESTDIR=$RPM_BUILD_ROOT install-python_ext - -# perf man pages (note: implicit rpm magic compresses them later) -mkdir -p %{buildroot}/%{_mandir}/man1 -%{perf_make} DESTDIR=$RPM_BUILD_ROOT install-man - -# remove any tracevent files, eg. its plugins still gets built and installed, -# even if we build against system's libtracevent during perf build (by setting -# LIBTRACEEVENT_DYNAMIC=1 above in perf_make macro). Those files should already -# ship with libtraceevent package. -rm -rf %{buildroot}%{_libdir}/traceevent -%endif - -%if %{with_tools} -%ifarch %{cpupowerarchs} -%{make} -C tools/power/cpupower DESTDIR=$RPM_BUILD_ROOT libdir=%{_libdir} mandir=%{_mandir} CPUFREQ_BENCH=false install -rm -f %{buildroot}%{_libdir}/*.{a,la} -%find_lang cpupower -mv cpupower.lang ../ -%ifarch x86_64 - pushd tools/power/cpupower/debug/x86_64 - install -m755 centrino-decode %{buildroot}%{_bindir}/centrino-decode - install -m755 powernow-k8-decode %{buildroot}%{_bindir}/powernow-k8-decode - popd -%endif -chmod 0755 %{buildroot}%{_libdir}/libcpupower.so* -mkdir -p %{buildroot}%{_unitdir} %{buildroot}%{_sysconfdir}/sysconfig -install -m644 %{SOURCE2000} %{buildroot}%{_unitdir}/cpupower.service -install -m644 %{SOURCE2001} %{buildroot}%{_sysconfdir}/sysconfig/cpupower -%endif -%ifarch x86_64 - mkdir -p %{buildroot}%{_mandir}/man8 - pushd tools/power/x86/x86_energy_perf_policy - %{tools_make} DESTDIR=%{buildroot} install - popd - pushd tools/power/x86/turbostat - %{tools_make} DESTDIR=%{buildroot} install - popd - pushd tools/power/x86/intel-speed-select - %{tools_make} DESTDIR=%{buildroot} install - popd - pushd tools/arch/x86/intel_sdsi - %{tools_make} CFLAGS="${RPM_OPT_FLAGS}" DESTDIR=%{buildroot} install - popd -%endif -pushd tools/thermal/tmon -%{tools_make} INSTALL_ROOT=%{buildroot} install -popd -pushd tools/iio -%{tools_make} DESTDIR=%{buildroot} install -popd -pushd tools/gpio -%{tools_make} DESTDIR=%{buildroot} install -popd -install -m644 -D %{SOURCE2002} %{buildroot}%{_sysconfdir}/logrotate.d/kvm_stat -pushd tools/kvm/kvm_stat -%{__make} INSTALL_ROOT=%{buildroot} install-tools -%{__make} INSTALL_ROOT=%{buildroot} install-man -install -m644 -D kvm_stat.service %{buildroot}%{_unitdir}/kvm_stat.service -popd -# install VM tools -pushd tools/vm/ -install -m755 slabinfo %{buildroot}%{_bindir}/slabinfo -install -m755 page_owner_sort %{buildroot}%{_bindir}/page_owner_sort -popd -%endif - -if [ -f $DevelDir/vmlinux.h ]; then - RPM_VMLINUX_H=$DevelDir/vmlinux.h -fi - -%if %{with_bpftool} -pushd tools/bpf/bpftool -%{bpftool_make} prefix=%{_prefix} bash_compdir=%{_sysconfdir}/bash_completion.d/ mandir=%{_mandir} install doc-install -popd -%endif - -%if %{with_selftests} -pushd samples -install -d %{buildroot}%{_libexecdir}/ksamples -# install bpf samples -pushd bpf -install -d %{buildroot}%{_libexecdir}/ksamples/bpf -find -type f -executable -exec install -m755 {} %{buildroot}%{_libexecdir}/ksamples/bpf \; -install -m755 *.sh %{buildroot}%{_libexecdir}/ksamples/bpf -# test_lwt_bpf.sh compiles test_lwt_bpf.c when run; this works only from the -# kernel tree. Just remove it. -rm %{buildroot}%{_libexecdir}/ksamples/bpf/test_lwt_bpf.sh -install -m644 *_kern.o %{buildroot}%{_libexecdir}/ksamples/bpf || true -install -m644 tcp_bpf.readme %{buildroot}%{_libexecdir}/ksamples/bpf -popd -# install pktgen samples -pushd pktgen -install -d %{buildroot}%{_libexecdir}/ksamples/pktgen -find . -type f -executable -exec install -m755 {} %{buildroot}%{_libexecdir}/ksamples/pktgen/{} \; -find . -type f ! -executable -exec install -m644 {} %{buildroot}%{_libexecdir}/ksamples/pktgen/{} \; -popd -popd -# install vm selftests -pushd tools/testing/selftests/vm -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/vm/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/vm/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/vm/{} \; -popd -# install drivers/net/mlxsw selftests -pushd tools/testing/selftests/drivers/net/mlxsw -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/drivers/net/mlxsw/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/drivers/net/mlxsw/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/drivers/net/mlxsw/{} \; -popd -# install drivers/net/netdevsim selftests -pushd tools/testing/selftests/drivers/net/netdevsim -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/drivers/net/netdevsim/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/drivers/net/netdevsim/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/drivers/net/netdevsim/{} \; -popd -# install net/forwarding selftests -pushd tools/testing/selftests/net/forwarding -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/net/forwarding/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/net/forwarding/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/net/forwarding/{} \; -popd -# install net/mptcp selftests -pushd tools/testing/selftests/net/mptcp -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/net/mptcp/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/net/mptcp/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/net/mptcp/{} \; -popd -# install tc-testing selftests -pushd tools/testing/selftests/tc-testing -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/tc-testing/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/tc-testing/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/tc-testing/{} \; -popd -# install livepatch selftests -pushd tools/testing/selftests/livepatch -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/livepatch/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/livepatch/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/livepatch/{} \; -popd -# install netfilter selftests -pushd tools/testing/selftests/netfilter -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/netfilter/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/netfilter/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/netfilter/{} \; -popd -%endif - -### -### clean -### - -### -### scripts -### - -%if %{with_tools} -%post -n kernel-tools-libs -/sbin/ldconfig - -%postun -n kernel-tools-libs -/sbin/ldconfig -%endif - -# -# This macro defines a %%post script for a kernel*-devel package. -# %%kernel_devel_post [<subpackage>] -# Note we don't run hardlink if ostree is in use, as ostree is -# a far more sophisticated hardlink implementation. -# https://github.com/projectatomic/rpm-ostree/commit/58a79056a889be8814aa51f507b2c7a4dccee526 -# -# The deletion of *.hardlink-temporary files is a temporary workaround -# for this bug in the hardlink binary (fixed in util-linux 2.38): -# https://github.com/util-linux/util-linux/issues/1602 -# -%define kernel_devel_post() \ -%{expand:%%post %{?1:%{1}-}devel}\ -if [ -f /etc/sysconfig/kernel ]\ -then\ - . /etc/sysconfig/kernel || exit $?\ -fi\ -if [ "$HARDLINK" != "no" -a -x /usr/bin/hardlink -a ! -e /run/ostree-booted ] \ -then\ - (cd /usr/src/kernels/%{KVERREL}%{?1:+%{1}} &&\ - /usr/bin/find . -type f | while read f; do\ - hardlink -c /usr/src/kernels/*%{?dist}.*/$f $f > /dev/null\ - done;\ - /usr/bin/find /usr/src/kernels -type f -name '*.hardlink-temporary' -delete\ - )\ -fi\ -%{nil} - -# -# This macro defines a %%post script for a kernel*-modules-extra package. -# It also defines a %%postun script that does the same thing. -# %%kernel_modules_extra_post [<subpackage>] -# -%define kernel_modules_extra_post() \ -%{expand:%%post %{?1:%{1}-}modules-extra}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil}\ -%{expand:%%postun %{?1:%{1}-}modules-extra}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil} - -# -# This macro defines a %%post script for a kernel*-modules-internal package. -# It also defines a %%postun script that does the same thing. -# %%kernel_modules_internal_post [<subpackage>] -# -%define kernel_modules_internal_post() \ -%{expand:%%post %{?1:%{1}-}modules-internal}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil}\ -%{expand:%%postun %{?1:%{1}-}modules-internal}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil} - -# -# This macro defines a %%post script for a kernel*-modules package. -# It also defines a %%postun script that does the same thing. -# %%kernel_modules_post [<subpackage>] -# -%define kernel_modules_post() \ -%{expand:%%post %{?1:%{1}-}modules}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -if [ ! -f %{_localstatedir}/lib/rpm-state/%{name}/installing_core_%{KVERREL}%{?1:+%{1}} ]; then\ - mkdir -p %{_localstatedir}/lib/rpm-state/%{name}\ - touch %{_localstatedir}/lib/rpm-state/%{name}/need_to_run_dracut_%{KVERREL}%{?1:+%{1}}\ -fi\ -%{nil}\ -%{expand:%%postun %{?1:%{1}-}modules}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil}\ -%{expand:%%posttrans %{?1:%{1}-}modules}\ -if [ -f %{_localstatedir}/lib/rpm-state/%{name}/need_to_run_dracut_%{KVERREL}%{?1:+%{1}} ]; then\ - rm -f %{_localstatedir}/lib/rpm-state/%{name}/need_to_run_dracut_%{KVERREL}%{?1:+%{1}}\ - echo "Running: dracut -f --kver %{KVERREL}%{?1:+%{1}}"\ - dracut -f --kver "%{KVERREL}%{?1:+%{1}}" || exit $?\ -fi\ -%{nil} - -# This macro defines a %%posttrans script for a kernel package. -# %%kernel_variant_posttrans [<subpackage>] -# More text can follow to go at the end of this variant's %%post. -# -%define kernel_variant_posttrans() \ -%{expand:%%posttrans %{?1:%{1}-}core}\ -%if 0%{!?fedora:1}\ -if [ -x %{_sbindir}/weak-modules ]\ -then\ - %{_sbindir}/weak-modules --add-kernel %{KVERREL}%{?1:+%{1}} || exit $?\ -fi\ -%endif\ -rm -f %{_localstatedir}/lib/rpm-state/%{name}/installing_core_%{KVERREL}%{?1:+%{1}}\ -/bin/kernel-install add %{KVERREL}%{?1:+%{1}} /lib/modules/%{KVERREL}%{?1:+%{1}}/vmlinuz || exit $?\ -%{nil} - -# -# This macro defines a %%post script for a kernel package and its devel package. -# %%kernel_variant_post [-v <subpackage>] [-r <replace>] -# More text can follow to go at the end of this variant's %%post. -# -%define kernel_variant_post(v:r:) \ -%{expand:%%kernel_devel_post %{?-v*}}\ -%{expand:%%kernel_modules_post %{?-v*}}\ -%{expand:%%kernel_modules_extra_post %{?-v*}}\ -%{expand:%%kernel_modules_internal_post %{?-v*}}\ -%{expand:%%kernel_variant_posttrans %{?-v*}}\ -%{expand:%%post %{?-v*:%{-v*}-}core}\ -%{-r:\ -if [ `uname -i` == "x86_64" -o `uname -i` == "i386" ] &&\ - [ -f /etc/sysconfig/kernel ]; then\ - /bin/sed -r -i -e 's/^DEFAULTKERNEL=%{-r*}$/DEFAULTKERNEL=kernel%{?-v:-%{-v*}}/' /etc/sysconfig/kernel || exit $?\ -fi}\ -mkdir -p %{_localstatedir}/lib/rpm-state/%{name}\ -touch %{_localstatedir}/lib/rpm-state/%{name}/installing_core_%{KVERREL}%{?1:+%{1}}\ -%{nil} - -# -# This macro defines a %%preun script for a kernel package. -# %%kernel_variant_preun <subpackage> -# -%define kernel_variant_preun() \ -%{expand:%%preun %{?1:%{1}-}core}\ -/bin/kernel-install remove %{KVERREL}%{?1:+%{1}} /lib/modules/%{KVERREL}%{?1:+%{1}}/vmlinuz || exit $?\ -if [ -x %{_sbindir}/weak-modules ]\ -then\ - %{_sbindir}/weak-modules --remove-kernel %{KVERREL}%{?1:+%{1}} || exit $?\ -fi\ -%{nil} - -%kernel_variant_preun -%kernel_variant_post -r kernel-smp - -%if %{with_pae} -%kernel_variant_preun lpae -%kernel_variant_post -v lpae -r (kernel|kernel-smp) -%endif - -%if %{with_debug} -%kernel_variant_preun debug -%kernel_variant_post -v debug -%endif - -%if %{with_zfcpdump} -%kernel_variant_preun zfcpdump -%kernel_variant_post -v zfcpdump -%endif - -if [ -x /sbin/ldconfig ] -then - /sbin/ldconfig -X || exit $? -fi - -### -### file lists -### - -%if %{with_headers} -%files headers -/usr/include/* -%endif - -%if %{with_cross_headers} -%files cross-headers -/usr/*-linux-gnu/include/* -%endif - -%if %{with_kernel_abi_stablelists} -%files -n kernel-abi-stablelists -/lib/modules/kabi-* -%endif - -%if %{with_kabidw_base} -%ifarch x86_64 s390x ppc64 ppc64le aarch64 -%files kernel-kabidw-base-internal -%defattr(-,root,root) -/kabidw-base/%{_target_cpu}/* -%endif -%endif - -# only some architecture builds need kernel-doc -%if %{with_doc} -%files doc -%defattr(-,root,root) -%{_datadir}/doc/kernel-doc-%{specversion}-%{pkgrelease}/Documentation/* -%dir %{_datadir}/doc/kernel-doc-%{specversion}-%{pkgrelease}/Documentation -%dir %{_datadir}/doc/kernel-doc-%{specversion}-%{pkgrelease} -%endif - -%if %{with_perf} -%files -n perf -%{_bindir}/perf -%{_libdir}/libperf-jvmti.so -%dir %{_libexecdir}/perf-core -%{_libexecdir}/perf-core/* -%{_datadir}/perf-core/* -%{_mandir}/man[1-8]/perf* -%{_sysconfdir}/bash_completion.d/perf -%doc linux-%{KVERREL}/tools/perf/Documentation/examples.txt -%{_docdir}/perf-tip/tips.txt - -%files -n python3-perf -%{python3_sitearch}/* - -%if %{with_debuginfo} -%files -f perf-debuginfo.list -n perf-debuginfo - -%files -f python3-perf-debuginfo.list -n python3-perf-debuginfo -%endif -# with_perf -%endif - -%if %{with_tools} -%ifnarch %{cpupowerarchs} -%files -n kernel-tools -%else -%files -n kernel-tools -f cpupower.lang -%{_bindir}/cpupower -%{_datadir}/bash-completion/completions/cpupower -%ifarch x86_64 -%{_bindir}/centrino-decode -%{_bindir}/powernow-k8-decode -%endif -%{_unitdir}/cpupower.service -%{_mandir}/man[1-8]/cpupower* -%config(noreplace) %{_sysconfdir}/sysconfig/cpupower -%ifarch x86_64 -%{_bindir}/x86_energy_perf_policy -%{_mandir}/man8/x86_energy_perf_policy* -%{_bindir}/turbostat -%{_mandir}/man8/turbostat* -%{_bindir}/intel-speed-select -%{_sbindir}/intel_sdsi -%endif -# cpupowerarchs -%endif -%{_bindir}/tmon -%{_bindir}/iio_event_monitor -%{_bindir}/iio_generic_buffer -%{_bindir}/lsiio -%{_bindir}/lsgpio -%{_bindir}/gpio-hammer -%{_bindir}/gpio-event-mon -%{_bindir}/gpio-watch -%{_mandir}/man1/kvm_stat* -%{_bindir}/kvm_stat -%{_unitdir}/kvm_stat.service -%config(noreplace) %{_sysconfdir}/logrotate.d/kvm_stat -%{_bindir}/page_owner_sort -%{_bindir}/slabinfo - -%if %{with_debuginfo} -%files -f kernel-tools-debuginfo.list -n kernel-tools-debuginfo -%endif - -%ifarch %{cpupowerarchs} -%files -n kernel-tools-libs -%{_libdir}/libcpupower.so.0 -%{_libdir}/libcpupower.so.0.0.1 - -%files -n kernel-tools-libs-devel -%{_libdir}/libcpupower.so -%{_includedir}/cpufreq.h -%endif -# with_tools -%endif - -%if %{with_bpftool} -%files -n bpftool -%{_sbindir}/bpftool -%{_sysconfdir}/bash_completion.d/bpftool -%{_mandir}/man8/bpftool-cgroup.8.gz -%{_mandir}/man8/bpftool-gen.8.gz -%{_mandir}/man8/bpftool-iter.8.gz -%{_mandir}/man8/bpftool-link.8.gz -%{_mandir}/man8/bpftool-map.8.gz -%{_mandir}/man8/bpftool-prog.8.gz -%{_mandir}/man8/bpftool-perf.8.gz -%{_mandir}/man8/bpftool.8.gz -%{_mandir}/man8/bpftool-net.8.gz -%{_mandir}/man8/bpftool-feature.8.gz -%{_mandir}/man8/bpftool-btf.8.gz -%{_mandir}/man8/bpftool-struct_ops.8.gz - -%if %{with_debuginfo} -%files -f bpftool-debuginfo.list -n bpftool-debuginfo -%defattr(-,root,root) -%endif -%endif - -%if %{with_selftests} -%files selftests-internal -%{_libexecdir}/ksamples -%{_libexecdir}/kselftests -%endif - -# empty meta-package -%ifnarch %nobuildarches noarch -%files -%endif - -%if %{with_gcov} -%ifnarch %nobuildarches noarch -%files gcov -%{_builddir} -%endif -%endif - -# This is %%{image_install_path} on an arch where that includes ELF files, -# or empty otherwise. -%define elf_image_install_path %{?kernel_image_elf:%{image_install_path}} - -# -# This macro defines the %%files sections for a kernel package -# and its devel and debuginfo packages. -# %%kernel_variant_files [-k vmlinux] <use_vdso> <condition> <subpackage> -# -%define kernel_variant_files(k:) \ -%if %{2}\ -%{expand:%%files -f kernel-%{?3:%{3}-}core.list %{?1:-f kernel-%{?3:%{3}-}ldsoconf.list} %{?3:%{3}-}core}\ -%{!?_licensedir:%global license %%doc}\ -%license linux-%{KVERREL}/COPYING-%{version}-%{release}\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/%{?-k:%{-k*}}%{!?-k:vmlinuz}\ -%ghost /%{image_install_path}/%{?-k:%{-k*}}%{!?-k:vmlinuz}-%{KVERREL}%{?3:+%{3}}\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/.vmlinuz.hmac \ -%ghost /%{image_install_path}/.vmlinuz-%{KVERREL}%{?3:+%{3}}.hmac \ -%ifarch %{arm} aarch64\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/dtb \ -%ghost /%{image_install_path}/dtb-%{KVERREL}%{?3:+%{3}} \ -%endif\ -%attr(0600, root, root) /lib/modules/%{KVERREL}%{?3:+%{3}}/System.map\ -%ghost %attr(0600, root, root) /boot/System.map-%{KVERREL}%{?3:+%{3}}\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/symvers.gz\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/config\ -%ghost %attr(0600, root, root) /boot/symvers-%{KVERREL}%{?3:+%{3}}.gz\ -%ghost %attr(0600, root, root) /boot/initramfs-%{KVERREL}%{?3:+%{3}}.img\ -%ghost %attr(0644, root, root) /boot/config-%{KVERREL}%{?3:+%{3}}\ -%dir /lib/modules\ -%dir /lib/modules/%{KVERREL}%{?3:+%{3}}\ -%dir /lib/modules/%{KVERREL}%{?3:+%{3}}/kernel\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/build\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/source\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/updates\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/weak-updates\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/systemtap\ -%{_datadir}/doc/kernel-keys/%{KVERREL}%{?3:+%{3}}\ -%if %{1}\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/vdso\ -%endif\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/modules.*\ -%{expand:%%files -f kernel-%{?3:%{3}-}modules.list %{?3:%{3}-}modules}\ -%{expand:%%files %{?3:%{3}-}devel}\ -%defverify(not mtime)\ -/usr/src/kernels/%{KVERREL}%{?3:+%{3}}\ -%{expand:%%files %{?3:%{3}-}devel-matched}\ -%{expand:%%files -f kernel-%{?3:%{3}-}modules-extra.list %{?3:%{3}-}modules-extra}\ -%config(noreplace) /etc/modprobe.d/*-blacklist.conf\ -%{expand:%%files -f kernel-%{?3:%{3}-}modules-internal.list %{?3:%{3}-}modules-internal}\ -%if %{with_debuginfo}\ -%ifnarch noarch\ -%{expand:%%files -f debuginfo%{?3}.list %{?3:%{3}-}debuginfo}\ -%endif\ -%endif\ -%if %{?3:1} %{!?3:0}\ -%{expand:%%files %{3}}\ -%endif\ -%endif\ -%{nil} - -%kernel_variant_files %{_use_vdso} %{with_up} -%kernel_variant_files %{_use_vdso} %{with_debug} debug -%if %{with_debug_meta} -%files debug -%files debug-core -%files debug-devel -%files debug-devel-matched -%files debug-modules -%files debug-modules-extra -%endif -%kernel_variant_files %{use_vdso} %{with_pae} lpae -%kernel_variant_files %{_use_vdso} %{with_zfcpdump} zfcpdump - -%define kernel_variant_ipaclones(k:) \ -%if %{1}\ -%if %{with_ipaclones}\ -%{expand:%%files %{?2:%{2}-}ipaclones-internal}\ -%defattr(-,root,root)\ -%defverify(not mtime)\ -/usr/src/kernels/%{KVERREL}%{?2:+%{2}}-ipaclones\ -%endif\ -%endif\ -%{nil} - -%kernel_variant_ipaclones %{with_up} - -# plz don't put in a version string unless you're going to tag -# and build. -# -# -%changelog Mon Mar 28 2022 Fedora Kernel Team <kernel-team@xxxxxxxxxxxxxxxxx> [5.17.0-0.rc0.78e36f3b0dae.6.test] - -### -# The following Emacs magic makes C-c C-e use UTC dates. -# Local Variables: -# rpm-change-log-uses-utc: t -# End: -### diff --git a/redhat/self-test/data/fedora-df0cc57e057f.el7.spec b/redhat/self-test/data/fedora-df0cc57e057f.el7.spec index blahblah..blahblah 100755 --- a/redhat/self-test/data/fedora-df0cc57e057f.el7.spec +++ b/redhat/self-test/data/fedora-df0cc57e057f.el7.spec @@ -1,3050 +1,13 @@ -# All Global changes to build and install go here. -# Per the below section about __spec_install_pre, any rpm -# environment changes that affect %%install need to go -# here before the %%install macro is pre-built. - -# Disable LTO in userspace packages. -%global _lto_cflags %{nil} - -# Option to enable compiling with clang instead of gcc. -%bcond_with toolchain_clang - -%if %{with toolchain_clang} -%global toolchain clang -%endif - -# Compile the kernel with LTO (only supported when building with clang). -%bcond_with clang_lto - -%if %{with clang_lto} && %{without toolchain_clang} -{error:clang_lto requires --with toolchain_clang} -%endif - -# Cross compile on copr for arm -# See https://bugzilla.redhat.com/1879599 -%if 0%{?_with_cross_arm:1} -%global _target_cpu armv7hl -%global _arch arm -%global _build_arch arm -%global _with_cross 1 -%endif - -# The kernel's %%install section is special -# Normally the %%install section starts by cleaning up the BUILD_ROOT -# like so: -# -# %%__spec_install_pre %%{___build_pre}\ -# [ "$RPM_BUILD_ROOT" != "/" ] && rm -rf "${RPM_BUILD_ROOT}"\ -# mkdir -p `dirname "$RPM_BUILD_ROOT"`\ -# mkdir "$RPM_BUILD_ROOT"\ -# %%{nil} -# -# But because of kernel variants, the %%build section, specifically -# BuildKernel(), moves each variant to its final destination as the -# variant is built. This violates the expectation of the %%install -# section. As a result we snapshot the current env variables and -# purposely leave out the removal section. All global wide changes -# should be added above this line otherwise the %%install section -# will not see them. -%global __spec_install_pre %{___build_pre} - -# At the time of this writing (2019-03), RHEL8 packages use w2.xzdio -# compression for rpms (xz, level 2). -# Kernel has several large (hundreds of mbytes) rpms, they take ~5 mins -# to compress by single-threaded xz. Switch to threaded compression, -# and from level 2 to 3 to keep compressed sizes close to "w2" results. -# -# NB: if default compression in /usr/lib/rpm/redhat/macros ever changes, -# this one might need tweaking (e.g. if default changes to w3.xzdio, -# change below to w4T.xzdio): -# -# This is disabled on i686 as it triggers oom errors - -%ifnarch i686 -%define _binary_payload w3T.xzdio -%endif - -Summary: The Linux kernel -%if 0%{?fedora} -%define secure_boot_arch x86_64 -%else -%define secure_boot_arch x86_64 aarch64 s390x ppc64le -%endif - -# Signing for secure boot authentication -%ifarch %{secure_boot_arch} -%global signkernel 1 -%else -%global signkernel 0 -%endif - -# Sign modules on all arches -%global signmodules 1 - -# Compress modules only for architectures that build modules -%ifarch noarch -%global zipmodules 0 -%else -%global zipmodules 1 -%endif - -%if %{zipmodules} -%global zipsed -e 's/\.ko$/\.ko.xz/' -# for parallel xz processes, replace with 1 to go back to single process -%endif - -%if 0%{?fedora} -%define primary_target fedora -%else -%define primary_target rhel -%endif - -# -# genspec.sh variables -# - -# Include Fedora files %global include_fedora 1 -# Include RHEL files %global include_rhel 1 -# Provide Patchlist.changelog file %global patchlist_changelog 1 -# Set released_kernel to 1 when the upstream source tarball contains a -# kernel release. (This includes prepatch or "rc" releases.) -# Set released_kernel to 0 when the upstream source tarball contains an -# unreleased kernel development snapshot. %global released_kernel 0 -# Set debugbuildsenabled to 1 to build separate base and debug kernels -# (on supported architectures). The kernel-debug-* subpackages will -# contain the debug kernel. -# Set debugbuildsenabled to 0 to not build a separate debug kernel, but -# to build the base kernel using the debug configuration. (Specifying -# the --with-release option overrides this setting.) -%define debugbuildsenabled 1 %define buildid .test %define specversion 5.16.0 %define patchversion 5.16 %define pkgrelease 6.test %define kversion 5 %define tarfile_release 5.16 -# This is needed to do merge window version magic %define patchlevel 16 -# allow pkg_release to have configurable %%{?dist} tag %define specrelease 6%{?buildid}%{?dist} - -# -# End of genspec.sh variables -# - -%define pkg_release %{specrelease} - -# libexec dir is not used by the linker, so the shared object there -# should not be exported to RPM provides -%global __provides_exclude_from ^%{_libexecdir}/kselftests - -# The following build options are enabled by default, but may become disabled -# by later architecture-specific checks. These can also be disabled by using -# --without <opt> in the rpmbuild command, or by forcing these values to 0. -# -# standard kernel -%define with_up %{?_without_up: 0} %{?!_without_up: 1} -# kernel PAE (only valid for ARM (lpae)) -%define with_pae %{?_without_pae: 0} %{?!_without_pae: 1} -# kernel-debug -%define with_debug %{?_without_debug: 0} %{?!_without_debug: 1} -# kernel-zfcpdump (s390 specific kernel for zfcpdump) -%define with_zfcpdump %{?_without_zfcpdump: 0} %{?!_without_zfcpdump: 1} -# kernel-doc -%define with_doc %{?_without_doc: 0} %{?!_without_doc: 1} -# kernel-headers -%define with_headers %{?_without_headers: 0} %{?!_without_headers: 1} -%define with_cross_headers %{?_without_cross_headers: 0} %{?!_without_cross_headers: 1} -# perf -%define with_perf %{?_without_perf: 0} %{?!_without_perf: 1} -# tools -%define with_tools %{?_without_tools: 0} %{?!_without_tools: 1} -# bpf tool -%define with_bpftool %{?_without_bpftool: 0} %{?!_without_bpftool: 1} -# kernel-debuginfo -%define with_debuginfo %{?_without_debuginfo: 0} %{?!_without_debuginfo: 1} -# kernel-abi-stablelists -%define with_kernel_abi_stablelists %{?_without_kernel_abi_stablelists: 0} %{?!_without_kernel_abi_stablelists: 1} -# internal samples and selftests -%define with_selftests %{?_without_selftests: 0} %{?!_without_selftests: 1} -# -# Additional options for user-friendly one-off kernel building: -# -# Only build the base kernel (--with baseonly): -%define with_baseonly %{?_with_baseonly: 1} %{?!_with_baseonly: 0} -# Only build the pae kernel (--with paeonly): -%define with_paeonly %{?_with_paeonly: 1} %{?!_with_paeonly: 0} -# Only build the debug kernel (--with dbgonly): -%define with_dbgonly %{?_with_dbgonly: 1} %{?!_with_dbgonly: 0} -# Control whether we perform a compat. check against published ABI. -%define with_kabichk %{?_without_kabichk: 0} %{?!_without_kabichk: 1} -# Temporarily disable kabi checks until RC. -%define with_kabichk 0 -# Control whether we perform a compat. check against DUP ABI. -%define with_kabidupchk %{?_with_kabidupchk: 1} %{?!_with_kabidupchk: 0} -# -# Control whether to run an extensive DWARF based kABI check. -# Note that this option needs to have baseline setup in SOURCE300. -%define with_kabidwchk %{?_without_kabidwchk: 0} %{?!_without_kabidwchk: 1} -%define with_kabidw_base %{?_with_kabidw_base: 1} %{?!_with_kabidw_base: 0} -# -# Control whether to install the vdso directories. -%define with_vdso_install %{?_without_vdso_install: 0} %{?!_without_vdso_install: 1} -# -# should we do C=1 builds with sparse -%define with_sparse %{?_with_sparse: 1} %{?!_with_sparse: 0} -# -# Cross compile requested? -%define with_cross %{?_with_cross: 1} %{?!_with_cross: 0} -# -# build a release kernel on rawhide -%define with_release %{?_with_release: 1} %{?!_with_release: 0} - -# verbose build, i.e. no silent rules and V=1 -%define with_verbose %{?_with_verbose: 1} %{?!_with_verbose: 0} - -# -# check for mismatched config options -%define with_configchecks %{?_without_configchecks: 0} %{?!_without_configchecks: 1} - -# -# gcov support -%define with_gcov %{?_with_gcov:1}%{?!_with_gcov:0} - -# -# ipa_clone support -%define with_ipaclones %{?_without_ipaclones: 0} %{?!_without_ipaclones: 1} - -# Want to build a vanilla kernel build without any non-upstream patches? -%define with_vanilla %{?_with_vanilla: 1} %{?!_with_vanilla: 0} - -%if 0%{?fedora} -# Kernel headers are being split out into a separate package -%define with_headers 0 -%define with_cross_headers 0 -# no ipa_clone for now -%define with_ipaclones 0 -# no stablelist -%define with_kernel_abi_stablelists 0 -# Fedora builds these separately -%define with_perf 0 -%define with_tools 0 -%define with_bpftool 0 -# selftests turns on bpftool -%define with_selftests 0 -%endif - -%if %{with_verbose} -%define make_opts V=1 -%else -%define make_opts -s -%endif - -%if %{with toolchain_clang} -%ifarch s390x ppc64le -%global llvm_ias 0 -%else -%global llvm_ias 1 -%endif -%global clang_make_opts HOSTCC=clang CC=clang LLVM_IAS=%{llvm_ias} -%if %{with clang_lto} -%global clang_make_opts %{clang_make_opts} LD=ld.lld HOSTLD=ld.lld AR=llvm-ar NM=llvm-nm HOSTAR=llvm-ar HOSTNM=llvm-nm -%endif -%global make_opts %{make_opts} %{clang_make_opts} -# clang does not support the -fdump-ipa-clones option -%global with_ipaclones 0 -%endif - -# turn off debug kernel and kabichk for gcov builds -%if %{with_gcov} -%define with_debug 0 -%define with_kabichk 0 -%define with_kabidupchk 0 -%define with_kabidwchk 0 -%define with_kabidw_base 0 -%define with_kernel_abi_stablelists 0 -%endif - -# turn off kABI DWARF-based check if we're generating the base dataset -%if %{with_kabidw_base} -%define with_kabidwchk 0 -%endif - -# kpatch_kcflags are extra compiler flags applied to base kernel -# -fdump-ipa-clones is enabled only for base kernels on selected arches -%if %{with_ipaclones} -%ifarch x86_64 ppc64le -%define kpatch_kcflags -fdump-ipa-clones -%else -%define with_ipaclones 0 -%endif -%endif - -%define make_target bzImage -%define image_install_path boot - -%define KVERREL %{version}-%{release}.%{_target_cpu} -%define KVERREL_RE %(echo %KVERREL | sed 's/+/[+]/g') -%define hdrarch %_target_cpu -%define asmarch %_target_cpu - -%if 0%{!?nopatches:1} -%define nopatches 0 -%endif - -%if %{with_vanilla} -%define nopatches 1 -%endif - -%if %{with_release} -%define debugbuildsenabled 1 -%endif - -%if !%{with_debuginfo} -%define _enable_debug_packages 0 -%endif -%define debuginfodir /usr/lib/debug -# Needed because we override almost everything involving build-ids -# and debuginfo generation. Currently we rely on the old alldebug setting. -%global _build_id_links alldebug - -# kernel PAE is only built on ARMv7 -%ifnarch armv7hl -%define with_pae 0 -%endif - -# if requested, only build base kernel -%if %{with_baseonly} -%define with_pae 0 -%define with_debug 0 -%define with_vdso_install 0 -%define with_perf 0 -%define with_tools 0 -%define with_bpftool 0 -%define with_kernel_abi_stablelists 0 -%define with_selftests 0 -%define with_cross 0 -%define with_cross_headers 0 -%define with_ipaclones 0 -%endif - -# if requested, only build pae kernel -%if %{with_paeonly} -%define with_up 0 -%define with_debug 0 -%endif - -# if requested, only build debug kernel -%if %{with_dbgonly} -%define with_up 0 -%define with_vdso_install 0 -%define with_perf 0 -%define with_tools 0 -%define with_bpftool 0 -%define with_kernel_abi_stablelists 0 -%define with_selftests 0 -%define with_cross 0 -%define with_cross_headers 0 -%define with_ipaclones 0 -%endif - -# turn off kABI DUP check and DWARF-based check if kABI check is disabled -%if !%{with_kabichk} -%define with_kabidupchk 0 -%define with_kabidwchk 0 -%endif - -%if %{with_vdso_install} -%define use_vdso 1 -%endif - -# selftests require bpftool to be built -%if %{with_selftests} -%define with_bpftool 1 -%endif - -%ifnarch noarch -%define with_kernel_abi_stablelists 0 -%endif - -# Overrides for generic default options - -# only package docs noarch -%ifnarch noarch -%define with_doc 0 -%define doc_build_fail true -%endif - -%if 0%{?fedora} -# don't do debug builds on anything but i686 and x86_64 -%ifnarch i686 x86_64 -%define with_debug 0 -%endif -%endif - -# don't build noarch kernels or headers (duh) -%ifarch noarch -%define with_up 0 -%define with_headers 0 -%define with_cross_headers 0 -%define with_tools 0 -%define with_perf 0 -%define with_bpftool 0 -%define with_selftests 0 -%define with_debug 0 -%define all_arch_configs kernel-%{version}-*.config -%endif - -# sparse blows up on ppc -%ifnarch ppc64le -%define with_sparse 0 -%endif - -# zfcpdump mechanism is s390 only -%ifnarch s390x -%define with_zfcpdump 0 -%endif - -%if 0%{?fedora} -# This is not for Fedora -%define with_zfcpdump 0 -%endif - -# Per-arch tweaks - -%ifarch i686 -%define asmarch x86 -%define hdrarch i386 -%define all_arch_configs kernel-%{version}-i?86*.config -%define kernel_image arch/x86/boot/bzImage -%endif - -%ifarch x86_64 -%define asmarch x86 -%define all_arch_configs kernel-%{version}-x86_64*.config -%define kernel_image arch/x86/boot/bzImage -%endif - -%ifarch ppc64le -%define asmarch powerpc -%define hdrarch powerpc -%define make_target vmlinux -%define kernel_image vmlinux -%define kernel_image_elf 1 -%define use_vdso 0 -%define all_arch_configs kernel-%{version}-ppc64le*.config -%endif - -%ifarch s390x -%define asmarch s390 -%define hdrarch s390 -%define all_arch_configs kernel-%{version}-s390x.config -%define kernel_image arch/s390/boot/bzImage -%define vmlinux_decompressor arch/s390/boot/compressed/vmlinux -%endif - -%ifarch %{arm} -%define all_arch_configs kernel-%{version}-arm*.config -%define skip_nonpae_vdso 1 -%define asmarch arm -%define hdrarch arm -%define make_target bzImage -%define kernel_image arch/arm/boot/zImage -# http://lists.infradead.org/pipermail/linux-arm-kernel/2012-March/091404.html -%define kernel_mflags KALLSYMS_EXTRA_PASS=1 -# we only build headers/perf/tools on the base arm arches -# just like we used to only build them on i386 for x86 -%ifnarch armv7hl -%define with_headers 0 -%define with_cross_headers 0 -%endif -# These currently don't compile on armv7 -%define with_selftests 0 -%endif - -%ifarch aarch64 -%define all_arch_configs kernel-%{version}-aarch64*.config -%define asmarch arm64 -%define hdrarch arm64 -%define make_target Image.gz -%define kernel_image arch/arm64/boot/Image.gz -%endif - -# Should make listnewconfig fail if there's config options -# printed out? -%if %{nopatches} -%define with_configchecks 0 -%endif - -# To temporarily exclude an architecture from being built, add it to -# %%nobuildarches. Do _NOT_ use the ExclusiveArch: line, because if we -# don't build kernel-headers then the new build system will no longer let -# us use the previous build of that package -- it'll just be completely AWOL. -# Which is a BadThing(tm). - -# We only build kernel-headers on the following... -%if 0%{?fedora} -%define nobuildarches i386 -%else -%define nobuildarches i386 i686 %{arm} -%endif - -%ifarch %nobuildarches -# disable BuildKernel commands -%define with_up 0 -%define with_debug 0 -%define with_pae 0 -%define with_zfcpdump 0 - -%define with_debuginfo 0 -%define with_perf 0 -%define with_tools 0 -%define with_bpftool 0 -%define with_selftests 0 -%define _enable_debug_packages 0 -%endif - -# Architectures we build tools/cpupower on -%if 0%{?fedora} -%define cpupowerarchs %{ix86} x86_64 ppc64le %{arm} aarch64 -%else -%define cpupowerarchs i686 x86_64 ppc64le aarch64 -%endif - -%if 0%{?use_vdso} - -%if 0%{?skip_nonpae_vdso} -%define _use_vdso 0 -%else -%define _use_vdso 1 -%endif - -%else -%define _use_vdso 0 -%endif - -# If build of debug packages is disabled, we need to know if we want to create -# meta debug packages or not, after we define with_debug for all specific cases -# above. So this must be at the end here, after all cases of with_debug or not. -%define with_debug_meta 0 -%if !%{debugbuildsenabled} -%if %{with_debug} -%define with_debug_meta 1 -%endif -%define with_debug 0 -%endif - - -# -# Packages that need to be installed before the kernel is, because the %%post -# scripts use them. -# -%define kernel_prereq coreutils, systemd >= 203-2, /usr/bin/kernel-install -%define initrd_prereq dracut >= 027 - - -Name: kernel -License: GPLv2 and Redistributable, no modification permitted -URL: https://www.kernel.org/ -Version: %{specversion} -Release: %{pkg_release} -# DO NOT CHANGE THE 'ExclusiveArch' LINE TO TEMPORARILY EXCLUDE AN ARCHITECTURE BUILD. -# SET %%nobuildarches (ABOVE) INSTEAD -%if 0%{?fedora} -ExclusiveArch: noarch x86_64 s390x %{arm} aarch64 ppc64le -%else -ExclusiveArch: noarch i386 i686 x86_64 s390x %{arm} aarch64 ppc64le -%endif -ExclusiveOS: Linux -%ifnarch %{nobuildarches} -Requires: kernel-core-uname-r = %{KVERREL} -Requires: kernel-modules-uname-r = %{KVERREL} -%endif - - -# -# List the packages used during the kernel build -# -BuildRequires: kmod, patch, bash, coreutils, tar, git-core, which -BuildRequires: bzip2, xz, findutils, gzip, m4, perl-interpreter, perl-Carp, perl-devel, perl-generators, make, diffutils, gawk -BuildRequires: gcc, binutils, redhat-rpm-config, hmaccalc, bison, flex, gcc-c++ -BuildRequires: net-tools, hostname, bc, elfutils-devel -BuildRequires: dwarves -BuildRequires: python3-devel -BuildRequires: gcc-plugin-devel -# glibc-static is required for a consistent build environment (specifically -# CONFIG_CC_CAN_LINK_STATIC=y). -BuildRequires: glibc-static -%ifnarch %{nobuildarches} noarch -BuildRequires: bpftool -%endif -%if %{with_headers} -BuildRequires: rsync -%endif -%if %{with_doc} -BuildRequires: xmlto, asciidoc, python3-sphinx, python3-sphinx_rtd_theme -%endif -%if %{with_sparse} -BuildRequires: sparse -%endif -%if %{with_perf} -BuildRequires: zlib-devel binutils-devel newt-devel perl(ExtUtils::Embed) bison flex xz-devel -BuildRequires: audit-libs-devel -BuildRequires: java-devel -BuildRequires: libbpf-devel -BuildRequires: libbabeltrace-devel -BuildRequires: libtraceevent-devel -%ifnarch %{arm} s390x -BuildRequires: numactl-devel -%endif -%ifarch aarch64 -BuildRequires: opencsd-devel >= 1.0.0 -%endif -%endif -%if %{with_tools} -BuildRequires: gettext ncurses-devel -BuildRequires: libcap-devel libcap-ng-devel -%ifnarch s390x -BuildRequires: pciutils-devel -%endif -%ifarch i686 x86_64 -BuildRequires: libnl3-devel -%endif -%endif -%if %{with_tools} || %{signmodules} || %{signkernel} -BuildRequires: openssl-devel -%endif -%if %{with_bpftool} -BuildRequires: python3-docutils -BuildRequires: zlib-devel binutils-devel -%endif -%if %{with_selftests} -BuildRequires: clang llvm -%ifnarch %{arm} -BuildRequires: numactl-devel -%endif -BuildRequires: libcap-devel libcap-ng-devel rsync libmnl-devel -%endif -BuildConflicts: rhbuildsys(DiskFree) < 500Mb -%if %{with_debuginfo} -BuildRequires: rpm-build, elfutils -BuildConflicts: rpm < 4.13.0.1-19 -BuildConflicts: dwarves < 1.13 -# Most of these should be enabled after more investigation -%undefine _include_minidebuginfo -%undefine _find_debuginfo_dwz_opts -%undefine _unique_build_ids -%undefine _unique_debug_names -%undefine _unique_debug_srcs -%undefine _debugsource_packages -%undefine _debuginfo_subpackages -%global _find_debuginfo_opts -r -%global _missing_build_ids_terminate_build 1 -%global _no_recompute_build_ids 1 -%endif -%if %{with_kabidwchk} || %{with_kabidw_base} -BuildRequires: kabi-dw -%endif - -%if %{signkernel}%{signmodules} -BuildRequires: openssl -%if %{signkernel} -# ELN uses Fedora signing process, so exclude -%if 0%{?rhel}%{?centos} && !0%{?eln} -BuildRequires: system-sb-certs -%endif -%ifarch x86_64 aarch64 -BuildRequires: nss-tools -BuildRequires: pesign >= 0.10-4 -%endif -%endif -%endif - -%if %{with_cross} -BuildRequires: binutils-%{_build_arch}-linux-gnu, gcc-%{_build_arch}-linux-gnu -%define cross_opts CROSS_COMPILE=%{_build_arch}-linux-gnu- -%define __strip %{_build_arch}-linux-gnu-strip -%endif - -# These below are required to build man pages -%if %{with_perf} -BuildRequires: xmlto -%endif -%if %{with_perf} || %{with_tools} -BuildRequires: asciidoc -%endif - -%if %{with toolchain_clang} -BuildRequires: clang -%endif - -%if %{with clang_lto} -BuildRequires: llvm -BuildRequires: lld -%endif - -# Because this is the kernel, it's hard to get a single upstream URL -# to represent the base without needing to do a bunch of patching. This -# tarball is generated from a src-git tree. If you want to see the -# exact git commit you can run -# -# xzcat -qq ${TARBALL} | git get-tar-commit-id -Source0: linux-%{tarfile_release}.tar.xz - -Source1: Makefile.rhelver - - -# Name of the packaged file containing signing key -%ifarch ppc64le -%define signing_key_filename kernel-signing-ppc.cer -%endif -%ifarch s390x -%define signing_key_filename kernel-signing-s390.cer -%endif - -%if %{?released_kernel} - -Source10: redhatsecurebootca5.cer -Source11: redhatsecurebootca1.cer -Source12: redhatsecureboot501.cer -Source13: redhatsecureboot301.cer -Source14: secureboot_s390.cer -Source15: secureboot_ppc.cer - -%define secureboot_ca_1 %{SOURCE10} -%define secureboot_ca_0 %{SOURCE11} -%ifarch x86_64 aarch64 -%define secureboot_key_1 %{SOURCE12} -%define pesign_name_1 redhatsecureboot501 -%define secureboot_key_0 %{SOURCE13} -%define pesign_name_0 redhatsecureboot301 -%endif -%ifarch s390x -%define secureboot_key_0 %{SOURCE14} -%define pesign_name_0 redhatsecureboot302 -%endif -%ifarch ppc64le -%define secureboot_key_0 %{SOURCE15} -%define pesign_name_0 redhatsecureboot303 -%endif - -# released_kernel -%else - -Source10: redhatsecurebootca4.cer -Source11: redhatsecurebootca2.cer -Source12: redhatsecureboot401.cer -Source13: redhatsecureboot003.cer - -%define secureboot_ca_1 %{SOURCE10} -%define secureboot_ca_0 %{SOURCE11} -%define secureboot_key_1 %{SOURCE12} -%define pesign_name_1 redhatsecureboot401 -%define secureboot_key_0 %{SOURCE13} -%define pesign_name_0 redhatsecureboot003 - -# released_kernel -%endif - -Source20: mod-denylist.sh -Source21: mod-sign.sh -Source22: parallel_xz.sh - -%define modsign_cmd %{SOURCE21} - -%if 0%{?include_rhel} -Source23: x509.genkey.rhel - -Source24: kernel-aarch64-rhel.config -Source25: kernel-aarch64-debug-rhel.config -Source26: mod-extra.list.rhel - -Source27: kernel-ppc64le-rhel.config -Source28: kernel-ppc64le-debug-rhel.config -Source29: kernel-s390x-rhel.config -Source30: kernel-s390x-debug-rhel.config -Source31: kernel-s390x-zfcpdump-rhel.config -Source32: kernel-x86_64-rhel.config -Source33: kernel-x86_64-debug-rhel.config - -Source34: filter-x86_64.sh.rhel -Source35: filter-armv7hl.sh.rhel -Source37: filter-aarch64.sh.rhel -Source38: filter-ppc64le.sh.rhel -Source39: filter-s390x.sh.rhel -Source40: filter-modules.sh.rhel - -Source41: x509.genkey.centos -%endif - -%if 0%{?include_fedora} -Source50: x509.genkey.fedora -Source51: mod-extra.list.fedora - -Source52: kernel-aarch64-fedora.config -Source53: kernel-aarch64-debug-fedora.config -Source54: kernel-armv7hl-fedora.config -Source55: kernel-armv7hl-debug-fedora.config -Source56: kernel-armv7hl-lpae-fedora.config -Source57: kernel-armv7hl-lpae-debug-fedora.config -Source60: kernel-ppc64le-fedora.config -Source61: kernel-ppc64le-debug-fedora.config -Source62: kernel-s390x-fedora.config -Source63: kernel-s390x-debug-fedora.config -Source64: kernel-x86_64-fedora.config -Source65: kernel-x86_64-debug-fedora.config - -Source67: filter-x86_64.sh.fedora -Source68: filter-armv7hl.sh.fedora -Source70: filter-aarch64.sh.fedora -Source71: filter-ppc64le.sh.fedora -Source72: filter-s390x.sh.fedora -Source73: filter-modules.sh.fedora -%endif - -Source75: partial-kgcov-snip.config -Source80: generate_all_configs.sh -Source81: process_configs.sh - -Source82: update_scripts.sh - -Source84: mod-internal.list - -Source100: rheldup3.x509 -Source101: rhelkpatch1.x509 - -Source200: check-kabi - -Source201: Module.kabi_aarch64 -Source202: Module.kabi_ppc64le -Source203: Module.kabi_s390x -Source204: Module.kabi_x86_64 - -Source210: Module.kabi_dup_aarch64 -Source211: Module.kabi_dup_ppc64le -Source212: Module.kabi_dup_s390x -Source213: Module.kabi_dup_x86_64 - -Source300: kernel-abi-stablelists-%{specversion}-%{pkgrelease}.tar.bz2 -Source301: kernel-kabi-dw-%{specversion}-%{pkgrelease}.tar.bz2 - -# Sources for kernel-tools -Source2000: cpupower.service -Source2001: cpupower.config -Source2002: kvm_stat.logrotate - -# Some people enjoy building customized kernels from the dist-git in Fedora and -# use this to override configuration options. One day they may all use the -# source tree, but in the mean time we carry this to support the legacy workflow -Source3000: merge.pl -Source3001: kernel-local -%if %{patchlist_changelog} -Source3002: Patchlist.changelog -%endif - -Source4000: README.rst -Source4001: rpminspect.yaml -Source4002: gating.yaml - -## Patches needed for building this package - -%if !%{nopatches} - -Patch1: patch-%{patchversion}-redhat.patch -%endif - -# empty final patch to facilitate testing of kernel patches -Patch999999: linux-kernel-test.patch - -# END OF PATCH DEFINITIONS - -%description -The kernel meta package - -# -# This macro does requires, provides, conflicts, obsoletes for a kernel package. -# %%kernel_reqprovconf <subpackage> -# It uses any kernel_<subpackage>_conflicts and kernel_<subpackage>_obsoletes -# macros defined above. -# -%define kernel_reqprovconf \ -Provides: kernel = %{specversion}-%{pkg_release}\ -Provides: kernel-%{_target_cpu} = %{specversion}-%{pkg_release}%{?1:+%{1}}\ -Provides: kernel-drm-nouveau = 16\ -Provides: kernel-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires(pre): %{kernel_prereq}\ -Requires(pre): %{initrd_prereq}\ -Requires(pre): ((linux-firmware >= 20150904-56.git6ebf5d57) if linux-firmware)\ -Recommends: linux-firmware\ -Requires(preun): systemd >= 200\ -Conflicts: xfsprogs < 4.3.0-1\ -Conflicts: xorg-x11-drv-vmmouse < 13.0.99\ -%{expand:%%{?kernel%{?1:_%{1}}_conflicts:Conflicts: %%{kernel%{?1:_%{1}}_conflicts}}}\ -%{expand:%%{?kernel%{?1:_%{1}}_obsoletes:Obsoletes: %%{kernel%{?1:_%{1}}_obsoletes}}}\ -%{expand:%%{?kernel%{?1:_%{1}}_provides:Provides: %%{kernel%{?1:_%{1}}_provides}}}\ -# We can't let RPM do the dependencies automatic because it'll then pick up\ -# a correct but undesirable perl dependency from the module headers which\ -# isn't required for the kernel proper to function\ -AutoReq: no\ -AutoProv: yes\ -%{nil} - - -%package doc -Summary: Various documentation bits found in the kernel source -Group: Documentation -%description doc -This package contains documentation files from the kernel -source. Various bits of information about the Linux kernel and the -device drivers shipped with it are documented in these files. - -You'll want to install this package if you need a reference to the -options that can be passed to Linux kernel modules at load time. - - -%package headers -Summary: Header files for the Linux kernel for use by glibc -Obsoletes: glibc-kernheaders < 3.0-46 -Provides: glibc-kernheaders = 3.0-46 -%description headers -Kernel-headers includes the C header files that specify the interface -between the Linux kernel and userspace libraries and programs. The -header files define structures and constants that are needed for -building most standard programs and are also needed for rebuilding the -glibc package. - -%package cross-headers -Summary: Header files for the Linux kernel for use by cross-glibc -%description cross-headers -Kernel-cross-headers includes the C header files that specify the interface -between the Linux kernel and userspace libraries and programs. The -header files define structures and constants that are needed for -building most standard programs and are also needed for rebuilding the -cross-glibc package. - - -%package debuginfo-common-%{_target_cpu} -Summary: Kernel source files used by %{name}-debuginfo packages -Provides: installonlypkg(kernel) -%description debuginfo-common-%{_target_cpu} -This package is required by %{name}-debuginfo subpackages. -It provides the kernel source files common to all builds. - -%if %{with_perf} -%package -n perf -Summary: Performance monitoring for the Linux kernel -Requires: bzip2 -License: GPLv2 -%description -n perf -This package contains the perf tool, which enables performance monitoring -of the Linux kernel. - -%package -n perf-debuginfo -Summary: Debug information for package perf -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release} -AutoReqProv: no -%description -n perf-debuginfo -This package provides debug information for the perf package. - -# Note that this pattern only works right to match the .build-id -# symlinks because of the trailing nonmatching alternation and -# the leading .*, because of find-debuginfo.sh's buggy handling -# of matching the pattern against the symlinks file. -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{_bindir}/perf(\.debug)?|.*%%{_libexecdir}/perf-core/.*|.*%%{_libdir}/libperf-jvmti.so(\.debug)?|XXX' -o perf-debuginfo.list} - -%package -n python3-perf -Summary: Python bindings for apps which will manipulate perf events -%description -n python3-perf -The python3-perf package contains a module that permits applications -written in the Python programming language to use the interface -to manipulate perf events. - -%package -n python3-perf-debuginfo -Summary: Debug information for package perf python bindings -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release} -AutoReqProv: no -%description -n python3-perf-debuginfo -This package provides debug information for the perf python bindings. - -# the python_sitearch macro should already be defined from above -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{python3_sitearch}/perf.*so(\.debug)?|XXX' -o python3-perf-debuginfo.list} - -# with_perf -%endif - -%if %{with_tools} -%package -n kernel-tools -Summary: Assortment of tools for the Linux kernel -License: GPLv2 -%ifarch %{cpupowerarchs} -Provides: cpupowerutils = 1:009-0.6.p1 -Obsoletes: cpupowerutils < 1:009-0.6.p1 -Provides: cpufreq-utils = 1:009-0.6.p1 -Provides: cpufrequtils = 1:009-0.6.p1 -Obsoletes: cpufreq-utils < 1:009-0.6.p1 -Obsoletes: cpufrequtils < 1:009-0.6.p1 -Obsoletes: cpuspeed < 1:1.5-16 -Requires: kernel-tools-libs = %{version}-%{release} -%endif -%define __requires_exclude ^%{_bindir}/python -%description -n kernel-tools -This package contains the tools/ directory from the kernel source -and the supporting documentation. - -%package -n kernel-tools-libs -Summary: Libraries for the kernels-tools -License: GPLv2 -%description -n kernel-tools-libs -This package contains the libraries built from the tools/ directory -from the kernel source. - -%package -n kernel-tools-libs-devel -Summary: Assortment of tools for the Linux kernel -License: GPLv2 -Requires: kernel-tools = %{version}-%{release} -%ifarch %{cpupowerarchs} -Provides: cpupowerutils-devel = 1:009-0.6.p1 -Obsoletes: cpupowerutils-devel < 1:009-0.6.p1 -%endif -Requires: kernel-tools-libs = %{version}-%{release} -Provides: kernel-tools-devel -%description -n kernel-tools-libs-devel -This package contains the development files for the tools/ directory from -the kernel source. - -%package -n kernel-tools-debuginfo -Summary: Debug information for package kernel-tools -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release} -AutoReqProv: no -%description -n kernel-tools-debuginfo -This package provides debug information for package kernel-tools. - -# Note that this pattern only works right to match the .build-id -# symlinks because of the trailing nonmatching alternation and -# the leading .*, because of find-debuginfo.sh's buggy handling -# of matching the pattern against the symlinks file. -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{_bindir}/centrino-decode(\.debug)?|.*%%{_bindir}/powernow-k8-decode(\.debug)?|.*%%{_bindir}/cpupower(\.debug)?|.*%%{_libdir}/libcpupower.*|.*%%{_bindir}/turbostat(\.debug)?|.*%%{_bindir}/x86_energy_perf_policy(\.debug)?|.*%%{_bindir}/tmon(\.debug)?|.*%%{_bindir}/lsgpio(\.debug)?|.*%%{_bindir}/gpio-hammer(\.debug)?|.*%%{_bindir}/gpio-event-mon(\.debug)?|.*%%{_bindir}/gpio-watch(\.debug)?|.*%%{_bindir}/iio_event_monitor(\.debug)?|.*%%{_bindir}/iio_generic_buffer(\.debug)?|.*%%{_bindir}/lsiio(\.debug)?|.*%%{_bindir}/intel-speed-select(\.debug)?|.*%%{_bindir}/page_owner_sort(\.debug)?|.*%%{_bindir}/slabinfo(\.debug)?|.*%%{_sbindir}/intel_sdsi(\.debug)?|XXX' -o kernel-tools-debuginfo.list} - -# with_tools -%endif - -%if %{with_bpftool} - -%package -n bpftool -Summary: Inspection and simple manipulation of eBPF programs and maps -License: GPLv2 -%description -n bpftool -This package contains the bpftool, which allows inspection and simple -manipulation of eBPF programs and maps. - -%package -n bpftool-debuginfo -Summary: Debug information for package bpftool -Group: Development/Debug -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release} -AutoReqProv: no -%description -n bpftool-debuginfo -This package provides debug information for the bpftool package. - -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{_sbindir}/bpftool(\.debug)?|XXX' -o bpftool-debuginfo.list} - -# with_bpftool -%endif - -%if %{with_selftests} - -%package selftests-internal -Summary: Kernel samples and selftests -License: GPLv2 -Requires: binutils, bpftool, iproute-tc, nmap-ncat, python3 -%description selftests-internal -Kernel sample programs and selftests. - -# Note that this pattern only works right to match the .build-id -# symlinks because of the trailing nonmatching alternation and -# the leading .*, because of find-debuginfo.sh's buggy handling -# of matching the pattern against the symlinks file. -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{_libexecdir}/(ksamples|kselftests)/.*|XXX' -o selftests-debuginfo.list} - -# with_selftests -%endif - -%if %{with_gcov} -%package gcov -Summary: gcov graph and source files for coverage data collection. -%description gcov -kernel-gcov includes the gcov graph and source files for gcov coverage collection. -%endif - -%package -n kernel-abi-stablelists -Summary: The Red Hat Enterprise Linux kernel ABI symbol stablelists -AutoReqProv: no -%description -n kernel-abi-stablelists -The kABI package contains information pertaining to the Red Hat Enterprise -Linux kernel ABI, including lists of kernel symbols that are needed by -external Linux kernel modules, and a yum plugin to aid enforcement. - -%if %{with_kabidw_base} -%package kernel-kabidw-base-internal -Summary: The baseline dataset for kABI verification using DWARF data -Group: System Environment/Kernel -AutoReqProv: no -%description kernel-kabidw-base-internal -The package contains data describing the current ABI of the Red Hat Enterprise -Linux kernel, suitable for the kabi-dw tool. -%endif - -# -# This macro creates a kernel-<subpackage>-debuginfo package. -# %%kernel_debuginfo_package <subpackage> -# -# Explanation of the find_debuginfo_opts: We build multiple kernels (debug -# pae etc.) so the regex filters those kernels appropriately. We also -# have to package several binaries as part of kernel-devel but getting -# unique build-ids is tricky for these userspace binaries. We don't really -# care about debugging those so we just filter those out and remove it. -%define kernel_debuginfo_package() \ -%package %{?1:%{1}-}debuginfo\ -Summary: Debug information for package %{name}%{?1:-%{1}}\ -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release}\ -Provides: %{name}%{?1:-%{1}}-debuginfo-%{_target_cpu} = %{version}-%{release}\ -Provides: installonlypkg(kernel)\ -AutoReqProv: no\ -%description %{?1:%{1}-}debuginfo\ -This package provides debug information for package %{name}%{?1:-%{1}}.\ -This is required to use SystemTap with %{name}%{?1:-%{1}}-%{KVERREL}.\ -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} --keep-section '.BTF' -p '.*\/usr\/src\/kernels/.*|XXX' -o ignored-debuginfo.list -p '/.*/%%{KVERREL_RE}%{?1:[+]%{1}}/.*|/.*%%{KVERREL_RE}%{?1:\+%{1}}(\.debug)?' -o debuginfo%{?1}.list}\ -%{nil} - -# -# This macro creates a kernel-<subpackage>-devel package. -# %%kernel_devel_package [-m] <subpackage> <pretty-name> -# -%define kernel_devel_package(m) \ -%package %{?1:%{1}-}devel\ -Summary: Development package for building kernel modules to match the %{?2:%{2} }kernel\ -Provides: kernel%{?1:-%{1}}-devel-%{_target_cpu} = %{version}-%{release}\ -Provides: kernel-devel-%{_target_cpu} = %{version}-%{release}%{?1:+%{1}}\ -Provides: kernel-devel-uname-r = %{KVERREL}%{?1:+%{1}}\ -Provides: installonlypkg(kernel)\ -AutoReqProv: no\ -Requires(pre): findutils\ -Requires: findutils\ -Requires: perl-interpreter\ -Requires: openssl-devel\ -Requires: elfutils-libelf-devel\ -Requires: bison\ -Requires: flex\ -Requires: make\ -Requires: gcc\ -%if %{-m:1}%{!-m:0}\ -Requires: kernel-devel-uname-r = %{KVERREL}\ -%endif\ -%description %{?1:%{1}-}devel\ -This package provides kernel headers and makefiles sufficient to build modules\ -against the %{?2:%{2} }kernel package.\ -%{nil} - -# -# This macro creates an empty kernel-<subpackage>-devel-matched package that -# requires both the core and devel packages locked on the same version. -# %%kernel_devel_matched_package [-m] <subpackage> <pretty-name> -# -%define kernel_devel_matched_package(m) \ -%package %{?1:%{1}-}devel-matched\ -Summary: Meta package to install matching core and devel packages for a given %{?2:%{2} }kernel\ -Requires: kernel%{?1:-%{1}}-devel = %{version}-%{release}\ -Requires: kernel%{?1:-%{1}}-core = %{version}-%{release}\ -%description %{?1:%{1}-}devel-matched\ -This meta package is used to install matching core and devel packages for a given %{?2:%{2} }kernel.\ -%{nil} - -# -# kernel-<variant>-ipaclones-internal package -# -%define kernel_ipaclones_package() \ -%package %{?1:%{1}-}ipaclones-internal\ -Summary: *.ipa-clones files generated by -fdump-ipa-clones for kernel%{?1:-%{1}}\ -Group: System Environment/Kernel\ -AutoReqProv: no\ -%description %{?1:%{1}-}ipaclones-internal\ -This package provides *.ipa-clones files.\ -%{nil} - -# -# This macro creates a kernel-<subpackage>-modules-internal package. -# %%kernel_modules_internal_package <subpackage> <pretty-name> -# -%define kernel_modules_internal_package() \ -%package %{?1:%{1}-}modules-internal\ -Summary: Extra kernel modules to match the %{?2:%{2} }kernel\ -Group: System Environment/Kernel\ -Provides: kernel%{?1:-%{1}}-modules-internal-%{_target_cpu} = %{version}-%{release}\ -Provides: kernel%{?1:-%{1}}-modules-internal-%{_target_cpu} = %{version}-%{release}%{?1:+%{1}}\ -Provides: kernel%{?1:-%{1}}-modules-internal = %{version}-%{release}%{?1:+%{1}}\ -Provides: installonlypkg(kernel-module)\ -Provides: kernel%{?1:-%{1}}-modules-internal-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel%{?1:-%{1}}-modules-uname-r = %{KVERREL}%{?1:+%{1}}\ -AutoReq: no\ -AutoProv: yes\ -%description %{?1:%{1}-}modules-internal\ -This package provides kernel modules for the %{?2:%{2} }kernel package for Red Hat internal usage.\ -%{nil} - -# -# This macro creates a kernel-<subpackage>-modules-extra package. -# %%kernel_modules_extra_package [-m] <subpackage> <pretty-name> -# -%define kernel_modules_extra_package(m) \ -%package %{?1:%{1}-}modules-extra\ -Summary: Extra kernel modules to match the %{?2:%{2} }kernel\ -Provides: kernel%{?1:-%{1}}-modules-extra-%{_target_cpu} = %{version}-%{release}\ -Provides: kernel%{?1:-%{1}}-modules-extra-%{_target_cpu} = %{version}-%{release}%{?1:+%{1}}\ -Provides: kernel%{?1:-%{1}}-modules-extra = %{version}-%{release}%{?1:+%{1}}\ -Provides: installonlypkg(kernel-module)\ -Provides: kernel%{?1:-%{1}}-modules-extra-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel%{?1:-%{1}}-modules-uname-r = %{KVERREL}%{?1:+%{1}}\ -%if %{-m:1}%{!-m:0}\ -Requires: kernel-modules-extra-uname-r = %{KVERREL}\ -%endif\ -AutoReq: no\ -AutoProv: yes\ -%description %{?1:%{1}-}modules-extra\ -This package provides less commonly used kernel modules for the %{?2:%{2} }kernel package.\ -%{nil} - -# -# This macro creates a kernel-<subpackage>-modules package. -# %%kernel_modules_package [-m] <subpackage> <pretty-name> -# -%define kernel_modules_package(m) \ -%package %{?1:%{1}-}modules\ -Summary: kernel modules to match the %{?2:%{2}-}core kernel\ -Provides: kernel%{?1:-%{1}}-modules-%{_target_cpu} = %{version}-%{release}\ -Provides: kernel-modules-%{_target_cpu} = %{version}-%{release}%{?1:+%{1}}\ -Provides: kernel-modules = %{version}-%{release}%{?1:+%{1}}\ -Provides: installonlypkg(kernel-module)\ -Provides: kernel%{?1:-%{1}}-modules-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel-uname-r = %{KVERREL}%{?1:+%{1}}\ -%if %{-m:1}%{!-m:0}\ -Requires: kernel-modules-uname-r = %{KVERREL}\ -%endif\ -AutoReq: no\ -AutoProv: yes\ -%description %{?1:%{1}-}modules\ -This package provides commonly used kernel modules for the %{?2:%{2}-}core kernel package.\ -%{nil} - -# -# this macro creates a kernel-<subpackage> meta package. -# %%kernel_meta_package <subpackage> -# -%define kernel_meta_package() \ -%package %{1}\ -summary: kernel meta-package for the %{1} kernel\ -Requires: kernel-%{1}-core-uname-r = %{KVERREL}+%{1}\ -Requires: kernel-%{1}-modules-uname-r = %{KVERREL}+%{1}\ -Provides: installonlypkg(kernel)\ -%description %{1}\ -The meta-package for the %{1} kernel\ -%{nil} - -# -# This macro creates a kernel-<subpackage> and its -devel and -debuginfo too. -# %%define variant_summary The Linux kernel compiled for <configuration> -# %%kernel_variant_package [-n <pretty-name>] [-m] <subpackage> -# -%define kernel_variant_package(n:m) \ -%package %{?1:%{1}-}core\ -Summary: %{variant_summary}\ -Provides: kernel-%{?1:%{1}-}core-uname-r = %{KVERREL}%{?1:+%{1}}\ -Provides: installonlypkg(kernel)\ -%if %{-m:1}%{!-m:0}\ -Requires: kernel-core-uname-r = %{KVERREL}\ -%endif\ -%{expand:%%kernel_reqprovconf}\ -%if %{?1:1} %{!?1:0} \ -%{expand:%%kernel_meta_package %{?1:%{1}}}\ -%endif\ -%{expand:%%kernel_devel_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}} %{-m:%{-m}}}\ -%{expand:%%kernel_devel_matched_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}} %{-m:%{-m}}}\ -%{expand:%%kernel_modules_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}} %{-m:%{-m}}}\ -%{expand:%%kernel_modules_extra_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}} %{-m:%{-m}}}\ -%if %{-m:0}%{!-m:1}\ -%{expand:%%kernel_modules_internal_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}}}\ -%{expand:%%kernel_debuginfo_package %{?1:%{1}}}\ -%endif\ -%{nil} - -# Now, each variant package. - -%if %{with_pae} -%define variant_summary The Linux kernel compiled for Cortex-A15 -%kernel_variant_package lpae -%description lpae-core -This package includes a version of the Linux kernel with support for -Cortex-A15 devices with LPAE and HW virtualisation support -%endif - -%if %{with_zfcpdump} -%define variant_summary The Linux kernel compiled for zfcpdump usage -%kernel_variant_package zfcpdump -%description zfcpdump-core -The kernel package contains the Linux kernel (vmlinuz) for use by the -zfcpdump infrastructure. -# with_zfcpdump -%endif - -%define variant_summary The Linux kernel compiled with extra debugging enabled -%if !%{debugbuildsenabled} -%kernel_variant_package -m debug -%else -%kernel_variant_package debug -%endif -%description debug-core -The kernel package contains the Linux kernel (vmlinuz), the core of any -Linux operating system. The kernel handles the basic functions -of the operating system: memory allocation, process allocation, device -input and output, etc. - -This variant of the kernel has numerous debugging options enabled. -It should only be installed when trying to gather additional information -on kernel bugs, as some of these options impact performance noticably. - -# And finally the main -core package - -%define variant_summary The Linux kernel -%kernel_variant_package -%description core -The kernel package contains the Linux kernel (vmlinuz), the core of any -Linux operating system. The kernel handles the basic functions -of the operating system: memory allocation, process allocation, device -input and output, etc. - -%if %{with_ipaclones} -%kernel_ipaclones_package -%endif - -%prep -# do a few sanity-checks for --with *only builds -%if %{with_baseonly} -%if !%{with_up} -echo "Cannot build --with baseonly, up build is disabled" -exit 1 -%endif -%endif - -# more sanity checking; do it quietly -if [ "%{patches}" != "%%{patches}" ] ; then - for patch in %{patches} ; do - if [ ! -f $patch ] ; then - echo "ERROR: Patch ${patch##/*/} listed in specfile but is missing" - exit 1 - fi - done -fi 2>/dev/null - -patch_command='patch -p1 -F1 -s' -ApplyPatch() -{ - local patch=$1 - shift - if [ ! -f $RPM_SOURCE_DIR/$patch ]; then - exit 1 - fi - if ! grep -E "^Patch[0-9]+: $patch\$" %{_specdir}/${RPM_PACKAGE_NAME}.spec ; then - if [ "${patch:0:8}" != "patch-%{kversion}." ] ; then - echo "ERROR: Patch $patch not listed as a source patch in specfile" - exit 1 - fi - fi 2>/dev/null - case "$patch" in - *.bz2) bunzip2 < "$RPM_SOURCE_DIR/$patch" | $patch_command ${1+"$@"} ;; - *.gz) gunzip < "$RPM_SOURCE_DIR/$patch" | $patch_command ${1+"$@"} ;; - *.xz) unxz < "$RPM_SOURCE_DIR/$patch" | $patch_command ${1+"$@"} ;; - *) $patch_command ${1+"$@"} < "$RPM_SOURCE_DIR/$patch" ;; - esac -} - -# don't apply patch if it's empty -ApplyOptionalPatch() -{ - local patch=$1 - shift - if [ ! -f $RPM_SOURCE_DIR/$patch ]; then - exit 1 - fi - local C=$(wc -l $RPM_SOURCE_DIR/$patch | awk '{print $1}') - if [ "$C" -gt 9 ]; then - ApplyPatch $patch ${1+"$@"} - fi -} - -%setup -q -n kernel-%{tarfile_release} -c -mv linux-%{tarfile_release} linux-%{KVERREL} - -cd linux-%{KVERREL} -cp -a %{SOURCE1} . - -%if !%{nopatches} - -ApplyOptionalPatch patch-%{patchversion}-redhat.patch -%endif - -ApplyOptionalPatch linux-kernel-test.patch - -# END OF PATCH APPLICATIONS - -# Any further pre-build tree manipulations happen here. - -chmod +x scripts/checkpatch.pl -mv COPYING COPYING-%{version}-%{release} - -# This Prevents scripts/setlocalversion from mucking with our version numbers. -touch .scmversion - -# Mangle /usr/bin/python shebangs to /usr/bin/python3 -# Mangle all Python shebangs to be Python 3 explicitly -# -p preserves timestamps -# -n prevents creating ~backup files -# -i specifies the interpreter for the shebang -# This fixes errors such as -# *** ERROR: ambiguous python shebang in /usr/bin/kvm_stat: #!/usr/bin/python. Change it to python3 (or python2) explicitly. -# We patch all sources below for which we got a report/error. -pathfix.py -i "%{__python3} %{py3_shbang_opts}" -p -n \ - tools/kvm/kvm_stat/kvm_stat \ - scripts/show_delta \ - scripts/diffconfig \ - scripts/bloat-o-meter \ - scripts/jobserver-exec \ - tools \ - Documentation \ - scripts/clang-tools - -# only deal with configs if we are going to build for the arch -%ifnarch %nobuildarches - -if [ -L configs ]; then - rm -f configs -fi -mkdir configs -cd configs - -# Drop some necessary files from the source dir into the buildroot -cp $RPM_SOURCE_DIR/kernel-*.config . -cp %{SOURCE80} . -# merge.pl -cp %{SOURCE3000} . -# kernel-local -cp %{SOURCE3001} . -FLAVOR=%{primary_target} SPECVERSION=%{version} ./generate_all_configs.sh %{debugbuildsenabled} - -# Merge in any user-provided local config option changes -%ifnarch %nobuildarches -for i in %{all_arch_configs} -do - mv $i $i.tmp - ./merge.pl %{SOURCE3001} $i.tmp > $i -%if %{with_gcov} - echo "Merging with gcov options" - cat %{SOURCE75} - mv $i $i.tmp - ./merge.pl %{SOURCE75} $i.tmp > $i -%endif - rm $i.tmp -done -%endif - -%if %{with clang_lto} -for i in *aarch64*.config *x86_64*.config; do - sed -i 's/# CONFIG_LTO_CLANG_THIN is not set/CONFIG_LTO_CLANG_THIN=y/' $i - sed -i 's/CONFIG_LTO_NONE=y/# CONFIG_LTO_NONE is not set/' $i -done -%endif - -# Add DUP and kpatch certificates to system trusted keys for RHEL -%if 0%{?rhel} -%if %{signkernel}%{signmodules} -openssl x509 -inform der -in %{SOURCE100} -out rheldup3.pem -openssl x509 -inform der -in %{SOURCE101} -out rhelkpatch1.pem -cat rheldup3.pem rhelkpatch1.pem > ../certs/rhel.pem -%ifarch s390x ppc64le -openssl x509 -inform der -in %{secureboot_ca_0} -out secureboot.pem -cat secureboot.pem >> ../certs/rhel.pem -%endif -for i in *.config; do - sed -i 's@CONFIG_SYSTEM_TRUSTED_KEYS=""@CONFIG_SYSTEM_TRUSTED_KEYS="certs/rhel.pem"@' $i -done -%endif -%endif - -cp %{SOURCE81} . -OPTS="" -%if %{with_configchecks} - OPTS="$OPTS -w -n -c" -%endif -%if %{with clang_lto} -for opt in %{clang_make_opts}; do - OPTS="$OPTS -m $opt" -done -%endif -RHJOBS=$RPM_BUILD_NCPUS PACKAGE_NAME=kernel ./process_configs.sh $OPTS ${specversion} - -cp %{SOURCE82} . -RPM_SOURCE_DIR=$RPM_SOURCE_DIR ./update_scripts.sh %{primary_target} - -# We may want to override files from the primary target in case of building -# against a flavour of it (eg. centos not rhel), thus override it here if -# necessary -if [ "%{primary_target}" == "rhel" ]; then -%if 0%{?centos} - echo "Updating scripts/sources to centos version" - RPM_SOURCE_DIR=$RPM_SOURCE_DIR ./update_scripts.sh centos -%else - echo "Not updating scripts/sources to centos version" -%endif -fi - -# end of kernel config -%endif - -cd .. -# # End of Configs stuff - -# get rid of unwanted files resulting from patch fuzz -find . \( -name "*.orig" -o -name "*~" \) -delete >/dev/null - -# remove unnecessary SCM files -find . -name .gitignore -delete >/dev/null - -cd .. - -### -### build -### -%build - -%if %{with_sparse} -%define sparse_mflags C=1 -%endif - -cp_vmlinux() -{ - eu-strip --remove-comment -o "$2" "$1" -} - -# Note we need to disable these flags for cross builds because the flags -# from redhat-rpm-config assume that host == target so target arch -# flags cause issues with the host compiler. -%if !%{with_cross} -%define build_hostcflags %{?build_cflags} -%define build_hostldflags %{?build_ldflags} -%endif - -%define make %{__make} %{?cross_opts} %{?make_opts} HOSTCFLAGS="%{?build_hostcflags}" HOSTLDFLAGS="%{?build_hostldflags}" - -InitBuildVars() { - # Initialize the kernel .config file and create some variables that are - # needed for the actual build process. - - Variant=$1 - - # Pick the right kernel config file - Config=kernel-%{version}-%{_target_cpu}${Variant:+-${Variant}}.config - DevelDir=/usr/src/kernels/%{KVERREL}${Variant:++${Variant}} - - KernelVer=%{version}-%{release}.%{_target_cpu}${Variant:++${Variant}} - - # make sure EXTRAVERSION says what we want it to say - # Trim the release if this is a CI build, since KERNELVERSION is limited to 64 characters - ShortRel=$(perl -e "print \"%{release}\" =~ s/\.pr\.[0-9A-Fa-f]{32}//r") - perl -p -i -e "s/^EXTRAVERSION.*/EXTRAVERSION = -${ShortRel}.%{_target_cpu}${Variant:++${Variant}}/" Makefile - - # if pre-rc1 devel kernel, must fix up PATCHLEVEL for our versioning scheme - # if we are post rc1 this should match anyway so this won't matter - perl -p -i -e 's/^PATCHLEVEL.*/PATCHLEVEL = %{patchlevel}/' Makefile - - %{make} %{?_smp_mflags} mrproper - cp configs/$Config .config - - %if %{signkernel}%{signmodules} - cp configs/x509.genkey certs/. - %endif - - Arch=`head -1 .config | cut -b 3-` - echo USING ARCH=$Arch - - KCFLAGS="%{?kcflags}" - - # add kpatch flags for base kernel - if [ "$Variant" == "" ]; then - KCFLAGS="$KCFLAGS %{?kpatch_kcflags}" - fi -} - -BuildKernel() { - MakeTarget=$1 - KernelImage=$2 - DoVDSO=$3 - Variant=$4 - InstallName=${5:-vmlinuz} - - DoModules=1 - if [ "$Variant" = "zfcpdump" ]; then - DoModules=0 - fi - - # When the bootable image is just the ELF kernel, strip it. - # We already copy the unstripped file into the debuginfo package. - if [ "$KernelImage" = vmlinux ]; then - CopyKernel=cp_vmlinux - else - CopyKernel=cp - fi - - InitBuildVars $Variant - - echo BUILDING A KERNEL FOR ${Variant} %{_target_cpu}... - - %{make} ARCH=$Arch olddefconfig >/dev/null - - # This ensures build-ids are unique to allow parallel debuginfo - perl -p -i -e "s/^CONFIG_BUILD_SALT.*/CONFIG_BUILD_SALT=\"%{KVERREL}\"/" .config - %{make} ARCH=$Arch KCFLAGS="$KCFLAGS" WITH_GCOV="%{?with_gcov}" %{?_smp_mflags} $MakeTarget %{?sparse_mflags} %{?kernel_mflags} - if [ $DoModules -eq 1 ]; then - %{make} ARCH=$Arch KCFLAGS="$KCFLAGS" WITH_GCOV="%{?with_gcov}" %{?_smp_mflags} modules %{?sparse_mflags} || exit 1 - fi - - mkdir -p $RPM_BUILD_ROOT/%{image_install_path} - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/systemtap -%if %{with_debuginfo} - mkdir -p $RPM_BUILD_ROOT%{debuginfodir}/%{image_install_path} -%endif - -%ifarch %{arm} aarch64 - %{make} ARCH=$Arch dtbs INSTALL_DTBS_PATH=$RPM_BUILD_ROOT/%{image_install_path}/dtb-$KernelVer - %{make} ARCH=$Arch dtbs_install INSTALL_DTBS_PATH=$RPM_BUILD_ROOT/%{image_install_path}/dtb-$KernelVer - cp -r $RPM_BUILD_ROOT/%{image_install_path}/dtb-$KernelVer $RPM_BUILD_ROOT/lib/modules/$KernelVer/dtb - find arch/$Arch/boot/dts -name '*.dtb' -type f -delete -%endif - - # Start installing the results - install -m 644 .config $RPM_BUILD_ROOT/boot/config-$KernelVer - install -m 644 .config $RPM_BUILD_ROOT/lib/modules/$KernelVer/config - install -m 644 System.map $RPM_BUILD_ROOT/boot/System.map-$KernelVer - install -m 644 System.map $RPM_BUILD_ROOT/lib/modules/$KernelVer/System.map - - # We estimate the size of the initramfs because rpm needs to take this size - # into consideration when performing disk space calculations. (See bz #530778) - dd if=/dev/zero of=$RPM_BUILD_ROOT/boot/initramfs-$KernelVer.img bs=1M count=20 - - if [ -f arch/$Arch/boot/zImage.stub ]; then - cp arch/$Arch/boot/zImage.stub $RPM_BUILD_ROOT/%{image_install_path}/zImage.stub-$KernelVer || : - cp arch/$Arch/boot/zImage.stub $RPM_BUILD_ROOT/lib/modules/$KernelVer/zImage.stub-$KernelVer || : - fi - - %if %{signkernel} - if [ "$KernelImage" = vmlinux ]; then - # We can't strip and sign $KernelImage in place, because - # we need to preserve original vmlinux for debuginfo. - # Use a copy for signing. - $CopyKernel $KernelImage $KernelImage.tosign - KernelImage=$KernelImage.tosign - CopyKernel=cp - fi - - # Sign the image if we're using EFI - # aarch64 kernels are gziped EFI images - KernelExtension=${KernelImage##*.} - if [ "$KernelExtension" == "gz" ]; then - SignImage=${KernelImage%.*} - else - SignImage=$KernelImage - fi - - %ifarch x86_64 aarch64 - %pesign -s -i $SignImage -o vmlinuz.tmp -a %{secureboot_ca_0} -c %{secureboot_key_0} -n %{pesign_name_0} - %pesign -s -i vmlinuz.tmp -o vmlinuz.signed -a %{secureboot_ca_1} -c %{secureboot_key_1} -n %{pesign_name_1} - rm vmlinuz.tmp - %endif - %ifarch s390x ppc64le - if [ -x /usr/bin/rpm-sign ]; then - rpm-sign --key "%{pesign_name_0}" --lkmsign $SignImage --output vmlinuz.signed - elif [ $DoModules -eq 1 ]; then - chmod +x scripts/sign-file - ./scripts/sign-file -p sha256 certs/signing_key.pem certs/signing_key.x509 $SignImage vmlinuz.signed - else - mv $SignImage vmlinuz.signed - fi - %endif - - if [ ! -s vmlinuz.signed ]; then - echo "pesigning failed" - exit 1 - fi - mv vmlinuz.signed $SignImage - if [ "$KernelExtension" == "gz" ]; then - gzip -f9 $SignImage - fi - # signkernel - %endif - - $CopyKernel $KernelImage \ - $RPM_BUILD_ROOT/%{image_install_path}/$InstallName-$KernelVer - chmod 755 $RPM_BUILD_ROOT/%{image_install_path}/$InstallName-$KernelVer - cp $RPM_BUILD_ROOT/%{image_install_path}/$InstallName-$KernelVer $RPM_BUILD_ROOT/lib/modules/$KernelVer/$InstallName - - # hmac sign the kernel for FIPS - echo "Creating hmac file: $RPM_BUILD_ROOT/%{image_install_path}/.vmlinuz-$KernelVer.hmac" - ls -l $RPM_BUILD_ROOT/%{image_install_path}/$InstallName-$KernelVer - (cd $RPM_BUILD_ROOT/%{image_install_path} && sha512hmac $InstallName-$KernelVer) > $RPM_BUILD_ROOT/%{image_install_path}/.vmlinuz-$KernelVer.hmac; - cp $RPM_BUILD_ROOT/%{image_install_path}/.vmlinuz-$KernelVer.hmac $RPM_BUILD_ROOT/lib/modules/$KernelVer/.vmlinuz.hmac - - if [ $DoModules -eq 1 ]; then - # Override $(mod-fw) because we don't want it to install any firmware - # we'll get it from the linux-firmware package and we don't want conflicts - %{make} %{?_smp_mflags} ARCH=$Arch INSTALL_MOD_PATH=$RPM_BUILD_ROOT %{?_smp_mflags} modules_install KERNELRELEASE=$KernelVer mod-fw= - fi - -%if %{with_gcov} - # install gcov-needed files to $BUILDROOT/$BUILD/...: - # gcov_info->filename is absolute path - # gcno references to sources can use absolute paths (e.g. in out-of-tree builds) - # sysfs symlink targets (set up at compile time) use absolute paths to BUILD dir - find . \( -name '*.gcno' -o -name '*.[chS]' \) -exec install -D '{}' "$RPM_BUILD_ROOT/$(pwd)/{}" \; -%endif - - # add an a noop %%defattr statement 'cause rpm doesn't like empty file list files - echo '%%defattr(-,-,-)' > ../kernel${Variant:+-${Variant}}-ldsoconf.list - if [ $DoVDSO -ne 0 ]; then - %{make} ARCH=$Arch INSTALL_MOD_PATH=$RPM_BUILD_ROOT vdso_install KERNELRELEASE=$KernelVer - if [ -s ldconfig-kernel.conf ]; then - install -D -m 444 ldconfig-kernel.conf \ - $RPM_BUILD_ROOT/etc/ld.so.conf.d/kernel-$KernelVer.conf - echo /etc/ld.so.conf.d/kernel-$KernelVer.conf >> ../kernel${Variant:+-${Variant}}-ldsoconf.list - fi - - rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/vdso/.build-id - fi - - # And save the headers/makefiles etc for building modules against - # - # This all looks scary, but the end result is supposed to be: - # * all arch relevant include/ files - # * all Makefile/Kconfig files - # * all script/ files - - rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/source - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - (cd $RPM_BUILD_ROOT/lib/modules/$KernelVer ; ln -s build source) - # dirs for additional modules per module-init-tools, kbuild/modules.txt - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/updates - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/weak-updates - # CONFIG_KERNEL_HEADER_TEST generates some extra files in the process of - # testing so just delete - find . -name *.h.s -delete - # first copy everything - cp --parents `find -type f -name "Makefile*" -o -name "Kconfig*"` $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - if [ ! -e Module.symvers ]; then - touch Module.symvers - fi - cp Module.symvers $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp System.map $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - if [ -s Module.markers ]; then - cp Module.markers $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - fi - - # create the kABI metadata for use in packaging - # NOTENOTE: the name symvers is used by the rpm backend - # NOTENOTE: to discover and run the /usr/lib/rpm/fileattrs/kabi.attr - # NOTENOTE: script which dynamically adds exported kernel symbol - # NOTENOTE: checksums to the rpm metadata provides list. - # NOTENOTE: if you change the symvers name, update the backend too - echo "**** GENERATING kernel ABI metadata ****" - gzip -c9 < Module.symvers > $RPM_BUILD_ROOT/boot/symvers-$KernelVer.gz - cp $RPM_BUILD_ROOT/boot/symvers-$KernelVer.gz $RPM_BUILD_ROOT/lib/modules/$KernelVer/symvers.gz - -%if %{with_kabichk} - echo "**** kABI checking is enabled in kernel SPEC file. ****" - chmod 0755 $RPM_SOURCE_DIR/check-kabi - if [ -e $RPM_SOURCE_DIR/Module.kabi_%{_target_cpu}$Variant ]; then - cp $RPM_SOURCE_DIR/Module.kabi_%{_target_cpu}$Variant $RPM_BUILD_ROOT/Module.kabi - $RPM_SOURCE_DIR/check-kabi -k $RPM_BUILD_ROOT/Module.kabi -s Module.symvers || exit 1 - # for now, don't keep it around. - rm $RPM_BUILD_ROOT/Module.kabi - else - echo "**** NOTE: Cannot find reference Module.kabi file. ****" - fi -%endif - -%if %{with_kabidupchk} - echo "**** kABI DUP checking is enabled in kernel SPEC file. ****" - if [ -e $RPM_SOURCE_DIR/Module.kabi_dup_%{_target_cpu}$Variant ]; then - cp $RPM_SOURCE_DIR/Module.kabi_dup_%{_target_cpu}$Variant $RPM_BUILD_ROOT/Module.kabi - $RPM_SOURCE_DIR/check-kabi -k $RPM_BUILD_ROOT/Module.kabi -s Module.symvers || exit 1 - # for now, don't keep it around. - rm $RPM_BUILD_ROOT/Module.kabi - else - echo "**** NOTE: Cannot find DUP reference Module.kabi file. ****" - fi -%endif - -%if %{with_kabidw_base} - # Don't build kabi base for debug kernels - if [ "$Variant" != "zfcpdump" -a "$Variant" != "debug" ]; then - mkdir -p $RPM_BUILD_ROOT/kabi-dwarf - tar xjvf %{SOURCE301} -C $RPM_BUILD_ROOT/kabi-dwarf - - mkdir -p $RPM_BUILD_ROOT/kabi-dwarf/stablelists - tar xjvf %{SOURCE300} -C $RPM_BUILD_ROOT/kabi-dwarf/stablelists - - echo "**** GENERATING DWARF-based kABI baseline dataset ****" - chmod 0755 $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh - $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh generate \ - "$RPM_BUILD_ROOT/kabi-dwarf/stablelists/kabi-current/kabi_stablelist_%{_target_cpu}" \ - "$(pwd)" \ - "$RPM_BUILD_ROOT/kabidw-base/%{_target_cpu}${Variant:+.${Variant}}" || : - - rm -rf $RPM_BUILD_ROOT/kabi-dwarf - fi -%endif - -%if %{with_kabidwchk} - if [ "$Variant" != "zfcpdump" ]; then - mkdir -p $RPM_BUILD_ROOT/kabi-dwarf - tar xjvf %{SOURCE301} -C $RPM_BUILD_ROOT/kabi-dwarf - if [ -d "$RPM_BUILD_ROOT/kabi-dwarf/base/%{_target_cpu}${Variant:+.${Variant}}" ]; then - mkdir -p $RPM_BUILD_ROOT/kabi-dwarf/stablelists - tar xjvf %{SOURCE300} -C $RPM_BUILD_ROOT/kabi-dwarf/stablelists - - echo "**** GENERATING DWARF-based kABI dataset ****" - chmod 0755 $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh - $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh generate \ - "$RPM_BUILD_ROOT/kabi-dwarf/stablelists/kabi-current/kabi_stablelist_%{_target_cpu}" \ - "$(pwd)" \ - "$RPM_BUILD_ROOT/kabi-dwarf/base/%{_target_cpu}${Variant:+.${Variant}}.tmp" || : - - echo "**** kABI DWARF-based comparison report ****" - $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh compare \ - "$RPM_BUILD_ROOT/kabi-dwarf/base/%{_target_cpu}${Variant:+.${Variant}}" \ - "$RPM_BUILD_ROOT/kabi-dwarf/base/%{_target_cpu}${Variant:+.${Variant}}.tmp" || : - echo "**** End of kABI DWARF-based comparison report ****" - else - echo "**** Baseline dataset for kABI DWARF-BASED comparison report not found ****" - fi - - rm -rf $RPM_BUILD_ROOT/kabi-dwarf - fi -%endif - - # then drop all but the needed Makefiles/Kconfig files - rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts - rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include - cp .config $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a scripts $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts/tracing - rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts/spdxcheck.py - -%ifarch s390x - # CONFIG_EXPOLINE_EXTERN=y produces arch/s390/lib/expoline.o - # which is needed during external module build. - if [ -f arch/s390/lib/expoline.o ]; then - cp -a --parents arch/s390/lib/expoline.o $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - fi -%endif - - # Files for 'make scripts' to succeed with kernel-devel. - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/security/selinux/include - cp -a --parents security/selinux/include/classmap.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents security/selinux/include/initial_sid_to_string.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/tools/include/tools - cp -a --parents tools/include/tools/be_byteshift.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/tools/le_byteshift.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - - # Files for 'make prepare' to succeed with kernel-devel. - cp -a --parents tools/include/linux/compiler* $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/linux/types.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/build/Build.include $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/build/Build $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/build/fixdep.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/objtool/sync-check.sh $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/bpf/resolve_btfids $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - - cp --parents security/selinux/include/policycap_names.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents security/selinux/include/policycap.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - - cp -a --parents tools/include/asm-generic $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/linux $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/uapi/asm $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/uapi/asm-generic $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/uapi/linux $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/vdso $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/scripts/utilities.mak $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/lib/subcmd $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/lib/*.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/objtool/*.[ch] $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/objtool/Build $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/objtool/include/objtool/*.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/lib/bpf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/lib/bpf/Build $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - - if [ -f tools/objtool/objtool ]; then - cp -a tools/objtool/objtool $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/tools/objtool/ || : - fi - if [ -f tools/objtool/fixdep ]; then - cp -a tools/objtool/fixdep $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/tools/objtool/ || : - fi - if [ -d arch/$Arch/scripts ]; then - cp -a arch/$Arch/scripts $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/arch/%{_arch} || : - fi - if [ -f arch/$Arch/*lds ]; then - cp -a arch/$Arch/*lds $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/arch/%{_arch}/ || : - fi - if [ -f arch/%{asmarch}/kernel/module.lds ]; then - cp -a --parents arch/%{asmarch}/kernel/module.lds $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - fi - find $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts \( -iname "*.o" -o -iname "*.cmd" \) -exec rm -f {} + -%ifarch ppc64le - cp -a --parents arch/powerpc/lib/crtsavres.[So] $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ -%endif - if [ -d arch/%{asmarch}/include ]; then - cp -a --parents arch/%{asmarch}/include $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - fi -%ifarch aarch64 - # arch/arm64/include/asm/xen references arch/arm - cp -a --parents arch/arm/include/asm/xen $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - # arch/arm64/include/asm/opcodes.h references arch/arm - cp -a --parents arch/arm/include/asm/opcodes.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ -%endif - # include the machine specific headers for ARM variants, if available. -%ifarch %{arm} - if [ -d arch/%{asmarch}/mach-${Variant}/include ]; then - cp -a --parents arch/%{asmarch}/mach-${Variant}/include $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - fi - # include a few files for 'make prepare' - cp -a --parents arch/arm/tools/gen-mach-types $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/arm/tools/mach-types $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - -%endif - cp -a include $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include -%ifarch i686 x86_64 - # files for 'make prepare' to succeed with kernel-devel - cp -a --parents arch/x86/entry/syscalls/syscall_32.tbl $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/entry/syscalls/syscall_64.tbl $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs_32.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs_64.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs_common.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/purgatory/purgatory.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/purgatory/stack.S $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/purgatory/setup-x86_64.S $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/purgatory/entry64.S $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/boot/string.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/boot/string.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/boot/ctype.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - - cp -a --parents scripts/syscalltbl.sh $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents scripts/syscallhdr.sh $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - - cp -a --parents tools/arch/x86/include/asm $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/arch/x86/include/uapi/asm $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/objtool/arch/x86/lib $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/arch/x86/lib/ $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/arch/x86/tools/gen-insn-attr-x86.awk $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/objtool/arch/x86/ $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - -%endif - # Clean up intermediate tools files - find $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/tools \( -iname "*.o" -o -iname "*.cmd" \) -exec rm -f {} + - - # Make sure the Makefile, version.h, and auto.conf have a matching - # timestamp so that external modules can be built - touch -r $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/Makefile \ - $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include/generated/uapi/linux/version.h \ - $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include/config/auto.conf - -%if %{with_debuginfo} - eu-readelf -n vmlinux | grep "Build ID" | awk '{print $NF}' > vmlinux.id - cp vmlinux.id $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/vmlinux.id - - # - # save the vmlinux file for kernel debugging into the kernel-debuginfo rpm - # - mkdir -p $RPM_BUILD_ROOT%{debuginfodir}/lib/modules/$KernelVer - cp vmlinux $RPM_BUILD_ROOT%{debuginfodir}/lib/modules/$KernelVer - if [ -n "%{vmlinux_decompressor}" ]; then - eu-readelf -n %{vmlinux_decompressor} | grep "Build ID" | awk '{print $NF}' > vmlinux.decompressor.id - # Without build-id the build will fail. But for s390 the build-id - # wasn't added before 5.11. In case it is missing prefer not - # packaging the debuginfo over a build failure. - if [ -s vmlinux.decompressor.id ]; then - cp vmlinux.decompressor.id $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/vmlinux.decompressor.id - cp %{vmlinux_decompressor} $RPM_BUILD_ROOT%{debuginfodir}/lib/modules/$KernelVer/vmlinux.decompressor - fi - fi -%endif - - find $RPM_BUILD_ROOT/lib/modules/$KernelVer -name "*.ko" -type f >modnames - - # mark modules executable so that strip-to-file can strip them - xargs --no-run-if-empty chmod u+x < modnames - - # Generate a list of modules for block and networking. - - grep -F /drivers/ modnames | xargs --no-run-if-empty nm -upA | - sed -n 's,^.*/\([^/]*\.ko\): *U \(.*\)$,\1 \2,p' > drivers.undef - - collect_modules_list() - { - sed -r -n -e "s/^([^ ]+) \\.?($2)\$/\\1/p" drivers.undef | - LC_ALL=C sort -u > $RPM_BUILD_ROOT/lib/modules/$KernelVer/modules.$1 - if [ ! -z "$3" ]; then - sed -r -e "/^($3)\$/d" -i $RPM_BUILD_ROOT/lib/modules/$KernelVer/modules.$1 - fi - } - - collect_modules_list networking \ - 'register_netdev|ieee80211_register_hw|usbnet_probe|phy_driver_register|rt(l_|2x00)(pci|usb)_probe|register_netdevice' - collect_modules_list block \ - 'ata_scsi_ioctl|scsi_add_host|scsi_add_host_with_dma|blk_alloc_queue|blk_init_queue|register_mtd_blktrans|scsi_esp_register|scsi_register_device_handler|blk_queue_physical_block_size' 'pktcdvd.ko|dm-mod.ko' - collect_modules_list drm \ - 'drm_open|drm_init' - collect_modules_list modesetting \ - 'drm_crtc_init' - - # detect missing or incorrect license tags - ( find $RPM_BUILD_ROOT/lib/modules/$KernelVer -name '*.ko' | xargs /sbin/modinfo -l | \ - grep -E -v 'GPL( v2)?$|Dual BSD/GPL$|Dual MPL/GPL$|GPL and additional rights$' ) && exit 1 - - remove_depmod_files() - { - # remove files that will be auto generated by depmod at rpm -i time - pushd $RPM_BUILD_ROOT/lib/modules/$KernelVer/ - rm -f modules.{alias,alias.bin,builtin.alias.bin,builtin.bin} \ - modules.{dep,dep.bin,devname,softdep,symbols,symbols.bin} - popd - } - - remove_depmod_files - - # Identify modules in the kernel-modules-extras package - %{SOURCE20} $RPM_BUILD_ROOT lib/modules/$KernelVer $(realpath configs/mod-extra.list) - # Identify modules in the kernel-modules-extras package - %{SOURCE20} $RPM_BUILD_ROOT lib/modules/$KernelVer %{SOURCE84} internal - - # - # Generate the kernel-core and kernel-modules files lists - # - - # Copy the System.map file for depmod to use, and create a backup of the - # full module tree so we can restore it after we're done filtering - cp System.map $RPM_BUILD_ROOT/. - cp configs/filter-*.sh $RPM_BUILD_ROOT/. - pushd $RPM_BUILD_ROOT - mkdir restore - cp -r lib/modules/$KernelVer/* restore/. - - # don't include anything going into kernel-modules-extra in the file lists - xargs rm -rf < mod-extra.list - # don't include anything going int kernel-modules-internal in the file lists - xargs rm -rf < mod-internal.list - - if [ $DoModules -eq 1 ]; then - # Find all the module files and filter them out into the core and - # modules lists. This actually removes anything going into -modules - # from the dir. - find lib/modules/$KernelVer/kernel -name *.ko | sort -n > modules.list - ./filter-modules.sh modules.list %{_target_cpu} - rm filter-*.sh - - # Run depmod on the resulting module tree and make sure it isn't broken - depmod -b . -aeF ./System.map $KernelVer &> depmod.out - if [ -s depmod.out ]; then - echo "Depmod failure" - cat depmod.out - exit 1 - else - rm depmod.out - fi - else - # Ensure important files/directories exist to let the packaging succeed - echo '%%defattr(-,-,-)' > modules.list - echo '%%defattr(-,-,-)' > k-d.list - mkdir -p lib/modules/$KernelVer/kernel - # Add files usually created by make modules, needed to prevent errors - # thrown by depmod during package installation - touch lib/modules/$KernelVer/modules.order - touch lib/modules/$KernelVer/modules.builtin - fi - - remove_depmod_files - - # Go back and find all of the various directories in the tree. We use this - # for the dir lists in kernel-core - find lib/modules/$KernelVer/kernel -mindepth 1 -type d | sort -n > module-dirs.list - - # Cleanup - rm System.map - # Just "cp -r" can be very slow: here, it rewrites _existing files_ - # with open(O_TRUNC). Many filesystems synchronously wait for metadata - # update for such file rewrites (seen in strace as final close syscall - # taking a long time). On a rotational disk, cp was observed to take - # more than 5 minutes on ext4 and more than 15 minutes (!) on xfs. - # With --remove-destination, we avoid this, and copying - # (with enough RAM to cache it) takes 5 seconds: - cp -r --remove-destination restore/* lib/modules/$KernelVer/. - rm -rf restore - popd - - # Make sure the files lists start with absolute paths or rpmbuild fails. - # Also add in the dir entries - sed -e 's/^lib*/\/lib/' %{?zipsed} $RPM_BUILD_ROOT/k-d.list > ../kernel${Variant:+-${Variant}}-modules.list - sed -e 's/^lib*/%dir \/lib/' %{?zipsed} $RPM_BUILD_ROOT/module-dirs.list > ../kernel${Variant:+-${Variant}}-core.list - sed -e 's/^lib*/\/lib/' %{?zipsed} $RPM_BUILD_ROOT/modules.list >> ../kernel${Variant:+-${Variant}}-core.list - sed -e 's/^lib*/\/lib/' %{?zipsed} $RPM_BUILD_ROOT/mod-extra.list >> ../kernel${Variant:+-${Variant}}-modules-extra.list - sed -e 's/^lib*/\/lib/' %{?zipsed} $RPM_BUILD_ROOT/mod-internal.list >> ../kernel${Variant:+-${Variant}}-modules-internal.list - - # Cleanup - rm -f $RPM_BUILD_ROOT/k-d.list - rm -f $RPM_BUILD_ROOT/modules.list - rm -f $RPM_BUILD_ROOT/module-dirs.list - rm -f $RPM_BUILD_ROOT/mod-extra.list - rm -f $RPM_BUILD_ROOT/mod-internal.list - -%if %{signmodules} - if [ $DoModules -eq 1 ]; then - # Save the signing keys so we can sign the modules in __modsign_install_post - cp certs/signing_key.pem certs/signing_key.pem.sign${Variant:++${Variant}} - cp certs/signing_key.x509 certs/signing_key.x509.sign${Variant:++${Variant}} - fi -%endif - - # Move the devel headers out of the root file system - mkdir -p $RPM_BUILD_ROOT/usr/src/kernels - mv $RPM_BUILD_ROOT/lib/modules/$KernelVer/build $RPM_BUILD_ROOT/$DevelDir - - # This is going to create a broken link during the build, but we don't use - # it after this point. We need the link to actually point to something - # when kernel-devel is installed, and a relative link doesn't work across - # the F17 UsrMove feature. - ln -sf $DevelDir $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - -%ifnarch armv7hl - # Generate vmlinux.h and put it to kernel-devel path - bpftool btf dump file vmlinux format c > $RPM_BUILD_ROOT/$DevelDir/vmlinux.h -%endif - - # prune junk from kernel-devel - find $RPM_BUILD_ROOT/usr/src/kernels -name ".*.cmd" -delete - - # Red Hat UEFI Secure Boot CA cert, which can be used to authenticate the kernel - mkdir -p $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer - %ifarch x86_64 aarch64 - install -m 0644 %{secureboot_ca_0} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca-20200609.cer - install -m 0644 %{secureboot_ca_1} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca-20140212.cer - ln -s kernel-signing-ca-20200609.cer $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca.cer - %else - install -m 0644 %{secureboot_ca_0} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca.cer - %endif - %ifarch s390x ppc64le - if [ $DoModules -eq 1 ]; then - if [ -x /usr/bin/rpm-sign ]; then - install -m 0644 %{secureboot_key_0} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/%{signing_key_filename} - else - install -m 0644 certs/signing_key.x509.sign${Variant:++${Variant}} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca.cer - openssl x509 -in certs/signing_key.pem.sign${Variant:++${Variant}} -outform der -out $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/%{signing_key_filename} - chmod 0644 $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/%{signing_key_filename} - fi - fi - %endif - -%if %{with_ipaclones} - MAXPROCS=$(echo %{?_smp_mflags} | sed -n 's/-j\s*\([0-9]\+\)/\1/p') - if [ -z "$MAXPROCS" ]; then - MAXPROCS=1 - fi - if [ "$Variant" == "" ]; then - mkdir -p $RPM_BUILD_ROOT/$DevelDir-ipaclones - find . -name '*.ipa-clones' | xargs -i{} -r -n 1 -P $MAXPROCS install -m 644 -D "{}" "$RPM_BUILD_ROOT/$DevelDir-ipaclones/{}" - fi -%endif - -} - -### -# DO it... -### - -# prepare directories -rm -rf $RPM_BUILD_ROOT -mkdir -p $RPM_BUILD_ROOT/boot -mkdir -p $RPM_BUILD_ROOT%{_libexecdir} - -cd linux-%{KVERREL} - - -%if %{with_debug} -BuildKernel %make_target %kernel_image %{_use_vdso} debug -%endif - -%if %{with_zfcpdump} -BuildKernel %make_target %kernel_image %{_use_vdso} zfcpdump -%endif - -%if %{with_pae} -BuildKernel %make_target %kernel_image %{use_vdso} lpae -%endif - -%if %{with_up} -BuildKernel %make_target %kernel_image %{_use_vdso} -%endif - -%ifnarch noarch i686 -%if !%{with_debug} && !%{with_zfcpdump} && !%{with_pae} && !%{with_up} -# If only building the user space tools, then initialize the build environment -# and some variables so that the various userspace tools can be built. -InitBuildVars -%endif -%endif - -%ifarch aarch64 -%global perf_build_extra_opts CORESIGHT=1 -%endif -%global perf_make \ - %{__make} %{?make_opts} EXTRA_CFLAGS="${RPM_OPT_FLAGS}" LDFLAGS="%{__global_ldflags}" %{?cross_opts} -C tools/perf V=1 NO_PERF_READ_VDSO32=1 NO_PERF_READ_VDSOX32=1 WERROR=0 NO_LIBUNWIND=1 HAVE_CPLUS_DEMANGLE=1 NO_GTK2=1 NO_STRLCPY=1 NO_BIONIC=1 LIBBPF_DYNAMIC=1 LIBTRACEEVENT_DYNAMIC=1 %{?perf_build_extra_opts} prefix=%{_prefix} PYTHON=%{__python3} -%if %{with_perf} -# perf -# make sure check-headers.sh is executable -chmod +x tools/perf/check-headers.sh -%{perf_make} DESTDIR=$RPM_BUILD_ROOT all -%endif - -%global tools_make \ - CFLAGS="${RPM_OPT_FLAGS}" LDFLAGS="%{__global_ldflags}" %{make} %{?make_opts} - -%if %{with_tools} -%ifarch %{cpupowerarchs} -# cpupower -# make sure version-gen.sh is executable. -chmod +x tools/power/cpupower/utils/version-gen.sh -%{tools_make} %{?_smp_mflags} -C tools/power/cpupower CPUFREQ_BENCH=false DEBUG=false -%ifarch x86_64 - pushd tools/power/cpupower/debug/x86_64 - %{tools_make} %{?_smp_mflags} centrino-decode powernow-k8-decode - popd -%endif -%ifarch x86_64 - pushd tools/power/x86/x86_energy_perf_policy/ - %{tools_make} - popd - pushd tools/power/x86/turbostat - %{tools_make} - popd - pushd tools/power/x86/intel-speed-select - %{tools_make} - popd - pushd tools/arch/x86/intel_sdsi - %{tools_make} CFLAGS="${RPM_OPT_FLAGS}" - popd -%endif -%endif -pushd tools/thermal/tmon/ -%{tools_make} -popd -pushd tools/iio/ -%{tools_make} -popd -pushd tools/gpio/ -%{tools_make} -popd -# build VM tools -pushd tools/vm/ -%{tools_make} slabinfo page_owner_sort -popd -%endif - -if [ -f $DevelDir/vmlinux.h ]; then - RPM_VMLINUX_H=$DevelDir/vmlinux.h -fi - -%global bpftool_make \ - %{__make} EXTRA_CFLAGS="${RPM_OPT_FLAGS}" EXTRA_LDFLAGS="%{__global_ldflags}" DESTDIR=$RPM_BUILD_ROOT %{?make_opts} VMLINUX_H="${RPM_VMLINUX_H}" V=1 -%if %{with_bpftool} -pushd tools/bpf/bpftool -%{bpftool_make} -popd -%endif - -%if %{with_selftests} -# Unfortunately, samples/bpf/Makefile expects that the headers are installed -# in the source tree. We installed them previously to $RPM_BUILD_ROOT/usr -# but there's no way to tell the Makefile to take them from there. -%{make} %{?_smp_mflags} headers_install -%{make} %{?_smp_mflags} ARCH=$Arch V=1 M=samples/bpf/ || true - -# Prevent bpf selftests to build bpftool repeatedly: -export BPFTOOL=$(pwd)/tools/bpf/bpftool/bpftool - -pushd tools/testing/selftests -# We need to install here because we need to call make with ARCH set which -# doesn't seem possible to do in the install section. -%{make} %{?_smp_mflags} ARCH=$Arch V=1 TARGETS="bpf vm livepatch net net/forwarding net/mptcp netfilter tc-testing" SKIP_TARGETS="" INSTALL_PATH=%{buildroot}%{_libexecdir}/kselftests VMLINUX_H="${RPM_VMLINUX_H}" install - -# 'make install' for bpf is broken and upstream refuses to fix it. -# Install the needed files manually. -for dir in bpf bpf/no_alu32 bpf/progs; do - # In ARK, the rpm build continues even if some of the selftests - # cannot be built. It's not always possible to build selftests, - # as upstream sometimes dependens on too new llvm version or has - # other issues. If something did not get built, just skip it. - test -d $dir || continue - mkdir -p %{buildroot}%{_libexecdir}/kselftests/$dir - find $dir -maxdepth 1 -type f \( -executable -o -name '*.py' -o -name settings -o \ - -name 'btf_dump_test_case_*.c' -o -name '*.ko' -o \ - -name '*.o' -exec sh -c 'readelf -h "{}" | grep -q "^ Machine:.*BPF"' \; \) -print0 | \ - xargs -0 cp -t %{buildroot}%{_libexecdir}/kselftests/$dir || true -done -popd -export -n BPFTOOL -%endif - -%if %{with_doc} -# Make the HTML pages. -%{__make} PYTHON=/usr/bin/python3 htmldocs || %{doc_build_fail} - -# sometimes non-world-readable files sneak into the kernel source tree -chmod -R a=rX Documentation -find Documentation -type d | xargs chmod u+w -%endif - -# In the modsign case, we do 3 things. 1) We check the "variant" and hard -# code the value in the following invocations. This is somewhat sub-optimal -# but we're doing this inside of an RPM macro and it isn't as easy as it -# could be because of that. 2) We restore the .tmp_versions/ directory from -# the one we saved off in BuildKernel above. This is to make sure we're -# signing the modules we actually built/installed in that variant. 3) We -# grab the arch and invoke mod-sign.sh command to actually sign the modules. -# -# We have to do all of those things _after_ find-debuginfo runs, otherwise -# that will strip the signature off of the modules. -# -# Don't sign modules for the zfcpdump variant as it is monolithic. - -%define __modsign_install_post \ - if [ "%{signmodules}" -eq "1" ]; then \ - if [ "%{with_pae}" -ne "0" ]; then \ - %{modsign_cmd} certs/signing_key.pem.sign+lpae certs/signing_key.x509.sign+lpae $RPM_BUILD_ROOT/lib/modules/%{KVERREL}+lpae/ \ - fi \ - if [ "%{with_debug}" -ne "0" ]; then \ - %{modsign_cmd} certs/signing_key.pem.sign+debug certs/signing_key.x509.sign+debug $RPM_BUILD_ROOT/lib/modules/%{KVERREL}+debug/ \ - fi \ - if [ "%{with_up}" -ne "0" ]; then \ - %{modsign_cmd} certs/signing_key.pem.sign certs/signing_key.x509.sign $RPM_BUILD_ROOT/lib/modules/%{KVERREL}/ \ - fi \ - fi \ - if [ "%{zipmodules}" -eq "1" ]; then \ - find $RPM_BUILD_ROOT/lib/modules/ -type f -name '*.ko' | xargs -P${RPM_BUILD_NCPUS} -r xz; \ - fi \ -%{nil} - -### -### Special hacks for debuginfo subpackages. -### - -# This macro is used by %%install, so we must redefine it before that. -%define debug_package %{nil} - -%if %{with_debuginfo} - -%ifnarch noarch -%global __debug_package 1 -%files -f debugfiles.list debuginfo-common-%{_target_cpu} -%endif - -%endif - -# We don't want to package debuginfo for self-tests and samples but -# we have to delete them to avoid an error messages about unpackaged -# files. -# Delete the debuginfo for kernel-devel files -%define __remove_unwanted_dbginfo_install_post \ - if [ "%{with_selftests}" -ne "0" ]; then \ - rm -rf $RPM_BUILD_ROOT/usr/lib/debug/usr/libexec/ksamples; \ - rm -rf $RPM_BUILD_ROOT/usr/lib/debug/usr/libexec/kselftests; \ - fi \ - rm -rf $RPM_BUILD_ROOT/usr/lib/debug/usr/src; \ -%{nil} - -# -# Disgusting hack alert! We need to ensure we sign modules *after* all -# invocations of strip occur, which is in __debug_install_post if -# find-debuginfo.sh runs, and __os_install_post if not. -# -%define __spec_install_post \ - %{?__debug_package:%{__debug_install_post}}\ - %{__arch_install_post}\ - %{__os_install_post}\ - %{__remove_unwanted_dbginfo_install_post}\ - %{__modsign_install_post} - -### -### install -### - -%install - -cd linux-%{KVERREL} - -%if %{with_doc} -docdir=$RPM_BUILD_ROOT%{_datadir}/doc/kernel-doc-%{specversion}-%{pkgrelease} - -# copy the source over -mkdir -p $docdir -tar -h -f - --exclude=man --exclude='.*' -c Documentation | tar xf - -C $docdir - -# with_doc -%endif - -# We have to do the headers install before the tools install because the -# kernel headers_install will remove any header files in /usr/include that -# it doesn't install itself. - -%if %{with_headers} -# Install kernel headers -%{__make} ARCH=%{hdrarch} INSTALL_HDR_PATH=$RPM_BUILD_ROOT/usr headers_install - -find $RPM_BUILD_ROOT/usr/include \ - \( -name .install -o -name .check -o \ - -name ..install.cmd -o -name ..check.cmd \) -delete - -%endif - -%if %{with_cross_headers} -%if 0%{?fedora} -HDR_ARCH_LIST='arm arm64 powerpc s390 x86' -%else -HDR_ARCH_LIST='arm64 powerpc s390 x86' -%endif -mkdir -p $RPM_BUILD_ROOT/usr/tmp-headers - -for arch in $HDR_ARCH_LIST; do - mkdir $RPM_BUILD_ROOT/usr/tmp-headers/arch-${arch} - %{__make} ARCH=${arch} INSTALL_HDR_PATH=$RPM_BUILD_ROOT/usr/tmp-headers/arch-${arch} headers_install -done - -find $RPM_BUILD_ROOT/usr/tmp-headers \ - \( -name .install -o -name .check -o \ - -name ..install.cmd -o -name ..check.cmd \) -delete - -# Copy all the architectures we care about to their respective asm directories -for arch in $HDR_ARCH_LIST ; do - mkdir -p $RPM_BUILD_ROOT/usr/${arch}-linux-gnu/include - mv $RPM_BUILD_ROOT/usr/tmp-headers/arch-${arch}/include/* $RPM_BUILD_ROOT/usr/${arch}-linux-gnu/include/ -done - -rm -rf $RPM_BUILD_ROOT/usr/tmp-headers -%endif - -%if %{with_kernel_abi_stablelists} -# kabi directory -INSTALL_KABI_PATH=$RPM_BUILD_ROOT/lib/modules/ -mkdir -p $INSTALL_KABI_PATH - -# install kabi releases directories -tar xjvf %{SOURCE300} -C $INSTALL_KABI_PATH -# with_kernel_abi_stablelists -%endif - -%if %{with_perf} -# perf tool binary and supporting scripts/binaries -%{perf_make} DESTDIR=$RPM_BUILD_ROOT lib=%{_lib} install-bin -# remove the 'trace' symlink. -rm -f %{buildroot}%{_bindir}/trace - -# For both of the below, yes, this should be using a macro but right now -# it's hard coded and we don't actually want it anyway right now. -# Whoever wants examples can fix it up! - -# remove examples -rm -rf %{buildroot}/usr/lib/perf/examples -rm -rf %{buildroot}/usr/lib/perf/include - -# python-perf extension -%{perf_make} DESTDIR=$RPM_BUILD_ROOT install-python_ext - -# perf man pages (note: implicit rpm magic compresses them later) -mkdir -p %{buildroot}/%{_mandir}/man1 -%{perf_make} DESTDIR=$RPM_BUILD_ROOT install-man - -# remove any tracevent files, eg. its plugins still gets built and installed, -# even if we build against system's libtracevent during perf build (by setting -# LIBTRACEEVENT_DYNAMIC=1 above in perf_make macro). Those files should already -# ship with libtraceevent package. -rm -rf %{buildroot}%{_libdir}/traceevent -%endif - -%if %{with_tools} -%ifarch %{cpupowerarchs} -%{make} -C tools/power/cpupower DESTDIR=$RPM_BUILD_ROOT libdir=%{_libdir} mandir=%{_mandir} CPUFREQ_BENCH=false install -rm -f %{buildroot}%{_libdir}/*.{a,la} -%find_lang cpupower -mv cpupower.lang ../ -%ifarch x86_64 - pushd tools/power/cpupower/debug/x86_64 - install -m755 centrino-decode %{buildroot}%{_bindir}/centrino-decode - install -m755 powernow-k8-decode %{buildroot}%{_bindir}/powernow-k8-decode - popd -%endif -chmod 0755 %{buildroot}%{_libdir}/libcpupower.so* -mkdir -p %{buildroot}%{_unitdir} %{buildroot}%{_sysconfdir}/sysconfig -install -m644 %{SOURCE2000} %{buildroot}%{_unitdir}/cpupower.service -install -m644 %{SOURCE2001} %{buildroot}%{_sysconfdir}/sysconfig/cpupower -%endif -%ifarch x86_64 - mkdir -p %{buildroot}%{_mandir}/man8 - pushd tools/power/x86/x86_energy_perf_policy - %{tools_make} DESTDIR=%{buildroot} install - popd - pushd tools/power/x86/turbostat - %{tools_make} DESTDIR=%{buildroot} install - popd - pushd tools/power/x86/intel-speed-select - %{tools_make} DESTDIR=%{buildroot} install - popd - pushd tools/arch/x86/intel_sdsi - %{tools_make} CFLAGS="${RPM_OPT_FLAGS}" DESTDIR=%{buildroot} install - popd -%endif -pushd tools/thermal/tmon -%{tools_make} INSTALL_ROOT=%{buildroot} install -popd -pushd tools/iio -%{tools_make} DESTDIR=%{buildroot} install -popd -pushd tools/gpio -%{tools_make} DESTDIR=%{buildroot} install -popd -install -m644 -D %{SOURCE2002} %{buildroot}%{_sysconfdir}/logrotate.d/kvm_stat -pushd tools/kvm/kvm_stat -%{__make} INSTALL_ROOT=%{buildroot} install-tools -%{__make} INSTALL_ROOT=%{buildroot} install-man -install -m644 -D kvm_stat.service %{buildroot}%{_unitdir}/kvm_stat.service -popd -# install VM tools -pushd tools/vm/ -install -m755 slabinfo %{buildroot}%{_bindir}/slabinfo -install -m755 page_owner_sort %{buildroot}%{_bindir}/page_owner_sort -popd -%endif - -if [ -f $DevelDir/vmlinux.h ]; then - RPM_VMLINUX_H=$DevelDir/vmlinux.h -fi - -%if %{with_bpftool} -pushd tools/bpf/bpftool -%{bpftool_make} prefix=%{_prefix} bash_compdir=%{_sysconfdir}/bash_completion.d/ mandir=%{_mandir} install doc-install -popd -%endif - -%if %{with_selftests} -pushd samples -install -d %{buildroot}%{_libexecdir}/ksamples -# install bpf samples -pushd bpf -install -d %{buildroot}%{_libexecdir}/ksamples/bpf -find -type f -executable -exec install -m755 {} %{buildroot}%{_libexecdir}/ksamples/bpf \; -install -m755 *.sh %{buildroot}%{_libexecdir}/ksamples/bpf -# test_lwt_bpf.sh compiles test_lwt_bpf.c when run; this works only from the -# kernel tree. Just remove it. -rm %{buildroot}%{_libexecdir}/ksamples/bpf/test_lwt_bpf.sh -install -m644 *_kern.o %{buildroot}%{_libexecdir}/ksamples/bpf || true -install -m644 tcp_bpf.readme %{buildroot}%{_libexecdir}/ksamples/bpf -popd -# install pktgen samples -pushd pktgen -install -d %{buildroot}%{_libexecdir}/ksamples/pktgen -find . -type f -executable -exec install -m755 {} %{buildroot}%{_libexecdir}/ksamples/pktgen/{} \; -find . -type f ! -executable -exec install -m644 {} %{buildroot}%{_libexecdir}/ksamples/pktgen/{} \; -popd -popd -# install vm selftests -pushd tools/testing/selftests/vm -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/vm/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/vm/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/vm/{} \; -popd -# install drivers/net/mlxsw selftests -pushd tools/testing/selftests/drivers/net/mlxsw -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/drivers/net/mlxsw/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/drivers/net/mlxsw/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/drivers/net/mlxsw/{} \; -popd -# install drivers/net/netdevsim selftests -pushd tools/testing/selftests/drivers/net/netdevsim -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/drivers/net/netdevsim/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/drivers/net/netdevsim/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/drivers/net/netdevsim/{} \; -popd -# install net/forwarding selftests -pushd tools/testing/selftests/net/forwarding -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/net/forwarding/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/net/forwarding/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/net/forwarding/{} \; -popd -# install net/mptcp selftests -pushd tools/testing/selftests/net/mptcp -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/net/mptcp/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/net/mptcp/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/net/mptcp/{} \; -popd -# install tc-testing selftests -pushd tools/testing/selftests/tc-testing -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/tc-testing/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/tc-testing/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/tc-testing/{} \; -popd -# install livepatch selftests -pushd tools/testing/selftests/livepatch -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/livepatch/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/livepatch/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/livepatch/{} \; -popd -# install netfilter selftests -pushd tools/testing/selftests/netfilter -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/netfilter/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/netfilter/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/netfilter/{} \; -popd -%endif - -### -### clean -### - -### -### scripts -### - -%if %{with_tools} -%post -n kernel-tools-libs -/sbin/ldconfig - -%postun -n kernel-tools-libs -/sbin/ldconfig -%endif - -# -# This macro defines a %%post script for a kernel*-devel package. -# %%kernel_devel_post [<subpackage>] -# Note we don't run hardlink if ostree is in use, as ostree is -# a far more sophisticated hardlink implementation. -# https://github.com/projectatomic/rpm-ostree/commit/58a79056a889be8814aa51f507b2c7a4dccee526 -# -# The deletion of *.hardlink-temporary files is a temporary workaround -# for this bug in the hardlink binary (fixed in util-linux 2.38): -# https://github.com/util-linux/util-linux/issues/1602 -# -%define kernel_devel_post() \ -%{expand:%%post %{?1:%{1}-}devel}\ -if [ -f /etc/sysconfig/kernel ]\ -then\ - . /etc/sysconfig/kernel || exit $?\ -fi\ -if [ "$HARDLINK" != "no" -a -x /usr/bin/hardlink -a ! -e /run/ostree-booted ] \ -then\ - (cd /usr/src/kernels/%{KVERREL}%{?1:+%{1}} &&\ - /usr/bin/find . -type f | while read f; do\ - hardlink -c /usr/src/kernels/*%{?dist}.*/$f $f > /dev/null\ - done;\ - /usr/bin/find /usr/src/kernels -type f -name '*.hardlink-temporary' -delete\ - )\ -fi\ -%{nil} - -# -# This macro defines a %%post script for a kernel*-modules-extra package. -# It also defines a %%postun script that does the same thing. -# %%kernel_modules_extra_post [<subpackage>] -# -%define kernel_modules_extra_post() \ -%{expand:%%post %{?1:%{1}-}modules-extra}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil}\ -%{expand:%%postun %{?1:%{1}-}modules-extra}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil} - -# -# This macro defines a %%post script for a kernel*-modules-internal package. -# It also defines a %%postun script that does the same thing. -# %%kernel_modules_internal_post [<subpackage>] -# -%define kernel_modules_internal_post() \ -%{expand:%%post %{?1:%{1}-}modules-internal}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil}\ -%{expand:%%postun %{?1:%{1}-}modules-internal}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil} - -# -# This macro defines a %%post script for a kernel*-modules package. -# It also defines a %%postun script that does the same thing. -# %%kernel_modules_post [<subpackage>] -# -%define kernel_modules_post() \ -%{expand:%%post %{?1:%{1}-}modules}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -if [ ! -f %{_localstatedir}/lib/rpm-state/%{name}/installing_core_%{KVERREL}%{?1:+%{1}} ]; then\ - mkdir -p %{_localstatedir}/lib/rpm-state/%{name}\ - touch %{_localstatedir}/lib/rpm-state/%{name}/need_to_run_dracut_%{KVERREL}%{?1:+%{1}}\ -fi\ -%{nil}\ -%{expand:%%postun %{?1:%{1}-}modules}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil}\ -%{expand:%%posttrans %{?1:%{1}-}modules}\ -if [ -f %{_localstatedir}/lib/rpm-state/%{name}/need_to_run_dracut_%{KVERREL}%{?1:+%{1}} ]; then\ - rm -f %{_localstatedir}/lib/rpm-state/%{name}/need_to_run_dracut_%{KVERREL}%{?1:+%{1}}\ - echo "Running: dracut -f --kver %{KVERREL}%{?1:+%{1}}"\ - dracut -f --kver "%{KVERREL}%{?1:+%{1}}" || exit $?\ -fi\ -%{nil} - -# This macro defines a %%posttrans script for a kernel package. -# %%kernel_variant_posttrans [<subpackage>] -# More text can follow to go at the end of this variant's %%post. -# -%define kernel_variant_posttrans() \ -%{expand:%%posttrans %{?1:%{1}-}core}\ -%if 0%{!?fedora:1}\ -if [ -x %{_sbindir}/weak-modules ]\ -then\ - %{_sbindir}/weak-modules --add-kernel %{KVERREL}%{?1:+%{1}} || exit $?\ -fi\ -%endif\ -rm -f %{_localstatedir}/lib/rpm-state/%{name}/installing_core_%{KVERREL}%{?1:+%{1}}\ -/bin/kernel-install add %{KVERREL}%{?1:+%{1}} /lib/modules/%{KVERREL}%{?1:+%{1}}/vmlinuz || exit $?\ -%{nil} - -# -# This macro defines a %%post script for a kernel package and its devel package. -# %%kernel_variant_post [-v <subpackage>] [-r <replace>] -# More text can follow to go at the end of this variant's %%post. -# -%define kernel_variant_post(v:r:) \ -%{expand:%%kernel_devel_post %{?-v*}}\ -%{expand:%%kernel_modules_post %{?-v*}}\ -%{expand:%%kernel_modules_extra_post %{?-v*}}\ -%{expand:%%kernel_modules_internal_post %{?-v*}}\ -%{expand:%%kernel_variant_posttrans %{?-v*}}\ -%{expand:%%post %{?-v*:%{-v*}-}core}\ -%{-r:\ -if [ `uname -i` == "x86_64" -o `uname -i` == "i386" ] &&\ - [ -f /etc/sysconfig/kernel ]; then\ - /bin/sed -r -i -e 's/^DEFAULTKERNEL=%{-r*}$/DEFAULTKERNEL=kernel%{?-v:-%{-v*}}/' /etc/sysconfig/kernel || exit $?\ -fi}\ -mkdir -p %{_localstatedir}/lib/rpm-state/%{name}\ -touch %{_localstatedir}/lib/rpm-state/%{name}/installing_core_%{KVERREL}%{?1:+%{1}}\ -%{nil} - -# -# This macro defines a %%preun script for a kernel package. -# %%kernel_variant_preun <subpackage> -# -%define kernel_variant_preun() \ -%{expand:%%preun %{?1:%{1}-}core}\ -/bin/kernel-install remove %{KVERREL}%{?1:+%{1}} /lib/modules/%{KVERREL}%{?1:+%{1}}/vmlinuz || exit $?\ -if [ -x %{_sbindir}/weak-modules ]\ -then\ - %{_sbindir}/weak-modules --remove-kernel %{KVERREL}%{?1:+%{1}} || exit $?\ -fi\ -%{nil} - -%kernel_variant_preun -%kernel_variant_post -r kernel-smp - -%if %{with_pae} -%kernel_variant_preun lpae -%kernel_variant_post -v lpae -r (kernel|kernel-smp) -%endif - -%if %{with_debug} -%kernel_variant_preun debug -%kernel_variant_post -v debug -%endif - -%if %{with_zfcpdump} -%kernel_variant_preun zfcpdump -%kernel_variant_post -v zfcpdump -%endif - -if [ -x /sbin/ldconfig ] -then - /sbin/ldconfig -X || exit $? -fi - -### -### file lists -### - -%if %{with_headers} -%files headers -/usr/include/* -%endif - -%if %{with_cross_headers} -%files cross-headers -/usr/*-linux-gnu/include/* -%endif - -%if %{with_kernel_abi_stablelists} -%files -n kernel-abi-stablelists -/lib/modules/kabi-* -%endif - -%if %{with_kabidw_base} -%ifarch x86_64 s390x ppc64 ppc64le aarch64 -%files kernel-kabidw-base-internal -%defattr(-,root,root) -/kabidw-base/%{_target_cpu}/* -%endif -%endif - -# only some architecture builds need kernel-doc -%if %{with_doc} -%files doc -%defattr(-,root,root) -%{_datadir}/doc/kernel-doc-%{specversion}-%{pkgrelease}/Documentation/* -%dir %{_datadir}/doc/kernel-doc-%{specversion}-%{pkgrelease}/Documentation -%dir %{_datadir}/doc/kernel-doc-%{specversion}-%{pkgrelease} -%endif - -%if %{with_perf} -%files -n perf -%{_bindir}/perf -%{_libdir}/libperf-jvmti.so -%dir %{_libexecdir}/perf-core -%{_libexecdir}/perf-core/* -%{_datadir}/perf-core/* -%{_mandir}/man[1-8]/perf* -%{_sysconfdir}/bash_completion.d/perf -%doc linux-%{KVERREL}/tools/perf/Documentation/examples.txt -%{_docdir}/perf-tip/tips.txt - -%files -n python3-perf -%{python3_sitearch}/* - -%if %{with_debuginfo} -%files -f perf-debuginfo.list -n perf-debuginfo - -%files -f python3-perf-debuginfo.list -n python3-perf-debuginfo -%endif -# with_perf -%endif - -%if %{with_tools} -%ifnarch %{cpupowerarchs} -%files -n kernel-tools -%else -%files -n kernel-tools -f cpupower.lang -%{_bindir}/cpupower -%{_datadir}/bash-completion/completions/cpupower -%ifarch x86_64 -%{_bindir}/centrino-decode -%{_bindir}/powernow-k8-decode -%endif -%{_unitdir}/cpupower.service -%{_mandir}/man[1-8]/cpupower* -%config(noreplace) %{_sysconfdir}/sysconfig/cpupower -%ifarch x86_64 -%{_bindir}/x86_energy_perf_policy -%{_mandir}/man8/x86_energy_perf_policy* -%{_bindir}/turbostat -%{_mandir}/man8/turbostat* -%{_bindir}/intel-speed-select -%{_sbindir}/intel_sdsi -%endif -# cpupowerarchs -%endif -%{_bindir}/tmon -%{_bindir}/iio_event_monitor -%{_bindir}/iio_generic_buffer -%{_bindir}/lsiio -%{_bindir}/lsgpio -%{_bindir}/gpio-hammer -%{_bindir}/gpio-event-mon -%{_bindir}/gpio-watch -%{_mandir}/man1/kvm_stat* -%{_bindir}/kvm_stat -%{_unitdir}/kvm_stat.service -%config(noreplace) %{_sysconfdir}/logrotate.d/kvm_stat -%{_bindir}/page_owner_sort -%{_bindir}/slabinfo - -%if %{with_debuginfo} -%files -f kernel-tools-debuginfo.list -n kernel-tools-debuginfo -%endif - -%ifarch %{cpupowerarchs} -%files -n kernel-tools-libs -%{_libdir}/libcpupower.so.0 -%{_libdir}/libcpupower.so.0.0.1 - -%files -n kernel-tools-libs-devel -%{_libdir}/libcpupower.so -%{_includedir}/cpufreq.h -%endif -# with_tools -%endif - -%if %{with_bpftool} -%files -n bpftool -%{_sbindir}/bpftool -%{_sysconfdir}/bash_completion.d/bpftool -%{_mandir}/man8/bpftool-cgroup.8.gz -%{_mandir}/man8/bpftool-gen.8.gz -%{_mandir}/man8/bpftool-iter.8.gz -%{_mandir}/man8/bpftool-link.8.gz -%{_mandir}/man8/bpftool-map.8.gz -%{_mandir}/man8/bpftool-prog.8.gz -%{_mandir}/man8/bpftool-perf.8.gz -%{_mandir}/man8/bpftool.8.gz -%{_mandir}/man8/bpftool-net.8.gz -%{_mandir}/man8/bpftool-feature.8.gz -%{_mandir}/man8/bpftool-btf.8.gz -%{_mandir}/man8/bpftool-struct_ops.8.gz - -%if %{with_debuginfo} -%files -f bpftool-debuginfo.list -n bpftool-debuginfo -%defattr(-,root,root) -%endif -%endif - -%if %{with_selftests} -%files selftests-internal -%{_libexecdir}/ksamples -%{_libexecdir}/kselftests -%endif - -# empty meta-package -%ifnarch %nobuildarches noarch -%files -%endif - -%if %{with_gcov} -%ifnarch %nobuildarches noarch -%files gcov -%{_builddir} -%endif -%endif - -# This is %%{image_install_path} on an arch where that includes ELF files, -# or empty otherwise. -%define elf_image_install_path %{?kernel_image_elf:%{image_install_path}} - -# -# This macro defines the %%files sections for a kernel package -# and its devel and debuginfo packages. -# %%kernel_variant_files [-k vmlinux] <use_vdso> <condition> <subpackage> -# -%define kernel_variant_files(k:) \ -%if %{2}\ -%{expand:%%files -f kernel-%{?3:%{3}-}core.list %{?1:-f kernel-%{?3:%{3}-}ldsoconf.list} %{?3:%{3}-}core}\ -%{!?_licensedir:%global license %%doc}\ -%license linux-%{KVERREL}/COPYING-%{version}-%{release}\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/%{?-k:%{-k*}}%{!?-k:vmlinuz}\ -%ghost /%{image_install_path}/%{?-k:%{-k*}}%{!?-k:vmlinuz}-%{KVERREL}%{?3:+%{3}}\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/.vmlinuz.hmac \ -%ghost /%{image_install_path}/.vmlinuz-%{KVERREL}%{?3:+%{3}}.hmac \ -%ifarch %{arm} aarch64\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/dtb \ -%ghost /%{image_install_path}/dtb-%{KVERREL}%{?3:+%{3}} \ -%endif\ -%attr(0600, root, root) /lib/modules/%{KVERREL}%{?3:+%{3}}/System.map\ -%ghost %attr(0600, root, root) /boot/System.map-%{KVERREL}%{?3:+%{3}}\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/symvers.gz\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/config\ -%ghost %attr(0600, root, root) /boot/symvers-%{KVERREL}%{?3:+%{3}}.gz\ -%ghost %attr(0600, root, root) /boot/initramfs-%{KVERREL}%{?3:+%{3}}.img\ -%ghost %attr(0644, root, root) /boot/config-%{KVERREL}%{?3:+%{3}}\ -%dir /lib/modules\ -%dir /lib/modules/%{KVERREL}%{?3:+%{3}}\ -%dir /lib/modules/%{KVERREL}%{?3:+%{3}}/kernel\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/build\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/source\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/updates\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/weak-updates\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/systemtap\ -%{_datadir}/doc/kernel-keys/%{KVERREL}%{?3:+%{3}}\ -%if %{1}\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/vdso\ -%endif\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/modules.*\ -%{expand:%%files -f kernel-%{?3:%{3}-}modules.list %{?3:%{3}-}modules}\ -%{expand:%%files %{?3:%{3}-}devel}\ -%defverify(not mtime)\ -/usr/src/kernels/%{KVERREL}%{?3:+%{3}}\ -%{expand:%%files %{?3:%{3}-}devel-matched}\ -%{expand:%%files -f kernel-%{?3:%{3}-}modules-extra.list %{?3:%{3}-}modules-extra}\ -%config(noreplace) /etc/modprobe.d/*-blacklist.conf\ -%{expand:%%files -f kernel-%{?3:%{3}-}modules-internal.list %{?3:%{3}-}modules-internal}\ -%if %{with_debuginfo}\ -%ifnarch noarch\ -%{expand:%%files -f debuginfo%{?3}.list %{?3:%{3}-}debuginfo}\ -%endif\ -%endif\ -%if %{?3:1} %{!?3:0}\ -%{expand:%%files %{3}}\ -%endif\ -%endif\ -%{nil} - -%kernel_variant_files %{_use_vdso} %{with_up} -%kernel_variant_files %{_use_vdso} %{with_debug} debug -%if %{with_debug_meta} -%files debug -%files debug-core -%files debug-devel -%files debug-devel-matched -%files debug-modules -%files debug-modules-extra -%endif -%kernel_variant_files %{use_vdso} %{with_pae} lpae -%kernel_variant_files %{_use_vdso} %{with_zfcpdump} zfcpdump - -%define kernel_variant_ipaclones(k:) \ -%if %{1}\ -%if %{with_ipaclones}\ -%{expand:%%files %{?2:%{2}-}ipaclones-internal}\ -%defattr(-,root,root)\ -%defverify(not mtime)\ -/usr/src/kernels/%{KVERREL}%{?2:+%{2}}-ipaclones\ -%endif\ -%endif\ -%{nil} - -%kernel_variant_ipaclones %{with_up} - -# plz don't put in a version string unless you're going to tag -# and build. -# -# -%changelog Mon Mar 28 2022 Fedora Kernel Team <kernel-team@xxxxxxxxxxxxxxxxx> [5.16.0-6.test] - -### -# The following Emacs magic makes C-c C-e use UTC dates. -# Local Variables: -# rpm-change-log-uses-utc: t -# End: -### diff --git a/redhat/self-test/data/fedora-df0cc57e057f.fc25.spec b/redhat/self-test/data/fedora-df0cc57e057f.fc25.spec index blahblah..blahblah 100755 --- a/redhat/self-test/data/fedora-df0cc57e057f.fc25.spec +++ b/redhat/self-test/data/fedora-df0cc57e057f.fc25.spec @@ -1,3050 +1,13 @@ -# All Global changes to build and install go here. -# Per the below section about __spec_install_pre, any rpm -# environment changes that affect %%install need to go -# here before the %%install macro is pre-built. - -# Disable LTO in userspace packages. -%global _lto_cflags %{nil} - -# Option to enable compiling with clang instead of gcc. -%bcond_with toolchain_clang - -%if %{with toolchain_clang} -%global toolchain clang -%endif - -# Compile the kernel with LTO (only supported when building with clang). -%bcond_with clang_lto - -%if %{with clang_lto} && %{without toolchain_clang} -{error:clang_lto requires --with toolchain_clang} -%endif - -# Cross compile on copr for arm -# See https://bugzilla.redhat.com/1879599 -%if 0%{?_with_cross_arm:1} -%global _target_cpu armv7hl -%global _arch arm -%global _build_arch arm -%global _with_cross 1 -%endif - -# The kernel's %%install section is special -# Normally the %%install section starts by cleaning up the BUILD_ROOT -# like so: -# -# %%__spec_install_pre %%{___build_pre}\ -# [ "$RPM_BUILD_ROOT" != "/" ] && rm -rf "${RPM_BUILD_ROOT}"\ -# mkdir -p `dirname "$RPM_BUILD_ROOT"`\ -# mkdir "$RPM_BUILD_ROOT"\ -# %%{nil} -# -# But because of kernel variants, the %%build section, specifically -# BuildKernel(), moves each variant to its final destination as the -# variant is built. This violates the expectation of the %%install -# section. As a result we snapshot the current env variables and -# purposely leave out the removal section. All global wide changes -# should be added above this line otherwise the %%install section -# will not see them. -%global __spec_install_pre %{___build_pre} - -# At the time of this writing (2019-03), RHEL8 packages use w2.xzdio -# compression for rpms (xz, level 2). -# Kernel has several large (hundreds of mbytes) rpms, they take ~5 mins -# to compress by single-threaded xz. Switch to threaded compression, -# and from level 2 to 3 to keep compressed sizes close to "w2" results. -# -# NB: if default compression in /usr/lib/rpm/redhat/macros ever changes, -# this one might need tweaking (e.g. if default changes to w3.xzdio, -# change below to w4T.xzdio): -# -# This is disabled on i686 as it triggers oom errors - -%ifnarch i686 -%define _binary_payload w3T.xzdio -%endif - -Summary: The Linux kernel -%if 0%{?fedora} -%define secure_boot_arch x86_64 -%else -%define secure_boot_arch x86_64 aarch64 s390x ppc64le -%endif - -# Signing for secure boot authentication -%ifarch %{secure_boot_arch} -%global signkernel 1 -%else -%global signkernel 0 -%endif - -# Sign modules on all arches -%global signmodules 1 - -# Compress modules only for architectures that build modules -%ifarch noarch -%global zipmodules 0 -%else -%global zipmodules 1 -%endif - -%if %{zipmodules} -%global zipsed -e 's/\.ko$/\.ko.xz/' -# for parallel xz processes, replace with 1 to go back to single process -%endif - -%if 0%{?fedora} -%define primary_target fedora -%else -%define primary_target rhel -%endif - -# -# genspec.sh variables -# - -# Include Fedora files %global include_fedora 1 -# Include RHEL files %global include_rhel 1 -# Provide Patchlist.changelog file %global patchlist_changelog 1 -# Set released_kernel to 1 when the upstream source tarball contains a -# kernel release. (This includes prepatch or "rc" releases.) -# Set released_kernel to 0 when the upstream source tarball contains an -# unreleased kernel development snapshot. %global released_kernel 0 -# Set debugbuildsenabled to 1 to build separate base and debug kernels -# (on supported architectures). The kernel-debug-* subpackages will -# contain the debug kernel. -# Set debugbuildsenabled to 0 to not build a separate debug kernel, but -# to build the base kernel using the debug configuration. (Specifying -# the --with-release option overrides this setting.) -%define debugbuildsenabled 1 %define buildid .test %define specversion 5.16.0 %define patchversion 5.16 %define pkgrelease 6.test %define kversion 5 %define tarfile_release 5.16 -# This is needed to do merge window version magic %define patchlevel 16 -# allow pkg_release to have configurable %%{?dist} tag %define specrelease 6%{?buildid}%{?dist} - -# -# End of genspec.sh variables -# - -%define pkg_release %{specrelease} - -# libexec dir is not used by the linker, so the shared object there -# should not be exported to RPM provides -%global __provides_exclude_from ^%{_libexecdir}/kselftests - -# The following build options are enabled by default, but may become disabled -# by later architecture-specific checks. These can also be disabled by using -# --without <opt> in the rpmbuild command, or by forcing these values to 0. -# -# standard kernel -%define with_up %{?_without_up: 0} %{?!_without_up: 1} -# kernel PAE (only valid for ARM (lpae)) -%define with_pae %{?_without_pae: 0} %{?!_without_pae: 1} -# kernel-debug -%define with_debug %{?_without_debug: 0} %{?!_without_debug: 1} -# kernel-zfcpdump (s390 specific kernel for zfcpdump) -%define with_zfcpdump %{?_without_zfcpdump: 0} %{?!_without_zfcpdump: 1} -# kernel-doc -%define with_doc %{?_without_doc: 0} %{?!_without_doc: 1} -# kernel-headers -%define with_headers %{?_without_headers: 0} %{?!_without_headers: 1} -%define with_cross_headers %{?_without_cross_headers: 0} %{?!_without_cross_headers: 1} -# perf -%define with_perf %{?_without_perf: 0} %{?!_without_perf: 1} -# tools -%define with_tools %{?_without_tools: 0} %{?!_without_tools: 1} -# bpf tool -%define with_bpftool %{?_without_bpftool: 0} %{?!_without_bpftool: 1} -# kernel-debuginfo -%define with_debuginfo %{?_without_debuginfo: 0} %{?!_without_debuginfo: 1} -# kernel-abi-stablelists -%define with_kernel_abi_stablelists %{?_without_kernel_abi_stablelists: 0} %{?!_without_kernel_abi_stablelists: 1} -# internal samples and selftests -%define with_selftests %{?_without_selftests: 0} %{?!_without_selftests: 1} -# -# Additional options for user-friendly one-off kernel building: -# -# Only build the base kernel (--with baseonly): -%define with_baseonly %{?_with_baseonly: 1} %{?!_with_baseonly: 0} -# Only build the pae kernel (--with paeonly): -%define with_paeonly %{?_with_paeonly: 1} %{?!_with_paeonly: 0} -# Only build the debug kernel (--with dbgonly): -%define with_dbgonly %{?_with_dbgonly: 1} %{?!_with_dbgonly: 0} -# Control whether we perform a compat. check against published ABI. -%define with_kabichk %{?_without_kabichk: 0} %{?!_without_kabichk: 1} -# Temporarily disable kabi checks until RC. -%define with_kabichk 0 -# Control whether we perform a compat. check against DUP ABI. -%define with_kabidupchk %{?_with_kabidupchk: 1} %{?!_with_kabidupchk: 0} -# -# Control whether to run an extensive DWARF based kABI check. -# Note that this option needs to have baseline setup in SOURCE300. -%define with_kabidwchk %{?_without_kabidwchk: 0} %{?!_without_kabidwchk: 1} -%define with_kabidw_base %{?_with_kabidw_base: 1} %{?!_with_kabidw_base: 0} -# -# Control whether to install the vdso directories. -%define with_vdso_install %{?_without_vdso_install: 0} %{?!_without_vdso_install: 1} -# -# should we do C=1 builds with sparse -%define with_sparse %{?_with_sparse: 1} %{?!_with_sparse: 0} -# -# Cross compile requested? -%define with_cross %{?_with_cross: 1} %{?!_with_cross: 0} -# -# build a release kernel on rawhide -%define with_release %{?_with_release: 1} %{?!_with_release: 0} - -# verbose build, i.e. no silent rules and V=1 -%define with_verbose %{?_with_verbose: 1} %{?!_with_verbose: 0} - -# -# check for mismatched config options -%define with_configchecks %{?_without_configchecks: 0} %{?!_without_configchecks: 1} - -# -# gcov support -%define with_gcov %{?_with_gcov:1}%{?!_with_gcov:0} - -# -# ipa_clone support -%define with_ipaclones %{?_without_ipaclones: 0} %{?!_without_ipaclones: 1} - -# Want to build a vanilla kernel build without any non-upstream patches? -%define with_vanilla %{?_with_vanilla: 1} %{?!_with_vanilla: 0} - -%if 0%{?fedora} -# Kernel headers are being split out into a separate package -%define with_headers 0 -%define with_cross_headers 0 -# no ipa_clone for now -%define with_ipaclones 0 -# no stablelist -%define with_kernel_abi_stablelists 0 -# Fedora builds these separately -%define with_perf 0 -%define with_tools 0 -%define with_bpftool 0 -# selftests turns on bpftool -%define with_selftests 0 -%endif - -%if %{with_verbose} -%define make_opts V=1 -%else -%define make_opts -s -%endif - -%if %{with toolchain_clang} -%ifarch s390x ppc64le -%global llvm_ias 0 -%else -%global llvm_ias 1 -%endif -%global clang_make_opts HOSTCC=clang CC=clang LLVM_IAS=%{llvm_ias} -%if %{with clang_lto} -%global clang_make_opts %{clang_make_opts} LD=ld.lld HOSTLD=ld.lld AR=llvm-ar NM=llvm-nm HOSTAR=llvm-ar HOSTNM=llvm-nm -%endif -%global make_opts %{make_opts} %{clang_make_opts} -# clang does not support the -fdump-ipa-clones option -%global with_ipaclones 0 -%endif - -# turn off debug kernel and kabichk for gcov builds -%if %{with_gcov} -%define with_debug 0 -%define with_kabichk 0 -%define with_kabidupchk 0 -%define with_kabidwchk 0 -%define with_kabidw_base 0 -%define with_kernel_abi_stablelists 0 -%endif - -# turn off kABI DWARF-based check if we're generating the base dataset -%if %{with_kabidw_base} -%define with_kabidwchk 0 -%endif - -# kpatch_kcflags are extra compiler flags applied to base kernel -# -fdump-ipa-clones is enabled only for base kernels on selected arches -%if %{with_ipaclones} -%ifarch x86_64 ppc64le -%define kpatch_kcflags -fdump-ipa-clones -%else -%define with_ipaclones 0 -%endif -%endif - -%define make_target bzImage -%define image_install_path boot - -%define KVERREL %{version}-%{release}.%{_target_cpu} -%define KVERREL_RE %(echo %KVERREL | sed 's/+/[+]/g') -%define hdrarch %_target_cpu -%define asmarch %_target_cpu - -%if 0%{!?nopatches:1} -%define nopatches 0 -%endif - -%if %{with_vanilla} -%define nopatches 1 -%endif - -%if %{with_release} -%define debugbuildsenabled 1 -%endif - -%if !%{with_debuginfo} -%define _enable_debug_packages 0 -%endif -%define debuginfodir /usr/lib/debug -# Needed because we override almost everything involving build-ids -# and debuginfo generation. Currently we rely on the old alldebug setting. -%global _build_id_links alldebug - -# kernel PAE is only built on ARMv7 -%ifnarch armv7hl -%define with_pae 0 -%endif - -# if requested, only build base kernel -%if %{with_baseonly} -%define with_pae 0 -%define with_debug 0 -%define with_vdso_install 0 -%define with_perf 0 -%define with_tools 0 -%define with_bpftool 0 -%define with_kernel_abi_stablelists 0 -%define with_selftests 0 -%define with_cross 0 -%define with_cross_headers 0 -%define with_ipaclones 0 -%endif - -# if requested, only build pae kernel -%if %{with_paeonly} -%define with_up 0 -%define with_debug 0 -%endif - -# if requested, only build debug kernel -%if %{with_dbgonly} -%define with_up 0 -%define with_vdso_install 0 -%define with_perf 0 -%define with_tools 0 -%define with_bpftool 0 -%define with_kernel_abi_stablelists 0 -%define with_selftests 0 -%define with_cross 0 -%define with_cross_headers 0 -%define with_ipaclones 0 -%endif - -# turn off kABI DUP check and DWARF-based check if kABI check is disabled -%if !%{with_kabichk} -%define with_kabidupchk 0 -%define with_kabidwchk 0 -%endif - -%if %{with_vdso_install} -%define use_vdso 1 -%endif - -# selftests require bpftool to be built -%if %{with_selftests} -%define with_bpftool 1 -%endif - -%ifnarch noarch -%define with_kernel_abi_stablelists 0 -%endif - -# Overrides for generic default options - -# only package docs noarch -%ifnarch noarch -%define with_doc 0 -%define doc_build_fail true -%endif - -%if 0%{?fedora} -# don't do debug builds on anything but i686 and x86_64 -%ifnarch i686 x86_64 -%define with_debug 0 -%endif -%endif - -# don't build noarch kernels or headers (duh) -%ifarch noarch -%define with_up 0 -%define with_headers 0 -%define with_cross_headers 0 -%define with_tools 0 -%define with_perf 0 -%define with_bpftool 0 -%define with_selftests 0 -%define with_debug 0 -%define all_arch_configs kernel-%{version}-*.config -%endif - -# sparse blows up on ppc -%ifnarch ppc64le -%define with_sparse 0 -%endif - -# zfcpdump mechanism is s390 only -%ifnarch s390x -%define with_zfcpdump 0 -%endif - -%if 0%{?fedora} -# This is not for Fedora -%define with_zfcpdump 0 -%endif - -# Per-arch tweaks - -%ifarch i686 -%define asmarch x86 -%define hdrarch i386 -%define all_arch_configs kernel-%{version}-i?86*.config -%define kernel_image arch/x86/boot/bzImage -%endif - -%ifarch x86_64 -%define asmarch x86 -%define all_arch_configs kernel-%{version}-x86_64*.config -%define kernel_image arch/x86/boot/bzImage -%endif - -%ifarch ppc64le -%define asmarch powerpc -%define hdrarch powerpc -%define make_target vmlinux -%define kernel_image vmlinux -%define kernel_image_elf 1 -%define use_vdso 0 -%define all_arch_configs kernel-%{version}-ppc64le*.config -%endif - -%ifarch s390x -%define asmarch s390 -%define hdrarch s390 -%define all_arch_configs kernel-%{version}-s390x.config -%define kernel_image arch/s390/boot/bzImage -%define vmlinux_decompressor arch/s390/boot/compressed/vmlinux -%endif - -%ifarch %{arm} -%define all_arch_configs kernel-%{version}-arm*.config -%define skip_nonpae_vdso 1 -%define asmarch arm -%define hdrarch arm -%define make_target bzImage -%define kernel_image arch/arm/boot/zImage -# http://lists.infradead.org/pipermail/linux-arm-kernel/2012-March/091404.html -%define kernel_mflags KALLSYMS_EXTRA_PASS=1 -# we only build headers/perf/tools on the base arm arches -# just like we used to only build them on i386 for x86 -%ifnarch armv7hl -%define with_headers 0 -%define with_cross_headers 0 -%endif -# These currently don't compile on armv7 -%define with_selftests 0 -%endif - -%ifarch aarch64 -%define all_arch_configs kernel-%{version}-aarch64*.config -%define asmarch arm64 -%define hdrarch arm64 -%define make_target Image.gz -%define kernel_image arch/arm64/boot/Image.gz -%endif - -# Should make listnewconfig fail if there's config options -# printed out? -%if %{nopatches} -%define with_configchecks 0 -%endif - -# To temporarily exclude an architecture from being built, add it to -# %%nobuildarches. Do _NOT_ use the ExclusiveArch: line, because if we -# don't build kernel-headers then the new build system will no longer let -# us use the previous build of that package -- it'll just be completely AWOL. -# Which is a BadThing(tm). - -# We only build kernel-headers on the following... -%if 0%{?fedora} -%define nobuildarches i386 -%else -%define nobuildarches i386 i686 %{arm} -%endif - -%ifarch %nobuildarches -# disable BuildKernel commands -%define with_up 0 -%define with_debug 0 -%define with_pae 0 -%define with_zfcpdump 0 - -%define with_debuginfo 0 -%define with_perf 0 -%define with_tools 0 -%define with_bpftool 0 -%define with_selftests 0 -%define _enable_debug_packages 0 -%endif - -# Architectures we build tools/cpupower on -%if 0%{?fedora} -%define cpupowerarchs %{ix86} x86_64 ppc64le %{arm} aarch64 -%else -%define cpupowerarchs i686 x86_64 ppc64le aarch64 -%endif - -%if 0%{?use_vdso} - -%if 0%{?skip_nonpae_vdso} -%define _use_vdso 0 -%else -%define _use_vdso 1 -%endif - -%else -%define _use_vdso 0 -%endif - -# If build of debug packages is disabled, we need to know if we want to create -# meta debug packages or not, after we define with_debug for all specific cases -# above. So this must be at the end here, after all cases of with_debug or not. -%define with_debug_meta 0 -%if !%{debugbuildsenabled} -%if %{with_debug} -%define with_debug_meta 1 -%endif -%define with_debug 0 -%endif - - -# -# Packages that need to be installed before the kernel is, because the %%post -# scripts use them. -# -%define kernel_prereq coreutils, systemd >= 203-2, /usr/bin/kernel-install -%define initrd_prereq dracut >= 027 - - -Name: kernel -License: GPLv2 and Redistributable, no modification permitted -URL: https://www.kernel.org/ -Version: %{specversion} -Release: %{pkg_release} -# DO NOT CHANGE THE 'ExclusiveArch' LINE TO TEMPORARILY EXCLUDE AN ARCHITECTURE BUILD. -# SET %%nobuildarches (ABOVE) INSTEAD -%if 0%{?fedora} -ExclusiveArch: noarch x86_64 s390x %{arm} aarch64 ppc64le -%else -ExclusiveArch: noarch i386 i686 x86_64 s390x %{arm} aarch64 ppc64le -%endif -ExclusiveOS: Linux -%ifnarch %{nobuildarches} -Requires: kernel-core-uname-r = %{KVERREL} -Requires: kernel-modules-uname-r = %{KVERREL} -%endif - - -# -# List the packages used during the kernel build -# -BuildRequires: kmod, patch, bash, coreutils, tar, git-core, which -BuildRequires: bzip2, xz, findutils, gzip, m4, perl-interpreter, perl-Carp, perl-devel, perl-generators, make, diffutils, gawk -BuildRequires: gcc, binutils, redhat-rpm-config, hmaccalc, bison, flex, gcc-c++ -BuildRequires: net-tools, hostname, bc, elfutils-devel -BuildRequires: dwarves -BuildRequires: python3-devel -BuildRequires: gcc-plugin-devel -# glibc-static is required for a consistent build environment (specifically -# CONFIG_CC_CAN_LINK_STATIC=y). -BuildRequires: glibc-static -%ifnarch %{nobuildarches} noarch -BuildRequires: bpftool -%endif -%if %{with_headers} -BuildRequires: rsync -%endif -%if %{with_doc} -BuildRequires: xmlto, asciidoc, python3-sphinx, python3-sphinx_rtd_theme -%endif -%if %{with_sparse} -BuildRequires: sparse -%endif -%if %{with_perf} -BuildRequires: zlib-devel binutils-devel newt-devel perl(ExtUtils::Embed) bison flex xz-devel -BuildRequires: audit-libs-devel -BuildRequires: java-devel -BuildRequires: libbpf-devel -BuildRequires: libbabeltrace-devel -BuildRequires: libtraceevent-devel -%ifnarch %{arm} s390x -BuildRequires: numactl-devel -%endif -%ifarch aarch64 -BuildRequires: opencsd-devel >= 1.0.0 -%endif -%endif -%if %{with_tools} -BuildRequires: gettext ncurses-devel -BuildRequires: libcap-devel libcap-ng-devel -%ifnarch s390x -BuildRequires: pciutils-devel -%endif -%ifarch i686 x86_64 -BuildRequires: libnl3-devel -%endif -%endif -%if %{with_tools} || %{signmodules} || %{signkernel} -BuildRequires: openssl-devel -%endif -%if %{with_bpftool} -BuildRequires: python3-docutils -BuildRequires: zlib-devel binutils-devel -%endif -%if %{with_selftests} -BuildRequires: clang llvm -%ifnarch %{arm} -BuildRequires: numactl-devel -%endif -BuildRequires: libcap-devel libcap-ng-devel rsync libmnl-devel -%endif -BuildConflicts: rhbuildsys(DiskFree) < 500Mb -%if %{with_debuginfo} -BuildRequires: rpm-build, elfutils -BuildConflicts: rpm < 4.13.0.1-19 -BuildConflicts: dwarves < 1.13 -# Most of these should be enabled after more investigation -%undefine _include_minidebuginfo -%undefine _find_debuginfo_dwz_opts -%undefine _unique_build_ids -%undefine _unique_debug_names -%undefine _unique_debug_srcs -%undefine _debugsource_packages -%undefine _debuginfo_subpackages -%global _find_debuginfo_opts -r -%global _missing_build_ids_terminate_build 1 -%global _no_recompute_build_ids 1 -%endif -%if %{with_kabidwchk} || %{with_kabidw_base} -BuildRequires: kabi-dw -%endif - -%if %{signkernel}%{signmodules} -BuildRequires: openssl -%if %{signkernel} -# ELN uses Fedora signing process, so exclude -%if 0%{?rhel}%{?centos} && !0%{?eln} -BuildRequires: system-sb-certs -%endif -%ifarch x86_64 aarch64 -BuildRequires: nss-tools -BuildRequires: pesign >= 0.10-4 -%endif -%endif -%endif - -%if %{with_cross} -BuildRequires: binutils-%{_build_arch}-linux-gnu, gcc-%{_build_arch}-linux-gnu -%define cross_opts CROSS_COMPILE=%{_build_arch}-linux-gnu- -%define __strip %{_build_arch}-linux-gnu-strip -%endif - -# These below are required to build man pages -%if %{with_perf} -BuildRequires: xmlto -%endif -%if %{with_perf} || %{with_tools} -BuildRequires: asciidoc -%endif - -%if %{with toolchain_clang} -BuildRequires: clang -%endif - -%if %{with clang_lto} -BuildRequires: llvm -BuildRequires: lld -%endif - -# Because this is the kernel, it's hard to get a single upstream URL -# to represent the base without needing to do a bunch of patching. This -# tarball is generated from a src-git tree. If you want to see the -# exact git commit you can run -# -# xzcat -qq ${TARBALL} | git get-tar-commit-id -Source0: linux-%{tarfile_release}.tar.xz - -Source1: Makefile.rhelver - - -# Name of the packaged file containing signing key -%ifarch ppc64le -%define signing_key_filename kernel-signing-ppc.cer -%endif -%ifarch s390x -%define signing_key_filename kernel-signing-s390.cer -%endif - -%if %{?released_kernel} - -Source10: redhatsecurebootca5.cer -Source11: redhatsecurebootca1.cer -Source12: redhatsecureboot501.cer -Source13: redhatsecureboot301.cer -Source14: secureboot_s390.cer -Source15: secureboot_ppc.cer - -%define secureboot_ca_1 %{SOURCE10} -%define secureboot_ca_0 %{SOURCE11} -%ifarch x86_64 aarch64 -%define secureboot_key_1 %{SOURCE12} -%define pesign_name_1 redhatsecureboot501 -%define secureboot_key_0 %{SOURCE13} -%define pesign_name_0 redhatsecureboot301 -%endif -%ifarch s390x -%define secureboot_key_0 %{SOURCE14} -%define pesign_name_0 redhatsecureboot302 -%endif -%ifarch ppc64le -%define secureboot_key_0 %{SOURCE15} -%define pesign_name_0 redhatsecureboot303 -%endif - -# released_kernel -%else - -Source10: redhatsecurebootca4.cer -Source11: redhatsecurebootca2.cer -Source12: redhatsecureboot401.cer -Source13: redhatsecureboot003.cer - -%define secureboot_ca_1 %{SOURCE10} -%define secureboot_ca_0 %{SOURCE11} -%define secureboot_key_1 %{SOURCE12} -%define pesign_name_1 redhatsecureboot401 -%define secureboot_key_0 %{SOURCE13} -%define pesign_name_0 redhatsecureboot003 - -# released_kernel -%endif - -Source20: mod-denylist.sh -Source21: mod-sign.sh -Source22: parallel_xz.sh - -%define modsign_cmd %{SOURCE21} - -%if 0%{?include_rhel} -Source23: x509.genkey.rhel - -Source24: kernel-aarch64-rhel.config -Source25: kernel-aarch64-debug-rhel.config -Source26: mod-extra.list.rhel - -Source27: kernel-ppc64le-rhel.config -Source28: kernel-ppc64le-debug-rhel.config -Source29: kernel-s390x-rhel.config -Source30: kernel-s390x-debug-rhel.config -Source31: kernel-s390x-zfcpdump-rhel.config -Source32: kernel-x86_64-rhel.config -Source33: kernel-x86_64-debug-rhel.config - -Source34: filter-x86_64.sh.rhel -Source35: filter-armv7hl.sh.rhel -Source37: filter-aarch64.sh.rhel -Source38: filter-ppc64le.sh.rhel -Source39: filter-s390x.sh.rhel -Source40: filter-modules.sh.rhel - -Source41: x509.genkey.centos -%endif - -%if 0%{?include_fedora} -Source50: x509.genkey.fedora -Source51: mod-extra.list.fedora - -Source52: kernel-aarch64-fedora.config -Source53: kernel-aarch64-debug-fedora.config -Source54: kernel-armv7hl-fedora.config -Source55: kernel-armv7hl-debug-fedora.config -Source56: kernel-armv7hl-lpae-fedora.config -Source57: kernel-armv7hl-lpae-debug-fedora.config -Source60: kernel-ppc64le-fedora.config -Source61: kernel-ppc64le-debug-fedora.config -Source62: kernel-s390x-fedora.config -Source63: kernel-s390x-debug-fedora.config -Source64: kernel-x86_64-fedora.config -Source65: kernel-x86_64-debug-fedora.config - -Source67: filter-x86_64.sh.fedora -Source68: filter-armv7hl.sh.fedora -Source70: filter-aarch64.sh.fedora -Source71: filter-ppc64le.sh.fedora -Source72: filter-s390x.sh.fedora -Source73: filter-modules.sh.fedora -%endif - -Source75: partial-kgcov-snip.config -Source80: generate_all_configs.sh -Source81: process_configs.sh - -Source82: update_scripts.sh - -Source84: mod-internal.list - -Source100: rheldup3.x509 -Source101: rhelkpatch1.x509 - -Source200: check-kabi - -Source201: Module.kabi_aarch64 -Source202: Module.kabi_ppc64le -Source203: Module.kabi_s390x -Source204: Module.kabi_x86_64 - -Source210: Module.kabi_dup_aarch64 -Source211: Module.kabi_dup_ppc64le -Source212: Module.kabi_dup_s390x -Source213: Module.kabi_dup_x86_64 - -Source300: kernel-abi-stablelists-%{specversion}-%{pkgrelease}.tar.bz2 -Source301: kernel-kabi-dw-%{specversion}-%{pkgrelease}.tar.bz2 - -# Sources for kernel-tools -Source2000: cpupower.service -Source2001: cpupower.config -Source2002: kvm_stat.logrotate - -# Some people enjoy building customized kernels from the dist-git in Fedora and -# use this to override configuration options. One day they may all use the -# source tree, but in the mean time we carry this to support the legacy workflow -Source3000: merge.pl -Source3001: kernel-local -%if %{patchlist_changelog} -Source3002: Patchlist.changelog -%endif - -Source4000: README.rst -Source4001: rpminspect.yaml -Source4002: gating.yaml - -## Patches needed for building this package - -%if !%{nopatches} - -Patch1: patch-%{patchversion}-redhat.patch -%endif - -# empty final patch to facilitate testing of kernel patches -Patch999999: linux-kernel-test.patch - -# END OF PATCH DEFINITIONS - -%description -The kernel meta package - -# -# This macro does requires, provides, conflicts, obsoletes for a kernel package. -# %%kernel_reqprovconf <subpackage> -# It uses any kernel_<subpackage>_conflicts and kernel_<subpackage>_obsoletes -# macros defined above. -# -%define kernel_reqprovconf \ -Provides: kernel = %{specversion}-%{pkg_release}\ -Provides: kernel-%{_target_cpu} = %{specversion}-%{pkg_release}%{?1:+%{1}}\ -Provides: kernel-drm-nouveau = 16\ -Provides: kernel-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires(pre): %{kernel_prereq}\ -Requires(pre): %{initrd_prereq}\ -Requires(pre): ((linux-firmware >= 20150904-56.git6ebf5d57) if linux-firmware)\ -Recommends: linux-firmware\ -Requires(preun): systemd >= 200\ -Conflicts: xfsprogs < 4.3.0-1\ -Conflicts: xorg-x11-drv-vmmouse < 13.0.99\ -%{expand:%%{?kernel%{?1:_%{1}}_conflicts:Conflicts: %%{kernel%{?1:_%{1}}_conflicts}}}\ -%{expand:%%{?kernel%{?1:_%{1}}_obsoletes:Obsoletes: %%{kernel%{?1:_%{1}}_obsoletes}}}\ -%{expand:%%{?kernel%{?1:_%{1}}_provides:Provides: %%{kernel%{?1:_%{1}}_provides}}}\ -# We can't let RPM do the dependencies automatic because it'll then pick up\ -# a correct but undesirable perl dependency from the module headers which\ -# isn't required for the kernel proper to function\ -AutoReq: no\ -AutoProv: yes\ -%{nil} - - -%package doc -Summary: Various documentation bits found in the kernel source -Group: Documentation -%description doc -This package contains documentation files from the kernel -source. Various bits of information about the Linux kernel and the -device drivers shipped with it are documented in these files. - -You'll want to install this package if you need a reference to the -options that can be passed to Linux kernel modules at load time. - - -%package headers -Summary: Header files for the Linux kernel for use by glibc -Obsoletes: glibc-kernheaders < 3.0-46 -Provides: glibc-kernheaders = 3.0-46 -%description headers -Kernel-headers includes the C header files that specify the interface -between the Linux kernel and userspace libraries and programs. The -header files define structures and constants that are needed for -building most standard programs and are also needed for rebuilding the -glibc package. - -%package cross-headers -Summary: Header files for the Linux kernel for use by cross-glibc -%description cross-headers -Kernel-cross-headers includes the C header files that specify the interface -between the Linux kernel and userspace libraries and programs. The -header files define structures and constants that are needed for -building most standard programs and are also needed for rebuilding the -cross-glibc package. - - -%package debuginfo-common-%{_target_cpu} -Summary: Kernel source files used by %{name}-debuginfo packages -Provides: installonlypkg(kernel) -%description debuginfo-common-%{_target_cpu} -This package is required by %{name}-debuginfo subpackages. -It provides the kernel source files common to all builds. - -%if %{with_perf} -%package -n perf -Summary: Performance monitoring for the Linux kernel -Requires: bzip2 -License: GPLv2 -%description -n perf -This package contains the perf tool, which enables performance monitoring -of the Linux kernel. - -%package -n perf-debuginfo -Summary: Debug information for package perf -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release} -AutoReqProv: no -%description -n perf-debuginfo -This package provides debug information for the perf package. - -# Note that this pattern only works right to match the .build-id -# symlinks because of the trailing nonmatching alternation and -# the leading .*, because of find-debuginfo.sh's buggy handling -# of matching the pattern against the symlinks file. -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{_bindir}/perf(\.debug)?|.*%%{_libexecdir}/perf-core/.*|.*%%{_libdir}/libperf-jvmti.so(\.debug)?|XXX' -o perf-debuginfo.list} - -%package -n python3-perf -Summary: Python bindings for apps which will manipulate perf events -%description -n python3-perf -The python3-perf package contains a module that permits applications -written in the Python programming language to use the interface -to manipulate perf events. - -%package -n python3-perf-debuginfo -Summary: Debug information for package perf python bindings -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release} -AutoReqProv: no -%description -n python3-perf-debuginfo -This package provides debug information for the perf python bindings. - -# the python_sitearch macro should already be defined from above -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{python3_sitearch}/perf.*so(\.debug)?|XXX' -o python3-perf-debuginfo.list} - -# with_perf -%endif - -%if %{with_tools} -%package -n kernel-tools -Summary: Assortment of tools for the Linux kernel -License: GPLv2 -%ifarch %{cpupowerarchs} -Provides: cpupowerutils = 1:009-0.6.p1 -Obsoletes: cpupowerutils < 1:009-0.6.p1 -Provides: cpufreq-utils = 1:009-0.6.p1 -Provides: cpufrequtils = 1:009-0.6.p1 -Obsoletes: cpufreq-utils < 1:009-0.6.p1 -Obsoletes: cpufrequtils < 1:009-0.6.p1 -Obsoletes: cpuspeed < 1:1.5-16 -Requires: kernel-tools-libs = %{version}-%{release} -%endif -%define __requires_exclude ^%{_bindir}/python -%description -n kernel-tools -This package contains the tools/ directory from the kernel source -and the supporting documentation. - -%package -n kernel-tools-libs -Summary: Libraries for the kernels-tools -License: GPLv2 -%description -n kernel-tools-libs -This package contains the libraries built from the tools/ directory -from the kernel source. - -%package -n kernel-tools-libs-devel -Summary: Assortment of tools for the Linux kernel -License: GPLv2 -Requires: kernel-tools = %{version}-%{release} -%ifarch %{cpupowerarchs} -Provides: cpupowerutils-devel = 1:009-0.6.p1 -Obsoletes: cpupowerutils-devel < 1:009-0.6.p1 -%endif -Requires: kernel-tools-libs = %{version}-%{release} -Provides: kernel-tools-devel -%description -n kernel-tools-libs-devel -This package contains the development files for the tools/ directory from -the kernel source. - -%package -n kernel-tools-debuginfo -Summary: Debug information for package kernel-tools -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release} -AutoReqProv: no -%description -n kernel-tools-debuginfo -This package provides debug information for package kernel-tools. - -# Note that this pattern only works right to match the .build-id -# symlinks because of the trailing nonmatching alternation and -# the leading .*, because of find-debuginfo.sh's buggy handling -# of matching the pattern against the symlinks file. -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{_bindir}/centrino-decode(\.debug)?|.*%%{_bindir}/powernow-k8-decode(\.debug)?|.*%%{_bindir}/cpupower(\.debug)?|.*%%{_libdir}/libcpupower.*|.*%%{_bindir}/turbostat(\.debug)?|.*%%{_bindir}/x86_energy_perf_policy(\.debug)?|.*%%{_bindir}/tmon(\.debug)?|.*%%{_bindir}/lsgpio(\.debug)?|.*%%{_bindir}/gpio-hammer(\.debug)?|.*%%{_bindir}/gpio-event-mon(\.debug)?|.*%%{_bindir}/gpio-watch(\.debug)?|.*%%{_bindir}/iio_event_monitor(\.debug)?|.*%%{_bindir}/iio_generic_buffer(\.debug)?|.*%%{_bindir}/lsiio(\.debug)?|.*%%{_bindir}/intel-speed-select(\.debug)?|.*%%{_bindir}/page_owner_sort(\.debug)?|.*%%{_bindir}/slabinfo(\.debug)?|.*%%{_sbindir}/intel_sdsi(\.debug)?|XXX' -o kernel-tools-debuginfo.list} - -# with_tools -%endif - -%if %{with_bpftool} - -%package -n bpftool -Summary: Inspection and simple manipulation of eBPF programs and maps -License: GPLv2 -%description -n bpftool -This package contains the bpftool, which allows inspection and simple -manipulation of eBPF programs and maps. - -%package -n bpftool-debuginfo -Summary: Debug information for package bpftool -Group: Development/Debug -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release} -AutoReqProv: no -%description -n bpftool-debuginfo -This package provides debug information for the bpftool package. - -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{_sbindir}/bpftool(\.debug)?|XXX' -o bpftool-debuginfo.list} - -# with_bpftool -%endif - -%if %{with_selftests} - -%package selftests-internal -Summary: Kernel samples and selftests -License: GPLv2 -Requires: binutils, bpftool, iproute-tc, nmap-ncat, python3 -%description selftests-internal -Kernel sample programs and selftests. - -# Note that this pattern only works right to match the .build-id -# symlinks because of the trailing nonmatching alternation and -# the leading .*, because of find-debuginfo.sh's buggy handling -# of matching the pattern against the symlinks file. -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{_libexecdir}/(ksamples|kselftests)/.*|XXX' -o selftests-debuginfo.list} - -# with_selftests -%endif - -%if %{with_gcov} -%package gcov -Summary: gcov graph and source files for coverage data collection. -%description gcov -kernel-gcov includes the gcov graph and source files for gcov coverage collection. -%endif - -%package -n kernel-abi-stablelists -Summary: The Red Hat Enterprise Linux kernel ABI symbol stablelists -AutoReqProv: no -%description -n kernel-abi-stablelists -The kABI package contains information pertaining to the Red Hat Enterprise -Linux kernel ABI, including lists of kernel symbols that are needed by -external Linux kernel modules, and a yum plugin to aid enforcement. - -%if %{with_kabidw_base} -%package kernel-kabidw-base-internal -Summary: The baseline dataset for kABI verification using DWARF data -Group: System Environment/Kernel -AutoReqProv: no -%description kernel-kabidw-base-internal -The package contains data describing the current ABI of the Red Hat Enterprise -Linux kernel, suitable for the kabi-dw tool. -%endif - -# -# This macro creates a kernel-<subpackage>-debuginfo package. -# %%kernel_debuginfo_package <subpackage> -# -# Explanation of the find_debuginfo_opts: We build multiple kernels (debug -# pae etc.) so the regex filters those kernels appropriately. We also -# have to package several binaries as part of kernel-devel but getting -# unique build-ids is tricky for these userspace binaries. We don't really -# care about debugging those so we just filter those out and remove it. -%define kernel_debuginfo_package() \ -%package %{?1:%{1}-}debuginfo\ -Summary: Debug information for package %{name}%{?1:-%{1}}\ -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release}\ -Provides: %{name}%{?1:-%{1}}-debuginfo-%{_target_cpu} = %{version}-%{release}\ -Provides: installonlypkg(kernel)\ -AutoReqProv: no\ -%description %{?1:%{1}-}debuginfo\ -This package provides debug information for package %{name}%{?1:-%{1}}.\ -This is required to use SystemTap with %{name}%{?1:-%{1}}-%{KVERREL}.\ -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} --keep-section '.BTF' -p '.*\/usr\/src\/kernels/.*|XXX' -o ignored-debuginfo.list -p '/.*/%%{KVERREL_RE}%{?1:[+]%{1}}/.*|/.*%%{KVERREL_RE}%{?1:\+%{1}}(\.debug)?' -o debuginfo%{?1}.list}\ -%{nil} - -# -# This macro creates a kernel-<subpackage>-devel package. -# %%kernel_devel_package [-m] <subpackage> <pretty-name> -# -%define kernel_devel_package(m) \ -%package %{?1:%{1}-}devel\ -Summary: Development package for building kernel modules to match the %{?2:%{2} }kernel\ -Provides: kernel%{?1:-%{1}}-devel-%{_target_cpu} = %{version}-%{release}\ -Provides: kernel-devel-%{_target_cpu} = %{version}-%{release}%{?1:+%{1}}\ -Provides: kernel-devel-uname-r = %{KVERREL}%{?1:+%{1}}\ -Provides: installonlypkg(kernel)\ -AutoReqProv: no\ -Requires(pre): findutils\ -Requires: findutils\ -Requires: perl-interpreter\ -Requires: openssl-devel\ -Requires: elfutils-libelf-devel\ -Requires: bison\ -Requires: flex\ -Requires: make\ -Requires: gcc\ -%if %{-m:1}%{!-m:0}\ -Requires: kernel-devel-uname-r = %{KVERREL}\ -%endif\ -%description %{?1:%{1}-}devel\ -This package provides kernel headers and makefiles sufficient to build modules\ -against the %{?2:%{2} }kernel package.\ -%{nil} - -# -# This macro creates an empty kernel-<subpackage>-devel-matched package that -# requires both the core and devel packages locked on the same version. -# %%kernel_devel_matched_package [-m] <subpackage> <pretty-name> -# -%define kernel_devel_matched_package(m) \ -%package %{?1:%{1}-}devel-matched\ -Summary: Meta package to install matching core and devel packages for a given %{?2:%{2} }kernel\ -Requires: kernel%{?1:-%{1}}-devel = %{version}-%{release}\ -Requires: kernel%{?1:-%{1}}-core = %{version}-%{release}\ -%description %{?1:%{1}-}devel-matched\ -This meta package is used to install matching core and devel packages for a given %{?2:%{2} }kernel.\ -%{nil} - -# -# kernel-<variant>-ipaclones-internal package -# -%define kernel_ipaclones_package() \ -%package %{?1:%{1}-}ipaclones-internal\ -Summary: *.ipa-clones files generated by -fdump-ipa-clones for kernel%{?1:-%{1}}\ -Group: System Environment/Kernel\ -AutoReqProv: no\ -%description %{?1:%{1}-}ipaclones-internal\ -This package provides *.ipa-clones files.\ -%{nil} - -# -# This macro creates a kernel-<subpackage>-modules-internal package. -# %%kernel_modules_internal_package <subpackage> <pretty-name> -# -%define kernel_modules_internal_package() \ -%package %{?1:%{1}-}modules-internal\ -Summary: Extra kernel modules to match the %{?2:%{2} }kernel\ -Group: System Environment/Kernel\ -Provides: kernel%{?1:-%{1}}-modules-internal-%{_target_cpu} = %{version}-%{release}\ -Provides: kernel%{?1:-%{1}}-modules-internal-%{_target_cpu} = %{version}-%{release}%{?1:+%{1}}\ -Provides: kernel%{?1:-%{1}}-modules-internal = %{version}-%{release}%{?1:+%{1}}\ -Provides: installonlypkg(kernel-module)\ -Provides: kernel%{?1:-%{1}}-modules-internal-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel%{?1:-%{1}}-modules-uname-r = %{KVERREL}%{?1:+%{1}}\ -AutoReq: no\ -AutoProv: yes\ -%description %{?1:%{1}-}modules-internal\ -This package provides kernel modules for the %{?2:%{2} }kernel package for Red Hat internal usage.\ -%{nil} - -# -# This macro creates a kernel-<subpackage>-modules-extra package. -# %%kernel_modules_extra_package [-m] <subpackage> <pretty-name> -# -%define kernel_modules_extra_package(m) \ -%package %{?1:%{1}-}modules-extra\ -Summary: Extra kernel modules to match the %{?2:%{2} }kernel\ -Provides: kernel%{?1:-%{1}}-modules-extra-%{_target_cpu} = %{version}-%{release}\ -Provides: kernel%{?1:-%{1}}-modules-extra-%{_target_cpu} = %{version}-%{release}%{?1:+%{1}}\ -Provides: kernel%{?1:-%{1}}-modules-extra = %{version}-%{release}%{?1:+%{1}}\ -Provides: installonlypkg(kernel-module)\ -Provides: kernel%{?1:-%{1}}-modules-extra-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel%{?1:-%{1}}-modules-uname-r = %{KVERREL}%{?1:+%{1}}\ -%if %{-m:1}%{!-m:0}\ -Requires: kernel-modules-extra-uname-r = %{KVERREL}\ -%endif\ -AutoReq: no\ -AutoProv: yes\ -%description %{?1:%{1}-}modules-extra\ -This package provides less commonly used kernel modules for the %{?2:%{2} }kernel package.\ -%{nil} - -# -# This macro creates a kernel-<subpackage>-modules package. -# %%kernel_modules_package [-m] <subpackage> <pretty-name> -# -%define kernel_modules_package(m) \ -%package %{?1:%{1}-}modules\ -Summary: kernel modules to match the %{?2:%{2}-}core kernel\ -Provides: kernel%{?1:-%{1}}-modules-%{_target_cpu} = %{version}-%{release}\ -Provides: kernel-modules-%{_target_cpu} = %{version}-%{release}%{?1:+%{1}}\ -Provides: kernel-modules = %{version}-%{release}%{?1:+%{1}}\ -Provides: installonlypkg(kernel-module)\ -Provides: kernel%{?1:-%{1}}-modules-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel-uname-r = %{KVERREL}%{?1:+%{1}}\ -%if %{-m:1}%{!-m:0}\ -Requires: kernel-modules-uname-r = %{KVERREL}\ -%endif\ -AutoReq: no\ -AutoProv: yes\ -%description %{?1:%{1}-}modules\ -This package provides commonly used kernel modules for the %{?2:%{2}-}core kernel package.\ -%{nil} - -# -# this macro creates a kernel-<subpackage> meta package. -# %%kernel_meta_package <subpackage> -# -%define kernel_meta_package() \ -%package %{1}\ -summary: kernel meta-package for the %{1} kernel\ -Requires: kernel-%{1}-core-uname-r = %{KVERREL}+%{1}\ -Requires: kernel-%{1}-modules-uname-r = %{KVERREL}+%{1}\ -Provides: installonlypkg(kernel)\ -%description %{1}\ -The meta-package for the %{1} kernel\ -%{nil} - -# -# This macro creates a kernel-<subpackage> and its -devel and -debuginfo too. -# %%define variant_summary The Linux kernel compiled for <configuration> -# %%kernel_variant_package [-n <pretty-name>] [-m] <subpackage> -# -%define kernel_variant_package(n:m) \ -%package %{?1:%{1}-}core\ -Summary: %{variant_summary}\ -Provides: kernel-%{?1:%{1}-}core-uname-r = %{KVERREL}%{?1:+%{1}}\ -Provides: installonlypkg(kernel)\ -%if %{-m:1}%{!-m:0}\ -Requires: kernel-core-uname-r = %{KVERREL}\ -%endif\ -%{expand:%%kernel_reqprovconf}\ -%if %{?1:1} %{!?1:0} \ -%{expand:%%kernel_meta_package %{?1:%{1}}}\ -%endif\ -%{expand:%%kernel_devel_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}} %{-m:%{-m}}}\ -%{expand:%%kernel_devel_matched_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}} %{-m:%{-m}}}\ -%{expand:%%kernel_modules_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}} %{-m:%{-m}}}\ -%{expand:%%kernel_modules_extra_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}} %{-m:%{-m}}}\ -%if %{-m:0}%{!-m:1}\ -%{expand:%%kernel_modules_internal_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}}}\ -%{expand:%%kernel_debuginfo_package %{?1:%{1}}}\ -%endif\ -%{nil} - -# Now, each variant package. - -%if %{with_pae} -%define variant_summary The Linux kernel compiled for Cortex-A15 -%kernel_variant_package lpae -%description lpae-core -This package includes a version of the Linux kernel with support for -Cortex-A15 devices with LPAE and HW virtualisation support -%endif - -%if %{with_zfcpdump} -%define variant_summary The Linux kernel compiled for zfcpdump usage -%kernel_variant_package zfcpdump -%description zfcpdump-core -The kernel package contains the Linux kernel (vmlinuz) for use by the -zfcpdump infrastructure. -# with_zfcpdump -%endif - -%define variant_summary The Linux kernel compiled with extra debugging enabled -%if !%{debugbuildsenabled} -%kernel_variant_package -m debug -%else -%kernel_variant_package debug -%endif -%description debug-core -The kernel package contains the Linux kernel (vmlinuz), the core of any -Linux operating system. The kernel handles the basic functions -of the operating system: memory allocation, process allocation, device -input and output, etc. - -This variant of the kernel has numerous debugging options enabled. -It should only be installed when trying to gather additional information -on kernel bugs, as some of these options impact performance noticably. - -# And finally the main -core package - -%define variant_summary The Linux kernel -%kernel_variant_package -%description core -The kernel package contains the Linux kernel (vmlinuz), the core of any -Linux operating system. The kernel handles the basic functions -of the operating system: memory allocation, process allocation, device -input and output, etc. - -%if %{with_ipaclones} -%kernel_ipaclones_package -%endif - -%prep -# do a few sanity-checks for --with *only builds -%if %{with_baseonly} -%if !%{with_up} -echo "Cannot build --with baseonly, up build is disabled" -exit 1 -%endif -%endif - -# more sanity checking; do it quietly -if [ "%{patches}" != "%%{patches}" ] ; then - for patch in %{patches} ; do - if [ ! -f $patch ] ; then - echo "ERROR: Patch ${patch##/*/} listed in specfile but is missing" - exit 1 - fi - done -fi 2>/dev/null - -patch_command='patch -p1 -F1 -s' -ApplyPatch() -{ - local patch=$1 - shift - if [ ! -f $RPM_SOURCE_DIR/$patch ]; then - exit 1 - fi - if ! grep -E "^Patch[0-9]+: $patch\$" %{_specdir}/${RPM_PACKAGE_NAME}.spec ; then - if [ "${patch:0:8}" != "patch-%{kversion}." ] ; then - echo "ERROR: Patch $patch not listed as a source patch in specfile" - exit 1 - fi - fi 2>/dev/null - case "$patch" in - *.bz2) bunzip2 < "$RPM_SOURCE_DIR/$patch" | $patch_command ${1+"$@"} ;; - *.gz) gunzip < "$RPM_SOURCE_DIR/$patch" | $patch_command ${1+"$@"} ;; - *.xz) unxz < "$RPM_SOURCE_DIR/$patch" | $patch_command ${1+"$@"} ;; - *) $patch_command ${1+"$@"} < "$RPM_SOURCE_DIR/$patch" ;; - esac -} - -# don't apply patch if it's empty -ApplyOptionalPatch() -{ - local patch=$1 - shift - if [ ! -f $RPM_SOURCE_DIR/$patch ]; then - exit 1 - fi - local C=$(wc -l $RPM_SOURCE_DIR/$patch | awk '{print $1}') - if [ "$C" -gt 9 ]; then - ApplyPatch $patch ${1+"$@"} - fi -} - -%setup -q -n kernel-%{tarfile_release} -c -mv linux-%{tarfile_release} linux-%{KVERREL} - -cd linux-%{KVERREL} -cp -a %{SOURCE1} . - -%if !%{nopatches} - -ApplyOptionalPatch patch-%{patchversion}-redhat.patch -%endif - -ApplyOptionalPatch linux-kernel-test.patch - -# END OF PATCH APPLICATIONS - -# Any further pre-build tree manipulations happen here. - -chmod +x scripts/checkpatch.pl -mv COPYING COPYING-%{version}-%{release} - -# This Prevents scripts/setlocalversion from mucking with our version numbers. -touch .scmversion - -# Mangle /usr/bin/python shebangs to /usr/bin/python3 -# Mangle all Python shebangs to be Python 3 explicitly -# -p preserves timestamps -# -n prevents creating ~backup files -# -i specifies the interpreter for the shebang -# This fixes errors such as -# *** ERROR: ambiguous python shebang in /usr/bin/kvm_stat: #!/usr/bin/python. Change it to python3 (or python2) explicitly. -# We patch all sources below for which we got a report/error. -pathfix.py -i "%{__python3} %{py3_shbang_opts}" -p -n \ - tools/kvm/kvm_stat/kvm_stat \ - scripts/show_delta \ - scripts/diffconfig \ - scripts/bloat-o-meter \ - scripts/jobserver-exec \ - tools \ - Documentation \ - scripts/clang-tools - -# only deal with configs if we are going to build for the arch -%ifnarch %nobuildarches - -if [ -L configs ]; then - rm -f configs -fi -mkdir configs -cd configs - -# Drop some necessary files from the source dir into the buildroot -cp $RPM_SOURCE_DIR/kernel-*.config . -cp %{SOURCE80} . -# merge.pl -cp %{SOURCE3000} . -# kernel-local -cp %{SOURCE3001} . -FLAVOR=%{primary_target} SPECVERSION=%{version} ./generate_all_configs.sh %{debugbuildsenabled} - -# Merge in any user-provided local config option changes -%ifnarch %nobuildarches -for i in %{all_arch_configs} -do - mv $i $i.tmp - ./merge.pl %{SOURCE3001} $i.tmp > $i -%if %{with_gcov} - echo "Merging with gcov options" - cat %{SOURCE75} - mv $i $i.tmp - ./merge.pl %{SOURCE75} $i.tmp > $i -%endif - rm $i.tmp -done -%endif - -%if %{with clang_lto} -for i in *aarch64*.config *x86_64*.config; do - sed -i 's/# CONFIG_LTO_CLANG_THIN is not set/CONFIG_LTO_CLANG_THIN=y/' $i - sed -i 's/CONFIG_LTO_NONE=y/# CONFIG_LTO_NONE is not set/' $i -done -%endif - -# Add DUP and kpatch certificates to system trusted keys for RHEL -%if 0%{?rhel} -%if %{signkernel}%{signmodules} -openssl x509 -inform der -in %{SOURCE100} -out rheldup3.pem -openssl x509 -inform der -in %{SOURCE101} -out rhelkpatch1.pem -cat rheldup3.pem rhelkpatch1.pem > ../certs/rhel.pem -%ifarch s390x ppc64le -openssl x509 -inform der -in %{secureboot_ca_0} -out secureboot.pem -cat secureboot.pem >> ../certs/rhel.pem -%endif -for i in *.config; do - sed -i 's@CONFIG_SYSTEM_TRUSTED_KEYS=""@CONFIG_SYSTEM_TRUSTED_KEYS="certs/rhel.pem"@' $i -done -%endif -%endif - -cp %{SOURCE81} . -OPTS="" -%if %{with_configchecks} - OPTS="$OPTS -w -n -c" -%endif -%if %{with clang_lto} -for opt in %{clang_make_opts}; do - OPTS="$OPTS -m $opt" -done -%endif -RHJOBS=$RPM_BUILD_NCPUS PACKAGE_NAME=kernel ./process_configs.sh $OPTS ${specversion} - -cp %{SOURCE82} . -RPM_SOURCE_DIR=$RPM_SOURCE_DIR ./update_scripts.sh %{primary_target} - -# We may want to override files from the primary target in case of building -# against a flavour of it (eg. centos not rhel), thus override it here if -# necessary -if [ "%{primary_target}" == "rhel" ]; then -%if 0%{?centos} - echo "Updating scripts/sources to centos version" - RPM_SOURCE_DIR=$RPM_SOURCE_DIR ./update_scripts.sh centos -%else - echo "Not updating scripts/sources to centos version" -%endif -fi - -# end of kernel config -%endif - -cd .. -# # End of Configs stuff - -# get rid of unwanted files resulting from patch fuzz -find . \( -name "*.orig" -o -name "*~" \) -delete >/dev/null - -# remove unnecessary SCM files -find . -name .gitignore -delete >/dev/null - -cd .. - -### -### build -### -%build - -%if %{with_sparse} -%define sparse_mflags C=1 -%endif - -cp_vmlinux() -{ - eu-strip --remove-comment -o "$2" "$1" -} - -# Note we need to disable these flags for cross builds because the flags -# from redhat-rpm-config assume that host == target so target arch -# flags cause issues with the host compiler. -%if !%{with_cross} -%define build_hostcflags %{?build_cflags} -%define build_hostldflags %{?build_ldflags} -%endif - -%define make %{__make} %{?cross_opts} %{?make_opts} HOSTCFLAGS="%{?build_hostcflags}" HOSTLDFLAGS="%{?build_hostldflags}" - -InitBuildVars() { - # Initialize the kernel .config file and create some variables that are - # needed for the actual build process. - - Variant=$1 - - # Pick the right kernel config file - Config=kernel-%{version}-%{_target_cpu}${Variant:+-${Variant}}.config - DevelDir=/usr/src/kernels/%{KVERREL}${Variant:++${Variant}} - - KernelVer=%{version}-%{release}.%{_target_cpu}${Variant:++${Variant}} - - # make sure EXTRAVERSION says what we want it to say - # Trim the release if this is a CI build, since KERNELVERSION is limited to 64 characters - ShortRel=$(perl -e "print \"%{release}\" =~ s/\.pr\.[0-9A-Fa-f]{32}//r") - perl -p -i -e "s/^EXTRAVERSION.*/EXTRAVERSION = -${ShortRel}.%{_target_cpu}${Variant:++${Variant}}/" Makefile - - # if pre-rc1 devel kernel, must fix up PATCHLEVEL for our versioning scheme - # if we are post rc1 this should match anyway so this won't matter - perl -p -i -e 's/^PATCHLEVEL.*/PATCHLEVEL = %{patchlevel}/' Makefile - - %{make} %{?_smp_mflags} mrproper - cp configs/$Config .config - - %if %{signkernel}%{signmodules} - cp configs/x509.genkey certs/. - %endif - - Arch=`head -1 .config | cut -b 3-` - echo USING ARCH=$Arch - - KCFLAGS="%{?kcflags}" - - # add kpatch flags for base kernel - if [ "$Variant" == "" ]; then - KCFLAGS="$KCFLAGS %{?kpatch_kcflags}" - fi -} - -BuildKernel() { - MakeTarget=$1 - KernelImage=$2 - DoVDSO=$3 - Variant=$4 - InstallName=${5:-vmlinuz} - - DoModules=1 - if [ "$Variant" = "zfcpdump" ]; then - DoModules=0 - fi - - # When the bootable image is just the ELF kernel, strip it. - # We already copy the unstripped file into the debuginfo package. - if [ "$KernelImage" = vmlinux ]; then - CopyKernel=cp_vmlinux - else - CopyKernel=cp - fi - - InitBuildVars $Variant - - echo BUILDING A KERNEL FOR ${Variant} %{_target_cpu}... - - %{make} ARCH=$Arch olddefconfig >/dev/null - - # This ensures build-ids are unique to allow parallel debuginfo - perl -p -i -e "s/^CONFIG_BUILD_SALT.*/CONFIG_BUILD_SALT=\"%{KVERREL}\"/" .config - %{make} ARCH=$Arch KCFLAGS="$KCFLAGS" WITH_GCOV="%{?with_gcov}" %{?_smp_mflags} $MakeTarget %{?sparse_mflags} %{?kernel_mflags} - if [ $DoModules -eq 1 ]; then - %{make} ARCH=$Arch KCFLAGS="$KCFLAGS" WITH_GCOV="%{?with_gcov}" %{?_smp_mflags} modules %{?sparse_mflags} || exit 1 - fi - - mkdir -p $RPM_BUILD_ROOT/%{image_install_path} - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/systemtap -%if %{with_debuginfo} - mkdir -p $RPM_BUILD_ROOT%{debuginfodir}/%{image_install_path} -%endif - -%ifarch %{arm} aarch64 - %{make} ARCH=$Arch dtbs INSTALL_DTBS_PATH=$RPM_BUILD_ROOT/%{image_install_path}/dtb-$KernelVer - %{make} ARCH=$Arch dtbs_install INSTALL_DTBS_PATH=$RPM_BUILD_ROOT/%{image_install_path}/dtb-$KernelVer - cp -r $RPM_BUILD_ROOT/%{image_install_path}/dtb-$KernelVer $RPM_BUILD_ROOT/lib/modules/$KernelVer/dtb - find arch/$Arch/boot/dts -name '*.dtb' -type f -delete -%endif - - # Start installing the results - install -m 644 .config $RPM_BUILD_ROOT/boot/config-$KernelVer - install -m 644 .config $RPM_BUILD_ROOT/lib/modules/$KernelVer/config - install -m 644 System.map $RPM_BUILD_ROOT/boot/System.map-$KernelVer - install -m 644 System.map $RPM_BUILD_ROOT/lib/modules/$KernelVer/System.map - - # We estimate the size of the initramfs because rpm needs to take this size - # into consideration when performing disk space calculations. (See bz #530778) - dd if=/dev/zero of=$RPM_BUILD_ROOT/boot/initramfs-$KernelVer.img bs=1M count=20 - - if [ -f arch/$Arch/boot/zImage.stub ]; then - cp arch/$Arch/boot/zImage.stub $RPM_BUILD_ROOT/%{image_install_path}/zImage.stub-$KernelVer || : - cp arch/$Arch/boot/zImage.stub $RPM_BUILD_ROOT/lib/modules/$KernelVer/zImage.stub-$KernelVer || : - fi - - %if %{signkernel} - if [ "$KernelImage" = vmlinux ]; then - # We can't strip and sign $KernelImage in place, because - # we need to preserve original vmlinux for debuginfo. - # Use a copy for signing. - $CopyKernel $KernelImage $KernelImage.tosign - KernelImage=$KernelImage.tosign - CopyKernel=cp - fi - - # Sign the image if we're using EFI - # aarch64 kernels are gziped EFI images - KernelExtension=${KernelImage##*.} - if [ "$KernelExtension" == "gz" ]; then - SignImage=${KernelImage%.*} - else - SignImage=$KernelImage - fi - - %ifarch x86_64 aarch64 - %pesign -s -i $SignImage -o vmlinuz.tmp -a %{secureboot_ca_0} -c %{secureboot_key_0} -n %{pesign_name_0} - %pesign -s -i vmlinuz.tmp -o vmlinuz.signed -a %{secureboot_ca_1} -c %{secureboot_key_1} -n %{pesign_name_1} - rm vmlinuz.tmp - %endif - %ifarch s390x ppc64le - if [ -x /usr/bin/rpm-sign ]; then - rpm-sign --key "%{pesign_name_0}" --lkmsign $SignImage --output vmlinuz.signed - elif [ $DoModules -eq 1 ]; then - chmod +x scripts/sign-file - ./scripts/sign-file -p sha256 certs/signing_key.pem certs/signing_key.x509 $SignImage vmlinuz.signed - else - mv $SignImage vmlinuz.signed - fi - %endif - - if [ ! -s vmlinuz.signed ]; then - echo "pesigning failed" - exit 1 - fi - mv vmlinuz.signed $SignImage - if [ "$KernelExtension" == "gz" ]; then - gzip -f9 $SignImage - fi - # signkernel - %endif - - $CopyKernel $KernelImage \ - $RPM_BUILD_ROOT/%{image_install_path}/$InstallName-$KernelVer - chmod 755 $RPM_BUILD_ROOT/%{image_install_path}/$InstallName-$KernelVer - cp $RPM_BUILD_ROOT/%{image_install_path}/$InstallName-$KernelVer $RPM_BUILD_ROOT/lib/modules/$KernelVer/$InstallName - - # hmac sign the kernel for FIPS - echo "Creating hmac file: $RPM_BUILD_ROOT/%{image_install_path}/.vmlinuz-$KernelVer.hmac" - ls -l $RPM_BUILD_ROOT/%{image_install_path}/$InstallName-$KernelVer - (cd $RPM_BUILD_ROOT/%{image_install_path} && sha512hmac $InstallName-$KernelVer) > $RPM_BUILD_ROOT/%{image_install_path}/.vmlinuz-$KernelVer.hmac; - cp $RPM_BUILD_ROOT/%{image_install_path}/.vmlinuz-$KernelVer.hmac $RPM_BUILD_ROOT/lib/modules/$KernelVer/.vmlinuz.hmac - - if [ $DoModules -eq 1 ]; then - # Override $(mod-fw) because we don't want it to install any firmware - # we'll get it from the linux-firmware package and we don't want conflicts - %{make} %{?_smp_mflags} ARCH=$Arch INSTALL_MOD_PATH=$RPM_BUILD_ROOT %{?_smp_mflags} modules_install KERNELRELEASE=$KernelVer mod-fw= - fi - -%if %{with_gcov} - # install gcov-needed files to $BUILDROOT/$BUILD/...: - # gcov_info->filename is absolute path - # gcno references to sources can use absolute paths (e.g. in out-of-tree builds) - # sysfs symlink targets (set up at compile time) use absolute paths to BUILD dir - find . \( -name '*.gcno' -o -name '*.[chS]' \) -exec install -D '{}' "$RPM_BUILD_ROOT/$(pwd)/{}" \; -%endif - - # add an a noop %%defattr statement 'cause rpm doesn't like empty file list files - echo '%%defattr(-,-,-)' > ../kernel${Variant:+-${Variant}}-ldsoconf.list - if [ $DoVDSO -ne 0 ]; then - %{make} ARCH=$Arch INSTALL_MOD_PATH=$RPM_BUILD_ROOT vdso_install KERNELRELEASE=$KernelVer - if [ -s ldconfig-kernel.conf ]; then - install -D -m 444 ldconfig-kernel.conf \ - $RPM_BUILD_ROOT/etc/ld.so.conf.d/kernel-$KernelVer.conf - echo /etc/ld.so.conf.d/kernel-$KernelVer.conf >> ../kernel${Variant:+-${Variant}}-ldsoconf.list - fi - - rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/vdso/.build-id - fi - - # And save the headers/makefiles etc for building modules against - # - # This all looks scary, but the end result is supposed to be: - # * all arch relevant include/ files - # * all Makefile/Kconfig files - # * all script/ files - - rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/source - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - (cd $RPM_BUILD_ROOT/lib/modules/$KernelVer ; ln -s build source) - # dirs for additional modules per module-init-tools, kbuild/modules.txt - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/updates - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/weak-updates - # CONFIG_KERNEL_HEADER_TEST generates some extra files in the process of - # testing so just delete - find . -name *.h.s -delete - # first copy everything - cp --parents `find -type f -name "Makefile*" -o -name "Kconfig*"` $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - if [ ! -e Module.symvers ]; then - touch Module.symvers - fi - cp Module.symvers $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp System.map $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - if [ -s Module.markers ]; then - cp Module.markers $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - fi - - # create the kABI metadata for use in packaging - # NOTENOTE: the name symvers is used by the rpm backend - # NOTENOTE: to discover and run the /usr/lib/rpm/fileattrs/kabi.attr - # NOTENOTE: script which dynamically adds exported kernel symbol - # NOTENOTE: checksums to the rpm metadata provides list. - # NOTENOTE: if you change the symvers name, update the backend too - echo "**** GENERATING kernel ABI metadata ****" - gzip -c9 < Module.symvers > $RPM_BUILD_ROOT/boot/symvers-$KernelVer.gz - cp $RPM_BUILD_ROOT/boot/symvers-$KernelVer.gz $RPM_BUILD_ROOT/lib/modules/$KernelVer/symvers.gz - -%if %{with_kabichk} - echo "**** kABI checking is enabled in kernel SPEC file. ****" - chmod 0755 $RPM_SOURCE_DIR/check-kabi - if [ -e $RPM_SOURCE_DIR/Module.kabi_%{_target_cpu}$Variant ]; then - cp $RPM_SOURCE_DIR/Module.kabi_%{_target_cpu}$Variant $RPM_BUILD_ROOT/Module.kabi - $RPM_SOURCE_DIR/check-kabi -k $RPM_BUILD_ROOT/Module.kabi -s Module.symvers || exit 1 - # for now, don't keep it around. - rm $RPM_BUILD_ROOT/Module.kabi - else - echo "**** NOTE: Cannot find reference Module.kabi file. ****" - fi -%endif - -%if %{with_kabidupchk} - echo "**** kABI DUP checking is enabled in kernel SPEC file. ****" - if [ -e $RPM_SOURCE_DIR/Module.kabi_dup_%{_target_cpu}$Variant ]; then - cp $RPM_SOURCE_DIR/Module.kabi_dup_%{_target_cpu}$Variant $RPM_BUILD_ROOT/Module.kabi - $RPM_SOURCE_DIR/check-kabi -k $RPM_BUILD_ROOT/Module.kabi -s Module.symvers || exit 1 - # for now, don't keep it around. - rm $RPM_BUILD_ROOT/Module.kabi - else - echo "**** NOTE: Cannot find DUP reference Module.kabi file. ****" - fi -%endif - -%if %{with_kabidw_base} - # Don't build kabi base for debug kernels - if [ "$Variant" != "zfcpdump" -a "$Variant" != "debug" ]; then - mkdir -p $RPM_BUILD_ROOT/kabi-dwarf - tar xjvf %{SOURCE301} -C $RPM_BUILD_ROOT/kabi-dwarf - - mkdir -p $RPM_BUILD_ROOT/kabi-dwarf/stablelists - tar xjvf %{SOURCE300} -C $RPM_BUILD_ROOT/kabi-dwarf/stablelists - - echo "**** GENERATING DWARF-based kABI baseline dataset ****" - chmod 0755 $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh - $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh generate \ - "$RPM_BUILD_ROOT/kabi-dwarf/stablelists/kabi-current/kabi_stablelist_%{_target_cpu}" \ - "$(pwd)" \ - "$RPM_BUILD_ROOT/kabidw-base/%{_target_cpu}${Variant:+.${Variant}}" || : - - rm -rf $RPM_BUILD_ROOT/kabi-dwarf - fi -%endif - -%if %{with_kabidwchk} - if [ "$Variant" != "zfcpdump" ]; then - mkdir -p $RPM_BUILD_ROOT/kabi-dwarf - tar xjvf %{SOURCE301} -C $RPM_BUILD_ROOT/kabi-dwarf - if [ -d "$RPM_BUILD_ROOT/kabi-dwarf/base/%{_target_cpu}${Variant:+.${Variant}}" ]; then - mkdir -p $RPM_BUILD_ROOT/kabi-dwarf/stablelists - tar xjvf %{SOURCE300} -C $RPM_BUILD_ROOT/kabi-dwarf/stablelists - - echo "**** GENERATING DWARF-based kABI dataset ****" - chmod 0755 $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh - $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh generate \ - "$RPM_BUILD_ROOT/kabi-dwarf/stablelists/kabi-current/kabi_stablelist_%{_target_cpu}" \ - "$(pwd)" \ - "$RPM_BUILD_ROOT/kabi-dwarf/base/%{_target_cpu}${Variant:+.${Variant}}.tmp" || : - - echo "**** kABI DWARF-based comparison report ****" - $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh compare \ - "$RPM_BUILD_ROOT/kabi-dwarf/base/%{_target_cpu}${Variant:+.${Variant}}" \ - "$RPM_BUILD_ROOT/kabi-dwarf/base/%{_target_cpu}${Variant:+.${Variant}}.tmp" || : - echo "**** End of kABI DWARF-based comparison report ****" - else - echo "**** Baseline dataset for kABI DWARF-BASED comparison report not found ****" - fi - - rm -rf $RPM_BUILD_ROOT/kabi-dwarf - fi -%endif - - # then drop all but the needed Makefiles/Kconfig files - rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts - rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include - cp .config $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a scripts $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts/tracing - rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts/spdxcheck.py - -%ifarch s390x - # CONFIG_EXPOLINE_EXTERN=y produces arch/s390/lib/expoline.o - # which is needed during external module build. - if [ -f arch/s390/lib/expoline.o ]; then - cp -a --parents arch/s390/lib/expoline.o $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - fi -%endif - - # Files for 'make scripts' to succeed with kernel-devel. - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/security/selinux/include - cp -a --parents security/selinux/include/classmap.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents security/selinux/include/initial_sid_to_string.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/tools/include/tools - cp -a --parents tools/include/tools/be_byteshift.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/tools/le_byteshift.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - - # Files for 'make prepare' to succeed with kernel-devel. - cp -a --parents tools/include/linux/compiler* $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/linux/types.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/build/Build.include $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/build/Build $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/build/fixdep.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/objtool/sync-check.sh $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/bpf/resolve_btfids $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - - cp --parents security/selinux/include/policycap_names.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents security/selinux/include/policycap.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - - cp -a --parents tools/include/asm-generic $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/linux $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/uapi/asm $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/uapi/asm-generic $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/uapi/linux $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/vdso $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/scripts/utilities.mak $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/lib/subcmd $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/lib/*.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/objtool/*.[ch] $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/objtool/Build $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/objtool/include/objtool/*.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/lib/bpf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/lib/bpf/Build $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - - if [ -f tools/objtool/objtool ]; then - cp -a tools/objtool/objtool $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/tools/objtool/ || : - fi - if [ -f tools/objtool/fixdep ]; then - cp -a tools/objtool/fixdep $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/tools/objtool/ || : - fi - if [ -d arch/$Arch/scripts ]; then - cp -a arch/$Arch/scripts $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/arch/%{_arch} || : - fi - if [ -f arch/$Arch/*lds ]; then - cp -a arch/$Arch/*lds $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/arch/%{_arch}/ || : - fi - if [ -f arch/%{asmarch}/kernel/module.lds ]; then - cp -a --parents arch/%{asmarch}/kernel/module.lds $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - fi - find $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts \( -iname "*.o" -o -iname "*.cmd" \) -exec rm -f {} + -%ifarch ppc64le - cp -a --parents arch/powerpc/lib/crtsavres.[So] $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ -%endif - if [ -d arch/%{asmarch}/include ]; then - cp -a --parents arch/%{asmarch}/include $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - fi -%ifarch aarch64 - # arch/arm64/include/asm/xen references arch/arm - cp -a --parents arch/arm/include/asm/xen $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - # arch/arm64/include/asm/opcodes.h references arch/arm - cp -a --parents arch/arm/include/asm/opcodes.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ -%endif - # include the machine specific headers for ARM variants, if available. -%ifarch %{arm} - if [ -d arch/%{asmarch}/mach-${Variant}/include ]; then - cp -a --parents arch/%{asmarch}/mach-${Variant}/include $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - fi - # include a few files for 'make prepare' - cp -a --parents arch/arm/tools/gen-mach-types $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/arm/tools/mach-types $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - -%endif - cp -a include $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include -%ifarch i686 x86_64 - # files for 'make prepare' to succeed with kernel-devel - cp -a --parents arch/x86/entry/syscalls/syscall_32.tbl $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/entry/syscalls/syscall_64.tbl $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs_32.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs_64.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs_common.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/purgatory/purgatory.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/purgatory/stack.S $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/purgatory/setup-x86_64.S $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/purgatory/entry64.S $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/boot/string.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/boot/string.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/boot/ctype.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - - cp -a --parents scripts/syscalltbl.sh $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents scripts/syscallhdr.sh $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - - cp -a --parents tools/arch/x86/include/asm $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/arch/x86/include/uapi/asm $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/objtool/arch/x86/lib $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/arch/x86/lib/ $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/arch/x86/tools/gen-insn-attr-x86.awk $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/objtool/arch/x86/ $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - -%endif - # Clean up intermediate tools files - find $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/tools \( -iname "*.o" -o -iname "*.cmd" \) -exec rm -f {} + - - # Make sure the Makefile, version.h, and auto.conf have a matching - # timestamp so that external modules can be built - touch -r $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/Makefile \ - $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include/generated/uapi/linux/version.h \ - $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include/config/auto.conf - -%if %{with_debuginfo} - eu-readelf -n vmlinux | grep "Build ID" | awk '{print $NF}' > vmlinux.id - cp vmlinux.id $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/vmlinux.id - - # - # save the vmlinux file for kernel debugging into the kernel-debuginfo rpm - # - mkdir -p $RPM_BUILD_ROOT%{debuginfodir}/lib/modules/$KernelVer - cp vmlinux $RPM_BUILD_ROOT%{debuginfodir}/lib/modules/$KernelVer - if [ -n "%{vmlinux_decompressor}" ]; then - eu-readelf -n %{vmlinux_decompressor} | grep "Build ID" | awk '{print $NF}' > vmlinux.decompressor.id - # Without build-id the build will fail. But for s390 the build-id - # wasn't added before 5.11. In case it is missing prefer not - # packaging the debuginfo over a build failure. - if [ -s vmlinux.decompressor.id ]; then - cp vmlinux.decompressor.id $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/vmlinux.decompressor.id - cp %{vmlinux_decompressor} $RPM_BUILD_ROOT%{debuginfodir}/lib/modules/$KernelVer/vmlinux.decompressor - fi - fi -%endif - - find $RPM_BUILD_ROOT/lib/modules/$KernelVer -name "*.ko" -type f >modnames - - # mark modules executable so that strip-to-file can strip them - xargs --no-run-if-empty chmod u+x < modnames - - # Generate a list of modules for block and networking. - - grep -F /drivers/ modnames | xargs --no-run-if-empty nm -upA | - sed -n 's,^.*/\([^/]*\.ko\): *U \(.*\)$,\1 \2,p' > drivers.undef - - collect_modules_list() - { - sed -r -n -e "s/^([^ ]+) \\.?($2)\$/\\1/p" drivers.undef | - LC_ALL=C sort -u > $RPM_BUILD_ROOT/lib/modules/$KernelVer/modules.$1 - if [ ! -z "$3" ]; then - sed -r -e "/^($3)\$/d" -i $RPM_BUILD_ROOT/lib/modules/$KernelVer/modules.$1 - fi - } - - collect_modules_list networking \ - 'register_netdev|ieee80211_register_hw|usbnet_probe|phy_driver_register|rt(l_|2x00)(pci|usb)_probe|register_netdevice' - collect_modules_list block \ - 'ata_scsi_ioctl|scsi_add_host|scsi_add_host_with_dma|blk_alloc_queue|blk_init_queue|register_mtd_blktrans|scsi_esp_register|scsi_register_device_handler|blk_queue_physical_block_size' 'pktcdvd.ko|dm-mod.ko' - collect_modules_list drm \ - 'drm_open|drm_init' - collect_modules_list modesetting \ - 'drm_crtc_init' - - # detect missing or incorrect license tags - ( find $RPM_BUILD_ROOT/lib/modules/$KernelVer -name '*.ko' | xargs /sbin/modinfo -l | \ - grep -E -v 'GPL( v2)?$|Dual BSD/GPL$|Dual MPL/GPL$|GPL and additional rights$' ) && exit 1 - - remove_depmod_files() - { - # remove files that will be auto generated by depmod at rpm -i time - pushd $RPM_BUILD_ROOT/lib/modules/$KernelVer/ - rm -f modules.{alias,alias.bin,builtin.alias.bin,builtin.bin} \ - modules.{dep,dep.bin,devname,softdep,symbols,symbols.bin} - popd - } - - remove_depmod_files - - # Identify modules in the kernel-modules-extras package - %{SOURCE20} $RPM_BUILD_ROOT lib/modules/$KernelVer $(realpath configs/mod-extra.list) - # Identify modules in the kernel-modules-extras package - %{SOURCE20} $RPM_BUILD_ROOT lib/modules/$KernelVer %{SOURCE84} internal - - # - # Generate the kernel-core and kernel-modules files lists - # - - # Copy the System.map file for depmod to use, and create a backup of the - # full module tree so we can restore it after we're done filtering - cp System.map $RPM_BUILD_ROOT/. - cp configs/filter-*.sh $RPM_BUILD_ROOT/. - pushd $RPM_BUILD_ROOT - mkdir restore - cp -r lib/modules/$KernelVer/* restore/. - - # don't include anything going into kernel-modules-extra in the file lists - xargs rm -rf < mod-extra.list - # don't include anything going int kernel-modules-internal in the file lists - xargs rm -rf < mod-internal.list - - if [ $DoModules -eq 1 ]; then - # Find all the module files and filter them out into the core and - # modules lists. This actually removes anything going into -modules - # from the dir. - find lib/modules/$KernelVer/kernel -name *.ko | sort -n > modules.list - ./filter-modules.sh modules.list %{_target_cpu} - rm filter-*.sh - - # Run depmod on the resulting module tree and make sure it isn't broken - depmod -b . -aeF ./System.map $KernelVer &> depmod.out - if [ -s depmod.out ]; then - echo "Depmod failure" - cat depmod.out - exit 1 - else - rm depmod.out - fi - else - # Ensure important files/directories exist to let the packaging succeed - echo '%%defattr(-,-,-)' > modules.list - echo '%%defattr(-,-,-)' > k-d.list - mkdir -p lib/modules/$KernelVer/kernel - # Add files usually created by make modules, needed to prevent errors - # thrown by depmod during package installation - touch lib/modules/$KernelVer/modules.order - touch lib/modules/$KernelVer/modules.builtin - fi - - remove_depmod_files - - # Go back and find all of the various directories in the tree. We use this - # for the dir lists in kernel-core - find lib/modules/$KernelVer/kernel -mindepth 1 -type d | sort -n > module-dirs.list - - # Cleanup - rm System.map - # Just "cp -r" can be very slow: here, it rewrites _existing files_ - # with open(O_TRUNC). Many filesystems synchronously wait for metadata - # update for such file rewrites (seen in strace as final close syscall - # taking a long time). On a rotational disk, cp was observed to take - # more than 5 minutes on ext4 and more than 15 minutes (!) on xfs. - # With --remove-destination, we avoid this, and copying - # (with enough RAM to cache it) takes 5 seconds: - cp -r --remove-destination restore/* lib/modules/$KernelVer/. - rm -rf restore - popd - - # Make sure the files lists start with absolute paths or rpmbuild fails. - # Also add in the dir entries - sed -e 's/^lib*/\/lib/' %{?zipsed} $RPM_BUILD_ROOT/k-d.list > ../kernel${Variant:+-${Variant}}-modules.list - sed -e 's/^lib*/%dir \/lib/' %{?zipsed} $RPM_BUILD_ROOT/module-dirs.list > ../kernel${Variant:+-${Variant}}-core.list - sed -e 's/^lib*/\/lib/' %{?zipsed} $RPM_BUILD_ROOT/modules.list >> ../kernel${Variant:+-${Variant}}-core.list - sed -e 's/^lib*/\/lib/' %{?zipsed} $RPM_BUILD_ROOT/mod-extra.list >> ../kernel${Variant:+-${Variant}}-modules-extra.list - sed -e 's/^lib*/\/lib/' %{?zipsed} $RPM_BUILD_ROOT/mod-internal.list >> ../kernel${Variant:+-${Variant}}-modules-internal.list - - # Cleanup - rm -f $RPM_BUILD_ROOT/k-d.list - rm -f $RPM_BUILD_ROOT/modules.list - rm -f $RPM_BUILD_ROOT/module-dirs.list - rm -f $RPM_BUILD_ROOT/mod-extra.list - rm -f $RPM_BUILD_ROOT/mod-internal.list - -%if %{signmodules} - if [ $DoModules -eq 1 ]; then - # Save the signing keys so we can sign the modules in __modsign_install_post - cp certs/signing_key.pem certs/signing_key.pem.sign${Variant:++${Variant}} - cp certs/signing_key.x509 certs/signing_key.x509.sign${Variant:++${Variant}} - fi -%endif - - # Move the devel headers out of the root file system - mkdir -p $RPM_BUILD_ROOT/usr/src/kernels - mv $RPM_BUILD_ROOT/lib/modules/$KernelVer/build $RPM_BUILD_ROOT/$DevelDir - - # This is going to create a broken link during the build, but we don't use - # it after this point. We need the link to actually point to something - # when kernel-devel is installed, and a relative link doesn't work across - # the F17 UsrMove feature. - ln -sf $DevelDir $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - -%ifnarch armv7hl - # Generate vmlinux.h and put it to kernel-devel path - bpftool btf dump file vmlinux format c > $RPM_BUILD_ROOT/$DevelDir/vmlinux.h -%endif - - # prune junk from kernel-devel - find $RPM_BUILD_ROOT/usr/src/kernels -name ".*.cmd" -delete - - # Red Hat UEFI Secure Boot CA cert, which can be used to authenticate the kernel - mkdir -p $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer - %ifarch x86_64 aarch64 - install -m 0644 %{secureboot_ca_0} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca-20200609.cer - install -m 0644 %{secureboot_ca_1} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca-20140212.cer - ln -s kernel-signing-ca-20200609.cer $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca.cer - %else - install -m 0644 %{secureboot_ca_0} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca.cer - %endif - %ifarch s390x ppc64le - if [ $DoModules -eq 1 ]; then - if [ -x /usr/bin/rpm-sign ]; then - install -m 0644 %{secureboot_key_0} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/%{signing_key_filename} - else - install -m 0644 certs/signing_key.x509.sign${Variant:++${Variant}} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca.cer - openssl x509 -in certs/signing_key.pem.sign${Variant:++${Variant}} -outform der -out $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/%{signing_key_filename} - chmod 0644 $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/%{signing_key_filename} - fi - fi - %endif - -%if %{with_ipaclones} - MAXPROCS=$(echo %{?_smp_mflags} | sed -n 's/-j\s*\([0-9]\+\)/\1/p') - if [ -z "$MAXPROCS" ]; then - MAXPROCS=1 - fi - if [ "$Variant" == "" ]; then - mkdir -p $RPM_BUILD_ROOT/$DevelDir-ipaclones - find . -name '*.ipa-clones' | xargs -i{} -r -n 1 -P $MAXPROCS install -m 644 -D "{}" "$RPM_BUILD_ROOT/$DevelDir-ipaclones/{}" - fi -%endif - -} - -### -# DO it... -### - -# prepare directories -rm -rf $RPM_BUILD_ROOT -mkdir -p $RPM_BUILD_ROOT/boot -mkdir -p $RPM_BUILD_ROOT%{_libexecdir} - -cd linux-%{KVERREL} - - -%if %{with_debug} -BuildKernel %make_target %kernel_image %{_use_vdso} debug -%endif - -%if %{with_zfcpdump} -BuildKernel %make_target %kernel_image %{_use_vdso} zfcpdump -%endif - -%if %{with_pae} -BuildKernel %make_target %kernel_image %{use_vdso} lpae -%endif - -%if %{with_up} -BuildKernel %make_target %kernel_image %{_use_vdso} -%endif - -%ifnarch noarch i686 -%if !%{with_debug} && !%{with_zfcpdump} && !%{with_pae} && !%{with_up} -# If only building the user space tools, then initialize the build environment -# and some variables so that the various userspace tools can be built. -InitBuildVars -%endif -%endif - -%ifarch aarch64 -%global perf_build_extra_opts CORESIGHT=1 -%endif -%global perf_make \ - %{__make} %{?make_opts} EXTRA_CFLAGS="${RPM_OPT_FLAGS}" LDFLAGS="%{__global_ldflags}" %{?cross_opts} -C tools/perf V=1 NO_PERF_READ_VDSO32=1 NO_PERF_READ_VDSOX32=1 WERROR=0 NO_LIBUNWIND=1 HAVE_CPLUS_DEMANGLE=1 NO_GTK2=1 NO_STRLCPY=1 NO_BIONIC=1 LIBBPF_DYNAMIC=1 LIBTRACEEVENT_DYNAMIC=1 %{?perf_build_extra_opts} prefix=%{_prefix} PYTHON=%{__python3} -%if %{with_perf} -# perf -# make sure check-headers.sh is executable -chmod +x tools/perf/check-headers.sh -%{perf_make} DESTDIR=$RPM_BUILD_ROOT all -%endif - -%global tools_make \ - CFLAGS="${RPM_OPT_FLAGS}" LDFLAGS="%{__global_ldflags}" %{make} %{?make_opts} - -%if %{with_tools} -%ifarch %{cpupowerarchs} -# cpupower -# make sure version-gen.sh is executable. -chmod +x tools/power/cpupower/utils/version-gen.sh -%{tools_make} %{?_smp_mflags} -C tools/power/cpupower CPUFREQ_BENCH=false DEBUG=false -%ifarch x86_64 - pushd tools/power/cpupower/debug/x86_64 - %{tools_make} %{?_smp_mflags} centrino-decode powernow-k8-decode - popd -%endif -%ifarch x86_64 - pushd tools/power/x86/x86_energy_perf_policy/ - %{tools_make} - popd - pushd tools/power/x86/turbostat - %{tools_make} - popd - pushd tools/power/x86/intel-speed-select - %{tools_make} - popd - pushd tools/arch/x86/intel_sdsi - %{tools_make} CFLAGS="${RPM_OPT_FLAGS}" - popd -%endif -%endif -pushd tools/thermal/tmon/ -%{tools_make} -popd -pushd tools/iio/ -%{tools_make} -popd -pushd tools/gpio/ -%{tools_make} -popd -# build VM tools -pushd tools/vm/ -%{tools_make} slabinfo page_owner_sort -popd -%endif - -if [ -f $DevelDir/vmlinux.h ]; then - RPM_VMLINUX_H=$DevelDir/vmlinux.h -fi - -%global bpftool_make \ - %{__make} EXTRA_CFLAGS="${RPM_OPT_FLAGS}" EXTRA_LDFLAGS="%{__global_ldflags}" DESTDIR=$RPM_BUILD_ROOT %{?make_opts} VMLINUX_H="${RPM_VMLINUX_H}" V=1 -%if %{with_bpftool} -pushd tools/bpf/bpftool -%{bpftool_make} -popd -%endif - -%if %{with_selftests} -# Unfortunately, samples/bpf/Makefile expects that the headers are installed -# in the source tree. We installed them previously to $RPM_BUILD_ROOT/usr -# but there's no way to tell the Makefile to take them from there. -%{make} %{?_smp_mflags} headers_install -%{make} %{?_smp_mflags} ARCH=$Arch V=1 M=samples/bpf/ || true - -# Prevent bpf selftests to build bpftool repeatedly: -export BPFTOOL=$(pwd)/tools/bpf/bpftool/bpftool - -pushd tools/testing/selftests -# We need to install here because we need to call make with ARCH set which -# doesn't seem possible to do in the install section. -%{make} %{?_smp_mflags} ARCH=$Arch V=1 TARGETS="bpf vm livepatch net net/forwarding net/mptcp netfilter tc-testing" SKIP_TARGETS="" INSTALL_PATH=%{buildroot}%{_libexecdir}/kselftests VMLINUX_H="${RPM_VMLINUX_H}" install - -# 'make install' for bpf is broken and upstream refuses to fix it. -# Install the needed files manually. -for dir in bpf bpf/no_alu32 bpf/progs; do - # In ARK, the rpm build continues even if some of the selftests - # cannot be built. It's not always possible to build selftests, - # as upstream sometimes dependens on too new llvm version or has - # other issues. If something did not get built, just skip it. - test -d $dir || continue - mkdir -p %{buildroot}%{_libexecdir}/kselftests/$dir - find $dir -maxdepth 1 -type f \( -executable -o -name '*.py' -o -name settings -o \ - -name 'btf_dump_test_case_*.c' -o -name '*.ko' -o \ - -name '*.o' -exec sh -c 'readelf -h "{}" | grep -q "^ Machine:.*BPF"' \; \) -print0 | \ - xargs -0 cp -t %{buildroot}%{_libexecdir}/kselftests/$dir || true -done -popd -export -n BPFTOOL -%endif - -%if %{with_doc} -# Make the HTML pages. -%{__make} PYTHON=/usr/bin/python3 htmldocs || %{doc_build_fail} - -# sometimes non-world-readable files sneak into the kernel source tree -chmod -R a=rX Documentation -find Documentation -type d | xargs chmod u+w -%endif - -# In the modsign case, we do 3 things. 1) We check the "variant" and hard -# code the value in the following invocations. This is somewhat sub-optimal -# but we're doing this inside of an RPM macro and it isn't as easy as it -# could be because of that. 2) We restore the .tmp_versions/ directory from -# the one we saved off in BuildKernel above. This is to make sure we're -# signing the modules we actually built/installed in that variant. 3) We -# grab the arch and invoke mod-sign.sh command to actually sign the modules. -# -# We have to do all of those things _after_ find-debuginfo runs, otherwise -# that will strip the signature off of the modules. -# -# Don't sign modules for the zfcpdump variant as it is monolithic. - -%define __modsign_install_post \ - if [ "%{signmodules}" -eq "1" ]; then \ - if [ "%{with_pae}" -ne "0" ]; then \ - %{modsign_cmd} certs/signing_key.pem.sign+lpae certs/signing_key.x509.sign+lpae $RPM_BUILD_ROOT/lib/modules/%{KVERREL}+lpae/ \ - fi \ - if [ "%{with_debug}" -ne "0" ]; then \ - %{modsign_cmd} certs/signing_key.pem.sign+debug certs/signing_key.x509.sign+debug $RPM_BUILD_ROOT/lib/modules/%{KVERREL}+debug/ \ - fi \ - if [ "%{with_up}" -ne "0" ]; then \ - %{modsign_cmd} certs/signing_key.pem.sign certs/signing_key.x509.sign $RPM_BUILD_ROOT/lib/modules/%{KVERREL}/ \ - fi \ - fi \ - if [ "%{zipmodules}" -eq "1" ]; then \ - find $RPM_BUILD_ROOT/lib/modules/ -type f -name '*.ko' | xargs -P${RPM_BUILD_NCPUS} -r xz; \ - fi \ -%{nil} - -### -### Special hacks for debuginfo subpackages. -### - -# This macro is used by %%install, so we must redefine it before that. -%define debug_package %{nil} - -%if %{with_debuginfo} - -%ifnarch noarch -%global __debug_package 1 -%files -f debugfiles.list debuginfo-common-%{_target_cpu} -%endif - -%endif - -# We don't want to package debuginfo for self-tests and samples but -# we have to delete them to avoid an error messages about unpackaged -# files. -# Delete the debuginfo for kernel-devel files -%define __remove_unwanted_dbginfo_install_post \ - if [ "%{with_selftests}" -ne "0" ]; then \ - rm -rf $RPM_BUILD_ROOT/usr/lib/debug/usr/libexec/ksamples; \ - rm -rf $RPM_BUILD_ROOT/usr/lib/debug/usr/libexec/kselftests; \ - fi \ - rm -rf $RPM_BUILD_ROOT/usr/lib/debug/usr/src; \ -%{nil} - -# -# Disgusting hack alert! We need to ensure we sign modules *after* all -# invocations of strip occur, which is in __debug_install_post if -# find-debuginfo.sh runs, and __os_install_post if not. -# -%define __spec_install_post \ - %{?__debug_package:%{__debug_install_post}}\ - %{__arch_install_post}\ - %{__os_install_post}\ - %{__remove_unwanted_dbginfo_install_post}\ - %{__modsign_install_post} - -### -### install -### - -%install - -cd linux-%{KVERREL} - -%if %{with_doc} -docdir=$RPM_BUILD_ROOT%{_datadir}/doc/kernel-doc-%{specversion}-%{pkgrelease} - -# copy the source over -mkdir -p $docdir -tar -h -f - --exclude=man --exclude='.*' -c Documentation | tar xf - -C $docdir - -# with_doc -%endif - -# We have to do the headers install before the tools install because the -# kernel headers_install will remove any header files in /usr/include that -# it doesn't install itself. - -%if %{with_headers} -# Install kernel headers -%{__make} ARCH=%{hdrarch} INSTALL_HDR_PATH=$RPM_BUILD_ROOT/usr headers_install - -find $RPM_BUILD_ROOT/usr/include \ - \( -name .install -o -name .check -o \ - -name ..install.cmd -o -name ..check.cmd \) -delete - -%endif - -%if %{with_cross_headers} -%if 0%{?fedora} -HDR_ARCH_LIST='arm arm64 powerpc s390 x86' -%else -HDR_ARCH_LIST='arm64 powerpc s390 x86' -%endif -mkdir -p $RPM_BUILD_ROOT/usr/tmp-headers - -for arch in $HDR_ARCH_LIST; do - mkdir $RPM_BUILD_ROOT/usr/tmp-headers/arch-${arch} - %{__make} ARCH=${arch} INSTALL_HDR_PATH=$RPM_BUILD_ROOT/usr/tmp-headers/arch-${arch} headers_install -done - -find $RPM_BUILD_ROOT/usr/tmp-headers \ - \( -name .install -o -name .check -o \ - -name ..install.cmd -o -name ..check.cmd \) -delete - -# Copy all the architectures we care about to their respective asm directories -for arch in $HDR_ARCH_LIST ; do - mkdir -p $RPM_BUILD_ROOT/usr/${arch}-linux-gnu/include - mv $RPM_BUILD_ROOT/usr/tmp-headers/arch-${arch}/include/* $RPM_BUILD_ROOT/usr/${arch}-linux-gnu/include/ -done - -rm -rf $RPM_BUILD_ROOT/usr/tmp-headers -%endif - -%if %{with_kernel_abi_stablelists} -# kabi directory -INSTALL_KABI_PATH=$RPM_BUILD_ROOT/lib/modules/ -mkdir -p $INSTALL_KABI_PATH - -# install kabi releases directories -tar xjvf %{SOURCE300} -C $INSTALL_KABI_PATH -# with_kernel_abi_stablelists -%endif - -%if %{with_perf} -# perf tool binary and supporting scripts/binaries -%{perf_make} DESTDIR=$RPM_BUILD_ROOT lib=%{_lib} install-bin -# remove the 'trace' symlink. -rm -f %{buildroot}%{_bindir}/trace - -# For both of the below, yes, this should be using a macro but right now -# it's hard coded and we don't actually want it anyway right now. -# Whoever wants examples can fix it up! - -# remove examples -rm -rf %{buildroot}/usr/lib/perf/examples -rm -rf %{buildroot}/usr/lib/perf/include - -# python-perf extension -%{perf_make} DESTDIR=$RPM_BUILD_ROOT install-python_ext - -# perf man pages (note: implicit rpm magic compresses them later) -mkdir -p %{buildroot}/%{_mandir}/man1 -%{perf_make} DESTDIR=$RPM_BUILD_ROOT install-man - -# remove any tracevent files, eg. its plugins still gets built and installed, -# even if we build against system's libtracevent during perf build (by setting -# LIBTRACEEVENT_DYNAMIC=1 above in perf_make macro). Those files should already -# ship with libtraceevent package. -rm -rf %{buildroot}%{_libdir}/traceevent -%endif - -%if %{with_tools} -%ifarch %{cpupowerarchs} -%{make} -C tools/power/cpupower DESTDIR=$RPM_BUILD_ROOT libdir=%{_libdir} mandir=%{_mandir} CPUFREQ_BENCH=false install -rm -f %{buildroot}%{_libdir}/*.{a,la} -%find_lang cpupower -mv cpupower.lang ../ -%ifarch x86_64 - pushd tools/power/cpupower/debug/x86_64 - install -m755 centrino-decode %{buildroot}%{_bindir}/centrino-decode - install -m755 powernow-k8-decode %{buildroot}%{_bindir}/powernow-k8-decode - popd -%endif -chmod 0755 %{buildroot}%{_libdir}/libcpupower.so* -mkdir -p %{buildroot}%{_unitdir} %{buildroot}%{_sysconfdir}/sysconfig -install -m644 %{SOURCE2000} %{buildroot}%{_unitdir}/cpupower.service -install -m644 %{SOURCE2001} %{buildroot}%{_sysconfdir}/sysconfig/cpupower -%endif -%ifarch x86_64 - mkdir -p %{buildroot}%{_mandir}/man8 - pushd tools/power/x86/x86_energy_perf_policy - %{tools_make} DESTDIR=%{buildroot} install - popd - pushd tools/power/x86/turbostat - %{tools_make} DESTDIR=%{buildroot} install - popd - pushd tools/power/x86/intel-speed-select - %{tools_make} DESTDIR=%{buildroot} install - popd - pushd tools/arch/x86/intel_sdsi - %{tools_make} CFLAGS="${RPM_OPT_FLAGS}" DESTDIR=%{buildroot} install - popd -%endif -pushd tools/thermal/tmon -%{tools_make} INSTALL_ROOT=%{buildroot} install -popd -pushd tools/iio -%{tools_make} DESTDIR=%{buildroot} install -popd -pushd tools/gpio -%{tools_make} DESTDIR=%{buildroot} install -popd -install -m644 -D %{SOURCE2002} %{buildroot}%{_sysconfdir}/logrotate.d/kvm_stat -pushd tools/kvm/kvm_stat -%{__make} INSTALL_ROOT=%{buildroot} install-tools -%{__make} INSTALL_ROOT=%{buildroot} install-man -install -m644 -D kvm_stat.service %{buildroot}%{_unitdir}/kvm_stat.service -popd -# install VM tools -pushd tools/vm/ -install -m755 slabinfo %{buildroot}%{_bindir}/slabinfo -install -m755 page_owner_sort %{buildroot}%{_bindir}/page_owner_sort -popd -%endif - -if [ -f $DevelDir/vmlinux.h ]; then - RPM_VMLINUX_H=$DevelDir/vmlinux.h -fi - -%if %{with_bpftool} -pushd tools/bpf/bpftool -%{bpftool_make} prefix=%{_prefix} bash_compdir=%{_sysconfdir}/bash_completion.d/ mandir=%{_mandir} install doc-install -popd -%endif - -%if %{with_selftests} -pushd samples -install -d %{buildroot}%{_libexecdir}/ksamples -# install bpf samples -pushd bpf -install -d %{buildroot}%{_libexecdir}/ksamples/bpf -find -type f -executable -exec install -m755 {} %{buildroot}%{_libexecdir}/ksamples/bpf \; -install -m755 *.sh %{buildroot}%{_libexecdir}/ksamples/bpf -# test_lwt_bpf.sh compiles test_lwt_bpf.c when run; this works only from the -# kernel tree. Just remove it. -rm %{buildroot}%{_libexecdir}/ksamples/bpf/test_lwt_bpf.sh -install -m644 *_kern.o %{buildroot}%{_libexecdir}/ksamples/bpf || true -install -m644 tcp_bpf.readme %{buildroot}%{_libexecdir}/ksamples/bpf -popd -# install pktgen samples -pushd pktgen -install -d %{buildroot}%{_libexecdir}/ksamples/pktgen -find . -type f -executable -exec install -m755 {} %{buildroot}%{_libexecdir}/ksamples/pktgen/{} \; -find . -type f ! -executable -exec install -m644 {} %{buildroot}%{_libexecdir}/ksamples/pktgen/{} \; -popd -popd -# install vm selftests -pushd tools/testing/selftests/vm -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/vm/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/vm/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/vm/{} \; -popd -# install drivers/net/mlxsw selftests -pushd tools/testing/selftests/drivers/net/mlxsw -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/drivers/net/mlxsw/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/drivers/net/mlxsw/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/drivers/net/mlxsw/{} \; -popd -# install drivers/net/netdevsim selftests -pushd tools/testing/selftests/drivers/net/netdevsim -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/drivers/net/netdevsim/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/drivers/net/netdevsim/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/drivers/net/netdevsim/{} \; -popd -# install net/forwarding selftests -pushd tools/testing/selftests/net/forwarding -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/net/forwarding/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/net/forwarding/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/net/forwarding/{} \; -popd -# install net/mptcp selftests -pushd tools/testing/selftests/net/mptcp -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/net/mptcp/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/net/mptcp/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/net/mptcp/{} \; -popd -# install tc-testing selftests -pushd tools/testing/selftests/tc-testing -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/tc-testing/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/tc-testing/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/tc-testing/{} \; -popd -# install livepatch selftests -pushd tools/testing/selftests/livepatch -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/livepatch/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/livepatch/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/livepatch/{} \; -popd -# install netfilter selftests -pushd tools/testing/selftests/netfilter -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/netfilter/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/netfilter/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/netfilter/{} \; -popd -%endif - -### -### clean -### - -### -### scripts -### - -%if %{with_tools} -%post -n kernel-tools-libs -/sbin/ldconfig - -%postun -n kernel-tools-libs -/sbin/ldconfig -%endif - -# -# This macro defines a %%post script for a kernel*-devel package. -# %%kernel_devel_post [<subpackage>] -# Note we don't run hardlink if ostree is in use, as ostree is -# a far more sophisticated hardlink implementation. -# https://github.com/projectatomic/rpm-ostree/commit/58a79056a889be8814aa51f507b2c7a4dccee526 -# -# The deletion of *.hardlink-temporary files is a temporary workaround -# for this bug in the hardlink binary (fixed in util-linux 2.38): -# https://github.com/util-linux/util-linux/issues/1602 -# -%define kernel_devel_post() \ -%{expand:%%post %{?1:%{1}-}devel}\ -if [ -f /etc/sysconfig/kernel ]\ -then\ - . /etc/sysconfig/kernel || exit $?\ -fi\ -if [ "$HARDLINK" != "no" -a -x /usr/bin/hardlink -a ! -e /run/ostree-booted ] \ -then\ - (cd /usr/src/kernels/%{KVERREL}%{?1:+%{1}} &&\ - /usr/bin/find . -type f | while read f; do\ - hardlink -c /usr/src/kernels/*%{?dist}.*/$f $f > /dev/null\ - done;\ - /usr/bin/find /usr/src/kernels -type f -name '*.hardlink-temporary' -delete\ - )\ -fi\ -%{nil} - -# -# This macro defines a %%post script for a kernel*-modules-extra package. -# It also defines a %%postun script that does the same thing. -# %%kernel_modules_extra_post [<subpackage>] -# -%define kernel_modules_extra_post() \ -%{expand:%%post %{?1:%{1}-}modules-extra}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil}\ -%{expand:%%postun %{?1:%{1}-}modules-extra}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil} - -# -# This macro defines a %%post script for a kernel*-modules-internal package. -# It also defines a %%postun script that does the same thing. -# %%kernel_modules_internal_post [<subpackage>] -# -%define kernel_modules_internal_post() \ -%{expand:%%post %{?1:%{1}-}modules-internal}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil}\ -%{expand:%%postun %{?1:%{1}-}modules-internal}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil} - -# -# This macro defines a %%post script for a kernel*-modules package. -# It also defines a %%postun script that does the same thing. -# %%kernel_modules_post [<subpackage>] -# -%define kernel_modules_post() \ -%{expand:%%post %{?1:%{1}-}modules}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -if [ ! -f %{_localstatedir}/lib/rpm-state/%{name}/installing_core_%{KVERREL}%{?1:+%{1}} ]; then\ - mkdir -p %{_localstatedir}/lib/rpm-state/%{name}\ - touch %{_localstatedir}/lib/rpm-state/%{name}/need_to_run_dracut_%{KVERREL}%{?1:+%{1}}\ -fi\ -%{nil}\ -%{expand:%%postun %{?1:%{1}-}modules}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil}\ -%{expand:%%posttrans %{?1:%{1}-}modules}\ -if [ -f %{_localstatedir}/lib/rpm-state/%{name}/need_to_run_dracut_%{KVERREL}%{?1:+%{1}} ]; then\ - rm -f %{_localstatedir}/lib/rpm-state/%{name}/need_to_run_dracut_%{KVERREL}%{?1:+%{1}}\ - echo "Running: dracut -f --kver %{KVERREL}%{?1:+%{1}}"\ - dracut -f --kver "%{KVERREL}%{?1:+%{1}}" || exit $?\ -fi\ -%{nil} - -# This macro defines a %%posttrans script for a kernel package. -# %%kernel_variant_posttrans [<subpackage>] -# More text can follow to go at the end of this variant's %%post. -# -%define kernel_variant_posttrans() \ -%{expand:%%posttrans %{?1:%{1}-}core}\ -%if 0%{!?fedora:1}\ -if [ -x %{_sbindir}/weak-modules ]\ -then\ - %{_sbindir}/weak-modules --add-kernel %{KVERREL}%{?1:+%{1}} || exit $?\ -fi\ -%endif\ -rm -f %{_localstatedir}/lib/rpm-state/%{name}/installing_core_%{KVERREL}%{?1:+%{1}}\ -/bin/kernel-install add %{KVERREL}%{?1:+%{1}} /lib/modules/%{KVERREL}%{?1:+%{1}}/vmlinuz || exit $?\ -%{nil} - -# -# This macro defines a %%post script for a kernel package and its devel package. -# %%kernel_variant_post [-v <subpackage>] [-r <replace>] -# More text can follow to go at the end of this variant's %%post. -# -%define kernel_variant_post(v:r:) \ -%{expand:%%kernel_devel_post %{?-v*}}\ -%{expand:%%kernel_modules_post %{?-v*}}\ -%{expand:%%kernel_modules_extra_post %{?-v*}}\ -%{expand:%%kernel_modules_internal_post %{?-v*}}\ -%{expand:%%kernel_variant_posttrans %{?-v*}}\ -%{expand:%%post %{?-v*:%{-v*}-}core}\ -%{-r:\ -if [ `uname -i` == "x86_64" -o `uname -i` == "i386" ] &&\ - [ -f /etc/sysconfig/kernel ]; then\ - /bin/sed -r -i -e 's/^DEFAULTKERNEL=%{-r*}$/DEFAULTKERNEL=kernel%{?-v:-%{-v*}}/' /etc/sysconfig/kernel || exit $?\ -fi}\ -mkdir -p %{_localstatedir}/lib/rpm-state/%{name}\ -touch %{_localstatedir}/lib/rpm-state/%{name}/installing_core_%{KVERREL}%{?1:+%{1}}\ -%{nil} - -# -# This macro defines a %%preun script for a kernel package. -# %%kernel_variant_preun <subpackage> -# -%define kernel_variant_preun() \ -%{expand:%%preun %{?1:%{1}-}core}\ -/bin/kernel-install remove %{KVERREL}%{?1:+%{1}} /lib/modules/%{KVERREL}%{?1:+%{1}}/vmlinuz || exit $?\ -if [ -x %{_sbindir}/weak-modules ]\ -then\ - %{_sbindir}/weak-modules --remove-kernel %{KVERREL}%{?1:+%{1}} || exit $?\ -fi\ -%{nil} - -%kernel_variant_preun -%kernel_variant_post -r kernel-smp - -%if %{with_pae} -%kernel_variant_preun lpae -%kernel_variant_post -v lpae -r (kernel|kernel-smp) -%endif - -%if %{with_debug} -%kernel_variant_preun debug -%kernel_variant_post -v debug -%endif - -%if %{with_zfcpdump} -%kernel_variant_preun zfcpdump -%kernel_variant_post -v zfcpdump -%endif - -if [ -x /sbin/ldconfig ] -then - /sbin/ldconfig -X || exit $? -fi - -### -### file lists -### - -%if %{with_headers} -%files headers -/usr/include/* -%endif - -%if %{with_cross_headers} -%files cross-headers -/usr/*-linux-gnu/include/* -%endif - -%if %{with_kernel_abi_stablelists} -%files -n kernel-abi-stablelists -/lib/modules/kabi-* -%endif - -%if %{with_kabidw_base} -%ifarch x86_64 s390x ppc64 ppc64le aarch64 -%files kernel-kabidw-base-internal -%defattr(-,root,root) -/kabidw-base/%{_target_cpu}/* -%endif -%endif - -# only some architecture builds need kernel-doc -%if %{with_doc} -%files doc -%defattr(-,root,root) -%{_datadir}/doc/kernel-doc-%{specversion}-%{pkgrelease}/Documentation/* -%dir %{_datadir}/doc/kernel-doc-%{specversion}-%{pkgrelease}/Documentation -%dir %{_datadir}/doc/kernel-doc-%{specversion}-%{pkgrelease} -%endif - -%if %{with_perf} -%files -n perf -%{_bindir}/perf -%{_libdir}/libperf-jvmti.so -%dir %{_libexecdir}/perf-core -%{_libexecdir}/perf-core/* -%{_datadir}/perf-core/* -%{_mandir}/man[1-8]/perf* -%{_sysconfdir}/bash_completion.d/perf -%doc linux-%{KVERREL}/tools/perf/Documentation/examples.txt -%{_docdir}/perf-tip/tips.txt - -%files -n python3-perf -%{python3_sitearch}/* - -%if %{with_debuginfo} -%files -f perf-debuginfo.list -n perf-debuginfo - -%files -f python3-perf-debuginfo.list -n python3-perf-debuginfo -%endif -# with_perf -%endif - -%if %{with_tools} -%ifnarch %{cpupowerarchs} -%files -n kernel-tools -%else -%files -n kernel-tools -f cpupower.lang -%{_bindir}/cpupower -%{_datadir}/bash-completion/completions/cpupower -%ifarch x86_64 -%{_bindir}/centrino-decode -%{_bindir}/powernow-k8-decode -%endif -%{_unitdir}/cpupower.service -%{_mandir}/man[1-8]/cpupower* -%config(noreplace) %{_sysconfdir}/sysconfig/cpupower -%ifarch x86_64 -%{_bindir}/x86_energy_perf_policy -%{_mandir}/man8/x86_energy_perf_policy* -%{_bindir}/turbostat -%{_mandir}/man8/turbostat* -%{_bindir}/intel-speed-select -%{_sbindir}/intel_sdsi -%endif -# cpupowerarchs -%endif -%{_bindir}/tmon -%{_bindir}/iio_event_monitor -%{_bindir}/iio_generic_buffer -%{_bindir}/lsiio -%{_bindir}/lsgpio -%{_bindir}/gpio-hammer -%{_bindir}/gpio-event-mon -%{_bindir}/gpio-watch -%{_mandir}/man1/kvm_stat* -%{_bindir}/kvm_stat -%{_unitdir}/kvm_stat.service -%config(noreplace) %{_sysconfdir}/logrotate.d/kvm_stat -%{_bindir}/page_owner_sort -%{_bindir}/slabinfo - -%if %{with_debuginfo} -%files -f kernel-tools-debuginfo.list -n kernel-tools-debuginfo -%endif - -%ifarch %{cpupowerarchs} -%files -n kernel-tools-libs -%{_libdir}/libcpupower.so.0 -%{_libdir}/libcpupower.so.0.0.1 - -%files -n kernel-tools-libs-devel -%{_libdir}/libcpupower.so -%{_includedir}/cpufreq.h -%endif -# with_tools -%endif - -%if %{with_bpftool} -%files -n bpftool -%{_sbindir}/bpftool -%{_sysconfdir}/bash_completion.d/bpftool -%{_mandir}/man8/bpftool-cgroup.8.gz -%{_mandir}/man8/bpftool-gen.8.gz -%{_mandir}/man8/bpftool-iter.8.gz -%{_mandir}/man8/bpftool-link.8.gz -%{_mandir}/man8/bpftool-map.8.gz -%{_mandir}/man8/bpftool-prog.8.gz -%{_mandir}/man8/bpftool-perf.8.gz -%{_mandir}/man8/bpftool.8.gz -%{_mandir}/man8/bpftool-net.8.gz -%{_mandir}/man8/bpftool-feature.8.gz -%{_mandir}/man8/bpftool-btf.8.gz -%{_mandir}/man8/bpftool-struct_ops.8.gz - -%if %{with_debuginfo} -%files -f bpftool-debuginfo.list -n bpftool-debuginfo -%defattr(-,root,root) -%endif -%endif - -%if %{with_selftests} -%files selftests-internal -%{_libexecdir}/ksamples -%{_libexecdir}/kselftests -%endif - -# empty meta-package -%ifnarch %nobuildarches noarch -%files -%endif - -%if %{with_gcov} -%ifnarch %nobuildarches noarch -%files gcov -%{_builddir} -%endif -%endif - -# This is %%{image_install_path} on an arch where that includes ELF files, -# or empty otherwise. -%define elf_image_install_path %{?kernel_image_elf:%{image_install_path}} - -# -# This macro defines the %%files sections for a kernel package -# and its devel and debuginfo packages. -# %%kernel_variant_files [-k vmlinux] <use_vdso> <condition> <subpackage> -# -%define kernel_variant_files(k:) \ -%if %{2}\ -%{expand:%%files -f kernel-%{?3:%{3}-}core.list %{?1:-f kernel-%{?3:%{3}-}ldsoconf.list} %{?3:%{3}-}core}\ -%{!?_licensedir:%global license %%doc}\ -%license linux-%{KVERREL}/COPYING-%{version}-%{release}\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/%{?-k:%{-k*}}%{!?-k:vmlinuz}\ -%ghost /%{image_install_path}/%{?-k:%{-k*}}%{!?-k:vmlinuz}-%{KVERREL}%{?3:+%{3}}\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/.vmlinuz.hmac \ -%ghost /%{image_install_path}/.vmlinuz-%{KVERREL}%{?3:+%{3}}.hmac \ -%ifarch %{arm} aarch64\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/dtb \ -%ghost /%{image_install_path}/dtb-%{KVERREL}%{?3:+%{3}} \ -%endif\ -%attr(0600, root, root) /lib/modules/%{KVERREL}%{?3:+%{3}}/System.map\ -%ghost %attr(0600, root, root) /boot/System.map-%{KVERREL}%{?3:+%{3}}\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/symvers.gz\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/config\ -%ghost %attr(0600, root, root) /boot/symvers-%{KVERREL}%{?3:+%{3}}.gz\ -%ghost %attr(0600, root, root) /boot/initramfs-%{KVERREL}%{?3:+%{3}}.img\ -%ghost %attr(0644, root, root) /boot/config-%{KVERREL}%{?3:+%{3}}\ -%dir /lib/modules\ -%dir /lib/modules/%{KVERREL}%{?3:+%{3}}\ -%dir /lib/modules/%{KVERREL}%{?3:+%{3}}/kernel\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/build\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/source\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/updates\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/weak-updates\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/systemtap\ -%{_datadir}/doc/kernel-keys/%{KVERREL}%{?3:+%{3}}\ -%if %{1}\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/vdso\ -%endif\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/modules.*\ -%{expand:%%files -f kernel-%{?3:%{3}-}modules.list %{?3:%{3}-}modules}\ -%{expand:%%files %{?3:%{3}-}devel}\ -%defverify(not mtime)\ -/usr/src/kernels/%{KVERREL}%{?3:+%{3}}\ -%{expand:%%files %{?3:%{3}-}devel-matched}\ -%{expand:%%files -f kernel-%{?3:%{3}-}modules-extra.list %{?3:%{3}-}modules-extra}\ -%config(noreplace) /etc/modprobe.d/*-blacklist.conf\ -%{expand:%%files -f kernel-%{?3:%{3}-}modules-internal.list %{?3:%{3}-}modules-internal}\ -%if %{with_debuginfo}\ -%ifnarch noarch\ -%{expand:%%files -f debuginfo%{?3}.list %{?3:%{3}-}debuginfo}\ -%endif\ -%endif\ -%if %{?3:1} %{!?3:0}\ -%{expand:%%files %{3}}\ -%endif\ -%endif\ -%{nil} - -%kernel_variant_files %{_use_vdso} %{with_up} -%kernel_variant_files %{_use_vdso} %{with_debug} debug -%if %{with_debug_meta} -%files debug -%files debug-core -%files debug-devel -%files debug-devel-matched -%files debug-modules -%files debug-modules-extra -%endif -%kernel_variant_files %{use_vdso} %{with_pae} lpae -%kernel_variant_files %{_use_vdso} %{with_zfcpdump} zfcpdump - -%define kernel_variant_ipaclones(k:) \ -%if %{1}\ -%if %{with_ipaclones}\ -%{expand:%%files %{?2:%{2}-}ipaclones-internal}\ -%defattr(-,root,root)\ -%defverify(not mtime)\ -/usr/src/kernels/%{KVERREL}%{?2:+%{2}}-ipaclones\ -%endif\ -%endif\ -%{nil} - -%kernel_variant_ipaclones %{with_up} - -# plz don't put in a version string unless you're going to tag -# and build. -# -# -%changelog Mon Mar 28 2022 Fedora Kernel Team <kernel-team@xxxxxxxxxxxxxxxxx> [5.16.0-6.test] - -### -# The following Emacs magic makes C-c C-e use UTC dates. -# Local Variables: -# rpm-change-log-uses-utc: t -# End: -### diff --git a/redhat/self-test/data/fedora-fce15c45d3fb.el7.spec b/redhat/self-test/data/fedora-fce15c45d3fb.el7.spec index blahblah..blahblah 100755 --- a/redhat/self-test/data/fedora-fce15c45d3fb.el7.spec +++ b/redhat/self-test/data/fedora-fce15c45d3fb.el7.spec @@ -1,125 +1,7 @@ -# All Global changes to build and install go here. -# Per the below section about __spec_install_pre, any rpm -# environment changes that affect %%install need to go -# here before the %%install macro is pre-built. - -# Disable LTO in userspace packages. -%global _lto_cflags %{nil} - -# Option to enable compiling with clang instead of gcc. -%bcond_with toolchain_clang - -%if %{with toolchain_clang} -%global toolchain clang -%endif - -# Compile the kernel with LTO (only supported when building with clang). -%bcond_with clang_lto - -%if %{with clang_lto} && %{without toolchain_clang} -{error:clang_lto requires --with toolchain_clang} -%endif - -# Cross compile on copr for arm -# See https://bugzilla.redhat.com/1879599 -%if 0%{?_with_cross_arm:1} -%global _target_cpu armv7hl -%global _arch arm -%global _build_arch arm -%global _with_cross 1 -%endif - -# The kernel's %%install section is special -# Normally the %%install section starts by cleaning up the BUILD_ROOT -# like so: -# -# %%__spec_install_pre %%{___build_pre}\ -# [ "$RPM_BUILD_ROOT" != "/" ] && rm -rf "${RPM_BUILD_ROOT}"\ -# mkdir -p `dirname "$RPM_BUILD_ROOT"`\ -# mkdir "$RPM_BUILD_ROOT"\ -# %%{nil} -# -# But because of kernel variants, the %%build section, specifically -# BuildKernel(), moves each variant to its final destination as the -# variant is built. This violates the expectation of the %%install -# section. As a result we snapshot the current env variables and -# purposely leave out the removal section. All global wide changes -# should be added above this line otherwise the %%install section -# will not see them. -%global __spec_install_pre %{___build_pre} - -# At the time of this writing (2019-03), RHEL8 packages use w2.xzdio -# compression for rpms (xz, level 2). -# Kernel has several large (hundreds of mbytes) rpms, they take ~5 mins -# to compress by single-threaded xz. Switch to threaded compression, -# and from level 2 to 3 to keep compressed sizes close to "w2" results. -# -# NB: if default compression in /usr/lib/rpm/redhat/macros ever changes, -# this one might need tweaking (e.g. if default changes to w3.xzdio, -# change below to w4T.xzdio): -# -# This is disabled on i686 as it triggers oom errors - -%ifnarch i686 -%define _binary_payload w3T.xzdio -%endif - -Summary: The Linux kernel -%if 0%{?fedora} -%define secure_boot_arch x86_64 -%else -%define secure_boot_arch x86_64 aarch64 s390x ppc64le -%endif - -# Signing for secure boot authentication -%ifarch %{secure_boot_arch} -%global signkernel 1 -%else -%global signkernel 0 -%endif - -# Sign modules on all arches -%global signmodules 1 - -# Compress modules only for architectures that build modules -%ifarch noarch -%global zipmodules 0 -%else -%global zipmodules 1 -%endif - -%if %{zipmodules} -%global zipsed -e 's/\.ko$/\.ko.xz/' -# for parallel xz processes, replace with 1 to go back to single process -%endif - -%if 0%{?fedora} -%define primary_target fedora -%else -%define primary_target rhel -%endif - -# -# genspec.sh variables -# - -# Include Fedora files %global include_fedora 1 -# Include RHEL files %global include_rhel 1 -# Provide Patchlist.changelog file %global patchlist_changelog 1 -# Set released_kernel to 1 when the upstream source tarball contains a -# kernel release. (This includes prepatch or "rc" releases.) -# Set released_kernel to 0 when the upstream source tarball contains an -# unreleased kernel development snapshot. %global released_kernel 0 -# Set debugbuildsenabled to 1 to build separate base and debug kernels -# (on supported architectures). The kernel-debug-* subpackages will -# contain the debug kernel. -# Set debugbuildsenabled to 0 to not build a separate debug kernel, but -# to build the base kernel using the debug configuration. (Specifying -# the --with-release option overrides this setting.) %define debugbuildsenabled 0 %define buildid .test %define specversion 5.16.0 @@ -127,2924 +9,6 @@ Summary: The Linux kernel %define pkgrelease 0.rc5.fce15c45d3fb.6.test %define kversion 5 %define tarfile_release 5.16-rc5-1-gfce15c45d3fb -# This is needed to do merge window version magic %define patchlevel 16 -# allow pkg_release to have configurable %%{?dist} tag %define specrelease 0.rc5.fce15c45d3fb.6%{?buildid}%{?dist} - -# -# End of genspec.sh variables -# - -%define pkg_release %{specrelease} - -# libexec dir is not used by the linker, so the shared object there -# should not be exported to RPM provides -%global __provides_exclude_from ^%{_libexecdir}/kselftests - -# The following build options are enabled by default, but may become disabled -# by later architecture-specific checks. These can also be disabled by using -# --without <opt> in the rpmbuild command, or by forcing these values to 0. -# -# standard kernel -%define with_up %{?_without_up: 0} %{?!_without_up: 1} -# kernel PAE (only valid for ARM (lpae)) -%define with_pae %{?_without_pae: 0} %{?!_without_pae: 1} -# kernel-debug -%define with_debug %{?_without_debug: 0} %{?!_without_debug: 1} -# kernel-zfcpdump (s390 specific kernel for zfcpdump) -%define with_zfcpdump %{?_without_zfcpdump: 0} %{?!_without_zfcpdump: 1} -# kernel-doc -%define with_doc %{?_without_doc: 0} %{?!_without_doc: 1} -# kernel-headers -%define with_headers %{?_without_headers: 0} %{?!_without_headers: 1} -%define with_cross_headers %{?_without_cross_headers: 0} %{?!_without_cross_headers: 1} -# perf -%define with_perf %{?_without_perf: 0} %{?!_without_perf: 1} -# tools -%define with_tools %{?_without_tools: 0} %{?!_without_tools: 1} -# bpf tool -%define with_bpftool %{?_without_bpftool: 0} %{?!_without_bpftool: 1} -# kernel-debuginfo -%define with_debuginfo %{?_without_debuginfo: 0} %{?!_without_debuginfo: 1} -# kernel-abi-stablelists -%define with_kernel_abi_stablelists %{?_without_kernel_abi_stablelists: 0} %{?!_without_kernel_abi_stablelists: 1} -# internal samples and selftests -%define with_selftests %{?_without_selftests: 0} %{?!_without_selftests: 1} -# -# Additional options for user-friendly one-off kernel building: -# -# Only build the base kernel (--with baseonly): -%define with_baseonly %{?_with_baseonly: 1} %{?!_with_baseonly: 0} -# Only build the pae kernel (--with paeonly): -%define with_paeonly %{?_with_paeonly: 1} %{?!_with_paeonly: 0} -# Only build the debug kernel (--with dbgonly): -%define with_dbgonly %{?_with_dbgonly: 1} %{?!_with_dbgonly: 0} -# Control whether we perform a compat. check against published ABI. -%define with_kabichk %{?_without_kabichk: 0} %{?!_without_kabichk: 1} -# Temporarily disable kabi checks until RC. -%define with_kabichk 0 -# Control whether we perform a compat. check against DUP ABI. -%define with_kabidupchk %{?_with_kabidupchk: 1} %{?!_with_kabidupchk: 0} -# -# Control whether to run an extensive DWARF based kABI check. -# Note that this option needs to have baseline setup in SOURCE300. -%define with_kabidwchk %{?_without_kabidwchk: 0} %{?!_without_kabidwchk: 1} -%define with_kabidw_base %{?_with_kabidw_base: 1} %{?!_with_kabidw_base: 0} -# -# Control whether to install the vdso directories. -%define with_vdso_install %{?_without_vdso_install: 0} %{?!_without_vdso_install: 1} -# -# should we do C=1 builds with sparse -%define with_sparse %{?_with_sparse: 1} %{?!_with_sparse: 0} -# -# Cross compile requested? -%define with_cross %{?_with_cross: 1} %{?!_with_cross: 0} -# -# build a release kernel on rawhide -%define with_release %{?_with_release: 1} %{?!_with_release: 0} - -# verbose build, i.e. no silent rules and V=1 -%define with_verbose %{?_with_verbose: 1} %{?!_with_verbose: 0} - -# -# check for mismatched config options -%define with_configchecks %{?_without_configchecks: 0} %{?!_without_configchecks: 1} - -# -# gcov support -%define with_gcov %{?_with_gcov:1}%{?!_with_gcov:0} - -# -# ipa_clone support -%define with_ipaclones %{?_without_ipaclones: 0} %{?!_without_ipaclones: 1} - -# Want to build a vanilla kernel build without any non-upstream patches? -%define with_vanilla %{?_with_vanilla: 1} %{?!_with_vanilla: 0} - -%if 0%{?fedora} -# Kernel headers are being split out into a separate package -%define with_headers 0 -%define with_cross_headers 0 -# no ipa_clone for now -%define with_ipaclones 0 -# no stablelist -%define with_kernel_abi_stablelists 0 -# Fedora builds these separately -%define with_perf 0 -%define with_tools 0 -%define with_bpftool 0 -# selftests turns on bpftool -%define with_selftests 0 -%endif - -%if %{with_verbose} -%define make_opts V=1 -%else -%define make_opts -s -%endif - -%if %{with toolchain_clang} -%ifarch s390x ppc64le -%global llvm_ias 0 -%else -%global llvm_ias 1 -%endif -%global clang_make_opts HOSTCC=clang CC=clang LLVM_IAS=%{llvm_ias} -%if %{with clang_lto} -%global clang_make_opts %{clang_make_opts} LD=ld.lld HOSTLD=ld.lld AR=llvm-ar NM=llvm-nm HOSTAR=llvm-ar HOSTNM=llvm-nm -%endif -%global make_opts %{make_opts} %{clang_make_opts} -# clang does not support the -fdump-ipa-clones option -%global with_ipaclones 0 -%endif - -# turn off debug kernel and kabichk for gcov builds -%if %{with_gcov} -%define with_debug 0 -%define with_kabichk 0 -%define with_kabidupchk 0 -%define with_kabidwchk 0 -%define with_kabidw_base 0 -%define with_kernel_abi_stablelists 0 -%endif - -# turn off kABI DWARF-based check if we're generating the base dataset -%if %{with_kabidw_base} -%define with_kabidwchk 0 -%endif - -# kpatch_kcflags are extra compiler flags applied to base kernel -# -fdump-ipa-clones is enabled only for base kernels on selected arches -%if %{with_ipaclones} -%ifarch x86_64 ppc64le -%define kpatch_kcflags -fdump-ipa-clones -%else -%define with_ipaclones 0 -%endif -%endif - -%define make_target bzImage -%define image_install_path boot - -%define KVERREL %{version}-%{release}.%{_target_cpu} -%define KVERREL_RE %(echo %KVERREL | sed 's/+/[+]/g') -%define hdrarch %_target_cpu -%define asmarch %_target_cpu - -%if 0%{!?nopatches:1} -%define nopatches 0 -%endif - -%if %{with_vanilla} -%define nopatches 1 -%endif - -%if %{with_release} -%define debugbuildsenabled 1 -%endif - -%if !%{with_debuginfo} -%define _enable_debug_packages 0 -%endif -%define debuginfodir /usr/lib/debug -# Needed because we override almost everything involving build-ids -# and debuginfo generation. Currently we rely on the old alldebug setting. -%global _build_id_links alldebug - -# kernel PAE is only built on ARMv7 -%ifnarch armv7hl -%define with_pae 0 -%endif - -# if requested, only build base kernel -%if %{with_baseonly} -%define with_pae 0 -%define with_debug 0 -%define with_vdso_install 0 -%define with_perf 0 -%define with_tools 0 -%define with_bpftool 0 -%define with_kernel_abi_stablelists 0 -%define with_selftests 0 -%define with_cross 0 -%define with_cross_headers 0 -%define with_ipaclones 0 -%endif - -# if requested, only build pae kernel -%if %{with_paeonly} -%define with_up 0 -%define with_debug 0 -%endif - -# if requested, only build debug kernel -%if %{with_dbgonly} -%define with_up 0 -%define with_vdso_install 0 -%define with_perf 0 -%define with_tools 0 -%define with_bpftool 0 -%define with_kernel_abi_stablelists 0 -%define with_selftests 0 -%define with_cross 0 -%define with_cross_headers 0 -%define with_ipaclones 0 -%endif - -# turn off kABI DUP check and DWARF-based check if kABI check is disabled -%if !%{with_kabichk} -%define with_kabidupchk 0 -%define with_kabidwchk 0 -%endif - -%if %{with_vdso_install} -%define use_vdso 1 -%endif - -# selftests require bpftool to be built -%if %{with_selftests} -%define with_bpftool 1 -%endif - -%ifnarch noarch -%define with_kernel_abi_stablelists 0 -%endif - -# Overrides for generic default options - -# only package docs noarch -%ifnarch noarch -%define with_doc 0 -%define doc_build_fail true -%endif - -%if 0%{?fedora} -# don't do debug builds on anything but i686 and x86_64 -%ifnarch i686 x86_64 -%define with_debug 0 -%endif -%endif - -# don't build noarch kernels or headers (duh) -%ifarch noarch -%define with_up 0 -%define with_headers 0 -%define with_cross_headers 0 -%define with_tools 0 -%define with_perf 0 -%define with_bpftool 0 -%define with_selftests 0 -%define with_debug 0 -%define all_arch_configs kernel-%{version}-*.config -%endif - -# sparse blows up on ppc -%ifnarch ppc64le -%define with_sparse 0 -%endif - -# zfcpdump mechanism is s390 only -%ifnarch s390x -%define with_zfcpdump 0 -%endif - -%if 0%{?fedora} -# This is not for Fedora -%define with_zfcpdump 0 -%endif - -# Per-arch tweaks - -%ifarch i686 -%define asmarch x86 -%define hdrarch i386 -%define all_arch_configs kernel-%{version}-i?86*.config -%define kernel_image arch/x86/boot/bzImage -%endif - -%ifarch x86_64 -%define asmarch x86 -%define all_arch_configs kernel-%{version}-x86_64*.config -%define kernel_image arch/x86/boot/bzImage -%endif - -%ifarch ppc64le -%define asmarch powerpc -%define hdrarch powerpc -%define make_target vmlinux -%define kernel_image vmlinux -%define kernel_image_elf 1 -%define use_vdso 0 -%define all_arch_configs kernel-%{version}-ppc64le*.config -%endif - -%ifarch s390x -%define asmarch s390 -%define hdrarch s390 -%define all_arch_configs kernel-%{version}-s390x.config -%define kernel_image arch/s390/boot/bzImage -%define vmlinux_decompressor arch/s390/boot/compressed/vmlinux -%endif - -%ifarch %{arm} -%define all_arch_configs kernel-%{version}-arm*.config -%define skip_nonpae_vdso 1 -%define asmarch arm -%define hdrarch arm -%define make_target bzImage -%define kernel_image arch/arm/boot/zImage -# http://lists.infradead.org/pipermail/linux-arm-kernel/2012-March/091404.html -%define kernel_mflags KALLSYMS_EXTRA_PASS=1 -# we only build headers/perf/tools on the base arm arches -# just like we used to only build them on i386 for x86 -%ifnarch armv7hl -%define with_headers 0 -%define with_cross_headers 0 -%endif -# These currently don't compile on armv7 -%define with_selftests 0 -%endif - -%ifarch aarch64 -%define all_arch_configs kernel-%{version}-aarch64*.config -%define asmarch arm64 -%define hdrarch arm64 -%define make_target Image.gz -%define kernel_image arch/arm64/boot/Image.gz -%endif - -# Should make listnewconfig fail if there's config options -# printed out? -%if %{nopatches} -%define with_configchecks 0 -%endif - -# To temporarily exclude an architecture from being built, add it to -# %%nobuildarches. Do _NOT_ use the ExclusiveArch: line, because if we -# don't build kernel-headers then the new build system will no longer let -# us use the previous build of that package -- it'll just be completely AWOL. -# Which is a BadThing(tm). - -# We only build kernel-headers on the following... -%if 0%{?fedora} -%define nobuildarches i386 -%else -%define nobuildarches i386 i686 %{arm} -%endif - -%ifarch %nobuildarches -# disable BuildKernel commands -%define with_up 0 -%define with_debug 0 -%define with_pae 0 -%define with_zfcpdump 0 - -%define with_debuginfo 0 -%define with_perf 0 -%define with_tools 0 -%define with_bpftool 0 -%define with_selftests 0 -%define _enable_debug_packages 0 -%endif - -# Architectures we build tools/cpupower on -%if 0%{?fedora} -%define cpupowerarchs %{ix86} x86_64 ppc64le %{arm} aarch64 -%else -%define cpupowerarchs i686 x86_64 ppc64le aarch64 -%endif - -%if 0%{?use_vdso} - -%if 0%{?skip_nonpae_vdso} -%define _use_vdso 0 -%else -%define _use_vdso 1 -%endif - -%else -%define _use_vdso 0 -%endif - -# If build of debug packages is disabled, we need to know if we want to create -# meta debug packages or not, after we define with_debug for all specific cases -# above. So this must be at the end here, after all cases of with_debug or not. -%define with_debug_meta 0 -%if !%{debugbuildsenabled} -%if %{with_debug} -%define with_debug_meta 1 -%endif -%define with_debug 0 -%endif - - -# -# Packages that need to be installed before the kernel is, because the %%post -# scripts use them. -# -%define kernel_prereq coreutils, systemd >= 203-2, /usr/bin/kernel-install -%define initrd_prereq dracut >= 027 - - -Name: kernel -License: GPLv2 and Redistributable, no modification permitted -URL: https://www.kernel.org/ -Version: %{specversion} -Release: %{pkg_release} -# DO NOT CHANGE THE 'ExclusiveArch' LINE TO TEMPORARILY EXCLUDE AN ARCHITECTURE BUILD. -# SET %%nobuildarches (ABOVE) INSTEAD -%if 0%{?fedora} -ExclusiveArch: noarch x86_64 s390x %{arm} aarch64 ppc64le -%else -ExclusiveArch: noarch i386 i686 x86_64 s390x %{arm} aarch64 ppc64le -%endif -ExclusiveOS: Linux -%ifnarch %{nobuildarches} -Requires: kernel-core-uname-r = %{KVERREL} -Requires: kernel-modules-uname-r = %{KVERREL} -%endif - - -# -# List the packages used during the kernel build -# -BuildRequires: kmod, patch, bash, coreutils, tar, git-core, which -BuildRequires: bzip2, xz, findutils, gzip, m4, perl-interpreter, perl-Carp, perl-devel, perl-generators, make, diffutils, gawk -BuildRequires: gcc, binutils, redhat-rpm-config, hmaccalc, bison, flex, gcc-c++ -BuildRequires: net-tools, hostname, bc, elfutils-devel -BuildRequires: dwarves -BuildRequires: python3-devel -BuildRequires: gcc-plugin-devel -# glibc-static is required for a consistent build environment (specifically -# CONFIG_CC_CAN_LINK_STATIC=y). -BuildRequires: glibc-static -%ifnarch %{nobuildarches} noarch -BuildRequires: bpftool -%endif -%if %{with_headers} -BuildRequires: rsync -%endif -%if %{with_doc} -BuildRequires: xmlto, asciidoc, python3-sphinx, python3-sphinx_rtd_theme -%endif -%if %{with_sparse} -BuildRequires: sparse -%endif -%if %{with_perf} -BuildRequires: zlib-devel binutils-devel newt-devel perl(ExtUtils::Embed) bison flex xz-devel -BuildRequires: audit-libs-devel -BuildRequires: java-devel -BuildRequires: libbpf-devel -BuildRequires: libbabeltrace-devel -BuildRequires: libtraceevent-devel -%ifnarch %{arm} s390x -BuildRequires: numactl-devel -%endif -%ifarch aarch64 -BuildRequires: opencsd-devel >= 1.0.0 -%endif -%endif -%if %{with_tools} -BuildRequires: gettext ncurses-devel -BuildRequires: libcap-devel libcap-ng-devel -%ifnarch s390x -BuildRequires: pciutils-devel -%endif -%ifarch i686 x86_64 -BuildRequires: libnl3-devel -%endif -%endif -%if %{with_tools} || %{signmodules} || %{signkernel} -BuildRequires: openssl-devel -%endif -%if %{with_bpftool} -BuildRequires: python3-docutils -BuildRequires: zlib-devel binutils-devel -%endif -%if %{with_selftests} -BuildRequires: clang llvm -%ifnarch %{arm} -BuildRequires: numactl-devel -%endif -BuildRequires: libcap-devel libcap-ng-devel rsync libmnl-devel -%endif -BuildConflicts: rhbuildsys(DiskFree) < 500Mb -%if %{with_debuginfo} -BuildRequires: rpm-build, elfutils -BuildConflicts: rpm < 4.13.0.1-19 -BuildConflicts: dwarves < 1.13 -# Most of these should be enabled after more investigation -%undefine _include_minidebuginfo -%undefine _find_debuginfo_dwz_opts -%undefine _unique_build_ids -%undefine _unique_debug_names -%undefine _unique_debug_srcs -%undefine _debugsource_packages -%undefine _debuginfo_subpackages -%global _find_debuginfo_opts -r -%global _missing_build_ids_terminate_build 1 -%global _no_recompute_build_ids 1 -%endif -%if %{with_kabidwchk} || %{with_kabidw_base} -BuildRequires: kabi-dw -%endif - -%if %{signkernel}%{signmodules} -BuildRequires: openssl -%if %{signkernel} -# ELN uses Fedora signing process, so exclude -%if 0%{?rhel}%{?centos} && !0%{?eln} -BuildRequires: system-sb-certs -%endif -%ifarch x86_64 aarch64 -BuildRequires: nss-tools -BuildRequires: pesign >= 0.10-4 -%endif -%endif -%endif - -%if %{with_cross} -BuildRequires: binutils-%{_build_arch}-linux-gnu, gcc-%{_build_arch}-linux-gnu -%define cross_opts CROSS_COMPILE=%{_build_arch}-linux-gnu- -%define __strip %{_build_arch}-linux-gnu-strip -%endif - -# These below are required to build man pages -%if %{with_perf} -BuildRequires: xmlto -%endif -%if %{with_perf} || %{with_tools} -BuildRequires: asciidoc -%endif - -%if %{with toolchain_clang} -BuildRequires: clang -%endif - -%if %{with clang_lto} -BuildRequires: llvm -BuildRequires: lld -%endif - -# Because this is the kernel, it's hard to get a single upstream URL -# to represent the base without needing to do a bunch of patching. This -# tarball is generated from a src-git tree. If you want to see the -# exact git commit you can run -# -# xzcat -qq ${TARBALL} | git get-tar-commit-id -Source0: linux-%{tarfile_release}.tar.xz - -Source1: Makefile.rhelver - - -# Name of the packaged file containing signing key -%ifarch ppc64le -%define signing_key_filename kernel-signing-ppc.cer -%endif -%ifarch s390x -%define signing_key_filename kernel-signing-s390.cer -%endif - -%if %{?released_kernel} - -Source10: redhatsecurebootca5.cer -Source11: redhatsecurebootca1.cer -Source12: redhatsecureboot501.cer -Source13: redhatsecureboot301.cer -Source14: secureboot_s390.cer -Source15: secureboot_ppc.cer - -%define secureboot_ca_1 %{SOURCE10} -%define secureboot_ca_0 %{SOURCE11} -%ifarch x86_64 aarch64 -%define secureboot_key_1 %{SOURCE12} -%define pesign_name_1 redhatsecureboot501 -%define secureboot_key_0 %{SOURCE13} -%define pesign_name_0 redhatsecureboot301 -%endif -%ifarch s390x -%define secureboot_key_0 %{SOURCE14} -%define pesign_name_0 redhatsecureboot302 -%endif -%ifarch ppc64le -%define secureboot_key_0 %{SOURCE15} -%define pesign_name_0 redhatsecureboot303 -%endif - -# released_kernel -%else - -Source10: redhatsecurebootca4.cer -Source11: redhatsecurebootca2.cer -Source12: redhatsecureboot401.cer -Source13: redhatsecureboot003.cer - -%define secureboot_ca_1 %{SOURCE10} -%define secureboot_ca_0 %{SOURCE11} -%define secureboot_key_1 %{SOURCE12} -%define pesign_name_1 redhatsecureboot401 -%define secureboot_key_0 %{SOURCE13} -%define pesign_name_0 redhatsecureboot003 - -# released_kernel -%endif - -Source20: mod-denylist.sh -Source21: mod-sign.sh -Source22: parallel_xz.sh - -%define modsign_cmd %{SOURCE21} - -%if 0%{?include_rhel} -Source23: x509.genkey.rhel - -Source24: kernel-aarch64-rhel.config -Source25: kernel-aarch64-debug-rhel.config -Source26: mod-extra.list.rhel - -Source27: kernel-ppc64le-rhel.config -Source28: kernel-ppc64le-debug-rhel.config -Source29: kernel-s390x-rhel.config -Source30: kernel-s390x-debug-rhel.config -Source31: kernel-s390x-zfcpdump-rhel.config -Source32: kernel-x86_64-rhel.config -Source33: kernel-x86_64-debug-rhel.config - -Source34: filter-x86_64.sh.rhel -Source35: filter-armv7hl.sh.rhel -Source37: filter-aarch64.sh.rhel -Source38: filter-ppc64le.sh.rhel -Source39: filter-s390x.sh.rhel -Source40: filter-modules.sh.rhel - -Source41: x509.genkey.centos -%endif - -%if 0%{?include_fedora} -Source50: x509.genkey.fedora -Source51: mod-extra.list.fedora - -Source52: kernel-aarch64-fedora.config -Source53: kernel-aarch64-debug-fedora.config -Source54: kernel-armv7hl-fedora.config -Source55: kernel-armv7hl-debug-fedora.config -Source56: kernel-armv7hl-lpae-fedora.config -Source57: kernel-armv7hl-lpae-debug-fedora.config -Source60: kernel-ppc64le-fedora.config -Source61: kernel-ppc64le-debug-fedora.config -Source62: kernel-s390x-fedora.config -Source63: kernel-s390x-debug-fedora.config -Source64: kernel-x86_64-fedora.config -Source65: kernel-x86_64-debug-fedora.config - -Source67: filter-x86_64.sh.fedora -Source68: filter-armv7hl.sh.fedora -Source70: filter-aarch64.sh.fedora -Source71: filter-ppc64le.sh.fedora -Source72: filter-s390x.sh.fedora -Source73: filter-modules.sh.fedora -%endif - -Source75: partial-kgcov-snip.config -Source80: generate_all_configs.sh -Source81: process_configs.sh - -Source82: update_scripts.sh - -Source84: mod-internal.list - -Source100: rheldup3.x509 -Source101: rhelkpatch1.x509 - -Source200: check-kabi - -Source201: Module.kabi_aarch64 -Source202: Module.kabi_ppc64le -Source203: Module.kabi_s390x -Source204: Module.kabi_x86_64 - -Source210: Module.kabi_dup_aarch64 -Source211: Module.kabi_dup_ppc64le -Source212: Module.kabi_dup_s390x -Source213: Module.kabi_dup_x86_64 - -Source300: kernel-abi-stablelists-%{specversion}-%{pkgrelease}.tar.bz2 -Source301: kernel-kabi-dw-%{specversion}-%{pkgrelease}.tar.bz2 - -# Sources for kernel-tools -Source2000: cpupower.service -Source2001: cpupower.config -Source2002: kvm_stat.logrotate - -# Some people enjoy building customized kernels from the dist-git in Fedora and -# use this to override configuration options. One day they may all use the -# source tree, but in the mean time we carry this to support the legacy workflow -Source3000: merge.pl -Source3001: kernel-local -%if %{patchlist_changelog} -Source3002: Patchlist.changelog -%endif - -Source4000: README.rst -Source4001: rpminspect.yaml -Source4002: gating.yaml - -## Patches needed for building this package - -%if !%{nopatches} - -Patch1: patch-%{patchversion}-redhat.patch -%endif - -# empty final patch to facilitate testing of kernel patches -Patch999999: linux-kernel-test.patch - -# END OF PATCH DEFINITIONS - -%description -The kernel meta package - -# -# This macro does requires, provides, conflicts, obsoletes for a kernel package. -# %%kernel_reqprovconf <subpackage> -# It uses any kernel_<subpackage>_conflicts and kernel_<subpackage>_obsoletes -# macros defined above. -# -%define kernel_reqprovconf \ -Provides: kernel = %{specversion}-%{pkg_release}\ -Provides: kernel-%{_target_cpu} = %{specversion}-%{pkg_release}%{?1:+%{1}}\ -Provides: kernel-drm-nouveau = 16\ -Provides: kernel-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires(pre): %{kernel_prereq}\ -Requires(pre): %{initrd_prereq}\ -Requires(pre): ((linux-firmware >= 20150904-56.git6ebf5d57) if linux-firmware)\ -Recommends: linux-firmware\ -Requires(preun): systemd >= 200\ -Conflicts: xfsprogs < 4.3.0-1\ -Conflicts: xorg-x11-drv-vmmouse < 13.0.99\ -%{expand:%%{?kernel%{?1:_%{1}}_conflicts:Conflicts: %%{kernel%{?1:_%{1}}_conflicts}}}\ -%{expand:%%{?kernel%{?1:_%{1}}_obsoletes:Obsoletes: %%{kernel%{?1:_%{1}}_obsoletes}}}\ -%{expand:%%{?kernel%{?1:_%{1}}_provides:Provides: %%{kernel%{?1:_%{1}}_provides}}}\ -# We can't let RPM do the dependencies automatic because it'll then pick up\ -# a correct but undesirable perl dependency from the module headers which\ -# isn't required for the kernel proper to function\ -AutoReq: no\ -AutoProv: yes\ -%{nil} - - -%package doc -Summary: Various documentation bits found in the kernel source -Group: Documentation -%description doc -This package contains documentation files from the kernel -source. Various bits of information about the Linux kernel and the -device drivers shipped with it are documented in these files. - -You'll want to install this package if you need a reference to the -options that can be passed to Linux kernel modules at load time. - - -%package headers -Summary: Header files for the Linux kernel for use by glibc -Obsoletes: glibc-kernheaders < 3.0-46 -Provides: glibc-kernheaders = 3.0-46 -%description headers -Kernel-headers includes the C header files that specify the interface -between the Linux kernel and userspace libraries and programs. The -header files define structures and constants that are needed for -building most standard programs and are also needed for rebuilding the -glibc package. - -%package cross-headers -Summary: Header files for the Linux kernel for use by cross-glibc -%description cross-headers -Kernel-cross-headers includes the C header files that specify the interface -between the Linux kernel and userspace libraries and programs. The -header files define structures and constants that are needed for -building most standard programs and are also needed for rebuilding the -cross-glibc package. - - -%package debuginfo-common-%{_target_cpu} -Summary: Kernel source files used by %{name}-debuginfo packages -Provides: installonlypkg(kernel) -%description debuginfo-common-%{_target_cpu} -This package is required by %{name}-debuginfo subpackages. -It provides the kernel source files common to all builds. - -%if %{with_perf} -%package -n perf -Summary: Performance monitoring for the Linux kernel -Requires: bzip2 -License: GPLv2 -%description -n perf -This package contains the perf tool, which enables performance monitoring -of the Linux kernel. - -%package -n perf-debuginfo -Summary: Debug information for package perf -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release} -AutoReqProv: no -%description -n perf-debuginfo -This package provides debug information for the perf package. - -# Note that this pattern only works right to match the .build-id -# symlinks because of the trailing nonmatching alternation and -# the leading .*, because of find-debuginfo.sh's buggy handling -# of matching the pattern against the symlinks file. -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{_bindir}/perf(\.debug)?|.*%%{_libexecdir}/perf-core/.*|.*%%{_libdir}/libperf-jvmti.so(\.debug)?|XXX' -o perf-debuginfo.list} - -%package -n python3-perf -Summary: Python bindings for apps which will manipulate perf events -%description -n python3-perf -The python3-perf package contains a module that permits applications -written in the Python programming language to use the interface -to manipulate perf events. - -%package -n python3-perf-debuginfo -Summary: Debug information for package perf python bindings -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release} -AutoReqProv: no -%description -n python3-perf-debuginfo -This package provides debug information for the perf python bindings. - -# the python_sitearch macro should already be defined from above -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{python3_sitearch}/perf.*so(\.debug)?|XXX' -o python3-perf-debuginfo.list} - -# with_perf -%endif - -%if %{with_tools} -%package -n kernel-tools -Summary: Assortment of tools for the Linux kernel -License: GPLv2 -%ifarch %{cpupowerarchs} -Provides: cpupowerutils = 1:009-0.6.p1 -Obsoletes: cpupowerutils < 1:009-0.6.p1 -Provides: cpufreq-utils = 1:009-0.6.p1 -Provides: cpufrequtils = 1:009-0.6.p1 -Obsoletes: cpufreq-utils < 1:009-0.6.p1 -Obsoletes: cpufrequtils < 1:009-0.6.p1 -Obsoletes: cpuspeed < 1:1.5-16 -Requires: kernel-tools-libs = %{version}-%{release} -%endif -%define __requires_exclude ^%{_bindir}/python -%description -n kernel-tools -This package contains the tools/ directory from the kernel source -and the supporting documentation. - -%package -n kernel-tools-libs -Summary: Libraries for the kernels-tools -License: GPLv2 -%description -n kernel-tools-libs -This package contains the libraries built from the tools/ directory -from the kernel source. - -%package -n kernel-tools-libs-devel -Summary: Assortment of tools for the Linux kernel -License: GPLv2 -Requires: kernel-tools = %{version}-%{release} -%ifarch %{cpupowerarchs} -Provides: cpupowerutils-devel = 1:009-0.6.p1 -Obsoletes: cpupowerutils-devel < 1:009-0.6.p1 -%endif -Requires: kernel-tools-libs = %{version}-%{release} -Provides: kernel-tools-devel -%description -n kernel-tools-libs-devel -This package contains the development files for the tools/ directory from -the kernel source. - -%package -n kernel-tools-debuginfo -Summary: Debug information for package kernel-tools -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release} -AutoReqProv: no -%description -n kernel-tools-debuginfo -This package provides debug information for package kernel-tools. - -# Note that this pattern only works right to match the .build-id -# symlinks because of the trailing nonmatching alternation and -# the leading .*, because of find-debuginfo.sh's buggy handling -# of matching the pattern against the symlinks file. -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{_bindir}/centrino-decode(\.debug)?|.*%%{_bindir}/powernow-k8-decode(\.debug)?|.*%%{_bindir}/cpupower(\.debug)?|.*%%{_libdir}/libcpupower.*|.*%%{_bindir}/turbostat(\.debug)?|.*%%{_bindir}/x86_energy_perf_policy(\.debug)?|.*%%{_bindir}/tmon(\.debug)?|.*%%{_bindir}/lsgpio(\.debug)?|.*%%{_bindir}/gpio-hammer(\.debug)?|.*%%{_bindir}/gpio-event-mon(\.debug)?|.*%%{_bindir}/gpio-watch(\.debug)?|.*%%{_bindir}/iio_event_monitor(\.debug)?|.*%%{_bindir}/iio_generic_buffer(\.debug)?|.*%%{_bindir}/lsiio(\.debug)?|.*%%{_bindir}/intel-speed-select(\.debug)?|.*%%{_bindir}/page_owner_sort(\.debug)?|.*%%{_bindir}/slabinfo(\.debug)?|.*%%{_sbindir}/intel_sdsi(\.debug)?|XXX' -o kernel-tools-debuginfo.list} - -# with_tools -%endif - -%if %{with_bpftool} - -%package -n bpftool -Summary: Inspection and simple manipulation of eBPF programs and maps -License: GPLv2 -%description -n bpftool -This package contains the bpftool, which allows inspection and simple -manipulation of eBPF programs and maps. - -%package -n bpftool-debuginfo -Summary: Debug information for package bpftool -Group: Development/Debug -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release} -AutoReqProv: no -%description -n bpftool-debuginfo -This package provides debug information for the bpftool package. - -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{_sbindir}/bpftool(\.debug)?|XXX' -o bpftool-debuginfo.list} - -# with_bpftool -%endif - -%if %{with_selftests} - -%package selftests-internal -Summary: Kernel samples and selftests -License: GPLv2 -Requires: binutils, bpftool, iproute-tc, nmap-ncat, python3 -%description selftests-internal -Kernel sample programs and selftests. - -# Note that this pattern only works right to match the .build-id -# symlinks because of the trailing nonmatching alternation and -# the leading .*, because of find-debuginfo.sh's buggy handling -# of matching the pattern against the symlinks file. -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{_libexecdir}/(ksamples|kselftests)/.*|XXX' -o selftests-debuginfo.list} - -# with_selftests -%endif - -%if %{with_gcov} -%package gcov -Summary: gcov graph and source files for coverage data collection. -%description gcov -kernel-gcov includes the gcov graph and source files for gcov coverage collection. -%endif - -%package -n kernel-abi-stablelists -Summary: The Red Hat Enterprise Linux kernel ABI symbol stablelists -AutoReqProv: no -%description -n kernel-abi-stablelists -The kABI package contains information pertaining to the Red Hat Enterprise -Linux kernel ABI, including lists of kernel symbols that are needed by -external Linux kernel modules, and a yum plugin to aid enforcement. - -%if %{with_kabidw_base} -%package kernel-kabidw-base-internal -Summary: The baseline dataset for kABI verification using DWARF data -Group: System Environment/Kernel -AutoReqProv: no -%description kernel-kabidw-base-internal -The package contains data describing the current ABI of the Red Hat Enterprise -Linux kernel, suitable for the kabi-dw tool. -%endif - -# -# This macro creates a kernel-<subpackage>-debuginfo package. -# %%kernel_debuginfo_package <subpackage> -# -# Explanation of the find_debuginfo_opts: We build multiple kernels (debug -# pae etc.) so the regex filters those kernels appropriately. We also -# have to package several binaries as part of kernel-devel but getting -# unique build-ids is tricky for these userspace binaries. We don't really -# care about debugging those so we just filter those out and remove it. -%define kernel_debuginfo_package() \ -%package %{?1:%{1}-}debuginfo\ -Summary: Debug information for package %{name}%{?1:-%{1}}\ -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release}\ -Provides: %{name}%{?1:-%{1}}-debuginfo-%{_target_cpu} = %{version}-%{release}\ -Provides: installonlypkg(kernel)\ -AutoReqProv: no\ -%description %{?1:%{1}-}debuginfo\ -This package provides debug information for package %{name}%{?1:-%{1}}.\ -This is required to use SystemTap with %{name}%{?1:-%{1}}-%{KVERREL}.\ -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} --keep-section '.BTF' -p '.*\/usr\/src\/kernels/.*|XXX' -o ignored-debuginfo.list -p '/.*/%%{KVERREL_RE}%{?1:[+]%{1}}/.*|/.*%%{KVERREL_RE}%{?1:\+%{1}}(\.debug)?' -o debuginfo%{?1}.list}\ -%{nil} - -# -# This macro creates a kernel-<subpackage>-devel package. -# %%kernel_devel_package [-m] <subpackage> <pretty-name> -# -%define kernel_devel_package(m) \ -%package %{?1:%{1}-}devel\ -Summary: Development package for building kernel modules to match the %{?2:%{2} }kernel\ -Provides: kernel%{?1:-%{1}}-devel-%{_target_cpu} = %{version}-%{release}\ -Provides: kernel-devel-%{_target_cpu} = %{version}-%{release}%{?1:+%{1}}\ -Provides: kernel-devel-uname-r = %{KVERREL}%{?1:+%{1}}\ -Provides: installonlypkg(kernel)\ -AutoReqProv: no\ -Requires(pre): findutils\ -Requires: findutils\ -Requires: perl-interpreter\ -Requires: openssl-devel\ -Requires: elfutils-libelf-devel\ -Requires: bison\ -Requires: flex\ -Requires: make\ -Requires: gcc\ -%if %{-m:1}%{!-m:0}\ -Requires: kernel-devel-uname-r = %{KVERREL}\ -%endif\ -%description %{?1:%{1}-}devel\ -This package provides kernel headers and makefiles sufficient to build modules\ -against the %{?2:%{2} }kernel package.\ -%{nil} - -# -# This macro creates an empty kernel-<subpackage>-devel-matched package that -# requires both the core and devel packages locked on the same version. -# %%kernel_devel_matched_package [-m] <subpackage> <pretty-name> -# -%define kernel_devel_matched_package(m) \ -%package %{?1:%{1}-}devel-matched\ -Summary: Meta package to install matching core and devel packages for a given %{?2:%{2} }kernel\ -Requires: kernel%{?1:-%{1}}-devel = %{version}-%{release}\ -Requires: kernel%{?1:-%{1}}-core = %{version}-%{release}\ -%description %{?1:%{1}-}devel-matched\ -This meta package is used to install matching core and devel packages for a given %{?2:%{2} }kernel.\ -%{nil} - -# -# kernel-<variant>-ipaclones-internal package -# -%define kernel_ipaclones_package() \ -%package %{?1:%{1}-}ipaclones-internal\ -Summary: *.ipa-clones files generated by -fdump-ipa-clones for kernel%{?1:-%{1}}\ -Group: System Environment/Kernel\ -AutoReqProv: no\ -%description %{?1:%{1}-}ipaclones-internal\ -This package provides *.ipa-clones files.\ -%{nil} - -# -# This macro creates a kernel-<subpackage>-modules-internal package. -# %%kernel_modules_internal_package <subpackage> <pretty-name> -# -%define kernel_modules_internal_package() \ -%package %{?1:%{1}-}modules-internal\ -Summary: Extra kernel modules to match the %{?2:%{2} }kernel\ -Group: System Environment/Kernel\ -Provides: kernel%{?1:-%{1}}-modules-internal-%{_target_cpu} = %{version}-%{release}\ -Provides: kernel%{?1:-%{1}}-modules-internal-%{_target_cpu} = %{version}-%{release}%{?1:+%{1}}\ -Provides: kernel%{?1:-%{1}}-modules-internal = %{version}-%{release}%{?1:+%{1}}\ -Provides: installonlypkg(kernel-module)\ -Provides: kernel%{?1:-%{1}}-modules-internal-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel%{?1:-%{1}}-modules-uname-r = %{KVERREL}%{?1:+%{1}}\ -AutoReq: no\ -AutoProv: yes\ -%description %{?1:%{1}-}modules-internal\ -This package provides kernel modules for the %{?2:%{2} }kernel package for Red Hat internal usage.\ -%{nil} - -# -# This macro creates a kernel-<subpackage>-modules-extra package. -# %%kernel_modules_extra_package [-m] <subpackage> <pretty-name> -# -%define kernel_modules_extra_package(m) \ -%package %{?1:%{1}-}modules-extra\ -Summary: Extra kernel modules to match the %{?2:%{2} }kernel\ -Provides: kernel%{?1:-%{1}}-modules-extra-%{_target_cpu} = %{version}-%{release}\ -Provides: kernel%{?1:-%{1}}-modules-extra-%{_target_cpu} = %{version}-%{release}%{?1:+%{1}}\ -Provides: kernel%{?1:-%{1}}-modules-extra = %{version}-%{release}%{?1:+%{1}}\ -Provides: installonlypkg(kernel-module)\ -Provides: kernel%{?1:-%{1}}-modules-extra-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel%{?1:-%{1}}-modules-uname-r = %{KVERREL}%{?1:+%{1}}\ -%if %{-m:1}%{!-m:0}\ -Requires: kernel-modules-extra-uname-r = %{KVERREL}\ -%endif\ -AutoReq: no\ -AutoProv: yes\ -%description %{?1:%{1}-}modules-extra\ -This package provides less commonly used kernel modules for the %{?2:%{2} }kernel package.\ -%{nil} - -# -# This macro creates a kernel-<subpackage>-modules package. -# %%kernel_modules_package [-m] <subpackage> <pretty-name> -# -%define kernel_modules_package(m) \ -%package %{?1:%{1}-}modules\ -Summary: kernel modules to match the %{?2:%{2}-}core kernel\ -Provides: kernel%{?1:-%{1}}-modules-%{_target_cpu} = %{version}-%{release}\ -Provides: kernel-modules-%{_target_cpu} = %{version}-%{release}%{?1:+%{1}}\ -Provides: kernel-modules = %{version}-%{release}%{?1:+%{1}}\ -Provides: installonlypkg(kernel-module)\ -Provides: kernel%{?1:-%{1}}-modules-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel-uname-r = %{KVERREL}%{?1:+%{1}}\ -%if %{-m:1}%{!-m:0}\ -Requires: kernel-modules-uname-r = %{KVERREL}\ -%endif\ -AutoReq: no\ -AutoProv: yes\ -%description %{?1:%{1}-}modules\ -This package provides commonly used kernel modules for the %{?2:%{2}-}core kernel package.\ -%{nil} - -# -# this macro creates a kernel-<subpackage> meta package. -# %%kernel_meta_package <subpackage> -# -%define kernel_meta_package() \ -%package %{1}\ -summary: kernel meta-package for the %{1} kernel\ -Requires: kernel-%{1}-core-uname-r = %{KVERREL}+%{1}\ -Requires: kernel-%{1}-modules-uname-r = %{KVERREL}+%{1}\ -Provides: installonlypkg(kernel)\ -%description %{1}\ -The meta-package for the %{1} kernel\ -%{nil} - -# -# This macro creates a kernel-<subpackage> and its -devel and -debuginfo too. -# %%define variant_summary The Linux kernel compiled for <configuration> -# %%kernel_variant_package [-n <pretty-name>] [-m] <subpackage> -# -%define kernel_variant_package(n:m) \ -%package %{?1:%{1}-}core\ -Summary: %{variant_summary}\ -Provides: kernel-%{?1:%{1}-}core-uname-r = %{KVERREL}%{?1:+%{1}}\ -Provides: installonlypkg(kernel)\ -%if %{-m:1}%{!-m:0}\ -Requires: kernel-core-uname-r = %{KVERREL}\ -%endif\ -%{expand:%%kernel_reqprovconf}\ -%if %{?1:1} %{!?1:0} \ -%{expand:%%kernel_meta_package %{?1:%{1}}}\ -%endif\ -%{expand:%%kernel_devel_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}} %{-m:%{-m}}}\ -%{expand:%%kernel_devel_matched_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}} %{-m:%{-m}}}\ -%{expand:%%kernel_modules_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}} %{-m:%{-m}}}\ -%{expand:%%kernel_modules_extra_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}} %{-m:%{-m}}}\ -%if %{-m:0}%{!-m:1}\ -%{expand:%%kernel_modules_internal_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}}}\ -%{expand:%%kernel_debuginfo_package %{?1:%{1}}}\ -%endif\ -%{nil} - -# Now, each variant package. - -%if %{with_pae} -%define variant_summary The Linux kernel compiled for Cortex-A15 -%kernel_variant_package lpae -%description lpae-core -This package includes a version of the Linux kernel with support for -Cortex-A15 devices with LPAE and HW virtualisation support -%endif - -%if %{with_zfcpdump} -%define variant_summary The Linux kernel compiled for zfcpdump usage -%kernel_variant_package zfcpdump -%description zfcpdump-core -The kernel package contains the Linux kernel (vmlinuz) for use by the -zfcpdump infrastructure. -# with_zfcpdump -%endif - -%define variant_summary The Linux kernel compiled with extra debugging enabled -%if !%{debugbuildsenabled} -%kernel_variant_package -m debug -%else -%kernel_variant_package debug -%endif -%description debug-core -The kernel package contains the Linux kernel (vmlinuz), the core of any -Linux operating system. The kernel handles the basic functions -of the operating system: memory allocation, process allocation, device -input and output, etc. - -This variant of the kernel has numerous debugging options enabled. -It should only be installed when trying to gather additional information -on kernel bugs, as some of these options impact performance noticably. - -# And finally the main -core package - -%define variant_summary The Linux kernel -%kernel_variant_package -%description core -The kernel package contains the Linux kernel (vmlinuz), the core of any -Linux operating system. The kernel handles the basic functions -of the operating system: memory allocation, process allocation, device -input and output, etc. - -%if %{with_ipaclones} -%kernel_ipaclones_package -%endif - -%prep -# do a few sanity-checks for --with *only builds -%if %{with_baseonly} -%if !%{with_up} -echo "Cannot build --with baseonly, up build is disabled" -exit 1 -%endif -%endif - -# more sanity checking; do it quietly -if [ "%{patches}" != "%%{patches}" ] ; then - for patch in %{patches} ; do - if [ ! -f $patch ] ; then - echo "ERROR: Patch ${patch##/*/} listed in specfile but is missing" - exit 1 - fi - done -fi 2>/dev/null - -patch_command='patch -p1 -F1 -s' -ApplyPatch() -{ - local patch=$1 - shift - if [ ! -f $RPM_SOURCE_DIR/$patch ]; then - exit 1 - fi - if ! grep -E "^Patch[0-9]+: $patch\$" %{_specdir}/${RPM_PACKAGE_NAME}.spec ; then - if [ "${patch:0:8}" != "patch-%{kversion}." ] ; then - echo "ERROR: Patch $patch not listed as a source patch in specfile" - exit 1 - fi - fi 2>/dev/null - case "$patch" in - *.bz2) bunzip2 < "$RPM_SOURCE_DIR/$patch" | $patch_command ${1+"$@"} ;; - *.gz) gunzip < "$RPM_SOURCE_DIR/$patch" | $patch_command ${1+"$@"} ;; - *.xz) unxz < "$RPM_SOURCE_DIR/$patch" | $patch_command ${1+"$@"} ;; - *) $patch_command ${1+"$@"} < "$RPM_SOURCE_DIR/$patch" ;; - esac -} - -# don't apply patch if it's empty -ApplyOptionalPatch() -{ - local patch=$1 - shift - if [ ! -f $RPM_SOURCE_DIR/$patch ]; then - exit 1 - fi - local C=$(wc -l $RPM_SOURCE_DIR/$patch | awk '{print $1}') - if [ "$C" -gt 9 ]; then - ApplyPatch $patch ${1+"$@"} - fi -} - -%setup -q -n kernel-%{tarfile_release} -c -mv linux-%{tarfile_release} linux-%{KVERREL} - -cd linux-%{KVERREL} -cp -a %{SOURCE1} . - -%if !%{nopatches} - -ApplyOptionalPatch patch-%{patchversion}-redhat.patch -%endif - -ApplyOptionalPatch linux-kernel-test.patch - -# END OF PATCH APPLICATIONS - -# Any further pre-build tree manipulations happen here. - -chmod +x scripts/checkpatch.pl -mv COPYING COPYING-%{version}-%{release} - -# This Prevents scripts/setlocalversion from mucking with our version numbers. -touch .scmversion - -# Mangle /usr/bin/python shebangs to /usr/bin/python3 -# Mangle all Python shebangs to be Python 3 explicitly -# -p preserves timestamps -# -n prevents creating ~backup files -# -i specifies the interpreter for the shebang -# This fixes errors such as -# *** ERROR: ambiguous python shebang in /usr/bin/kvm_stat: #!/usr/bin/python. Change it to python3 (or python2) explicitly. -# We patch all sources below for which we got a report/error. -pathfix.py -i "%{__python3} %{py3_shbang_opts}" -p -n \ - tools/kvm/kvm_stat/kvm_stat \ - scripts/show_delta \ - scripts/diffconfig \ - scripts/bloat-o-meter \ - scripts/jobserver-exec \ - tools \ - Documentation \ - scripts/clang-tools - -# only deal with configs if we are going to build for the arch -%ifnarch %nobuildarches - -if [ -L configs ]; then - rm -f configs -fi -mkdir configs -cd configs - -# Drop some necessary files from the source dir into the buildroot -cp $RPM_SOURCE_DIR/kernel-*.config . -cp %{SOURCE80} . -# merge.pl -cp %{SOURCE3000} . -# kernel-local -cp %{SOURCE3001} . -FLAVOR=%{primary_target} SPECVERSION=%{version} ./generate_all_configs.sh %{debugbuildsenabled} - -# Merge in any user-provided local config option changes -%ifnarch %nobuildarches -for i in %{all_arch_configs} -do - mv $i $i.tmp - ./merge.pl %{SOURCE3001} $i.tmp > $i -%if %{with_gcov} - echo "Merging with gcov options" - cat %{SOURCE75} - mv $i $i.tmp - ./merge.pl %{SOURCE75} $i.tmp > $i -%endif - rm $i.tmp -done -%endif - -%if %{with clang_lto} -for i in *aarch64*.config *x86_64*.config; do - sed -i 's/# CONFIG_LTO_CLANG_THIN is not set/CONFIG_LTO_CLANG_THIN=y/' $i - sed -i 's/CONFIG_LTO_NONE=y/# CONFIG_LTO_NONE is not set/' $i -done -%endif - -# Add DUP and kpatch certificates to system trusted keys for RHEL -%if 0%{?rhel} -%if %{signkernel}%{signmodules} -openssl x509 -inform der -in %{SOURCE100} -out rheldup3.pem -openssl x509 -inform der -in %{SOURCE101} -out rhelkpatch1.pem -cat rheldup3.pem rhelkpatch1.pem > ../certs/rhel.pem -%ifarch s390x ppc64le -openssl x509 -inform der -in %{secureboot_ca_0} -out secureboot.pem -cat secureboot.pem >> ../certs/rhel.pem -%endif -for i in *.config; do - sed -i 's@CONFIG_SYSTEM_TRUSTED_KEYS=""@CONFIG_SYSTEM_TRUSTED_KEYS="certs/rhel.pem"@' $i -done -%endif -%endif - -cp %{SOURCE81} . -OPTS="" -%if %{with_configchecks} - OPTS="$OPTS -w -n -c" -%endif -%if %{with clang_lto} -for opt in %{clang_make_opts}; do - OPTS="$OPTS -m $opt" -done -%endif -RHJOBS=$RPM_BUILD_NCPUS PACKAGE_NAME=kernel ./process_configs.sh $OPTS ${specversion} - -cp %{SOURCE82} . -RPM_SOURCE_DIR=$RPM_SOURCE_DIR ./update_scripts.sh %{primary_target} - -# We may want to override files from the primary target in case of building -# against a flavour of it (eg. centos not rhel), thus override it here if -# necessary -if [ "%{primary_target}" == "rhel" ]; then -%if 0%{?centos} - echo "Updating scripts/sources to centos version" - RPM_SOURCE_DIR=$RPM_SOURCE_DIR ./update_scripts.sh centos -%else - echo "Not updating scripts/sources to centos version" -%endif -fi - -# end of kernel config -%endif - -cd .. -# # End of Configs stuff - -# get rid of unwanted files resulting from patch fuzz -find . \( -name "*.orig" -o -name "*~" \) -delete >/dev/null - -# remove unnecessary SCM files -find . -name .gitignore -delete >/dev/null - -cd .. - -### -### build -### -%build - -%if %{with_sparse} -%define sparse_mflags C=1 -%endif - -cp_vmlinux() -{ - eu-strip --remove-comment -o "$2" "$1" -} - -# Note we need to disable these flags for cross builds because the flags -# from redhat-rpm-config assume that host == target so target arch -# flags cause issues with the host compiler. -%if !%{with_cross} -%define build_hostcflags %{?build_cflags} -%define build_hostldflags %{?build_ldflags} -%endif - -%define make %{__make} %{?cross_opts} %{?make_opts} HOSTCFLAGS="%{?build_hostcflags}" HOSTLDFLAGS="%{?build_hostldflags}" - -InitBuildVars() { - # Initialize the kernel .config file and create some variables that are - # needed for the actual build process. - - Variant=$1 - - # Pick the right kernel config file - Config=kernel-%{version}-%{_target_cpu}${Variant:+-${Variant}}.config - DevelDir=/usr/src/kernels/%{KVERREL}${Variant:++${Variant}} - - KernelVer=%{version}-%{release}.%{_target_cpu}${Variant:++${Variant}} - - # make sure EXTRAVERSION says what we want it to say - # Trim the release if this is a CI build, since KERNELVERSION is limited to 64 characters - ShortRel=$(perl -e "print \"%{release}\" =~ s/\.pr\.[0-9A-Fa-f]{32}//r") - perl -p -i -e "s/^EXTRAVERSION.*/EXTRAVERSION = -${ShortRel}.%{_target_cpu}${Variant:++${Variant}}/" Makefile - - # if pre-rc1 devel kernel, must fix up PATCHLEVEL for our versioning scheme - # if we are post rc1 this should match anyway so this won't matter - perl -p -i -e 's/^PATCHLEVEL.*/PATCHLEVEL = %{patchlevel}/' Makefile - - %{make} %{?_smp_mflags} mrproper - cp configs/$Config .config - - %if %{signkernel}%{signmodules} - cp configs/x509.genkey certs/. - %endif - - Arch=`head -1 .config | cut -b 3-` - echo USING ARCH=$Arch - - KCFLAGS="%{?kcflags}" - - # add kpatch flags for base kernel - if [ "$Variant" == "" ]; then - KCFLAGS="$KCFLAGS %{?kpatch_kcflags}" - fi -} - -BuildKernel() { - MakeTarget=$1 - KernelImage=$2 - DoVDSO=$3 - Variant=$4 - InstallName=${5:-vmlinuz} - - DoModules=1 - if [ "$Variant" = "zfcpdump" ]; then - DoModules=0 - fi - - # When the bootable image is just the ELF kernel, strip it. - # We already copy the unstripped file into the debuginfo package. - if [ "$KernelImage" = vmlinux ]; then - CopyKernel=cp_vmlinux - else - CopyKernel=cp - fi - - InitBuildVars $Variant - - echo BUILDING A KERNEL FOR ${Variant} %{_target_cpu}... - - %{make} ARCH=$Arch olddefconfig >/dev/null - - # This ensures build-ids are unique to allow parallel debuginfo - perl -p -i -e "s/^CONFIG_BUILD_SALT.*/CONFIG_BUILD_SALT=\"%{KVERREL}\"/" .config - %{make} ARCH=$Arch KCFLAGS="$KCFLAGS" WITH_GCOV="%{?with_gcov}" %{?_smp_mflags} $MakeTarget %{?sparse_mflags} %{?kernel_mflags} - if [ $DoModules -eq 1 ]; then - %{make} ARCH=$Arch KCFLAGS="$KCFLAGS" WITH_GCOV="%{?with_gcov}" %{?_smp_mflags} modules %{?sparse_mflags} || exit 1 - fi - - mkdir -p $RPM_BUILD_ROOT/%{image_install_path} - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/systemtap -%if %{with_debuginfo} - mkdir -p $RPM_BUILD_ROOT%{debuginfodir}/%{image_install_path} -%endif - -%ifarch %{arm} aarch64 - %{make} ARCH=$Arch dtbs INSTALL_DTBS_PATH=$RPM_BUILD_ROOT/%{image_install_path}/dtb-$KernelVer - %{make} ARCH=$Arch dtbs_install INSTALL_DTBS_PATH=$RPM_BUILD_ROOT/%{image_install_path}/dtb-$KernelVer - cp -r $RPM_BUILD_ROOT/%{image_install_path}/dtb-$KernelVer $RPM_BUILD_ROOT/lib/modules/$KernelVer/dtb - find arch/$Arch/boot/dts -name '*.dtb' -type f -delete -%endif - - # Start installing the results - install -m 644 .config $RPM_BUILD_ROOT/boot/config-$KernelVer - install -m 644 .config $RPM_BUILD_ROOT/lib/modules/$KernelVer/config - install -m 644 System.map $RPM_BUILD_ROOT/boot/System.map-$KernelVer - install -m 644 System.map $RPM_BUILD_ROOT/lib/modules/$KernelVer/System.map - - # We estimate the size of the initramfs because rpm needs to take this size - # into consideration when performing disk space calculations. (See bz #530778) - dd if=/dev/zero of=$RPM_BUILD_ROOT/boot/initramfs-$KernelVer.img bs=1M count=20 - - if [ -f arch/$Arch/boot/zImage.stub ]; then - cp arch/$Arch/boot/zImage.stub $RPM_BUILD_ROOT/%{image_install_path}/zImage.stub-$KernelVer || : - cp arch/$Arch/boot/zImage.stub $RPM_BUILD_ROOT/lib/modules/$KernelVer/zImage.stub-$KernelVer || : - fi - - %if %{signkernel} - if [ "$KernelImage" = vmlinux ]; then - # We can't strip and sign $KernelImage in place, because - # we need to preserve original vmlinux for debuginfo. - # Use a copy for signing. - $CopyKernel $KernelImage $KernelImage.tosign - KernelImage=$KernelImage.tosign - CopyKernel=cp - fi - - # Sign the image if we're using EFI - # aarch64 kernels are gziped EFI images - KernelExtension=${KernelImage##*.} - if [ "$KernelExtension" == "gz" ]; then - SignImage=${KernelImage%.*} - else - SignImage=$KernelImage - fi - - %ifarch x86_64 aarch64 - %pesign -s -i $SignImage -o vmlinuz.tmp -a %{secureboot_ca_0} -c %{secureboot_key_0} -n %{pesign_name_0} - %pesign -s -i vmlinuz.tmp -o vmlinuz.signed -a %{secureboot_ca_1} -c %{secureboot_key_1} -n %{pesign_name_1} - rm vmlinuz.tmp - %endif - %ifarch s390x ppc64le - if [ -x /usr/bin/rpm-sign ]; then - rpm-sign --key "%{pesign_name_0}" --lkmsign $SignImage --output vmlinuz.signed - elif [ $DoModules -eq 1 ]; then - chmod +x scripts/sign-file - ./scripts/sign-file -p sha256 certs/signing_key.pem certs/signing_key.x509 $SignImage vmlinuz.signed - else - mv $SignImage vmlinuz.signed - fi - %endif - - if [ ! -s vmlinuz.signed ]; then - echo "pesigning failed" - exit 1 - fi - mv vmlinuz.signed $SignImage - if [ "$KernelExtension" == "gz" ]; then - gzip -f9 $SignImage - fi - # signkernel - %endif - - $CopyKernel $KernelImage \ - $RPM_BUILD_ROOT/%{image_install_path}/$InstallName-$KernelVer - chmod 755 $RPM_BUILD_ROOT/%{image_install_path}/$InstallName-$KernelVer - cp $RPM_BUILD_ROOT/%{image_install_path}/$InstallName-$KernelVer $RPM_BUILD_ROOT/lib/modules/$KernelVer/$InstallName - - # hmac sign the kernel for FIPS - echo "Creating hmac file: $RPM_BUILD_ROOT/%{image_install_path}/.vmlinuz-$KernelVer.hmac" - ls -l $RPM_BUILD_ROOT/%{image_install_path}/$InstallName-$KernelVer - (cd $RPM_BUILD_ROOT/%{image_install_path} && sha512hmac $InstallName-$KernelVer) > $RPM_BUILD_ROOT/%{image_install_path}/.vmlinuz-$KernelVer.hmac; - cp $RPM_BUILD_ROOT/%{image_install_path}/.vmlinuz-$KernelVer.hmac $RPM_BUILD_ROOT/lib/modules/$KernelVer/.vmlinuz.hmac - - if [ $DoModules -eq 1 ]; then - # Override $(mod-fw) because we don't want it to install any firmware - # we'll get it from the linux-firmware package and we don't want conflicts - %{make} %{?_smp_mflags} ARCH=$Arch INSTALL_MOD_PATH=$RPM_BUILD_ROOT %{?_smp_mflags} modules_install KERNELRELEASE=$KernelVer mod-fw= - fi - -%if %{with_gcov} - # install gcov-needed files to $BUILDROOT/$BUILD/...: - # gcov_info->filename is absolute path - # gcno references to sources can use absolute paths (e.g. in out-of-tree builds) - # sysfs symlink targets (set up at compile time) use absolute paths to BUILD dir - find . \( -name '*.gcno' -o -name '*.[chS]' \) -exec install -D '{}' "$RPM_BUILD_ROOT/$(pwd)/{}" \; -%endif - - # add an a noop %%defattr statement 'cause rpm doesn't like empty file list files - echo '%%defattr(-,-,-)' > ../kernel${Variant:+-${Variant}}-ldsoconf.list - if [ $DoVDSO -ne 0 ]; then - %{make} ARCH=$Arch INSTALL_MOD_PATH=$RPM_BUILD_ROOT vdso_install KERNELRELEASE=$KernelVer - if [ -s ldconfig-kernel.conf ]; then - install -D -m 444 ldconfig-kernel.conf \ - $RPM_BUILD_ROOT/etc/ld.so.conf.d/kernel-$KernelVer.conf - echo /etc/ld.so.conf.d/kernel-$KernelVer.conf >> ../kernel${Variant:+-${Variant}}-ldsoconf.list - fi - - rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/vdso/.build-id - fi - - # And save the headers/makefiles etc for building modules against - # - # This all looks scary, but the end result is supposed to be: - # * all arch relevant include/ files - # * all Makefile/Kconfig files - # * all script/ files - - rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/source - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - (cd $RPM_BUILD_ROOT/lib/modules/$KernelVer ; ln -s build source) - # dirs for additional modules per module-init-tools, kbuild/modules.txt - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/updates - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/weak-updates - # CONFIG_KERNEL_HEADER_TEST generates some extra files in the process of - # testing so just delete - find . -name *.h.s -delete - # first copy everything - cp --parents `find -type f -name "Makefile*" -o -name "Kconfig*"` $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - if [ ! -e Module.symvers ]; then - touch Module.symvers - fi - cp Module.symvers $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp System.map $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - if [ -s Module.markers ]; then - cp Module.markers $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - fi - - # create the kABI metadata for use in packaging - # NOTENOTE: the name symvers is used by the rpm backend - # NOTENOTE: to discover and run the /usr/lib/rpm/fileattrs/kabi.attr - # NOTENOTE: script which dynamically adds exported kernel symbol - # NOTENOTE: checksums to the rpm metadata provides list. - # NOTENOTE: if you change the symvers name, update the backend too - echo "**** GENERATING kernel ABI metadata ****" - gzip -c9 < Module.symvers > $RPM_BUILD_ROOT/boot/symvers-$KernelVer.gz - cp $RPM_BUILD_ROOT/boot/symvers-$KernelVer.gz $RPM_BUILD_ROOT/lib/modules/$KernelVer/symvers.gz - -%if %{with_kabichk} - echo "**** kABI checking is enabled in kernel SPEC file. ****" - chmod 0755 $RPM_SOURCE_DIR/check-kabi - if [ -e $RPM_SOURCE_DIR/Module.kabi_%{_target_cpu}$Variant ]; then - cp $RPM_SOURCE_DIR/Module.kabi_%{_target_cpu}$Variant $RPM_BUILD_ROOT/Module.kabi - $RPM_SOURCE_DIR/check-kabi -k $RPM_BUILD_ROOT/Module.kabi -s Module.symvers || exit 1 - # for now, don't keep it around. - rm $RPM_BUILD_ROOT/Module.kabi - else - echo "**** NOTE: Cannot find reference Module.kabi file. ****" - fi -%endif - -%if %{with_kabidupchk} - echo "**** kABI DUP checking is enabled in kernel SPEC file. ****" - if [ -e $RPM_SOURCE_DIR/Module.kabi_dup_%{_target_cpu}$Variant ]; then - cp $RPM_SOURCE_DIR/Module.kabi_dup_%{_target_cpu}$Variant $RPM_BUILD_ROOT/Module.kabi - $RPM_SOURCE_DIR/check-kabi -k $RPM_BUILD_ROOT/Module.kabi -s Module.symvers || exit 1 - # for now, don't keep it around. - rm $RPM_BUILD_ROOT/Module.kabi - else - echo "**** NOTE: Cannot find DUP reference Module.kabi file. ****" - fi -%endif - -%if %{with_kabidw_base} - # Don't build kabi base for debug kernels - if [ "$Variant" != "zfcpdump" -a "$Variant" != "debug" ]; then - mkdir -p $RPM_BUILD_ROOT/kabi-dwarf - tar xjvf %{SOURCE301} -C $RPM_BUILD_ROOT/kabi-dwarf - - mkdir -p $RPM_BUILD_ROOT/kabi-dwarf/stablelists - tar xjvf %{SOURCE300} -C $RPM_BUILD_ROOT/kabi-dwarf/stablelists - - echo "**** GENERATING DWARF-based kABI baseline dataset ****" - chmod 0755 $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh - $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh generate \ - "$RPM_BUILD_ROOT/kabi-dwarf/stablelists/kabi-current/kabi_stablelist_%{_target_cpu}" \ - "$(pwd)" \ - "$RPM_BUILD_ROOT/kabidw-base/%{_target_cpu}${Variant:+.${Variant}}" || : - - rm -rf $RPM_BUILD_ROOT/kabi-dwarf - fi -%endif - -%if %{with_kabidwchk} - if [ "$Variant" != "zfcpdump" ]; then - mkdir -p $RPM_BUILD_ROOT/kabi-dwarf - tar xjvf %{SOURCE301} -C $RPM_BUILD_ROOT/kabi-dwarf - if [ -d "$RPM_BUILD_ROOT/kabi-dwarf/base/%{_target_cpu}${Variant:+.${Variant}}" ]; then - mkdir -p $RPM_BUILD_ROOT/kabi-dwarf/stablelists - tar xjvf %{SOURCE300} -C $RPM_BUILD_ROOT/kabi-dwarf/stablelists - - echo "**** GENERATING DWARF-based kABI dataset ****" - chmod 0755 $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh - $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh generate \ - "$RPM_BUILD_ROOT/kabi-dwarf/stablelists/kabi-current/kabi_stablelist_%{_target_cpu}" \ - "$(pwd)" \ - "$RPM_BUILD_ROOT/kabi-dwarf/base/%{_target_cpu}${Variant:+.${Variant}}.tmp" || : - - echo "**** kABI DWARF-based comparison report ****" - $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh compare \ - "$RPM_BUILD_ROOT/kabi-dwarf/base/%{_target_cpu}${Variant:+.${Variant}}" \ - "$RPM_BUILD_ROOT/kabi-dwarf/base/%{_target_cpu}${Variant:+.${Variant}}.tmp" || : - echo "**** End of kABI DWARF-based comparison report ****" - else - echo "**** Baseline dataset for kABI DWARF-BASED comparison report not found ****" - fi - - rm -rf $RPM_BUILD_ROOT/kabi-dwarf - fi -%endif - - # then drop all but the needed Makefiles/Kconfig files - rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts - rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include - cp .config $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a scripts $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts/tracing - rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts/spdxcheck.py - -%ifarch s390x - # CONFIG_EXPOLINE_EXTERN=y produces arch/s390/lib/expoline.o - # which is needed during external module build. - if [ -f arch/s390/lib/expoline.o ]; then - cp -a --parents arch/s390/lib/expoline.o $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - fi -%endif - - # Files for 'make scripts' to succeed with kernel-devel. - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/security/selinux/include - cp -a --parents security/selinux/include/classmap.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents security/selinux/include/initial_sid_to_string.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/tools/include/tools - cp -a --parents tools/include/tools/be_byteshift.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/tools/le_byteshift.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - - # Files for 'make prepare' to succeed with kernel-devel. - cp -a --parents tools/include/linux/compiler* $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/linux/types.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/build/Build.include $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/build/Build $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/build/fixdep.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/objtool/sync-check.sh $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/bpf/resolve_btfids $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - - cp --parents security/selinux/include/policycap_names.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents security/selinux/include/policycap.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - - cp -a --parents tools/include/asm-generic $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/linux $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/uapi/asm $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/uapi/asm-generic $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/uapi/linux $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/vdso $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/scripts/utilities.mak $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/lib/subcmd $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/lib/*.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/objtool/*.[ch] $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/objtool/Build $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/objtool/include/objtool/*.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/lib/bpf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/lib/bpf/Build $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - - if [ -f tools/objtool/objtool ]; then - cp -a tools/objtool/objtool $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/tools/objtool/ || : - fi - if [ -f tools/objtool/fixdep ]; then - cp -a tools/objtool/fixdep $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/tools/objtool/ || : - fi - if [ -d arch/$Arch/scripts ]; then - cp -a arch/$Arch/scripts $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/arch/%{_arch} || : - fi - if [ -f arch/$Arch/*lds ]; then - cp -a arch/$Arch/*lds $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/arch/%{_arch}/ || : - fi - if [ -f arch/%{asmarch}/kernel/module.lds ]; then - cp -a --parents arch/%{asmarch}/kernel/module.lds $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - fi - find $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts \( -iname "*.o" -o -iname "*.cmd" \) -exec rm -f {} + -%ifarch ppc64le - cp -a --parents arch/powerpc/lib/crtsavres.[So] $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ -%endif - if [ -d arch/%{asmarch}/include ]; then - cp -a --parents arch/%{asmarch}/include $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - fi -%ifarch aarch64 - # arch/arm64/include/asm/xen references arch/arm - cp -a --parents arch/arm/include/asm/xen $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - # arch/arm64/include/asm/opcodes.h references arch/arm - cp -a --parents arch/arm/include/asm/opcodes.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ -%endif - # include the machine specific headers for ARM variants, if available. -%ifarch %{arm} - if [ -d arch/%{asmarch}/mach-${Variant}/include ]; then - cp -a --parents arch/%{asmarch}/mach-${Variant}/include $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - fi - # include a few files for 'make prepare' - cp -a --parents arch/arm/tools/gen-mach-types $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/arm/tools/mach-types $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - -%endif - cp -a include $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include -%ifarch i686 x86_64 - # files for 'make prepare' to succeed with kernel-devel - cp -a --parents arch/x86/entry/syscalls/syscall_32.tbl $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/entry/syscalls/syscall_64.tbl $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs_32.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs_64.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs_common.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/purgatory/purgatory.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/purgatory/stack.S $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/purgatory/setup-x86_64.S $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/purgatory/entry64.S $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/boot/string.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/boot/string.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/boot/ctype.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - - cp -a --parents scripts/syscalltbl.sh $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents scripts/syscallhdr.sh $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - - cp -a --parents tools/arch/x86/include/asm $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/arch/x86/include/uapi/asm $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/objtool/arch/x86/lib $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/arch/x86/lib/ $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/arch/x86/tools/gen-insn-attr-x86.awk $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/objtool/arch/x86/ $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - -%endif - # Clean up intermediate tools files - find $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/tools \( -iname "*.o" -o -iname "*.cmd" \) -exec rm -f {} + - - # Make sure the Makefile, version.h, and auto.conf have a matching - # timestamp so that external modules can be built - touch -r $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/Makefile \ - $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include/generated/uapi/linux/version.h \ - $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include/config/auto.conf - -%if %{with_debuginfo} - eu-readelf -n vmlinux | grep "Build ID" | awk '{print $NF}' > vmlinux.id - cp vmlinux.id $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/vmlinux.id - - # - # save the vmlinux file for kernel debugging into the kernel-debuginfo rpm - # - mkdir -p $RPM_BUILD_ROOT%{debuginfodir}/lib/modules/$KernelVer - cp vmlinux $RPM_BUILD_ROOT%{debuginfodir}/lib/modules/$KernelVer - if [ -n "%{vmlinux_decompressor}" ]; then - eu-readelf -n %{vmlinux_decompressor} | grep "Build ID" | awk '{print $NF}' > vmlinux.decompressor.id - # Without build-id the build will fail. But for s390 the build-id - # wasn't added before 5.11. In case it is missing prefer not - # packaging the debuginfo over a build failure. - if [ -s vmlinux.decompressor.id ]; then - cp vmlinux.decompressor.id $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/vmlinux.decompressor.id - cp %{vmlinux_decompressor} $RPM_BUILD_ROOT%{debuginfodir}/lib/modules/$KernelVer/vmlinux.decompressor - fi - fi -%endif - - find $RPM_BUILD_ROOT/lib/modules/$KernelVer -name "*.ko" -type f >modnames - - # mark modules executable so that strip-to-file can strip them - xargs --no-run-if-empty chmod u+x < modnames - - # Generate a list of modules for block and networking. - - grep -F /drivers/ modnames | xargs --no-run-if-empty nm -upA | - sed -n 's,^.*/\([^/]*\.ko\): *U \(.*\)$,\1 \2,p' > drivers.undef - - collect_modules_list() - { - sed -r -n -e "s/^([^ ]+) \\.?($2)\$/\\1/p" drivers.undef | - LC_ALL=C sort -u > $RPM_BUILD_ROOT/lib/modules/$KernelVer/modules.$1 - if [ ! -z "$3" ]; then - sed -r -e "/^($3)\$/d" -i $RPM_BUILD_ROOT/lib/modules/$KernelVer/modules.$1 - fi - } - - collect_modules_list networking \ - 'register_netdev|ieee80211_register_hw|usbnet_probe|phy_driver_register|rt(l_|2x00)(pci|usb)_probe|register_netdevice' - collect_modules_list block \ - 'ata_scsi_ioctl|scsi_add_host|scsi_add_host_with_dma|blk_alloc_queue|blk_init_queue|register_mtd_blktrans|scsi_esp_register|scsi_register_device_handler|blk_queue_physical_block_size' 'pktcdvd.ko|dm-mod.ko' - collect_modules_list drm \ - 'drm_open|drm_init' - collect_modules_list modesetting \ - 'drm_crtc_init' - - # detect missing or incorrect license tags - ( find $RPM_BUILD_ROOT/lib/modules/$KernelVer -name '*.ko' | xargs /sbin/modinfo -l | \ - grep -E -v 'GPL( v2)?$|Dual BSD/GPL$|Dual MPL/GPL$|GPL and additional rights$' ) && exit 1 - - remove_depmod_files() - { - # remove files that will be auto generated by depmod at rpm -i time - pushd $RPM_BUILD_ROOT/lib/modules/$KernelVer/ - rm -f modules.{alias,alias.bin,builtin.alias.bin,builtin.bin} \ - modules.{dep,dep.bin,devname,softdep,symbols,symbols.bin} - popd - } - - remove_depmod_files - - # Identify modules in the kernel-modules-extras package - %{SOURCE20} $RPM_BUILD_ROOT lib/modules/$KernelVer $(realpath configs/mod-extra.list) - # Identify modules in the kernel-modules-extras package - %{SOURCE20} $RPM_BUILD_ROOT lib/modules/$KernelVer %{SOURCE84} internal - - # - # Generate the kernel-core and kernel-modules files lists - # - - # Copy the System.map file for depmod to use, and create a backup of the - # full module tree so we can restore it after we're done filtering - cp System.map $RPM_BUILD_ROOT/. - cp configs/filter-*.sh $RPM_BUILD_ROOT/. - pushd $RPM_BUILD_ROOT - mkdir restore - cp -r lib/modules/$KernelVer/* restore/. - - # don't include anything going into kernel-modules-extra in the file lists - xargs rm -rf < mod-extra.list - # don't include anything going int kernel-modules-internal in the file lists - xargs rm -rf < mod-internal.list - - if [ $DoModules -eq 1 ]; then - # Find all the module files and filter them out into the core and - # modules lists. This actually removes anything going into -modules - # from the dir. - find lib/modules/$KernelVer/kernel -name *.ko | sort -n > modules.list - ./filter-modules.sh modules.list %{_target_cpu} - rm filter-*.sh - - # Run depmod on the resulting module tree and make sure it isn't broken - depmod -b . -aeF ./System.map $KernelVer &> depmod.out - if [ -s depmod.out ]; then - echo "Depmod failure" - cat depmod.out - exit 1 - else - rm depmod.out - fi - else - # Ensure important files/directories exist to let the packaging succeed - echo '%%defattr(-,-,-)' > modules.list - echo '%%defattr(-,-,-)' > k-d.list - mkdir -p lib/modules/$KernelVer/kernel - # Add files usually created by make modules, needed to prevent errors - # thrown by depmod during package installation - touch lib/modules/$KernelVer/modules.order - touch lib/modules/$KernelVer/modules.builtin - fi - - remove_depmod_files - - # Go back and find all of the various directories in the tree. We use this - # for the dir lists in kernel-core - find lib/modules/$KernelVer/kernel -mindepth 1 -type d | sort -n > module-dirs.list - - # Cleanup - rm System.map - # Just "cp -r" can be very slow: here, it rewrites _existing files_ - # with open(O_TRUNC). Many filesystems synchronously wait for metadata - # update for such file rewrites (seen in strace as final close syscall - # taking a long time). On a rotational disk, cp was observed to take - # more than 5 minutes on ext4 and more than 15 minutes (!) on xfs. - # With --remove-destination, we avoid this, and copying - # (with enough RAM to cache it) takes 5 seconds: - cp -r --remove-destination restore/* lib/modules/$KernelVer/. - rm -rf restore - popd - - # Make sure the files lists start with absolute paths or rpmbuild fails. - # Also add in the dir entries - sed -e 's/^lib*/\/lib/' %{?zipsed} $RPM_BUILD_ROOT/k-d.list > ../kernel${Variant:+-${Variant}}-modules.list - sed -e 's/^lib*/%dir \/lib/' %{?zipsed} $RPM_BUILD_ROOT/module-dirs.list > ../kernel${Variant:+-${Variant}}-core.list - sed -e 's/^lib*/\/lib/' %{?zipsed} $RPM_BUILD_ROOT/modules.list >> ../kernel${Variant:+-${Variant}}-core.list - sed -e 's/^lib*/\/lib/' %{?zipsed} $RPM_BUILD_ROOT/mod-extra.list >> ../kernel${Variant:+-${Variant}}-modules-extra.list - sed -e 's/^lib*/\/lib/' %{?zipsed} $RPM_BUILD_ROOT/mod-internal.list >> ../kernel${Variant:+-${Variant}}-modules-internal.list - - # Cleanup - rm -f $RPM_BUILD_ROOT/k-d.list - rm -f $RPM_BUILD_ROOT/modules.list - rm -f $RPM_BUILD_ROOT/module-dirs.list - rm -f $RPM_BUILD_ROOT/mod-extra.list - rm -f $RPM_BUILD_ROOT/mod-internal.list - -%if %{signmodules} - if [ $DoModules -eq 1 ]; then - # Save the signing keys so we can sign the modules in __modsign_install_post - cp certs/signing_key.pem certs/signing_key.pem.sign${Variant:++${Variant}} - cp certs/signing_key.x509 certs/signing_key.x509.sign${Variant:++${Variant}} - fi -%endif - - # Move the devel headers out of the root file system - mkdir -p $RPM_BUILD_ROOT/usr/src/kernels - mv $RPM_BUILD_ROOT/lib/modules/$KernelVer/build $RPM_BUILD_ROOT/$DevelDir - - # This is going to create a broken link during the build, but we don't use - # it after this point. We need the link to actually point to something - # when kernel-devel is installed, and a relative link doesn't work across - # the F17 UsrMove feature. - ln -sf $DevelDir $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - -%ifnarch armv7hl - # Generate vmlinux.h and put it to kernel-devel path - bpftool btf dump file vmlinux format c > $RPM_BUILD_ROOT/$DevelDir/vmlinux.h -%endif - - # prune junk from kernel-devel - find $RPM_BUILD_ROOT/usr/src/kernels -name ".*.cmd" -delete - - # Red Hat UEFI Secure Boot CA cert, which can be used to authenticate the kernel - mkdir -p $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer - %ifarch x86_64 aarch64 - install -m 0644 %{secureboot_ca_0} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca-20200609.cer - install -m 0644 %{secureboot_ca_1} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca-20140212.cer - ln -s kernel-signing-ca-20200609.cer $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca.cer - %else - install -m 0644 %{secureboot_ca_0} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca.cer - %endif - %ifarch s390x ppc64le - if [ $DoModules -eq 1 ]; then - if [ -x /usr/bin/rpm-sign ]; then - install -m 0644 %{secureboot_key_0} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/%{signing_key_filename} - else - install -m 0644 certs/signing_key.x509.sign${Variant:++${Variant}} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca.cer - openssl x509 -in certs/signing_key.pem.sign${Variant:++${Variant}} -outform der -out $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/%{signing_key_filename} - chmod 0644 $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/%{signing_key_filename} - fi - fi - %endif - -%if %{with_ipaclones} - MAXPROCS=$(echo %{?_smp_mflags} | sed -n 's/-j\s*\([0-9]\+\)/\1/p') - if [ -z "$MAXPROCS" ]; then - MAXPROCS=1 - fi - if [ "$Variant" == "" ]; then - mkdir -p $RPM_BUILD_ROOT/$DevelDir-ipaclones - find . -name '*.ipa-clones' | xargs -i{} -r -n 1 -P $MAXPROCS install -m 644 -D "{}" "$RPM_BUILD_ROOT/$DevelDir-ipaclones/{}" - fi -%endif - -} - -### -# DO it... -### - -# prepare directories -rm -rf $RPM_BUILD_ROOT -mkdir -p $RPM_BUILD_ROOT/boot -mkdir -p $RPM_BUILD_ROOT%{_libexecdir} - -cd linux-%{KVERREL} - - -%if %{with_debug} -BuildKernel %make_target %kernel_image %{_use_vdso} debug -%endif - -%if %{with_zfcpdump} -BuildKernel %make_target %kernel_image %{_use_vdso} zfcpdump -%endif - -%if %{with_pae} -BuildKernel %make_target %kernel_image %{use_vdso} lpae -%endif - -%if %{with_up} -BuildKernel %make_target %kernel_image %{_use_vdso} -%endif - -%ifnarch noarch i686 -%if !%{with_debug} && !%{with_zfcpdump} && !%{with_pae} && !%{with_up} -# If only building the user space tools, then initialize the build environment -# and some variables so that the various userspace tools can be built. -InitBuildVars -%endif -%endif - -%ifarch aarch64 -%global perf_build_extra_opts CORESIGHT=1 -%endif -%global perf_make \ - %{__make} %{?make_opts} EXTRA_CFLAGS="${RPM_OPT_FLAGS}" LDFLAGS="%{__global_ldflags}" %{?cross_opts} -C tools/perf V=1 NO_PERF_READ_VDSO32=1 NO_PERF_READ_VDSOX32=1 WERROR=0 NO_LIBUNWIND=1 HAVE_CPLUS_DEMANGLE=1 NO_GTK2=1 NO_STRLCPY=1 NO_BIONIC=1 LIBBPF_DYNAMIC=1 LIBTRACEEVENT_DYNAMIC=1 %{?perf_build_extra_opts} prefix=%{_prefix} PYTHON=%{__python3} -%if %{with_perf} -# perf -# make sure check-headers.sh is executable -chmod +x tools/perf/check-headers.sh -%{perf_make} DESTDIR=$RPM_BUILD_ROOT all -%endif - -%global tools_make \ - CFLAGS="${RPM_OPT_FLAGS}" LDFLAGS="%{__global_ldflags}" %{make} %{?make_opts} - -%if %{with_tools} -%ifarch %{cpupowerarchs} -# cpupower -# make sure version-gen.sh is executable. -chmod +x tools/power/cpupower/utils/version-gen.sh -%{tools_make} %{?_smp_mflags} -C tools/power/cpupower CPUFREQ_BENCH=false DEBUG=false -%ifarch x86_64 - pushd tools/power/cpupower/debug/x86_64 - %{tools_make} %{?_smp_mflags} centrino-decode powernow-k8-decode - popd -%endif -%ifarch x86_64 - pushd tools/power/x86/x86_energy_perf_policy/ - %{tools_make} - popd - pushd tools/power/x86/turbostat - %{tools_make} - popd - pushd tools/power/x86/intel-speed-select - %{tools_make} - popd - pushd tools/arch/x86/intel_sdsi - %{tools_make} CFLAGS="${RPM_OPT_FLAGS}" - popd -%endif -%endif -pushd tools/thermal/tmon/ -%{tools_make} -popd -pushd tools/iio/ -%{tools_make} -popd -pushd tools/gpio/ -%{tools_make} -popd -# build VM tools -pushd tools/vm/ -%{tools_make} slabinfo page_owner_sort -popd -%endif - -if [ -f $DevelDir/vmlinux.h ]; then - RPM_VMLINUX_H=$DevelDir/vmlinux.h -fi - -%global bpftool_make \ - %{__make} EXTRA_CFLAGS="${RPM_OPT_FLAGS}" EXTRA_LDFLAGS="%{__global_ldflags}" DESTDIR=$RPM_BUILD_ROOT %{?make_opts} VMLINUX_H="${RPM_VMLINUX_H}" V=1 -%if %{with_bpftool} -pushd tools/bpf/bpftool -%{bpftool_make} -popd -%endif - -%if %{with_selftests} -# Unfortunately, samples/bpf/Makefile expects that the headers are installed -# in the source tree. We installed them previously to $RPM_BUILD_ROOT/usr -# but there's no way to tell the Makefile to take them from there. -%{make} %{?_smp_mflags} headers_install -%{make} %{?_smp_mflags} ARCH=$Arch V=1 M=samples/bpf/ || true - -# Prevent bpf selftests to build bpftool repeatedly: -export BPFTOOL=$(pwd)/tools/bpf/bpftool/bpftool - -pushd tools/testing/selftests -# We need to install here because we need to call make with ARCH set which -# doesn't seem possible to do in the install section. -%{make} %{?_smp_mflags} ARCH=$Arch V=1 TARGETS="bpf vm livepatch net net/forwarding net/mptcp netfilter tc-testing" SKIP_TARGETS="" INSTALL_PATH=%{buildroot}%{_libexecdir}/kselftests VMLINUX_H="${RPM_VMLINUX_H}" install - -# 'make install' for bpf is broken and upstream refuses to fix it. -# Install the needed files manually. -for dir in bpf bpf/no_alu32 bpf/progs; do - # In ARK, the rpm build continues even if some of the selftests - # cannot be built. It's not always possible to build selftests, - # as upstream sometimes dependens on too new llvm version or has - # other issues. If something did not get built, just skip it. - test -d $dir || continue - mkdir -p %{buildroot}%{_libexecdir}/kselftests/$dir - find $dir -maxdepth 1 -type f \( -executable -o -name '*.py' -o -name settings -o \ - -name 'btf_dump_test_case_*.c' -o -name '*.ko' -o \ - -name '*.o' -exec sh -c 'readelf -h "{}" | grep -q "^ Machine:.*BPF"' \; \) -print0 | \ - xargs -0 cp -t %{buildroot}%{_libexecdir}/kselftests/$dir || true -done -popd -export -n BPFTOOL -%endif - -%if %{with_doc} -# Make the HTML pages. -%{__make} PYTHON=/usr/bin/python3 htmldocs || %{doc_build_fail} - -# sometimes non-world-readable files sneak into the kernel source tree -chmod -R a=rX Documentation -find Documentation -type d | xargs chmod u+w -%endif - -# In the modsign case, we do 3 things. 1) We check the "variant" and hard -# code the value in the following invocations. This is somewhat sub-optimal -# but we're doing this inside of an RPM macro and it isn't as easy as it -# could be because of that. 2) We restore the .tmp_versions/ directory from -# the one we saved off in BuildKernel above. This is to make sure we're -# signing the modules we actually built/installed in that variant. 3) We -# grab the arch and invoke mod-sign.sh command to actually sign the modules. -# -# We have to do all of those things _after_ find-debuginfo runs, otherwise -# that will strip the signature off of the modules. -# -# Don't sign modules for the zfcpdump variant as it is monolithic. - -%define __modsign_install_post \ - if [ "%{signmodules}" -eq "1" ]; then \ - if [ "%{with_pae}" -ne "0" ]; then \ - %{modsign_cmd} certs/signing_key.pem.sign+lpae certs/signing_key.x509.sign+lpae $RPM_BUILD_ROOT/lib/modules/%{KVERREL}+lpae/ \ - fi \ - if [ "%{with_debug}" -ne "0" ]; then \ - %{modsign_cmd} certs/signing_key.pem.sign+debug certs/signing_key.x509.sign+debug $RPM_BUILD_ROOT/lib/modules/%{KVERREL}+debug/ \ - fi \ - if [ "%{with_up}" -ne "0" ]; then \ - %{modsign_cmd} certs/signing_key.pem.sign certs/signing_key.x509.sign $RPM_BUILD_ROOT/lib/modules/%{KVERREL}/ \ - fi \ - fi \ - if [ "%{zipmodules}" -eq "1" ]; then \ - find $RPM_BUILD_ROOT/lib/modules/ -type f -name '*.ko' | xargs -P${RPM_BUILD_NCPUS} -r xz; \ - fi \ -%{nil} - -### -### Special hacks for debuginfo subpackages. -### - -# This macro is used by %%install, so we must redefine it before that. -%define debug_package %{nil} - -%if %{with_debuginfo} - -%ifnarch noarch -%global __debug_package 1 -%files -f debugfiles.list debuginfo-common-%{_target_cpu} -%endif - -%endif - -# We don't want to package debuginfo for self-tests and samples but -# we have to delete them to avoid an error messages about unpackaged -# files. -# Delete the debuginfo for kernel-devel files -%define __remove_unwanted_dbginfo_install_post \ - if [ "%{with_selftests}" -ne "0" ]; then \ - rm -rf $RPM_BUILD_ROOT/usr/lib/debug/usr/libexec/ksamples; \ - rm -rf $RPM_BUILD_ROOT/usr/lib/debug/usr/libexec/kselftests; \ - fi \ - rm -rf $RPM_BUILD_ROOT/usr/lib/debug/usr/src; \ -%{nil} - -# -# Disgusting hack alert! We need to ensure we sign modules *after* all -# invocations of strip occur, which is in __debug_install_post if -# find-debuginfo.sh runs, and __os_install_post if not. -# -%define __spec_install_post \ - %{?__debug_package:%{__debug_install_post}}\ - %{__arch_install_post}\ - %{__os_install_post}\ - %{__remove_unwanted_dbginfo_install_post}\ - %{__modsign_install_post} - -### -### install -### - -%install - -cd linux-%{KVERREL} - -%if %{with_doc} -docdir=$RPM_BUILD_ROOT%{_datadir}/doc/kernel-doc-%{specversion}-%{pkgrelease} - -# copy the source over -mkdir -p $docdir -tar -h -f - --exclude=man --exclude='.*' -c Documentation | tar xf - -C $docdir - -# with_doc -%endif - -# We have to do the headers install before the tools install because the -# kernel headers_install will remove any header files in /usr/include that -# it doesn't install itself. - -%if %{with_headers} -# Install kernel headers -%{__make} ARCH=%{hdrarch} INSTALL_HDR_PATH=$RPM_BUILD_ROOT/usr headers_install - -find $RPM_BUILD_ROOT/usr/include \ - \( -name .install -o -name .check -o \ - -name ..install.cmd -o -name ..check.cmd \) -delete - -%endif - -%if %{with_cross_headers} -%if 0%{?fedora} -HDR_ARCH_LIST='arm arm64 powerpc s390 x86' -%else -HDR_ARCH_LIST='arm64 powerpc s390 x86' -%endif -mkdir -p $RPM_BUILD_ROOT/usr/tmp-headers - -for arch in $HDR_ARCH_LIST; do - mkdir $RPM_BUILD_ROOT/usr/tmp-headers/arch-${arch} - %{__make} ARCH=${arch} INSTALL_HDR_PATH=$RPM_BUILD_ROOT/usr/tmp-headers/arch-${arch} headers_install -done - -find $RPM_BUILD_ROOT/usr/tmp-headers \ - \( -name .install -o -name .check -o \ - -name ..install.cmd -o -name ..check.cmd \) -delete - -# Copy all the architectures we care about to their respective asm directories -for arch in $HDR_ARCH_LIST ; do - mkdir -p $RPM_BUILD_ROOT/usr/${arch}-linux-gnu/include - mv $RPM_BUILD_ROOT/usr/tmp-headers/arch-${arch}/include/* $RPM_BUILD_ROOT/usr/${arch}-linux-gnu/include/ -done - -rm -rf $RPM_BUILD_ROOT/usr/tmp-headers -%endif - -%if %{with_kernel_abi_stablelists} -# kabi directory -INSTALL_KABI_PATH=$RPM_BUILD_ROOT/lib/modules/ -mkdir -p $INSTALL_KABI_PATH - -# install kabi releases directories -tar xjvf %{SOURCE300} -C $INSTALL_KABI_PATH -# with_kernel_abi_stablelists -%endif - -%if %{with_perf} -# perf tool binary and supporting scripts/binaries -%{perf_make} DESTDIR=$RPM_BUILD_ROOT lib=%{_lib} install-bin -# remove the 'trace' symlink. -rm -f %{buildroot}%{_bindir}/trace - -# For both of the below, yes, this should be using a macro but right now -# it's hard coded and we don't actually want it anyway right now. -# Whoever wants examples can fix it up! - -# remove examples -rm -rf %{buildroot}/usr/lib/perf/examples -rm -rf %{buildroot}/usr/lib/perf/include - -# python-perf extension -%{perf_make} DESTDIR=$RPM_BUILD_ROOT install-python_ext - -# perf man pages (note: implicit rpm magic compresses them later) -mkdir -p %{buildroot}/%{_mandir}/man1 -%{perf_make} DESTDIR=$RPM_BUILD_ROOT install-man - -# remove any tracevent files, eg. its plugins still gets built and installed, -# even if we build against system's libtracevent during perf build (by setting -# LIBTRACEEVENT_DYNAMIC=1 above in perf_make macro). Those files should already -# ship with libtraceevent package. -rm -rf %{buildroot}%{_libdir}/traceevent -%endif - -%if %{with_tools} -%ifarch %{cpupowerarchs} -%{make} -C tools/power/cpupower DESTDIR=$RPM_BUILD_ROOT libdir=%{_libdir} mandir=%{_mandir} CPUFREQ_BENCH=false install -rm -f %{buildroot}%{_libdir}/*.{a,la} -%find_lang cpupower -mv cpupower.lang ../ -%ifarch x86_64 - pushd tools/power/cpupower/debug/x86_64 - install -m755 centrino-decode %{buildroot}%{_bindir}/centrino-decode - install -m755 powernow-k8-decode %{buildroot}%{_bindir}/powernow-k8-decode - popd -%endif -chmod 0755 %{buildroot}%{_libdir}/libcpupower.so* -mkdir -p %{buildroot}%{_unitdir} %{buildroot}%{_sysconfdir}/sysconfig -install -m644 %{SOURCE2000} %{buildroot}%{_unitdir}/cpupower.service -install -m644 %{SOURCE2001} %{buildroot}%{_sysconfdir}/sysconfig/cpupower -%endif -%ifarch x86_64 - mkdir -p %{buildroot}%{_mandir}/man8 - pushd tools/power/x86/x86_energy_perf_policy - %{tools_make} DESTDIR=%{buildroot} install - popd - pushd tools/power/x86/turbostat - %{tools_make} DESTDIR=%{buildroot} install - popd - pushd tools/power/x86/intel-speed-select - %{tools_make} DESTDIR=%{buildroot} install - popd - pushd tools/arch/x86/intel_sdsi - %{tools_make} CFLAGS="${RPM_OPT_FLAGS}" DESTDIR=%{buildroot} install - popd -%endif -pushd tools/thermal/tmon -%{tools_make} INSTALL_ROOT=%{buildroot} install -popd -pushd tools/iio -%{tools_make} DESTDIR=%{buildroot} install -popd -pushd tools/gpio -%{tools_make} DESTDIR=%{buildroot} install -popd -install -m644 -D %{SOURCE2002} %{buildroot}%{_sysconfdir}/logrotate.d/kvm_stat -pushd tools/kvm/kvm_stat -%{__make} INSTALL_ROOT=%{buildroot} install-tools -%{__make} INSTALL_ROOT=%{buildroot} install-man -install -m644 -D kvm_stat.service %{buildroot}%{_unitdir}/kvm_stat.service -popd -# install VM tools -pushd tools/vm/ -install -m755 slabinfo %{buildroot}%{_bindir}/slabinfo -install -m755 page_owner_sort %{buildroot}%{_bindir}/page_owner_sort -popd -%endif - -if [ -f $DevelDir/vmlinux.h ]; then - RPM_VMLINUX_H=$DevelDir/vmlinux.h -fi - -%if %{with_bpftool} -pushd tools/bpf/bpftool -%{bpftool_make} prefix=%{_prefix} bash_compdir=%{_sysconfdir}/bash_completion.d/ mandir=%{_mandir} install doc-install -popd -%endif - -%if %{with_selftests} -pushd samples -install -d %{buildroot}%{_libexecdir}/ksamples -# install bpf samples -pushd bpf -install -d %{buildroot}%{_libexecdir}/ksamples/bpf -find -type f -executable -exec install -m755 {} %{buildroot}%{_libexecdir}/ksamples/bpf \; -install -m755 *.sh %{buildroot}%{_libexecdir}/ksamples/bpf -# test_lwt_bpf.sh compiles test_lwt_bpf.c when run; this works only from the -# kernel tree. Just remove it. -rm %{buildroot}%{_libexecdir}/ksamples/bpf/test_lwt_bpf.sh -install -m644 *_kern.o %{buildroot}%{_libexecdir}/ksamples/bpf || true -install -m644 tcp_bpf.readme %{buildroot}%{_libexecdir}/ksamples/bpf -popd -# install pktgen samples -pushd pktgen -install -d %{buildroot}%{_libexecdir}/ksamples/pktgen -find . -type f -executable -exec install -m755 {} %{buildroot}%{_libexecdir}/ksamples/pktgen/{} \; -find . -type f ! -executable -exec install -m644 {} %{buildroot}%{_libexecdir}/ksamples/pktgen/{} \; -popd -popd -# install vm selftests -pushd tools/testing/selftests/vm -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/vm/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/vm/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/vm/{} \; -popd -# install drivers/net/mlxsw selftests -pushd tools/testing/selftests/drivers/net/mlxsw -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/drivers/net/mlxsw/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/drivers/net/mlxsw/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/drivers/net/mlxsw/{} \; -popd -# install drivers/net/netdevsim selftests -pushd tools/testing/selftests/drivers/net/netdevsim -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/drivers/net/netdevsim/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/drivers/net/netdevsim/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/drivers/net/netdevsim/{} \; -popd -# install net/forwarding selftests -pushd tools/testing/selftests/net/forwarding -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/net/forwarding/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/net/forwarding/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/net/forwarding/{} \; -popd -# install net/mptcp selftests -pushd tools/testing/selftests/net/mptcp -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/net/mptcp/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/net/mptcp/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/net/mptcp/{} \; -popd -# install tc-testing selftests -pushd tools/testing/selftests/tc-testing -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/tc-testing/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/tc-testing/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/tc-testing/{} \; -popd -# install livepatch selftests -pushd tools/testing/selftests/livepatch -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/livepatch/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/livepatch/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/livepatch/{} \; -popd -# install netfilter selftests -pushd tools/testing/selftests/netfilter -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/netfilter/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/netfilter/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/netfilter/{} \; -popd -%endif - -### -### clean -### - -### -### scripts -### - -%if %{with_tools} -%post -n kernel-tools-libs -/sbin/ldconfig - -%postun -n kernel-tools-libs -/sbin/ldconfig -%endif - -# -# This macro defines a %%post script for a kernel*-devel package. -# %%kernel_devel_post [<subpackage>] -# Note we don't run hardlink if ostree is in use, as ostree is -# a far more sophisticated hardlink implementation. -# https://github.com/projectatomic/rpm-ostree/commit/58a79056a889be8814aa51f507b2c7a4dccee526 -# -# The deletion of *.hardlink-temporary files is a temporary workaround -# for this bug in the hardlink binary (fixed in util-linux 2.38): -# https://github.com/util-linux/util-linux/issues/1602 -# -%define kernel_devel_post() \ -%{expand:%%post %{?1:%{1}-}devel}\ -if [ -f /etc/sysconfig/kernel ]\ -then\ - . /etc/sysconfig/kernel || exit $?\ -fi\ -if [ "$HARDLINK" != "no" -a -x /usr/bin/hardlink -a ! -e /run/ostree-booted ] \ -then\ - (cd /usr/src/kernels/%{KVERREL}%{?1:+%{1}} &&\ - /usr/bin/find . -type f | while read f; do\ - hardlink -c /usr/src/kernels/*%{?dist}.*/$f $f > /dev/null\ - done;\ - /usr/bin/find /usr/src/kernels -type f -name '*.hardlink-temporary' -delete\ - )\ -fi\ -%{nil} - -# -# This macro defines a %%post script for a kernel*-modules-extra package. -# It also defines a %%postun script that does the same thing. -# %%kernel_modules_extra_post [<subpackage>] -# -%define kernel_modules_extra_post() \ -%{expand:%%post %{?1:%{1}-}modules-extra}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil}\ -%{expand:%%postun %{?1:%{1}-}modules-extra}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil} - -# -# This macro defines a %%post script for a kernel*-modules-internal package. -# It also defines a %%postun script that does the same thing. -# %%kernel_modules_internal_post [<subpackage>] -# -%define kernel_modules_internal_post() \ -%{expand:%%post %{?1:%{1}-}modules-internal}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil}\ -%{expand:%%postun %{?1:%{1}-}modules-internal}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil} - -# -# This macro defines a %%post script for a kernel*-modules package. -# It also defines a %%postun script that does the same thing. -# %%kernel_modules_post [<subpackage>] -# -%define kernel_modules_post() \ -%{expand:%%post %{?1:%{1}-}modules}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -if [ ! -f %{_localstatedir}/lib/rpm-state/%{name}/installing_core_%{KVERREL}%{?1:+%{1}} ]; then\ - mkdir -p %{_localstatedir}/lib/rpm-state/%{name}\ - touch %{_localstatedir}/lib/rpm-state/%{name}/need_to_run_dracut_%{KVERREL}%{?1:+%{1}}\ -fi\ -%{nil}\ -%{expand:%%postun %{?1:%{1}-}modules}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil}\ -%{expand:%%posttrans %{?1:%{1}-}modules}\ -if [ -f %{_localstatedir}/lib/rpm-state/%{name}/need_to_run_dracut_%{KVERREL}%{?1:+%{1}} ]; then\ - rm -f %{_localstatedir}/lib/rpm-state/%{name}/need_to_run_dracut_%{KVERREL}%{?1:+%{1}}\ - echo "Running: dracut -f --kver %{KVERREL}%{?1:+%{1}}"\ - dracut -f --kver "%{KVERREL}%{?1:+%{1}}" || exit $?\ -fi\ -%{nil} - -# This macro defines a %%posttrans script for a kernel package. -# %%kernel_variant_posttrans [<subpackage>] -# More text can follow to go at the end of this variant's %%post. -# -%define kernel_variant_posttrans() \ -%{expand:%%posttrans %{?1:%{1}-}core}\ -%if 0%{!?fedora:1}\ -if [ -x %{_sbindir}/weak-modules ]\ -then\ - %{_sbindir}/weak-modules --add-kernel %{KVERREL}%{?1:+%{1}} || exit $?\ -fi\ -%endif\ -rm -f %{_localstatedir}/lib/rpm-state/%{name}/installing_core_%{KVERREL}%{?1:+%{1}}\ -/bin/kernel-install add %{KVERREL}%{?1:+%{1}} /lib/modules/%{KVERREL}%{?1:+%{1}}/vmlinuz || exit $?\ -%{nil} - -# -# This macro defines a %%post script for a kernel package and its devel package. -# %%kernel_variant_post [-v <subpackage>] [-r <replace>] -# More text can follow to go at the end of this variant's %%post. -# -%define kernel_variant_post(v:r:) \ -%{expand:%%kernel_devel_post %{?-v*}}\ -%{expand:%%kernel_modules_post %{?-v*}}\ -%{expand:%%kernel_modules_extra_post %{?-v*}}\ -%{expand:%%kernel_modules_internal_post %{?-v*}}\ -%{expand:%%kernel_variant_posttrans %{?-v*}}\ -%{expand:%%post %{?-v*:%{-v*}-}core}\ -%{-r:\ -if [ `uname -i` == "x86_64" -o `uname -i` == "i386" ] &&\ - [ -f /etc/sysconfig/kernel ]; then\ - /bin/sed -r -i -e 's/^DEFAULTKERNEL=%{-r*}$/DEFAULTKERNEL=kernel%{?-v:-%{-v*}}/' /etc/sysconfig/kernel || exit $?\ -fi}\ -mkdir -p %{_localstatedir}/lib/rpm-state/%{name}\ -touch %{_localstatedir}/lib/rpm-state/%{name}/installing_core_%{KVERREL}%{?1:+%{1}}\ -%{nil} - -# -# This macro defines a %%preun script for a kernel package. -# %%kernel_variant_preun <subpackage> -# -%define kernel_variant_preun() \ -%{expand:%%preun %{?1:%{1}-}core}\ -/bin/kernel-install remove %{KVERREL}%{?1:+%{1}} /lib/modules/%{KVERREL}%{?1:+%{1}}/vmlinuz || exit $?\ -if [ -x %{_sbindir}/weak-modules ]\ -then\ - %{_sbindir}/weak-modules --remove-kernel %{KVERREL}%{?1:+%{1}} || exit $?\ -fi\ -%{nil} - -%kernel_variant_preun -%kernel_variant_post -r kernel-smp - -%if %{with_pae} -%kernel_variant_preun lpae -%kernel_variant_post -v lpae -r (kernel|kernel-smp) -%endif - -%if %{with_debug} -%kernel_variant_preun debug -%kernel_variant_post -v debug -%endif - -%if %{with_zfcpdump} -%kernel_variant_preun zfcpdump -%kernel_variant_post -v zfcpdump -%endif - -if [ -x /sbin/ldconfig ] -then - /sbin/ldconfig -X || exit $? -fi - -### -### file lists -### - -%if %{with_headers} -%files headers -/usr/include/* -%endif - -%if %{with_cross_headers} -%files cross-headers -/usr/*-linux-gnu/include/* -%endif - -%if %{with_kernel_abi_stablelists} -%files -n kernel-abi-stablelists -/lib/modules/kabi-* -%endif - -%if %{with_kabidw_base} -%ifarch x86_64 s390x ppc64 ppc64le aarch64 -%files kernel-kabidw-base-internal -%defattr(-,root,root) -/kabidw-base/%{_target_cpu}/* -%endif -%endif - -# only some architecture builds need kernel-doc -%if %{with_doc} -%files doc -%defattr(-,root,root) -%{_datadir}/doc/kernel-doc-%{specversion}-%{pkgrelease}/Documentation/* -%dir %{_datadir}/doc/kernel-doc-%{specversion}-%{pkgrelease}/Documentation -%dir %{_datadir}/doc/kernel-doc-%{specversion}-%{pkgrelease} -%endif - -%if %{with_perf} -%files -n perf -%{_bindir}/perf -%{_libdir}/libperf-jvmti.so -%dir %{_libexecdir}/perf-core -%{_libexecdir}/perf-core/* -%{_datadir}/perf-core/* -%{_mandir}/man[1-8]/perf* -%{_sysconfdir}/bash_completion.d/perf -%doc linux-%{KVERREL}/tools/perf/Documentation/examples.txt -%{_docdir}/perf-tip/tips.txt - -%files -n python3-perf -%{python3_sitearch}/* - -%if %{with_debuginfo} -%files -f perf-debuginfo.list -n perf-debuginfo - -%files -f python3-perf-debuginfo.list -n python3-perf-debuginfo -%endif -# with_perf -%endif - -%if %{with_tools} -%ifnarch %{cpupowerarchs} -%files -n kernel-tools -%else -%files -n kernel-tools -f cpupower.lang -%{_bindir}/cpupower -%{_datadir}/bash-completion/completions/cpupower -%ifarch x86_64 -%{_bindir}/centrino-decode -%{_bindir}/powernow-k8-decode -%endif -%{_unitdir}/cpupower.service -%{_mandir}/man[1-8]/cpupower* -%config(noreplace) %{_sysconfdir}/sysconfig/cpupower -%ifarch x86_64 -%{_bindir}/x86_energy_perf_policy -%{_mandir}/man8/x86_energy_perf_policy* -%{_bindir}/turbostat -%{_mandir}/man8/turbostat* -%{_bindir}/intel-speed-select -%{_sbindir}/intel_sdsi -%endif -# cpupowerarchs -%endif -%{_bindir}/tmon -%{_bindir}/iio_event_monitor -%{_bindir}/iio_generic_buffer -%{_bindir}/lsiio -%{_bindir}/lsgpio -%{_bindir}/gpio-hammer -%{_bindir}/gpio-event-mon -%{_bindir}/gpio-watch -%{_mandir}/man1/kvm_stat* -%{_bindir}/kvm_stat -%{_unitdir}/kvm_stat.service -%config(noreplace) %{_sysconfdir}/logrotate.d/kvm_stat -%{_bindir}/page_owner_sort -%{_bindir}/slabinfo - -%if %{with_debuginfo} -%files -f kernel-tools-debuginfo.list -n kernel-tools-debuginfo -%endif - -%ifarch %{cpupowerarchs} -%files -n kernel-tools-libs -%{_libdir}/libcpupower.so.0 -%{_libdir}/libcpupower.so.0.0.1 - -%files -n kernel-tools-libs-devel -%{_libdir}/libcpupower.so -%{_includedir}/cpufreq.h -%endif -# with_tools -%endif - -%if %{with_bpftool} -%files -n bpftool -%{_sbindir}/bpftool -%{_sysconfdir}/bash_completion.d/bpftool -%{_mandir}/man8/bpftool-cgroup.8.gz -%{_mandir}/man8/bpftool-gen.8.gz -%{_mandir}/man8/bpftool-iter.8.gz -%{_mandir}/man8/bpftool-link.8.gz -%{_mandir}/man8/bpftool-map.8.gz -%{_mandir}/man8/bpftool-prog.8.gz -%{_mandir}/man8/bpftool-perf.8.gz -%{_mandir}/man8/bpftool.8.gz -%{_mandir}/man8/bpftool-net.8.gz -%{_mandir}/man8/bpftool-feature.8.gz -%{_mandir}/man8/bpftool-btf.8.gz -%{_mandir}/man8/bpftool-struct_ops.8.gz - -%if %{with_debuginfo} -%files -f bpftool-debuginfo.list -n bpftool-debuginfo -%defattr(-,root,root) -%endif -%endif - -%if %{with_selftests} -%files selftests-internal -%{_libexecdir}/ksamples -%{_libexecdir}/kselftests -%endif - -# empty meta-package -%ifnarch %nobuildarches noarch -%files -%endif - -%if %{with_gcov} -%ifnarch %nobuildarches noarch -%files gcov -%{_builddir} -%endif -%endif - -# This is %%{image_install_path} on an arch where that includes ELF files, -# or empty otherwise. -%define elf_image_install_path %{?kernel_image_elf:%{image_install_path}} - -# -# This macro defines the %%files sections for a kernel package -# and its devel and debuginfo packages. -# %%kernel_variant_files [-k vmlinux] <use_vdso> <condition> <subpackage> -# -%define kernel_variant_files(k:) \ -%if %{2}\ -%{expand:%%files -f kernel-%{?3:%{3}-}core.list %{?1:-f kernel-%{?3:%{3}-}ldsoconf.list} %{?3:%{3}-}core}\ -%{!?_licensedir:%global license %%doc}\ -%license linux-%{KVERREL}/COPYING-%{version}-%{release}\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/%{?-k:%{-k*}}%{!?-k:vmlinuz}\ -%ghost /%{image_install_path}/%{?-k:%{-k*}}%{!?-k:vmlinuz}-%{KVERREL}%{?3:+%{3}}\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/.vmlinuz.hmac \ -%ghost /%{image_install_path}/.vmlinuz-%{KVERREL}%{?3:+%{3}}.hmac \ -%ifarch %{arm} aarch64\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/dtb \ -%ghost /%{image_install_path}/dtb-%{KVERREL}%{?3:+%{3}} \ -%endif\ -%attr(0600, root, root) /lib/modules/%{KVERREL}%{?3:+%{3}}/System.map\ -%ghost %attr(0600, root, root) /boot/System.map-%{KVERREL}%{?3:+%{3}}\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/symvers.gz\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/config\ -%ghost %attr(0600, root, root) /boot/symvers-%{KVERREL}%{?3:+%{3}}.gz\ -%ghost %attr(0600, root, root) /boot/initramfs-%{KVERREL}%{?3:+%{3}}.img\ -%ghost %attr(0644, root, root) /boot/config-%{KVERREL}%{?3:+%{3}}\ -%dir /lib/modules\ -%dir /lib/modules/%{KVERREL}%{?3:+%{3}}\ -%dir /lib/modules/%{KVERREL}%{?3:+%{3}}/kernel\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/build\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/source\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/updates\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/weak-updates\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/systemtap\ -%{_datadir}/doc/kernel-keys/%{KVERREL}%{?3:+%{3}}\ -%if %{1}\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/vdso\ -%endif\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/modules.*\ -%{expand:%%files -f kernel-%{?3:%{3}-}modules.list %{?3:%{3}-}modules}\ -%{expand:%%files %{?3:%{3}-}devel}\ -%defverify(not mtime)\ -/usr/src/kernels/%{KVERREL}%{?3:+%{3}}\ -%{expand:%%files %{?3:%{3}-}devel-matched}\ -%{expand:%%files -f kernel-%{?3:%{3}-}modules-extra.list %{?3:%{3}-}modules-extra}\ -%config(noreplace) /etc/modprobe.d/*-blacklist.conf\ -%{expand:%%files -f kernel-%{?3:%{3}-}modules-internal.list %{?3:%{3}-}modules-internal}\ -%if %{with_debuginfo}\ -%ifnarch noarch\ -%{expand:%%files -f debuginfo%{?3}.list %{?3:%{3}-}debuginfo}\ -%endif\ -%endif\ -%if %{?3:1} %{!?3:0}\ -%{expand:%%files %{3}}\ -%endif\ -%endif\ -%{nil} - -%kernel_variant_files %{_use_vdso} %{with_up} -%kernel_variant_files %{_use_vdso} %{with_debug} debug -%if %{with_debug_meta} -%files debug -%files debug-core -%files debug-devel -%files debug-devel-matched -%files debug-modules -%files debug-modules-extra -%endif -%kernel_variant_files %{use_vdso} %{with_pae} lpae -%kernel_variant_files %{_use_vdso} %{with_zfcpdump} zfcpdump - -%define kernel_variant_ipaclones(k:) \ -%if %{1}\ -%if %{with_ipaclones}\ -%{expand:%%files %{?2:%{2}-}ipaclones-internal}\ -%defattr(-,root,root)\ -%defverify(not mtime)\ -/usr/src/kernels/%{KVERREL}%{?2:+%{2}}-ipaclones\ -%endif\ -%endif\ -%{nil} - -%kernel_variant_ipaclones %{with_up} - -# plz don't put in a version string unless you're going to tag -# and build. -# -# -%changelog Mon Mar 28 2022 Fedora Kernel Team <kernel-team@xxxxxxxxxxxxxxxxx> [5.16.0-0.rc5.fce15c45d3fb.6.test] - -### -# The following Emacs magic makes C-c C-e use UTC dates. -# Local Variables: -# rpm-change-log-uses-utc: t -# End: -### diff --git a/redhat/self-test/data/fedora-fce15c45d3fb.fc25.spec b/redhat/self-test/data/fedora-fce15c45d3fb.fc25.spec index blahblah..blahblah 100755 --- a/redhat/self-test/data/fedora-fce15c45d3fb.fc25.spec +++ b/redhat/self-test/data/fedora-fce15c45d3fb.fc25.spec @@ -1,125 +1,7 @@ -# All Global changes to build and install go here. -# Per the below section about __spec_install_pre, any rpm -# environment changes that affect %%install need to go -# here before the %%install macro is pre-built. - -# Disable LTO in userspace packages. -%global _lto_cflags %{nil} - -# Option to enable compiling with clang instead of gcc. -%bcond_with toolchain_clang - -%if %{with toolchain_clang} -%global toolchain clang -%endif - -# Compile the kernel with LTO (only supported when building with clang). -%bcond_with clang_lto - -%if %{with clang_lto} && %{without toolchain_clang} -{error:clang_lto requires --with toolchain_clang} -%endif - -# Cross compile on copr for arm -# See https://bugzilla.redhat.com/1879599 -%if 0%{?_with_cross_arm:1} -%global _target_cpu armv7hl -%global _arch arm -%global _build_arch arm -%global _with_cross 1 -%endif - -# The kernel's %%install section is special -# Normally the %%install section starts by cleaning up the BUILD_ROOT -# like so: -# -# %%__spec_install_pre %%{___build_pre}\ -# [ "$RPM_BUILD_ROOT" != "/" ] && rm -rf "${RPM_BUILD_ROOT}"\ -# mkdir -p `dirname "$RPM_BUILD_ROOT"`\ -# mkdir "$RPM_BUILD_ROOT"\ -# %%{nil} -# -# But because of kernel variants, the %%build section, specifically -# BuildKernel(), moves each variant to its final destination as the -# variant is built. This violates the expectation of the %%install -# section. As a result we snapshot the current env variables and -# purposely leave out the removal section. All global wide changes -# should be added above this line otherwise the %%install section -# will not see them. -%global __spec_install_pre %{___build_pre} - -# At the time of this writing (2019-03), RHEL8 packages use w2.xzdio -# compression for rpms (xz, level 2). -# Kernel has several large (hundreds of mbytes) rpms, they take ~5 mins -# to compress by single-threaded xz. Switch to threaded compression, -# and from level 2 to 3 to keep compressed sizes close to "w2" results. -# -# NB: if default compression in /usr/lib/rpm/redhat/macros ever changes, -# this one might need tweaking (e.g. if default changes to w3.xzdio, -# change below to w4T.xzdio): -# -# This is disabled on i686 as it triggers oom errors - -%ifnarch i686 -%define _binary_payload w3T.xzdio -%endif - -Summary: The Linux kernel -%if 0%{?fedora} -%define secure_boot_arch x86_64 -%else -%define secure_boot_arch x86_64 aarch64 s390x ppc64le -%endif - -# Signing for secure boot authentication -%ifarch %{secure_boot_arch} -%global signkernel 1 -%else -%global signkernel 0 -%endif - -# Sign modules on all arches -%global signmodules 1 - -# Compress modules only for architectures that build modules -%ifarch noarch -%global zipmodules 0 -%else -%global zipmodules 1 -%endif - -%if %{zipmodules} -%global zipsed -e 's/\.ko$/\.ko.xz/' -# for parallel xz processes, replace with 1 to go back to single process -%endif - -%if 0%{?fedora} -%define primary_target fedora -%else -%define primary_target rhel -%endif - -# -# genspec.sh variables -# - -# Include Fedora files %global include_fedora 1 -# Include RHEL files %global include_rhel 1 -# Provide Patchlist.changelog file %global patchlist_changelog 1 -# Set released_kernel to 1 when the upstream source tarball contains a -# kernel release. (This includes prepatch or "rc" releases.) -# Set released_kernel to 0 when the upstream source tarball contains an -# unreleased kernel development snapshot. %global released_kernel 0 -# Set debugbuildsenabled to 1 to build separate base and debug kernels -# (on supported architectures). The kernel-debug-* subpackages will -# contain the debug kernel. -# Set debugbuildsenabled to 0 to not build a separate debug kernel, but -# to build the base kernel using the debug configuration. (Specifying -# the --with-release option overrides this setting.) %define debugbuildsenabled 0 %define buildid .test %define specversion 5.16.0 @@ -127,2924 +9,6 @@ Summary: The Linux kernel %define pkgrelease 0.rc5.fce15c45d3fb.6.test %define kversion 5 %define tarfile_release 5.16-rc5-1-gfce15c45d3fb -# This is needed to do merge window version magic %define patchlevel 16 -# allow pkg_release to have configurable %%{?dist} tag %define specrelease 0.rc5.fce15c45d3fb.6%{?buildid}%{?dist} - -# -# End of genspec.sh variables -# - -%define pkg_release %{specrelease} - -# libexec dir is not used by the linker, so the shared object there -# should not be exported to RPM provides -%global __provides_exclude_from ^%{_libexecdir}/kselftests - -# The following build options are enabled by default, but may become disabled -# by later architecture-specific checks. These can also be disabled by using -# --without <opt> in the rpmbuild command, or by forcing these values to 0. -# -# standard kernel -%define with_up %{?_without_up: 0} %{?!_without_up: 1} -# kernel PAE (only valid for ARM (lpae)) -%define with_pae %{?_without_pae: 0} %{?!_without_pae: 1} -# kernel-debug -%define with_debug %{?_without_debug: 0} %{?!_without_debug: 1} -# kernel-zfcpdump (s390 specific kernel for zfcpdump) -%define with_zfcpdump %{?_without_zfcpdump: 0} %{?!_without_zfcpdump: 1} -# kernel-doc -%define with_doc %{?_without_doc: 0} %{?!_without_doc: 1} -# kernel-headers -%define with_headers %{?_without_headers: 0} %{?!_without_headers: 1} -%define with_cross_headers %{?_without_cross_headers: 0} %{?!_without_cross_headers: 1} -# perf -%define with_perf %{?_without_perf: 0} %{?!_without_perf: 1} -# tools -%define with_tools %{?_without_tools: 0} %{?!_without_tools: 1} -# bpf tool -%define with_bpftool %{?_without_bpftool: 0} %{?!_without_bpftool: 1} -# kernel-debuginfo -%define with_debuginfo %{?_without_debuginfo: 0} %{?!_without_debuginfo: 1} -# kernel-abi-stablelists -%define with_kernel_abi_stablelists %{?_without_kernel_abi_stablelists: 0} %{?!_without_kernel_abi_stablelists: 1} -# internal samples and selftests -%define with_selftests %{?_without_selftests: 0} %{?!_without_selftests: 1} -# -# Additional options for user-friendly one-off kernel building: -# -# Only build the base kernel (--with baseonly): -%define with_baseonly %{?_with_baseonly: 1} %{?!_with_baseonly: 0} -# Only build the pae kernel (--with paeonly): -%define with_paeonly %{?_with_paeonly: 1} %{?!_with_paeonly: 0} -# Only build the debug kernel (--with dbgonly): -%define with_dbgonly %{?_with_dbgonly: 1} %{?!_with_dbgonly: 0} -# Control whether we perform a compat. check against published ABI. -%define with_kabichk %{?_without_kabichk: 0} %{?!_without_kabichk: 1} -# Temporarily disable kabi checks until RC. -%define with_kabichk 0 -# Control whether we perform a compat. check against DUP ABI. -%define with_kabidupchk %{?_with_kabidupchk: 1} %{?!_with_kabidupchk: 0} -# -# Control whether to run an extensive DWARF based kABI check. -# Note that this option needs to have baseline setup in SOURCE300. -%define with_kabidwchk %{?_without_kabidwchk: 0} %{?!_without_kabidwchk: 1} -%define with_kabidw_base %{?_with_kabidw_base: 1} %{?!_with_kabidw_base: 0} -# -# Control whether to install the vdso directories. -%define with_vdso_install %{?_without_vdso_install: 0} %{?!_without_vdso_install: 1} -# -# should we do C=1 builds with sparse -%define with_sparse %{?_with_sparse: 1} %{?!_with_sparse: 0} -# -# Cross compile requested? -%define with_cross %{?_with_cross: 1} %{?!_with_cross: 0} -# -# build a release kernel on rawhide -%define with_release %{?_with_release: 1} %{?!_with_release: 0} - -# verbose build, i.e. no silent rules and V=1 -%define with_verbose %{?_with_verbose: 1} %{?!_with_verbose: 0} - -# -# check for mismatched config options -%define with_configchecks %{?_without_configchecks: 0} %{?!_without_configchecks: 1} - -# -# gcov support -%define with_gcov %{?_with_gcov:1}%{?!_with_gcov:0} - -# -# ipa_clone support -%define with_ipaclones %{?_without_ipaclones: 0} %{?!_without_ipaclones: 1} - -# Want to build a vanilla kernel build without any non-upstream patches? -%define with_vanilla %{?_with_vanilla: 1} %{?!_with_vanilla: 0} - -%if 0%{?fedora} -# Kernel headers are being split out into a separate package -%define with_headers 0 -%define with_cross_headers 0 -# no ipa_clone for now -%define with_ipaclones 0 -# no stablelist -%define with_kernel_abi_stablelists 0 -# Fedora builds these separately -%define with_perf 0 -%define with_tools 0 -%define with_bpftool 0 -# selftests turns on bpftool -%define with_selftests 0 -%endif - -%if %{with_verbose} -%define make_opts V=1 -%else -%define make_opts -s -%endif - -%if %{with toolchain_clang} -%ifarch s390x ppc64le -%global llvm_ias 0 -%else -%global llvm_ias 1 -%endif -%global clang_make_opts HOSTCC=clang CC=clang LLVM_IAS=%{llvm_ias} -%if %{with clang_lto} -%global clang_make_opts %{clang_make_opts} LD=ld.lld HOSTLD=ld.lld AR=llvm-ar NM=llvm-nm HOSTAR=llvm-ar HOSTNM=llvm-nm -%endif -%global make_opts %{make_opts} %{clang_make_opts} -# clang does not support the -fdump-ipa-clones option -%global with_ipaclones 0 -%endif - -# turn off debug kernel and kabichk for gcov builds -%if %{with_gcov} -%define with_debug 0 -%define with_kabichk 0 -%define with_kabidupchk 0 -%define with_kabidwchk 0 -%define with_kabidw_base 0 -%define with_kernel_abi_stablelists 0 -%endif - -# turn off kABI DWARF-based check if we're generating the base dataset -%if %{with_kabidw_base} -%define with_kabidwchk 0 -%endif - -# kpatch_kcflags are extra compiler flags applied to base kernel -# -fdump-ipa-clones is enabled only for base kernels on selected arches -%if %{with_ipaclones} -%ifarch x86_64 ppc64le -%define kpatch_kcflags -fdump-ipa-clones -%else -%define with_ipaclones 0 -%endif -%endif - -%define make_target bzImage -%define image_install_path boot - -%define KVERREL %{version}-%{release}.%{_target_cpu} -%define KVERREL_RE %(echo %KVERREL | sed 's/+/[+]/g') -%define hdrarch %_target_cpu -%define asmarch %_target_cpu - -%if 0%{!?nopatches:1} -%define nopatches 0 -%endif - -%if %{with_vanilla} -%define nopatches 1 -%endif - -%if %{with_release} -%define debugbuildsenabled 1 -%endif - -%if !%{with_debuginfo} -%define _enable_debug_packages 0 -%endif -%define debuginfodir /usr/lib/debug -# Needed because we override almost everything involving build-ids -# and debuginfo generation. Currently we rely on the old alldebug setting. -%global _build_id_links alldebug - -# kernel PAE is only built on ARMv7 -%ifnarch armv7hl -%define with_pae 0 -%endif - -# if requested, only build base kernel -%if %{with_baseonly} -%define with_pae 0 -%define with_debug 0 -%define with_vdso_install 0 -%define with_perf 0 -%define with_tools 0 -%define with_bpftool 0 -%define with_kernel_abi_stablelists 0 -%define with_selftests 0 -%define with_cross 0 -%define with_cross_headers 0 -%define with_ipaclones 0 -%endif - -# if requested, only build pae kernel -%if %{with_paeonly} -%define with_up 0 -%define with_debug 0 -%endif - -# if requested, only build debug kernel -%if %{with_dbgonly} -%define with_up 0 -%define with_vdso_install 0 -%define with_perf 0 -%define with_tools 0 -%define with_bpftool 0 -%define with_kernel_abi_stablelists 0 -%define with_selftests 0 -%define with_cross 0 -%define with_cross_headers 0 -%define with_ipaclones 0 -%endif - -# turn off kABI DUP check and DWARF-based check if kABI check is disabled -%if !%{with_kabichk} -%define with_kabidupchk 0 -%define with_kabidwchk 0 -%endif - -%if %{with_vdso_install} -%define use_vdso 1 -%endif - -# selftests require bpftool to be built -%if %{with_selftests} -%define with_bpftool 1 -%endif - -%ifnarch noarch -%define with_kernel_abi_stablelists 0 -%endif - -# Overrides for generic default options - -# only package docs noarch -%ifnarch noarch -%define with_doc 0 -%define doc_build_fail true -%endif - -%if 0%{?fedora} -# don't do debug builds on anything but i686 and x86_64 -%ifnarch i686 x86_64 -%define with_debug 0 -%endif -%endif - -# don't build noarch kernels or headers (duh) -%ifarch noarch -%define with_up 0 -%define with_headers 0 -%define with_cross_headers 0 -%define with_tools 0 -%define with_perf 0 -%define with_bpftool 0 -%define with_selftests 0 -%define with_debug 0 -%define all_arch_configs kernel-%{version}-*.config -%endif - -# sparse blows up on ppc -%ifnarch ppc64le -%define with_sparse 0 -%endif - -# zfcpdump mechanism is s390 only -%ifnarch s390x -%define with_zfcpdump 0 -%endif - -%if 0%{?fedora} -# This is not for Fedora -%define with_zfcpdump 0 -%endif - -# Per-arch tweaks - -%ifarch i686 -%define asmarch x86 -%define hdrarch i386 -%define all_arch_configs kernel-%{version}-i?86*.config -%define kernel_image arch/x86/boot/bzImage -%endif - -%ifarch x86_64 -%define asmarch x86 -%define all_arch_configs kernel-%{version}-x86_64*.config -%define kernel_image arch/x86/boot/bzImage -%endif - -%ifarch ppc64le -%define asmarch powerpc -%define hdrarch powerpc -%define make_target vmlinux -%define kernel_image vmlinux -%define kernel_image_elf 1 -%define use_vdso 0 -%define all_arch_configs kernel-%{version}-ppc64le*.config -%endif - -%ifarch s390x -%define asmarch s390 -%define hdrarch s390 -%define all_arch_configs kernel-%{version}-s390x.config -%define kernel_image arch/s390/boot/bzImage -%define vmlinux_decompressor arch/s390/boot/compressed/vmlinux -%endif - -%ifarch %{arm} -%define all_arch_configs kernel-%{version}-arm*.config -%define skip_nonpae_vdso 1 -%define asmarch arm -%define hdrarch arm -%define make_target bzImage -%define kernel_image arch/arm/boot/zImage -# http://lists.infradead.org/pipermail/linux-arm-kernel/2012-March/091404.html -%define kernel_mflags KALLSYMS_EXTRA_PASS=1 -# we only build headers/perf/tools on the base arm arches -# just like we used to only build them on i386 for x86 -%ifnarch armv7hl -%define with_headers 0 -%define with_cross_headers 0 -%endif -# These currently don't compile on armv7 -%define with_selftests 0 -%endif - -%ifarch aarch64 -%define all_arch_configs kernel-%{version}-aarch64*.config -%define asmarch arm64 -%define hdrarch arm64 -%define make_target Image.gz -%define kernel_image arch/arm64/boot/Image.gz -%endif - -# Should make listnewconfig fail if there's config options -# printed out? -%if %{nopatches} -%define with_configchecks 0 -%endif - -# To temporarily exclude an architecture from being built, add it to -# %%nobuildarches. Do _NOT_ use the ExclusiveArch: line, because if we -# don't build kernel-headers then the new build system will no longer let -# us use the previous build of that package -- it'll just be completely AWOL. -# Which is a BadThing(tm). - -# We only build kernel-headers on the following... -%if 0%{?fedora} -%define nobuildarches i386 -%else -%define nobuildarches i386 i686 %{arm} -%endif - -%ifarch %nobuildarches -# disable BuildKernel commands -%define with_up 0 -%define with_debug 0 -%define with_pae 0 -%define with_zfcpdump 0 - -%define with_debuginfo 0 -%define with_perf 0 -%define with_tools 0 -%define with_bpftool 0 -%define with_selftests 0 -%define _enable_debug_packages 0 -%endif - -# Architectures we build tools/cpupower on -%if 0%{?fedora} -%define cpupowerarchs %{ix86} x86_64 ppc64le %{arm} aarch64 -%else -%define cpupowerarchs i686 x86_64 ppc64le aarch64 -%endif - -%if 0%{?use_vdso} - -%if 0%{?skip_nonpae_vdso} -%define _use_vdso 0 -%else -%define _use_vdso 1 -%endif - -%else -%define _use_vdso 0 -%endif - -# If build of debug packages is disabled, we need to know if we want to create -# meta debug packages or not, after we define with_debug for all specific cases -# above. So this must be at the end here, after all cases of with_debug or not. -%define with_debug_meta 0 -%if !%{debugbuildsenabled} -%if %{with_debug} -%define with_debug_meta 1 -%endif -%define with_debug 0 -%endif - - -# -# Packages that need to be installed before the kernel is, because the %%post -# scripts use them. -# -%define kernel_prereq coreutils, systemd >= 203-2, /usr/bin/kernel-install -%define initrd_prereq dracut >= 027 - - -Name: kernel -License: GPLv2 and Redistributable, no modification permitted -URL: https://www.kernel.org/ -Version: %{specversion} -Release: %{pkg_release} -# DO NOT CHANGE THE 'ExclusiveArch' LINE TO TEMPORARILY EXCLUDE AN ARCHITECTURE BUILD. -# SET %%nobuildarches (ABOVE) INSTEAD -%if 0%{?fedora} -ExclusiveArch: noarch x86_64 s390x %{arm} aarch64 ppc64le -%else -ExclusiveArch: noarch i386 i686 x86_64 s390x %{arm} aarch64 ppc64le -%endif -ExclusiveOS: Linux -%ifnarch %{nobuildarches} -Requires: kernel-core-uname-r = %{KVERREL} -Requires: kernel-modules-uname-r = %{KVERREL} -%endif - - -# -# List the packages used during the kernel build -# -BuildRequires: kmod, patch, bash, coreutils, tar, git-core, which -BuildRequires: bzip2, xz, findutils, gzip, m4, perl-interpreter, perl-Carp, perl-devel, perl-generators, make, diffutils, gawk -BuildRequires: gcc, binutils, redhat-rpm-config, hmaccalc, bison, flex, gcc-c++ -BuildRequires: net-tools, hostname, bc, elfutils-devel -BuildRequires: dwarves -BuildRequires: python3-devel -BuildRequires: gcc-plugin-devel -# glibc-static is required for a consistent build environment (specifically -# CONFIG_CC_CAN_LINK_STATIC=y). -BuildRequires: glibc-static -%ifnarch %{nobuildarches} noarch -BuildRequires: bpftool -%endif -%if %{with_headers} -BuildRequires: rsync -%endif -%if %{with_doc} -BuildRequires: xmlto, asciidoc, python3-sphinx, python3-sphinx_rtd_theme -%endif -%if %{with_sparse} -BuildRequires: sparse -%endif -%if %{with_perf} -BuildRequires: zlib-devel binutils-devel newt-devel perl(ExtUtils::Embed) bison flex xz-devel -BuildRequires: audit-libs-devel -BuildRequires: java-devel -BuildRequires: libbpf-devel -BuildRequires: libbabeltrace-devel -BuildRequires: libtraceevent-devel -%ifnarch %{arm} s390x -BuildRequires: numactl-devel -%endif -%ifarch aarch64 -BuildRequires: opencsd-devel >= 1.0.0 -%endif -%endif -%if %{with_tools} -BuildRequires: gettext ncurses-devel -BuildRequires: libcap-devel libcap-ng-devel -%ifnarch s390x -BuildRequires: pciutils-devel -%endif -%ifarch i686 x86_64 -BuildRequires: libnl3-devel -%endif -%endif -%if %{with_tools} || %{signmodules} || %{signkernel} -BuildRequires: openssl-devel -%endif -%if %{with_bpftool} -BuildRequires: python3-docutils -BuildRequires: zlib-devel binutils-devel -%endif -%if %{with_selftests} -BuildRequires: clang llvm -%ifnarch %{arm} -BuildRequires: numactl-devel -%endif -BuildRequires: libcap-devel libcap-ng-devel rsync libmnl-devel -%endif -BuildConflicts: rhbuildsys(DiskFree) < 500Mb -%if %{with_debuginfo} -BuildRequires: rpm-build, elfutils -BuildConflicts: rpm < 4.13.0.1-19 -BuildConflicts: dwarves < 1.13 -# Most of these should be enabled after more investigation -%undefine _include_minidebuginfo -%undefine _find_debuginfo_dwz_opts -%undefine _unique_build_ids -%undefine _unique_debug_names -%undefine _unique_debug_srcs -%undefine _debugsource_packages -%undefine _debuginfo_subpackages -%global _find_debuginfo_opts -r -%global _missing_build_ids_terminate_build 1 -%global _no_recompute_build_ids 1 -%endif -%if %{with_kabidwchk} || %{with_kabidw_base} -BuildRequires: kabi-dw -%endif - -%if %{signkernel}%{signmodules} -BuildRequires: openssl -%if %{signkernel} -# ELN uses Fedora signing process, so exclude -%if 0%{?rhel}%{?centos} && !0%{?eln} -BuildRequires: system-sb-certs -%endif -%ifarch x86_64 aarch64 -BuildRequires: nss-tools -BuildRequires: pesign >= 0.10-4 -%endif -%endif -%endif - -%if %{with_cross} -BuildRequires: binutils-%{_build_arch}-linux-gnu, gcc-%{_build_arch}-linux-gnu -%define cross_opts CROSS_COMPILE=%{_build_arch}-linux-gnu- -%define __strip %{_build_arch}-linux-gnu-strip -%endif - -# These below are required to build man pages -%if %{with_perf} -BuildRequires: xmlto -%endif -%if %{with_perf} || %{with_tools} -BuildRequires: asciidoc -%endif - -%if %{with toolchain_clang} -BuildRequires: clang -%endif - -%if %{with clang_lto} -BuildRequires: llvm -BuildRequires: lld -%endif - -# Because this is the kernel, it's hard to get a single upstream URL -# to represent the base without needing to do a bunch of patching. This -# tarball is generated from a src-git tree. If you want to see the -# exact git commit you can run -# -# xzcat -qq ${TARBALL} | git get-tar-commit-id -Source0: linux-%{tarfile_release}.tar.xz - -Source1: Makefile.rhelver - - -# Name of the packaged file containing signing key -%ifarch ppc64le -%define signing_key_filename kernel-signing-ppc.cer -%endif -%ifarch s390x -%define signing_key_filename kernel-signing-s390.cer -%endif - -%if %{?released_kernel} - -Source10: redhatsecurebootca5.cer -Source11: redhatsecurebootca1.cer -Source12: redhatsecureboot501.cer -Source13: redhatsecureboot301.cer -Source14: secureboot_s390.cer -Source15: secureboot_ppc.cer - -%define secureboot_ca_1 %{SOURCE10} -%define secureboot_ca_0 %{SOURCE11} -%ifarch x86_64 aarch64 -%define secureboot_key_1 %{SOURCE12} -%define pesign_name_1 redhatsecureboot501 -%define secureboot_key_0 %{SOURCE13} -%define pesign_name_0 redhatsecureboot301 -%endif -%ifarch s390x -%define secureboot_key_0 %{SOURCE14} -%define pesign_name_0 redhatsecureboot302 -%endif -%ifarch ppc64le -%define secureboot_key_0 %{SOURCE15} -%define pesign_name_0 redhatsecureboot303 -%endif - -# released_kernel -%else - -Source10: redhatsecurebootca4.cer -Source11: redhatsecurebootca2.cer -Source12: redhatsecureboot401.cer -Source13: redhatsecureboot003.cer - -%define secureboot_ca_1 %{SOURCE10} -%define secureboot_ca_0 %{SOURCE11} -%define secureboot_key_1 %{SOURCE12} -%define pesign_name_1 redhatsecureboot401 -%define secureboot_key_0 %{SOURCE13} -%define pesign_name_0 redhatsecureboot003 - -# released_kernel -%endif - -Source20: mod-denylist.sh -Source21: mod-sign.sh -Source22: parallel_xz.sh - -%define modsign_cmd %{SOURCE21} - -%if 0%{?include_rhel} -Source23: x509.genkey.rhel - -Source24: kernel-aarch64-rhel.config -Source25: kernel-aarch64-debug-rhel.config -Source26: mod-extra.list.rhel - -Source27: kernel-ppc64le-rhel.config -Source28: kernel-ppc64le-debug-rhel.config -Source29: kernel-s390x-rhel.config -Source30: kernel-s390x-debug-rhel.config -Source31: kernel-s390x-zfcpdump-rhel.config -Source32: kernel-x86_64-rhel.config -Source33: kernel-x86_64-debug-rhel.config - -Source34: filter-x86_64.sh.rhel -Source35: filter-armv7hl.sh.rhel -Source37: filter-aarch64.sh.rhel -Source38: filter-ppc64le.sh.rhel -Source39: filter-s390x.sh.rhel -Source40: filter-modules.sh.rhel - -Source41: x509.genkey.centos -%endif - -%if 0%{?include_fedora} -Source50: x509.genkey.fedora -Source51: mod-extra.list.fedora - -Source52: kernel-aarch64-fedora.config -Source53: kernel-aarch64-debug-fedora.config -Source54: kernel-armv7hl-fedora.config -Source55: kernel-armv7hl-debug-fedora.config -Source56: kernel-armv7hl-lpae-fedora.config -Source57: kernel-armv7hl-lpae-debug-fedora.config -Source60: kernel-ppc64le-fedora.config -Source61: kernel-ppc64le-debug-fedora.config -Source62: kernel-s390x-fedora.config -Source63: kernel-s390x-debug-fedora.config -Source64: kernel-x86_64-fedora.config -Source65: kernel-x86_64-debug-fedora.config - -Source67: filter-x86_64.sh.fedora -Source68: filter-armv7hl.sh.fedora -Source70: filter-aarch64.sh.fedora -Source71: filter-ppc64le.sh.fedora -Source72: filter-s390x.sh.fedora -Source73: filter-modules.sh.fedora -%endif - -Source75: partial-kgcov-snip.config -Source80: generate_all_configs.sh -Source81: process_configs.sh - -Source82: update_scripts.sh - -Source84: mod-internal.list - -Source100: rheldup3.x509 -Source101: rhelkpatch1.x509 - -Source200: check-kabi - -Source201: Module.kabi_aarch64 -Source202: Module.kabi_ppc64le -Source203: Module.kabi_s390x -Source204: Module.kabi_x86_64 - -Source210: Module.kabi_dup_aarch64 -Source211: Module.kabi_dup_ppc64le -Source212: Module.kabi_dup_s390x -Source213: Module.kabi_dup_x86_64 - -Source300: kernel-abi-stablelists-%{specversion}-%{pkgrelease}.tar.bz2 -Source301: kernel-kabi-dw-%{specversion}-%{pkgrelease}.tar.bz2 - -# Sources for kernel-tools -Source2000: cpupower.service -Source2001: cpupower.config -Source2002: kvm_stat.logrotate - -# Some people enjoy building customized kernels from the dist-git in Fedora and -# use this to override configuration options. One day they may all use the -# source tree, but in the mean time we carry this to support the legacy workflow -Source3000: merge.pl -Source3001: kernel-local -%if %{patchlist_changelog} -Source3002: Patchlist.changelog -%endif - -Source4000: README.rst -Source4001: rpminspect.yaml -Source4002: gating.yaml - -## Patches needed for building this package - -%if !%{nopatches} - -Patch1: patch-%{patchversion}-redhat.patch -%endif - -# empty final patch to facilitate testing of kernel patches -Patch999999: linux-kernel-test.patch - -# END OF PATCH DEFINITIONS - -%description -The kernel meta package - -# -# This macro does requires, provides, conflicts, obsoletes for a kernel package. -# %%kernel_reqprovconf <subpackage> -# It uses any kernel_<subpackage>_conflicts and kernel_<subpackage>_obsoletes -# macros defined above. -# -%define kernel_reqprovconf \ -Provides: kernel = %{specversion}-%{pkg_release}\ -Provides: kernel-%{_target_cpu} = %{specversion}-%{pkg_release}%{?1:+%{1}}\ -Provides: kernel-drm-nouveau = 16\ -Provides: kernel-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires(pre): %{kernel_prereq}\ -Requires(pre): %{initrd_prereq}\ -Requires(pre): ((linux-firmware >= 20150904-56.git6ebf5d57) if linux-firmware)\ -Recommends: linux-firmware\ -Requires(preun): systemd >= 200\ -Conflicts: xfsprogs < 4.3.0-1\ -Conflicts: xorg-x11-drv-vmmouse < 13.0.99\ -%{expand:%%{?kernel%{?1:_%{1}}_conflicts:Conflicts: %%{kernel%{?1:_%{1}}_conflicts}}}\ -%{expand:%%{?kernel%{?1:_%{1}}_obsoletes:Obsoletes: %%{kernel%{?1:_%{1}}_obsoletes}}}\ -%{expand:%%{?kernel%{?1:_%{1}}_provides:Provides: %%{kernel%{?1:_%{1}}_provides}}}\ -# We can't let RPM do the dependencies automatic because it'll then pick up\ -# a correct but undesirable perl dependency from the module headers which\ -# isn't required for the kernel proper to function\ -AutoReq: no\ -AutoProv: yes\ -%{nil} - - -%package doc -Summary: Various documentation bits found in the kernel source -Group: Documentation -%description doc -This package contains documentation files from the kernel -source. Various bits of information about the Linux kernel and the -device drivers shipped with it are documented in these files. - -You'll want to install this package if you need a reference to the -options that can be passed to Linux kernel modules at load time. - - -%package headers -Summary: Header files for the Linux kernel for use by glibc -Obsoletes: glibc-kernheaders < 3.0-46 -Provides: glibc-kernheaders = 3.0-46 -%description headers -Kernel-headers includes the C header files that specify the interface -between the Linux kernel and userspace libraries and programs. The -header files define structures and constants that are needed for -building most standard programs and are also needed for rebuilding the -glibc package. - -%package cross-headers -Summary: Header files for the Linux kernel for use by cross-glibc -%description cross-headers -Kernel-cross-headers includes the C header files that specify the interface -between the Linux kernel and userspace libraries and programs. The -header files define structures and constants that are needed for -building most standard programs and are also needed for rebuilding the -cross-glibc package. - - -%package debuginfo-common-%{_target_cpu} -Summary: Kernel source files used by %{name}-debuginfo packages -Provides: installonlypkg(kernel) -%description debuginfo-common-%{_target_cpu} -This package is required by %{name}-debuginfo subpackages. -It provides the kernel source files common to all builds. - -%if %{with_perf} -%package -n perf -Summary: Performance monitoring for the Linux kernel -Requires: bzip2 -License: GPLv2 -%description -n perf -This package contains the perf tool, which enables performance monitoring -of the Linux kernel. - -%package -n perf-debuginfo -Summary: Debug information for package perf -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release} -AutoReqProv: no -%description -n perf-debuginfo -This package provides debug information for the perf package. - -# Note that this pattern only works right to match the .build-id -# symlinks because of the trailing nonmatching alternation and -# the leading .*, because of find-debuginfo.sh's buggy handling -# of matching the pattern against the symlinks file. -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{_bindir}/perf(\.debug)?|.*%%{_libexecdir}/perf-core/.*|.*%%{_libdir}/libperf-jvmti.so(\.debug)?|XXX' -o perf-debuginfo.list} - -%package -n python3-perf -Summary: Python bindings for apps which will manipulate perf events -%description -n python3-perf -The python3-perf package contains a module that permits applications -written in the Python programming language to use the interface -to manipulate perf events. - -%package -n python3-perf-debuginfo -Summary: Debug information for package perf python bindings -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release} -AutoReqProv: no -%description -n python3-perf-debuginfo -This package provides debug information for the perf python bindings. - -# the python_sitearch macro should already be defined from above -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{python3_sitearch}/perf.*so(\.debug)?|XXX' -o python3-perf-debuginfo.list} - -# with_perf -%endif - -%if %{with_tools} -%package -n kernel-tools -Summary: Assortment of tools for the Linux kernel -License: GPLv2 -%ifarch %{cpupowerarchs} -Provides: cpupowerutils = 1:009-0.6.p1 -Obsoletes: cpupowerutils < 1:009-0.6.p1 -Provides: cpufreq-utils = 1:009-0.6.p1 -Provides: cpufrequtils = 1:009-0.6.p1 -Obsoletes: cpufreq-utils < 1:009-0.6.p1 -Obsoletes: cpufrequtils < 1:009-0.6.p1 -Obsoletes: cpuspeed < 1:1.5-16 -Requires: kernel-tools-libs = %{version}-%{release} -%endif -%define __requires_exclude ^%{_bindir}/python -%description -n kernel-tools -This package contains the tools/ directory from the kernel source -and the supporting documentation. - -%package -n kernel-tools-libs -Summary: Libraries for the kernels-tools -License: GPLv2 -%description -n kernel-tools-libs -This package contains the libraries built from the tools/ directory -from the kernel source. - -%package -n kernel-tools-libs-devel -Summary: Assortment of tools for the Linux kernel -License: GPLv2 -Requires: kernel-tools = %{version}-%{release} -%ifarch %{cpupowerarchs} -Provides: cpupowerutils-devel = 1:009-0.6.p1 -Obsoletes: cpupowerutils-devel < 1:009-0.6.p1 -%endif -Requires: kernel-tools-libs = %{version}-%{release} -Provides: kernel-tools-devel -%description -n kernel-tools-libs-devel -This package contains the development files for the tools/ directory from -the kernel source. - -%package -n kernel-tools-debuginfo -Summary: Debug information for package kernel-tools -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release} -AutoReqProv: no -%description -n kernel-tools-debuginfo -This package provides debug information for package kernel-tools. - -# Note that this pattern only works right to match the .build-id -# symlinks because of the trailing nonmatching alternation and -# the leading .*, because of find-debuginfo.sh's buggy handling -# of matching the pattern against the symlinks file. -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{_bindir}/centrino-decode(\.debug)?|.*%%{_bindir}/powernow-k8-decode(\.debug)?|.*%%{_bindir}/cpupower(\.debug)?|.*%%{_libdir}/libcpupower.*|.*%%{_bindir}/turbostat(\.debug)?|.*%%{_bindir}/x86_energy_perf_policy(\.debug)?|.*%%{_bindir}/tmon(\.debug)?|.*%%{_bindir}/lsgpio(\.debug)?|.*%%{_bindir}/gpio-hammer(\.debug)?|.*%%{_bindir}/gpio-event-mon(\.debug)?|.*%%{_bindir}/gpio-watch(\.debug)?|.*%%{_bindir}/iio_event_monitor(\.debug)?|.*%%{_bindir}/iio_generic_buffer(\.debug)?|.*%%{_bindir}/lsiio(\.debug)?|.*%%{_bindir}/intel-speed-select(\.debug)?|.*%%{_bindir}/page_owner_sort(\.debug)?|.*%%{_bindir}/slabinfo(\.debug)?|.*%%{_sbindir}/intel_sdsi(\.debug)?|XXX' -o kernel-tools-debuginfo.list} - -# with_tools -%endif - -%if %{with_bpftool} - -%package -n bpftool -Summary: Inspection and simple manipulation of eBPF programs and maps -License: GPLv2 -%description -n bpftool -This package contains the bpftool, which allows inspection and simple -manipulation of eBPF programs and maps. - -%package -n bpftool-debuginfo -Summary: Debug information for package bpftool -Group: Development/Debug -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release} -AutoReqProv: no -%description -n bpftool-debuginfo -This package provides debug information for the bpftool package. - -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{_sbindir}/bpftool(\.debug)?|XXX' -o bpftool-debuginfo.list} - -# with_bpftool -%endif - -%if %{with_selftests} - -%package selftests-internal -Summary: Kernel samples and selftests -License: GPLv2 -Requires: binutils, bpftool, iproute-tc, nmap-ncat, python3 -%description selftests-internal -Kernel sample programs and selftests. - -# Note that this pattern only works right to match the .build-id -# symlinks because of the trailing nonmatching alternation and -# the leading .*, because of find-debuginfo.sh's buggy handling -# of matching the pattern against the symlinks file. -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{_libexecdir}/(ksamples|kselftests)/.*|XXX' -o selftests-debuginfo.list} - -# with_selftests -%endif - -%if %{with_gcov} -%package gcov -Summary: gcov graph and source files for coverage data collection. -%description gcov -kernel-gcov includes the gcov graph and source files for gcov coverage collection. -%endif - -%package -n kernel-abi-stablelists -Summary: The Red Hat Enterprise Linux kernel ABI symbol stablelists -AutoReqProv: no -%description -n kernel-abi-stablelists -The kABI package contains information pertaining to the Red Hat Enterprise -Linux kernel ABI, including lists of kernel symbols that are needed by -external Linux kernel modules, and a yum plugin to aid enforcement. - -%if %{with_kabidw_base} -%package kernel-kabidw-base-internal -Summary: The baseline dataset for kABI verification using DWARF data -Group: System Environment/Kernel -AutoReqProv: no -%description kernel-kabidw-base-internal -The package contains data describing the current ABI of the Red Hat Enterprise -Linux kernel, suitable for the kabi-dw tool. -%endif - -# -# This macro creates a kernel-<subpackage>-debuginfo package. -# %%kernel_debuginfo_package <subpackage> -# -# Explanation of the find_debuginfo_opts: We build multiple kernels (debug -# pae etc.) so the regex filters those kernels appropriately. We also -# have to package several binaries as part of kernel-devel but getting -# unique build-ids is tricky for these userspace binaries. We don't really -# care about debugging those so we just filter those out and remove it. -%define kernel_debuginfo_package() \ -%package %{?1:%{1}-}debuginfo\ -Summary: Debug information for package %{name}%{?1:-%{1}}\ -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release}\ -Provides: %{name}%{?1:-%{1}}-debuginfo-%{_target_cpu} = %{version}-%{release}\ -Provides: installonlypkg(kernel)\ -AutoReqProv: no\ -%description %{?1:%{1}-}debuginfo\ -This package provides debug information for package %{name}%{?1:-%{1}}.\ -This is required to use SystemTap with %{name}%{?1:-%{1}}-%{KVERREL}.\ -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} --keep-section '.BTF' -p '.*\/usr\/src\/kernels/.*|XXX' -o ignored-debuginfo.list -p '/.*/%%{KVERREL_RE}%{?1:[+]%{1}}/.*|/.*%%{KVERREL_RE}%{?1:\+%{1}}(\.debug)?' -o debuginfo%{?1}.list}\ -%{nil} - -# -# This macro creates a kernel-<subpackage>-devel package. -# %%kernel_devel_package [-m] <subpackage> <pretty-name> -# -%define kernel_devel_package(m) \ -%package %{?1:%{1}-}devel\ -Summary: Development package for building kernel modules to match the %{?2:%{2} }kernel\ -Provides: kernel%{?1:-%{1}}-devel-%{_target_cpu} = %{version}-%{release}\ -Provides: kernel-devel-%{_target_cpu} = %{version}-%{release}%{?1:+%{1}}\ -Provides: kernel-devel-uname-r = %{KVERREL}%{?1:+%{1}}\ -Provides: installonlypkg(kernel)\ -AutoReqProv: no\ -Requires(pre): findutils\ -Requires: findutils\ -Requires: perl-interpreter\ -Requires: openssl-devel\ -Requires: elfutils-libelf-devel\ -Requires: bison\ -Requires: flex\ -Requires: make\ -Requires: gcc\ -%if %{-m:1}%{!-m:0}\ -Requires: kernel-devel-uname-r = %{KVERREL}\ -%endif\ -%description %{?1:%{1}-}devel\ -This package provides kernel headers and makefiles sufficient to build modules\ -against the %{?2:%{2} }kernel package.\ -%{nil} - -# -# This macro creates an empty kernel-<subpackage>-devel-matched package that -# requires both the core and devel packages locked on the same version. -# %%kernel_devel_matched_package [-m] <subpackage> <pretty-name> -# -%define kernel_devel_matched_package(m) \ -%package %{?1:%{1}-}devel-matched\ -Summary: Meta package to install matching core and devel packages for a given %{?2:%{2} }kernel\ -Requires: kernel%{?1:-%{1}}-devel = %{version}-%{release}\ -Requires: kernel%{?1:-%{1}}-core = %{version}-%{release}\ -%description %{?1:%{1}-}devel-matched\ -This meta package is used to install matching core and devel packages for a given %{?2:%{2} }kernel.\ -%{nil} - -# -# kernel-<variant>-ipaclones-internal package -# -%define kernel_ipaclones_package() \ -%package %{?1:%{1}-}ipaclones-internal\ -Summary: *.ipa-clones files generated by -fdump-ipa-clones for kernel%{?1:-%{1}}\ -Group: System Environment/Kernel\ -AutoReqProv: no\ -%description %{?1:%{1}-}ipaclones-internal\ -This package provides *.ipa-clones files.\ -%{nil} - -# -# This macro creates a kernel-<subpackage>-modules-internal package. -# %%kernel_modules_internal_package <subpackage> <pretty-name> -# -%define kernel_modules_internal_package() \ -%package %{?1:%{1}-}modules-internal\ -Summary: Extra kernel modules to match the %{?2:%{2} }kernel\ -Group: System Environment/Kernel\ -Provides: kernel%{?1:-%{1}}-modules-internal-%{_target_cpu} = %{version}-%{release}\ -Provides: kernel%{?1:-%{1}}-modules-internal-%{_target_cpu} = %{version}-%{release}%{?1:+%{1}}\ -Provides: kernel%{?1:-%{1}}-modules-internal = %{version}-%{release}%{?1:+%{1}}\ -Provides: installonlypkg(kernel-module)\ -Provides: kernel%{?1:-%{1}}-modules-internal-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel%{?1:-%{1}}-modules-uname-r = %{KVERREL}%{?1:+%{1}}\ -AutoReq: no\ -AutoProv: yes\ -%description %{?1:%{1}-}modules-internal\ -This package provides kernel modules for the %{?2:%{2} }kernel package for Red Hat internal usage.\ -%{nil} - -# -# This macro creates a kernel-<subpackage>-modules-extra package. -# %%kernel_modules_extra_package [-m] <subpackage> <pretty-name> -# -%define kernel_modules_extra_package(m) \ -%package %{?1:%{1}-}modules-extra\ -Summary: Extra kernel modules to match the %{?2:%{2} }kernel\ -Provides: kernel%{?1:-%{1}}-modules-extra-%{_target_cpu} = %{version}-%{release}\ -Provides: kernel%{?1:-%{1}}-modules-extra-%{_target_cpu} = %{version}-%{release}%{?1:+%{1}}\ -Provides: kernel%{?1:-%{1}}-modules-extra = %{version}-%{release}%{?1:+%{1}}\ -Provides: installonlypkg(kernel-module)\ -Provides: kernel%{?1:-%{1}}-modules-extra-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel%{?1:-%{1}}-modules-uname-r = %{KVERREL}%{?1:+%{1}}\ -%if %{-m:1}%{!-m:0}\ -Requires: kernel-modules-extra-uname-r = %{KVERREL}\ -%endif\ -AutoReq: no\ -AutoProv: yes\ -%description %{?1:%{1}-}modules-extra\ -This package provides less commonly used kernel modules for the %{?2:%{2} }kernel package.\ -%{nil} - -# -# This macro creates a kernel-<subpackage>-modules package. -# %%kernel_modules_package [-m] <subpackage> <pretty-name> -# -%define kernel_modules_package(m) \ -%package %{?1:%{1}-}modules\ -Summary: kernel modules to match the %{?2:%{2}-}core kernel\ -Provides: kernel%{?1:-%{1}}-modules-%{_target_cpu} = %{version}-%{release}\ -Provides: kernel-modules-%{_target_cpu} = %{version}-%{release}%{?1:+%{1}}\ -Provides: kernel-modules = %{version}-%{release}%{?1:+%{1}}\ -Provides: installonlypkg(kernel-module)\ -Provides: kernel%{?1:-%{1}}-modules-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel-uname-r = %{KVERREL}%{?1:+%{1}}\ -%if %{-m:1}%{!-m:0}\ -Requires: kernel-modules-uname-r = %{KVERREL}\ -%endif\ -AutoReq: no\ -AutoProv: yes\ -%description %{?1:%{1}-}modules\ -This package provides commonly used kernel modules for the %{?2:%{2}-}core kernel package.\ -%{nil} - -# -# this macro creates a kernel-<subpackage> meta package. -# %%kernel_meta_package <subpackage> -# -%define kernel_meta_package() \ -%package %{1}\ -summary: kernel meta-package for the %{1} kernel\ -Requires: kernel-%{1}-core-uname-r = %{KVERREL}+%{1}\ -Requires: kernel-%{1}-modules-uname-r = %{KVERREL}+%{1}\ -Provides: installonlypkg(kernel)\ -%description %{1}\ -The meta-package for the %{1} kernel\ -%{nil} - -# -# This macro creates a kernel-<subpackage> and its -devel and -debuginfo too. -# %%define variant_summary The Linux kernel compiled for <configuration> -# %%kernel_variant_package [-n <pretty-name>] [-m] <subpackage> -# -%define kernel_variant_package(n:m) \ -%package %{?1:%{1}-}core\ -Summary: %{variant_summary}\ -Provides: kernel-%{?1:%{1}-}core-uname-r = %{KVERREL}%{?1:+%{1}}\ -Provides: installonlypkg(kernel)\ -%if %{-m:1}%{!-m:0}\ -Requires: kernel-core-uname-r = %{KVERREL}\ -%endif\ -%{expand:%%kernel_reqprovconf}\ -%if %{?1:1} %{!?1:0} \ -%{expand:%%kernel_meta_package %{?1:%{1}}}\ -%endif\ -%{expand:%%kernel_devel_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}} %{-m:%{-m}}}\ -%{expand:%%kernel_devel_matched_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}} %{-m:%{-m}}}\ -%{expand:%%kernel_modules_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}} %{-m:%{-m}}}\ -%{expand:%%kernel_modules_extra_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}} %{-m:%{-m}}}\ -%if %{-m:0}%{!-m:1}\ -%{expand:%%kernel_modules_internal_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}}}\ -%{expand:%%kernel_debuginfo_package %{?1:%{1}}}\ -%endif\ -%{nil} - -# Now, each variant package. - -%if %{with_pae} -%define variant_summary The Linux kernel compiled for Cortex-A15 -%kernel_variant_package lpae -%description lpae-core -This package includes a version of the Linux kernel with support for -Cortex-A15 devices with LPAE and HW virtualisation support -%endif - -%if %{with_zfcpdump} -%define variant_summary The Linux kernel compiled for zfcpdump usage -%kernel_variant_package zfcpdump -%description zfcpdump-core -The kernel package contains the Linux kernel (vmlinuz) for use by the -zfcpdump infrastructure. -# with_zfcpdump -%endif - -%define variant_summary The Linux kernel compiled with extra debugging enabled -%if !%{debugbuildsenabled} -%kernel_variant_package -m debug -%else -%kernel_variant_package debug -%endif -%description debug-core -The kernel package contains the Linux kernel (vmlinuz), the core of any -Linux operating system. The kernel handles the basic functions -of the operating system: memory allocation, process allocation, device -input and output, etc. - -This variant of the kernel has numerous debugging options enabled. -It should only be installed when trying to gather additional information -on kernel bugs, as some of these options impact performance noticably. - -# And finally the main -core package - -%define variant_summary The Linux kernel -%kernel_variant_package -%description core -The kernel package contains the Linux kernel (vmlinuz), the core of any -Linux operating system. The kernel handles the basic functions -of the operating system: memory allocation, process allocation, device -input and output, etc. - -%if %{with_ipaclones} -%kernel_ipaclones_package -%endif - -%prep -# do a few sanity-checks for --with *only builds -%if %{with_baseonly} -%if !%{with_up} -echo "Cannot build --with baseonly, up build is disabled" -exit 1 -%endif -%endif - -# more sanity checking; do it quietly -if [ "%{patches}" != "%%{patches}" ] ; then - for patch in %{patches} ; do - if [ ! -f $patch ] ; then - echo "ERROR: Patch ${patch##/*/} listed in specfile but is missing" - exit 1 - fi - done -fi 2>/dev/null - -patch_command='patch -p1 -F1 -s' -ApplyPatch() -{ - local patch=$1 - shift - if [ ! -f $RPM_SOURCE_DIR/$patch ]; then - exit 1 - fi - if ! grep -E "^Patch[0-9]+: $patch\$" %{_specdir}/${RPM_PACKAGE_NAME}.spec ; then - if [ "${patch:0:8}" != "patch-%{kversion}." ] ; then - echo "ERROR: Patch $patch not listed as a source patch in specfile" - exit 1 - fi - fi 2>/dev/null - case "$patch" in - *.bz2) bunzip2 < "$RPM_SOURCE_DIR/$patch" | $patch_command ${1+"$@"} ;; - *.gz) gunzip < "$RPM_SOURCE_DIR/$patch" | $patch_command ${1+"$@"} ;; - *.xz) unxz < "$RPM_SOURCE_DIR/$patch" | $patch_command ${1+"$@"} ;; - *) $patch_command ${1+"$@"} < "$RPM_SOURCE_DIR/$patch" ;; - esac -} - -# don't apply patch if it's empty -ApplyOptionalPatch() -{ - local patch=$1 - shift - if [ ! -f $RPM_SOURCE_DIR/$patch ]; then - exit 1 - fi - local C=$(wc -l $RPM_SOURCE_DIR/$patch | awk '{print $1}') - if [ "$C" -gt 9 ]; then - ApplyPatch $patch ${1+"$@"} - fi -} - -%setup -q -n kernel-%{tarfile_release} -c -mv linux-%{tarfile_release} linux-%{KVERREL} - -cd linux-%{KVERREL} -cp -a %{SOURCE1} . - -%if !%{nopatches} - -ApplyOptionalPatch patch-%{patchversion}-redhat.patch -%endif - -ApplyOptionalPatch linux-kernel-test.patch - -# END OF PATCH APPLICATIONS - -# Any further pre-build tree manipulations happen here. - -chmod +x scripts/checkpatch.pl -mv COPYING COPYING-%{version}-%{release} - -# This Prevents scripts/setlocalversion from mucking with our version numbers. -touch .scmversion - -# Mangle /usr/bin/python shebangs to /usr/bin/python3 -# Mangle all Python shebangs to be Python 3 explicitly -# -p preserves timestamps -# -n prevents creating ~backup files -# -i specifies the interpreter for the shebang -# This fixes errors such as -# *** ERROR: ambiguous python shebang in /usr/bin/kvm_stat: #!/usr/bin/python. Change it to python3 (or python2) explicitly. -# We patch all sources below for which we got a report/error. -pathfix.py -i "%{__python3} %{py3_shbang_opts}" -p -n \ - tools/kvm/kvm_stat/kvm_stat \ - scripts/show_delta \ - scripts/diffconfig \ - scripts/bloat-o-meter \ - scripts/jobserver-exec \ - tools \ - Documentation \ - scripts/clang-tools - -# only deal with configs if we are going to build for the arch -%ifnarch %nobuildarches - -if [ -L configs ]; then - rm -f configs -fi -mkdir configs -cd configs - -# Drop some necessary files from the source dir into the buildroot -cp $RPM_SOURCE_DIR/kernel-*.config . -cp %{SOURCE80} . -# merge.pl -cp %{SOURCE3000} . -# kernel-local -cp %{SOURCE3001} . -FLAVOR=%{primary_target} SPECVERSION=%{version} ./generate_all_configs.sh %{debugbuildsenabled} - -# Merge in any user-provided local config option changes -%ifnarch %nobuildarches -for i in %{all_arch_configs} -do - mv $i $i.tmp - ./merge.pl %{SOURCE3001} $i.tmp > $i -%if %{with_gcov} - echo "Merging with gcov options" - cat %{SOURCE75} - mv $i $i.tmp - ./merge.pl %{SOURCE75} $i.tmp > $i -%endif - rm $i.tmp -done -%endif - -%if %{with clang_lto} -for i in *aarch64*.config *x86_64*.config; do - sed -i 's/# CONFIG_LTO_CLANG_THIN is not set/CONFIG_LTO_CLANG_THIN=y/' $i - sed -i 's/CONFIG_LTO_NONE=y/# CONFIG_LTO_NONE is not set/' $i -done -%endif - -# Add DUP and kpatch certificates to system trusted keys for RHEL -%if 0%{?rhel} -%if %{signkernel}%{signmodules} -openssl x509 -inform der -in %{SOURCE100} -out rheldup3.pem -openssl x509 -inform der -in %{SOURCE101} -out rhelkpatch1.pem -cat rheldup3.pem rhelkpatch1.pem > ../certs/rhel.pem -%ifarch s390x ppc64le -openssl x509 -inform der -in %{secureboot_ca_0} -out secureboot.pem -cat secureboot.pem >> ../certs/rhel.pem -%endif -for i in *.config; do - sed -i 's@CONFIG_SYSTEM_TRUSTED_KEYS=""@CONFIG_SYSTEM_TRUSTED_KEYS="certs/rhel.pem"@' $i -done -%endif -%endif - -cp %{SOURCE81} . -OPTS="" -%if %{with_configchecks} - OPTS="$OPTS -w -n -c" -%endif -%if %{with clang_lto} -for opt in %{clang_make_opts}; do - OPTS="$OPTS -m $opt" -done -%endif -RHJOBS=$RPM_BUILD_NCPUS PACKAGE_NAME=kernel ./process_configs.sh $OPTS ${specversion} - -cp %{SOURCE82} . -RPM_SOURCE_DIR=$RPM_SOURCE_DIR ./update_scripts.sh %{primary_target} - -# We may want to override files from the primary target in case of building -# against a flavour of it (eg. centos not rhel), thus override it here if -# necessary -if [ "%{primary_target}" == "rhel" ]; then -%if 0%{?centos} - echo "Updating scripts/sources to centos version" - RPM_SOURCE_DIR=$RPM_SOURCE_DIR ./update_scripts.sh centos -%else - echo "Not updating scripts/sources to centos version" -%endif -fi - -# end of kernel config -%endif - -cd .. -# # End of Configs stuff - -# get rid of unwanted files resulting from patch fuzz -find . \( -name "*.orig" -o -name "*~" \) -delete >/dev/null - -# remove unnecessary SCM files -find . -name .gitignore -delete >/dev/null - -cd .. - -### -### build -### -%build - -%if %{with_sparse} -%define sparse_mflags C=1 -%endif - -cp_vmlinux() -{ - eu-strip --remove-comment -o "$2" "$1" -} - -# Note we need to disable these flags for cross builds because the flags -# from redhat-rpm-config assume that host == target so target arch -# flags cause issues with the host compiler. -%if !%{with_cross} -%define build_hostcflags %{?build_cflags} -%define build_hostldflags %{?build_ldflags} -%endif - -%define make %{__make} %{?cross_opts} %{?make_opts} HOSTCFLAGS="%{?build_hostcflags}" HOSTLDFLAGS="%{?build_hostldflags}" - -InitBuildVars() { - # Initialize the kernel .config file and create some variables that are - # needed for the actual build process. - - Variant=$1 - - # Pick the right kernel config file - Config=kernel-%{version}-%{_target_cpu}${Variant:+-${Variant}}.config - DevelDir=/usr/src/kernels/%{KVERREL}${Variant:++${Variant}} - - KernelVer=%{version}-%{release}.%{_target_cpu}${Variant:++${Variant}} - - # make sure EXTRAVERSION says what we want it to say - # Trim the release if this is a CI build, since KERNELVERSION is limited to 64 characters - ShortRel=$(perl -e "print \"%{release}\" =~ s/\.pr\.[0-9A-Fa-f]{32}//r") - perl -p -i -e "s/^EXTRAVERSION.*/EXTRAVERSION = -${ShortRel}.%{_target_cpu}${Variant:++${Variant}}/" Makefile - - # if pre-rc1 devel kernel, must fix up PATCHLEVEL for our versioning scheme - # if we are post rc1 this should match anyway so this won't matter - perl -p -i -e 's/^PATCHLEVEL.*/PATCHLEVEL = %{patchlevel}/' Makefile - - %{make} %{?_smp_mflags} mrproper - cp configs/$Config .config - - %if %{signkernel}%{signmodules} - cp configs/x509.genkey certs/. - %endif - - Arch=`head -1 .config | cut -b 3-` - echo USING ARCH=$Arch - - KCFLAGS="%{?kcflags}" - - # add kpatch flags for base kernel - if [ "$Variant" == "" ]; then - KCFLAGS="$KCFLAGS %{?kpatch_kcflags}" - fi -} - -BuildKernel() { - MakeTarget=$1 - KernelImage=$2 - DoVDSO=$3 - Variant=$4 - InstallName=${5:-vmlinuz} - - DoModules=1 - if [ "$Variant" = "zfcpdump" ]; then - DoModules=0 - fi - - # When the bootable image is just the ELF kernel, strip it. - # We already copy the unstripped file into the debuginfo package. - if [ "$KernelImage" = vmlinux ]; then - CopyKernel=cp_vmlinux - else - CopyKernel=cp - fi - - InitBuildVars $Variant - - echo BUILDING A KERNEL FOR ${Variant} %{_target_cpu}... - - %{make} ARCH=$Arch olddefconfig >/dev/null - - # This ensures build-ids are unique to allow parallel debuginfo - perl -p -i -e "s/^CONFIG_BUILD_SALT.*/CONFIG_BUILD_SALT=\"%{KVERREL}\"/" .config - %{make} ARCH=$Arch KCFLAGS="$KCFLAGS" WITH_GCOV="%{?with_gcov}" %{?_smp_mflags} $MakeTarget %{?sparse_mflags} %{?kernel_mflags} - if [ $DoModules -eq 1 ]; then - %{make} ARCH=$Arch KCFLAGS="$KCFLAGS" WITH_GCOV="%{?with_gcov}" %{?_smp_mflags} modules %{?sparse_mflags} || exit 1 - fi - - mkdir -p $RPM_BUILD_ROOT/%{image_install_path} - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/systemtap -%if %{with_debuginfo} - mkdir -p $RPM_BUILD_ROOT%{debuginfodir}/%{image_install_path} -%endif - -%ifarch %{arm} aarch64 - %{make} ARCH=$Arch dtbs INSTALL_DTBS_PATH=$RPM_BUILD_ROOT/%{image_install_path}/dtb-$KernelVer - %{make} ARCH=$Arch dtbs_install INSTALL_DTBS_PATH=$RPM_BUILD_ROOT/%{image_install_path}/dtb-$KernelVer - cp -r $RPM_BUILD_ROOT/%{image_install_path}/dtb-$KernelVer $RPM_BUILD_ROOT/lib/modules/$KernelVer/dtb - find arch/$Arch/boot/dts -name '*.dtb' -type f -delete -%endif - - # Start installing the results - install -m 644 .config $RPM_BUILD_ROOT/boot/config-$KernelVer - install -m 644 .config $RPM_BUILD_ROOT/lib/modules/$KernelVer/config - install -m 644 System.map $RPM_BUILD_ROOT/boot/System.map-$KernelVer - install -m 644 System.map $RPM_BUILD_ROOT/lib/modules/$KernelVer/System.map - - # We estimate the size of the initramfs because rpm needs to take this size - # into consideration when performing disk space calculations. (See bz #530778) - dd if=/dev/zero of=$RPM_BUILD_ROOT/boot/initramfs-$KernelVer.img bs=1M count=20 - - if [ -f arch/$Arch/boot/zImage.stub ]; then - cp arch/$Arch/boot/zImage.stub $RPM_BUILD_ROOT/%{image_install_path}/zImage.stub-$KernelVer || : - cp arch/$Arch/boot/zImage.stub $RPM_BUILD_ROOT/lib/modules/$KernelVer/zImage.stub-$KernelVer || : - fi - - %if %{signkernel} - if [ "$KernelImage" = vmlinux ]; then - # We can't strip and sign $KernelImage in place, because - # we need to preserve original vmlinux for debuginfo. - # Use a copy for signing. - $CopyKernel $KernelImage $KernelImage.tosign - KernelImage=$KernelImage.tosign - CopyKernel=cp - fi - - # Sign the image if we're using EFI - # aarch64 kernels are gziped EFI images - KernelExtension=${KernelImage##*.} - if [ "$KernelExtension" == "gz" ]; then - SignImage=${KernelImage%.*} - else - SignImage=$KernelImage - fi - - %ifarch x86_64 aarch64 - %pesign -s -i $SignImage -o vmlinuz.tmp -a %{secureboot_ca_0} -c %{secureboot_key_0} -n %{pesign_name_0} - %pesign -s -i vmlinuz.tmp -o vmlinuz.signed -a %{secureboot_ca_1} -c %{secureboot_key_1} -n %{pesign_name_1} - rm vmlinuz.tmp - %endif - %ifarch s390x ppc64le - if [ -x /usr/bin/rpm-sign ]; then - rpm-sign --key "%{pesign_name_0}" --lkmsign $SignImage --output vmlinuz.signed - elif [ $DoModules -eq 1 ]; then - chmod +x scripts/sign-file - ./scripts/sign-file -p sha256 certs/signing_key.pem certs/signing_key.x509 $SignImage vmlinuz.signed - else - mv $SignImage vmlinuz.signed - fi - %endif - - if [ ! -s vmlinuz.signed ]; then - echo "pesigning failed" - exit 1 - fi - mv vmlinuz.signed $SignImage - if [ "$KernelExtension" == "gz" ]; then - gzip -f9 $SignImage - fi - # signkernel - %endif - - $CopyKernel $KernelImage \ - $RPM_BUILD_ROOT/%{image_install_path}/$InstallName-$KernelVer - chmod 755 $RPM_BUILD_ROOT/%{image_install_path}/$InstallName-$KernelVer - cp $RPM_BUILD_ROOT/%{image_install_path}/$InstallName-$KernelVer $RPM_BUILD_ROOT/lib/modules/$KernelVer/$InstallName - - # hmac sign the kernel for FIPS - echo "Creating hmac file: $RPM_BUILD_ROOT/%{image_install_path}/.vmlinuz-$KernelVer.hmac" - ls -l $RPM_BUILD_ROOT/%{image_install_path}/$InstallName-$KernelVer - (cd $RPM_BUILD_ROOT/%{image_install_path} && sha512hmac $InstallName-$KernelVer) > $RPM_BUILD_ROOT/%{image_install_path}/.vmlinuz-$KernelVer.hmac; - cp $RPM_BUILD_ROOT/%{image_install_path}/.vmlinuz-$KernelVer.hmac $RPM_BUILD_ROOT/lib/modules/$KernelVer/.vmlinuz.hmac - - if [ $DoModules -eq 1 ]; then - # Override $(mod-fw) because we don't want it to install any firmware - # we'll get it from the linux-firmware package and we don't want conflicts - %{make} %{?_smp_mflags} ARCH=$Arch INSTALL_MOD_PATH=$RPM_BUILD_ROOT %{?_smp_mflags} modules_install KERNELRELEASE=$KernelVer mod-fw= - fi - -%if %{with_gcov} - # install gcov-needed files to $BUILDROOT/$BUILD/...: - # gcov_info->filename is absolute path - # gcno references to sources can use absolute paths (e.g. in out-of-tree builds) - # sysfs symlink targets (set up at compile time) use absolute paths to BUILD dir - find . \( -name '*.gcno' -o -name '*.[chS]' \) -exec install -D '{}' "$RPM_BUILD_ROOT/$(pwd)/{}" \; -%endif - - # add an a noop %%defattr statement 'cause rpm doesn't like empty file list files - echo '%%defattr(-,-,-)' > ../kernel${Variant:+-${Variant}}-ldsoconf.list - if [ $DoVDSO -ne 0 ]; then - %{make} ARCH=$Arch INSTALL_MOD_PATH=$RPM_BUILD_ROOT vdso_install KERNELRELEASE=$KernelVer - if [ -s ldconfig-kernel.conf ]; then - install -D -m 444 ldconfig-kernel.conf \ - $RPM_BUILD_ROOT/etc/ld.so.conf.d/kernel-$KernelVer.conf - echo /etc/ld.so.conf.d/kernel-$KernelVer.conf >> ../kernel${Variant:+-${Variant}}-ldsoconf.list - fi - - rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/vdso/.build-id - fi - - # And save the headers/makefiles etc for building modules against - # - # This all looks scary, but the end result is supposed to be: - # * all arch relevant include/ files - # * all Makefile/Kconfig files - # * all script/ files - - rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/source - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - (cd $RPM_BUILD_ROOT/lib/modules/$KernelVer ; ln -s build source) - # dirs for additional modules per module-init-tools, kbuild/modules.txt - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/updates - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/weak-updates - # CONFIG_KERNEL_HEADER_TEST generates some extra files in the process of - # testing so just delete - find . -name *.h.s -delete - # first copy everything - cp --parents `find -type f -name "Makefile*" -o -name "Kconfig*"` $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - if [ ! -e Module.symvers ]; then - touch Module.symvers - fi - cp Module.symvers $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp System.map $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - if [ -s Module.markers ]; then - cp Module.markers $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - fi - - # create the kABI metadata for use in packaging - # NOTENOTE: the name symvers is used by the rpm backend - # NOTENOTE: to discover and run the /usr/lib/rpm/fileattrs/kabi.attr - # NOTENOTE: script which dynamically adds exported kernel symbol - # NOTENOTE: checksums to the rpm metadata provides list. - # NOTENOTE: if you change the symvers name, update the backend too - echo "**** GENERATING kernel ABI metadata ****" - gzip -c9 < Module.symvers > $RPM_BUILD_ROOT/boot/symvers-$KernelVer.gz - cp $RPM_BUILD_ROOT/boot/symvers-$KernelVer.gz $RPM_BUILD_ROOT/lib/modules/$KernelVer/symvers.gz - -%if %{with_kabichk} - echo "**** kABI checking is enabled in kernel SPEC file. ****" - chmod 0755 $RPM_SOURCE_DIR/check-kabi - if [ -e $RPM_SOURCE_DIR/Module.kabi_%{_target_cpu}$Variant ]; then - cp $RPM_SOURCE_DIR/Module.kabi_%{_target_cpu}$Variant $RPM_BUILD_ROOT/Module.kabi - $RPM_SOURCE_DIR/check-kabi -k $RPM_BUILD_ROOT/Module.kabi -s Module.symvers || exit 1 - # for now, don't keep it around. - rm $RPM_BUILD_ROOT/Module.kabi - else - echo "**** NOTE: Cannot find reference Module.kabi file. ****" - fi -%endif - -%if %{with_kabidupchk} - echo "**** kABI DUP checking is enabled in kernel SPEC file. ****" - if [ -e $RPM_SOURCE_DIR/Module.kabi_dup_%{_target_cpu}$Variant ]; then - cp $RPM_SOURCE_DIR/Module.kabi_dup_%{_target_cpu}$Variant $RPM_BUILD_ROOT/Module.kabi - $RPM_SOURCE_DIR/check-kabi -k $RPM_BUILD_ROOT/Module.kabi -s Module.symvers || exit 1 - # for now, don't keep it around. - rm $RPM_BUILD_ROOT/Module.kabi - else - echo "**** NOTE: Cannot find DUP reference Module.kabi file. ****" - fi -%endif - -%if %{with_kabidw_base} - # Don't build kabi base for debug kernels - if [ "$Variant" != "zfcpdump" -a "$Variant" != "debug" ]; then - mkdir -p $RPM_BUILD_ROOT/kabi-dwarf - tar xjvf %{SOURCE301} -C $RPM_BUILD_ROOT/kabi-dwarf - - mkdir -p $RPM_BUILD_ROOT/kabi-dwarf/stablelists - tar xjvf %{SOURCE300} -C $RPM_BUILD_ROOT/kabi-dwarf/stablelists - - echo "**** GENERATING DWARF-based kABI baseline dataset ****" - chmod 0755 $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh - $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh generate \ - "$RPM_BUILD_ROOT/kabi-dwarf/stablelists/kabi-current/kabi_stablelist_%{_target_cpu}" \ - "$(pwd)" \ - "$RPM_BUILD_ROOT/kabidw-base/%{_target_cpu}${Variant:+.${Variant}}" || : - - rm -rf $RPM_BUILD_ROOT/kabi-dwarf - fi -%endif - -%if %{with_kabidwchk} - if [ "$Variant" != "zfcpdump" ]; then - mkdir -p $RPM_BUILD_ROOT/kabi-dwarf - tar xjvf %{SOURCE301} -C $RPM_BUILD_ROOT/kabi-dwarf - if [ -d "$RPM_BUILD_ROOT/kabi-dwarf/base/%{_target_cpu}${Variant:+.${Variant}}" ]; then - mkdir -p $RPM_BUILD_ROOT/kabi-dwarf/stablelists - tar xjvf %{SOURCE300} -C $RPM_BUILD_ROOT/kabi-dwarf/stablelists - - echo "**** GENERATING DWARF-based kABI dataset ****" - chmod 0755 $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh - $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh generate \ - "$RPM_BUILD_ROOT/kabi-dwarf/stablelists/kabi-current/kabi_stablelist_%{_target_cpu}" \ - "$(pwd)" \ - "$RPM_BUILD_ROOT/kabi-dwarf/base/%{_target_cpu}${Variant:+.${Variant}}.tmp" || : - - echo "**** kABI DWARF-based comparison report ****" - $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh compare \ - "$RPM_BUILD_ROOT/kabi-dwarf/base/%{_target_cpu}${Variant:+.${Variant}}" \ - "$RPM_BUILD_ROOT/kabi-dwarf/base/%{_target_cpu}${Variant:+.${Variant}}.tmp" || : - echo "**** End of kABI DWARF-based comparison report ****" - else - echo "**** Baseline dataset for kABI DWARF-BASED comparison report not found ****" - fi - - rm -rf $RPM_BUILD_ROOT/kabi-dwarf - fi -%endif - - # then drop all but the needed Makefiles/Kconfig files - rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts - rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include - cp .config $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a scripts $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts/tracing - rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts/spdxcheck.py - -%ifarch s390x - # CONFIG_EXPOLINE_EXTERN=y produces arch/s390/lib/expoline.o - # which is needed during external module build. - if [ -f arch/s390/lib/expoline.o ]; then - cp -a --parents arch/s390/lib/expoline.o $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - fi -%endif - - # Files for 'make scripts' to succeed with kernel-devel. - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/security/selinux/include - cp -a --parents security/selinux/include/classmap.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents security/selinux/include/initial_sid_to_string.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/tools/include/tools - cp -a --parents tools/include/tools/be_byteshift.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/tools/le_byteshift.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - - # Files for 'make prepare' to succeed with kernel-devel. - cp -a --parents tools/include/linux/compiler* $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/linux/types.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/build/Build.include $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/build/Build $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/build/fixdep.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/objtool/sync-check.sh $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/bpf/resolve_btfids $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - - cp --parents security/selinux/include/policycap_names.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents security/selinux/include/policycap.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - - cp -a --parents tools/include/asm-generic $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/linux $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/uapi/asm $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/uapi/asm-generic $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/uapi/linux $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/vdso $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/scripts/utilities.mak $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/lib/subcmd $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/lib/*.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/objtool/*.[ch] $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/objtool/Build $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/objtool/include/objtool/*.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/lib/bpf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/lib/bpf/Build $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - - if [ -f tools/objtool/objtool ]; then - cp -a tools/objtool/objtool $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/tools/objtool/ || : - fi - if [ -f tools/objtool/fixdep ]; then - cp -a tools/objtool/fixdep $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/tools/objtool/ || : - fi - if [ -d arch/$Arch/scripts ]; then - cp -a arch/$Arch/scripts $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/arch/%{_arch} || : - fi - if [ -f arch/$Arch/*lds ]; then - cp -a arch/$Arch/*lds $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/arch/%{_arch}/ || : - fi - if [ -f arch/%{asmarch}/kernel/module.lds ]; then - cp -a --parents arch/%{asmarch}/kernel/module.lds $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - fi - find $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts \( -iname "*.o" -o -iname "*.cmd" \) -exec rm -f {} + -%ifarch ppc64le - cp -a --parents arch/powerpc/lib/crtsavres.[So] $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ -%endif - if [ -d arch/%{asmarch}/include ]; then - cp -a --parents arch/%{asmarch}/include $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - fi -%ifarch aarch64 - # arch/arm64/include/asm/xen references arch/arm - cp -a --parents arch/arm/include/asm/xen $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - # arch/arm64/include/asm/opcodes.h references arch/arm - cp -a --parents arch/arm/include/asm/opcodes.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ -%endif - # include the machine specific headers for ARM variants, if available. -%ifarch %{arm} - if [ -d arch/%{asmarch}/mach-${Variant}/include ]; then - cp -a --parents arch/%{asmarch}/mach-${Variant}/include $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - fi - # include a few files for 'make prepare' - cp -a --parents arch/arm/tools/gen-mach-types $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/arm/tools/mach-types $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - -%endif - cp -a include $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include -%ifarch i686 x86_64 - # files for 'make prepare' to succeed with kernel-devel - cp -a --parents arch/x86/entry/syscalls/syscall_32.tbl $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/entry/syscalls/syscall_64.tbl $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs_32.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs_64.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs_common.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/purgatory/purgatory.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/purgatory/stack.S $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/purgatory/setup-x86_64.S $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/purgatory/entry64.S $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/boot/string.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/boot/string.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/boot/ctype.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - - cp -a --parents scripts/syscalltbl.sh $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents scripts/syscallhdr.sh $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - - cp -a --parents tools/arch/x86/include/asm $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/arch/x86/include/uapi/asm $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/objtool/arch/x86/lib $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/arch/x86/lib/ $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/arch/x86/tools/gen-insn-attr-x86.awk $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/objtool/arch/x86/ $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - -%endif - # Clean up intermediate tools files - find $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/tools \( -iname "*.o" -o -iname "*.cmd" \) -exec rm -f {} + - - # Make sure the Makefile, version.h, and auto.conf have a matching - # timestamp so that external modules can be built - touch -r $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/Makefile \ - $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include/generated/uapi/linux/version.h \ - $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include/config/auto.conf - -%if %{with_debuginfo} - eu-readelf -n vmlinux | grep "Build ID" | awk '{print $NF}' > vmlinux.id - cp vmlinux.id $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/vmlinux.id - - # - # save the vmlinux file for kernel debugging into the kernel-debuginfo rpm - # - mkdir -p $RPM_BUILD_ROOT%{debuginfodir}/lib/modules/$KernelVer - cp vmlinux $RPM_BUILD_ROOT%{debuginfodir}/lib/modules/$KernelVer - if [ -n "%{vmlinux_decompressor}" ]; then - eu-readelf -n %{vmlinux_decompressor} | grep "Build ID" | awk '{print $NF}' > vmlinux.decompressor.id - # Without build-id the build will fail. But for s390 the build-id - # wasn't added before 5.11. In case it is missing prefer not - # packaging the debuginfo over a build failure. - if [ -s vmlinux.decompressor.id ]; then - cp vmlinux.decompressor.id $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/vmlinux.decompressor.id - cp %{vmlinux_decompressor} $RPM_BUILD_ROOT%{debuginfodir}/lib/modules/$KernelVer/vmlinux.decompressor - fi - fi -%endif - - find $RPM_BUILD_ROOT/lib/modules/$KernelVer -name "*.ko" -type f >modnames - - # mark modules executable so that strip-to-file can strip them - xargs --no-run-if-empty chmod u+x < modnames - - # Generate a list of modules for block and networking. - - grep -F /drivers/ modnames | xargs --no-run-if-empty nm -upA | - sed -n 's,^.*/\([^/]*\.ko\): *U \(.*\)$,\1 \2,p' > drivers.undef - - collect_modules_list() - { - sed -r -n -e "s/^([^ ]+) \\.?($2)\$/\\1/p" drivers.undef | - LC_ALL=C sort -u > $RPM_BUILD_ROOT/lib/modules/$KernelVer/modules.$1 - if [ ! -z "$3" ]; then - sed -r -e "/^($3)\$/d" -i $RPM_BUILD_ROOT/lib/modules/$KernelVer/modules.$1 - fi - } - - collect_modules_list networking \ - 'register_netdev|ieee80211_register_hw|usbnet_probe|phy_driver_register|rt(l_|2x00)(pci|usb)_probe|register_netdevice' - collect_modules_list block \ - 'ata_scsi_ioctl|scsi_add_host|scsi_add_host_with_dma|blk_alloc_queue|blk_init_queue|register_mtd_blktrans|scsi_esp_register|scsi_register_device_handler|blk_queue_physical_block_size' 'pktcdvd.ko|dm-mod.ko' - collect_modules_list drm \ - 'drm_open|drm_init' - collect_modules_list modesetting \ - 'drm_crtc_init' - - # detect missing or incorrect license tags - ( find $RPM_BUILD_ROOT/lib/modules/$KernelVer -name '*.ko' | xargs /sbin/modinfo -l | \ - grep -E -v 'GPL( v2)?$|Dual BSD/GPL$|Dual MPL/GPL$|GPL and additional rights$' ) && exit 1 - - remove_depmod_files() - { - # remove files that will be auto generated by depmod at rpm -i time - pushd $RPM_BUILD_ROOT/lib/modules/$KernelVer/ - rm -f modules.{alias,alias.bin,builtin.alias.bin,builtin.bin} \ - modules.{dep,dep.bin,devname,softdep,symbols,symbols.bin} - popd - } - - remove_depmod_files - - # Identify modules in the kernel-modules-extras package - %{SOURCE20} $RPM_BUILD_ROOT lib/modules/$KernelVer $(realpath configs/mod-extra.list) - # Identify modules in the kernel-modules-extras package - %{SOURCE20} $RPM_BUILD_ROOT lib/modules/$KernelVer %{SOURCE84} internal - - # - # Generate the kernel-core and kernel-modules files lists - # - - # Copy the System.map file for depmod to use, and create a backup of the - # full module tree so we can restore it after we're done filtering - cp System.map $RPM_BUILD_ROOT/. - cp configs/filter-*.sh $RPM_BUILD_ROOT/. - pushd $RPM_BUILD_ROOT - mkdir restore - cp -r lib/modules/$KernelVer/* restore/. - - # don't include anything going into kernel-modules-extra in the file lists - xargs rm -rf < mod-extra.list - # don't include anything going int kernel-modules-internal in the file lists - xargs rm -rf < mod-internal.list - - if [ $DoModules -eq 1 ]; then - # Find all the module files and filter them out into the core and - # modules lists. This actually removes anything going into -modules - # from the dir. - find lib/modules/$KernelVer/kernel -name *.ko | sort -n > modules.list - ./filter-modules.sh modules.list %{_target_cpu} - rm filter-*.sh - - # Run depmod on the resulting module tree and make sure it isn't broken - depmod -b . -aeF ./System.map $KernelVer &> depmod.out - if [ -s depmod.out ]; then - echo "Depmod failure" - cat depmod.out - exit 1 - else - rm depmod.out - fi - else - # Ensure important files/directories exist to let the packaging succeed - echo '%%defattr(-,-,-)' > modules.list - echo '%%defattr(-,-,-)' > k-d.list - mkdir -p lib/modules/$KernelVer/kernel - # Add files usually created by make modules, needed to prevent errors - # thrown by depmod during package installation - touch lib/modules/$KernelVer/modules.order - touch lib/modules/$KernelVer/modules.builtin - fi - - remove_depmod_files - - # Go back and find all of the various directories in the tree. We use this - # for the dir lists in kernel-core - find lib/modules/$KernelVer/kernel -mindepth 1 -type d | sort -n > module-dirs.list - - # Cleanup - rm System.map - # Just "cp -r" can be very slow: here, it rewrites _existing files_ - # with open(O_TRUNC). Many filesystems synchronously wait for metadata - # update for such file rewrites (seen in strace as final close syscall - # taking a long time). On a rotational disk, cp was observed to take - # more than 5 minutes on ext4 and more than 15 minutes (!) on xfs. - # With --remove-destination, we avoid this, and copying - # (with enough RAM to cache it) takes 5 seconds: - cp -r --remove-destination restore/* lib/modules/$KernelVer/. - rm -rf restore - popd - - # Make sure the files lists start with absolute paths or rpmbuild fails. - # Also add in the dir entries - sed -e 's/^lib*/\/lib/' %{?zipsed} $RPM_BUILD_ROOT/k-d.list > ../kernel${Variant:+-${Variant}}-modules.list - sed -e 's/^lib*/%dir \/lib/' %{?zipsed} $RPM_BUILD_ROOT/module-dirs.list > ../kernel${Variant:+-${Variant}}-core.list - sed -e 's/^lib*/\/lib/' %{?zipsed} $RPM_BUILD_ROOT/modules.list >> ../kernel${Variant:+-${Variant}}-core.list - sed -e 's/^lib*/\/lib/' %{?zipsed} $RPM_BUILD_ROOT/mod-extra.list >> ../kernel${Variant:+-${Variant}}-modules-extra.list - sed -e 's/^lib*/\/lib/' %{?zipsed} $RPM_BUILD_ROOT/mod-internal.list >> ../kernel${Variant:+-${Variant}}-modules-internal.list - - # Cleanup - rm -f $RPM_BUILD_ROOT/k-d.list - rm -f $RPM_BUILD_ROOT/modules.list - rm -f $RPM_BUILD_ROOT/module-dirs.list - rm -f $RPM_BUILD_ROOT/mod-extra.list - rm -f $RPM_BUILD_ROOT/mod-internal.list - -%if %{signmodules} - if [ $DoModules -eq 1 ]; then - # Save the signing keys so we can sign the modules in __modsign_install_post - cp certs/signing_key.pem certs/signing_key.pem.sign${Variant:++${Variant}} - cp certs/signing_key.x509 certs/signing_key.x509.sign${Variant:++${Variant}} - fi -%endif - - # Move the devel headers out of the root file system - mkdir -p $RPM_BUILD_ROOT/usr/src/kernels - mv $RPM_BUILD_ROOT/lib/modules/$KernelVer/build $RPM_BUILD_ROOT/$DevelDir - - # This is going to create a broken link during the build, but we don't use - # it after this point. We need the link to actually point to something - # when kernel-devel is installed, and a relative link doesn't work across - # the F17 UsrMove feature. - ln -sf $DevelDir $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - -%ifnarch armv7hl - # Generate vmlinux.h and put it to kernel-devel path - bpftool btf dump file vmlinux format c > $RPM_BUILD_ROOT/$DevelDir/vmlinux.h -%endif - - # prune junk from kernel-devel - find $RPM_BUILD_ROOT/usr/src/kernels -name ".*.cmd" -delete - - # Red Hat UEFI Secure Boot CA cert, which can be used to authenticate the kernel - mkdir -p $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer - %ifarch x86_64 aarch64 - install -m 0644 %{secureboot_ca_0} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca-20200609.cer - install -m 0644 %{secureboot_ca_1} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca-20140212.cer - ln -s kernel-signing-ca-20200609.cer $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca.cer - %else - install -m 0644 %{secureboot_ca_0} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca.cer - %endif - %ifarch s390x ppc64le - if [ $DoModules -eq 1 ]; then - if [ -x /usr/bin/rpm-sign ]; then - install -m 0644 %{secureboot_key_0} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/%{signing_key_filename} - else - install -m 0644 certs/signing_key.x509.sign${Variant:++${Variant}} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca.cer - openssl x509 -in certs/signing_key.pem.sign${Variant:++${Variant}} -outform der -out $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/%{signing_key_filename} - chmod 0644 $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/%{signing_key_filename} - fi - fi - %endif - -%if %{with_ipaclones} - MAXPROCS=$(echo %{?_smp_mflags} | sed -n 's/-j\s*\([0-9]\+\)/\1/p') - if [ -z "$MAXPROCS" ]; then - MAXPROCS=1 - fi - if [ "$Variant" == "" ]; then - mkdir -p $RPM_BUILD_ROOT/$DevelDir-ipaclones - find . -name '*.ipa-clones' | xargs -i{} -r -n 1 -P $MAXPROCS install -m 644 -D "{}" "$RPM_BUILD_ROOT/$DevelDir-ipaclones/{}" - fi -%endif - -} - -### -# DO it... -### - -# prepare directories -rm -rf $RPM_BUILD_ROOT -mkdir -p $RPM_BUILD_ROOT/boot -mkdir -p $RPM_BUILD_ROOT%{_libexecdir} - -cd linux-%{KVERREL} - - -%if %{with_debug} -BuildKernel %make_target %kernel_image %{_use_vdso} debug -%endif - -%if %{with_zfcpdump} -BuildKernel %make_target %kernel_image %{_use_vdso} zfcpdump -%endif - -%if %{with_pae} -BuildKernel %make_target %kernel_image %{use_vdso} lpae -%endif - -%if %{with_up} -BuildKernel %make_target %kernel_image %{_use_vdso} -%endif - -%ifnarch noarch i686 -%if !%{with_debug} && !%{with_zfcpdump} && !%{with_pae} && !%{with_up} -# If only building the user space tools, then initialize the build environment -# and some variables so that the various userspace tools can be built. -InitBuildVars -%endif -%endif - -%ifarch aarch64 -%global perf_build_extra_opts CORESIGHT=1 -%endif -%global perf_make \ - %{__make} %{?make_opts} EXTRA_CFLAGS="${RPM_OPT_FLAGS}" LDFLAGS="%{__global_ldflags}" %{?cross_opts} -C tools/perf V=1 NO_PERF_READ_VDSO32=1 NO_PERF_READ_VDSOX32=1 WERROR=0 NO_LIBUNWIND=1 HAVE_CPLUS_DEMANGLE=1 NO_GTK2=1 NO_STRLCPY=1 NO_BIONIC=1 LIBBPF_DYNAMIC=1 LIBTRACEEVENT_DYNAMIC=1 %{?perf_build_extra_opts} prefix=%{_prefix} PYTHON=%{__python3} -%if %{with_perf} -# perf -# make sure check-headers.sh is executable -chmod +x tools/perf/check-headers.sh -%{perf_make} DESTDIR=$RPM_BUILD_ROOT all -%endif - -%global tools_make \ - CFLAGS="${RPM_OPT_FLAGS}" LDFLAGS="%{__global_ldflags}" %{make} %{?make_opts} - -%if %{with_tools} -%ifarch %{cpupowerarchs} -# cpupower -# make sure version-gen.sh is executable. -chmod +x tools/power/cpupower/utils/version-gen.sh -%{tools_make} %{?_smp_mflags} -C tools/power/cpupower CPUFREQ_BENCH=false DEBUG=false -%ifarch x86_64 - pushd tools/power/cpupower/debug/x86_64 - %{tools_make} %{?_smp_mflags} centrino-decode powernow-k8-decode - popd -%endif -%ifarch x86_64 - pushd tools/power/x86/x86_energy_perf_policy/ - %{tools_make} - popd - pushd tools/power/x86/turbostat - %{tools_make} - popd - pushd tools/power/x86/intel-speed-select - %{tools_make} - popd - pushd tools/arch/x86/intel_sdsi - %{tools_make} CFLAGS="${RPM_OPT_FLAGS}" - popd -%endif -%endif -pushd tools/thermal/tmon/ -%{tools_make} -popd -pushd tools/iio/ -%{tools_make} -popd -pushd tools/gpio/ -%{tools_make} -popd -# build VM tools -pushd tools/vm/ -%{tools_make} slabinfo page_owner_sort -popd -%endif - -if [ -f $DevelDir/vmlinux.h ]; then - RPM_VMLINUX_H=$DevelDir/vmlinux.h -fi - -%global bpftool_make \ - %{__make} EXTRA_CFLAGS="${RPM_OPT_FLAGS}" EXTRA_LDFLAGS="%{__global_ldflags}" DESTDIR=$RPM_BUILD_ROOT %{?make_opts} VMLINUX_H="${RPM_VMLINUX_H}" V=1 -%if %{with_bpftool} -pushd tools/bpf/bpftool -%{bpftool_make} -popd -%endif - -%if %{with_selftests} -# Unfortunately, samples/bpf/Makefile expects that the headers are installed -# in the source tree. We installed them previously to $RPM_BUILD_ROOT/usr -# but there's no way to tell the Makefile to take them from there. -%{make} %{?_smp_mflags} headers_install -%{make} %{?_smp_mflags} ARCH=$Arch V=1 M=samples/bpf/ || true - -# Prevent bpf selftests to build bpftool repeatedly: -export BPFTOOL=$(pwd)/tools/bpf/bpftool/bpftool - -pushd tools/testing/selftests -# We need to install here because we need to call make with ARCH set which -# doesn't seem possible to do in the install section. -%{make} %{?_smp_mflags} ARCH=$Arch V=1 TARGETS="bpf vm livepatch net net/forwarding net/mptcp netfilter tc-testing" SKIP_TARGETS="" INSTALL_PATH=%{buildroot}%{_libexecdir}/kselftests VMLINUX_H="${RPM_VMLINUX_H}" install - -# 'make install' for bpf is broken and upstream refuses to fix it. -# Install the needed files manually. -for dir in bpf bpf/no_alu32 bpf/progs; do - # In ARK, the rpm build continues even if some of the selftests - # cannot be built. It's not always possible to build selftests, - # as upstream sometimes dependens on too new llvm version or has - # other issues. If something did not get built, just skip it. - test -d $dir || continue - mkdir -p %{buildroot}%{_libexecdir}/kselftests/$dir - find $dir -maxdepth 1 -type f \( -executable -o -name '*.py' -o -name settings -o \ - -name 'btf_dump_test_case_*.c' -o -name '*.ko' -o \ - -name '*.o' -exec sh -c 'readelf -h "{}" | grep -q "^ Machine:.*BPF"' \; \) -print0 | \ - xargs -0 cp -t %{buildroot}%{_libexecdir}/kselftests/$dir || true -done -popd -export -n BPFTOOL -%endif - -%if %{with_doc} -# Make the HTML pages. -%{__make} PYTHON=/usr/bin/python3 htmldocs || %{doc_build_fail} - -# sometimes non-world-readable files sneak into the kernel source tree -chmod -R a=rX Documentation -find Documentation -type d | xargs chmod u+w -%endif - -# In the modsign case, we do 3 things. 1) We check the "variant" and hard -# code the value in the following invocations. This is somewhat sub-optimal -# but we're doing this inside of an RPM macro and it isn't as easy as it -# could be because of that. 2) We restore the .tmp_versions/ directory from -# the one we saved off in BuildKernel above. This is to make sure we're -# signing the modules we actually built/installed in that variant. 3) We -# grab the arch and invoke mod-sign.sh command to actually sign the modules. -# -# We have to do all of those things _after_ find-debuginfo runs, otherwise -# that will strip the signature off of the modules. -# -# Don't sign modules for the zfcpdump variant as it is monolithic. - -%define __modsign_install_post \ - if [ "%{signmodules}" -eq "1" ]; then \ - if [ "%{with_pae}" -ne "0" ]; then \ - %{modsign_cmd} certs/signing_key.pem.sign+lpae certs/signing_key.x509.sign+lpae $RPM_BUILD_ROOT/lib/modules/%{KVERREL}+lpae/ \ - fi \ - if [ "%{with_debug}" -ne "0" ]; then \ - %{modsign_cmd} certs/signing_key.pem.sign+debug certs/signing_key.x509.sign+debug $RPM_BUILD_ROOT/lib/modules/%{KVERREL}+debug/ \ - fi \ - if [ "%{with_up}" -ne "0" ]; then \ - %{modsign_cmd} certs/signing_key.pem.sign certs/signing_key.x509.sign $RPM_BUILD_ROOT/lib/modules/%{KVERREL}/ \ - fi \ - fi \ - if [ "%{zipmodules}" -eq "1" ]; then \ - find $RPM_BUILD_ROOT/lib/modules/ -type f -name '*.ko' | xargs -P${RPM_BUILD_NCPUS} -r xz; \ - fi \ -%{nil} - -### -### Special hacks for debuginfo subpackages. -### - -# This macro is used by %%install, so we must redefine it before that. -%define debug_package %{nil} - -%if %{with_debuginfo} - -%ifnarch noarch -%global __debug_package 1 -%files -f debugfiles.list debuginfo-common-%{_target_cpu} -%endif - -%endif - -# We don't want to package debuginfo for self-tests and samples but -# we have to delete them to avoid an error messages about unpackaged -# files. -# Delete the debuginfo for kernel-devel files -%define __remove_unwanted_dbginfo_install_post \ - if [ "%{with_selftests}" -ne "0" ]; then \ - rm -rf $RPM_BUILD_ROOT/usr/lib/debug/usr/libexec/ksamples; \ - rm -rf $RPM_BUILD_ROOT/usr/lib/debug/usr/libexec/kselftests; \ - fi \ - rm -rf $RPM_BUILD_ROOT/usr/lib/debug/usr/src; \ -%{nil} - -# -# Disgusting hack alert! We need to ensure we sign modules *after* all -# invocations of strip occur, which is in __debug_install_post if -# find-debuginfo.sh runs, and __os_install_post if not. -# -%define __spec_install_post \ - %{?__debug_package:%{__debug_install_post}}\ - %{__arch_install_post}\ - %{__os_install_post}\ - %{__remove_unwanted_dbginfo_install_post}\ - %{__modsign_install_post} - -### -### install -### - -%install - -cd linux-%{KVERREL} - -%if %{with_doc} -docdir=$RPM_BUILD_ROOT%{_datadir}/doc/kernel-doc-%{specversion}-%{pkgrelease} - -# copy the source over -mkdir -p $docdir -tar -h -f - --exclude=man --exclude='.*' -c Documentation | tar xf - -C $docdir - -# with_doc -%endif - -# We have to do the headers install before the tools install because the -# kernel headers_install will remove any header files in /usr/include that -# it doesn't install itself. - -%if %{with_headers} -# Install kernel headers -%{__make} ARCH=%{hdrarch} INSTALL_HDR_PATH=$RPM_BUILD_ROOT/usr headers_install - -find $RPM_BUILD_ROOT/usr/include \ - \( -name .install -o -name .check -o \ - -name ..install.cmd -o -name ..check.cmd \) -delete - -%endif - -%if %{with_cross_headers} -%if 0%{?fedora} -HDR_ARCH_LIST='arm arm64 powerpc s390 x86' -%else -HDR_ARCH_LIST='arm64 powerpc s390 x86' -%endif -mkdir -p $RPM_BUILD_ROOT/usr/tmp-headers - -for arch in $HDR_ARCH_LIST; do - mkdir $RPM_BUILD_ROOT/usr/tmp-headers/arch-${arch} - %{__make} ARCH=${arch} INSTALL_HDR_PATH=$RPM_BUILD_ROOT/usr/tmp-headers/arch-${arch} headers_install -done - -find $RPM_BUILD_ROOT/usr/tmp-headers \ - \( -name .install -o -name .check -o \ - -name ..install.cmd -o -name ..check.cmd \) -delete - -# Copy all the architectures we care about to their respective asm directories -for arch in $HDR_ARCH_LIST ; do - mkdir -p $RPM_BUILD_ROOT/usr/${arch}-linux-gnu/include - mv $RPM_BUILD_ROOT/usr/tmp-headers/arch-${arch}/include/* $RPM_BUILD_ROOT/usr/${arch}-linux-gnu/include/ -done - -rm -rf $RPM_BUILD_ROOT/usr/tmp-headers -%endif - -%if %{with_kernel_abi_stablelists} -# kabi directory -INSTALL_KABI_PATH=$RPM_BUILD_ROOT/lib/modules/ -mkdir -p $INSTALL_KABI_PATH - -# install kabi releases directories -tar xjvf %{SOURCE300} -C $INSTALL_KABI_PATH -# with_kernel_abi_stablelists -%endif - -%if %{with_perf} -# perf tool binary and supporting scripts/binaries -%{perf_make} DESTDIR=$RPM_BUILD_ROOT lib=%{_lib} install-bin -# remove the 'trace' symlink. -rm -f %{buildroot}%{_bindir}/trace - -# For both of the below, yes, this should be using a macro but right now -# it's hard coded and we don't actually want it anyway right now. -# Whoever wants examples can fix it up! - -# remove examples -rm -rf %{buildroot}/usr/lib/perf/examples -rm -rf %{buildroot}/usr/lib/perf/include - -# python-perf extension -%{perf_make} DESTDIR=$RPM_BUILD_ROOT install-python_ext - -# perf man pages (note: implicit rpm magic compresses them later) -mkdir -p %{buildroot}/%{_mandir}/man1 -%{perf_make} DESTDIR=$RPM_BUILD_ROOT install-man - -# remove any tracevent files, eg. its plugins still gets built and installed, -# even if we build against system's libtracevent during perf build (by setting -# LIBTRACEEVENT_DYNAMIC=1 above in perf_make macro). Those files should already -# ship with libtraceevent package. -rm -rf %{buildroot}%{_libdir}/traceevent -%endif - -%if %{with_tools} -%ifarch %{cpupowerarchs} -%{make} -C tools/power/cpupower DESTDIR=$RPM_BUILD_ROOT libdir=%{_libdir} mandir=%{_mandir} CPUFREQ_BENCH=false install -rm -f %{buildroot}%{_libdir}/*.{a,la} -%find_lang cpupower -mv cpupower.lang ../ -%ifarch x86_64 - pushd tools/power/cpupower/debug/x86_64 - install -m755 centrino-decode %{buildroot}%{_bindir}/centrino-decode - install -m755 powernow-k8-decode %{buildroot}%{_bindir}/powernow-k8-decode - popd -%endif -chmod 0755 %{buildroot}%{_libdir}/libcpupower.so* -mkdir -p %{buildroot}%{_unitdir} %{buildroot}%{_sysconfdir}/sysconfig -install -m644 %{SOURCE2000} %{buildroot}%{_unitdir}/cpupower.service -install -m644 %{SOURCE2001} %{buildroot}%{_sysconfdir}/sysconfig/cpupower -%endif -%ifarch x86_64 - mkdir -p %{buildroot}%{_mandir}/man8 - pushd tools/power/x86/x86_energy_perf_policy - %{tools_make} DESTDIR=%{buildroot} install - popd - pushd tools/power/x86/turbostat - %{tools_make} DESTDIR=%{buildroot} install - popd - pushd tools/power/x86/intel-speed-select - %{tools_make} DESTDIR=%{buildroot} install - popd - pushd tools/arch/x86/intel_sdsi - %{tools_make} CFLAGS="${RPM_OPT_FLAGS}" DESTDIR=%{buildroot} install - popd -%endif -pushd tools/thermal/tmon -%{tools_make} INSTALL_ROOT=%{buildroot} install -popd -pushd tools/iio -%{tools_make} DESTDIR=%{buildroot} install -popd -pushd tools/gpio -%{tools_make} DESTDIR=%{buildroot} install -popd -install -m644 -D %{SOURCE2002} %{buildroot}%{_sysconfdir}/logrotate.d/kvm_stat -pushd tools/kvm/kvm_stat -%{__make} INSTALL_ROOT=%{buildroot} install-tools -%{__make} INSTALL_ROOT=%{buildroot} install-man -install -m644 -D kvm_stat.service %{buildroot}%{_unitdir}/kvm_stat.service -popd -# install VM tools -pushd tools/vm/ -install -m755 slabinfo %{buildroot}%{_bindir}/slabinfo -install -m755 page_owner_sort %{buildroot}%{_bindir}/page_owner_sort -popd -%endif - -if [ -f $DevelDir/vmlinux.h ]; then - RPM_VMLINUX_H=$DevelDir/vmlinux.h -fi - -%if %{with_bpftool} -pushd tools/bpf/bpftool -%{bpftool_make} prefix=%{_prefix} bash_compdir=%{_sysconfdir}/bash_completion.d/ mandir=%{_mandir} install doc-install -popd -%endif - -%if %{with_selftests} -pushd samples -install -d %{buildroot}%{_libexecdir}/ksamples -# install bpf samples -pushd bpf -install -d %{buildroot}%{_libexecdir}/ksamples/bpf -find -type f -executable -exec install -m755 {} %{buildroot}%{_libexecdir}/ksamples/bpf \; -install -m755 *.sh %{buildroot}%{_libexecdir}/ksamples/bpf -# test_lwt_bpf.sh compiles test_lwt_bpf.c when run; this works only from the -# kernel tree. Just remove it. -rm %{buildroot}%{_libexecdir}/ksamples/bpf/test_lwt_bpf.sh -install -m644 *_kern.o %{buildroot}%{_libexecdir}/ksamples/bpf || true -install -m644 tcp_bpf.readme %{buildroot}%{_libexecdir}/ksamples/bpf -popd -# install pktgen samples -pushd pktgen -install -d %{buildroot}%{_libexecdir}/ksamples/pktgen -find . -type f -executable -exec install -m755 {} %{buildroot}%{_libexecdir}/ksamples/pktgen/{} \; -find . -type f ! -executable -exec install -m644 {} %{buildroot}%{_libexecdir}/ksamples/pktgen/{} \; -popd -popd -# install vm selftests -pushd tools/testing/selftests/vm -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/vm/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/vm/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/vm/{} \; -popd -# install drivers/net/mlxsw selftests -pushd tools/testing/selftests/drivers/net/mlxsw -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/drivers/net/mlxsw/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/drivers/net/mlxsw/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/drivers/net/mlxsw/{} \; -popd -# install drivers/net/netdevsim selftests -pushd tools/testing/selftests/drivers/net/netdevsim -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/drivers/net/netdevsim/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/drivers/net/netdevsim/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/drivers/net/netdevsim/{} \; -popd -# install net/forwarding selftests -pushd tools/testing/selftests/net/forwarding -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/net/forwarding/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/net/forwarding/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/net/forwarding/{} \; -popd -# install net/mptcp selftests -pushd tools/testing/selftests/net/mptcp -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/net/mptcp/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/net/mptcp/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/net/mptcp/{} \; -popd -# install tc-testing selftests -pushd tools/testing/selftests/tc-testing -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/tc-testing/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/tc-testing/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/tc-testing/{} \; -popd -# install livepatch selftests -pushd tools/testing/selftests/livepatch -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/livepatch/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/livepatch/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/livepatch/{} \; -popd -# install netfilter selftests -pushd tools/testing/selftests/netfilter -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/netfilter/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/netfilter/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/netfilter/{} \; -popd -%endif - -### -### clean -### - -### -### scripts -### - -%if %{with_tools} -%post -n kernel-tools-libs -/sbin/ldconfig - -%postun -n kernel-tools-libs -/sbin/ldconfig -%endif - -# -# This macro defines a %%post script for a kernel*-devel package. -# %%kernel_devel_post [<subpackage>] -# Note we don't run hardlink if ostree is in use, as ostree is -# a far more sophisticated hardlink implementation. -# https://github.com/projectatomic/rpm-ostree/commit/58a79056a889be8814aa51f507b2c7a4dccee526 -# -# The deletion of *.hardlink-temporary files is a temporary workaround -# for this bug in the hardlink binary (fixed in util-linux 2.38): -# https://github.com/util-linux/util-linux/issues/1602 -# -%define kernel_devel_post() \ -%{expand:%%post %{?1:%{1}-}devel}\ -if [ -f /etc/sysconfig/kernel ]\ -then\ - . /etc/sysconfig/kernel || exit $?\ -fi\ -if [ "$HARDLINK" != "no" -a -x /usr/bin/hardlink -a ! -e /run/ostree-booted ] \ -then\ - (cd /usr/src/kernels/%{KVERREL}%{?1:+%{1}} &&\ - /usr/bin/find . -type f | while read f; do\ - hardlink -c /usr/src/kernels/*%{?dist}.*/$f $f > /dev/null\ - done;\ - /usr/bin/find /usr/src/kernels -type f -name '*.hardlink-temporary' -delete\ - )\ -fi\ -%{nil} - -# -# This macro defines a %%post script for a kernel*-modules-extra package. -# It also defines a %%postun script that does the same thing. -# %%kernel_modules_extra_post [<subpackage>] -# -%define kernel_modules_extra_post() \ -%{expand:%%post %{?1:%{1}-}modules-extra}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil}\ -%{expand:%%postun %{?1:%{1}-}modules-extra}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil} - -# -# This macro defines a %%post script for a kernel*-modules-internal package. -# It also defines a %%postun script that does the same thing. -# %%kernel_modules_internal_post [<subpackage>] -# -%define kernel_modules_internal_post() \ -%{expand:%%post %{?1:%{1}-}modules-internal}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil}\ -%{expand:%%postun %{?1:%{1}-}modules-internal}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil} - -# -# This macro defines a %%post script for a kernel*-modules package. -# It also defines a %%postun script that does the same thing. -# %%kernel_modules_post [<subpackage>] -# -%define kernel_modules_post() \ -%{expand:%%post %{?1:%{1}-}modules}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -if [ ! -f %{_localstatedir}/lib/rpm-state/%{name}/installing_core_%{KVERREL}%{?1:+%{1}} ]; then\ - mkdir -p %{_localstatedir}/lib/rpm-state/%{name}\ - touch %{_localstatedir}/lib/rpm-state/%{name}/need_to_run_dracut_%{KVERREL}%{?1:+%{1}}\ -fi\ -%{nil}\ -%{expand:%%postun %{?1:%{1}-}modules}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil}\ -%{expand:%%posttrans %{?1:%{1}-}modules}\ -if [ -f %{_localstatedir}/lib/rpm-state/%{name}/need_to_run_dracut_%{KVERREL}%{?1:+%{1}} ]; then\ - rm -f %{_localstatedir}/lib/rpm-state/%{name}/need_to_run_dracut_%{KVERREL}%{?1:+%{1}}\ - echo "Running: dracut -f --kver %{KVERREL}%{?1:+%{1}}"\ - dracut -f --kver "%{KVERREL}%{?1:+%{1}}" || exit $?\ -fi\ -%{nil} - -# This macro defines a %%posttrans script for a kernel package. -# %%kernel_variant_posttrans [<subpackage>] -# More text can follow to go at the end of this variant's %%post. -# -%define kernel_variant_posttrans() \ -%{expand:%%posttrans %{?1:%{1}-}core}\ -%if 0%{!?fedora:1}\ -if [ -x %{_sbindir}/weak-modules ]\ -then\ - %{_sbindir}/weak-modules --add-kernel %{KVERREL}%{?1:+%{1}} || exit $?\ -fi\ -%endif\ -rm -f %{_localstatedir}/lib/rpm-state/%{name}/installing_core_%{KVERREL}%{?1:+%{1}}\ -/bin/kernel-install add %{KVERREL}%{?1:+%{1}} /lib/modules/%{KVERREL}%{?1:+%{1}}/vmlinuz || exit $?\ -%{nil} - -# -# This macro defines a %%post script for a kernel package and its devel package. -# %%kernel_variant_post [-v <subpackage>] [-r <replace>] -# More text can follow to go at the end of this variant's %%post. -# -%define kernel_variant_post(v:r:) \ -%{expand:%%kernel_devel_post %{?-v*}}\ -%{expand:%%kernel_modules_post %{?-v*}}\ -%{expand:%%kernel_modules_extra_post %{?-v*}}\ -%{expand:%%kernel_modules_internal_post %{?-v*}}\ -%{expand:%%kernel_variant_posttrans %{?-v*}}\ -%{expand:%%post %{?-v*:%{-v*}-}core}\ -%{-r:\ -if [ `uname -i` == "x86_64" -o `uname -i` == "i386" ] &&\ - [ -f /etc/sysconfig/kernel ]; then\ - /bin/sed -r -i -e 's/^DEFAULTKERNEL=%{-r*}$/DEFAULTKERNEL=kernel%{?-v:-%{-v*}}/' /etc/sysconfig/kernel || exit $?\ -fi}\ -mkdir -p %{_localstatedir}/lib/rpm-state/%{name}\ -touch %{_localstatedir}/lib/rpm-state/%{name}/installing_core_%{KVERREL}%{?1:+%{1}}\ -%{nil} - -# -# This macro defines a %%preun script for a kernel package. -# %%kernel_variant_preun <subpackage> -# -%define kernel_variant_preun() \ -%{expand:%%preun %{?1:%{1}-}core}\ -/bin/kernel-install remove %{KVERREL}%{?1:+%{1}} /lib/modules/%{KVERREL}%{?1:+%{1}}/vmlinuz || exit $?\ -if [ -x %{_sbindir}/weak-modules ]\ -then\ - %{_sbindir}/weak-modules --remove-kernel %{KVERREL}%{?1:+%{1}} || exit $?\ -fi\ -%{nil} - -%kernel_variant_preun -%kernel_variant_post -r kernel-smp - -%if %{with_pae} -%kernel_variant_preun lpae -%kernel_variant_post -v lpae -r (kernel|kernel-smp) -%endif - -%if %{with_debug} -%kernel_variant_preun debug -%kernel_variant_post -v debug -%endif - -%if %{with_zfcpdump} -%kernel_variant_preun zfcpdump -%kernel_variant_post -v zfcpdump -%endif - -if [ -x /sbin/ldconfig ] -then - /sbin/ldconfig -X || exit $? -fi - -### -### file lists -### - -%if %{with_headers} -%files headers -/usr/include/* -%endif - -%if %{with_cross_headers} -%files cross-headers -/usr/*-linux-gnu/include/* -%endif - -%if %{with_kernel_abi_stablelists} -%files -n kernel-abi-stablelists -/lib/modules/kabi-* -%endif - -%if %{with_kabidw_base} -%ifarch x86_64 s390x ppc64 ppc64le aarch64 -%files kernel-kabidw-base-internal -%defattr(-,root,root) -/kabidw-base/%{_target_cpu}/* -%endif -%endif - -# only some architecture builds need kernel-doc -%if %{with_doc} -%files doc -%defattr(-,root,root) -%{_datadir}/doc/kernel-doc-%{specversion}-%{pkgrelease}/Documentation/* -%dir %{_datadir}/doc/kernel-doc-%{specversion}-%{pkgrelease}/Documentation -%dir %{_datadir}/doc/kernel-doc-%{specversion}-%{pkgrelease} -%endif - -%if %{with_perf} -%files -n perf -%{_bindir}/perf -%{_libdir}/libperf-jvmti.so -%dir %{_libexecdir}/perf-core -%{_libexecdir}/perf-core/* -%{_datadir}/perf-core/* -%{_mandir}/man[1-8]/perf* -%{_sysconfdir}/bash_completion.d/perf -%doc linux-%{KVERREL}/tools/perf/Documentation/examples.txt -%{_docdir}/perf-tip/tips.txt - -%files -n python3-perf -%{python3_sitearch}/* - -%if %{with_debuginfo} -%files -f perf-debuginfo.list -n perf-debuginfo - -%files -f python3-perf-debuginfo.list -n python3-perf-debuginfo -%endif -# with_perf -%endif - -%if %{with_tools} -%ifnarch %{cpupowerarchs} -%files -n kernel-tools -%else -%files -n kernel-tools -f cpupower.lang -%{_bindir}/cpupower -%{_datadir}/bash-completion/completions/cpupower -%ifarch x86_64 -%{_bindir}/centrino-decode -%{_bindir}/powernow-k8-decode -%endif -%{_unitdir}/cpupower.service -%{_mandir}/man[1-8]/cpupower* -%config(noreplace) %{_sysconfdir}/sysconfig/cpupower -%ifarch x86_64 -%{_bindir}/x86_energy_perf_policy -%{_mandir}/man8/x86_energy_perf_policy* -%{_bindir}/turbostat -%{_mandir}/man8/turbostat* -%{_bindir}/intel-speed-select -%{_sbindir}/intel_sdsi -%endif -# cpupowerarchs -%endif -%{_bindir}/tmon -%{_bindir}/iio_event_monitor -%{_bindir}/iio_generic_buffer -%{_bindir}/lsiio -%{_bindir}/lsgpio -%{_bindir}/gpio-hammer -%{_bindir}/gpio-event-mon -%{_bindir}/gpio-watch -%{_mandir}/man1/kvm_stat* -%{_bindir}/kvm_stat -%{_unitdir}/kvm_stat.service -%config(noreplace) %{_sysconfdir}/logrotate.d/kvm_stat -%{_bindir}/page_owner_sort -%{_bindir}/slabinfo - -%if %{with_debuginfo} -%files -f kernel-tools-debuginfo.list -n kernel-tools-debuginfo -%endif - -%ifarch %{cpupowerarchs} -%files -n kernel-tools-libs -%{_libdir}/libcpupower.so.0 -%{_libdir}/libcpupower.so.0.0.1 - -%files -n kernel-tools-libs-devel -%{_libdir}/libcpupower.so -%{_includedir}/cpufreq.h -%endif -# with_tools -%endif - -%if %{with_bpftool} -%files -n bpftool -%{_sbindir}/bpftool -%{_sysconfdir}/bash_completion.d/bpftool -%{_mandir}/man8/bpftool-cgroup.8.gz -%{_mandir}/man8/bpftool-gen.8.gz -%{_mandir}/man8/bpftool-iter.8.gz -%{_mandir}/man8/bpftool-link.8.gz -%{_mandir}/man8/bpftool-map.8.gz -%{_mandir}/man8/bpftool-prog.8.gz -%{_mandir}/man8/bpftool-perf.8.gz -%{_mandir}/man8/bpftool.8.gz -%{_mandir}/man8/bpftool-net.8.gz -%{_mandir}/man8/bpftool-feature.8.gz -%{_mandir}/man8/bpftool-btf.8.gz -%{_mandir}/man8/bpftool-struct_ops.8.gz - -%if %{with_debuginfo} -%files -f bpftool-debuginfo.list -n bpftool-debuginfo -%defattr(-,root,root) -%endif -%endif - -%if %{with_selftests} -%files selftests-internal -%{_libexecdir}/ksamples -%{_libexecdir}/kselftests -%endif - -# empty meta-package -%ifnarch %nobuildarches noarch -%files -%endif - -%if %{with_gcov} -%ifnarch %nobuildarches noarch -%files gcov -%{_builddir} -%endif -%endif - -# This is %%{image_install_path} on an arch where that includes ELF files, -# or empty otherwise. -%define elf_image_install_path %{?kernel_image_elf:%{image_install_path}} - -# -# This macro defines the %%files sections for a kernel package -# and its devel and debuginfo packages. -# %%kernel_variant_files [-k vmlinux] <use_vdso> <condition> <subpackage> -# -%define kernel_variant_files(k:) \ -%if %{2}\ -%{expand:%%files -f kernel-%{?3:%{3}-}core.list %{?1:-f kernel-%{?3:%{3}-}ldsoconf.list} %{?3:%{3}-}core}\ -%{!?_licensedir:%global license %%doc}\ -%license linux-%{KVERREL}/COPYING-%{version}-%{release}\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/%{?-k:%{-k*}}%{!?-k:vmlinuz}\ -%ghost /%{image_install_path}/%{?-k:%{-k*}}%{!?-k:vmlinuz}-%{KVERREL}%{?3:+%{3}}\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/.vmlinuz.hmac \ -%ghost /%{image_install_path}/.vmlinuz-%{KVERREL}%{?3:+%{3}}.hmac \ -%ifarch %{arm} aarch64\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/dtb \ -%ghost /%{image_install_path}/dtb-%{KVERREL}%{?3:+%{3}} \ -%endif\ -%attr(0600, root, root) /lib/modules/%{KVERREL}%{?3:+%{3}}/System.map\ -%ghost %attr(0600, root, root) /boot/System.map-%{KVERREL}%{?3:+%{3}}\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/symvers.gz\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/config\ -%ghost %attr(0600, root, root) /boot/symvers-%{KVERREL}%{?3:+%{3}}.gz\ -%ghost %attr(0600, root, root) /boot/initramfs-%{KVERREL}%{?3:+%{3}}.img\ -%ghost %attr(0644, root, root) /boot/config-%{KVERREL}%{?3:+%{3}}\ -%dir /lib/modules\ -%dir /lib/modules/%{KVERREL}%{?3:+%{3}}\ -%dir /lib/modules/%{KVERREL}%{?3:+%{3}}/kernel\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/build\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/source\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/updates\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/weak-updates\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/systemtap\ -%{_datadir}/doc/kernel-keys/%{KVERREL}%{?3:+%{3}}\ -%if %{1}\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/vdso\ -%endif\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/modules.*\ -%{expand:%%files -f kernel-%{?3:%{3}-}modules.list %{?3:%{3}-}modules}\ -%{expand:%%files %{?3:%{3}-}devel}\ -%defverify(not mtime)\ -/usr/src/kernels/%{KVERREL}%{?3:+%{3}}\ -%{expand:%%files %{?3:%{3}-}devel-matched}\ -%{expand:%%files -f kernel-%{?3:%{3}-}modules-extra.list %{?3:%{3}-}modules-extra}\ -%config(noreplace) /etc/modprobe.d/*-blacklist.conf\ -%{expand:%%files -f kernel-%{?3:%{3}-}modules-internal.list %{?3:%{3}-}modules-internal}\ -%if %{with_debuginfo}\ -%ifnarch noarch\ -%{expand:%%files -f debuginfo%{?3}.list %{?3:%{3}-}debuginfo}\ -%endif\ -%endif\ -%if %{?3:1} %{!?3:0}\ -%{expand:%%files %{3}}\ -%endif\ -%endif\ -%{nil} - -%kernel_variant_files %{_use_vdso} %{with_up} -%kernel_variant_files %{_use_vdso} %{with_debug} debug -%if %{with_debug_meta} -%files debug -%files debug-core -%files debug-devel -%files debug-devel-matched -%files debug-modules -%files debug-modules-extra -%endif -%kernel_variant_files %{use_vdso} %{with_pae} lpae -%kernel_variant_files %{_use_vdso} %{with_zfcpdump} zfcpdump - -%define kernel_variant_ipaclones(k:) \ -%if %{1}\ -%if %{with_ipaclones}\ -%{expand:%%files %{?2:%{2}-}ipaclones-internal}\ -%defattr(-,root,root)\ -%defverify(not mtime)\ -/usr/src/kernels/%{KVERREL}%{?2:+%{2}}-ipaclones\ -%endif\ -%endif\ -%{nil} - -%kernel_variant_ipaclones %{with_up} - -# plz don't put in a version string unless you're going to tag -# and build. -# -# -%changelog Mon Mar 28 2022 Fedora Kernel Team <kernel-team@xxxxxxxxxxxxxxxxx> [5.16.0-0.rc5.fce15c45d3fb.6.test] - -### -# The following Emacs magic makes C-c C-e use UTC dates. -# Local Variables: -# rpm-change-log-uses-utc: t -# End: -### diff --git a/redhat/self-test/data/rhel-2585cf9dfaad.el7.spec b/redhat/self-test/data/rhel-2585cf9dfaad.el7.spec index blahblah..blahblah 100755 --- a/redhat/self-test/data/rhel-2585cf9dfaad.el7.spec +++ b/redhat/self-test/data/rhel-2585cf9dfaad.el7.spec @@ -1,3050 +1,13 @@ -# All Global changes to build and install go here. -# Per the below section about __spec_install_pre, any rpm -# environment changes that affect %%install need to go -# here before the %%install macro is pre-built. - -# Disable LTO in userspace packages. -%global _lto_cflags %{nil} - -# Option to enable compiling with clang instead of gcc. -%bcond_with toolchain_clang - -%if %{with toolchain_clang} -%global toolchain clang -%endif - -# Compile the kernel with LTO (only supported when building with clang). -%bcond_with clang_lto - -%if %{with clang_lto} && %{without toolchain_clang} -{error:clang_lto requires --with toolchain_clang} -%endif - -# Cross compile on copr for arm -# See https://bugzilla.redhat.com/1879599 -%if 0%{?_with_cross_arm:1} -%global _target_cpu armv7hl -%global _arch arm -%global _build_arch arm -%global _with_cross 1 -%endif - -# The kernel's %%install section is special -# Normally the %%install section starts by cleaning up the BUILD_ROOT -# like so: -# -# %%__spec_install_pre %%{___build_pre}\ -# [ "$RPM_BUILD_ROOT" != "/" ] && rm -rf "${RPM_BUILD_ROOT}"\ -# mkdir -p `dirname "$RPM_BUILD_ROOT"`\ -# mkdir "$RPM_BUILD_ROOT"\ -# %%{nil} -# -# But because of kernel variants, the %%build section, specifically -# BuildKernel(), moves each variant to its final destination as the -# variant is built. This violates the expectation of the %%install -# section. As a result we snapshot the current env variables and -# purposely leave out the removal section. All global wide changes -# should be added above this line otherwise the %%install section -# will not see them. -%global __spec_install_pre %{___build_pre} - -# At the time of this writing (2019-03), RHEL8 packages use w2.xzdio -# compression for rpms (xz, level 2). -# Kernel has several large (hundreds of mbytes) rpms, they take ~5 mins -# to compress by single-threaded xz. Switch to threaded compression, -# and from level 2 to 3 to keep compressed sizes close to "w2" results. -# -# NB: if default compression in /usr/lib/rpm/redhat/macros ever changes, -# this one might need tweaking (e.g. if default changes to w3.xzdio, -# change below to w4T.xzdio): -# -# This is disabled on i686 as it triggers oom errors - -%ifnarch i686 -%define _binary_payload w3T.xzdio -%endif - -Summary: The Linux kernel -%if 0%{?fedora} -%define secure_boot_arch x86_64 -%else -%define secure_boot_arch x86_64 aarch64 s390x ppc64le -%endif - -# Signing for secure boot authentication -%ifarch %{secure_boot_arch} -%global signkernel 1 -%else -%global signkernel 0 -%endif - -# Sign modules on all arches -%global signmodules 1 - -# Compress modules only for architectures that build modules -%ifarch noarch -%global zipmodules 0 -%else -%global zipmodules 1 -%endif - -%if %{zipmodules} -%global zipsed -e 's/\.ko$/\.ko.xz/' -# for parallel xz processes, replace with 1 to go back to single process -%endif - -%if 0%{?fedora} -%define primary_target fedora -%else -%define primary_target rhel -%endif - -# -# genspec.sh variables -# - -# Include Fedora files %global include_fedora 1 -# Include RHEL files %global include_rhel 1 -# Provide Patchlist.changelog file %global patchlist_changelog 1 -# Set released_kernel to 1 when the upstream source tarball contains a -# kernel release. (This includes prepatch or "rc" releases.) -# Set released_kernel to 0 when the upstream source tarball contains an -# unreleased kernel development snapshot. %global released_kernel 0 -# Set debugbuildsenabled to 1 to build separate base and debug kernels -# (on supported architectures). The kernel-debug-* subpackages will -# contain the debug kernel. -# Set debugbuildsenabled to 0 to not build a separate debug kernel, but -# to build the base kernel using the debug configuration. (Specifying -# the --with-release option overrides this setting.) -%define debugbuildsenabled 1 %define buildid .test %define specversion 5.16.0 %define patchversion 5.16 %define pkgrelease 0.rc5.6.test %define kversion 5 %define tarfile_release 5.16.0-0.rc5.6.test -# This is needed to do merge window version magic %define patchlevel 16 -# allow pkg_release to have configurable %%{?dist} tag %define specrelease 0.rc5.6%{?buildid}%{?dist} - -# -# End of genspec.sh variables -# - -%define pkg_release %{specrelease} - -# libexec dir is not used by the linker, so the shared object there -# should not be exported to RPM provides -%global __provides_exclude_from ^%{_libexecdir}/kselftests - -# The following build options are enabled by default, but may become disabled -# by later architecture-specific checks. These can also be disabled by using -# --without <opt> in the rpmbuild command, or by forcing these values to 0. -# -# standard kernel -%define with_up %{?_without_up: 0} %{?!_without_up: 1} -# kernel PAE (only valid for ARM (lpae)) -%define with_pae %{?_without_pae: 0} %{?!_without_pae: 1} -# kernel-debug -%define with_debug %{?_without_debug: 0} %{?!_without_debug: 1} -# kernel-zfcpdump (s390 specific kernel for zfcpdump) -%define with_zfcpdump %{?_without_zfcpdump: 0} %{?!_without_zfcpdump: 1} -# kernel-doc -%define with_doc %{?_without_doc: 0} %{?!_without_doc: 1} -# kernel-headers -%define with_headers %{?_without_headers: 0} %{?!_without_headers: 1} -%define with_cross_headers %{?_without_cross_headers: 0} %{?!_without_cross_headers: 1} -# perf -%define with_perf %{?_without_perf: 0} %{?!_without_perf: 1} -# tools -%define with_tools %{?_without_tools: 0} %{?!_without_tools: 1} -# bpf tool -%define with_bpftool %{?_without_bpftool: 0} %{?!_without_bpftool: 1} -# kernel-debuginfo -%define with_debuginfo %{?_without_debuginfo: 0} %{?!_without_debuginfo: 1} -# kernel-abi-stablelists -%define with_kernel_abi_stablelists %{?_without_kernel_abi_stablelists: 0} %{?!_without_kernel_abi_stablelists: 1} -# internal samples and selftests -%define with_selftests %{?_without_selftests: 0} %{?!_without_selftests: 1} -# -# Additional options for user-friendly one-off kernel building: -# -# Only build the base kernel (--with baseonly): -%define with_baseonly %{?_with_baseonly: 1} %{?!_with_baseonly: 0} -# Only build the pae kernel (--with paeonly): -%define with_paeonly %{?_with_paeonly: 1} %{?!_with_paeonly: 0} -# Only build the debug kernel (--with dbgonly): -%define with_dbgonly %{?_with_dbgonly: 1} %{?!_with_dbgonly: 0} -# Control whether we perform a compat. check against published ABI. -%define with_kabichk %{?_without_kabichk: 0} %{?!_without_kabichk: 1} -# Temporarily disable kabi checks until RC. -%define with_kabichk 0 -# Control whether we perform a compat. check against DUP ABI. -%define with_kabidupchk %{?_with_kabidupchk: 1} %{?!_with_kabidupchk: 0} -# -# Control whether to run an extensive DWARF based kABI check. -# Note that this option needs to have baseline setup in SOURCE300. -%define with_kabidwchk %{?_without_kabidwchk: 0} %{?!_without_kabidwchk: 1} -%define with_kabidw_base %{?_with_kabidw_base: 1} %{?!_with_kabidw_base: 0} -# -# Control whether to install the vdso directories. -%define with_vdso_install %{?_without_vdso_install: 0} %{?!_without_vdso_install: 1} -# -# should we do C=1 builds with sparse -%define with_sparse %{?_with_sparse: 1} %{?!_with_sparse: 0} -# -# Cross compile requested? -%define with_cross %{?_with_cross: 1} %{?!_with_cross: 0} -# -# build a release kernel on rawhide -%define with_release %{?_with_release: 1} %{?!_with_release: 0} - -# verbose build, i.e. no silent rules and V=1 -%define with_verbose %{?_with_verbose: 1} %{?!_with_verbose: 0} - -# -# check for mismatched config options -%define with_configchecks %{?_without_configchecks: 0} %{?!_without_configchecks: 1} - -# -# gcov support -%define with_gcov %{?_with_gcov:1}%{?!_with_gcov:0} - -# -# ipa_clone support -%define with_ipaclones %{?_without_ipaclones: 0} %{?!_without_ipaclones: 1} - -# Want to build a vanilla kernel build without any non-upstream patches? -%define with_vanilla %{?_with_vanilla: 1} %{?!_with_vanilla: 0} - -%if 0%{?fedora} -# Kernel headers are being split out into a separate package -%define with_headers 0 -%define with_cross_headers 0 -# no ipa_clone for now -%define with_ipaclones 0 -# no stablelist -%define with_kernel_abi_stablelists 0 -# Fedora builds these separately -%define with_perf 0 -%define with_tools 0 -%define with_bpftool 0 -# selftests turns on bpftool -%define with_selftests 0 -%endif - -%if %{with_verbose} -%define make_opts V=1 -%else -%define make_opts -s -%endif - -%if %{with toolchain_clang} -%ifarch s390x ppc64le -%global llvm_ias 0 -%else -%global llvm_ias 1 -%endif -%global clang_make_opts HOSTCC=clang CC=clang LLVM_IAS=%{llvm_ias} -%if %{with clang_lto} -%global clang_make_opts %{clang_make_opts} LD=ld.lld HOSTLD=ld.lld AR=llvm-ar NM=llvm-nm HOSTAR=llvm-ar HOSTNM=llvm-nm -%endif -%global make_opts %{make_opts} %{clang_make_opts} -# clang does not support the -fdump-ipa-clones option -%global with_ipaclones 0 -%endif - -# turn off debug kernel and kabichk for gcov builds -%if %{with_gcov} -%define with_debug 0 -%define with_kabichk 0 -%define with_kabidupchk 0 -%define with_kabidwchk 0 -%define with_kabidw_base 0 -%define with_kernel_abi_stablelists 0 -%endif - -# turn off kABI DWARF-based check if we're generating the base dataset -%if %{with_kabidw_base} -%define with_kabidwchk 0 -%endif - -# kpatch_kcflags are extra compiler flags applied to base kernel -# -fdump-ipa-clones is enabled only for base kernels on selected arches -%if %{with_ipaclones} -%ifarch x86_64 ppc64le -%define kpatch_kcflags -fdump-ipa-clones -%else -%define with_ipaclones 0 -%endif -%endif - -%define make_target bzImage -%define image_install_path boot - -%define KVERREL %{version}-%{release}.%{_target_cpu} -%define KVERREL_RE %(echo %KVERREL | sed 's/+/[+]/g') -%define hdrarch %_target_cpu -%define asmarch %_target_cpu - -%if 0%{!?nopatches:1} -%define nopatches 0 -%endif - -%if %{with_vanilla} -%define nopatches 1 -%endif - -%if %{with_release} -%define debugbuildsenabled 1 -%endif - -%if !%{with_debuginfo} -%define _enable_debug_packages 0 -%endif -%define debuginfodir /usr/lib/debug -# Needed because we override almost everything involving build-ids -# and debuginfo generation. Currently we rely on the old alldebug setting. -%global _build_id_links alldebug - -# kernel PAE is only built on ARMv7 -%ifnarch armv7hl -%define with_pae 0 -%endif - -# if requested, only build base kernel -%if %{with_baseonly} -%define with_pae 0 -%define with_debug 0 -%define with_vdso_install 0 -%define with_perf 0 -%define with_tools 0 -%define with_bpftool 0 -%define with_kernel_abi_stablelists 0 -%define with_selftests 0 -%define with_cross 0 -%define with_cross_headers 0 -%define with_ipaclones 0 -%endif - -# if requested, only build pae kernel -%if %{with_paeonly} -%define with_up 0 -%define with_debug 0 -%endif - -# if requested, only build debug kernel -%if %{with_dbgonly} -%define with_up 0 -%define with_vdso_install 0 -%define with_perf 0 -%define with_tools 0 -%define with_bpftool 0 -%define with_kernel_abi_stablelists 0 -%define with_selftests 0 -%define with_cross 0 -%define with_cross_headers 0 -%define with_ipaclones 0 -%endif - -# turn off kABI DUP check and DWARF-based check if kABI check is disabled -%if !%{with_kabichk} -%define with_kabidupchk 0 -%define with_kabidwchk 0 -%endif - -%if %{with_vdso_install} -%define use_vdso 1 -%endif - -# selftests require bpftool to be built -%if %{with_selftests} -%define with_bpftool 1 -%endif - -%ifnarch noarch -%define with_kernel_abi_stablelists 0 -%endif - -# Overrides for generic default options - -# only package docs noarch -%ifnarch noarch -%define with_doc 0 -%define doc_build_fail true -%endif - -%if 0%{?fedora} -# don't do debug builds on anything but i686 and x86_64 -%ifnarch i686 x86_64 -%define with_debug 0 -%endif -%endif - -# don't build noarch kernels or headers (duh) -%ifarch noarch -%define with_up 0 -%define with_headers 0 -%define with_cross_headers 0 -%define with_tools 0 -%define with_perf 0 -%define with_bpftool 0 -%define with_selftests 0 -%define with_debug 0 -%define all_arch_configs kernel-%{version}-*.config -%endif - -# sparse blows up on ppc -%ifnarch ppc64le -%define with_sparse 0 -%endif - -# zfcpdump mechanism is s390 only -%ifnarch s390x -%define with_zfcpdump 0 -%endif - -%if 0%{?fedora} -# This is not for Fedora -%define with_zfcpdump 0 -%endif - -# Per-arch tweaks - -%ifarch i686 -%define asmarch x86 -%define hdrarch i386 -%define all_arch_configs kernel-%{version}-i?86*.config -%define kernel_image arch/x86/boot/bzImage -%endif - -%ifarch x86_64 -%define asmarch x86 -%define all_arch_configs kernel-%{version}-x86_64*.config -%define kernel_image arch/x86/boot/bzImage -%endif - -%ifarch ppc64le -%define asmarch powerpc -%define hdrarch powerpc -%define make_target vmlinux -%define kernel_image vmlinux -%define kernel_image_elf 1 -%define use_vdso 0 -%define all_arch_configs kernel-%{version}-ppc64le*.config -%endif - -%ifarch s390x -%define asmarch s390 -%define hdrarch s390 -%define all_arch_configs kernel-%{version}-s390x.config -%define kernel_image arch/s390/boot/bzImage -%define vmlinux_decompressor arch/s390/boot/compressed/vmlinux -%endif - -%ifarch %{arm} -%define all_arch_configs kernel-%{version}-arm*.config -%define skip_nonpae_vdso 1 -%define asmarch arm -%define hdrarch arm -%define make_target bzImage -%define kernel_image arch/arm/boot/zImage -# http://lists.infradead.org/pipermail/linux-arm-kernel/2012-March/091404.html -%define kernel_mflags KALLSYMS_EXTRA_PASS=1 -# we only build headers/perf/tools on the base arm arches -# just like we used to only build them on i386 for x86 -%ifnarch armv7hl -%define with_headers 0 -%define with_cross_headers 0 -%endif -# These currently don't compile on armv7 -%define with_selftests 0 -%endif - -%ifarch aarch64 -%define all_arch_configs kernel-%{version}-aarch64*.config -%define asmarch arm64 -%define hdrarch arm64 -%define make_target Image.gz -%define kernel_image arch/arm64/boot/Image.gz -%endif - -# Should make listnewconfig fail if there's config options -# printed out? -%if %{nopatches} -%define with_configchecks 0 -%endif - -# To temporarily exclude an architecture from being built, add it to -# %%nobuildarches. Do _NOT_ use the ExclusiveArch: line, because if we -# don't build kernel-headers then the new build system will no longer let -# us use the previous build of that package -- it'll just be completely AWOL. -# Which is a BadThing(tm). - -# We only build kernel-headers on the following... -%if 0%{?fedora} -%define nobuildarches i386 -%else -%define nobuildarches i386 i686 %{arm} -%endif - -%ifarch %nobuildarches -# disable BuildKernel commands -%define with_up 0 -%define with_debug 0 -%define with_pae 0 -%define with_zfcpdump 0 - -%define with_debuginfo 0 -%define with_perf 0 -%define with_tools 0 -%define with_bpftool 0 -%define with_selftests 0 -%define _enable_debug_packages 0 -%endif - -# Architectures we build tools/cpupower on -%if 0%{?fedora} -%define cpupowerarchs %{ix86} x86_64 ppc64le %{arm} aarch64 -%else -%define cpupowerarchs i686 x86_64 ppc64le aarch64 -%endif - -%if 0%{?use_vdso} - -%if 0%{?skip_nonpae_vdso} -%define _use_vdso 0 -%else -%define _use_vdso 1 -%endif - -%else -%define _use_vdso 0 -%endif - -# If build of debug packages is disabled, we need to know if we want to create -# meta debug packages or not, after we define with_debug for all specific cases -# above. So this must be at the end here, after all cases of with_debug or not. -%define with_debug_meta 0 -%if !%{debugbuildsenabled} -%if %{with_debug} -%define with_debug_meta 1 -%endif -%define with_debug 0 -%endif - - -# -# Packages that need to be installed before the kernel is, because the %%post -# scripts use them. -# -%define kernel_prereq coreutils, systemd >= 203-2, /usr/bin/kernel-install -%define initrd_prereq dracut >= 027 - - -Name: kernel -License: GPLv2 and Redistributable, no modification permitted -URL: https://www.kernel.org/ -Version: %{specversion} -Release: %{pkg_release} -# DO NOT CHANGE THE 'ExclusiveArch' LINE TO TEMPORARILY EXCLUDE AN ARCHITECTURE BUILD. -# SET %%nobuildarches (ABOVE) INSTEAD -%if 0%{?fedora} -ExclusiveArch: noarch x86_64 s390x %{arm} aarch64 ppc64le -%else -ExclusiveArch: noarch i386 i686 x86_64 s390x %{arm} aarch64 ppc64le -%endif -ExclusiveOS: Linux -%ifnarch %{nobuildarches} -Requires: kernel-core-uname-r = %{KVERREL} -Requires: kernel-modules-uname-r = %{KVERREL} -%endif - - -# -# List the packages used during the kernel build -# -BuildRequires: kmod, patch, bash, coreutils, tar, git-core, which -BuildRequires: bzip2, xz, findutils, gzip, m4, perl-interpreter, perl-Carp, perl-devel, perl-generators, make, diffutils, gawk -BuildRequires: gcc, binutils, redhat-rpm-config, hmaccalc, bison, flex, gcc-c++ -BuildRequires: net-tools, hostname, bc, elfutils-devel -BuildRequires: dwarves -BuildRequires: python3-devel -BuildRequires: gcc-plugin-devel -# glibc-static is required for a consistent build environment (specifically -# CONFIG_CC_CAN_LINK_STATIC=y). -BuildRequires: glibc-static -%ifnarch %{nobuildarches} noarch -BuildRequires: bpftool -%endif -%if %{with_headers} -BuildRequires: rsync -%endif -%if %{with_doc} -BuildRequires: xmlto, asciidoc, python3-sphinx, python3-sphinx_rtd_theme -%endif -%if %{with_sparse} -BuildRequires: sparse -%endif -%if %{with_perf} -BuildRequires: zlib-devel binutils-devel newt-devel perl(ExtUtils::Embed) bison flex xz-devel -BuildRequires: audit-libs-devel -BuildRequires: java-devel -BuildRequires: libbpf-devel -BuildRequires: libbabeltrace-devel -BuildRequires: libtraceevent-devel -%ifnarch %{arm} s390x -BuildRequires: numactl-devel -%endif -%ifarch aarch64 -BuildRequires: opencsd-devel >= 1.0.0 -%endif -%endif -%if %{with_tools} -BuildRequires: gettext ncurses-devel -BuildRequires: libcap-devel libcap-ng-devel -%ifnarch s390x -BuildRequires: pciutils-devel -%endif -%ifarch i686 x86_64 -BuildRequires: libnl3-devel -%endif -%endif -%if %{with_tools} || %{signmodules} || %{signkernel} -BuildRequires: openssl-devel -%endif -%if %{with_bpftool} -BuildRequires: python3-docutils -BuildRequires: zlib-devel binutils-devel -%endif -%if %{with_selftests} -BuildRequires: clang llvm -%ifnarch %{arm} -BuildRequires: numactl-devel -%endif -BuildRequires: libcap-devel libcap-ng-devel rsync libmnl-devel -%endif -BuildConflicts: rhbuildsys(DiskFree) < 500Mb -%if %{with_debuginfo} -BuildRequires: rpm-build, elfutils -BuildConflicts: rpm < 4.13.0.1-19 -BuildConflicts: dwarves < 1.13 -# Most of these should be enabled after more investigation -%undefine _include_minidebuginfo -%undefine _find_debuginfo_dwz_opts -%undefine _unique_build_ids -%undefine _unique_debug_names -%undefine _unique_debug_srcs -%undefine _debugsource_packages -%undefine _debuginfo_subpackages -%global _find_debuginfo_opts -r -%global _missing_build_ids_terminate_build 1 -%global _no_recompute_build_ids 1 -%endif -%if %{with_kabidwchk} || %{with_kabidw_base} -BuildRequires: kabi-dw -%endif - -%if %{signkernel}%{signmodules} -BuildRequires: openssl -%if %{signkernel} -# ELN uses Fedora signing process, so exclude -%if 0%{?rhel}%{?centos} && !0%{?eln} -BuildRequires: system-sb-certs -%endif -%ifarch x86_64 aarch64 -BuildRequires: nss-tools -BuildRequires: pesign >= 0.10-4 -%endif -%endif -%endif - -%if %{with_cross} -BuildRequires: binutils-%{_build_arch}-linux-gnu, gcc-%{_build_arch}-linux-gnu -%define cross_opts CROSS_COMPILE=%{_build_arch}-linux-gnu- -%define __strip %{_build_arch}-linux-gnu-strip -%endif - -# These below are required to build man pages -%if %{with_perf} -BuildRequires: xmlto -%endif -%if %{with_perf} || %{with_tools} -BuildRequires: asciidoc -%endif - -%if %{with toolchain_clang} -BuildRequires: clang -%endif - -%if %{with clang_lto} -BuildRequires: llvm -BuildRequires: lld -%endif - -# Because this is the kernel, it's hard to get a single upstream URL -# to represent the base without needing to do a bunch of patching. This -# tarball is generated from a src-git tree. If you want to see the -# exact git commit you can run -# -# xzcat -qq ${TARBALL} | git get-tar-commit-id -Source0: linux-%{tarfile_release}.tar.xz - -Source1: Makefile.rhelver - - -# Name of the packaged file containing signing key -%ifarch ppc64le -%define signing_key_filename kernel-signing-ppc.cer -%endif -%ifarch s390x -%define signing_key_filename kernel-signing-s390.cer -%endif - -%if %{?released_kernel} - -Source10: redhatsecurebootca5.cer -Source11: redhatsecurebootca1.cer -Source12: redhatsecureboot501.cer -Source13: redhatsecureboot301.cer -Source14: secureboot_s390.cer -Source15: secureboot_ppc.cer - -%define secureboot_ca_1 %{SOURCE10} -%define secureboot_ca_0 %{SOURCE11} -%ifarch x86_64 aarch64 -%define secureboot_key_1 %{SOURCE12} -%define pesign_name_1 redhatsecureboot501 -%define secureboot_key_0 %{SOURCE13} -%define pesign_name_0 redhatsecureboot301 -%endif -%ifarch s390x -%define secureboot_key_0 %{SOURCE14} -%define pesign_name_0 redhatsecureboot302 -%endif -%ifarch ppc64le -%define secureboot_key_0 %{SOURCE15} -%define pesign_name_0 redhatsecureboot303 -%endif - -# released_kernel -%else - -Source10: redhatsecurebootca4.cer -Source11: redhatsecurebootca2.cer -Source12: redhatsecureboot401.cer -Source13: redhatsecureboot003.cer - -%define secureboot_ca_1 %{SOURCE10} -%define secureboot_ca_0 %{SOURCE11} -%define secureboot_key_1 %{SOURCE12} -%define pesign_name_1 redhatsecureboot401 -%define secureboot_key_0 %{SOURCE13} -%define pesign_name_0 redhatsecureboot003 - -# released_kernel -%endif - -Source20: mod-denylist.sh -Source21: mod-sign.sh -Source22: parallel_xz.sh - -%define modsign_cmd %{SOURCE21} - -%if 0%{?include_rhel} -Source23: x509.genkey.rhel - -Source24: kernel-aarch64-rhel.config -Source25: kernel-aarch64-debug-rhel.config -Source26: mod-extra.list.rhel - -Source27: kernel-ppc64le-rhel.config -Source28: kernel-ppc64le-debug-rhel.config -Source29: kernel-s390x-rhel.config -Source30: kernel-s390x-debug-rhel.config -Source31: kernel-s390x-zfcpdump-rhel.config -Source32: kernel-x86_64-rhel.config -Source33: kernel-x86_64-debug-rhel.config - -Source34: filter-x86_64.sh.rhel -Source35: filter-armv7hl.sh.rhel -Source37: filter-aarch64.sh.rhel -Source38: filter-ppc64le.sh.rhel -Source39: filter-s390x.sh.rhel -Source40: filter-modules.sh.rhel - -Source41: x509.genkey.centos -%endif - -%if 0%{?include_fedora} -Source50: x509.genkey.fedora -Source51: mod-extra.list.fedora - -Source52: kernel-aarch64-fedora.config -Source53: kernel-aarch64-debug-fedora.config -Source54: kernel-armv7hl-fedora.config -Source55: kernel-armv7hl-debug-fedora.config -Source56: kernel-armv7hl-lpae-fedora.config -Source57: kernel-armv7hl-lpae-debug-fedora.config -Source60: kernel-ppc64le-fedora.config -Source61: kernel-ppc64le-debug-fedora.config -Source62: kernel-s390x-fedora.config -Source63: kernel-s390x-debug-fedora.config -Source64: kernel-x86_64-fedora.config -Source65: kernel-x86_64-debug-fedora.config - -Source67: filter-x86_64.sh.fedora -Source68: filter-armv7hl.sh.fedora -Source70: filter-aarch64.sh.fedora -Source71: filter-ppc64le.sh.fedora -Source72: filter-s390x.sh.fedora -Source73: filter-modules.sh.fedora -%endif - -Source75: partial-kgcov-snip.config -Source80: generate_all_configs.sh -Source81: process_configs.sh - -Source82: update_scripts.sh - -Source84: mod-internal.list - -Source100: rheldup3.x509 -Source101: rhelkpatch1.x509 - -Source200: check-kabi - -Source201: Module.kabi_aarch64 -Source202: Module.kabi_ppc64le -Source203: Module.kabi_s390x -Source204: Module.kabi_x86_64 - -Source210: Module.kabi_dup_aarch64 -Source211: Module.kabi_dup_ppc64le -Source212: Module.kabi_dup_s390x -Source213: Module.kabi_dup_x86_64 - -Source300: kernel-abi-stablelists-%{specversion}-%{pkgrelease}.tar.bz2 -Source301: kernel-kabi-dw-%{specversion}-%{pkgrelease}.tar.bz2 - -# Sources for kernel-tools -Source2000: cpupower.service -Source2001: cpupower.config -Source2002: kvm_stat.logrotate - -# Some people enjoy building customized kernels from the dist-git in Fedora and -# use this to override configuration options. One day they may all use the -# source tree, but in the mean time we carry this to support the legacy workflow -Source3000: merge.pl -Source3001: kernel-local -%if %{patchlist_changelog} -Source3002: Patchlist.changelog -%endif - -Source4000: README.rst -Source4001: rpminspect.yaml -Source4002: gating.yaml - -## Patches needed for building this package - -%if !%{nopatches} - -Patch1: patch-%{patchversion}-redhat.patch -%endif - -# empty final patch to facilitate testing of kernel patches -Patch999999: linux-kernel-test.patch - -# END OF PATCH DEFINITIONS - -%description -The kernel meta package - -# -# This macro does requires, provides, conflicts, obsoletes for a kernel package. -# %%kernel_reqprovconf <subpackage> -# It uses any kernel_<subpackage>_conflicts and kernel_<subpackage>_obsoletes -# macros defined above. -# -%define kernel_reqprovconf \ -Provides: kernel = %{specversion}-%{pkg_release}\ -Provides: kernel-%{_target_cpu} = %{specversion}-%{pkg_release}%{?1:+%{1}}\ -Provides: kernel-drm-nouveau = 16\ -Provides: kernel-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires(pre): %{kernel_prereq}\ -Requires(pre): %{initrd_prereq}\ -Requires(pre): ((linux-firmware >= 20150904-56.git6ebf5d57) if linux-firmware)\ -Recommends: linux-firmware\ -Requires(preun): systemd >= 200\ -Conflicts: xfsprogs < 4.3.0-1\ -Conflicts: xorg-x11-drv-vmmouse < 13.0.99\ -%{expand:%%{?kernel%{?1:_%{1}}_conflicts:Conflicts: %%{kernel%{?1:_%{1}}_conflicts}}}\ -%{expand:%%{?kernel%{?1:_%{1}}_obsoletes:Obsoletes: %%{kernel%{?1:_%{1}}_obsoletes}}}\ -%{expand:%%{?kernel%{?1:_%{1}}_provides:Provides: %%{kernel%{?1:_%{1}}_provides}}}\ -# We can't let RPM do the dependencies automatic because it'll then pick up\ -# a correct but undesirable perl dependency from the module headers which\ -# isn't required for the kernel proper to function\ -AutoReq: no\ -AutoProv: yes\ -%{nil} - - -%package doc -Summary: Various documentation bits found in the kernel source -Group: Documentation -%description doc -This package contains documentation files from the kernel -source. Various bits of information about the Linux kernel and the -device drivers shipped with it are documented in these files. - -You'll want to install this package if you need a reference to the -options that can be passed to Linux kernel modules at load time. - - -%package headers -Summary: Header files for the Linux kernel for use by glibc -Obsoletes: glibc-kernheaders < 3.0-46 -Provides: glibc-kernheaders = 3.0-46 -%description headers -Kernel-headers includes the C header files that specify the interface -between the Linux kernel and userspace libraries and programs. The -header files define structures and constants that are needed for -building most standard programs and are also needed for rebuilding the -glibc package. - -%package cross-headers -Summary: Header files for the Linux kernel for use by cross-glibc -%description cross-headers -Kernel-cross-headers includes the C header files that specify the interface -between the Linux kernel and userspace libraries and programs. The -header files define structures and constants that are needed for -building most standard programs and are also needed for rebuilding the -cross-glibc package. - - -%package debuginfo-common-%{_target_cpu} -Summary: Kernel source files used by %{name}-debuginfo packages -Provides: installonlypkg(kernel) -%description debuginfo-common-%{_target_cpu} -This package is required by %{name}-debuginfo subpackages. -It provides the kernel source files common to all builds. - -%if %{with_perf} -%package -n perf -Summary: Performance monitoring for the Linux kernel -Requires: bzip2 -License: GPLv2 -%description -n perf -This package contains the perf tool, which enables performance monitoring -of the Linux kernel. - -%package -n perf-debuginfo -Summary: Debug information for package perf -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release} -AutoReqProv: no -%description -n perf-debuginfo -This package provides debug information for the perf package. - -# Note that this pattern only works right to match the .build-id -# symlinks because of the trailing nonmatching alternation and -# the leading .*, because of find-debuginfo.sh's buggy handling -# of matching the pattern against the symlinks file. -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{_bindir}/perf(\.debug)?|.*%%{_libexecdir}/perf-core/.*|.*%%{_libdir}/libperf-jvmti.so(\.debug)?|XXX' -o perf-debuginfo.list} - -%package -n python3-perf -Summary: Python bindings for apps which will manipulate perf events -%description -n python3-perf -The python3-perf package contains a module that permits applications -written in the Python programming language to use the interface -to manipulate perf events. - -%package -n python3-perf-debuginfo -Summary: Debug information for package perf python bindings -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release} -AutoReqProv: no -%description -n python3-perf-debuginfo -This package provides debug information for the perf python bindings. - -# the python_sitearch macro should already be defined from above -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{python3_sitearch}/perf.*so(\.debug)?|XXX' -o python3-perf-debuginfo.list} - -# with_perf -%endif - -%if %{with_tools} -%package -n kernel-tools -Summary: Assortment of tools for the Linux kernel -License: GPLv2 -%ifarch %{cpupowerarchs} -Provides: cpupowerutils = 1:009-0.6.p1 -Obsoletes: cpupowerutils < 1:009-0.6.p1 -Provides: cpufreq-utils = 1:009-0.6.p1 -Provides: cpufrequtils = 1:009-0.6.p1 -Obsoletes: cpufreq-utils < 1:009-0.6.p1 -Obsoletes: cpufrequtils < 1:009-0.6.p1 -Obsoletes: cpuspeed < 1:1.5-16 -Requires: kernel-tools-libs = %{version}-%{release} -%endif -%define __requires_exclude ^%{_bindir}/python -%description -n kernel-tools -This package contains the tools/ directory from the kernel source -and the supporting documentation. - -%package -n kernel-tools-libs -Summary: Libraries for the kernels-tools -License: GPLv2 -%description -n kernel-tools-libs -This package contains the libraries built from the tools/ directory -from the kernel source. - -%package -n kernel-tools-libs-devel -Summary: Assortment of tools for the Linux kernel -License: GPLv2 -Requires: kernel-tools = %{version}-%{release} -%ifarch %{cpupowerarchs} -Provides: cpupowerutils-devel = 1:009-0.6.p1 -Obsoletes: cpupowerutils-devel < 1:009-0.6.p1 -%endif -Requires: kernel-tools-libs = %{version}-%{release} -Provides: kernel-tools-devel -%description -n kernel-tools-libs-devel -This package contains the development files for the tools/ directory from -the kernel source. - -%package -n kernel-tools-debuginfo -Summary: Debug information for package kernel-tools -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release} -AutoReqProv: no -%description -n kernel-tools-debuginfo -This package provides debug information for package kernel-tools. - -# Note that this pattern only works right to match the .build-id -# symlinks because of the trailing nonmatching alternation and -# the leading .*, because of find-debuginfo.sh's buggy handling -# of matching the pattern against the symlinks file. -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{_bindir}/centrino-decode(\.debug)?|.*%%{_bindir}/powernow-k8-decode(\.debug)?|.*%%{_bindir}/cpupower(\.debug)?|.*%%{_libdir}/libcpupower.*|.*%%{_bindir}/turbostat(\.debug)?|.*%%{_bindir}/x86_energy_perf_policy(\.debug)?|.*%%{_bindir}/tmon(\.debug)?|.*%%{_bindir}/lsgpio(\.debug)?|.*%%{_bindir}/gpio-hammer(\.debug)?|.*%%{_bindir}/gpio-event-mon(\.debug)?|.*%%{_bindir}/gpio-watch(\.debug)?|.*%%{_bindir}/iio_event_monitor(\.debug)?|.*%%{_bindir}/iio_generic_buffer(\.debug)?|.*%%{_bindir}/lsiio(\.debug)?|.*%%{_bindir}/intel-speed-select(\.debug)?|.*%%{_bindir}/page_owner_sort(\.debug)?|.*%%{_bindir}/slabinfo(\.debug)?|.*%%{_sbindir}/intel_sdsi(\.debug)?|XXX' -o kernel-tools-debuginfo.list} - -# with_tools -%endif - -%if %{with_bpftool} - -%package -n bpftool -Summary: Inspection and simple manipulation of eBPF programs and maps -License: GPLv2 -%description -n bpftool -This package contains the bpftool, which allows inspection and simple -manipulation of eBPF programs and maps. - -%package -n bpftool-debuginfo -Summary: Debug information for package bpftool -Group: Development/Debug -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release} -AutoReqProv: no -%description -n bpftool-debuginfo -This package provides debug information for the bpftool package. - -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{_sbindir}/bpftool(\.debug)?|XXX' -o bpftool-debuginfo.list} - -# with_bpftool -%endif - -%if %{with_selftests} - -%package selftests-internal -Summary: Kernel samples and selftests -License: GPLv2 -Requires: binutils, bpftool, iproute-tc, nmap-ncat, python3 -%description selftests-internal -Kernel sample programs and selftests. - -# Note that this pattern only works right to match the .build-id -# symlinks because of the trailing nonmatching alternation and -# the leading .*, because of find-debuginfo.sh's buggy handling -# of matching the pattern against the symlinks file. -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{_libexecdir}/(ksamples|kselftests)/.*|XXX' -o selftests-debuginfo.list} - -# with_selftests -%endif - -%if %{with_gcov} -%package gcov -Summary: gcov graph and source files for coverage data collection. -%description gcov -kernel-gcov includes the gcov graph and source files for gcov coverage collection. -%endif - -%package -n kernel-abi-stablelists -Summary: The Red Hat Enterprise Linux kernel ABI symbol stablelists -AutoReqProv: no -%description -n kernel-abi-stablelists -The kABI package contains information pertaining to the Red Hat Enterprise -Linux kernel ABI, including lists of kernel symbols that are needed by -external Linux kernel modules, and a yum plugin to aid enforcement. - -%if %{with_kabidw_base} -%package kernel-kabidw-base-internal -Summary: The baseline dataset for kABI verification using DWARF data -Group: System Environment/Kernel -AutoReqProv: no -%description kernel-kabidw-base-internal -The package contains data describing the current ABI of the Red Hat Enterprise -Linux kernel, suitable for the kabi-dw tool. -%endif - -# -# This macro creates a kernel-<subpackage>-debuginfo package. -# %%kernel_debuginfo_package <subpackage> -# -# Explanation of the find_debuginfo_opts: We build multiple kernels (debug -# pae etc.) so the regex filters those kernels appropriately. We also -# have to package several binaries as part of kernel-devel but getting -# unique build-ids is tricky for these userspace binaries. We don't really -# care about debugging those so we just filter those out and remove it. -%define kernel_debuginfo_package() \ -%package %{?1:%{1}-}debuginfo\ -Summary: Debug information for package %{name}%{?1:-%{1}}\ -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release}\ -Provides: %{name}%{?1:-%{1}}-debuginfo-%{_target_cpu} = %{version}-%{release}\ -Provides: installonlypkg(kernel)\ -AutoReqProv: no\ -%description %{?1:%{1}-}debuginfo\ -This package provides debug information for package %{name}%{?1:-%{1}}.\ -This is required to use SystemTap with %{name}%{?1:-%{1}}-%{KVERREL}.\ -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} --keep-section '.BTF' -p '.*\/usr\/src\/kernels/.*|XXX' -o ignored-debuginfo.list -p '/.*/%%{KVERREL_RE}%{?1:[+]%{1}}/.*|/.*%%{KVERREL_RE}%{?1:\+%{1}}(\.debug)?' -o debuginfo%{?1}.list}\ -%{nil} - -# -# This macro creates a kernel-<subpackage>-devel package. -# %%kernel_devel_package [-m] <subpackage> <pretty-name> -# -%define kernel_devel_package(m) \ -%package %{?1:%{1}-}devel\ -Summary: Development package for building kernel modules to match the %{?2:%{2} }kernel\ -Provides: kernel%{?1:-%{1}}-devel-%{_target_cpu} = %{version}-%{release}\ -Provides: kernel-devel-%{_target_cpu} = %{version}-%{release}%{?1:+%{1}}\ -Provides: kernel-devel-uname-r = %{KVERREL}%{?1:+%{1}}\ -Provides: installonlypkg(kernel)\ -AutoReqProv: no\ -Requires(pre): findutils\ -Requires: findutils\ -Requires: perl-interpreter\ -Requires: openssl-devel\ -Requires: elfutils-libelf-devel\ -Requires: bison\ -Requires: flex\ -Requires: make\ -Requires: gcc\ -%if %{-m:1}%{!-m:0}\ -Requires: kernel-devel-uname-r = %{KVERREL}\ -%endif\ -%description %{?1:%{1}-}devel\ -This package provides kernel headers and makefiles sufficient to build modules\ -against the %{?2:%{2} }kernel package.\ -%{nil} - -# -# This macro creates an empty kernel-<subpackage>-devel-matched package that -# requires both the core and devel packages locked on the same version. -# %%kernel_devel_matched_package [-m] <subpackage> <pretty-name> -# -%define kernel_devel_matched_package(m) \ -%package %{?1:%{1}-}devel-matched\ -Summary: Meta package to install matching core and devel packages for a given %{?2:%{2} }kernel\ -Requires: kernel%{?1:-%{1}}-devel = %{version}-%{release}\ -Requires: kernel%{?1:-%{1}}-core = %{version}-%{release}\ -%description %{?1:%{1}-}devel-matched\ -This meta package is used to install matching core and devel packages for a given %{?2:%{2} }kernel.\ -%{nil} - -# -# kernel-<variant>-ipaclones-internal package -# -%define kernel_ipaclones_package() \ -%package %{?1:%{1}-}ipaclones-internal\ -Summary: *.ipa-clones files generated by -fdump-ipa-clones for kernel%{?1:-%{1}}\ -Group: System Environment/Kernel\ -AutoReqProv: no\ -%description %{?1:%{1}-}ipaclones-internal\ -This package provides *.ipa-clones files.\ -%{nil} - -# -# This macro creates a kernel-<subpackage>-modules-internal package. -# %%kernel_modules_internal_package <subpackage> <pretty-name> -# -%define kernel_modules_internal_package() \ -%package %{?1:%{1}-}modules-internal\ -Summary: Extra kernel modules to match the %{?2:%{2} }kernel\ -Group: System Environment/Kernel\ -Provides: kernel%{?1:-%{1}}-modules-internal-%{_target_cpu} = %{version}-%{release}\ -Provides: kernel%{?1:-%{1}}-modules-internal-%{_target_cpu} = %{version}-%{release}%{?1:+%{1}}\ -Provides: kernel%{?1:-%{1}}-modules-internal = %{version}-%{release}%{?1:+%{1}}\ -Provides: installonlypkg(kernel-module)\ -Provides: kernel%{?1:-%{1}}-modules-internal-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel%{?1:-%{1}}-modules-uname-r = %{KVERREL}%{?1:+%{1}}\ -AutoReq: no\ -AutoProv: yes\ -%description %{?1:%{1}-}modules-internal\ -This package provides kernel modules for the %{?2:%{2} }kernel package for Red Hat internal usage.\ -%{nil} - -# -# This macro creates a kernel-<subpackage>-modules-extra package. -# %%kernel_modules_extra_package [-m] <subpackage> <pretty-name> -# -%define kernel_modules_extra_package(m) \ -%package %{?1:%{1}-}modules-extra\ -Summary: Extra kernel modules to match the %{?2:%{2} }kernel\ -Provides: kernel%{?1:-%{1}}-modules-extra-%{_target_cpu} = %{version}-%{release}\ -Provides: kernel%{?1:-%{1}}-modules-extra-%{_target_cpu} = %{version}-%{release}%{?1:+%{1}}\ -Provides: kernel%{?1:-%{1}}-modules-extra = %{version}-%{release}%{?1:+%{1}}\ -Provides: installonlypkg(kernel-module)\ -Provides: kernel%{?1:-%{1}}-modules-extra-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel%{?1:-%{1}}-modules-uname-r = %{KVERREL}%{?1:+%{1}}\ -%if %{-m:1}%{!-m:0}\ -Requires: kernel-modules-extra-uname-r = %{KVERREL}\ -%endif\ -AutoReq: no\ -AutoProv: yes\ -%description %{?1:%{1}-}modules-extra\ -This package provides less commonly used kernel modules for the %{?2:%{2} }kernel package.\ -%{nil} - -# -# This macro creates a kernel-<subpackage>-modules package. -# %%kernel_modules_package [-m] <subpackage> <pretty-name> -# -%define kernel_modules_package(m) \ -%package %{?1:%{1}-}modules\ -Summary: kernel modules to match the %{?2:%{2}-}core kernel\ -Provides: kernel%{?1:-%{1}}-modules-%{_target_cpu} = %{version}-%{release}\ -Provides: kernel-modules-%{_target_cpu} = %{version}-%{release}%{?1:+%{1}}\ -Provides: kernel-modules = %{version}-%{release}%{?1:+%{1}}\ -Provides: installonlypkg(kernel-module)\ -Provides: kernel%{?1:-%{1}}-modules-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel-uname-r = %{KVERREL}%{?1:+%{1}}\ -%if %{-m:1}%{!-m:0}\ -Requires: kernel-modules-uname-r = %{KVERREL}\ -%endif\ -AutoReq: no\ -AutoProv: yes\ -%description %{?1:%{1}-}modules\ -This package provides commonly used kernel modules for the %{?2:%{2}-}core kernel package.\ -%{nil} - -# -# this macro creates a kernel-<subpackage> meta package. -# %%kernel_meta_package <subpackage> -# -%define kernel_meta_package() \ -%package %{1}\ -summary: kernel meta-package for the %{1} kernel\ -Requires: kernel-%{1}-core-uname-r = %{KVERREL}+%{1}\ -Requires: kernel-%{1}-modules-uname-r = %{KVERREL}+%{1}\ -Provides: installonlypkg(kernel)\ -%description %{1}\ -The meta-package for the %{1} kernel\ -%{nil} - -# -# This macro creates a kernel-<subpackage> and its -devel and -debuginfo too. -# %%define variant_summary The Linux kernel compiled for <configuration> -# %%kernel_variant_package [-n <pretty-name>] [-m] <subpackage> -# -%define kernel_variant_package(n:m) \ -%package %{?1:%{1}-}core\ -Summary: %{variant_summary}\ -Provides: kernel-%{?1:%{1}-}core-uname-r = %{KVERREL}%{?1:+%{1}}\ -Provides: installonlypkg(kernel)\ -%if %{-m:1}%{!-m:0}\ -Requires: kernel-core-uname-r = %{KVERREL}\ -%endif\ -%{expand:%%kernel_reqprovconf}\ -%if %{?1:1} %{!?1:0} \ -%{expand:%%kernel_meta_package %{?1:%{1}}}\ -%endif\ -%{expand:%%kernel_devel_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}} %{-m:%{-m}}}\ -%{expand:%%kernel_devel_matched_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}} %{-m:%{-m}}}\ -%{expand:%%kernel_modules_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}} %{-m:%{-m}}}\ -%{expand:%%kernel_modules_extra_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}} %{-m:%{-m}}}\ -%if %{-m:0}%{!-m:1}\ -%{expand:%%kernel_modules_internal_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}}}\ -%{expand:%%kernel_debuginfo_package %{?1:%{1}}}\ -%endif\ -%{nil} - -# Now, each variant package. - -%if %{with_pae} -%define variant_summary The Linux kernel compiled for Cortex-A15 -%kernel_variant_package lpae -%description lpae-core -This package includes a version of the Linux kernel with support for -Cortex-A15 devices with LPAE and HW virtualisation support -%endif - -%if %{with_zfcpdump} -%define variant_summary The Linux kernel compiled for zfcpdump usage -%kernel_variant_package zfcpdump -%description zfcpdump-core -The kernel package contains the Linux kernel (vmlinuz) for use by the -zfcpdump infrastructure. -# with_zfcpdump -%endif - -%define variant_summary The Linux kernel compiled with extra debugging enabled -%if !%{debugbuildsenabled} -%kernel_variant_package -m debug -%else -%kernel_variant_package debug -%endif -%description debug-core -The kernel package contains the Linux kernel (vmlinuz), the core of any -Linux operating system. The kernel handles the basic functions -of the operating system: memory allocation, process allocation, device -input and output, etc. - -This variant of the kernel has numerous debugging options enabled. -It should only be installed when trying to gather additional information -on kernel bugs, as some of these options impact performance noticably. - -# And finally the main -core package - -%define variant_summary The Linux kernel -%kernel_variant_package -%description core -The kernel package contains the Linux kernel (vmlinuz), the core of any -Linux operating system. The kernel handles the basic functions -of the operating system: memory allocation, process allocation, device -input and output, etc. - -%if %{with_ipaclones} -%kernel_ipaclones_package -%endif - -%prep -# do a few sanity-checks for --with *only builds -%if %{with_baseonly} -%if !%{with_up} -echo "Cannot build --with baseonly, up build is disabled" -exit 1 -%endif -%endif - -# more sanity checking; do it quietly -if [ "%{patches}" != "%%{patches}" ] ; then - for patch in %{patches} ; do - if [ ! -f $patch ] ; then - echo "ERROR: Patch ${patch##/*/} listed in specfile but is missing" - exit 1 - fi - done -fi 2>/dev/null - -patch_command='patch -p1 -F1 -s' -ApplyPatch() -{ - local patch=$1 - shift - if [ ! -f $RPM_SOURCE_DIR/$patch ]; then - exit 1 - fi - if ! grep -E "^Patch[0-9]+: $patch\$" %{_specdir}/${RPM_PACKAGE_NAME}.spec ; then - if [ "${patch:0:8}" != "patch-%{kversion}." ] ; then - echo "ERROR: Patch $patch not listed as a source patch in specfile" - exit 1 - fi - fi 2>/dev/null - case "$patch" in - *.bz2) bunzip2 < "$RPM_SOURCE_DIR/$patch" | $patch_command ${1+"$@"} ;; - *.gz) gunzip < "$RPM_SOURCE_DIR/$patch" | $patch_command ${1+"$@"} ;; - *.xz) unxz < "$RPM_SOURCE_DIR/$patch" | $patch_command ${1+"$@"} ;; - *) $patch_command ${1+"$@"} < "$RPM_SOURCE_DIR/$patch" ;; - esac -} - -# don't apply patch if it's empty -ApplyOptionalPatch() -{ - local patch=$1 - shift - if [ ! -f $RPM_SOURCE_DIR/$patch ]; then - exit 1 - fi - local C=$(wc -l $RPM_SOURCE_DIR/$patch | awk '{print $1}') - if [ "$C" -gt 9 ]; then - ApplyPatch $patch ${1+"$@"} - fi -} - -%setup -q -n kernel-%{tarfile_release} -c -mv linux-%{tarfile_release} linux-%{KVERREL} - -cd linux-%{KVERREL} -cp -a %{SOURCE1} . - -%if !%{nopatches} - -ApplyOptionalPatch patch-%{patchversion}-redhat.patch -%endif - -ApplyOptionalPatch linux-kernel-test.patch - -# END OF PATCH APPLICATIONS - -# Any further pre-build tree manipulations happen here. - -chmod +x scripts/checkpatch.pl -mv COPYING COPYING-%{version}-%{release} - -# This Prevents scripts/setlocalversion from mucking with our version numbers. -touch .scmversion - -# Mangle /usr/bin/python shebangs to /usr/bin/python3 -# Mangle all Python shebangs to be Python 3 explicitly -# -p preserves timestamps -# -n prevents creating ~backup files -# -i specifies the interpreter for the shebang -# This fixes errors such as -# *** ERROR: ambiguous python shebang in /usr/bin/kvm_stat: #!/usr/bin/python. Change it to python3 (or python2) explicitly. -# We patch all sources below for which we got a report/error. -pathfix.py -i "%{__python3} %{py3_shbang_opts}" -p -n \ - tools/kvm/kvm_stat/kvm_stat \ - scripts/show_delta \ - scripts/diffconfig \ - scripts/bloat-o-meter \ - scripts/jobserver-exec \ - tools \ - Documentation \ - scripts/clang-tools - -# only deal with configs if we are going to build for the arch -%ifnarch %nobuildarches - -if [ -L configs ]; then - rm -f configs -fi -mkdir configs -cd configs - -# Drop some necessary files from the source dir into the buildroot -cp $RPM_SOURCE_DIR/kernel-*.config . -cp %{SOURCE80} . -# merge.pl -cp %{SOURCE3000} . -# kernel-local -cp %{SOURCE3001} . -FLAVOR=%{primary_target} SPECVERSION=%{version} ./generate_all_configs.sh %{debugbuildsenabled} - -# Merge in any user-provided local config option changes -%ifnarch %nobuildarches -for i in %{all_arch_configs} -do - mv $i $i.tmp - ./merge.pl %{SOURCE3001} $i.tmp > $i -%if %{with_gcov} - echo "Merging with gcov options" - cat %{SOURCE75} - mv $i $i.tmp - ./merge.pl %{SOURCE75} $i.tmp > $i -%endif - rm $i.tmp -done -%endif - -%if %{with clang_lto} -for i in *aarch64*.config *x86_64*.config; do - sed -i 's/# CONFIG_LTO_CLANG_THIN is not set/CONFIG_LTO_CLANG_THIN=y/' $i - sed -i 's/CONFIG_LTO_NONE=y/# CONFIG_LTO_NONE is not set/' $i -done -%endif - -# Add DUP and kpatch certificates to system trusted keys for RHEL -%if 0%{?rhel} -%if %{signkernel}%{signmodules} -openssl x509 -inform der -in %{SOURCE100} -out rheldup3.pem -openssl x509 -inform der -in %{SOURCE101} -out rhelkpatch1.pem -cat rheldup3.pem rhelkpatch1.pem > ../certs/rhel.pem -%ifarch s390x ppc64le -openssl x509 -inform der -in %{secureboot_ca_0} -out secureboot.pem -cat secureboot.pem >> ../certs/rhel.pem -%endif -for i in *.config; do - sed -i 's@CONFIG_SYSTEM_TRUSTED_KEYS=""@CONFIG_SYSTEM_TRUSTED_KEYS="certs/rhel.pem"@' $i -done -%endif -%endif - -cp %{SOURCE81} . -OPTS="" -%if %{with_configchecks} - OPTS="$OPTS -w -n -c" -%endif -%if %{with clang_lto} -for opt in %{clang_make_opts}; do - OPTS="$OPTS -m $opt" -done -%endif -RHJOBS=$RPM_BUILD_NCPUS PACKAGE_NAME=kernel ./process_configs.sh $OPTS ${specversion} - -cp %{SOURCE82} . -RPM_SOURCE_DIR=$RPM_SOURCE_DIR ./update_scripts.sh %{primary_target} - -# We may want to override files from the primary target in case of building -# against a flavour of it (eg. centos not rhel), thus override it here if -# necessary -if [ "%{primary_target}" == "rhel" ]; then -%if 0%{?centos} - echo "Updating scripts/sources to centos version" - RPM_SOURCE_DIR=$RPM_SOURCE_DIR ./update_scripts.sh centos -%else - echo "Not updating scripts/sources to centos version" -%endif -fi - -# end of kernel config -%endif - -cd .. -# # End of Configs stuff - -# get rid of unwanted files resulting from patch fuzz -find . \( -name "*.orig" -o -name "*~" \) -delete >/dev/null - -# remove unnecessary SCM files -find . -name .gitignore -delete >/dev/null - -cd .. - -### -### build -### -%build - -%if %{with_sparse} -%define sparse_mflags C=1 -%endif - -cp_vmlinux() -{ - eu-strip --remove-comment -o "$2" "$1" -} - -# Note we need to disable these flags for cross builds because the flags -# from redhat-rpm-config assume that host == target so target arch -# flags cause issues with the host compiler. -%if !%{with_cross} -%define build_hostcflags %{?build_cflags} -%define build_hostldflags %{?build_ldflags} -%endif - -%define make %{__make} %{?cross_opts} %{?make_opts} HOSTCFLAGS="%{?build_hostcflags}" HOSTLDFLAGS="%{?build_hostldflags}" - -InitBuildVars() { - # Initialize the kernel .config file and create some variables that are - # needed for the actual build process. - - Variant=$1 - - # Pick the right kernel config file - Config=kernel-%{version}-%{_target_cpu}${Variant:+-${Variant}}.config - DevelDir=/usr/src/kernels/%{KVERREL}${Variant:++${Variant}} - - KernelVer=%{version}-%{release}.%{_target_cpu}${Variant:++${Variant}} - - # make sure EXTRAVERSION says what we want it to say - # Trim the release if this is a CI build, since KERNELVERSION is limited to 64 characters - ShortRel=$(perl -e "print \"%{release}\" =~ s/\.pr\.[0-9A-Fa-f]{32}//r") - perl -p -i -e "s/^EXTRAVERSION.*/EXTRAVERSION = -${ShortRel}.%{_target_cpu}${Variant:++${Variant}}/" Makefile - - # if pre-rc1 devel kernel, must fix up PATCHLEVEL for our versioning scheme - # if we are post rc1 this should match anyway so this won't matter - perl -p -i -e 's/^PATCHLEVEL.*/PATCHLEVEL = %{patchlevel}/' Makefile - - %{make} %{?_smp_mflags} mrproper - cp configs/$Config .config - - %if %{signkernel}%{signmodules} - cp configs/x509.genkey certs/. - %endif - - Arch=`head -1 .config | cut -b 3-` - echo USING ARCH=$Arch - - KCFLAGS="%{?kcflags}" - - # add kpatch flags for base kernel - if [ "$Variant" == "" ]; then - KCFLAGS="$KCFLAGS %{?kpatch_kcflags}" - fi -} - -BuildKernel() { - MakeTarget=$1 - KernelImage=$2 - DoVDSO=$3 - Variant=$4 - InstallName=${5:-vmlinuz} - - DoModules=1 - if [ "$Variant" = "zfcpdump" ]; then - DoModules=0 - fi - - # When the bootable image is just the ELF kernel, strip it. - # We already copy the unstripped file into the debuginfo package. - if [ "$KernelImage" = vmlinux ]; then - CopyKernel=cp_vmlinux - else - CopyKernel=cp - fi - - InitBuildVars $Variant - - echo BUILDING A KERNEL FOR ${Variant} %{_target_cpu}... - - %{make} ARCH=$Arch olddefconfig >/dev/null - - # This ensures build-ids are unique to allow parallel debuginfo - perl -p -i -e "s/^CONFIG_BUILD_SALT.*/CONFIG_BUILD_SALT=\"%{KVERREL}\"/" .config - %{make} ARCH=$Arch KCFLAGS="$KCFLAGS" WITH_GCOV="%{?with_gcov}" %{?_smp_mflags} $MakeTarget %{?sparse_mflags} %{?kernel_mflags} - if [ $DoModules -eq 1 ]; then - %{make} ARCH=$Arch KCFLAGS="$KCFLAGS" WITH_GCOV="%{?with_gcov}" %{?_smp_mflags} modules %{?sparse_mflags} || exit 1 - fi - - mkdir -p $RPM_BUILD_ROOT/%{image_install_path} - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/systemtap -%if %{with_debuginfo} - mkdir -p $RPM_BUILD_ROOT%{debuginfodir}/%{image_install_path} -%endif - -%ifarch %{arm} aarch64 - %{make} ARCH=$Arch dtbs INSTALL_DTBS_PATH=$RPM_BUILD_ROOT/%{image_install_path}/dtb-$KernelVer - %{make} ARCH=$Arch dtbs_install INSTALL_DTBS_PATH=$RPM_BUILD_ROOT/%{image_install_path}/dtb-$KernelVer - cp -r $RPM_BUILD_ROOT/%{image_install_path}/dtb-$KernelVer $RPM_BUILD_ROOT/lib/modules/$KernelVer/dtb - find arch/$Arch/boot/dts -name '*.dtb' -type f -delete -%endif - - # Start installing the results - install -m 644 .config $RPM_BUILD_ROOT/boot/config-$KernelVer - install -m 644 .config $RPM_BUILD_ROOT/lib/modules/$KernelVer/config - install -m 644 System.map $RPM_BUILD_ROOT/boot/System.map-$KernelVer - install -m 644 System.map $RPM_BUILD_ROOT/lib/modules/$KernelVer/System.map - - # We estimate the size of the initramfs because rpm needs to take this size - # into consideration when performing disk space calculations. (See bz #530778) - dd if=/dev/zero of=$RPM_BUILD_ROOT/boot/initramfs-$KernelVer.img bs=1M count=20 - - if [ -f arch/$Arch/boot/zImage.stub ]; then - cp arch/$Arch/boot/zImage.stub $RPM_BUILD_ROOT/%{image_install_path}/zImage.stub-$KernelVer || : - cp arch/$Arch/boot/zImage.stub $RPM_BUILD_ROOT/lib/modules/$KernelVer/zImage.stub-$KernelVer || : - fi - - %if %{signkernel} - if [ "$KernelImage" = vmlinux ]; then - # We can't strip and sign $KernelImage in place, because - # we need to preserve original vmlinux for debuginfo. - # Use a copy for signing. - $CopyKernel $KernelImage $KernelImage.tosign - KernelImage=$KernelImage.tosign - CopyKernel=cp - fi - - # Sign the image if we're using EFI - # aarch64 kernels are gziped EFI images - KernelExtension=${KernelImage##*.} - if [ "$KernelExtension" == "gz" ]; then - SignImage=${KernelImage%.*} - else - SignImage=$KernelImage - fi - - %ifarch x86_64 aarch64 - %pesign -s -i $SignImage -o vmlinuz.tmp -a %{secureboot_ca_0} -c %{secureboot_key_0} -n %{pesign_name_0} - %pesign -s -i vmlinuz.tmp -o vmlinuz.signed -a %{secureboot_ca_1} -c %{secureboot_key_1} -n %{pesign_name_1} - rm vmlinuz.tmp - %endif - %ifarch s390x ppc64le - if [ -x /usr/bin/rpm-sign ]; then - rpm-sign --key "%{pesign_name_0}" --lkmsign $SignImage --output vmlinuz.signed - elif [ $DoModules -eq 1 ]; then - chmod +x scripts/sign-file - ./scripts/sign-file -p sha256 certs/signing_key.pem certs/signing_key.x509 $SignImage vmlinuz.signed - else - mv $SignImage vmlinuz.signed - fi - %endif - - if [ ! -s vmlinuz.signed ]; then - echo "pesigning failed" - exit 1 - fi - mv vmlinuz.signed $SignImage - if [ "$KernelExtension" == "gz" ]; then - gzip -f9 $SignImage - fi - # signkernel - %endif - - $CopyKernel $KernelImage \ - $RPM_BUILD_ROOT/%{image_install_path}/$InstallName-$KernelVer - chmod 755 $RPM_BUILD_ROOT/%{image_install_path}/$InstallName-$KernelVer - cp $RPM_BUILD_ROOT/%{image_install_path}/$InstallName-$KernelVer $RPM_BUILD_ROOT/lib/modules/$KernelVer/$InstallName - - # hmac sign the kernel for FIPS - echo "Creating hmac file: $RPM_BUILD_ROOT/%{image_install_path}/.vmlinuz-$KernelVer.hmac" - ls -l $RPM_BUILD_ROOT/%{image_install_path}/$InstallName-$KernelVer - (cd $RPM_BUILD_ROOT/%{image_install_path} && sha512hmac $InstallName-$KernelVer) > $RPM_BUILD_ROOT/%{image_install_path}/.vmlinuz-$KernelVer.hmac; - cp $RPM_BUILD_ROOT/%{image_install_path}/.vmlinuz-$KernelVer.hmac $RPM_BUILD_ROOT/lib/modules/$KernelVer/.vmlinuz.hmac - - if [ $DoModules -eq 1 ]; then - # Override $(mod-fw) because we don't want it to install any firmware - # we'll get it from the linux-firmware package and we don't want conflicts - %{make} %{?_smp_mflags} ARCH=$Arch INSTALL_MOD_PATH=$RPM_BUILD_ROOT %{?_smp_mflags} modules_install KERNELRELEASE=$KernelVer mod-fw= - fi - -%if %{with_gcov} - # install gcov-needed files to $BUILDROOT/$BUILD/...: - # gcov_info->filename is absolute path - # gcno references to sources can use absolute paths (e.g. in out-of-tree builds) - # sysfs symlink targets (set up at compile time) use absolute paths to BUILD dir - find . \( -name '*.gcno' -o -name '*.[chS]' \) -exec install -D '{}' "$RPM_BUILD_ROOT/$(pwd)/{}" \; -%endif - - # add an a noop %%defattr statement 'cause rpm doesn't like empty file list files - echo '%%defattr(-,-,-)' > ../kernel${Variant:+-${Variant}}-ldsoconf.list - if [ $DoVDSO -ne 0 ]; then - %{make} ARCH=$Arch INSTALL_MOD_PATH=$RPM_BUILD_ROOT vdso_install KERNELRELEASE=$KernelVer - if [ -s ldconfig-kernel.conf ]; then - install -D -m 444 ldconfig-kernel.conf \ - $RPM_BUILD_ROOT/etc/ld.so.conf.d/kernel-$KernelVer.conf - echo /etc/ld.so.conf.d/kernel-$KernelVer.conf >> ../kernel${Variant:+-${Variant}}-ldsoconf.list - fi - - rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/vdso/.build-id - fi - - # And save the headers/makefiles etc for building modules against - # - # This all looks scary, but the end result is supposed to be: - # * all arch relevant include/ files - # * all Makefile/Kconfig files - # * all script/ files - - rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/source - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - (cd $RPM_BUILD_ROOT/lib/modules/$KernelVer ; ln -s build source) - # dirs for additional modules per module-init-tools, kbuild/modules.txt - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/updates - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/weak-updates - # CONFIG_KERNEL_HEADER_TEST generates some extra files in the process of - # testing so just delete - find . -name *.h.s -delete - # first copy everything - cp --parents `find -type f -name "Makefile*" -o -name "Kconfig*"` $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - if [ ! -e Module.symvers ]; then - touch Module.symvers - fi - cp Module.symvers $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp System.map $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - if [ -s Module.markers ]; then - cp Module.markers $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - fi - - # create the kABI metadata for use in packaging - # NOTENOTE: the name symvers is used by the rpm backend - # NOTENOTE: to discover and run the /usr/lib/rpm/fileattrs/kabi.attr - # NOTENOTE: script which dynamically adds exported kernel symbol - # NOTENOTE: checksums to the rpm metadata provides list. - # NOTENOTE: if you change the symvers name, update the backend too - echo "**** GENERATING kernel ABI metadata ****" - gzip -c9 < Module.symvers > $RPM_BUILD_ROOT/boot/symvers-$KernelVer.gz - cp $RPM_BUILD_ROOT/boot/symvers-$KernelVer.gz $RPM_BUILD_ROOT/lib/modules/$KernelVer/symvers.gz - -%if %{with_kabichk} - echo "**** kABI checking is enabled in kernel SPEC file. ****" - chmod 0755 $RPM_SOURCE_DIR/check-kabi - if [ -e $RPM_SOURCE_DIR/Module.kabi_%{_target_cpu}$Variant ]; then - cp $RPM_SOURCE_DIR/Module.kabi_%{_target_cpu}$Variant $RPM_BUILD_ROOT/Module.kabi - $RPM_SOURCE_DIR/check-kabi -k $RPM_BUILD_ROOT/Module.kabi -s Module.symvers || exit 1 - # for now, don't keep it around. - rm $RPM_BUILD_ROOT/Module.kabi - else - echo "**** NOTE: Cannot find reference Module.kabi file. ****" - fi -%endif - -%if %{with_kabidupchk} - echo "**** kABI DUP checking is enabled in kernel SPEC file. ****" - if [ -e $RPM_SOURCE_DIR/Module.kabi_dup_%{_target_cpu}$Variant ]; then - cp $RPM_SOURCE_DIR/Module.kabi_dup_%{_target_cpu}$Variant $RPM_BUILD_ROOT/Module.kabi - $RPM_SOURCE_DIR/check-kabi -k $RPM_BUILD_ROOT/Module.kabi -s Module.symvers || exit 1 - # for now, don't keep it around. - rm $RPM_BUILD_ROOT/Module.kabi - else - echo "**** NOTE: Cannot find DUP reference Module.kabi file. ****" - fi -%endif - -%if %{with_kabidw_base} - # Don't build kabi base for debug kernels - if [ "$Variant" != "zfcpdump" -a "$Variant" != "debug" ]; then - mkdir -p $RPM_BUILD_ROOT/kabi-dwarf - tar xjvf %{SOURCE301} -C $RPM_BUILD_ROOT/kabi-dwarf - - mkdir -p $RPM_BUILD_ROOT/kabi-dwarf/stablelists - tar xjvf %{SOURCE300} -C $RPM_BUILD_ROOT/kabi-dwarf/stablelists - - echo "**** GENERATING DWARF-based kABI baseline dataset ****" - chmod 0755 $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh - $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh generate \ - "$RPM_BUILD_ROOT/kabi-dwarf/stablelists/kabi-current/kabi_stablelist_%{_target_cpu}" \ - "$(pwd)" \ - "$RPM_BUILD_ROOT/kabidw-base/%{_target_cpu}${Variant:+.${Variant}}" || : - - rm -rf $RPM_BUILD_ROOT/kabi-dwarf - fi -%endif - -%if %{with_kabidwchk} - if [ "$Variant" != "zfcpdump" ]; then - mkdir -p $RPM_BUILD_ROOT/kabi-dwarf - tar xjvf %{SOURCE301} -C $RPM_BUILD_ROOT/kabi-dwarf - if [ -d "$RPM_BUILD_ROOT/kabi-dwarf/base/%{_target_cpu}${Variant:+.${Variant}}" ]; then - mkdir -p $RPM_BUILD_ROOT/kabi-dwarf/stablelists - tar xjvf %{SOURCE300} -C $RPM_BUILD_ROOT/kabi-dwarf/stablelists - - echo "**** GENERATING DWARF-based kABI dataset ****" - chmod 0755 $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh - $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh generate \ - "$RPM_BUILD_ROOT/kabi-dwarf/stablelists/kabi-current/kabi_stablelist_%{_target_cpu}" \ - "$(pwd)" \ - "$RPM_BUILD_ROOT/kabi-dwarf/base/%{_target_cpu}${Variant:+.${Variant}}.tmp" || : - - echo "**** kABI DWARF-based comparison report ****" - $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh compare \ - "$RPM_BUILD_ROOT/kabi-dwarf/base/%{_target_cpu}${Variant:+.${Variant}}" \ - "$RPM_BUILD_ROOT/kabi-dwarf/base/%{_target_cpu}${Variant:+.${Variant}}.tmp" || : - echo "**** End of kABI DWARF-based comparison report ****" - else - echo "**** Baseline dataset for kABI DWARF-BASED comparison report not found ****" - fi - - rm -rf $RPM_BUILD_ROOT/kabi-dwarf - fi -%endif - - # then drop all but the needed Makefiles/Kconfig files - rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts - rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include - cp .config $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a scripts $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts/tracing - rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts/spdxcheck.py - -%ifarch s390x - # CONFIG_EXPOLINE_EXTERN=y produces arch/s390/lib/expoline.o - # which is needed during external module build. - if [ -f arch/s390/lib/expoline.o ]; then - cp -a --parents arch/s390/lib/expoline.o $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - fi -%endif - - # Files for 'make scripts' to succeed with kernel-devel. - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/security/selinux/include - cp -a --parents security/selinux/include/classmap.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents security/selinux/include/initial_sid_to_string.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/tools/include/tools - cp -a --parents tools/include/tools/be_byteshift.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/tools/le_byteshift.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - - # Files for 'make prepare' to succeed with kernel-devel. - cp -a --parents tools/include/linux/compiler* $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/linux/types.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/build/Build.include $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/build/Build $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/build/fixdep.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/objtool/sync-check.sh $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/bpf/resolve_btfids $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - - cp --parents security/selinux/include/policycap_names.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents security/selinux/include/policycap.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - - cp -a --parents tools/include/asm-generic $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/linux $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/uapi/asm $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/uapi/asm-generic $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/uapi/linux $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/vdso $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/scripts/utilities.mak $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/lib/subcmd $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/lib/*.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/objtool/*.[ch] $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/objtool/Build $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/objtool/include/objtool/*.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/lib/bpf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/lib/bpf/Build $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - - if [ -f tools/objtool/objtool ]; then - cp -a tools/objtool/objtool $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/tools/objtool/ || : - fi - if [ -f tools/objtool/fixdep ]; then - cp -a tools/objtool/fixdep $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/tools/objtool/ || : - fi - if [ -d arch/$Arch/scripts ]; then - cp -a arch/$Arch/scripts $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/arch/%{_arch} || : - fi - if [ -f arch/$Arch/*lds ]; then - cp -a arch/$Arch/*lds $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/arch/%{_arch}/ || : - fi - if [ -f arch/%{asmarch}/kernel/module.lds ]; then - cp -a --parents arch/%{asmarch}/kernel/module.lds $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - fi - find $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts \( -iname "*.o" -o -iname "*.cmd" \) -exec rm -f {} + -%ifarch ppc64le - cp -a --parents arch/powerpc/lib/crtsavres.[So] $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ -%endif - if [ -d arch/%{asmarch}/include ]; then - cp -a --parents arch/%{asmarch}/include $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - fi -%ifarch aarch64 - # arch/arm64/include/asm/xen references arch/arm - cp -a --parents arch/arm/include/asm/xen $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - # arch/arm64/include/asm/opcodes.h references arch/arm - cp -a --parents arch/arm/include/asm/opcodes.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ -%endif - # include the machine specific headers for ARM variants, if available. -%ifarch %{arm} - if [ -d arch/%{asmarch}/mach-${Variant}/include ]; then - cp -a --parents arch/%{asmarch}/mach-${Variant}/include $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - fi - # include a few files for 'make prepare' - cp -a --parents arch/arm/tools/gen-mach-types $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/arm/tools/mach-types $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - -%endif - cp -a include $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include -%ifarch i686 x86_64 - # files for 'make prepare' to succeed with kernel-devel - cp -a --parents arch/x86/entry/syscalls/syscall_32.tbl $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/entry/syscalls/syscall_64.tbl $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs_32.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs_64.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs_common.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/purgatory/purgatory.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/purgatory/stack.S $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/purgatory/setup-x86_64.S $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/purgatory/entry64.S $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/boot/string.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/boot/string.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/boot/ctype.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - - cp -a --parents scripts/syscalltbl.sh $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents scripts/syscallhdr.sh $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - - cp -a --parents tools/arch/x86/include/asm $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/arch/x86/include/uapi/asm $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/objtool/arch/x86/lib $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/arch/x86/lib/ $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/arch/x86/tools/gen-insn-attr-x86.awk $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/objtool/arch/x86/ $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - -%endif - # Clean up intermediate tools files - find $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/tools \( -iname "*.o" -o -iname "*.cmd" \) -exec rm -f {} + - - # Make sure the Makefile, version.h, and auto.conf have a matching - # timestamp so that external modules can be built - touch -r $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/Makefile \ - $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include/generated/uapi/linux/version.h \ - $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include/config/auto.conf - -%if %{with_debuginfo} - eu-readelf -n vmlinux | grep "Build ID" | awk '{print $NF}' > vmlinux.id - cp vmlinux.id $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/vmlinux.id - - # - # save the vmlinux file for kernel debugging into the kernel-debuginfo rpm - # - mkdir -p $RPM_BUILD_ROOT%{debuginfodir}/lib/modules/$KernelVer - cp vmlinux $RPM_BUILD_ROOT%{debuginfodir}/lib/modules/$KernelVer - if [ -n "%{vmlinux_decompressor}" ]; then - eu-readelf -n %{vmlinux_decompressor} | grep "Build ID" | awk '{print $NF}' > vmlinux.decompressor.id - # Without build-id the build will fail. But for s390 the build-id - # wasn't added before 5.11. In case it is missing prefer not - # packaging the debuginfo over a build failure. - if [ -s vmlinux.decompressor.id ]; then - cp vmlinux.decompressor.id $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/vmlinux.decompressor.id - cp %{vmlinux_decompressor} $RPM_BUILD_ROOT%{debuginfodir}/lib/modules/$KernelVer/vmlinux.decompressor - fi - fi -%endif - - find $RPM_BUILD_ROOT/lib/modules/$KernelVer -name "*.ko" -type f >modnames - - # mark modules executable so that strip-to-file can strip them - xargs --no-run-if-empty chmod u+x < modnames - - # Generate a list of modules for block and networking. - - grep -F /drivers/ modnames | xargs --no-run-if-empty nm -upA | - sed -n 's,^.*/\([^/]*\.ko\): *U \(.*\)$,\1 \2,p' > drivers.undef - - collect_modules_list() - { - sed -r -n -e "s/^([^ ]+) \\.?($2)\$/\\1/p" drivers.undef | - LC_ALL=C sort -u > $RPM_BUILD_ROOT/lib/modules/$KernelVer/modules.$1 - if [ ! -z "$3" ]; then - sed -r -e "/^($3)\$/d" -i $RPM_BUILD_ROOT/lib/modules/$KernelVer/modules.$1 - fi - } - - collect_modules_list networking \ - 'register_netdev|ieee80211_register_hw|usbnet_probe|phy_driver_register|rt(l_|2x00)(pci|usb)_probe|register_netdevice' - collect_modules_list block \ - 'ata_scsi_ioctl|scsi_add_host|scsi_add_host_with_dma|blk_alloc_queue|blk_init_queue|register_mtd_blktrans|scsi_esp_register|scsi_register_device_handler|blk_queue_physical_block_size' 'pktcdvd.ko|dm-mod.ko' - collect_modules_list drm \ - 'drm_open|drm_init' - collect_modules_list modesetting \ - 'drm_crtc_init' - - # detect missing or incorrect license tags - ( find $RPM_BUILD_ROOT/lib/modules/$KernelVer -name '*.ko' | xargs /sbin/modinfo -l | \ - grep -E -v 'GPL( v2)?$|Dual BSD/GPL$|Dual MPL/GPL$|GPL and additional rights$' ) && exit 1 - - remove_depmod_files() - { - # remove files that will be auto generated by depmod at rpm -i time - pushd $RPM_BUILD_ROOT/lib/modules/$KernelVer/ - rm -f modules.{alias,alias.bin,builtin.alias.bin,builtin.bin} \ - modules.{dep,dep.bin,devname,softdep,symbols,symbols.bin} - popd - } - - remove_depmod_files - - # Identify modules in the kernel-modules-extras package - %{SOURCE20} $RPM_BUILD_ROOT lib/modules/$KernelVer $(realpath configs/mod-extra.list) - # Identify modules in the kernel-modules-extras package - %{SOURCE20} $RPM_BUILD_ROOT lib/modules/$KernelVer %{SOURCE84} internal - - # - # Generate the kernel-core and kernel-modules files lists - # - - # Copy the System.map file for depmod to use, and create a backup of the - # full module tree so we can restore it after we're done filtering - cp System.map $RPM_BUILD_ROOT/. - cp configs/filter-*.sh $RPM_BUILD_ROOT/. - pushd $RPM_BUILD_ROOT - mkdir restore - cp -r lib/modules/$KernelVer/* restore/. - - # don't include anything going into kernel-modules-extra in the file lists - xargs rm -rf < mod-extra.list - # don't include anything going int kernel-modules-internal in the file lists - xargs rm -rf < mod-internal.list - - if [ $DoModules -eq 1 ]; then - # Find all the module files and filter them out into the core and - # modules lists. This actually removes anything going into -modules - # from the dir. - find lib/modules/$KernelVer/kernel -name *.ko | sort -n > modules.list - ./filter-modules.sh modules.list %{_target_cpu} - rm filter-*.sh - - # Run depmod on the resulting module tree and make sure it isn't broken - depmod -b . -aeF ./System.map $KernelVer &> depmod.out - if [ -s depmod.out ]; then - echo "Depmod failure" - cat depmod.out - exit 1 - else - rm depmod.out - fi - else - # Ensure important files/directories exist to let the packaging succeed - echo '%%defattr(-,-,-)' > modules.list - echo '%%defattr(-,-,-)' > k-d.list - mkdir -p lib/modules/$KernelVer/kernel - # Add files usually created by make modules, needed to prevent errors - # thrown by depmod during package installation - touch lib/modules/$KernelVer/modules.order - touch lib/modules/$KernelVer/modules.builtin - fi - - remove_depmod_files - - # Go back and find all of the various directories in the tree. We use this - # for the dir lists in kernel-core - find lib/modules/$KernelVer/kernel -mindepth 1 -type d | sort -n > module-dirs.list - - # Cleanup - rm System.map - # Just "cp -r" can be very slow: here, it rewrites _existing files_ - # with open(O_TRUNC). Many filesystems synchronously wait for metadata - # update for such file rewrites (seen in strace as final close syscall - # taking a long time). On a rotational disk, cp was observed to take - # more than 5 minutes on ext4 and more than 15 minutes (!) on xfs. - # With --remove-destination, we avoid this, and copying - # (with enough RAM to cache it) takes 5 seconds: - cp -r --remove-destination restore/* lib/modules/$KernelVer/. - rm -rf restore - popd - - # Make sure the files lists start with absolute paths or rpmbuild fails. - # Also add in the dir entries - sed -e 's/^lib*/\/lib/' %{?zipsed} $RPM_BUILD_ROOT/k-d.list > ../kernel${Variant:+-${Variant}}-modules.list - sed -e 's/^lib*/%dir \/lib/' %{?zipsed} $RPM_BUILD_ROOT/module-dirs.list > ../kernel${Variant:+-${Variant}}-core.list - sed -e 's/^lib*/\/lib/' %{?zipsed} $RPM_BUILD_ROOT/modules.list >> ../kernel${Variant:+-${Variant}}-core.list - sed -e 's/^lib*/\/lib/' %{?zipsed} $RPM_BUILD_ROOT/mod-extra.list >> ../kernel${Variant:+-${Variant}}-modules-extra.list - sed -e 's/^lib*/\/lib/' %{?zipsed} $RPM_BUILD_ROOT/mod-internal.list >> ../kernel${Variant:+-${Variant}}-modules-internal.list - - # Cleanup - rm -f $RPM_BUILD_ROOT/k-d.list - rm -f $RPM_BUILD_ROOT/modules.list - rm -f $RPM_BUILD_ROOT/module-dirs.list - rm -f $RPM_BUILD_ROOT/mod-extra.list - rm -f $RPM_BUILD_ROOT/mod-internal.list - -%if %{signmodules} - if [ $DoModules -eq 1 ]; then - # Save the signing keys so we can sign the modules in __modsign_install_post - cp certs/signing_key.pem certs/signing_key.pem.sign${Variant:++${Variant}} - cp certs/signing_key.x509 certs/signing_key.x509.sign${Variant:++${Variant}} - fi -%endif - - # Move the devel headers out of the root file system - mkdir -p $RPM_BUILD_ROOT/usr/src/kernels - mv $RPM_BUILD_ROOT/lib/modules/$KernelVer/build $RPM_BUILD_ROOT/$DevelDir - - # This is going to create a broken link during the build, but we don't use - # it after this point. We need the link to actually point to something - # when kernel-devel is installed, and a relative link doesn't work across - # the F17 UsrMove feature. - ln -sf $DevelDir $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - -%ifnarch armv7hl - # Generate vmlinux.h and put it to kernel-devel path - bpftool btf dump file vmlinux format c > $RPM_BUILD_ROOT/$DevelDir/vmlinux.h -%endif - - # prune junk from kernel-devel - find $RPM_BUILD_ROOT/usr/src/kernels -name ".*.cmd" -delete - - # Red Hat UEFI Secure Boot CA cert, which can be used to authenticate the kernel - mkdir -p $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer - %ifarch x86_64 aarch64 - install -m 0644 %{secureboot_ca_0} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca-20200609.cer - install -m 0644 %{secureboot_ca_1} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca-20140212.cer - ln -s kernel-signing-ca-20200609.cer $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca.cer - %else - install -m 0644 %{secureboot_ca_0} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca.cer - %endif - %ifarch s390x ppc64le - if [ $DoModules -eq 1 ]; then - if [ -x /usr/bin/rpm-sign ]; then - install -m 0644 %{secureboot_key_0} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/%{signing_key_filename} - else - install -m 0644 certs/signing_key.x509.sign${Variant:++${Variant}} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca.cer - openssl x509 -in certs/signing_key.pem.sign${Variant:++${Variant}} -outform der -out $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/%{signing_key_filename} - chmod 0644 $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/%{signing_key_filename} - fi - fi - %endif - -%if %{with_ipaclones} - MAXPROCS=$(echo %{?_smp_mflags} | sed -n 's/-j\s*\([0-9]\+\)/\1/p') - if [ -z "$MAXPROCS" ]; then - MAXPROCS=1 - fi - if [ "$Variant" == "" ]; then - mkdir -p $RPM_BUILD_ROOT/$DevelDir-ipaclones - find . -name '*.ipa-clones' | xargs -i{} -r -n 1 -P $MAXPROCS install -m 644 -D "{}" "$RPM_BUILD_ROOT/$DevelDir-ipaclones/{}" - fi -%endif - -} - -### -# DO it... -### - -# prepare directories -rm -rf $RPM_BUILD_ROOT -mkdir -p $RPM_BUILD_ROOT/boot -mkdir -p $RPM_BUILD_ROOT%{_libexecdir} - -cd linux-%{KVERREL} - - -%if %{with_debug} -BuildKernel %make_target %kernel_image %{_use_vdso} debug -%endif - -%if %{with_zfcpdump} -BuildKernel %make_target %kernel_image %{_use_vdso} zfcpdump -%endif - -%if %{with_pae} -BuildKernel %make_target %kernel_image %{use_vdso} lpae -%endif - -%if %{with_up} -BuildKernel %make_target %kernel_image %{_use_vdso} -%endif - -%ifnarch noarch i686 -%if !%{with_debug} && !%{with_zfcpdump} && !%{with_pae} && !%{with_up} -# If only building the user space tools, then initialize the build environment -# and some variables so that the various userspace tools can be built. -InitBuildVars -%endif -%endif - -%ifarch aarch64 -%global perf_build_extra_opts CORESIGHT=1 -%endif -%global perf_make \ - %{__make} %{?make_opts} EXTRA_CFLAGS="${RPM_OPT_FLAGS}" LDFLAGS="%{__global_ldflags}" %{?cross_opts} -C tools/perf V=1 NO_PERF_READ_VDSO32=1 NO_PERF_READ_VDSOX32=1 WERROR=0 NO_LIBUNWIND=1 HAVE_CPLUS_DEMANGLE=1 NO_GTK2=1 NO_STRLCPY=1 NO_BIONIC=1 LIBBPF_DYNAMIC=1 LIBTRACEEVENT_DYNAMIC=1 %{?perf_build_extra_opts} prefix=%{_prefix} PYTHON=%{__python3} -%if %{with_perf} -# perf -# make sure check-headers.sh is executable -chmod +x tools/perf/check-headers.sh -%{perf_make} DESTDIR=$RPM_BUILD_ROOT all -%endif - -%global tools_make \ - CFLAGS="${RPM_OPT_FLAGS}" LDFLAGS="%{__global_ldflags}" %{make} %{?make_opts} - -%if %{with_tools} -%ifarch %{cpupowerarchs} -# cpupower -# make sure version-gen.sh is executable. -chmod +x tools/power/cpupower/utils/version-gen.sh -%{tools_make} %{?_smp_mflags} -C tools/power/cpupower CPUFREQ_BENCH=false DEBUG=false -%ifarch x86_64 - pushd tools/power/cpupower/debug/x86_64 - %{tools_make} %{?_smp_mflags} centrino-decode powernow-k8-decode - popd -%endif -%ifarch x86_64 - pushd tools/power/x86/x86_energy_perf_policy/ - %{tools_make} - popd - pushd tools/power/x86/turbostat - %{tools_make} - popd - pushd tools/power/x86/intel-speed-select - %{tools_make} - popd - pushd tools/arch/x86/intel_sdsi - %{tools_make} CFLAGS="${RPM_OPT_FLAGS}" - popd -%endif -%endif -pushd tools/thermal/tmon/ -%{tools_make} -popd -pushd tools/iio/ -%{tools_make} -popd -pushd tools/gpio/ -%{tools_make} -popd -# build VM tools -pushd tools/vm/ -%{tools_make} slabinfo page_owner_sort -popd -%endif - -if [ -f $DevelDir/vmlinux.h ]; then - RPM_VMLINUX_H=$DevelDir/vmlinux.h -fi - -%global bpftool_make \ - %{__make} EXTRA_CFLAGS="${RPM_OPT_FLAGS}" EXTRA_LDFLAGS="%{__global_ldflags}" DESTDIR=$RPM_BUILD_ROOT %{?make_opts} VMLINUX_H="${RPM_VMLINUX_H}" V=1 -%if %{with_bpftool} -pushd tools/bpf/bpftool -%{bpftool_make} -popd -%endif - -%if %{with_selftests} -# Unfortunately, samples/bpf/Makefile expects that the headers are installed -# in the source tree. We installed them previously to $RPM_BUILD_ROOT/usr -# but there's no way to tell the Makefile to take them from there. -%{make} %{?_smp_mflags} headers_install -%{make} %{?_smp_mflags} ARCH=$Arch V=1 M=samples/bpf/ || true - -# Prevent bpf selftests to build bpftool repeatedly: -export BPFTOOL=$(pwd)/tools/bpf/bpftool/bpftool - -pushd tools/testing/selftests -# We need to install here because we need to call make with ARCH set which -# doesn't seem possible to do in the install section. -%{make} %{?_smp_mflags} ARCH=$Arch V=1 TARGETS="bpf vm livepatch net net/forwarding net/mptcp netfilter tc-testing" SKIP_TARGETS="" INSTALL_PATH=%{buildroot}%{_libexecdir}/kselftests VMLINUX_H="${RPM_VMLINUX_H}" install - -# 'make install' for bpf is broken and upstream refuses to fix it. -# Install the needed files manually. -for dir in bpf bpf/no_alu32 bpf/progs; do - # In ARK, the rpm build continues even if some of the selftests - # cannot be built. It's not always possible to build selftests, - # as upstream sometimes dependens on too new llvm version or has - # other issues. If something did not get built, just skip it. - test -d $dir || continue - mkdir -p %{buildroot}%{_libexecdir}/kselftests/$dir - find $dir -maxdepth 1 -type f \( -executable -o -name '*.py' -o -name settings -o \ - -name 'btf_dump_test_case_*.c' -o -name '*.ko' -o \ - -name '*.o' -exec sh -c 'readelf -h "{}" | grep -q "^ Machine:.*BPF"' \; \) -print0 | \ - xargs -0 cp -t %{buildroot}%{_libexecdir}/kselftests/$dir || true -done -popd -export -n BPFTOOL -%endif - -%if %{with_doc} -# Make the HTML pages. -%{__make} PYTHON=/usr/bin/python3 htmldocs || %{doc_build_fail} - -# sometimes non-world-readable files sneak into the kernel source tree -chmod -R a=rX Documentation -find Documentation -type d | xargs chmod u+w -%endif - -# In the modsign case, we do 3 things. 1) We check the "variant" and hard -# code the value in the following invocations. This is somewhat sub-optimal -# but we're doing this inside of an RPM macro and it isn't as easy as it -# could be because of that. 2) We restore the .tmp_versions/ directory from -# the one we saved off in BuildKernel above. This is to make sure we're -# signing the modules we actually built/installed in that variant. 3) We -# grab the arch and invoke mod-sign.sh command to actually sign the modules. -# -# We have to do all of those things _after_ find-debuginfo runs, otherwise -# that will strip the signature off of the modules. -# -# Don't sign modules for the zfcpdump variant as it is monolithic. - -%define __modsign_install_post \ - if [ "%{signmodules}" -eq "1" ]; then \ - if [ "%{with_pae}" -ne "0" ]; then \ - %{modsign_cmd} certs/signing_key.pem.sign+lpae certs/signing_key.x509.sign+lpae $RPM_BUILD_ROOT/lib/modules/%{KVERREL}+lpae/ \ - fi \ - if [ "%{with_debug}" -ne "0" ]; then \ - %{modsign_cmd} certs/signing_key.pem.sign+debug certs/signing_key.x509.sign+debug $RPM_BUILD_ROOT/lib/modules/%{KVERREL}+debug/ \ - fi \ - if [ "%{with_up}" -ne "0" ]; then \ - %{modsign_cmd} certs/signing_key.pem.sign certs/signing_key.x509.sign $RPM_BUILD_ROOT/lib/modules/%{KVERREL}/ \ - fi \ - fi \ - if [ "%{zipmodules}" -eq "1" ]; then \ - find $RPM_BUILD_ROOT/lib/modules/ -type f -name '*.ko' | xargs -P${RPM_BUILD_NCPUS} -r xz; \ - fi \ -%{nil} - -### -### Special hacks for debuginfo subpackages. -### - -# This macro is used by %%install, so we must redefine it before that. -%define debug_package %{nil} - -%if %{with_debuginfo} - -%ifnarch noarch -%global __debug_package 1 -%files -f debugfiles.list debuginfo-common-%{_target_cpu} -%endif - -%endif - -# We don't want to package debuginfo for self-tests and samples but -# we have to delete them to avoid an error messages about unpackaged -# files. -# Delete the debuginfo for kernel-devel files -%define __remove_unwanted_dbginfo_install_post \ - if [ "%{with_selftests}" -ne "0" ]; then \ - rm -rf $RPM_BUILD_ROOT/usr/lib/debug/usr/libexec/ksamples; \ - rm -rf $RPM_BUILD_ROOT/usr/lib/debug/usr/libexec/kselftests; \ - fi \ - rm -rf $RPM_BUILD_ROOT/usr/lib/debug/usr/src; \ -%{nil} - -# -# Disgusting hack alert! We need to ensure we sign modules *after* all -# invocations of strip occur, which is in __debug_install_post if -# find-debuginfo.sh runs, and __os_install_post if not. -# -%define __spec_install_post \ - %{?__debug_package:%{__debug_install_post}}\ - %{__arch_install_post}\ - %{__os_install_post}\ - %{__remove_unwanted_dbginfo_install_post}\ - %{__modsign_install_post} - -### -### install -### - -%install - -cd linux-%{KVERREL} - -%if %{with_doc} -docdir=$RPM_BUILD_ROOT%{_datadir}/doc/kernel-doc-%{specversion}-%{pkgrelease} - -# copy the source over -mkdir -p $docdir -tar -h -f - --exclude=man --exclude='.*' -c Documentation | tar xf - -C $docdir - -# with_doc -%endif - -# We have to do the headers install before the tools install because the -# kernel headers_install will remove any header files in /usr/include that -# it doesn't install itself. - -%if %{with_headers} -# Install kernel headers -%{__make} ARCH=%{hdrarch} INSTALL_HDR_PATH=$RPM_BUILD_ROOT/usr headers_install - -find $RPM_BUILD_ROOT/usr/include \ - \( -name .install -o -name .check -o \ - -name ..install.cmd -o -name ..check.cmd \) -delete - -%endif - -%if %{with_cross_headers} -%if 0%{?fedora} -HDR_ARCH_LIST='arm arm64 powerpc s390 x86' -%else -HDR_ARCH_LIST='arm64 powerpc s390 x86' -%endif -mkdir -p $RPM_BUILD_ROOT/usr/tmp-headers - -for arch in $HDR_ARCH_LIST; do - mkdir $RPM_BUILD_ROOT/usr/tmp-headers/arch-${arch} - %{__make} ARCH=${arch} INSTALL_HDR_PATH=$RPM_BUILD_ROOT/usr/tmp-headers/arch-${arch} headers_install -done - -find $RPM_BUILD_ROOT/usr/tmp-headers \ - \( -name .install -o -name .check -o \ - -name ..install.cmd -o -name ..check.cmd \) -delete - -# Copy all the architectures we care about to their respective asm directories -for arch in $HDR_ARCH_LIST ; do - mkdir -p $RPM_BUILD_ROOT/usr/${arch}-linux-gnu/include - mv $RPM_BUILD_ROOT/usr/tmp-headers/arch-${arch}/include/* $RPM_BUILD_ROOT/usr/${arch}-linux-gnu/include/ -done - -rm -rf $RPM_BUILD_ROOT/usr/tmp-headers -%endif - -%if %{with_kernel_abi_stablelists} -# kabi directory -INSTALL_KABI_PATH=$RPM_BUILD_ROOT/lib/modules/ -mkdir -p $INSTALL_KABI_PATH - -# install kabi releases directories -tar xjvf %{SOURCE300} -C $INSTALL_KABI_PATH -# with_kernel_abi_stablelists -%endif - -%if %{with_perf} -# perf tool binary and supporting scripts/binaries -%{perf_make} DESTDIR=$RPM_BUILD_ROOT lib=%{_lib} install-bin -# remove the 'trace' symlink. -rm -f %{buildroot}%{_bindir}/trace - -# For both of the below, yes, this should be using a macro but right now -# it's hard coded and we don't actually want it anyway right now. -# Whoever wants examples can fix it up! - -# remove examples -rm -rf %{buildroot}/usr/lib/perf/examples -rm -rf %{buildroot}/usr/lib/perf/include - -# python-perf extension -%{perf_make} DESTDIR=$RPM_BUILD_ROOT install-python_ext - -# perf man pages (note: implicit rpm magic compresses them later) -mkdir -p %{buildroot}/%{_mandir}/man1 -%{perf_make} DESTDIR=$RPM_BUILD_ROOT install-man - -# remove any tracevent files, eg. its plugins still gets built and installed, -# even if we build against system's libtracevent during perf build (by setting -# LIBTRACEEVENT_DYNAMIC=1 above in perf_make macro). Those files should already -# ship with libtraceevent package. -rm -rf %{buildroot}%{_libdir}/traceevent -%endif - -%if %{with_tools} -%ifarch %{cpupowerarchs} -%{make} -C tools/power/cpupower DESTDIR=$RPM_BUILD_ROOT libdir=%{_libdir} mandir=%{_mandir} CPUFREQ_BENCH=false install -rm -f %{buildroot}%{_libdir}/*.{a,la} -%find_lang cpupower -mv cpupower.lang ../ -%ifarch x86_64 - pushd tools/power/cpupower/debug/x86_64 - install -m755 centrino-decode %{buildroot}%{_bindir}/centrino-decode - install -m755 powernow-k8-decode %{buildroot}%{_bindir}/powernow-k8-decode - popd -%endif -chmod 0755 %{buildroot}%{_libdir}/libcpupower.so* -mkdir -p %{buildroot}%{_unitdir} %{buildroot}%{_sysconfdir}/sysconfig -install -m644 %{SOURCE2000} %{buildroot}%{_unitdir}/cpupower.service -install -m644 %{SOURCE2001} %{buildroot}%{_sysconfdir}/sysconfig/cpupower -%endif -%ifarch x86_64 - mkdir -p %{buildroot}%{_mandir}/man8 - pushd tools/power/x86/x86_energy_perf_policy - %{tools_make} DESTDIR=%{buildroot} install - popd - pushd tools/power/x86/turbostat - %{tools_make} DESTDIR=%{buildroot} install - popd - pushd tools/power/x86/intel-speed-select - %{tools_make} DESTDIR=%{buildroot} install - popd - pushd tools/arch/x86/intel_sdsi - %{tools_make} CFLAGS="${RPM_OPT_FLAGS}" DESTDIR=%{buildroot} install - popd -%endif -pushd tools/thermal/tmon -%{tools_make} INSTALL_ROOT=%{buildroot} install -popd -pushd tools/iio -%{tools_make} DESTDIR=%{buildroot} install -popd -pushd tools/gpio -%{tools_make} DESTDIR=%{buildroot} install -popd -install -m644 -D %{SOURCE2002} %{buildroot}%{_sysconfdir}/logrotate.d/kvm_stat -pushd tools/kvm/kvm_stat -%{__make} INSTALL_ROOT=%{buildroot} install-tools -%{__make} INSTALL_ROOT=%{buildroot} install-man -install -m644 -D kvm_stat.service %{buildroot}%{_unitdir}/kvm_stat.service -popd -# install VM tools -pushd tools/vm/ -install -m755 slabinfo %{buildroot}%{_bindir}/slabinfo -install -m755 page_owner_sort %{buildroot}%{_bindir}/page_owner_sort -popd -%endif - -if [ -f $DevelDir/vmlinux.h ]; then - RPM_VMLINUX_H=$DevelDir/vmlinux.h -fi - -%if %{with_bpftool} -pushd tools/bpf/bpftool -%{bpftool_make} prefix=%{_prefix} bash_compdir=%{_sysconfdir}/bash_completion.d/ mandir=%{_mandir} install doc-install -popd -%endif - -%if %{with_selftests} -pushd samples -install -d %{buildroot}%{_libexecdir}/ksamples -# install bpf samples -pushd bpf -install -d %{buildroot}%{_libexecdir}/ksamples/bpf -find -type f -executable -exec install -m755 {} %{buildroot}%{_libexecdir}/ksamples/bpf \; -install -m755 *.sh %{buildroot}%{_libexecdir}/ksamples/bpf -# test_lwt_bpf.sh compiles test_lwt_bpf.c when run; this works only from the -# kernel tree. Just remove it. -rm %{buildroot}%{_libexecdir}/ksamples/bpf/test_lwt_bpf.sh -install -m644 *_kern.o %{buildroot}%{_libexecdir}/ksamples/bpf || true -install -m644 tcp_bpf.readme %{buildroot}%{_libexecdir}/ksamples/bpf -popd -# install pktgen samples -pushd pktgen -install -d %{buildroot}%{_libexecdir}/ksamples/pktgen -find . -type f -executable -exec install -m755 {} %{buildroot}%{_libexecdir}/ksamples/pktgen/{} \; -find . -type f ! -executable -exec install -m644 {} %{buildroot}%{_libexecdir}/ksamples/pktgen/{} \; -popd -popd -# install vm selftests -pushd tools/testing/selftests/vm -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/vm/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/vm/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/vm/{} \; -popd -# install drivers/net/mlxsw selftests -pushd tools/testing/selftests/drivers/net/mlxsw -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/drivers/net/mlxsw/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/drivers/net/mlxsw/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/drivers/net/mlxsw/{} \; -popd -# install drivers/net/netdevsim selftests -pushd tools/testing/selftests/drivers/net/netdevsim -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/drivers/net/netdevsim/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/drivers/net/netdevsim/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/drivers/net/netdevsim/{} \; -popd -# install net/forwarding selftests -pushd tools/testing/selftests/net/forwarding -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/net/forwarding/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/net/forwarding/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/net/forwarding/{} \; -popd -# install net/mptcp selftests -pushd tools/testing/selftests/net/mptcp -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/net/mptcp/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/net/mptcp/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/net/mptcp/{} \; -popd -# install tc-testing selftests -pushd tools/testing/selftests/tc-testing -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/tc-testing/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/tc-testing/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/tc-testing/{} \; -popd -# install livepatch selftests -pushd tools/testing/selftests/livepatch -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/livepatch/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/livepatch/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/livepatch/{} \; -popd -# install netfilter selftests -pushd tools/testing/selftests/netfilter -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/netfilter/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/netfilter/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/netfilter/{} \; -popd -%endif - -### -### clean -### - -### -### scripts -### - -%if %{with_tools} -%post -n kernel-tools-libs -/sbin/ldconfig - -%postun -n kernel-tools-libs -/sbin/ldconfig -%endif - -# -# This macro defines a %%post script for a kernel*-devel package. -# %%kernel_devel_post [<subpackage>] -# Note we don't run hardlink if ostree is in use, as ostree is -# a far more sophisticated hardlink implementation. -# https://github.com/projectatomic/rpm-ostree/commit/58a79056a889be8814aa51f507b2c7a4dccee526 -# -# The deletion of *.hardlink-temporary files is a temporary workaround -# for this bug in the hardlink binary (fixed in util-linux 2.38): -# https://github.com/util-linux/util-linux/issues/1602 -# -%define kernel_devel_post() \ -%{expand:%%post %{?1:%{1}-}devel}\ -if [ -f /etc/sysconfig/kernel ]\ -then\ - . /etc/sysconfig/kernel || exit $?\ -fi\ -if [ "$HARDLINK" != "no" -a -x /usr/bin/hardlink -a ! -e /run/ostree-booted ] \ -then\ - (cd /usr/src/kernels/%{KVERREL}%{?1:+%{1}} &&\ - /usr/bin/find . -type f | while read f; do\ - hardlink -c /usr/src/kernels/*%{?dist}.*/$f $f > /dev/null\ - done;\ - /usr/bin/find /usr/src/kernels -type f -name '*.hardlink-temporary' -delete\ - )\ -fi\ -%{nil} - -# -# This macro defines a %%post script for a kernel*-modules-extra package. -# It also defines a %%postun script that does the same thing. -# %%kernel_modules_extra_post [<subpackage>] -# -%define kernel_modules_extra_post() \ -%{expand:%%post %{?1:%{1}-}modules-extra}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil}\ -%{expand:%%postun %{?1:%{1}-}modules-extra}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil} - -# -# This macro defines a %%post script for a kernel*-modules-internal package. -# It also defines a %%postun script that does the same thing. -# %%kernel_modules_internal_post [<subpackage>] -# -%define kernel_modules_internal_post() \ -%{expand:%%post %{?1:%{1}-}modules-internal}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil}\ -%{expand:%%postun %{?1:%{1}-}modules-internal}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil} - -# -# This macro defines a %%post script for a kernel*-modules package. -# It also defines a %%postun script that does the same thing. -# %%kernel_modules_post [<subpackage>] -# -%define kernel_modules_post() \ -%{expand:%%post %{?1:%{1}-}modules}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -if [ ! -f %{_localstatedir}/lib/rpm-state/%{name}/installing_core_%{KVERREL}%{?1:+%{1}} ]; then\ - mkdir -p %{_localstatedir}/lib/rpm-state/%{name}\ - touch %{_localstatedir}/lib/rpm-state/%{name}/need_to_run_dracut_%{KVERREL}%{?1:+%{1}}\ -fi\ -%{nil}\ -%{expand:%%postun %{?1:%{1}-}modules}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil}\ -%{expand:%%posttrans %{?1:%{1}-}modules}\ -if [ -f %{_localstatedir}/lib/rpm-state/%{name}/need_to_run_dracut_%{KVERREL}%{?1:+%{1}} ]; then\ - rm -f %{_localstatedir}/lib/rpm-state/%{name}/need_to_run_dracut_%{KVERREL}%{?1:+%{1}}\ - echo "Running: dracut -f --kver %{KVERREL}%{?1:+%{1}}"\ - dracut -f --kver "%{KVERREL}%{?1:+%{1}}" || exit $?\ -fi\ -%{nil} - -# This macro defines a %%posttrans script for a kernel package. -# %%kernel_variant_posttrans [<subpackage>] -# More text can follow to go at the end of this variant's %%post. -# -%define kernel_variant_posttrans() \ -%{expand:%%posttrans %{?1:%{1}-}core}\ -%if 0%{!?fedora:1}\ -if [ -x %{_sbindir}/weak-modules ]\ -then\ - %{_sbindir}/weak-modules --add-kernel %{KVERREL}%{?1:+%{1}} || exit $?\ -fi\ -%endif\ -rm -f %{_localstatedir}/lib/rpm-state/%{name}/installing_core_%{KVERREL}%{?1:+%{1}}\ -/bin/kernel-install add %{KVERREL}%{?1:+%{1}} /lib/modules/%{KVERREL}%{?1:+%{1}}/vmlinuz || exit $?\ -%{nil} - -# -# This macro defines a %%post script for a kernel package and its devel package. -# %%kernel_variant_post [-v <subpackage>] [-r <replace>] -# More text can follow to go at the end of this variant's %%post. -# -%define kernel_variant_post(v:r:) \ -%{expand:%%kernel_devel_post %{?-v*}}\ -%{expand:%%kernel_modules_post %{?-v*}}\ -%{expand:%%kernel_modules_extra_post %{?-v*}}\ -%{expand:%%kernel_modules_internal_post %{?-v*}}\ -%{expand:%%kernel_variant_posttrans %{?-v*}}\ -%{expand:%%post %{?-v*:%{-v*}-}core}\ -%{-r:\ -if [ `uname -i` == "x86_64" -o `uname -i` == "i386" ] &&\ - [ -f /etc/sysconfig/kernel ]; then\ - /bin/sed -r -i -e 's/^DEFAULTKERNEL=%{-r*}$/DEFAULTKERNEL=kernel%{?-v:-%{-v*}}/' /etc/sysconfig/kernel || exit $?\ -fi}\ -mkdir -p %{_localstatedir}/lib/rpm-state/%{name}\ -touch %{_localstatedir}/lib/rpm-state/%{name}/installing_core_%{KVERREL}%{?1:+%{1}}\ -%{nil} - -# -# This macro defines a %%preun script for a kernel package. -# %%kernel_variant_preun <subpackage> -# -%define kernel_variant_preun() \ -%{expand:%%preun %{?1:%{1}-}core}\ -/bin/kernel-install remove %{KVERREL}%{?1:+%{1}} /lib/modules/%{KVERREL}%{?1:+%{1}}/vmlinuz || exit $?\ -if [ -x %{_sbindir}/weak-modules ]\ -then\ - %{_sbindir}/weak-modules --remove-kernel %{KVERREL}%{?1:+%{1}} || exit $?\ -fi\ -%{nil} - -%kernel_variant_preun -%kernel_variant_post -r kernel-smp - -%if %{with_pae} -%kernel_variant_preun lpae -%kernel_variant_post -v lpae -r (kernel|kernel-smp) -%endif - -%if %{with_debug} -%kernel_variant_preun debug -%kernel_variant_post -v debug -%endif - -%if %{with_zfcpdump} -%kernel_variant_preun zfcpdump -%kernel_variant_post -v zfcpdump -%endif - -if [ -x /sbin/ldconfig ] -then - /sbin/ldconfig -X || exit $? -fi - -### -### file lists -### - -%if %{with_headers} -%files headers -/usr/include/* -%endif - -%if %{with_cross_headers} -%files cross-headers -/usr/*-linux-gnu/include/* -%endif - -%if %{with_kernel_abi_stablelists} -%files -n kernel-abi-stablelists -/lib/modules/kabi-* -%endif - -%if %{with_kabidw_base} -%ifarch x86_64 s390x ppc64 ppc64le aarch64 -%files kernel-kabidw-base-internal -%defattr(-,root,root) -/kabidw-base/%{_target_cpu}/* -%endif -%endif - -# only some architecture builds need kernel-doc -%if %{with_doc} -%files doc -%defattr(-,root,root) -%{_datadir}/doc/kernel-doc-%{specversion}-%{pkgrelease}/Documentation/* -%dir %{_datadir}/doc/kernel-doc-%{specversion}-%{pkgrelease}/Documentation -%dir %{_datadir}/doc/kernel-doc-%{specversion}-%{pkgrelease} -%endif - -%if %{with_perf} -%files -n perf -%{_bindir}/perf -%{_libdir}/libperf-jvmti.so -%dir %{_libexecdir}/perf-core -%{_libexecdir}/perf-core/* -%{_datadir}/perf-core/* -%{_mandir}/man[1-8]/perf* -%{_sysconfdir}/bash_completion.d/perf -%doc linux-%{KVERREL}/tools/perf/Documentation/examples.txt -%{_docdir}/perf-tip/tips.txt - -%files -n python3-perf -%{python3_sitearch}/* - -%if %{with_debuginfo} -%files -f perf-debuginfo.list -n perf-debuginfo - -%files -f python3-perf-debuginfo.list -n python3-perf-debuginfo -%endif -# with_perf -%endif - -%if %{with_tools} -%ifnarch %{cpupowerarchs} -%files -n kernel-tools -%else -%files -n kernel-tools -f cpupower.lang -%{_bindir}/cpupower -%{_datadir}/bash-completion/completions/cpupower -%ifarch x86_64 -%{_bindir}/centrino-decode -%{_bindir}/powernow-k8-decode -%endif -%{_unitdir}/cpupower.service -%{_mandir}/man[1-8]/cpupower* -%config(noreplace) %{_sysconfdir}/sysconfig/cpupower -%ifarch x86_64 -%{_bindir}/x86_energy_perf_policy -%{_mandir}/man8/x86_energy_perf_policy* -%{_bindir}/turbostat -%{_mandir}/man8/turbostat* -%{_bindir}/intel-speed-select -%{_sbindir}/intel_sdsi -%endif -# cpupowerarchs -%endif -%{_bindir}/tmon -%{_bindir}/iio_event_monitor -%{_bindir}/iio_generic_buffer -%{_bindir}/lsiio -%{_bindir}/lsgpio -%{_bindir}/gpio-hammer -%{_bindir}/gpio-event-mon -%{_bindir}/gpio-watch -%{_mandir}/man1/kvm_stat* -%{_bindir}/kvm_stat -%{_unitdir}/kvm_stat.service -%config(noreplace) %{_sysconfdir}/logrotate.d/kvm_stat -%{_bindir}/page_owner_sort -%{_bindir}/slabinfo - -%if %{with_debuginfo} -%files -f kernel-tools-debuginfo.list -n kernel-tools-debuginfo -%endif - -%ifarch %{cpupowerarchs} -%files -n kernel-tools-libs -%{_libdir}/libcpupower.so.0 -%{_libdir}/libcpupower.so.0.0.1 - -%files -n kernel-tools-libs-devel -%{_libdir}/libcpupower.so -%{_includedir}/cpufreq.h -%endif -# with_tools -%endif - -%if %{with_bpftool} -%files -n bpftool -%{_sbindir}/bpftool -%{_sysconfdir}/bash_completion.d/bpftool -%{_mandir}/man8/bpftool-cgroup.8.gz -%{_mandir}/man8/bpftool-gen.8.gz -%{_mandir}/man8/bpftool-iter.8.gz -%{_mandir}/man8/bpftool-link.8.gz -%{_mandir}/man8/bpftool-map.8.gz -%{_mandir}/man8/bpftool-prog.8.gz -%{_mandir}/man8/bpftool-perf.8.gz -%{_mandir}/man8/bpftool.8.gz -%{_mandir}/man8/bpftool-net.8.gz -%{_mandir}/man8/bpftool-feature.8.gz -%{_mandir}/man8/bpftool-btf.8.gz -%{_mandir}/man8/bpftool-struct_ops.8.gz - -%if %{with_debuginfo} -%files -f bpftool-debuginfo.list -n bpftool-debuginfo -%defattr(-,root,root) -%endif -%endif - -%if %{with_selftests} -%files selftests-internal -%{_libexecdir}/ksamples -%{_libexecdir}/kselftests -%endif - -# empty meta-package -%ifnarch %nobuildarches noarch -%files -%endif - -%if %{with_gcov} -%ifnarch %nobuildarches noarch -%files gcov -%{_builddir} -%endif -%endif - -# This is %%{image_install_path} on an arch where that includes ELF files, -# or empty otherwise. -%define elf_image_install_path %{?kernel_image_elf:%{image_install_path}} - -# -# This macro defines the %%files sections for a kernel package -# and its devel and debuginfo packages. -# %%kernel_variant_files [-k vmlinux] <use_vdso> <condition> <subpackage> -# -%define kernel_variant_files(k:) \ -%if %{2}\ -%{expand:%%files -f kernel-%{?3:%{3}-}core.list %{?1:-f kernel-%{?3:%{3}-}ldsoconf.list} %{?3:%{3}-}core}\ -%{!?_licensedir:%global license %%doc}\ -%license linux-%{KVERREL}/COPYING-%{version}-%{release}\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/%{?-k:%{-k*}}%{!?-k:vmlinuz}\ -%ghost /%{image_install_path}/%{?-k:%{-k*}}%{!?-k:vmlinuz}-%{KVERREL}%{?3:+%{3}}\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/.vmlinuz.hmac \ -%ghost /%{image_install_path}/.vmlinuz-%{KVERREL}%{?3:+%{3}}.hmac \ -%ifarch %{arm} aarch64\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/dtb \ -%ghost /%{image_install_path}/dtb-%{KVERREL}%{?3:+%{3}} \ -%endif\ -%attr(0600, root, root) /lib/modules/%{KVERREL}%{?3:+%{3}}/System.map\ -%ghost %attr(0600, root, root) /boot/System.map-%{KVERREL}%{?3:+%{3}}\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/symvers.gz\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/config\ -%ghost %attr(0600, root, root) /boot/symvers-%{KVERREL}%{?3:+%{3}}.gz\ -%ghost %attr(0600, root, root) /boot/initramfs-%{KVERREL}%{?3:+%{3}}.img\ -%ghost %attr(0644, root, root) /boot/config-%{KVERREL}%{?3:+%{3}}\ -%dir /lib/modules\ -%dir /lib/modules/%{KVERREL}%{?3:+%{3}}\ -%dir /lib/modules/%{KVERREL}%{?3:+%{3}}/kernel\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/build\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/source\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/updates\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/weak-updates\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/systemtap\ -%{_datadir}/doc/kernel-keys/%{KVERREL}%{?3:+%{3}}\ -%if %{1}\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/vdso\ -%endif\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/modules.*\ -%{expand:%%files -f kernel-%{?3:%{3}-}modules.list %{?3:%{3}-}modules}\ -%{expand:%%files %{?3:%{3}-}devel}\ -%defverify(not mtime)\ -/usr/src/kernels/%{KVERREL}%{?3:+%{3}}\ -%{expand:%%files %{?3:%{3}-}devel-matched}\ -%{expand:%%files -f kernel-%{?3:%{3}-}modules-extra.list %{?3:%{3}-}modules-extra}\ -%config(noreplace) /etc/modprobe.d/*-blacklist.conf\ -%{expand:%%files -f kernel-%{?3:%{3}-}modules-internal.list %{?3:%{3}-}modules-internal}\ -%if %{with_debuginfo}\ -%ifnarch noarch\ -%{expand:%%files -f debuginfo%{?3}.list %{?3:%{3}-}debuginfo}\ -%endif\ -%endif\ -%if %{?3:1} %{!?3:0}\ -%{expand:%%files %{3}}\ -%endif\ -%endif\ -%{nil} - -%kernel_variant_files %{_use_vdso} %{with_up} -%kernel_variant_files %{_use_vdso} %{with_debug} debug -%if %{with_debug_meta} -%files debug -%files debug-core -%files debug-devel -%files debug-devel-matched -%files debug-modules -%files debug-modules-extra -%endif -%kernel_variant_files %{use_vdso} %{with_pae} lpae -%kernel_variant_files %{_use_vdso} %{with_zfcpdump} zfcpdump - -%define kernel_variant_ipaclones(k:) \ -%if %{1}\ -%if %{with_ipaclones}\ -%{expand:%%files %{?2:%{2}-}ipaclones-internal}\ -%defattr(-,root,root)\ -%defverify(not mtime)\ -/usr/src/kernels/%{KVERREL}%{?2:+%{2}}-ipaclones\ -%endif\ -%endif\ -%{nil} - -%kernel_variant_ipaclones %{with_up} - -# plz don't put in a version string unless you're going to tag -# and build. -# -# -%changelog Mon Mar 28 2022 Fedora Kernel Team <kernel-team@xxxxxxxxxxxxxxxxx> [5.16.0-0.rc5.6.test] - -### -# The following Emacs magic makes C-c C-e use UTC dates. -# Local Variables: -# rpm-change-log-uses-utc: t -# End: -### diff --git a/redhat/self-test/data/rhel-2585cf9dfaad.fc25.spec b/redhat/self-test/data/rhel-2585cf9dfaad.fc25.spec index blahblah..blahblah 100755 --- a/redhat/self-test/data/rhel-2585cf9dfaad.fc25.spec +++ b/redhat/self-test/data/rhel-2585cf9dfaad.fc25.spec @@ -1,3050 +1,13 @@ -# All Global changes to build and install go here. -# Per the below section about __spec_install_pre, any rpm -# environment changes that affect %%install need to go -# here before the %%install macro is pre-built. - -# Disable LTO in userspace packages. -%global _lto_cflags %{nil} - -# Option to enable compiling with clang instead of gcc. -%bcond_with toolchain_clang - -%if %{with toolchain_clang} -%global toolchain clang -%endif - -# Compile the kernel with LTO (only supported when building with clang). -%bcond_with clang_lto - -%if %{with clang_lto} && %{without toolchain_clang} -{error:clang_lto requires --with toolchain_clang} -%endif - -# Cross compile on copr for arm -# See https://bugzilla.redhat.com/1879599 -%if 0%{?_with_cross_arm:1} -%global _target_cpu armv7hl -%global _arch arm -%global _build_arch arm -%global _with_cross 1 -%endif - -# The kernel's %%install section is special -# Normally the %%install section starts by cleaning up the BUILD_ROOT -# like so: -# -# %%__spec_install_pre %%{___build_pre}\ -# [ "$RPM_BUILD_ROOT" != "/" ] && rm -rf "${RPM_BUILD_ROOT}"\ -# mkdir -p `dirname "$RPM_BUILD_ROOT"`\ -# mkdir "$RPM_BUILD_ROOT"\ -# %%{nil} -# -# But because of kernel variants, the %%build section, specifically -# BuildKernel(), moves each variant to its final destination as the -# variant is built. This violates the expectation of the %%install -# section. As a result we snapshot the current env variables and -# purposely leave out the removal section. All global wide changes -# should be added above this line otherwise the %%install section -# will not see them. -%global __spec_install_pre %{___build_pre} - -# At the time of this writing (2019-03), RHEL8 packages use w2.xzdio -# compression for rpms (xz, level 2). -# Kernel has several large (hundreds of mbytes) rpms, they take ~5 mins -# to compress by single-threaded xz. Switch to threaded compression, -# and from level 2 to 3 to keep compressed sizes close to "w2" results. -# -# NB: if default compression in /usr/lib/rpm/redhat/macros ever changes, -# this one might need tweaking (e.g. if default changes to w3.xzdio, -# change below to w4T.xzdio): -# -# This is disabled on i686 as it triggers oom errors - -%ifnarch i686 -%define _binary_payload w3T.xzdio -%endif - -Summary: The Linux kernel -%if 0%{?fedora} -%define secure_boot_arch x86_64 -%else -%define secure_boot_arch x86_64 aarch64 s390x ppc64le -%endif - -# Signing for secure boot authentication -%ifarch %{secure_boot_arch} -%global signkernel 1 -%else -%global signkernel 0 -%endif - -# Sign modules on all arches -%global signmodules 1 - -# Compress modules only for architectures that build modules -%ifarch noarch -%global zipmodules 0 -%else -%global zipmodules 1 -%endif - -%if %{zipmodules} -%global zipsed -e 's/\.ko$/\.ko.xz/' -# for parallel xz processes, replace with 1 to go back to single process -%endif - -%if 0%{?fedora} -%define primary_target fedora -%else -%define primary_target rhel -%endif - -# -# genspec.sh variables -# - -# Include Fedora files %global include_fedora 1 -# Include RHEL files %global include_rhel 1 -# Provide Patchlist.changelog file %global patchlist_changelog 1 -# Set released_kernel to 1 when the upstream source tarball contains a -# kernel release. (This includes prepatch or "rc" releases.) -# Set released_kernel to 0 when the upstream source tarball contains an -# unreleased kernel development snapshot. %global released_kernel 0 -# Set debugbuildsenabled to 1 to build separate base and debug kernels -# (on supported architectures). The kernel-debug-* subpackages will -# contain the debug kernel. -# Set debugbuildsenabled to 0 to not build a separate debug kernel, but -# to build the base kernel using the debug configuration. (Specifying -# the --with-release option overrides this setting.) -%define debugbuildsenabled 1 %define buildid .test %define specversion 5.16.0 %define patchversion 5.16 %define pkgrelease 0.rc5.6.test %define kversion 5 %define tarfile_release 5.16.0-0.rc5.6.test -# This is needed to do merge window version magic %define patchlevel 16 -# allow pkg_release to have configurable %%{?dist} tag %define specrelease 0.rc5.6%{?buildid}%{?dist} - -# -# End of genspec.sh variables -# - -%define pkg_release %{specrelease} - -# libexec dir is not used by the linker, so the shared object there -# should not be exported to RPM provides -%global __provides_exclude_from ^%{_libexecdir}/kselftests - -# The following build options are enabled by default, but may become disabled -# by later architecture-specific checks. These can also be disabled by using -# --without <opt> in the rpmbuild command, or by forcing these values to 0. -# -# standard kernel -%define with_up %{?_without_up: 0} %{?!_without_up: 1} -# kernel PAE (only valid for ARM (lpae)) -%define with_pae %{?_without_pae: 0} %{?!_without_pae: 1} -# kernel-debug -%define with_debug %{?_without_debug: 0} %{?!_without_debug: 1} -# kernel-zfcpdump (s390 specific kernel for zfcpdump) -%define with_zfcpdump %{?_without_zfcpdump: 0} %{?!_without_zfcpdump: 1} -# kernel-doc -%define with_doc %{?_without_doc: 0} %{?!_without_doc: 1} -# kernel-headers -%define with_headers %{?_without_headers: 0} %{?!_without_headers: 1} -%define with_cross_headers %{?_without_cross_headers: 0} %{?!_without_cross_headers: 1} -# perf -%define with_perf %{?_without_perf: 0} %{?!_without_perf: 1} -# tools -%define with_tools %{?_without_tools: 0} %{?!_without_tools: 1} -# bpf tool -%define with_bpftool %{?_without_bpftool: 0} %{?!_without_bpftool: 1} -# kernel-debuginfo -%define with_debuginfo %{?_without_debuginfo: 0} %{?!_without_debuginfo: 1} -# kernel-abi-stablelists -%define with_kernel_abi_stablelists %{?_without_kernel_abi_stablelists: 0} %{?!_without_kernel_abi_stablelists: 1} -# internal samples and selftests -%define with_selftests %{?_without_selftests: 0} %{?!_without_selftests: 1} -# -# Additional options for user-friendly one-off kernel building: -# -# Only build the base kernel (--with baseonly): -%define with_baseonly %{?_with_baseonly: 1} %{?!_with_baseonly: 0} -# Only build the pae kernel (--with paeonly): -%define with_paeonly %{?_with_paeonly: 1} %{?!_with_paeonly: 0} -# Only build the debug kernel (--with dbgonly): -%define with_dbgonly %{?_with_dbgonly: 1} %{?!_with_dbgonly: 0} -# Control whether we perform a compat. check against published ABI. -%define with_kabichk %{?_without_kabichk: 0} %{?!_without_kabichk: 1} -# Temporarily disable kabi checks until RC. -%define with_kabichk 0 -# Control whether we perform a compat. check against DUP ABI. -%define with_kabidupchk %{?_with_kabidupchk: 1} %{?!_with_kabidupchk: 0} -# -# Control whether to run an extensive DWARF based kABI check. -# Note that this option needs to have baseline setup in SOURCE300. -%define with_kabidwchk %{?_without_kabidwchk: 0} %{?!_without_kabidwchk: 1} -%define with_kabidw_base %{?_with_kabidw_base: 1} %{?!_with_kabidw_base: 0} -# -# Control whether to install the vdso directories. -%define with_vdso_install %{?_without_vdso_install: 0} %{?!_without_vdso_install: 1} -# -# should we do C=1 builds with sparse -%define with_sparse %{?_with_sparse: 1} %{?!_with_sparse: 0} -# -# Cross compile requested? -%define with_cross %{?_with_cross: 1} %{?!_with_cross: 0} -# -# build a release kernel on rawhide -%define with_release %{?_with_release: 1} %{?!_with_release: 0} - -# verbose build, i.e. no silent rules and V=1 -%define with_verbose %{?_with_verbose: 1} %{?!_with_verbose: 0} - -# -# check for mismatched config options -%define with_configchecks %{?_without_configchecks: 0} %{?!_without_configchecks: 1} - -# -# gcov support -%define with_gcov %{?_with_gcov:1}%{?!_with_gcov:0} - -# -# ipa_clone support -%define with_ipaclones %{?_without_ipaclones: 0} %{?!_without_ipaclones: 1} - -# Want to build a vanilla kernel build without any non-upstream patches? -%define with_vanilla %{?_with_vanilla: 1} %{?!_with_vanilla: 0} - -%if 0%{?fedora} -# Kernel headers are being split out into a separate package -%define with_headers 0 -%define with_cross_headers 0 -# no ipa_clone for now -%define with_ipaclones 0 -# no stablelist -%define with_kernel_abi_stablelists 0 -# Fedora builds these separately -%define with_perf 0 -%define with_tools 0 -%define with_bpftool 0 -# selftests turns on bpftool -%define with_selftests 0 -%endif - -%if %{with_verbose} -%define make_opts V=1 -%else -%define make_opts -s -%endif - -%if %{with toolchain_clang} -%ifarch s390x ppc64le -%global llvm_ias 0 -%else -%global llvm_ias 1 -%endif -%global clang_make_opts HOSTCC=clang CC=clang LLVM_IAS=%{llvm_ias} -%if %{with clang_lto} -%global clang_make_opts %{clang_make_opts} LD=ld.lld HOSTLD=ld.lld AR=llvm-ar NM=llvm-nm HOSTAR=llvm-ar HOSTNM=llvm-nm -%endif -%global make_opts %{make_opts} %{clang_make_opts} -# clang does not support the -fdump-ipa-clones option -%global with_ipaclones 0 -%endif - -# turn off debug kernel and kabichk for gcov builds -%if %{with_gcov} -%define with_debug 0 -%define with_kabichk 0 -%define with_kabidupchk 0 -%define with_kabidwchk 0 -%define with_kabidw_base 0 -%define with_kernel_abi_stablelists 0 -%endif - -# turn off kABI DWARF-based check if we're generating the base dataset -%if %{with_kabidw_base} -%define with_kabidwchk 0 -%endif - -# kpatch_kcflags are extra compiler flags applied to base kernel -# -fdump-ipa-clones is enabled only for base kernels on selected arches -%if %{with_ipaclones} -%ifarch x86_64 ppc64le -%define kpatch_kcflags -fdump-ipa-clones -%else -%define with_ipaclones 0 -%endif -%endif - -%define make_target bzImage -%define image_install_path boot - -%define KVERREL %{version}-%{release}.%{_target_cpu} -%define KVERREL_RE %(echo %KVERREL | sed 's/+/[+]/g') -%define hdrarch %_target_cpu -%define asmarch %_target_cpu - -%if 0%{!?nopatches:1} -%define nopatches 0 -%endif - -%if %{with_vanilla} -%define nopatches 1 -%endif - -%if %{with_release} -%define debugbuildsenabled 1 -%endif - -%if !%{with_debuginfo} -%define _enable_debug_packages 0 -%endif -%define debuginfodir /usr/lib/debug -# Needed because we override almost everything involving build-ids -# and debuginfo generation. Currently we rely on the old alldebug setting. -%global _build_id_links alldebug - -# kernel PAE is only built on ARMv7 -%ifnarch armv7hl -%define with_pae 0 -%endif - -# if requested, only build base kernel -%if %{with_baseonly} -%define with_pae 0 -%define with_debug 0 -%define with_vdso_install 0 -%define with_perf 0 -%define with_tools 0 -%define with_bpftool 0 -%define with_kernel_abi_stablelists 0 -%define with_selftests 0 -%define with_cross 0 -%define with_cross_headers 0 -%define with_ipaclones 0 -%endif - -# if requested, only build pae kernel -%if %{with_paeonly} -%define with_up 0 -%define with_debug 0 -%endif - -# if requested, only build debug kernel -%if %{with_dbgonly} -%define with_up 0 -%define with_vdso_install 0 -%define with_perf 0 -%define with_tools 0 -%define with_bpftool 0 -%define with_kernel_abi_stablelists 0 -%define with_selftests 0 -%define with_cross 0 -%define with_cross_headers 0 -%define with_ipaclones 0 -%endif - -# turn off kABI DUP check and DWARF-based check if kABI check is disabled -%if !%{with_kabichk} -%define with_kabidupchk 0 -%define with_kabidwchk 0 -%endif - -%if %{with_vdso_install} -%define use_vdso 1 -%endif - -# selftests require bpftool to be built -%if %{with_selftests} -%define with_bpftool 1 -%endif - -%ifnarch noarch -%define with_kernel_abi_stablelists 0 -%endif - -# Overrides for generic default options - -# only package docs noarch -%ifnarch noarch -%define with_doc 0 -%define doc_build_fail true -%endif - -%if 0%{?fedora} -# don't do debug builds on anything but i686 and x86_64 -%ifnarch i686 x86_64 -%define with_debug 0 -%endif -%endif - -# don't build noarch kernels or headers (duh) -%ifarch noarch -%define with_up 0 -%define with_headers 0 -%define with_cross_headers 0 -%define with_tools 0 -%define with_perf 0 -%define with_bpftool 0 -%define with_selftests 0 -%define with_debug 0 -%define all_arch_configs kernel-%{version}-*.config -%endif - -# sparse blows up on ppc -%ifnarch ppc64le -%define with_sparse 0 -%endif - -# zfcpdump mechanism is s390 only -%ifnarch s390x -%define with_zfcpdump 0 -%endif - -%if 0%{?fedora} -# This is not for Fedora -%define with_zfcpdump 0 -%endif - -# Per-arch tweaks - -%ifarch i686 -%define asmarch x86 -%define hdrarch i386 -%define all_arch_configs kernel-%{version}-i?86*.config -%define kernel_image arch/x86/boot/bzImage -%endif - -%ifarch x86_64 -%define asmarch x86 -%define all_arch_configs kernel-%{version}-x86_64*.config -%define kernel_image arch/x86/boot/bzImage -%endif - -%ifarch ppc64le -%define asmarch powerpc -%define hdrarch powerpc -%define make_target vmlinux -%define kernel_image vmlinux -%define kernel_image_elf 1 -%define use_vdso 0 -%define all_arch_configs kernel-%{version}-ppc64le*.config -%endif - -%ifarch s390x -%define asmarch s390 -%define hdrarch s390 -%define all_arch_configs kernel-%{version}-s390x.config -%define kernel_image arch/s390/boot/bzImage -%define vmlinux_decompressor arch/s390/boot/compressed/vmlinux -%endif - -%ifarch %{arm} -%define all_arch_configs kernel-%{version}-arm*.config -%define skip_nonpae_vdso 1 -%define asmarch arm -%define hdrarch arm -%define make_target bzImage -%define kernel_image arch/arm/boot/zImage -# http://lists.infradead.org/pipermail/linux-arm-kernel/2012-March/091404.html -%define kernel_mflags KALLSYMS_EXTRA_PASS=1 -# we only build headers/perf/tools on the base arm arches -# just like we used to only build them on i386 for x86 -%ifnarch armv7hl -%define with_headers 0 -%define with_cross_headers 0 -%endif -# These currently don't compile on armv7 -%define with_selftests 0 -%endif - -%ifarch aarch64 -%define all_arch_configs kernel-%{version}-aarch64*.config -%define asmarch arm64 -%define hdrarch arm64 -%define make_target Image.gz -%define kernel_image arch/arm64/boot/Image.gz -%endif - -# Should make listnewconfig fail if there's config options -# printed out? -%if %{nopatches} -%define with_configchecks 0 -%endif - -# To temporarily exclude an architecture from being built, add it to -# %%nobuildarches. Do _NOT_ use the ExclusiveArch: line, because if we -# don't build kernel-headers then the new build system will no longer let -# us use the previous build of that package -- it'll just be completely AWOL. -# Which is a BadThing(tm). - -# We only build kernel-headers on the following... -%if 0%{?fedora} -%define nobuildarches i386 -%else -%define nobuildarches i386 i686 %{arm} -%endif - -%ifarch %nobuildarches -# disable BuildKernel commands -%define with_up 0 -%define with_debug 0 -%define with_pae 0 -%define with_zfcpdump 0 - -%define with_debuginfo 0 -%define with_perf 0 -%define with_tools 0 -%define with_bpftool 0 -%define with_selftests 0 -%define _enable_debug_packages 0 -%endif - -# Architectures we build tools/cpupower on -%if 0%{?fedora} -%define cpupowerarchs %{ix86} x86_64 ppc64le %{arm} aarch64 -%else -%define cpupowerarchs i686 x86_64 ppc64le aarch64 -%endif - -%if 0%{?use_vdso} - -%if 0%{?skip_nonpae_vdso} -%define _use_vdso 0 -%else -%define _use_vdso 1 -%endif - -%else -%define _use_vdso 0 -%endif - -# If build of debug packages is disabled, we need to know if we want to create -# meta debug packages or not, after we define with_debug for all specific cases -# above. So this must be at the end here, after all cases of with_debug or not. -%define with_debug_meta 0 -%if !%{debugbuildsenabled} -%if %{with_debug} -%define with_debug_meta 1 -%endif -%define with_debug 0 -%endif - - -# -# Packages that need to be installed before the kernel is, because the %%post -# scripts use them. -# -%define kernel_prereq coreutils, systemd >= 203-2, /usr/bin/kernel-install -%define initrd_prereq dracut >= 027 - - -Name: kernel -License: GPLv2 and Redistributable, no modification permitted -URL: https://www.kernel.org/ -Version: %{specversion} -Release: %{pkg_release} -# DO NOT CHANGE THE 'ExclusiveArch' LINE TO TEMPORARILY EXCLUDE AN ARCHITECTURE BUILD. -# SET %%nobuildarches (ABOVE) INSTEAD -%if 0%{?fedora} -ExclusiveArch: noarch x86_64 s390x %{arm} aarch64 ppc64le -%else -ExclusiveArch: noarch i386 i686 x86_64 s390x %{arm} aarch64 ppc64le -%endif -ExclusiveOS: Linux -%ifnarch %{nobuildarches} -Requires: kernel-core-uname-r = %{KVERREL} -Requires: kernel-modules-uname-r = %{KVERREL} -%endif - - -# -# List the packages used during the kernel build -# -BuildRequires: kmod, patch, bash, coreutils, tar, git-core, which -BuildRequires: bzip2, xz, findutils, gzip, m4, perl-interpreter, perl-Carp, perl-devel, perl-generators, make, diffutils, gawk -BuildRequires: gcc, binutils, redhat-rpm-config, hmaccalc, bison, flex, gcc-c++ -BuildRequires: net-tools, hostname, bc, elfutils-devel -BuildRequires: dwarves -BuildRequires: python3-devel -BuildRequires: gcc-plugin-devel -# glibc-static is required for a consistent build environment (specifically -# CONFIG_CC_CAN_LINK_STATIC=y). -BuildRequires: glibc-static -%ifnarch %{nobuildarches} noarch -BuildRequires: bpftool -%endif -%if %{with_headers} -BuildRequires: rsync -%endif -%if %{with_doc} -BuildRequires: xmlto, asciidoc, python3-sphinx, python3-sphinx_rtd_theme -%endif -%if %{with_sparse} -BuildRequires: sparse -%endif -%if %{with_perf} -BuildRequires: zlib-devel binutils-devel newt-devel perl(ExtUtils::Embed) bison flex xz-devel -BuildRequires: audit-libs-devel -BuildRequires: java-devel -BuildRequires: libbpf-devel -BuildRequires: libbabeltrace-devel -BuildRequires: libtraceevent-devel -%ifnarch %{arm} s390x -BuildRequires: numactl-devel -%endif -%ifarch aarch64 -BuildRequires: opencsd-devel >= 1.0.0 -%endif -%endif -%if %{with_tools} -BuildRequires: gettext ncurses-devel -BuildRequires: libcap-devel libcap-ng-devel -%ifnarch s390x -BuildRequires: pciutils-devel -%endif -%ifarch i686 x86_64 -BuildRequires: libnl3-devel -%endif -%endif -%if %{with_tools} || %{signmodules} || %{signkernel} -BuildRequires: openssl-devel -%endif -%if %{with_bpftool} -BuildRequires: python3-docutils -BuildRequires: zlib-devel binutils-devel -%endif -%if %{with_selftests} -BuildRequires: clang llvm -%ifnarch %{arm} -BuildRequires: numactl-devel -%endif -BuildRequires: libcap-devel libcap-ng-devel rsync libmnl-devel -%endif -BuildConflicts: rhbuildsys(DiskFree) < 500Mb -%if %{with_debuginfo} -BuildRequires: rpm-build, elfutils -BuildConflicts: rpm < 4.13.0.1-19 -BuildConflicts: dwarves < 1.13 -# Most of these should be enabled after more investigation -%undefine _include_minidebuginfo -%undefine _find_debuginfo_dwz_opts -%undefine _unique_build_ids -%undefine _unique_debug_names -%undefine _unique_debug_srcs -%undefine _debugsource_packages -%undefine _debuginfo_subpackages -%global _find_debuginfo_opts -r -%global _missing_build_ids_terminate_build 1 -%global _no_recompute_build_ids 1 -%endif -%if %{with_kabidwchk} || %{with_kabidw_base} -BuildRequires: kabi-dw -%endif - -%if %{signkernel}%{signmodules} -BuildRequires: openssl -%if %{signkernel} -# ELN uses Fedora signing process, so exclude -%if 0%{?rhel}%{?centos} && !0%{?eln} -BuildRequires: system-sb-certs -%endif -%ifarch x86_64 aarch64 -BuildRequires: nss-tools -BuildRequires: pesign >= 0.10-4 -%endif -%endif -%endif - -%if %{with_cross} -BuildRequires: binutils-%{_build_arch}-linux-gnu, gcc-%{_build_arch}-linux-gnu -%define cross_opts CROSS_COMPILE=%{_build_arch}-linux-gnu- -%define __strip %{_build_arch}-linux-gnu-strip -%endif - -# These below are required to build man pages -%if %{with_perf} -BuildRequires: xmlto -%endif -%if %{with_perf} || %{with_tools} -BuildRequires: asciidoc -%endif - -%if %{with toolchain_clang} -BuildRequires: clang -%endif - -%if %{with clang_lto} -BuildRequires: llvm -BuildRequires: lld -%endif - -# Because this is the kernel, it's hard to get a single upstream URL -# to represent the base without needing to do a bunch of patching. This -# tarball is generated from a src-git tree. If you want to see the -# exact git commit you can run -# -# xzcat -qq ${TARBALL} | git get-tar-commit-id -Source0: linux-%{tarfile_release}.tar.xz - -Source1: Makefile.rhelver - - -# Name of the packaged file containing signing key -%ifarch ppc64le -%define signing_key_filename kernel-signing-ppc.cer -%endif -%ifarch s390x -%define signing_key_filename kernel-signing-s390.cer -%endif - -%if %{?released_kernel} - -Source10: redhatsecurebootca5.cer -Source11: redhatsecurebootca1.cer -Source12: redhatsecureboot501.cer -Source13: redhatsecureboot301.cer -Source14: secureboot_s390.cer -Source15: secureboot_ppc.cer - -%define secureboot_ca_1 %{SOURCE10} -%define secureboot_ca_0 %{SOURCE11} -%ifarch x86_64 aarch64 -%define secureboot_key_1 %{SOURCE12} -%define pesign_name_1 redhatsecureboot501 -%define secureboot_key_0 %{SOURCE13} -%define pesign_name_0 redhatsecureboot301 -%endif -%ifarch s390x -%define secureboot_key_0 %{SOURCE14} -%define pesign_name_0 redhatsecureboot302 -%endif -%ifarch ppc64le -%define secureboot_key_0 %{SOURCE15} -%define pesign_name_0 redhatsecureboot303 -%endif - -# released_kernel -%else - -Source10: redhatsecurebootca4.cer -Source11: redhatsecurebootca2.cer -Source12: redhatsecureboot401.cer -Source13: redhatsecureboot003.cer - -%define secureboot_ca_1 %{SOURCE10} -%define secureboot_ca_0 %{SOURCE11} -%define secureboot_key_1 %{SOURCE12} -%define pesign_name_1 redhatsecureboot401 -%define secureboot_key_0 %{SOURCE13} -%define pesign_name_0 redhatsecureboot003 - -# released_kernel -%endif - -Source20: mod-denylist.sh -Source21: mod-sign.sh -Source22: parallel_xz.sh - -%define modsign_cmd %{SOURCE21} - -%if 0%{?include_rhel} -Source23: x509.genkey.rhel - -Source24: kernel-aarch64-rhel.config -Source25: kernel-aarch64-debug-rhel.config -Source26: mod-extra.list.rhel - -Source27: kernel-ppc64le-rhel.config -Source28: kernel-ppc64le-debug-rhel.config -Source29: kernel-s390x-rhel.config -Source30: kernel-s390x-debug-rhel.config -Source31: kernel-s390x-zfcpdump-rhel.config -Source32: kernel-x86_64-rhel.config -Source33: kernel-x86_64-debug-rhel.config - -Source34: filter-x86_64.sh.rhel -Source35: filter-armv7hl.sh.rhel -Source37: filter-aarch64.sh.rhel -Source38: filter-ppc64le.sh.rhel -Source39: filter-s390x.sh.rhel -Source40: filter-modules.sh.rhel - -Source41: x509.genkey.centos -%endif - -%if 0%{?include_fedora} -Source50: x509.genkey.fedora -Source51: mod-extra.list.fedora - -Source52: kernel-aarch64-fedora.config -Source53: kernel-aarch64-debug-fedora.config -Source54: kernel-armv7hl-fedora.config -Source55: kernel-armv7hl-debug-fedora.config -Source56: kernel-armv7hl-lpae-fedora.config -Source57: kernel-armv7hl-lpae-debug-fedora.config -Source60: kernel-ppc64le-fedora.config -Source61: kernel-ppc64le-debug-fedora.config -Source62: kernel-s390x-fedora.config -Source63: kernel-s390x-debug-fedora.config -Source64: kernel-x86_64-fedora.config -Source65: kernel-x86_64-debug-fedora.config - -Source67: filter-x86_64.sh.fedora -Source68: filter-armv7hl.sh.fedora -Source70: filter-aarch64.sh.fedora -Source71: filter-ppc64le.sh.fedora -Source72: filter-s390x.sh.fedora -Source73: filter-modules.sh.fedora -%endif - -Source75: partial-kgcov-snip.config -Source80: generate_all_configs.sh -Source81: process_configs.sh - -Source82: update_scripts.sh - -Source84: mod-internal.list - -Source100: rheldup3.x509 -Source101: rhelkpatch1.x509 - -Source200: check-kabi - -Source201: Module.kabi_aarch64 -Source202: Module.kabi_ppc64le -Source203: Module.kabi_s390x -Source204: Module.kabi_x86_64 - -Source210: Module.kabi_dup_aarch64 -Source211: Module.kabi_dup_ppc64le -Source212: Module.kabi_dup_s390x -Source213: Module.kabi_dup_x86_64 - -Source300: kernel-abi-stablelists-%{specversion}-%{pkgrelease}.tar.bz2 -Source301: kernel-kabi-dw-%{specversion}-%{pkgrelease}.tar.bz2 - -# Sources for kernel-tools -Source2000: cpupower.service -Source2001: cpupower.config -Source2002: kvm_stat.logrotate - -# Some people enjoy building customized kernels from the dist-git in Fedora and -# use this to override configuration options. One day they may all use the -# source tree, but in the mean time we carry this to support the legacy workflow -Source3000: merge.pl -Source3001: kernel-local -%if %{patchlist_changelog} -Source3002: Patchlist.changelog -%endif - -Source4000: README.rst -Source4001: rpminspect.yaml -Source4002: gating.yaml - -## Patches needed for building this package - -%if !%{nopatches} - -Patch1: patch-%{patchversion}-redhat.patch -%endif - -# empty final patch to facilitate testing of kernel patches -Patch999999: linux-kernel-test.patch - -# END OF PATCH DEFINITIONS - -%description -The kernel meta package - -# -# This macro does requires, provides, conflicts, obsoletes for a kernel package. -# %%kernel_reqprovconf <subpackage> -# It uses any kernel_<subpackage>_conflicts and kernel_<subpackage>_obsoletes -# macros defined above. -# -%define kernel_reqprovconf \ -Provides: kernel = %{specversion}-%{pkg_release}\ -Provides: kernel-%{_target_cpu} = %{specversion}-%{pkg_release}%{?1:+%{1}}\ -Provides: kernel-drm-nouveau = 16\ -Provides: kernel-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires(pre): %{kernel_prereq}\ -Requires(pre): %{initrd_prereq}\ -Requires(pre): ((linux-firmware >= 20150904-56.git6ebf5d57) if linux-firmware)\ -Recommends: linux-firmware\ -Requires(preun): systemd >= 200\ -Conflicts: xfsprogs < 4.3.0-1\ -Conflicts: xorg-x11-drv-vmmouse < 13.0.99\ -%{expand:%%{?kernel%{?1:_%{1}}_conflicts:Conflicts: %%{kernel%{?1:_%{1}}_conflicts}}}\ -%{expand:%%{?kernel%{?1:_%{1}}_obsoletes:Obsoletes: %%{kernel%{?1:_%{1}}_obsoletes}}}\ -%{expand:%%{?kernel%{?1:_%{1}}_provides:Provides: %%{kernel%{?1:_%{1}}_provides}}}\ -# We can't let RPM do the dependencies automatic because it'll then pick up\ -# a correct but undesirable perl dependency from the module headers which\ -# isn't required for the kernel proper to function\ -AutoReq: no\ -AutoProv: yes\ -%{nil} - - -%package doc -Summary: Various documentation bits found in the kernel source -Group: Documentation -%description doc -This package contains documentation files from the kernel -source. Various bits of information about the Linux kernel and the -device drivers shipped with it are documented in these files. - -You'll want to install this package if you need a reference to the -options that can be passed to Linux kernel modules at load time. - - -%package headers -Summary: Header files for the Linux kernel for use by glibc -Obsoletes: glibc-kernheaders < 3.0-46 -Provides: glibc-kernheaders = 3.0-46 -%description headers -Kernel-headers includes the C header files that specify the interface -between the Linux kernel and userspace libraries and programs. The -header files define structures and constants that are needed for -building most standard programs and are also needed for rebuilding the -glibc package. - -%package cross-headers -Summary: Header files for the Linux kernel for use by cross-glibc -%description cross-headers -Kernel-cross-headers includes the C header files that specify the interface -between the Linux kernel and userspace libraries and programs. The -header files define structures and constants that are needed for -building most standard programs and are also needed for rebuilding the -cross-glibc package. - - -%package debuginfo-common-%{_target_cpu} -Summary: Kernel source files used by %{name}-debuginfo packages -Provides: installonlypkg(kernel) -%description debuginfo-common-%{_target_cpu} -This package is required by %{name}-debuginfo subpackages. -It provides the kernel source files common to all builds. - -%if %{with_perf} -%package -n perf -Summary: Performance monitoring for the Linux kernel -Requires: bzip2 -License: GPLv2 -%description -n perf -This package contains the perf tool, which enables performance monitoring -of the Linux kernel. - -%package -n perf-debuginfo -Summary: Debug information for package perf -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release} -AutoReqProv: no -%description -n perf-debuginfo -This package provides debug information for the perf package. - -# Note that this pattern only works right to match the .build-id -# symlinks because of the trailing nonmatching alternation and -# the leading .*, because of find-debuginfo.sh's buggy handling -# of matching the pattern against the symlinks file. -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{_bindir}/perf(\.debug)?|.*%%{_libexecdir}/perf-core/.*|.*%%{_libdir}/libperf-jvmti.so(\.debug)?|XXX' -o perf-debuginfo.list} - -%package -n python3-perf -Summary: Python bindings for apps which will manipulate perf events -%description -n python3-perf -The python3-perf package contains a module that permits applications -written in the Python programming language to use the interface -to manipulate perf events. - -%package -n python3-perf-debuginfo -Summary: Debug information for package perf python bindings -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release} -AutoReqProv: no -%description -n python3-perf-debuginfo -This package provides debug information for the perf python bindings. - -# the python_sitearch macro should already be defined from above -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{python3_sitearch}/perf.*so(\.debug)?|XXX' -o python3-perf-debuginfo.list} - -# with_perf -%endif - -%if %{with_tools} -%package -n kernel-tools -Summary: Assortment of tools for the Linux kernel -License: GPLv2 -%ifarch %{cpupowerarchs} -Provides: cpupowerutils = 1:009-0.6.p1 -Obsoletes: cpupowerutils < 1:009-0.6.p1 -Provides: cpufreq-utils = 1:009-0.6.p1 -Provides: cpufrequtils = 1:009-0.6.p1 -Obsoletes: cpufreq-utils < 1:009-0.6.p1 -Obsoletes: cpufrequtils < 1:009-0.6.p1 -Obsoletes: cpuspeed < 1:1.5-16 -Requires: kernel-tools-libs = %{version}-%{release} -%endif -%define __requires_exclude ^%{_bindir}/python -%description -n kernel-tools -This package contains the tools/ directory from the kernel source -and the supporting documentation. - -%package -n kernel-tools-libs -Summary: Libraries for the kernels-tools -License: GPLv2 -%description -n kernel-tools-libs -This package contains the libraries built from the tools/ directory -from the kernel source. - -%package -n kernel-tools-libs-devel -Summary: Assortment of tools for the Linux kernel -License: GPLv2 -Requires: kernel-tools = %{version}-%{release} -%ifarch %{cpupowerarchs} -Provides: cpupowerutils-devel = 1:009-0.6.p1 -Obsoletes: cpupowerutils-devel < 1:009-0.6.p1 -%endif -Requires: kernel-tools-libs = %{version}-%{release} -Provides: kernel-tools-devel -%description -n kernel-tools-libs-devel -This package contains the development files for the tools/ directory from -the kernel source. - -%package -n kernel-tools-debuginfo -Summary: Debug information for package kernel-tools -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release} -AutoReqProv: no -%description -n kernel-tools-debuginfo -This package provides debug information for package kernel-tools. - -# Note that this pattern only works right to match the .build-id -# symlinks because of the trailing nonmatching alternation and -# the leading .*, because of find-debuginfo.sh's buggy handling -# of matching the pattern against the symlinks file. -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{_bindir}/centrino-decode(\.debug)?|.*%%{_bindir}/powernow-k8-decode(\.debug)?|.*%%{_bindir}/cpupower(\.debug)?|.*%%{_libdir}/libcpupower.*|.*%%{_bindir}/turbostat(\.debug)?|.*%%{_bindir}/x86_energy_perf_policy(\.debug)?|.*%%{_bindir}/tmon(\.debug)?|.*%%{_bindir}/lsgpio(\.debug)?|.*%%{_bindir}/gpio-hammer(\.debug)?|.*%%{_bindir}/gpio-event-mon(\.debug)?|.*%%{_bindir}/gpio-watch(\.debug)?|.*%%{_bindir}/iio_event_monitor(\.debug)?|.*%%{_bindir}/iio_generic_buffer(\.debug)?|.*%%{_bindir}/lsiio(\.debug)?|.*%%{_bindir}/intel-speed-select(\.debug)?|.*%%{_bindir}/page_owner_sort(\.debug)?|.*%%{_bindir}/slabinfo(\.debug)?|.*%%{_sbindir}/intel_sdsi(\.debug)?|XXX' -o kernel-tools-debuginfo.list} - -# with_tools -%endif - -%if %{with_bpftool} - -%package -n bpftool -Summary: Inspection and simple manipulation of eBPF programs and maps -License: GPLv2 -%description -n bpftool -This package contains the bpftool, which allows inspection and simple -manipulation of eBPF programs and maps. - -%package -n bpftool-debuginfo -Summary: Debug information for package bpftool -Group: Development/Debug -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release} -AutoReqProv: no -%description -n bpftool-debuginfo -This package provides debug information for the bpftool package. - -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{_sbindir}/bpftool(\.debug)?|XXX' -o bpftool-debuginfo.list} - -# with_bpftool -%endif - -%if %{with_selftests} - -%package selftests-internal -Summary: Kernel samples and selftests -License: GPLv2 -Requires: binutils, bpftool, iproute-tc, nmap-ncat, python3 -%description selftests-internal -Kernel sample programs and selftests. - -# Note that this pattern only works right to match the .build-id -# symlinks because of the trailing nonmatching alternation and -# the leading .*, because of find-debuginfo.sh's buggy handling -# of matching the pattern against the symlinks file. -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{_libexecdir}/(ksamples|kselftests)/.*|XXX' -o selftests-debuginfo.list} - -# with_selftests -%endif - -%if %{with_gcov} -%package gcov -Summary: gcov graph and source files for coverage data collection. -%description gcov -kernel-gcov includes the gcov graph and source files for gcov coverage collection. -%endif - -%package -n kernel-abi-stablelists -Summary: The Red Hat Enterprise Linux kernel ABI symbol stablelists -AutoReqProv: no -%description -n kernel-abi-stablelists -The kABI package contains information pertaining to the Red Hat Enterprise -Linux kernel ABI, including lists of kernel symbols that are needed by -external Linux kernel modules, and a yum plugin to aid enforcement. - -%if %{with_kabidw_base} -%package kernel-kabidw-base-internal -Summary: The baseline dataset for kABI verification using DWARF data -Group: System Environment/Kernel -AutoReqProv: no -%description kernel-kabidw-base-internal -The package contains data describing the current ABI of the Red Hat Enterprise -Linux kernel, suitable for the kabi-dw tool. -%endif - -# -# This macro creates a kernel-<subpackage>-debuginfo package. -# %%kernel_debuginfo_package <subpackage> -# -# Explanation of the find_debuginfo_opts: We build multiple kernels (debug -# pae etc.) so the regex filters those kernels appropriately. We also -# have to package several binaries as part of kernel-devel but getting -# unique build-ids is tricky for these userspace binaries. We don't really -# care about debugging those so we just filter those out and remove it. -%define kernel_debuginfo_package() \ -%package %{?1:%{1}-}debuginfo\ -Summary: Debug information for package %{name}%{?1:-%{1}}\ -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release}\ -Provides: %{name}%{?1:-%{1}}-debuginfo-%{_target_cpu} = %{version}-%{release}\ -Provides: installonlypkg(kernel)\ -AutoReqProv: no\ -%description %{?1:%{1}-}debuginfo\ -This package provides debug information for package %{name}%{?1:-%{1}}.\ -This is required to use SystemTap with %{name}%{?1:-%{1}}-%{KVERREL}.\ -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} --keep-section '.BTF' -p '.*\/usr\/src\/kernels/.*|XXX' -o ignored-debuginfo.list -p '/.*/%%{KVERREL_RE}%{?1:[+]%{1}}/.*|/.*%%{KVERREL_RE}%{?1:\+%{1}}(\.debug)?' -o debuginfo%{?1}.list}\ -%{nil} - -# -# This macro creates a kernel-<subpackage>-devel package. -# %%kernel_devel_package [-m] <subpackage> <pretty-name> -# -%define kernel_devel_package(m) \ -%package %{?1:%{1}-}devel\ -Summary: Development package for building kernel modules to match the %{?2:%{2} }kernel\ -Provides: kernel%{?1:-%{1}}-devel-%{_target_cpu} = %{version}-%{release}\ -Provides: kernel-devel-%{_target_cpu} = %{version}-%{release}%{?1:+%{1}}\ -Provides: kernel-devel-uname-r = %{KVERREL}%{?1:+%{1}}\ -Provides: installonlypkg(kernel)\ -AutoReqProv: no\ -Requires(pre): findutils\ -Requires: findutils\ -Requires: perl-interpreter\ -Requires: openssl-devel\ -Requires: elfutils-libelf-devel\ -Requires: bison\ -Requires: flex\ -Requires: make\ -Requires: gcc\ -%if %{-m:1}%{!-m:0}\ -Requires: kernel-devel-uname-r = %{KVERREL}\ -%endif\ -%description %{?1:%{1}-}devel\ -This package provides kernel headers and makefiles sufficient to build modules\ -against the %{?2:%{2} }kernel package.\ -%{nil} - -# -# This macro creates an empty kernel-<subpackage>-devel-matched package that -# requires both the core and devel packages locked on the same version. -# %%kernel_devel_matched_package [-m] <subpackage> <pretty-name> -# -%define kernel_devel_matched_package(m) \ -%package %{?1:%{1}-}devel-matched\ -Summary: Meta package to install matching core and devel packages for a given %{?2:%{2} }kernel\ -Requires: kernel%{?1:-%{1}}-devel = %{version}-%{release}\ -Requires: kernel%{?1:-%{1}}-core = %{version}-%{release}\ -%description %{?1:%{1}-}devel-matched\ -This meta package is used to install matching core and devel packages for a given %{?2:%{2} }kernel.\ -%{nil} - -# -# kernel-<variant>-ipaclones-internal package -# -%define kernel_ipaclones_package() \ -%package %{?1:%{1}-}ipaclones-internal\ -Summary: *.ipa-clones files generated by -fdump-ipa-clones for kernel%{?1:-%{1}}\ -Group: System Environment/Kernel\ -AutoReqProv: no\ -%description %{?1:%{1}-}ipaclones-internal\ -This package provides *.ipa-clones files.\ -%{nil} - -# -# This macro creates a kernel-<subpackage>-modules-internal package. -# %%kernel_modules_internal_package <subpackage> <pretty-name> -# -%define kernel_modules_internal_package() \ -%package %{?1:%{1}-}modules-internal\ -Summary: Extra kernel modules to match the %{?2:%{2} }kernel\ -Group: System Environment/Kernel\ -Provides: kernel%{?1:-%{1}}-modules-internal-%{_target_cpu} = %{version}-%{release}\ -Provides: kernel%{?1:-%{1}}-modules-internal-%{_target_cpu} = %{version}-%{release}%{?1:+%{1}}\ -Provides: kernel%{?1:-%{1}}-modules-internal = %{version}-%{release}%{?1:+%{1}}\ -Provides: installonlypkg(kernel-module)\ -Provides: kernel%{?1:-%{1}}-modules-internal-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel%{?1:-%{1}}-modules-uname-r = %{KVERREL}%{?1:+%{1}}\ -AutoReq: no\ -AutoProv: yes\ -%description %{?1:%{1}-}modules-internal\ -This package provides kernel modules for the %{?2:%{2} }kernel package for Red Hat internal usage.\ -%{nil} - -# -# This macro creates a kernel-<subpackage>-modules-extra package. -# %%kernel_modules_extra_package [-m] <subpackage> <pretty-name> -# -%define kernel_modules_extra_package(m) \ -%package %{?1:%{1}-}modules-extra\ -Summary: Extra kernel modules to match the %{?2:%{2} }kernel\ -Provides: kernel%{?1:-%{1}}-modules-extra-%{_target_cpu} = %{version}-%{release}\ -Provides: kernel%{?1:-%{1}}-modules-extra-%{_target_cpu} = %{version}-%{release}%{?1:+%{1}}\ -Provides: kernel%{?1:-%{1}}-modules-extra = %{version}-%{release}%{?1:+%{1}}\ -Provides: installonlypkg(kernel-module)\ -Provides: kernel%{?1:-%{1}}-modules-extra-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel%{?1:-%{1}}-modules-uname-r = %{KVERREL}%{?1:+%{1}}\ -%if %{-m:1}%{!-m:0}\ -Requires: kernel-modules-extra-uname-r = %{KVERREL}\ -%endif\ -AutoReq: no\ -AutoProv: yes\ -%description %{?1:%{1}-}modules-extra\ -This package provides less commonly used kernel modules for the %{?2:%{2} }kernel package.\ -%{nil} - -# -# This macro creates a kernel-<subpackage>-modules package. -# %%kernel_modules_package [-m] <subpackage> <pretty-name> -# -%define kernel_modules_package(m) \ -%package %{?1:%{1}-}modules\ -Summary: kernel modules to match the %{?2:%{2}-}core kernel\ -Provides: kernel%{?1:-%{1}}-modules-%{_target_cpu} = %{version}-%{release}\ -Provides: kernel-modules-%{_target_cpu} = %{version}-%{release}%{?1:+%{1}}\ -Provides: kernel-modules = %{version}-%{release}%{?1:+%{1}}\ -Provides: installonlypkg(kernel-module)\ -Provides: kernel%{?1:-%{1}}-modules-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel-uname-r = %{KVERREL}%{?1:+%{1}}\ -%if %{-m:1}%{!-m:0}\ -Requires: kernel-modules-uname-r = %{KVERREL}\ -%endif\ -AutoReq: no\ -AutoProv: yes\ -%description %{?1:%{1}-}modules\ -This package provides commonly used kernel modules for the %{?2:%{2}-}core kernel package.\ -%{nil} - -# -# this macro creates a kernel-<subpackage> meta package. -# %%kernel_meta_package <subpackage> -# -%define kernel_meta_package() \ -%package %{1}\ -summary: kernel meta-package for the %{1} kernel\ -Requires: kernel-%{1}-core-uname-r = %{KVERREL}+%{1}\ -Requires: kernel-%{1}-modules-uname-r = %{KVERREL}+%{1}\ -Provides: installonlypkg(kernel)\ -%description %{1}\ -The meta-package for the %{1} kernel\ -%{nil} - -# -# This macro creates a kernel-<subpackage> and its -devel and -debuginfo too. -# %%define variant_summary The Linux kernel compiled for <configuration> -# %%kernel_variant_package [-n <pretty-name>] [-m] <subpackage> -# -%define kernel_variant_package(n:m) \ -%package %{?1:%{1}-}core\ -Summary: %{variant_summary}\ -Provides: kernel-%{?1:%{1}-}core-uname-r = %{KVERREL}%{?1:+%{1}}\ -Provides: installonlypkg(kernel)\ -%if %{-m:1}%{!-m:0}\ -Requires: kernel-core-uname-r = %{KVERREL}\ -%endif\ -%{expand:%%kernel_reqprovconf}\ -%if %{?1:1} %{!?1:0} \ -%{expand:%%kernel_meta_package %{?1:%{1}}}\ -%endif\ -%{expand:%%kernel_devel_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}} %{-m:%{-m}}}\ -%{expand:%%kernel_devel_matched_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}} %{-m:%{-m}}}\ -%{expand:%%kernel_modules_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}} %{-m:%{-m}}}\ -%{expand:%%kernel_modules_extra_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}} %{-m:%{-m}}}\ -%if %{-m:0}%{!-m:1}\ -%{expand:%%kernel_modules_internal_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}}}\ -%{expand:%%kernel_debuginfo_package %{?1:%{1}}}\ -%endif\ -%{nil} - -# Now, each variant package. - -%if %{with_pae} -%define variant_summary The Linux kernel compiled for Cortex-A15 -%kernel_variant_package lpae -%description lpae-core -This package includes a version of the Linux kernel with support for -Cortex-A15 devices with LPAE and HW virtualisation support -%endif - -%if %{with_zfcpdump} -%define variant_summary The Linux kernel compiled for zfcpdump usage -%kernel_variant_package zfcpdump -%description zfcpdump-core -The kernel package contains the Linux kernel (vmlinuz) for use by the -zfcpdump infrastructure. -# with_zfcpdump -%endif - -%define variant_summary The Linux kernel compiled with extra debugging enabled -%if !%{debugbuildsenabled} -%kernel_variant_package -m debug -%else -%kernel_variant_package debug -%endif -%description debug-core -The kernel package contains the Linux kernel (vmlinuz), the core of any -Linux operating system. The kernel handles the basic functions -of the operating system: memory allocation, process allocation, device -input and output, etc. - -This variant of the kernel has numerous debugging options enabled. -It should only be installed when trying to gather additional information -on kernel bugs, as some of these options impact performance noticably. - -# And finally the main -core package - -%define variant_summary The Linux kernel -%kernel_variant_package -%description core -The kernel package contains the Linux kernel (vmlinuz), the core of any -Linux operating system. The kernel handles the basic functions -of the operating system: memory allocation, process allocation, device -input and output, etc. - -%if %{with_ipaclones} -%kernel_ipaclones_package -%endif - -%prep -# do a few sanity-checks for --with *only builds -%if %{with_baseonly} -%if !%{with_up} -echo "Cannot build --with baseonly, up build is disabled" -exit 1 -%endif -%endif - -# more sanity checking; do it quietly -if [ "%{patches}" != "%%{patches}" ] ; then - for patch in %{patches} ; do - if [ ! -f $patch ] ; then - echo "ERROR: Patch ${patch##/*/} listed in specfile but is missing" - exit 1 - fi - done -fi 2>/dev/null - -patch_command='patch -p1 -F1 -s' -ApplyPatch() -{ - local patch=$1 - shift - if [ ! -f $RPM_SOURCE_DIR/$patch ]; then - exit 1 - fi - if ! grep -E "^Patch[0-9]+: $patch\$" %{_specdir}/${RPM_PACKAGE_NAME}.spec ; then - if [ "${patch:0:8}" != "patch-%{kversion}." ] ; then - echo "ERROR: Patch $patch not listed as a source patch in specfile" - exit 1 - fi - fi 2>/dev/null - case "$patch" in - *.bz2) bunzip2 < "$RPM_SOURCE_DIR/$patch" | $patch_command ${1+"$@"} ;; - *.gz) gunzip < "$RPM_SOURCE_DIR/$patch" | $patch_command ${1+"$@"} ;; - *.xz) unxz < "$RPM_SOURCE_DIR/$patch" | $patch_command ${1+"$@"} ;; - *) $patch_command ${1+"$@"} < "$RPM_SOURCE_DIR/$patch" ;; - esac -} - -# don't apply patch if it's empty -ApplyOptionalPatch() -{ - local patch=$1 - shift - if [ ! -f $RPM_SOURCE_DIR/$patch ]; then - exit 1 - fi - local C=$(wc -l $RPM_SOURCE_DIR/$patch | awk '{print $1}') - if [ "$C" -gt 9 ]; then - ApplyPatch $patch ${1+"$@"} - fi -} - -%setup -q -n kernel-%{tarfile_release} -c -mv linux-%{tarfile_release} linux-%{KVERREL} - -cd linux-%{KVERREL} -cp -a %{SOURCE1} . - -%if !%{nopatches} - -ApplyOptionalPatch patch-%{patchversion}-redhat.patch -%endif - -ApplyOptionalPatch linux-kernel-test.patch - -# END OF PATCH APPLICATIONS - -# Any further pre-build tree manipulations happen here. - -chmod +x scripts/checkpatch.pl -mv COPYING COPYING-%{version}-%{release} - -# This Prevents scripts/setlocalversion from mucking with our version numbers. -touch .scmversion - -# Mangle /usr/bin/python shebangs to /usr/bin/python3 -# Mangle all Python shebangs to be Python 3 explicitly -# -p preserves timestamps -# -n prevents creating ~backup files -# -i specifies the interpreter for the shebang -# This fixes errors such as -# *** ERROR: ambiguous python shebang in /usr/bin/kvm_stat: #!/usr/bin/python. Change it to python3 (or python2) explicitly. -# We patch all sources below for which we got a report/error. -pathfix.py -i "%{__python3} %{py3_shbang_opts}" -p -n \ - tools/kvm/kvm_stat/kvm_stat \ - scripts/show_delta \ - scripts/diffconfig \ - scripts/bloat-o-meter \ - scripts/jobserver-exec \ - tools \ - Documentation \ - scripts/clang-tools - -# only deal with configs if we are going to build for the arch -%ifnarch %nobuildarches - -if [ -L configs ]; then - rm -f configs -fi -mkdir configs -cd configs - -# Drop some necessary files from the source dir into the buildroot -cp $RPM_SOURCE_DIR/kernel-*.config . -cp %{SOURCE80} . -# merge.pl -cp %{SOURCE3000} . -# kernel-local -cp %{SOURCE3001} . -FLAVOR=%{primary_target} SPECVERSION=%{version} ./generate_all_configs.sh %{debugbuildsenabled} - -# Merge in any user-provided local config option changes -%ifnarch %nobuildarches -for i in %{all_arch_configs} -do - mv $i $i.tmp - ./merge.pl %{SOURCE3001} $i.tmp > $i -%if %{with_gcov} - echo "Merging with gcov options" - cat %{SOURCE75} - mv $i $i.tmp - ./merge.pl %{SOURCE75} $i.tmp > $i -%endif - rm $i.tmp -done -%endif - -%if %{with clang_lto} -for i in *aarch64*.config *x86_64*.config; do - sed -i 's/# CONFIG_LTO_CLANG_THIN is not set/CONFIG_LTO_CLANG_THIN=y/' $i - sed -i 's/CONFIG_LTO_NONE=y/# CONFIG_LTO_NONE is not set/' $i -done -%endif - -# Add DUP and kpatch certificates to system trusted keys for RHEL -%if 0%{?rhel} -%if %{signkernel}%{signmodules} -openssl x509 -inform der -in %{SOURCE100} -out rheldup3.pem -openssl x509 -inform der -in %{SOURCE101} -out rhelkpatch1.pem -cat rheldup3.pem rhelkpatch1.pem > ../certs/rhel.pem -%ifarch s390x ppc64le -openssl x509 -inform der -in %{secureboot_ca_0} -out secureboot.pem -cat secureboot.pem >> ../certs/rhel.pem -%endif -for i in *.config; do - sed -i 's@CONFIG_SYSTEM_TRUSTED_KEYS=""@CONFIG_SYSTEM_TRUSTED_KEYS="certs/rhel.pem"@' $i -done -%endif -%endif - -cp %{SOURCE81} . -OPTS="" -%if %{with_configchecks} - OPTS="$OPTS -w -n -c" -%endif -%if %{with clang_lto} -for opt in %{clang_make_opts}; do - OPTS="$OPTS -m $opt" -done -%endif -RHJOBS=$RPM_BUILD_NCPUS PACKAGE_NAME=kernel ./process_configs.sh $OPTS ${specversion} - -cp %{SOURCE82} . -RPM_SOURCE_DIR=$RPM_SOURCE_DIR ./update_scripts.sh %{primary_target} - -# We may want to override files from the primary target in case of building -# against a flavour of it (eg. centos not rhel), thus override it here if -# necessary -if [ "%{primary_target}" == "rhel" ]; then -%if 0%{?centos} - echo "Updating scripts/sources to centos version" - RPM_SOURCE_DIR=$RPM_SOURCE_DIR ./update_scripts.sh centos -%else - echo "Not updating scripts/sources to centos version" -%endif -fi - -# end of kernel config -%endif - -cd .. -# # End of Configs stuff - -# get rid of unwanted files resulting from patch fuzz -find . \( -name "*.orig" -o -name "*~" \) -delete >/dev/null - -# remove unnecessary SCM files -find . -name .gitignore -delete >/dev/null - -cd .. - -### -### build -### -%build - -%if %{with_sparse} -%define sparse_mflags C=1 -%endif - -cp_vmlinux() -{ - eu-strip --remove-comment -o "$2" "$1" -} - -# Note we need to disable these flags for cross builds because the flags -# from redhat-rpm-config assume that host == target so target arch -# flags cause issues with the host compiler. -%if !%{with_cross} -%define build_hostcflags %{?build_cflags} -%define build_hostldflags %{?build_ldflags} -%endif - -%define make %{__make} %{?cross_opts} %{?make_opts} HOSTCFLAGS="%{?build_hostcflags}" HOSTLDFLAGS="%{?build_hostldflags}" - -InitBuildVars() { - # Initialize the kernel .config file and create some variables that are - # needed for the actual build process. - - Variant=$1 - - # Pick the right kernel config file - Config=kernel-%{version}-%{_target_cpu}${Variant:+-${Variant}}.config - DevelDir=/usr/src/kernels/%{KVERREL}${Variant:++${Variant}} - - KernelVer=%{version}-%{release}.%{_target_cpu}${Variant:++${Variant}} - - # make sure EXTRAVERSION says what we want it to say - # Trim the release if this is a CI build, since KERNELVERSION is limited to 64 characters - ShortRel=$(perl -e "print \"%{release}\" =~ s/\.pr\.[0-9A-Fa-f]{32}//r") - perl -p -i -e "s/^EXTRAVERSION.*/EXTRAVERSION = -${ShortRel}.%{_target_cpu}${Variant:++${Variant}}/" Makefile - - # if pre-rc1 devel kernel, must fix up PATCHLEVEL for our versioning scheme - # if we are post rc1 this should match anyway so this won't matter - perl -p -i -e 's/^PATCHLEVEL.*/PATCHLEVEL = %{patchlevel}/' Makefile - - %{make} %{?_smp_mflags} mrproper - cp configs/$Config .config - - %if %{signkernel}%{signmodules} - cp configs/x509.genkey certs/. - %endif - - Arch=`head -1 .config | cut -b 3-` - echo USING ARCH=$Arch - - KCFLAGS="%{?kcflags}" - - # add kpatch flags for base kernel - if [ "$Variant" == "" ]; then - KCFLAGS="$KCFLAGS %{?kpatch_kcflags}" - fi -} - -BuildKernel() { - MakeTarget=$1 - KernelImage=$2 - DoVDSO=$3 - Variant=$4 - InstallName=${5:-vmlinuz} - - DoModules=1 - if [ "$Variant" = "zfcpdump" ]; then - DoModules=0 - fi - - # When the bootable image is just the ELF kernel, strip it. - # We already copy the unstripped file into the debuginfo package. - if [ "$KernelImage" = vmlinux ]; then - CopyKernel=cp_vmlinux - else - CopyKernel=cp - fi - - InitBuildVars $Variant - - echo BUILDING A KERNEL FOR ${Variant} %{_target_cpu}... - - %{make} ARCH=$Arch olddefconfig >/dev/null - - # This ensures build-ids are unique to allow parallel debuginfo - perl -p -i -e "s/^CONFIG_BUILD_SALT.*/CONFIG_BUILD_SALT=\"%{KVERREL}\"/" .config - %{make} ARCH=$Arch KCFLAGS="$KCFLAGS" WITH_GCOV="%{?with_gcov}" %{?_smp_mflags} $MakeTarget %{?sparse_mflags} %{?kernel_mflags} - if [ $DoModules -eq 1 ]; then - %{make} ARCH=$Arch KCFLAGS="$KCFLAGS" WITH_GCOV="%{?with_gcov}" %{?_smp_mflags} modules %{?sparse_mflags} || exit 1 - fi - - mkdir -p $RPM_BUILD_ROOT/%{image_install_path} - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/systemtap -%if %{with_debuginfo} - mkdir -p $RPM_BUILD_ROOT%{debuginfodir}/%{image_install_path} -%endif - -%ifarch %{arm} aarch64 - %{make} ARCH=$Arch dtbs INSTALL_DTBS_PATH=$RPM_BUILD_ROOT/%{image_install_path}/dtb-$KernelVer - %{make} ARCH=$Arch dtbs_install INSTALL_DTBS_PATH=$RPM_BUILD_ROOT/%{image_install_path}/dtb-$KernelVer - cp -r $RPM_BUILD_ROOT/%{image_install_path}/dtb-$KernelVer $RPM_BUILD_ROOT/lib/modules/$KernelVer/dtb - find arch/$Arch/boot/dts -name '*.dtb' -type f -delete -%endif - - # Start installing the results - install -m 644 .config $RPM_BUILD_ROOT/boot/config-$KernelVer - install -m 644 .config $RPM_BUILD_ROOT/lib/modules/$KernelVer/config - install -m 644 System.map $RPM_BUILD_ROOT/boot/System.map-$KernelVer - install -m 644 System.map $RPM_BUILD_ROOT/lib/modules/$KernelVer/System.map - - # We estimate the size of the initramfs because rpm needs to take this size - # into consideration when performing disk space calculations. (See bz #530778) - dd if=/dev/zero of=$RPM_BUILD_ROOT/boot/initramfs-$KernelVer.img bs=1M count=20 - - if [ -f arch/$Arch/boot/zImage.stub ]; then - cp arch/$Arch/boot/zImage.stub $RPM_BUILD_ROOT/%{image_install_path}/zImage.stub-$KernelVer || : - cp arch/$Arch/boot/zImage.stub $RPM_BUILD_ROOT/lib/modules/$KernelVer/zImage.stub-$KernelVer || : - fi - - %if %{signkernel} - if [ "$KernelImage" = vmlinux ]; then - # We can't strip and sign $KernelImage in place, because - # we need to preserve original vmlinux for debuginfo. - # Use a copy for signing. - $CopyKernel $KernelImage $KernelImage.tosign - KernelImage=$KernelImage.tosign - CopyKernel=cp - fi - - # Sign the image if we're using EFI - # aarch64 kernels are gziped EFI images - KernelExtension=${KernelImage##*.} - if [ "$KernelExtension" == "gz" ]; then - SignImage=${KernelImage%.*} - else - SignImage=$KernelImage - fi - - %ifarch x86_64 aarch64 - %pesign -s -i $SignImage -o vmlinuz.tmp -a %{secureboot_ca_0} -c %{secureboot_key_0} -n %{pesign_name_0} - %pesign -s -i vmlinuz.tmp -o vmlinuz.signed -a %{secureboot_ca_1} -c %{secureboot_key_1} -n %{pesign_name_1} - rm vmlinuz.tmp - %endif - %ifarch s390x ppc64le - if [ -x /usr/bin/rpm-sign ]; then - rpm-sign --key "%{pesign_name_0}" --lkmsign $SignImage --output vmlinuz.signed - elif [ $DoModules -eq 1 ]; then - chmod +x scripts/sign-file - ./scripts/sign-file -p sha256 certs/signing_key.pem certs/signing_key.x509 $SignImage vmlinuz.signed - else - mv $SignImage vmlinuz.signed - fi - %endif - - if [ ! -s vmlinuz.signed ]; then - echo "pesigning failed" - exit 1 - fi - mv vmlinuz.signed $SignImage - if [ "$KernelExtension" == "gz" ]; then - gzip -f9 $SignImage - fi - # signkernel - %endif - - $CopyKernel $KernelImage \ - $RPM_BUILD_ROOT/%{image_install_path}/$InstallName-$KernelVer - chmod 755 $RPM_BUILD_ROOT/%{image_install_path}/$InstallName-$KernelVer - cp $RPM_BUILD_ROOT/%{image_install_path}/$InstallName-$KernelVer $RPM_BUILD_ROOT/lib/modules/$KernelVer/$InstallName - - # hmac sign the kernel for FIPS - echo "Creating hmac file: $RPM_BUILD_ROOT/%{image_install_path}/.vmlinuz-$KernelVer.hmac" - ls -l $RPM_BUILD_ROOT/%{image_install_path}/$InstallName-$KernelVer - (cd $RPM_BUILD_ROOT/%{image_install_path} && sha512hmac $InstallName-$KernelVer) > $RPM_BUILD_ROOT/%{image_install_path}/.vmlinuz-$KernelVer.hmac; - cp $RPM_BUILD_ROOT/%{image_install_path}/.vmlinuz-$KernelVer.hmac $RPM_BUILD_ROOT/lib/modules/$KernelVer/.vmlinuz.hmac - - if [ $DoModules -eq 1 ]; then - # Override $(mod-fw) because we don't want it to install any firmware - # we'll get it from the linux-firmware package and we don't want conflicts - %{make} %{?_smp_mflags} ARCH=$Arch INSTALL_MOD_PATH=$RPM_BUILD_ROOT %{?_smp_mflags} modules_install KERNELRELEASE=$KernelVer mod-fw= - fi - -%if %{with_gcov} - # install gcov-needed files to $BUILDROOT/$BUILD/...: - # gcov_info->filename is absolute path - # gcno references to sources can use absolute paths (e.g. in out-of-tree builds) - # sysfs symlink targets (set up at compile time) use absolute paths to BUILD dir - find . \( -name '*.gcno' -o -name '*.[chS]' \) -exec install -D '{}' "$RPM_BUILD_ROOT/$(pwd)/{}" \; -%endif - - # add an a noop %%defattr statement 'cause rpm doesn't like empty file list files - echo '%%defattr(-,-,-)' > ../kernel${Variant:+-${Variant}}-ldsoconf.list - if [ $DoVDSO -ne 0 ]; then - %{make} ARCH=$Arch INSTALL_MOD_PATH=$RPM_BUILD_ROOT vdso_install KERNELRELEASE=$KernelVer - if [ -s ldconfig-kernel.conf ]; then - install -D -m 444 ldconfig-kernel.conf \ - $RPM_BUILD_ROOT/etc/ld.so.conf.d/kernel-$KernelVer.conf - echo /etc/ld.so.conf.d/kernel-$KernelVer.conf >> ../kernel${Variant:+-${Variant}}-ldsoconf.list - fi - - rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/vdso/.build-id - fi - - # And save the headers/makefiles etc for building modules against - # - # This all looks scary, but the end result is supposed to be: - # * all arch relevant include/ files - # * all Makefile/Kconfig files - # * all script/ files - - rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/source - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - (cd $RPM_BUILD_ROOT/lib/modules/$KernelVer ; ln -s build source) - # dirs for additional modules per module-init-tools, kbuild/modules.txt - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/updates - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/weak-updates - # CONFIG_KERNEL_HEADER_TEST generates some extra files in the process of - # testing so just delete - find . -name *.h.s -delete - # first copy everything - cp --parents `find -type f -name "Makefile*" -o -name "Kconfig*"` $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - if [ ! -e Module.symvers ]; then - touch Module.symvers - fi - cp Module.symvers $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp System.map $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - if [ -s Module.markers ]; then - cp Module.markers $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - fi - - # create the kABI metadata for use in packaging - # NOTENOTE: the name symvers is used by the rpm backend - # NOTENOTE: to discover and run the /usr/lib/rpm/fileattrs/kabi.attr - # NOTENOTE: script which dynamically adds exported kernel symbol - # NOTENOTE: checksums to the rpm metadata provides list. - # NOTENOTE: if you change the symvers name, update the backend too - echo "**** GENERATING kernel ABI metadata ****" - gzip -c9 < Module.symvers > $RPM_BUILD_ROOT/boot/symvers-$KernelVer.gz - cp $RPM_BUILD_ROOT/boot/symvers-$KernelVer.gz $RPM_BUILD_ROOT/lib/modules/$KernelVer/symvers.gz - -%if %{with_kabichk} - echo "**** kABI checking is enabled in kernel SPEC file. ****" - chmod 0755 $RPM_SOURCE_DIR/check-kabi - if [ -e $RPM_SOURCE_DIR/Module.kabi_%{_target_cpu}$Variant ]; then - cp $RPM_SOURCE_DIR/Module.kabi_%{_target_cpu}$Variant $RPM_BUILD_ROOT/Module.kabi - $RPM_SOURCE_DIR/check-kabi -k $RPM_BUILD_ROOT/Module.kabi -s Module.symvers || exit 1 - # for now, don't keep it around. - rm $RPM_BUILD_ROOT/Module.kabi - else - echo "**** NOTE: Cannot find reference Module.kabi file. ****" - fi -%endif - -%if %{with_kabidupchk} - echo "**** kABI DUP checking is enabled in kernel SPEC file. ****" - if [ -e $RPM_SOURCE_DIR/Module.kabi_dup_%{_target_cpu}$Variant ]; then - cp $RPM_SOURCE_DIR/Module.kabi_dup_%{_target_cpu}$Variant $RPM_BUILD_ROOT/Module.kabi - $RPM_SOURCE_DIR/check-kabi -k $RPM_BUILD_ROOT/Module.kabi -s Module.symvers || exit 1 - # for now, don't keep it around. - rm $RPM_BUILD_ROOT/Module.kabi - else - echo "**** NOTE: Cannot find DUP reference Module.kabi file. ****" - fi -%endif - -%if %{with_kabidw_base} - # Don't build kabi base for debug kernels - if [ "$Variant" != "zfcpdump" -a "$Variant" != "debug" ]; then - mkdir -p $RPM_BUILD_ROOT/kabi-dwarf - tar xjvf %{SOURCE301} -C $RPM_BUILD_ROOT/kabi-dwarf - - mkdir -p $RPM_BUILD_ROOT/kabi-dwarf/stablelists - tar xjvf %{SOURCE300} -C $RPM_BUILD_ROOT/kabi-dwarf/stablelists - - echo "**** GENERATING DWARF-based kABI baseline dataset ****" - chmod 0755 $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh - $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh generate \ - "$RPM_BUILD_ROOT/kabi-dwarf/stablelists/kabi-current/kabi_stablelist_%{_target_cpu}" \ - "$(pwd)" \ - "$RPM_BUILD_ROOT/kabidw-base/%{_target_cpu}${Variant:+.${Variant}}" || : - - rm -rf $RPM_BUILD_ROOT/kabi-dwarf - fi -%endif - -%if %{with_kabidwchk} - if [ "$Variant" != "zfcpdump" ]; then - mkdir -p $RPM_BUILD_ROOT/kabi-dwarf - tar xjvf %{SOURCE301} -C $RPM_BUILD_ROOT/kabi-dwarf - if [ -d "$RPM_BUILD_ROOT/kabi-dwarf/base/%{_target_cpu}${Variant:+.${Variant}}" ]; then - mkdir -p $RPM_BUILD_ROOT/kabi-dwarf/stablelists - tar xjvf %{SOURCE300} -C $RPM_BUILD_ROOT/kabi-dwarf/stablelists - - echo "**** GENERATING DWARF-based kABI dataset ****" - chmod 0755 $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh - $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh generate \ - "$RPM_BUILD_ROOT/kabi-dwarf/stablelists/kabi-current/kabi_stablelist_%{_target_cpu}" \ - "$(pwd)" \ - "$RPM_BUILD_ROOT/kabi-dwarf/base/%{_target_cpu}${Variant:+.${Variant}}.tmp" || : - - echo "**** kABI DWARF-based comparison report ****" - $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh compare \ - "$RPM_BUILD_ROOT/kabi-dwarf/base/%{_target_cpu}${Variant:+.${Variant}}" \ - "$RPM_BUILD_ROOT/kabi-dwarf/base/%{_target_cpu}${Variant:+.${Variant}}.tmp" || : - echo "**** End of kABI DWARF-based comparison report ****" - else - echo "**** Baseline dataset for kABI DWARF-BASED comparison report not found ****" - fi - - rm -rf $RPM_BUILD_ROOT/kabi-dwarf - fi -%endif - - # then drop all but the needed Makefiles/Kconfig files - rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts - rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include - cp .config $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a scripts $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts/tracing - rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts/spdxcheck.py - -%ifarch s390x - # CONFIG_EXPOLINE_EXTERN=y produces arch/s390/lib/expoline.o - # which is needed during external module build. - if [ -f arch/s390/lib/expoline.o ]; then - cp -a --parents arch/s390/lib/expoline.o $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - fi -%endif - - # Files for 'make scripts' to succeed with kernel-devel. - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/security/selinux/include - cp -a --parents security/selinux/include/classmap.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents security/selinux/include/initial_sid_to_string.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/tools/include/tools - cp -a --parents tools/include/tools/be_byteshift.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/tools/le_byteshift.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - - # Files for 'make prepare' to succeed with kernel-devel. - cp -a --parents tools/include/linux/compiler* $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/linux/types.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/build/Build.include $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/build/Build $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/build/fixdep.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/objtool/sync-check.sh $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/bpf/resolve_btfids $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - - cp --parents security/selinux/include/policycap_names.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents security/selinux/include/policycap.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - - cp -a --parents tools/include/asm-generic $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/linux $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/uapi/asm $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/uapi/asm-generic $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/uapi/linux $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/vdso $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/scripts/utilities.mak $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/lib/subcmd $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/lib/*.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/objtool/*.[ch] $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/objtool/Build $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/objtool/include/objtool/*.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/lib/bpf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/lib/bpf/Build $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - - if [ -f tools/objtool/objtool ]; then - cp -a tools/objtool/objtool $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/tools/objtool/ || : - fi - if [ -f tools/objtool/fixdep ]; then - cp -a tools/objtool/fixdep $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/tools/objtool/ || : - fi - if [ -d arch/$Arch/scripts ]; then - cp -a arch/$Arch/scripts $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/arch/%{_arch} || : - fi - if [ -f arch/$Arch/*lds ]; then - cp -a arch/$Arch/*lds $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/arch/%{_arch}/ || : - fi - if [ -f arch/%{asmarch}/kernel/module.lds ]; then - cp -a --parents arch/%{asmarch}/kernel/module.lds $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - fi - find $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts \( -iname "*.o" -o -iname "*.cmd" \) -exec rm -f {} + -%ifarch ppc64le - cp -a --parents arch/powerpc/lib/crtsavres.[So] $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ -%endif - if [ -d arch/%{asmarch}/include ]; then - cp -a --parents arch/%{asmarch}/include $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - fi -%ifarch aarch64 - # arch/arm64/include/asm/xen references arch/arm - cp -a --parents arch/arm/include/asm/xen $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - # arch/arm64/include/asm/opcodes.h references arch/arm - cp -a --parents arch/arm/include/asm/opcodes.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ -%endif - # include the machine specific headers for ARM variants, if available. -%ifarch %{arm} - if [ -d arch/%{asmarch}/mach-${Variant}/include ]; then - cp -a --parents arch/%{asmarch}/mach-${Variant}/include $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - fi - # include a few files for 'make prepare' - cp -a --parents arch/arm/tools/gen-mach-types $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/arm/tools/mach-types $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - -%endif - cp -a include $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include -%ifarch i686 x86_64 - # files for 'make prepare' to succeed with kernel-devel - cp -a --parents arch/x86/entry/syscalls/syscall_32.tbl $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/entry/syscalls/syscall_64.tbl $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs_32.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs_64.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs_common.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/purgatory/purgatory.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/purgatory/stack.S $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/purgatory/setup-x86_64.S $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/purgatory/entry64.S $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/boot/string.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/boot/string.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/boot/ctype.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - - cp -a --parents scripts/syscalltbl.sh $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents scripts/syscallhdr.sh $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - - cp -a --parents tools/arch/x86/include/asm $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/arch/x86/include/uapi/asm $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/objtool/arch/x86/lib $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/arch/x86/lib/ $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/arch/x86/tools/gen-insn-attr-x86.awk $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/objtool/arch/x86/ $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - -%endif - # Clean up intermediate tools files - find $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/tools \( -iname "*.o" -o -iname "*.cmd" \) -exec rm -f {} + - - # Make sure the Makefile, version.h, and auto.conf have a matching - # timestamp so that external modules can be built - touch -r $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/Makefile \ - $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include/generated/uapi/linux/version.h \ - $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include/config/auto.conf - -%if %{with_debuginfo} - eu-readelf -n vmlinux | grep "Build ID" | awk '{print $NF}' > vmlinux.id - cp vmlinux.id $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/vmlinux.id - - # - # save the vmlinux file for kernel debugging into the kernel-debuginfo rpm - # - mkdir -p $RPM_BUILD_ROOT%{debuginfodir}/lib/modules/$KernelVer - cp vmlinux $RPM_BUILD_ROOT%{debuginfodir}/lib/modules/$KernelVer - if [ -n "%{vmlinux_decompressor}" ]; then - eu-readelf -n %{vmlinux_decompressor} | grep "Build ID" | awk '{print $NF}' > vmlinux.decompressor.id - # Without build-id the build will fail. But for s390 the build-id - # wasn't added before 5.11. In case it is missing prefer not - # packaging the debuginfo over a build failure. - if [ -s vmlinux.decompressor.id ]; then - cp vmlinux.decompressor.id $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/vmlinux.decompressor.id - cp %{vmlinux_decompressor} $RPM_BUILD_ROOT%{debuginfodir}/lib/modules/$KernelVer/vmlinux.decompressor - fi - fi -%endif - - find $RPM_BUILD_ROOT/lib/modules/$KernelVer -name "*.ko" -type f >modnames - - # mark modules executable so that strip-to-file can strip them - xargs --no-run-if-empty chmod u+x < modnames - - # Generate a list of modules for block and networking. - - grep -F /drivers/ modnames | xargs --no-run-if-empty nm -upA | - sed -n 's,^.*/\([^/]*\.ko\): *U \(.*\)$,\1 \2,p' > drivers.undef - - collect_modules_list() - { - sed -r -n -e "s/^([^ ]+) \\.?($2)\$/\\1/p" drivers.undef | - LC_ALL=C sort -u > $RPM_BUILD_ROOT/lib/modules/$KernelVer/modules.$1 - if [ ! -z "$3" ]; then - sed -r -e "/^($3)\$/d" -i $RPM_BUILD_ROOT/lib/modules/$KernelVer/modules.$1 - fi - } - - collect_modules_list networking \ - 'register_netdev|ieee80211_register_hw|usbnet_probe|phy_driver_register|rt(l_|2x00)(pci|usb)_probe|register_netdevice' - collect_modules_list block \ - 'ata_scsi_ioctl|scsi_add_host|scsi_add_host_with_dma|blk_alloc_queue|blk_init_queue|register_mtd_blktrans|scsi_esp_register|scsi_register_device_handler|blk_queue_physical_block_size' 'pktcdvd.ko|dm-mod.ko' - collect_modules_list drm \ - 'drm_open|drm_init' - collect_modules_list modesetting \ - 'drm_crtc_init' - - # detect missing or incorrect license tags - ( find $RPM_BUILD_ROOT/lib/modules/$KernelVer -name '*.ko' | xargs /sbin/modinfo -l | \ - grep -E -v 'GPL( v2)?$|Dual BSD/GPL$|Dual MPL/GPL$|GPL and additional rights$' ) && exit 1 - - remove_depmod_files() - { - # remove files that will be auto generated by depmod at rpm -i time - pushd $RPM_BUILD_ROOT/lib/modules/$KernelVer/ - rm -f modules.{alias,alias.bin,builtin.alias.bin,builtin.bin} \ - modules.{dep,dep.bin,devname,softdep,symbols,symbols.bin} - popd - } - - remove_depmod_files - - # Identify modules in the kernel-modules-extras package - %{SOURCE20} $RPM_BUILD_ROOT lib/modules/$KernelVer $(realpath configs/mod-extra.list) - # Identify modules in the kernel-modules-extras package - %{SOURCE20} $RPM_BUILD_ROOT lib/modules/$KernelVer %{SOURCE84} internal - - # - # Generate the kernel-core and kernel-modules files lists - # - - # Copy the System.map file for depmod to use, and create a backup of the - # full module tree so we can restore it after we're done filtering - cp System.map $RPM_BUILD_ROOT/. - cp configs/filter-*.sh $RPM_BUILD_ROOT/. - pushd $RPM_BUILD_ROOT - mkdir restore - cp -r lib/modules/$KernelVer/* restore/. - - # don't include anything going into kernel-modules-extra in the file lists - xargs rm -rf < mod-extra.list - # don't include anything going int kernel-modules-internal in the file lists - xargs rm -rf < mod-internal.list - - if [ $DoModules -eq 1 ]; then - # Find all the module files and filter them out into the core and - # modules lists. This actually removes anything going into -modules - # from the dir. - find lib/modules/$KernelVer/kernel -name *.ko | sort -n > modules.list - ./filter-modules.sh modules.list %{_target_cpu} - rm filter-*.sh - - # Run depmod on the resulting module tree and make sure it isn't broken - depmod -b . -aeF ./System.map $KernelVer &> depmod.out - if [ -s depmod.out ]; then - echo "Depmod failure" - cat depmod.out - exit 1 - else - rm depmod.out - fi - else - # Ensure important files/directories exist to let the packaging succeed - echo '%%defattr(-,-,-)' > modules.list - echo '%%defattr(-,-,-)' > k-d.list - mkdir -p lib/modules/$KernelVer/kernel - # Add files usually created by make modules, needed to prevent errors - # thrown by depmod during package installation - touch lib/modules/$KernelVer/modules.order - touch lib/modules/$KernelVer/modules.builtin - fi - - remove_depmod_files - - # Go back and find all of the various directories in the tree. We use this - # for the dir lists in kernel-core - find lib/modules/$KernelVer/kernel -mindepth 1 -type d | sort -n > module-dirs.list - - # Cleanup - rm System.map - # Just "cp -r" can be very slow: here, it rewrites _existing files_ - # with open(O_TRUNC). Many filesystems synchronously wait for metadata - # update for such file rewrites (seen in strace as final close syscall - # taking a long time). On a rotational disk, cp was observed to take - # more than 5 minutes on ext4 and more than 15 minutes (!) on xfs. - # With --remove-destination, we avoid this, and copying - # (with enough RAM to cache it) takes 5 seconds: - cp -r --remove-destination restore/* lib/modules/$KernelVer/. - rm -rf restore - popd - - # Make sure the files lists start with absolute paths or rpmbuild fails. - # Also add in the dir entries - sed -e 's/^lib*/\/lib/' %{?zipsed} $RPM_BUILD_ROOT/k-d.list > ../kernel${Variant:+-${Variant}}-modules.list - sed -e 's/^lib*/%dir \/lib/' %{?zipsed} $RPM_BUILD_ROOT/module-dirs.list > ../kernel${Variant:+-${Variant}}-core.list - sed -e 's/^lib*/\/lib/' %{?zipsed} $RPM_BUILD_ROOT/modules.list >> ../kernel${Variant:+-${Variant}}-core.list - sed -e 's/^lib*/\/lib/' %{?zipsed} $RPM_BUILD_ROOT/mod-extra.list >> ../kernel${Variant:+-${Variant}}-modules-extra.list - sed -e 's/^lib*/\/lib/' %{?zipsed} $RPM_BUILD_ROOT/mod-internal.list >> ../kernel${Variant:+-${Variant}}-modules-internal.list - - # Cleanup - rm -f $RPM_BUILD_ROOT/k-d.list - rm -f $RPM_BUILD_ROOT/modules.list - rm -f $RPM_BUILD_ROOT/module-dirs.list - rm -f $RPM_BUILD_ROOT/mod-extra.list - rm -f $RPM_BUILD_ROOT/mod-internal.list - -%if %{signmodules} - if [ $DoModules -eq 1 ]; then - # Save the signing keys so we can sign the modules in __modsign_install_post - cp certs/signing_key.pem certs/signing_key.pem.sign${Variant:++${Variant}} - cp certs/signing_key.x509 certs/signing_key.x509.sign${Variant:++${Variant}} - fi -%endif - - # Move the devel headers out of the root file system - mkdir -p $RPM_BUILD_ROOT/usr/src/kernels - mv $RPM_BUILD_ROOT/lib/modules/$KernelVer/build $RPM_BUILD_ROOT/$DevelDir - - # This is going to create a broken link during the build, but we don't use - # it after this point. We need the link to actually point to something - # when kernel-devel is installed, and a relative link doesn't work across - # the F17 UsrMove feature. - ln -sf $DevelDir $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - -%ifnarch armv7hl - # Generate vmlinux.h and put it to kernel-devel path - bpftool btf dump file vmlinux format c > $RPM_BUILD_ROOT/$DevelDir/vmlinux.h -%endif - - # prune junk from kernel-devel - find $RPM_BUILD_ROOT/usr/src/kernels -name ".*.cmd" -delete - - # Red Hat UEFI Secure Boot CA cert, which can be used to authenticate the kernel - mkdir -p $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer - %ifarch x86_64 aarch64 - install -m 0644 %{secureboot_ca_0} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca-20200609.cer - install -m 0644 %{secureboot_ca_1} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca-20140212.cer - ln -s kernel-signing-ca-20200609.cer $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca.cer - %else - install -m 0644 %{secureboot_ca_0} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca.cer - %endif - %ifarch s390x ppc64le - if [ $DoModules -eq 1 ]; then - if [ -x /usr/bin/rpm-sign ]; then - install -m 0644 %{secureboot_key_0} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/%{signing_key_filename} - else - install -m 0644 certs/signing_key.x509.sign${Variant:++${Variant}} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca.cer - openssl x509 -in certs/signing_key.pem.sign${Variant:++${Variant}} -outform der -out $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/%{signing_key_filename} - chmod 0644 $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/%{signing_key_filename} - fi - fi - %endif - -%if %{with_ipaclones} - MAXPROCS=$(echo %{?_smp_mflags} | sed -n 's/-j\s*\([0-9]\+\)/\1/p') - if [ -z "$MAXPROCS" ]; then - MAXPROCS=1 - fi - if [ "$Variant" == "" ]; then - mkdir -p $RPM_BUILD_ROOT/$DevelDir-ipaclones - find . -name '*.ipa-clones' | xargs -i{} -r -n 1 -P $MAXPROCS install -m 644 -D "{}" "$RPM_BUILD_ROOT/$DevelDir-ipaclones/{}" - fi -%endif - -} - -### -# DO it... -### - -# prepare directories -rm -rf $RPM_BUILD_ROOT -mkdir -p $RPM_BUILD_ROOT/boot -mkdir -p $RPM_BUILD_ROOT%{_libexecdir} - -cd linux-%{KVERREL} - - -%if %{with_debug} -BuildKernel %make_target %kernel_image %{_use_vdso} debug -%endif - -%if %{with_zfcpdump} -BuildKernel %make_target %kernel_image %{_use_vdso} zfcpdump -%endif - -%if %{with_pae} -BuildKernel %make_target %kernel_image %{use_vdso} lpae -%endif - -%if %{with_up} -BuildKernel %make_target %kernel_image %{_use_vdso} -%endif - -%ifnarch noarch i686 -%if !%{with_debug} && !%{with_zfcpdump} && !%{with_pae} && !%{with_up} -# If only building the user space tools, then initialize the build environment -# and some variables so that the various userspace tools can be built. -InitBuildVars -%endif -%endif - -%ifarch aarch64 -%global perf_build_extra_opts CORESIGHT=1 -%endif -%global perf_make \ - %{__make} %{?make_opts} EXTRA_CFLAGS="${RPM_OPT_FLAGS}" LDFLAGS="%{__global_ldflags}" %{?cross_opts} -C tools/perf V=1 NO_PERF_READ_VDSO32=1 NO_PERF_READ_VDSOX32=1 WERROR=0 NO_LIBUNWIND=1 HAVE_CPLUS_DEMANGLE=1 NO_GTK2=1 NO_STRLCPY=1 NO_BIONIC=1 LIBBPF_DYNAMIC=1 LIBTRACEEVENT_DYNAMIC=1 %{?perf_build_extra_opts} prefix=%{_prefix} PYTHON=%{__python3} -%if %{with_perf} -# perf -# make sure check-headers.sh is executable -chmod +x tools/perf/check-headers.sh -%{perf_make} DESTDIR=$RPM_BUILD_ROOT all -%endif - -%global tools_make \ - CFLAGS="${RPM_OPT_FLAGS}" LDFLAGS="%{__global_ldflags}" %{make} %{?make_opts} - -%if %{with_tools} -%ifarch %{cpupowerarchs} -# cpupower -# make sure version-gen.sh is executable. -chmod +x tools/power/cpupower/utils/version-gen.sh -%{tools_make} %{?_smp_mflags} -C tools/power/cpupower CPUFREQ_BENCH=false DEBUG=false -%ifarch x86_64 - pushd tools/power/cpupower/debug/x86_64 - %{tools_make} %{?_smp_mflags} centrino-decode powernow-k8-decode - popd -%endif -%ifarch x86_64 - pushd tools/power/x86/x86_energy_perf_policy/ - %{tools_make} - popd - pushd tools/power/x86/turbostat - %{tools_make} - popd - pushd tools/power/x86/intel-speed-select - %{tools_make} - popd - pushd tools/arch/x86/intel_sdsi - %{tools_make} CFLAGS="${RPM_OPT_FLAGS}" - popd -%endif -%endif -pushd tools/thermal/tmon/ -%{tools_make} -popd -pushd tools/iio/ -%{tools_make} -popd -pushd tools/gpio/ -%{tools_make} -popd -# build VM tools -pushd tools/vm/ -%{tools_make} slabinfo page_owner_sort -popd -%endif - -if [ -f $DevelDir/vmlinux.h ]; then - RPM_VMLINUX_H=$DevelDir/vmlinux.h -fi - -%global bpftool_make \ - %{__make} EXTRA_CFLAGS="${RPM_OPT_FLAGS}" EXTRA_LDFLAGS="%{__global_ldflags}" DESTDIR=$RPM_BUILD_ROOT %{?make_opts} VMLINUX_H="${RPM_VMLINUX_H}" V=1 -%if %{with_bpftool} -pushd tools/bpf/bpftool -%{bpftool_make} -popd -%endif - -%if %{with_selftests} -# Unfortunately, samples/bpf/Makefile expects that the headers are installed -# in the source tree. We installed them previously to $RPM_BUILD_ROOT/usr -# but there's no way to tell the Makefile to take them from there. -%{make} %{?_smp_mflags} headers_install -%{make} %{?_smp_mflags} ARCH=$Arch V=1 M=samples/bpf/ || true - -# Prevent bpf selftests to build bpftool repeatedly: -export BPFTOOL=$(pwd)/tools/bpf/bpftool/bpftool - -pushd tools/testing/selftests -# We need to install here because we need to call make with ARCH set which -# doesn't seem possible to do in the install section. -%{make} %{?_smp_mflags} ARCH=$Arch V=1 TARGETS="bpf vm livepatch net net/forwarding net/mptcp netfilter tc-testing" SKIP_TARGETS="" INSTALL_PATH=%{buildroot}%{_libexecdir}/kselftests VMLINUX_H="${RPM_VMLINUX_H}" install - -# 'make install' for bpf is broken and upstream refuses to fix it. -# Install the needed files manually. -for dir in bpf bpf/no_alu32 bpf/progs; do - # In ARK, the rpm build continues even if some of the selftests - # cannot be built. It's not always possible to build selftests, - # as upstream sometimes dependens on too new llvm version or has - # other issues. If something did not get built, just skip it. - test -d $dir || continue - mkdir -p %{buildroot}%{_libexecdir}/kselftests/$dir - find $dir -maxdepth 1 -type f \( -executable -o -name '*.py' -o -name settings -o \ - -name 'btf_dump_test_case_*.c' -o -name '*.ko' -o \ - -name '*.o' -exec sh -c 'readelf -h "{}" | grep -q "^ Machine:.*BPF"' \; \) -print0 | \ - xargs -0 cp -t %{buildroot}%{_libexecdir}/kselftests/$dir || true -done -popd -export -n BPFTOOL -%endif - -%if %{with_doc} -# Make the HTML pages. -%{__make} PYTHON=/usr/bin/python3 htmldocs || %{doc_build_fail} - -# sometimes non-world-readable files sneak into the kernel source tree -chmod -R a=rX Documentation -find Documentation -type d | xargs chmod u+w -%endif - -# In the modsign case, we do 3 things. 1) We check the "variant" and hard -# code the value in the following invocations. This is somewhat sub-optimal -# but we're doing this inside of an RPM macro and it isn't as easy as it -# could be because of that. 2) We restore the .tmp_versions/ directory from -# the one we saved off in BuildKernel above. This is to make sure we're -# signing the modules we actually built/installed in that variant. 3) We -# grab the arch and invoke mod-sign.sh command to actually sign the modules. -# -# We have to do all of those things _after_ find-debuginfo runs, otherwise -# that will strip the signature off of the modules. -# -# Don't sign modules for the zfcpdump variant as it is monolithic. - -%define __modsign_install_post \ - if [ "%{signmodules}" -eq "1" ]; then \ - if [ "%{with_pae}" -ne "0" ]; then \ - %{modsign_cmd} certs/signing_key.pem.sign+lpae certs/signing_key.x509.sign+lpae $RPM_BUILD_ROOT/lib/modules/%{KVERREL}+lpae/ \ - fi \ - if [ "%{with_debug}" -ne "0" ]; then \ - %{modsign_cmd} certs/signing_key.pem.sign+debug certs/signing_key.x509.sign+debug $RPM_BUILD_ROOT/lib/modules/%{KVERREL}+debug/ \ - fi \ - if [ "%{with_up}" -ne "0" ]; then \ - %{modsign_cmd} certs/signing_key.pem.sign certs/signing_key.x509.sign $RPM_BUILD_ROOT/lib/modules/%{KVERREL}/ \ - fi \ - fi \ - if [ "%{zipmodules}" -eq "1" ]; then \ - find $RPM_BUILD_ROOT/lib/modules/ -type f -name '*.ko' | xargs -P${RPM_BUILD_NCPUS} -r xz; \ - fi \ -%{nil} - -### -### Special hacks for debuginfo subpackages. -### - -# This macro is used by %%install, so we must redefine it before that. -%define debug_package %{nil} - -%if %{with_debuginfo} - -%ifnarch noarch -%global __debug_package 1 -%files -f debugfiles.list debuginfo-common-%{_target_cpu} -%endif - -%endif - -# We don't want to package debuginfo for self-tests and samples but -# we have to delete them to avoid an error messages about unpackaged -# files. -# Delete the debuginfo for kernel-devel files -%define __remove_unwanted_dbginfo_install_post \ - if [ "%{with_selftests}" -ne "0" ]; then \ - rm -rf $RPM_BUILD_ROOT/usr/lib/debug/usr/libexec/ksamples; \ - rm -rf $RPM_BUILD_ROOT/usr/lib/debug/usr/libexec/kselftests; \ - fi \ - rm -rf $RPM_BUILD_ROOT/usr/lib/debug/usr/src; \ -%{nil} - -# -# Disgusting hack alert! We need to ensure we sign modules *after* all -# invocations of strip occur, which is in __debug_install_post if -# find-debuginfo.sh runs, and __os_install_post if not. -# -%define __spec_install_post \ - %{?__debug_package:%{__debug_install_post}}\ - %{__arch_install_post}\ - %{__os_install_post}\ - %{__remove_unwanted_dbginfo_install_post}\ - %{__modsign_install_post} - -### -### install -### - -%install - -cd linux-%{KVERREL} - -%if %{with_doc} -docdir=$RPM_BUILD_ROOT%{_datadir}/doc/kernel-doc-%{specversion}-%{pkgrelease} - -# copy the source over -mkdir -p $docdir -tar -h -f - --exclude=man --exclude='.*' -c Documentation | tar xf - -C $docdir - -# with_doc -%endif - -# We have to do the headers install before the tools install because the -# kernel headers_install will remove any header files in /usr/include that -# it doesn't install itself. - -%if %{with_headers} -# Install kernel headers -%{__make} ARCH=%{hdrarch} INSTALL_HDR_PATH=$RPM_BUILD_ROOT/usr headers_install - -find $RPM_BUILD_ROOT/usr/include \ - \( -name .install -o -name .check -o \ - -name ..install.cmd -o -name ..check.cmd \) -delete - -%endif - -%if %{with_cross_headers} -%if 0%{?fedora} -HDR_ARCH_LIST='arm arm64 powerpc s390 x86' -%else -HDR_ARCH_LIST='arm64 powerpc s390 x86' -%endif -mkdir -p $RPM_BUILD_ROOT/usr/tmp-headers - -for arch in $HDR_ARCH_LIST; do - mkdir $RPM_BUILD_ROOT/usr/tmp-headers/arch-${arch} - %{__make} ARCH=${arch} INSTALL_HDR_PATH=$RPM_BUILD_ROOT/usr/tmp-headers/arch-${arch} headers_install -done - -find $RPM_BUILD_ROOT/usr/tmp-headers \ - \( -name .install -o -name .check -o \ - -name ..install.cmd -o -name ..check.cmd \) -delete - -# Copy all the architectures we care about to their respective asm directories -for arch in $HDR_ARCH_LIST ; do - mkdir -p $RPM_BUILD_ROOT/usr/${arch}-linux-gnu/include - mv $RPM_BUILD_ROOT/usr/tmp-headers/arch-${arch}/include/* $RPM_BUILD_ROOT/usr/${arch}-linux-gnu/include/ -done - -rm -rf $RPM_BUILD_ROOT/usr/tmp-headers -%endif - -%if %{with_kernel_abi_stablelists} -# kabi directory -INSTALL_KABI_PATH=$RPM_BUILD_ROOT/lib/modules/ -mkdir -p $INSTALL_KABI_PATH - -# install kabi releases directories -tar xjvf %{SOURCE300} -C $INSTALL_KABI_PATH -# with_kernel_abi_stablelists -%endif - -%if %{with_perf} -# perf tool binary and supporting scripts/binaries -%{perf_make} DESTDIR=$RPM_BUILD_ROOT lib=%{_lib} install-bin -# remove the 'trace' symlink. -rm -f %{buildroot}%{_bindir}/trace - -# For both of the below, yes, this should be using a macro but right now -# it's hard coded and we don't actually want it anyway right now. -# Whoever wants examples can fix it up! - -# remove examples -rm -rf %{buildroot}/usr/lib/perf/examples -rm -rf %{buildroot}/usr/lib/perf/include - -# python-perf extension -%{perf_make} DESTDIR=$RPM_BUILD_ROOT install-python_ext - -# perf man pages (note: implicit rpm magic compresses them later) -mkdir -p %{buildroot}/%{_mandir}/man1 -%{perf_make} DESTDIR=$RPM_BUILD_ROOT install-man - -# remove any tracevent files, eg. its plugins still gets built and installed, -# even if we build against system's libtracevent during perf build (by setting -# LIBTRACEEVENT_DYNAMIC=1 above in perf_make macro). Those files should already -# ship with libtraceevent package. -rm -rf %{buildroot}%{_libdir}/traceevent -%endif - -%if %{with_tools} -%ifarch %{cpupowerarchs} -%{make} -C tools/power/cpupower DESTDIR=$RPM_BUILD_ROOT libdir=%{_libdir} mandir=%{_mandir} CPUFREQ_BENCH=false install -rm -f %{buildroot}%{_libdir}/*.{a,la} -%find_lang cpupower -mv cpupower.lang ../ -%ifarch x86_64 - pushd tools/power/cpupower/debug/x86_64 - install -m755 centrino-decode %{buildroot}%{_bindir}/centrino-decode - install -m755 powernow-k8-decode %{buildroot}%{_bindir}/powernow-k8-decode - popd -%endif -chmod 0755 %{buildroot}%{_libdir}/libcpupower.so* -mkdir -p %{buildroot}%{_unitdir} %{buildroot}%{_sysconfdir}/sysconfig -install -m644 %{SOURCE2000} %{buildroot}%{_unitdir}/cpupower.service -install -m644 %{SOURCE2001} %{buildroot}%{_sysconfdir}/sysconfig/cpupower -%endif -%ifarch x86_64 - mkdir -p %{buildroot}%{_mandir}/man8 - pushd tools/power/x86/x86_energy_perf_policy - %{tools_make} DESTDIR=%{buildroot} install - popd - pushd tools/power/x86/turbostat - %{tools_make} DESTDIR=%{buildroot} install - popd - pushd tools/power/x86/intel-speed-select - %{tools_make} DESTDIR=%{buildroot} install - popd - pushd tools/arch/x86/intel_sdsi - %{tools_make} CFLAGS="${RPM_OPT_FLAGS}" DESTDIR=%{buildroot} install - popd -%endif -pushd tools/thermal/tmon -%{tools_make} INSTALL_ROOT=%{buildroot} install -popd -pushd tools/iio -%{tools_make} DESTDIR=%{buildroot} install -popd -pushd tools/gpio -%{tools_make} DESTDIR=%{buildroot} install -popd -install -m644 -D %{SOURCE2002} %{buildroot}%{_sysconfdir}/logrotate.d/kvm_stat -pushd tools/kvm/kvm_stat -%{__make} INSTALL_ROOT=%{buildroot} install-tools -%{__make} INSTALL_ROOT=%{buildroot} install-man -install -m644 -D kvm_stat.service %{buildroot}%{_unitdir}/kvm_stat.service -popd -# install VM tools -pushd tools/vm/ -install -m755 slabinfo %{buildroot}%{_bindir}/slabinfo -install -m755 page_owner_sort %{buildroot}%{_bindir}/page_owner_sort -popd -%endif - -if [ -f $DevelDir/vmlinux.h ]; then - RPM_VMLINUX_H=$DevelDir/vmlinux.h -fi - -%if %{with_bpftool} -pushd tools/bpf/bpftool -%{bpftool_make} prefix=%{_prefix} bash_compdir=%{_sysconfdir}/bash_completion.d/ mandir=%{_mandir} install doc-install -popd -%endif - -%if %{with_selftests} -pushd samples -install -d %{buildroot}%{_libexecdir}/ksamples -# install bpf samples -pushd bpf -install -d %{buildroot}%{_libexecdir}/ksamples/bpf -find -type f -executable -exec install -m755 {} %{buildroot}%{_libexecdir}/ksamples/bpf \; -install -m755 *.sh %{buildroot}%{_libexecdir}/ksamples/bpf -# test_lwt_bpf.sh compiles test_lwt_bpf.c when run; this works only from the -# kernel tree. Just remove it. -rm %{buildroot}%{_libexecdir}/ksamples/bpf/test_lwt_bpf.sh -install -m644 *_kern.o %{buildroot}%{_libexecdir}/ksamples/bpf || true -install -m644 tcp_bpf.readme %{buildroot}%{_libexecdir}/ksamples/bpf -popd -# install pktgen samples -pushd pktgen -install -d %{buildroot}%{_libexecdir}/ksamples/pktgen -find . -type f -executable -exec install -m755 {} %{buildroot}%{_libexecdir}/ksamples/pktgen/{} \; -find . -type f ! -executable -exec install -m644 {} %{buildroot}%{_libexecdir}/ksamples/pktgen/{} \; -popd -popd -# install vm selftests -pushd tools/testing/selftests/vm -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/vm/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/vm/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/vm/{} \; -popd -# install drivers/net/mlxsw selftests -pushd tools/testing/selftests/drivers/net/mlxsw -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/drivers/net/mlxsw/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/drivers/net/mlxsw/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/drivers/net/mlxsw/{} \; -popd -# install drivers/net/netdevsim selftests -pushd tools/testing/selftests/drivers/net/netdevsim -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/drivers/net/netdevsim/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/drivers/net/netdevsim/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/drivers/net/netdevsim/{} \; -popd -# install net/forwarding selftests -pushd tools/testing/selftests/net/forwarding -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/net/forwarding/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/net/forwarding/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/net/forwarding/{} \; -popd -# install net/mptcp selftests -pushd tools/testing/selftests/net/mptcp -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/net/mptcp/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/net/mptcp/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/net/mptcp/{} \; -popd -# install tc-testing selftests -pushd tools/testing/selftests/tc-testing -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/tc-testing/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/tc-testing/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/tc-testing/{} \; -popd -# install livepatch selftests -pushd tools/testing/selftests/livepatch -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/livepatch/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/livepatch/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/livepatch/{} \; -popd -# install netfilter selftests -pushd tools/testing/selftests/netfilter -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/netfilter/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/netfilter/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/netfilter/{} \; -popd -%endif - -### -### clean -### - -### -### scripts -### - -%if %{with_tools} -%post -n kernel-tools-libs -/sbin/ldconfig - -%postun -n kernel-tools-libs -/sbin/ldconfig -%endif - -# -# This macro defines a %%post script for a kernel*-devel package. -# %%kernel_devel_post [<subpackage>] -# Note we don't run hardlink if ostree is in use, as ostree is -# a far more sophisticated hardlink implementation. -# https://github.com/projectatomic/rpm-ostree/commit/58a79056a889be8814aa51f507b2c7a4dccee526 -# -# The deletion of *.hardlink-temporary files is a temporary workaround -# for this bug in the hardlink binary (fixed in util-linux 2.38): -# https://github.com/util-linux/util-linux/issues/1602 -# -%define kernel_devel_post() \ -%{expand:%%post %{?1:%{1}-}devel}\ -if [ -f /etc/sysconfig/kernel ]\ -then\ - . /etc/sysconfig/kernel || exit $?\ -fi\ -if [ "$HARDLINK" != "no" -a -x /usr/bin/hardlink -a ! -e /run/ostree-booted ] \ -then\ - (cd /usr/src/kernels/%{KVERREL}%{?1:+%{1}} &&\ - /usr/bin/find . -type f | while read f; do\ - hardlink -c /usr/src/kernels/*%{?dist}.*/$f $f > /dev/null\ - done;\ - /usr/bin/find /usr/src/kernels -type f -name '*.hardlink-temporary' -delete\ - )\ -fi\ -%{nil} - -# -# This macro defines a %%post script for a kernel*-modules-extra package. -# It also defines a %%postun script that does the same thing. -# %%kernel_modules_extra_post [<subpackage>] -# -%define kernel_modules_extra_post() \ -%{expand:%%post %{?1:%{1}-}modules-extra}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil}\ -%{expand:%%postun %{?1:%{1}-}modules-extra}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil} - -# -# This macro defines a %%post script for a kernel*-modules-internal package. -# It also defines a %%postun script that does the same thing. -# %%kernel_modules_internal_post [<subpackage>] -# -%define kernel_modules_internal_post() \ -%{expand:%%post %{?1:%{1}-}modules-internal}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil}\ -%{expand:%%postun %{?1:%{1}-}modules-internal}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil} - -# -# This macro defines a %%post script for a kernel*-modules package. -# It also defines a %%postun script that does the same thing. -# %%kernel_modules_post [<subpackage>] -# -%define kernel_modules_post() \ -%{expand:%%post %{?1:%{1}-}modules}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -if [ ! -f %{_localstatedir}/lib/rpm-state/%{name}/installing_core_%{KVERREL}%{?1:+%{1}} ]; then\ - mkdir -p %{_localstatedir}/lib/rpm-state/%{name}\ - touch %{_localstatedir}/lib/rpm-state/%{name}/need_to_run_dracut_%{KVERREL}%{?1:+%{1}}\ -fi\ -%{nil}\ -%{expand:%%postun %{?1:%{1}-}modules}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil}\ -%{expand:%%posttrans %{?1:%{1}-}modules}\ -if [ -f %{_localstatedir}/lib/rpm-state/%{name}/need_to_run_dracut_%{KVERREL}%{?1:+%{1}} ]; then\ - rm -f %{_localstatedir}/lib/rpm-state/%{name}/need_to_run_dracut_%{KVERREL}%{?1:+%{1}}\ - echo "Running: dracut -f --kver %{KVERREL}%{?1:+%{1}}"\ - dracut -f --kver "%{KVERREL}%{?1:+%{1}}" || exit $?\ -fi\ -%{nil} - -# This macro defines a %%posttrans script for a kernel package. -# %%kernel_variant_posttrans [<subpackage>] -# More text can follow to go at the end of this variant's %%post. -# -%define kernel_variant_posttrans() \ -%{expand:%%posttrans %{?1:%{1}-}core}\ -%if 0%{!?fedora:1}\ -if [ -x %{_sbindir}/weak-modules ]\ -then\ - %{_sbindir}/weak-modules --add-kernel %{KVERREL}%{?1:+%{1}} || exit $?\ -fi\ -%endif\ -rm -f %{_localstatedir}/lib/rpm-state/%{name}/installing_core_%{KVERREL}%{?1:+%{1}}\ -/bin/kernel-install add %{KVERREL}%{?1:+%{1}} /lib/modules/%{KVERREL}%{?1:+%{1}}/vmlinuz || exit $?\ -%{nil} - -# -# This macro defines a %%post script for a kernel package and its devel package. -# %%kernel_variant_post [-v <subpackage>] [-r <replace>] -# More text can follow to go at the end of this variant's %%post. -# -%define kernel_variant_post(v:r:) \ -%{expand:%%kernel_devel_post %{?-v*}}\ -%{expand:%%kernel_modules_post %{?-v*}}\ -%{expand:%%kernel_modules_extra_post %{?-v*}}\ -%{expand:%%kernel_modules_internal_post %{?-v*}}\ -%{expand:%%kernel_variant_posttrans %{?-v*}}\ -%{expand:%%post %{?-v*:%{-v*}-}core}\ -%{-r:\ -if [ `uname -i` == "x86_64" -o `uname -i` == "i386" ] &&\ - [ -f /etc/sysconfig/kernel ]; then\ - /bin/sed -r -i -e 's/^DEFAULTKERNEL=%{-r*}$/DEFAULTKERNEL=kernel%{?-v:-%{-v*}}/' /etc/sysconfig/kernel || exit $?\ -fi}\ -mkdir -p %{_localstatedir}/lib/rpm-state/%{name}\ -touch %{_localstatedir}/lib/rpm-state/%{name}/installing_core_%{KVERREL}%{?1:+%{1}}\ -%{nil} - -# -# This macro defines a %%preun script for a kernel package. -# %%kernel_variant_preun <subpackage> -# -%define kernel_variant_preun() \ -%{expand:%%preun %{?1:%{1}-}core}\ -/bin/kernel-install remove %{KVERREL}%{?1:+%{1}} /lib/modules/%{KVERREL}%{?1:+%{1}}/vmlinuz || exit $?\ -if [ -x %{_sbindir}/weak-modules ]\ -then\ - %{_sbindir}/weak-modules --remove-kernel %{KVERREL}%{?1:+%{1}} || exit $?\ -fi\ -%{nil} - -%kernel_variant_preun -%kernel_variant_post -r kernel-smp - -%if %{with_pae} -%kernel_variant_preun lpae -%kernel_variant_post -v lpae -r (kernel|kernel-smp) -%endif - -%if %{with_debug} -%kernel_variant_preun debug -%kernel_variant_post -v debug -%endif - -%if %{with_zfcpdump} -%kernel_variant_preun zfcpdump -%kernel_variant_post -v zfcpdump -%endif - -if [ -x /sbin/ldconfig ] -then - /sbin/ldconfig -X || exit $? -fi - -### -### file lists -### - -%if %{with_headers} -%files headers -/usr/include/* -%endif - -%if %{with_cross_headers} -%files cross-headers -/usr/*-linux-gnu/include/* -%endif - -%if %{with_kernel_abi_stablelists} -%files -n kernel-abi-stablelists -/lib/modules/kabi-* -%endif - -%if %{with_kabidw_base} -%ifarch x86_64 s390x ppc64 ppc64le aarch64 -%files kernel-kabidw-base-internal -%defattr(-,root,root) -/kabidw-base/%{_target_cpu}/* -%endif -%endif - -# only some architecture builds need kernel-doc -%if %{with_doc} -%files doc -%defattr(-,root,root) -%{_datadir}/doc/kernel-doc-%{specversion}-%{pkgrelease}/Documentation/* -%dir %{_datadir}/doc/kernel-doc-%{specversion}-%{pkgrelease}/Documentation -%dir %{_datadir}/doc/kernel-doc-%{specversion}-%{pkgrelease} -%endif - -%if %{with_perf} -%files -n perf -%{_bindir}/perf -%{_libdir}/libperf-jvmti.so -%dir %{_libexecdir}/perf-core -%{_libexecdir}/perf-core/* -%{_datadir}/perf-core/* -%{_mandir}/man[1-8]/perf* -%{_sysconfdir}/bash_completion.d/perf -%doc linux-%{KVERREL}/tools/perf/Documentation/examples.txt -%{_docdir}/perf-tip/tips.txt - -%files -n python3-perf -%{python3_sitearch}/* - -%if %{with_debuginfo} -%files -f perf-debuginfo.list -n perf-debuginfo - -%files -f python3-perf-debuginfo.list -n python3-perf-debuginfo -%endif -# with_perf -%endif - -%if %{with_tools} -%ifnarch %{cpupowerarchs} -%files -n kernel-tools -%else -%files -n kernel-tools -f cpupower.lang -%{_bindir}/cpupower -%{_datadir}/bash-completion/completions/cpupower -%ifarch x86_64 -%{_bindir}/centrino-decode -%{_bindir}/powernow-k8-decode -%endif -%{_unitdir}/cpupower.service -%{_mandir}/man[1-8]/cpupower* -%config(noreplace) %{_sysconfdir}/sysconfig/cpupower -%ifarch x86_64 -%{_bindir}/x86_energy_perf_policy -%{_mandir}/man8/x86_energy_perf_policy* -%{_bindir}/turbostat -%{_mandir}/man8/turbostat* -%{_bindir}/intel-speed-select -%{_sbindir}/intel_sdsi -%endif -# cpupowerarchs -%endif -%{_bindir}/tmon -%{_bindir}/iio_event_monitor -%{_bindir}/iio_generic_buffer -%{_bindir}/lsiio -%{_bindir}/lsgpio -%{_bindir}/gpio-hammer -%{_bindir}/gpio-event-mon -%{_bindir}/gpio-watch -%{_mandir}/man1/kvm_stat* -%{_bindir}/kvm_stat -%{_unitdir}/kvm_stat.service -%config(noreplace) %{_sysconfdir}/logrotate.d/kvm_stat -%{_bindir}/page_owner_sort -%{_bindir}/slabinfo - -%if %{with_debuginfo} -%files -f kernel-tools-debuginfo.list -n kernel-tools-debuginfo -%endif - -%ifarch %{cpupowerarchs} -%files -n kernel-tools-libs -%{_libdir}/libcpupower.so.0 -%{_libdir}/libcpupower.so.0.0.1 - -%files -n kernel-tools-libs-devel -%{_libdir}/libcpupower.so -%{_includedir}/cpufreq.h -%endif -# with_tools -%endif - -%if %{with_bpftool} -%files -n bpftool -%{_sbindir}/bpftool -%{_sysconfdir}/bash_completion.d/bpftool -%{_mandir}/man8/bpftool-cgroup.8.gz -%{_mandir}/man8/bpftool-gen.8.gz -%{_mandir}/man8/bpftool-iter.8.gz -%{_mandir}/man8/bpftool-link.8.gz -%{_mandir}/man8/bpftool-map.8.gz -%{_mandir}/man8/bpftool-prog.8.gz -%{_mandir}/man8/bpftool-perf.8.gz -%{_mandir}/man8/bpftool.8.gz -%{_mandir}/man8/bpftool-net.8.gz -%{_mandir}/man8/bpftool-feature.8.gz -%{_mandir}/man8/bpftool-btf.8.gz -%{_mandir}/man8/bpftool-struct_ops.8.gz - -%if %{with_debuginfo} -%files -f bpftool-debuginfo.list -n bpftool-debuginfo -%defattr(-,root,root) -%endif -%endif - -%if %{with_selftests} -%files selftests-internal -%{_libexecdir}/ksamples -%{_libexecdir}/kselftests -%endif - -# empty meta-package -%ifnarch %nobuildarches noarch -%files -%endif - -%if %{with_gcov} -%ifnarch %nobuildarches noarch -%files gcov -%{_builddir} -%endif -%endif - -# This is %%{image_install_path} on an arch where that includes ELF files, -# or empty otherwise. -%define elf_image_install_path %{?kernel_image_elf:%{image_install_path}} - -# -# This macro defines the %%files sections for a kernel package -# and its devel and debuginfo packages. -# %%kernel_variant_files [-k vmlinux] <use_vdso> <condition> <subpackage> -# -%define kernel_variant_files(k:) \ -%if %{2}\ -%{expand:%%files -f kernel-%{?3:%{3}-}core.list %{?1:-f kernel-%{?3:%{3}-}ldsoconf.list} %{?3:%{3}-}core}\ -%{!?_licensedir:%global license %%doc}\ -%license linux-%{KVERREL}/COPYING-%{version}-%{release}\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/%{?-k:%{-k*}}%{!?-k:vmlinuz}\ -%ghost /%{image_install_path}/%{?-k:%{-k*}}%{!?-k:vmlinuz}-%{KVERREL}%{?3:+%{3}}\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/.vmlinuz.hmac \ -%ghost /%{image_install_path}/.vmlinuz-%{KVERREL}%{?3:+%{3}}.hmac \ -%ifarch %{arm} aarch64\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/dtb \ -%ghost /%{image_install_path}/dtb-%{KVERREL}%{?3:+%{3}} \ -%endif\ -%attr(0600, root, root) /lib/modules/%{KVERREL}%{?3:+%{3}}/System.map\ -%ghost %attr(0600, root, root) /boot/System.map-%{KVERREL}%{?3:+%{3}}\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/symvers.gz\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/config\ -%ghost %attr(0600, root, root) /boot/symvers-%{KVERREL}%{?3:+%{3}}.gz\ -%ghost %attr(0600, root, root) /boot/initramfs-%{KVERREL}%{?3:+%{3}}.img\ -%ghost %attr(0644, root, root) /boot/config-%{KVERREL}%{?3:+%{3}}\ -%dir /lib/modules\ -%dir /lib/modules/%{KVERREL}%{?3:+%{3}}\ -%dir /lib/modules/%{KVERREL}%{?3:+%{3}}/kernel\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/build\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/source\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/updates\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/weak-updates\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/systemtap\ -%{_datadir}/doc/kernel-keys/%{KVERREL}%{?3:+%{3}}\ -%if %{1}\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/vdso\ -%endif\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/modules.*\ -%{expand:%%files -f kernel-%{?3:%{3}-}modules.list %{?3:%{3}-}modules}\ -%{expand:%%files %{?3:%{3}-}devel}\ -%defverify(not mtime)\ -/usr/src/kernels/%{KVERREL}%{?3:+%{3}}\ -%{expand:%%files %{?3:%{3}-}devel-matched}\ -%{expand:%%files -f kernel-%{?3:%{3}-}modules-extra.list %{?3:%{3}-}modules-extra}\ -%config(noreplace) /etc/modprobe.d/*-blacklist.conf\ -%{expand:%%files -f kernel-%{?3:%{3}-}modules-internal.list %{?3:%{3}-}modules-internal}\ -%if %{with_debuginfo}\ -%ifnarch noarch\ -%{expand:%%files -f debuginfo%{?3}.list %{?3:%{3}-}debuginfo}\ -%endif\ -%endif\ -%if %{?3:1} %{!?3:0}\ -%{expand:%%files %{3}}\ -%endif\ -%endif\ -%{nil} - -%kernel_variant_files %{_use_vdso} %{with_up} -%kernel_variant_files %{_use_vdso} %{with_debug} debug -%if %{with_debug_meta} -%files debug -%files debug-core -%files debug-devel -%files debug-devel-matched -%files debug-modules -%files debug-modules-extra -%endif -%kernel_variant_files %{use_vdso} %{with_pae} lpae -%kernel_variant_files %{_use_vdso} %{with_zfcpdump} zfcpdump - -%define kernel_variant_ipaclones(k:) \ -%if %{1}\ -%if %{with_ipaclones}\ -%{expand:%%files %{?2:%{2}-}ipaclones-internal}\ -%defattr(-,root,root)\ -%defverify(not mtime)\ -/usr/src/kernels/%{KVERREL}%{?2:+%{2}}-ipaclones\ -%endif\ -%endif\ -%{nil} - -%kernel_variant_ipaclones %{with_up} - -# plz don't put in a version string unless you're going to tag -# and build. -# -# -%changelog Mon Mar 28 2022 Fedora Kernel Team <kernel-team@xxxxxxxxxxxxxxxxx> [5.16.0-0.rc5.6.test] - -### -# The following Emacs magic makes C-c C-e use UTC dates. -# Local Variables: -# rpm-change-log-uses-utc: t -# End: -### diff --git a/redhat/self-test/data/rhel-78e36f3b0dae.el7.spec b/redhat/self-test/data/rhel-78e36f3b0dae.el7.spec index blahblah..blahblah 100755 --- a/redhat/self-test/data/rhel-78e36f3b0dae.el7.spec +++ b/redhat/self-test/data/rhel-78e36f3b0dae.el7.spec @@ -1,125 +1,7 @@ -# All Global changes to build and install go here. -# Per the below section about __spec_install_pre, any rpm -# environment changes that affect %%install need to go -# here before the %%install macro is pre-built. - -# Disable LTO in userspace packages. -%global _lto_cflags %{nil} - -# Option to enable compiling with clang instead of gcc. -%bcond_with toolchain_clang - -%if %{with toolchain_clang} -%global toolchain clang -%endif - -# Compile the kernel with LTO (only supported when building with clang). -%bcond_with clang_lto - -%if %{with clang_lto} && %{without toolchain_clang} -{error:clang_lto requires --with toolchain_clang} -%endif - -# Cross compile on copr for arm -# See https://bugzilla.redhat.com/1879599 -%if 0%{?_with_cross_arm:1} -%global _target_cpu armv7hl -%global _arch arm -%global _build_arch arm -%global _with_cross 1 -%endif - -# The kernel's %%install section is special -# Normally the %%install section starts by cleaning up the BUILD_ROOT -# like so: -# -# %%__spec_install_pre %%{___build_pre}\ -# [ "$RPM_BUILD_ROOT" != "/" ] && rm -rf "${RPM_BUILD_ROOT}"\ -# mkdir -p `dirname "$RPM_BUILD_ROOT"`\ -# mkdir "$RPM_BUILD_ROOT"\ -# %%{nil} -# -# But because of kernel variants, the %%build section, specifically -# BuildKernel(), moves each variant to its final destination as the -# variant is built. This violates the expectation of the %%install -# section. As a result we snapshot the current env variables and -# purposely leave out the removal section. All global wide changes -# should be added above this line otherwise the %%install section -# will not see them. -%global __spec_install_pre %{___build_pre} - -# At the time of this writing (2019-03), RHEL8 packages use w2.xzdio -# compression for rpms (xz, level 2). -# Kernel has several large (hundreds of mbytes) rpms, they take ~5 mins -# to compress by single-threaded xz. Switch to threaded compression, -# and from level 2 to 3 to keep compressed sizes close to "w2" results. -# -# NB: if default compression in /usr/lib/rpm/redhat/macros ever changes, -# this one might need tweaking (e.g. if default changes to w3.xzdio, -# change below to w4T.xzdio): -# -# This is disabled on i686 as it triggers oom errors - -%ifnarch i686 -%define _binary_payload w3T.xzdio -%endif - -Summary: The Linux kernel -%if 0%{?fedora} -%define secure_boot_arch x86_64 -%else -%define secure_boot_arch x86_64 aarch64 s390x ppc64le -%endif - -# Signing for secure boot authentication -%ifarch %{secure_boot_arch} -%global signkernel 1 -%else -%global signkernel 0 -%endif - -# Sign modules on all arches -%global signmodules 1 - -# Compress modules only for architectures that build modules -%ifarch noarch -%global zipmodules 0 -%else -%global zipmodules 1 -%endif - -%if %{zipmodules} -%global zipsed -e 's/\.ko$/\.ko.xz/' -# for parallel xz processes, replace with 1 to go back to single process -%endif - -%if 0%{?fedora} -%define primary_target fedora -%else -%define primary_target rhel -%endif - -# -# genspec.sh variables -# - -# Include Fedora files %global include_fedora 1 -# Include RHEL files %global include_rhel 1 -# Provide Patchlist.changelog file %global patchlist_changelog 1 -# Set released_kernel to 1 when the upstream source tarball contains a -# kernel release. (This includes prepatch or "rc" releases.) -# Set released_kernel to 0 when the upstream source tarball contains an -# unreleased kernel development snapshot. %global released_kernel 0 -# Set debugbuildsenabled to 1 to build separate base and debug kernels -# (on supported architectures). The kernel-debug-* subpackages will -# contain the debug kernel. -# Set debugbuildsenabled to 0 to not build a separate debug kernel, but -# to build the base kernel using the debug configuration. (Specifying -# the --with-release option overrides this setting.) %define debugbuildsenabled 0 %define buildid .test %define specversion 5.17.0 @@ -127,2924 +9,6 @@ Summary: The Linux kernel %define pkgrelease 0.rc0.78e36f3b0dae.6.test %define kversion 5 %define tarfile_release 5.17.0-0.rc0.78e36f3b0dae.6.test -# This is needed to do merge window version magic %define patchlevel 17 -# allow pkg_release to have configurable %%{?dist} tag %define specrelease 0.rc0.78e36f3b0dae.6%{?buildid}%{?dist} - -# -# End of genspec.sh variables -# - -%define pkg_release %{specrelease} - -# libexec dir is not used by the linker, so the shared object there -# should not be exported to RPM provides -%global __provides_exclude_from ^%{_libexecdir}/kselftests - -# The following build options are enabled by default, but may become disabled -# by later architecture-specific checks. These can also be disabled by using -# --without <opt> in the rpmbuild command, or by forcing these values to 0. -# -# standard kernel -%define with_up %{?_without_up: 0} %{?!_without_up: 1} -# kernel PAE (only valid for ARM (lpae)) -%define with_pae %{?_without_pae: 0} %{?!_without_pae: 1} -# kernel-debug -%define with_debug %{?_without_debug: 0} %{?!_without_debug: 1} -# kernel-zfcpdump (s390 specific kernel for zfcpdump) -%define with_zfcpdump %{?_without_zfcpdump: 0} %{?!_without_zfcpdump: 1} -# kernel-doc -%define with_doc %{?_without_doc: 0} %{?!_without_doc: 1} -# kernel-headers -%define with_headers %{?_without_headers: 0} %{?!_without_headers: 1} -%define with_cross_headers %{?_without_cross_headers: 0} %{?!_without_cross_headers: 1} -# perf -%define with_perf %{?_without_perf: 0} %{?!_without_perf: 1} -# tools -%define with_tools %{?_without_tools: 0} %{?!_without_tools: 1} -# bpf tool -%define with_bpftool %{?_without_bpftool: 0} %{?!_without_bpftool: 1} -# kernel-debuginfo -%define with_debuginfo %{?_without_debuginfo: 0} %{?!_without_debuginfo: 1} -# kernel-abi-stablelists -%define with_kernel_abi_stablelists %{?_without_kernel_abi_stablelists: 0} %{?!_without_kernel_abi_stablelists: 1} -# internal samples and selftests -%define with_selftests %{?_without_selftests: 0} %{?!_without_selftests: 1} -# -# Additional options for user-friendly one-off kernel building: -# -# Only build the base kernel (--with baseonly): -%define with_baseonly %{?_with_baseonly: 1} %{?!_with_baseonly: 0} -# Only build the pae kernel (--with paeonly): -%define with_paeonly %{?_with_paeonly: 1} %{?!_with_paeonly: 0} -# Only build the debug kernel (--with dbgonly): -%define with_dbgonly %{?_with_dbgonly: 1} %{?!_with_dbgonly: 0} -# Control whether we perform a compat. check against published ABI. -%define with_kabichk %{?_without_kabichk: 0} %{?!_without_kabichk: 1} -# Temporarily disable kabi checks until RC. -%define with_kabichk 0 -# Control whether we perform a compat. check against DUP ABI. -%define with_kabidupchk %{?_with_kabidupchk: 1} %{?!_with_kabidupchk: 0} -# -# Control whether to run an extensive DWARF based kABI check. -# Note that this option needs to have baseline setup in SOURCE300. -%define with_kabidwchk %{?_without_kabidwchk: 0} %{?!_without_kabidwchk: 1} -%define with_kabidw_base %{?_with_kabidw_base: 1} %{?!_with_kabidw_base: 0} -# -# Control whether to install the vdso directories. -%define with_vdso_install %{?_without_vdso_install: 0} %{?!_without_vdso_install: 1} -# -# should we do C=1 builds with sparse -%define with_sparse %{?_with_sparse: 1} %{?!_with_sparse: 0} -# -# Cross compile requested? -%define with_cross %{?_with_cross: 1} %{?!_with_cross: 0} -# -# build a release kernel on rawhide -%define with_release %{?_with_release: 1} %{?!_with_release: 0} - -# verbose build, i.e. no silent rules and V=1 -%define with_verbose %{?_with_verbose: 1} %{?!_with_verbose: 0} - -# -# check for mismatched config options -%define with_configchecks %{?_without_configchecks: 0} %{?!_without_configchecks: 1} - -# -# gcov support -%define with_gcov %{?_with_gcov:1}%{?!_with_gcov:0} - -# -# ipa_clone support -%define with_ipaclones %{?_without_ipaclones: 0} %{?!_without_ipaclones: 1} - -# Want to build a vanilla kernel build without any non-upstream patches? -%define with_vanilla %{?_with_vanilla: 1} %{?!_with_vanilla: 0} - -%if 0%{?fedora} -# Kernel headers are being split out into a separate package -%define with_headers 0 -%define with_cross_headers 0 -# no ipa_clone for now -%define with_ipaclones 0 -# no stablelist -%define with_kernel_abi_stablelists 0 -# Fedora builds these separately -%define with_perf 0 -%define with_tools 0 -%define with_bpftool 0 -# selftests turns on bpftool -%define with_selftests 0 -%endif - -%if %{with_verbose} -%define make_opts V=1 -%else -%define make_opts -s -%endif - -%if %{with toolchain_clang} -%ifarch s390x ppc64le -%global llvm_ias 0 -%else -%global llvm_ias 1 -%endif -%global clang_make_opts HOSTCC=clang CC=clang LLVM_IAS=%{llvm_ias} -%if %{with clang_lto} -%global clang_make_opts %{clang_make_opts} LD=ld.lld HOSTLD=ld.lld AR=llvm-ar NM=llvm-nm HOSTAR=llvm-ar HOSTNM=llvm-nm -%endif -%global make_opts %{make_opts} %{clang_make_opts} -# clang does not support the -fdump-ipa-clones option -%global with_ipaclones 0 -%endif - -# turn off debug kernel and kabichk for gcov builds -%if %{with_gcov} -%define with_debug 0 -%define with_kabichk 0 -%define with_kabidupchk 0 -%define with_kabidwchk 0 -%define with_kabidw_base 0 -%define with_kernel_abi_stablelists 0 -%endif - -# turn off kABI DWARF-based check if we're generating the base dataset -%if %{with_kabidw_base} -%define with_kabidwchk 0 -%endif - -# kpatch_kcflags are extra compiler flags applied to base kernel -# -fdump-ipa-clones is enabled only for base kernels on selected arches -%if %{with_ipaclones} -%ifarch x86_64 ppc64le -%define kpatch_kcflags -fdump-ipa-clones -%else -%define with_ipaclones 0 -%endif -%endif - -%define make_target bzImage -%define image_install_path boot - -%define KVERREL %{version}-%{release}.%{_target_cpu} -%define KVERREL_RE %(echo %KVERREL | sed 's/+/[+]/g') -%define hdrarch %_target_cpu -%define asmarch %_target_cpu - -%if 0%{!?nopatches:1} -%define nopatches 0 -%endif - -%if %{with_vanilla} -%define nopatches 1 -%endif - -%if %{with_release} -%define debugbuildsenabled 1 -%endif - -%if !%{with_debuginfo} -%define _enable_debug_packages 0 -%endif -%define debuginfodir /usr/lib/debug -# Needed because we override almost everything involving build-ids -# and debuginfo generation. Currently we rely on the old alldebug setting. -%global _build_id_links alldebug - -# kernel PAE is only built on ARMv7 -%ifnarch armv7hl -%define with_pae 0 -%endif - -# if requested, only build base kernel -%if %{with_baseonly} -%define with_pae 0 -%define with_debug 0 -%define with_vdso_install 0 -%define with_perf 0 -%define with_tools 0 -%define with_bpftool 0 -%define with_kernel_abi_stablelists 0 -%define with_selftests 0 -%define with_cross 0 -%define with_cross_headers 0 -%define with_ipaclones 0 -%endif - -# if requested, only build pae kernel -%if %{with_paeonly} -%define with_up 0 -%define with_debug 0 -%endif - -# if requested, only build debug kernel -%if %{with_dbgonly} -%define with_up 0 -%define with_vdso_install 0 -%define with_perf 0 -%define with_tools 0 -%define with_bpftool 0 -%define with_kernel_abi_stablelists 0 -%define with_selftests 0 -%define with_cross 0 -%define with_cross_headers 0 -%define with_ipaclones 0 -%endif - -# turn off kABI DUP check and DWARF-based check if kABI check is disabled -%if !%{with_kabichk} -%define with_kabidupchk 0 -%define with_kabidwchk 0 -%endif - -%if %{with_vdso_install} -%define use_vdso 1 -%endif - -# selftests require bpftool to be built -%if %{with_selftests} -%define with_bpftool 1 -%endif - -%ifnarch noarch -%define with_kernel_abi_stablelists 0 -%endif - -# Overrides for generic default options - -# only package docs noarch -%ifnarch noarch -%define with_doc 0 -%define doc_build_fail true -%endif - -%if 0%{?fedora} -# don't do debug builds on anything but i686 and x86_64 -%ifnarch i686 x86_64 -%define with_debug 0 -%endif -%endif - -# don't build noarch kernels or headers (duh) -%ifarch noarch -%define with_up 0 -%define with_headers 0 -%define with_cross_headers 0 -%define with_tools 0 -%define with_perf 0 -%define with_bpftool 0 -%define with_selftests 0 -%define with_debug 0 -%define all_arch_configs kernel-%{version}-*.config -%endif - -# sparse blows up on ppc -%ifnarch ppc64le -%define with_sparse 0 -%endif - -# zfcpdump mechanism is s390 only -%ifnarch s390x -%define with_zfcpdump 0 -%endif - -%if 0%{?fedora} -# This is not for Fedora -%define with_zfcpdump 0 -%endif - -# Per-arch tweaks - -%ifarch i686 -%define asmarch x86 -%define hdrarch i386 -%define all_arch_configs kernel-%{version}-i?86*.config -%define kernel_image arch/x86/boot/bzImage -%endif - -%ifarch x86_64 -%define asmarch x86 -%define all_arch_configs kernel-%{version}-x86_64*.config -%define kernel_image arch/x86/boot/bzImage -%endif - -%ifarch ppc64le -%define asmarch powerpc -%define hdrarch powerpc -%define make_target vmlinux -%define kernel_image vmlinux -%define kernel_image_elf 1 -%define use_vdso 0 -%define all_arch_configs kernel-%{version}-ppc64le*.config -%endif - -%ifarch s390x -%define asmarch s390 -%define hdrarch s390 -%define all_arch_configs kernel-%{version}-s390x.config -%define kernel_image arch/s390/boot/bzImage -%define vmlinux_decompressor arch/s390/boot/compressed/vmlinux -%endif - -%ifarch %{arm} -%define all_arch_configs kernel-%{version}-arm*.config -%define skip_nonpae_vdso 1 -%define asmarch arm -%define hdrarch arm -%define make_target bzImage -%define kernel_image arch/arm/boot/zImage -# http://lists.infradead.org/pipermail/linux-arm-kernel/2012-March/091404.html -%define kernel_mflags KALLSYMS_EXTRA_PASS=1 -# we only build headers/perf/tools on the base arm arches -# just like we used to only build them on i386 for x86 -%ifnarch armv7hl -%define with_headers 0 -%define with_cross_headers 0 -%endif -# These currently don't compile on armv7 -%define with_selftests 0 -%endif - -%ifarch aarch64 -%define all_arch_configs kernel-%{version}-aarch64*.config -%define asmarch arm64 -%define hdrarch arm64 -%define make_target Image.gz -%define kernel_image arch/arm64/boot/Image.gz -%endif - -# Should make listnewconfig fail if there's config options -# printed out? -%if %{nopatches} -%define with_configchecks 0 -%endif - -# To temporarily exclude an architecture from being built, add it to -# %%nobuildarches. Do _NOT_ use the ExclusiveArch: line, because if we -# don't build kernel-headers then the new build system will no longer let -# us use the previous build of that package -- it'll just be completely AWOL. -# Which is a BadThing(tm). - -# We only build kernel-headers on the following... -%if 0%{?fedora} -%define nobuildarches i386 -%else -%define nobuildarches i386 i686 %{arm} -%endif - -%ifarch %nobuildarches -# disable BuildKernel commands -%define with_up 0 -%define with_debug 0 -%define with_pae 0 -%define with_zfcpdump 0 - -%define with_debuginfo 0 -%define with_perf 0 -%define with_tools 0 -%define with_bpftool 0 -%define with_selftests 0 -%define _enable_debug_packages 0 -%endif - -# Architectures we build tools/cpupower on -%if 0%{?fedora} -%define cpupowerarchs %{ix86} x86_64 ppc64le %{arm} aarch64 -%else -%define cpupowerarchs i686 x86_64 ppc64le aarch64 -%endif - -%if 0%{?use_vdso} - -%if 0%{?skip_nonpae_vdso} -%define _use_vdso 0 -%else -%define _use_vdso 1 -%endif - -%else -%define _use_vdso 0 -%endif - -# If build of debug packages is disabled, we need to know if we want to create -# meta debug packages or not, after we define with_debug for all specific cases -# above. So this must be at the end here, after all cases of with_debug or not. -%define with_debug_meta 0 -%if !%{debugbuildsenabled} -%if %{with_debug} -%define with_debug_meta 1 -%endif -%define with_debug 0 -%endif - - -# -# Packages that need to be installed before the kernel is, because the %%post -# scripts use them. -# -%define kernel_prereq coreutils, systemd >= 203-2, /usr/bin/kernel-install -%define initrd_prereq dracut >= 027 - - -Name: kernel -License: GPLv2 and Redistributable, no modification permitted -URL: https://www.kernel.org/ -Version: %{specversion} -Release: %{pkg_release} -# DO NOT CHANGE THE 'ExclusiveArch' LINE TO TEMPORARILY EXCLUDE AN ARCHITECTURE BUILD. -# SET %%nobuildarches (ABOVE) INSTEAD -%if 0%{?fedora} -ExclusiveArch: noarch x86_64 s390x %{arm} aarch64 ppc64le -%else -ExclusiveArch: noarch i386 i686 x86_64 s390x %{arm} aarch64 ppc64le -%endif -ExclusiveOS: Linux -%ifnarch %{nobuildarches} -Requires: kernel-core-uname-r = %{KVERREL} -Requires: kernel-modules-uname-r = %{KVERREL} -%endif - - -# -# List the packages used during the kernel build -# -BuildRequires: kmod, patch, bash, coreutils, tar, git-core, which -BuildRequires: bzip2, xz, findutils, gzip, m4, perl-interpreter, perl-Carp, perl-devel, perl-generators, make, diffutils, gawk -BuildRequires: gcc, binutils, redhat-rpm-config, hmaccalc, bison, flex, gcc-c++ -BuildRequires: net-tools, hostname, bc, elfutils-devel -BuildRequires: dwarves -BuildRequires: python3-devel -BuildRequires: gcc-plugin-devel -# glibc-static is required for a consistent build environment (specifically -# CONFIG_CC_CAN_LINK_STATIC=y). -BuildRequires: glibc-static -%ifnarch %{nobuildarches} noarch -BuildRequires: bpftool -%endif -%if %{with_headers} -BuildRequires: rsync -%endif -%if %{with_doc} -BuildRequires: xmlto, asciidoc, python3-sphinx, python3-sphinx_rtd_theme -%endif -%if %{with_sparse} -BuildRequires: sparse -%endif -%if %{with_perf} -BuildRequires: zlib-devel binutils-devel newt-devel perl(ExtUtils::Embed) bison flex xz-devel -BuildRequires: audit-libs-devel -BuildRequires: java-devel -BuildRequires: libbpf-devel -BuildRequires: libbabeltrace-devel -BuildRequires: libtraceevent-devel -%ifnarch %{arm} s390x -BuildRequires: numactl-devel -%endif -%ifarch aarch64 -BuildRequires: opencsd-devel >= 1.0.0 -%endif -%endif -%if %{with_tools} -BuildRequires: gettext ncurses-devel -BuildRequires: libcap-devel libcap-ng-devel -%ifnarch s390x -BuildRequires: pciutils-devel -%endif -%ifarch i686 x86_64 -BuildRequires: libnl3-devel -%endif -%endif -%if %{with_tools} || %{signmodules} || %{signkernel} -BuildRequires: openssl-devel -%endif -%if %{with_bpftool} -BuildRequires: python3-docutils -BuildRequires: zlib-devel binutils-devel -%endif -%if %{with_selftests} -BuildRequires: clang llvm -%ifnarch %{arm} -BuildRequires: numactl-devel -%endif -BuildRequires: libcap-devel libcap-ng-devel rsync libmnl-devel -%endif -BuildConflicts: rhbuildsys(DiskFree) < 500Mb -%if %{with_debuginfo} -BuildRequires: rpm-build, elfutils -BuildConflicts: rpm < 4.13.0.1-19 -BuildConflicts: dwarves < 1.13 -# Most of these should be enabled after more investigation -%undefine _include_minidebuginfo -%undefine _find_debuginfo_dwz_opts -%undefine _unique_build_ids -%undefine _unique_debug_names -%undefine _unique_debug_srcs -%undefine _debugsource_packages -%undefine _debuginfo_subpackages -%global _find_debuginfo_opts -r -%global _missing_build_ids_terminate_build 1 -%global _no_recompute_build_ids 1 -%endif -%if %{with_kabidwchk} || %{with_kabidw_base} -BuildRequires: kabi-dw -%endif - -%if %{signkernel}%{signmodules} -BuildRequires: openssl -%if %{signkernel} -# ELN uses Fedora signing process, so exclude -%if 0%{?rhel}%{?centos} && !0%{?eln} -BuildRequires: system-sb-certs -%endif -%ifarch x86_64 aarch64 -BuildRequires: nss-tools -BuildRequires: pesign >= 0.10-4 -%endif -%endif -%endif - -%if %{with_cross} -BuildRequires: binutils-%{_build_arch}-linux-gnu, gcc-%{_build_arch}-linux-gnu -%define cross_opts CROSS_COMPILE=%{_build_arch}-linux-gnu- -%define __strip %{_build_arch}-linux-gnu-strip -%endif - -# These below are required to build man pages -%if %{with_perf} -BuildRequires: xmlto -%endif -%if %{with_perf} || %{with_tools} -BuildRequires: asciidoc -%endif - -%if %{with toolchain_clang} -BuildRequires: clang -%endif - -%if %{with clang_lto} -BuildRequires: llvm -BuildRequires: lld -%endif - -# Because this is the kernel, it's hard to get a single upstream URL -# to represent the base without needing to do a bunch of patching. This -# tarball is generated from a src-git tree. If you want to see the -# exact git commit you can run -# -# xzcat -qq ${TARBALL} | git get-tar-commit-id -Source0: linux-%{tarfile_release}.tar.xz - -Source1: Makefile.rhelver - - -# Name of the packaged file containing signing key -%ifarch ppc64le -%define signing_key_filename kernel-signing-ppc.cer -%endif -%ifarch s390x -%define signing_key_filename kernel-signing-s390.cer -%endif - -%if %{?released_kernel} - -Source10: redhatsecurebootca5.cer -Source11: redhatsecurebootca1.cer -Source12: redhatsecureboot501.cer -Source13: redhatsecureboot301.cer -Source14: secureboot_s390.cer -Source15: secureboot_ppc.cer - -%define secureboot_ca_1 %{SOURCE10} -%define secureboot_ca_0 %{SOURCE11} -%ifarch x86_64 aarch64 -%define secureboot_key_1 %{SOURCE12} -%define pesign_name_1 redhatsecureboot501 -%define secureboot_key_0 %{SOURCE13} -%define pesign_name_0 redhatsecureboot301 -%endif -%ifarch s390x -%define secureboot_key_0 %{SOURCE14} -%define pesign_name_0 redhatsecureboot302 -%endif -%ifarch ppc64le -%define secureboot_key_0 %{SOURCE15} -%define pesign_name_0 redhatsecureboot303 -%endif - -# released_kernel -%else - -Source10: redhatsecurebootca4.cer -Source11: redhatsecurebootca2.cer -Source12: redhatsecureboot401.cer -Source13: redhatsecureboot003.cer - -%define secureboot_ca_1 %{SOURCE10} -%define secureboot_ca_0 %{SOURCE11} -%define secureboot_key_1 %{SOURCE12} -%define pesign_name_1 redhatsecureboot401 -%define secureboot_key_0 %{SOURCE13} -%define pesign_name_0 redhatsecureboot003 - -# released_kernel -%endif - -Source20: mod-denylist.sh -Source21: mod-sign.sh -Source22: parallel_xz.sh - -%define modsign_cmd %{SOURCE21} - -%if 0%{?include_rhel} -Source23: x509.genkey.rhel - -Source24: kernel-aarch64-rhel.config -Source25: kernel-aarch64-debug-rhel.config -Source26: mod-extra.list.rhel - -Source27: kernel-ppc64le-rhel.config -Source28: kernel-ppc64le-debug-rhel.config -Source29: kernel-s390x-rhel.config -Source30: kernel-s390x-debug-rhel.config -Source31: kernel-s390x-zfcpdump-rhel.config -Source32: kernel-x86_64-rhel.config -Source33: kernel-x86_64-debug-rhel.config - -Source34: filter-x86_64.sh.rhel -Source35: filter-armv7hl.sh.rhel -Source37: filter-aarch64.sh.rhel -Source38: filter-ppc64le.sh.rhel -Source39: filter-s390x.sh.rhel -Source40: filter-modules.sh.rhel - -Source41: x509.genkey.centos -%endif - -%if 0%{?include_fedora} -Source50: x509.genkey.fedora -Source51: mod-extra.list.fedora - -Source52: kernel-aarch64-fedora.config -Source53: kernel-aarch64-debug-fedora.config -Source54: kernel-armv7hl-fedora.config -Source55: kernel-armv7hl-debug-fedora.config -Source56: kernel-armv7hl-lpae-fedora.config -Source57: kernel-armv7hl-lpae-debug-fedora.config -Source60: kernel-ppc64le-fedora.config -Source61: kernel-ppc64le-debug-fedora.config -Source62: kernel-s390x-fedora.config -Source63: kernel-s390x-debug-fedora.config -Source64: kernel-x86_64-fedora.config -Source65: kernel-x86_64-debug-fedora.config - -Source67: filter-x86_64.sh.fedora -Source68: filter-armv7hl.sh.fedora -Source70: filter-aarch64.sh.fedora -Source71: filter-ppc64le.sh.fedora -Source72: filter-s390x.sh.fedora -Source73: filter-modules.sh.fedora -%endif - -Source75: partial-kgcov-snip.config -Source80: generate_all_configs.sh -Source81: process_configs.sh - -Source82: update_scripts.sh - -Source84: mod-internal.list - -Source100: rheldup3.x509 -Source101: rhelkpatch1.x509 - -Source200: check-kabi - -Source201: Module.kabi_aarch64 -Source202: Module.kabi_ppc64le -Source203: Module.kabi_s390x -Source204: Module.kabi_x86_64 - -Source210: Module.kabi_dup_aarch64 -Source211: Module.kabi_dup_ppc64le -Source212: Module.kabi_dup_s390x -Source213: Module.kabi_dup_x86_64 - -Source300: kernel-abi-stablelists-%{specversion}-%{pkgrelease}.tar.bz2 -Source301: kernel-kabi-dw-%{specversion}-%{pkgrelease}.tar.bz2 - -# Sources for kernel-tools -Source2000: cpupower.service -Source2001: cpupower.config -Source2002: kvm_stat.logrotate - -# Some people enjoy building customized kernels from the dist-git in Fedora and -# use this to override configuration options. One day they may all use the -# source tree, but in the mean time we carry this to support the legacy workflow -Source3000: merge.pl -Source3001: kernel-local -%if %{patchlist_changelog} -Source3002: Patchlist.changelog -%endif - -Source4000: README.rst -Source4001: rpminspect.yaml -Source4002: gating.yaml - -## Patches needed for building this package - -%if !%{nopatches} - -Patch1: patch-%{patchversion}-redhat.patch -%endif - -# empty final patch to facilitate testing of kernel patches -Patch999999: linux-kernel-test.patch - -# END OF PATCH DEFINITIONS - -%description -The kernel meta package - -# -# This macro does requires, provides, conflicts, obsoletes for a kernel package. -# %%kernel_reqprovconf <subpackage> -# It uses any kernel_<subpackage>_conflicts and kernel_<subpackage>_obsoletes -# macros defined above. -# -%define kernel_reqprovconf \ -Provides: kernel = %{specversion}-%{pkg_release}\ -Provides: kernel-%{_target_cpu} = %{specversion}-%{pkg_release}%{?1:+%{1}}\ -Provides: kernel-drm-nouveau = 16\ -Provides: kernel-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires(pre): %{kernel_prereq}\ -Requires(pre): %{initrd_prereq}\ -Requires(pre): ((linux-firmware >= 20150904-56.git6ebf5d57) if linux-firmware)\ -Recommends: linux-firmware\ -Requires(preun): systemd >= 200\ -Conflicts: xfsprogs < 4.3.0-1\ -Conflicts: xorg-x11-drv-vmmouse < 13.0.99\ -%{expand:%%{?kernel%{?1:_%{1}}_conflicts:Conflicts: %%{kernel%{?1:_%{1}}_conflicts}}}\ -%{expand:%%{?kernel%{?1:_%{1}}_obsoletes:Obsoletes: %%{kernel%{?1:_%{1}}_obsoletes}}}\ -%{expand:%%{?kernel%{?1:_%{1}}_provides:Provides: %%{kernel%{?1:_%{1}}_provides}}}\ -# We can't let RPM do the dependencies automatic because it'll then pick up\ -# a correct but undesirable perl dependency from the module headers which\ -# isn't required for the kernel proper to function\ -AutoReq: no\ -AutoProv: yes\ -%{nil} - - -%package doc -Summary: Various documentation bits found in the kernel source -Group: Documentation -%description doc -This package contains documentation files from the kernel -source. Various bits of information about the Linux kernel and the -device drivers shipped with it are documented in these files. - -You'll want to install this package if you need a reference to the -options that can be passed to Linux kernel modules at load time. - - -%package headers -Summary: Header files for the Linux kernel for use by glibc -Obsoletes: glibc-kernheaders < 3.0-46 -Provides: glibc-kernheaders = 3.0-46 -%description headers -Kernel-headers includes the C header files that specify the interface -between the Linux kernel and userspace libraries and programs. The -header files define structures and constants that are needed for -building most standard programs and are also needed for rebuilding the -glibc package. - -%package cross-headers -Summary: Header files for the Linux kernel for use by cross-glibc -%description cross-headers -Kernel-cross-headers includes the C header files that specify the interface -between the Linux kernel and userspace libraries and programs. The -header files define structures and constants that are needed for -building most standard programs and are also needed for rebuilding the -cross-glibc package. - - -%package debuginfo-common-%{_target_cpu} -Summary: Kernel source files used by %{name}-debuginfo packages -Provides: installonlypkg(kernel) -%description debuginfo-common-%{_target_cpu} -This package is required by %{name}-debuginfo subpackages. -It provides the kernel source files common to all builds. - -%if %{with_perf} -%package -n perf -Summary: Performance monitoring for the Linux kernel -Requires: bzip2 -License: GPLv2 -%description -n perf -This package contains the perf tool, which enables performance monitoring -of the Linux kernel. - -%package -n perf-debuginfo -Summary: Debug information for package perf -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release} -AutoReqProv: no -%description -n perf-debuginfo -This package provides debug information for the perf package. - -# Note that this pattern only works right to match the .build-id -# symlinks because of the trailing nonmatching alternation and -# the leading .*, because of find-debuginfo.sh's buggy handling -# of matching the pattern against the symlinks file. -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{_bindir}/perf(\.debug)?|.*%%{_libexecdir}/perf-core/.*|.*%%{_libdir}/libperf-jvmti.so(\.debug)?|XXX' -o perf-debuginfo.list} - -%package -n python3-perf -Summary: Python bindings for apps which will manipulate perf events -%description -n python3-perf -The python3-perf package contains a module that permits applications -written in the Python programming language to use the interface -to manipulate perf events. - -%package -n python3-perf-debuginfo -Summary: Debug information for package perf python bindings -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release} -AutoReqProv: no -%description -n python3-perf-debuginfo -This package provides debug information for the perf python bindings. - -# the python_sitearch macro should already be defined from above -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{python3_sitearch}/perf.*so(\.debug)?|XXX' -o python3-perf-debuginfo.list} - -# with_perf -%endif - -%if %{with_tools} -%package -n kernel-tools -Summary: Assortment of tools for the Linux kernel -License: GPLv2 -%ifarch %{cpupowerarchs} -Provides: cpupowerutils = 1:009-0.6.p1 -Obsoletes: cpupowerutils < 1:009-0.6.p1 -Provides: cpufreq-utils = 1:009-0.6.p1 -Provides: cpufrequtils = 1:009-0.6.p1 -Obsoletes: cpufreq-utils < 1:009-0.6.p1 -Obsoletes: cpufrequtils < 1:009-0.6.p1 -Obsoletes: cpuspeed < 1:1.5-16 -Requires: kernel-tools-libs = %{version}-%{release} -%endif -%define __requires_exclude ^%{_bindir}/python -%description -n kernel-tools -This package contains the tools/ directory from the kernel source -and the supporting documentation. - -%package -n kernel-tools-libs -Summary: Libraries for the kernels-tools -License: GPLv2 -%description -n kernel-tools-libs -This package contains the libraries built from the tools/ directory -from the kernel source. - -%package -n kernel-tools-libs-devel -Summary: Assortment of tools for the Linux kernel -License: GPLv2 -Requires: kernel-tools = %{version}-%{release} -%ifarch %{cpupowerarchs} -Provides: cpupowerutils-devel = 1:009-0.6.p1 -Obsoletes: cpupowerutils-devel < 1:009-0.6.p1 -%endif -Requires: kernel-tools-libs = %{version}-%{release} -Provides: kernel-tools-devel -%description -n kernel-tools-libs-devel -This package contains the development files for the tools/ directory from -the kernel source. - -%package -n kernel-tools-debuginfo -Summary: Debug information for package kernel-tools -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release} -AutoReqProv: no -%description -n kernel-tools-debuginfo -This package provides debug information for package kernel-tools. - -# Note that this pattern only works right to match the .build-id -# symlinks because of the trailing nonmatching alternation and -# the leading .*, because of find-debuginfo.sh's buggy handling -# of matching the pattern against the symlinks file. -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{_bindir}/centrino-decode(\.debug)?|.*%%{_bindir}/powernow-k8-decode(\.debug)?|.*%%{_bindir}/cpupower(\.debug)?|.*%%{_libdir}/libcpupower.*|.*%%{_bindir}/turbostat(\.debug)?|.*%%{_bindir}/x86_energy_perf_policy(\.debug)?|.*%%{_bindir}/tmon(\.debug)?|.*%%{_bindir}/lsgpio(\.debug)?|.*%%{_bindir}/gpio-hammer(\.debug)?|.*%%{_bindir}/gpio-event-mon(\.debug)?|.*%%{_bindir}/gpio-watch(\.debug)?|.*%%{_bindir}/iio_event_monitor(\.debug)?|.*%%{_bindir}/iio_generic_buffer(\.debug)?|.*%%{_bindir}/lsiio(\.debug)?|.*%%{_bindir}/intel-speed-select(\.debug)?|.*%%{_bindir}/page_owner_sort(\.debug)?|.*%%{_bindir}/slabinfo(\.debug)?|.*%%{_sbindir}/intel_sdsi(\.debug)?|XXX' -o kernel-tools-debuginfo.list} - -# with_tools -%endif - -%if %{with_bpftool} - -%package -n bpftool -Summary: Inspection and simple manipulation of eBPF programs and maps -License: GPLv2 -%description -n bpftool -This package contains the bpftool, which allows inspection and simple -manipulation of eBPF programs and maps. - -%package -n bpftool-debuginfo -Summary: Debug information for package bpftool -Group: Development/Debug -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release} -AutoReqProv: no -%description -n bpftool-debuginfo -This package provides debug information for the bpftool package. - -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{_sbindir}/bpftool(\.debug)?|XXX' -o bpftool-debuginfo.list} - -# with_bpftool -%endif - -%if %{with_selftests} - -%package selftests-internal -Summary: Kernel samples and selftests -License: GPLv2 -Requires: binutils, bpftool, iproute-tc, nmap-ncat, python3 -%description selftests-internal -Kernel sample programs and selftests. - -# Note that this pattern only works right to match the .build-id -# symlinks because of the trailing nonmatching alternation and -# the leading .*, because of find-debuginfo.sh's buggy handling -# of matching the pattern against the symlinks file. -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{_libexecdir}/(ksamples|kselftests)/.*|XXX' -o selftests-debuginfo.list} - -# with_selftests -%endif - -%if %{with_gcov} -%package gcov -Summary: gcov graph and source files for coverage data collection. -%description gcov -kernel-gcov includes the gcov graph and source files for gcov coverage collection. -%endif - -%package -n kernel-abi-stablelists -Summary: The Red Hat Enterprise Linux kernel ABI symbol stablelists -AutoReqProv: no -%description -n kernel-abi-stablelists -The kABI package contains information pertaining to the Red Hat Enterprise -Linux kernel ABI, including lists of kernel symbols that are needed by -external Linux kernel modules, and a yum plugin to aid enforcement. - -%if %{with_kabidw_base} -%package kernel-kabidw-base-internal -Summary: The baseline dataset for kABI verification using DWARF data -Group: System Environment/Kernel -AutoReqProv: no -%description kernel-kabidw-base-internal -The package contains data describing the current ABI of the Red Hat Enterprise -Linux kernel, suitable for the kabi-dw tool. -%endif - -# -# This macro creates a kernel-<subpackage>-debuginfo package. -# %%kernel_debuginfo_package <subpackage> -# -# Explanation of the find_debuginfo_opts: We build multiple kernels (debug -# pae etc.) so the regex filters those kernels appropriately. We also -# have to package several binaries as part of kernel-devel but getting -# unique build-ids is tricky for these userspace binaries. We don't really -# care about debugging those so we just filter those out and remove it. -%define kernel_debuginfo_package() \ -%package %{?1:%{1}-}debuginfo\ -Summary: Debug information for package %{name}%{?1:-%{1}}\ -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release}\ -Provides: %{name}%{?1:-%{1}}-debuginfo-%{_target_cpu} = %{version}-%{release}\ -Provides: installonlypkg(kernel)\ -AutoReqProv: no\ -%description %{?1:%{1}-}debuginfo\ -This package provides debug information for package %{name}%{?1:-%{1}}.\ -This is required to use SystemTap with %{name}%{?1:-%{1}}-%{KVERREL}.\ -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} --keep-section '.BTF' -p '.*\/usr\/src\/kernels/.*|XXX' -o ignored-debuginfo.list -p '/.*/%%{KVERREL_RE}%{?1:[+]%{1}}/.*|/.*%%{KVERREL_RE}%{?1:\+%{1}}(\.debug)?' -o debuginfo%{?1}.list}\ -%{nil} - -# -# This macro creates a kernel-<subpackage>-devel package. -# %%kernel_devel_package [-m] <subpackage> <pretty-name> -# -%define kernel_devel_package(m) \ -%package %{?1:%{1}-}devel\ -Summary: Development package for building kernel modules to match the %{?2:%{2} }kernel\ -Provides: kernel%{?1:-%{1}}-devel-%{_target_cpu} = %{version}-%{release}\ -Provides: kernel-devel-%{_target_cpu} = %{version}-%{release}%{?1:+%{1}}\ -Provides: kernel-devel-uname-r = %{KVERREL}%{?1:+%{1}}\ -Provides: installonlypkg(kernel)\ -AutoReqProv: no\ -Requires(pre): findutils\ -Requires: findutils\ -Requires: perl-interpreter\ -Requires: openssl-devel\ -Requires: elfutils-libelf-devel\ -Requires: bison\ -Requires: flex\ -Requires: make\ -Requires: gcc\ -%if %{-m:1}%{!-m:0}\ -Requires: kernel-devel-uname-r = %{KVERREL}\ -%endif\ -%description %{?1:%{1}-}devel\ -This package provides kernel headers and makefiles sufficient to build modules\ -against the %{?2:%{2} }kernel package.\ -%{nil} - -# -# This macro creates an empty kernel-<subpackage>-devel-matched package that -# requires both the core and devel packages locked on the same version. -# %%kernel_devel_matched_package [-m] <subpackage> <pretty-name> -# -%define kernel_devel_matched_package(m) \ -%package %{?1:%{1}-}devel-matched\ -Summary: Meta package to install matching core and devel packages for a given %{?2:%{2} }kernel\ -Requires: kernel%{?1:-%{1}}-devel = %{version}-%{release}\ -Requires: kernel%{?1:-%{1}}-core = %{version}-%{release}\ -%description %{?1:%{1}-}devel-matched\ -This meta package is used to install matching core and devel packages for a given %{?2:%{2} }kernel.\ -%{nil} - -# -# kernel-<variant>-ipaclones-internal package -# -%define kernel_ipaclones_package() \ -%package %{?1:%{1}-}ipaclones-internal\ -Summary: *.ipa-clones files generated by -fdump-ipa-clones for kernel%{?1:-%{1}}\ -Group: System Environment/Kernel\ -AutoReqProv: no\ -%description %{?1:%{1}-}ipaclones-internal\ -This package provides *.ipa-clones files.\ -%{nil} - -# -# This macro creates a kernel-<subpackage>-modules-internal package. -# %%kernel_modules_internal_package <subpackage> <pretty-name> -# -%define kernel_modules_internal_package() \ -%package %{?1:%{1}-}modules-internal\ -Summary: Extra kernel modules to match the %{?2:%{2} }kernel\ -Group: System Environment/Kernel\ -Provides: kernel%{?1:-%{1}}-modules-internal-%{_target_cpu} = %{version}-%{release}\ -Provides: kernel%{?1:-%{1}}-modules-internal-%{_target_cpu} = %{version}-%{release}%{?1:+%{1}}\ -Provides: kernel%{?1:-%{1}}-modules-internal = %{version}-%{release}%{?1:+%{1}}\ -Provides: installonlypkg(kernel-module)\ -Provides: kernel%{?1:-%{1}}-modules-internal-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel%{?1:-%{1}}-modules-uname-r = %{KVERREL}%{?1:+%{1}}\ -AutoReq: no\ -AutoProv: yes\ -%description %{?1:%{1}-}modules-internal\ -This package provides kernel modules for the %{?2:%{2} }kernel package for Red Hat internal usage.\ -%{nil} - -# -# This macro creates a kernel-<subpackage>-modules-extra package. -# %%kernel_modules_extra_package [-m] <subpackage> <pretty-name> -# -%define kernel_modules_extra_package(m) \ -%package %{?1:%{1}-}modules-extra\ -Summary: Extra kernel modules to match the %{?2:%{2} }kernel\ -Provides: kernel%{?1:-%{1}}-modules-extra-%{_target_cpu} = %{version}-%{release}\ -Provides: kernel%{?1:-%{1}}-modules-extra-%{_target_cpu} = %{version}-%{release}%{?1:+%{1}}\ -Provides: kernel%{?1:-%{1}}-modules-extra = %{version}-%{release}%{?1:+%{1}}\ -Provides: installonlypkg(kernel-module)\ -Provides: kernel%{?1:-%{1}}-modules-extra-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel%{?1:-%{1}}-modules-uname-r = %{KVERREL}%{?1:+%{1}}\ -%if %{-m:1}%{!-m:0}\ -Requires: kernel-modules-extra-uname-r = %{KVERREL}\ -%endif\ -AutoReq: no\ -AutoProv: yes\ -%description %{?1:%{1}-}modules-extra\ -This package provides less commonly used kernel modules for the %{?2:%{2} }kernel package.\ -%{nil} - -# -# This macro creates a kernel-<subpackage>-modules package. -# %%kernel_modules_package [-m] <subpackage> <pretty-name> -# -%define kernel_modules_package(m) \ -%package %{?1:%{1}-}modules\ -Summary: kernel modules to match the %{?2:%{2}-}core kernel\ -Provides: kernel%{?1:-%{1}}-modules-%{_target_cpu} = %{version}-%{release}\ -Provides: kernel-modules-%{_target_cpu} = %{version}-%{release}%{?1:+%{1}}\ -Provides: kernel-modules = %{version}-%{release}%{?1:+%{1}}\ -Provides: installonlypkg(kernel-module)\ -Provides: kernel%{?1:-%{1}}-modules-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel-uname-r = %{KVERREL}%{?1:+%{1}}\ -%if %{-m:1}%{!-m:0}\ -Requires: kernel-modules-uname-r = %{KVERREL}\ -%endif\ -AutoReq: no\ -AutoProv: yes\ -%description %{?1:%{1}-}modules\ -This package provides commonly used kernel modules for the %{?2:%{2}-}core kernel package.\ -%{nil} - -# -# this macro creates a kernel-<subpackage> meta package. -# %%kernel_meta_package <subpackage> -# -%define kernel_meta_package() \ -%package %{1}\ -summary: kernel meta-package for the %{1} kernel\ -Requires: kernel-%{1}-core-uname-r = %{KVERREL}+%{1}\ -Requires: kernel-%{1}-modules-uname-r = %{KVERREL}+%{1}\ -Provides: installonlypkg(kernel)\ -%description %{1}\ -The meta-package for the %{1} kernel\ -%{nil} - -# -# This macro creates a kernel-<subpackage> and its -devel and -debuginfo too. -# %%define variant_summary The Linux kernel compiled for <configuration> -# %%kernel_variant_package [-n <pretty-name>] [-m] <subpackage> -# -%define kernel_variant_package(n:m) \ -%package %{?1:%{1}-}core\ -Summary: %{variant_summary}\ -Provides: kernel-%{?1:%{1}-}core-uname-r = %{KVERREL}%{?1:+%{1}}\ -Provides: installonlypkg(kernel)\ -%if %{-m:1}%{!-m:0}\ -Requires: kernel-core-uname-r = %{KVERREL}\ -%endif\ -%{expand:%%kernel_reqprovconf}\ -%if %{?1:1} %{!?1:0} \ -%{expand:%%kernel_meta_package %{?1:%{1}}}\ -%endif\ -%{expand:%%kernel_devel_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}} %{-m:%{-m}}}\ -%{expand:%%kernel_devel_matched_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}} %{-m:%{-m}}}\ -%{expand:%%kernel_modules_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}} %{-m:%{-m}}}\ -%{expand:%%kernel_modules_extra_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}} %{-m:%{-m}}}\ -%if %{-m:0}%{!-m:1}\ -%{expand:%%kernel_modules_internal_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}}}\ -%{expand:%%kernel_debuginfo_package %{?1:%{1}}}\ -%endif\ -%{nil} - -# Now, each variant package. - -%if %{with_pae} -%define variant_summary The Linux kernel compiled for Cortex-A15 -%kernel_variant_package lpae -%description lpae-core -This package includes a version of the Linux kernel with support for -Cortex-A15 devices with LPAE and HW virtualisation support -%endif - -%if %{with_zfcpdump} -%define variant_summary The Linux kernel compiled for zfcpdump usage -%kernel_variant_package zfcpdump -%description zfcpdump-core -The kernel package contains the Linux kernel (vmlinuz) for use by the -zfcpdump infrastructure. -# with_zfcpdump -%endif - -%define variant_summary The Linux kernel compiled with extra debugging enabled -%if !%{debugbuildsenabled} -%kernel_variant_package -m debug -%else -%kernel_variant_package debug -%endif -%description debug-core -The kernel package contains the Linux kernel (vmlinuz), the core of any -Linux operating system. The kernel handles the basic functions -of the operating system: memory allocation, process allocation, device -input and output, etc. - -This variant of the kernel has numerous debugging options enabled. -It should only be installed when trying to gather additional information -on kernel bugs, as some of these options impact performance noticably. - -# And finally the main -core package - -%define variant_summary The Linux kernel -%kernel_variant_package -%description core -The kernel package contains the Linux kernel (vmlinuz), the core of any -Linux operating system. The kernel handles the basic functions -of the operating system: memory allocation, process allocation, device -input and output, etc. - -%if %{with_ipaclones} -%kernel_ipaclones_package -%endif - -%prep -# do a few sanity-checks for --with *only builds -%if %{with_baseonly} -%if !%{with_up} -echo "Cannot build --with baseonly, up build is disabled" -exit 1 -%endif -%endif - -# more sanity checking; do it quietly -if [ "%{patches}" != "%%{patches}" ] ; then - for patch in %{patches} ; do - if [ ! -f $patch ] ; then - echo "ERROR: Patch ${patch##/*/} listed in specfile but is missing" - exit 1 - fi - done -fi 2>/dev/null - -patch_command='patch -p1 -F1 -s' -ApplyPatch() -{ - local patch=$1 - shift - if [ ! -f $RPM_SOURCE_DIR/$patch ]; then - exit 1 - fi - if ! grep -E "^Patch[0-9]+: $patch\$" %{_specdir}/${RPM_PACKAGE_NAME}.spec ; then - if [ "${patch:0:8}" != "patch-%{kversion}." ] ; then - echo "ERROR: Patch $patch not listed as a source patch in specfile" - exit 1 - fi - fi 2>/dev/null - case "$patch" in - *.bz2) bunzip2 < "$RPM_SOURCE_DIR/$patch" | $patch_command ${1+"$@"} ;; - *.gz) gunzip < "$RPM_SOURCE_DIR/$patch" | $patch_command ${1+"$@"} ;; - *.xz) unxz < "$RPM_SOURCE_DIR/$patch" | $patch_command ${1+"$@"} ;; - *) $patch_command ${1+"$@"} < "$RPM_SOURCE_DIR/$patch" ;; - esac -} - -# don't apply patch if it's empty -ApplyOptionalPatch() -{ - local patch=$1 - shift - if [ ! -f $RPM_SOURCE_DIR/$patch ]; then - exit 1 - fi - local C=$(wc -l $RPM_SOURCE_DIR/$patch | awk '{print $1}') - if [ "$C" -gt 9 ]; then - ApplyPatch $patch ${1+"$@"} - fi -} - -%setup -q -n kernel-%{tarfile_release} -c -mv linux-%{tarfile_release} linux-%{KVERREL} - -cd linux-%{KVERREL} -cp -a %{SOURCE1} . - -%if !%{nopatches} - -ApplyOptionalPatch patch-%{patchversion}-redhat.patch -%endif - -ApplyOptionalPatch linux-kernel-test.patch - -# END OF PATCH APPLICATIONS - -# Any further pre-build tree manipulations happen here. - -chmod +x scripts/checkpatch.pl -mv COPYING COPYING-%{version}-%{release} - -# This Prevents scripts/setlocalversion from mucking with our version numbers. -touch .scmversion - -# Mangle /usr/bin/python shebangs to /usr/bin/python3 -# Mangle all Python shebangs to be Python 3 explicitly -# -p preserves timestamps -# -n prevents creating ~backup files -# -i specifies the interpreter for the shebang -# This fixes errors such as -# *** ERROR: ambiguous python shebang in /usr/bin/kvm_stat: #!/usr/bin/python. Change it to python3 (or python2) explicitly. -# We patch all sources below for which we got a report/error. -pathfix.py -i "%{__python3} %{py3_shbang_opts}" -p -n \ - tools/kvm/kvm_stat/kvm_stat \ - scripts/show_delta \ - scripts/diffconfig \ - scripts/bloat-o-meter \ - scripts/jobserver-exec \ - tools \ - Documentation \ - scripts/clang-tools - -# only deal with configs if we are going to build for the arch -%ifnarch %nobuildarches - -if [ -L configs ]; then - rm -f configs -fi -mkdir configs -cd configs - -# Drop some necessary files from the source dir into the buildroot -cp $RPM_SOURCE_DIR/kernel-*.config . -cp %{SOURCE80} . -# merge.pl -cp %{SOURCE3000} . -# kernel-local -cp %{SOURCE3001} . -FLAVOR=%{primary_target} SPECVERSION=%{version} ./generate_all_configs.sh %{debugbuildsenabled} - -# Merge in any user-provided local config option changes -%ifnarch %nobuildarches -for i in %{all_arch_configs} -do - mv $i $i.tmp - ./merge.pl %{SOURCE3001} $i.tmp > $i -%if %{with_gcov} - echo "Merging with gcov options" - cat %{SOURCE75} - mv $i $i.tmp - ./merge.pl %{SOURCE75} $i.tmp > $i -%endif - rm $i.tmp -done -%endif - -%if %{with clang_lto} -for i in *aarch64*.config *x86_64*.config; do - sed -i 's/# CONFIG_LTO_CLANG_THIN is not set/CONFIG_LTO_CLANG_THIN=y/' $i - sed -i 's/CONFIG_LTO_NONE=y/# CONFIG_LTO_NONE is not set/' $i -done -%endif - -# Add DUP and kpatch certificates to system trusted keys for RHEL -%if 0%{?rhel} -%if %{signkernel}%{signmodules} -openssl x509 -inform der -in %{SOURCE100} -out rheldup3.pem -openssl x509 -inform der -in %{SOURCE101} -out rhelkpatch1.pem -cat rheldup3.pem rhelkpatch1.pem > ../certs/rhel.pem -%ifarch s390x ppc64le -openssl x509 -inform der -in %{secureboot_ca_0} -out secureboot.pem -cat secureboot.pem >> ../certs/rhel.pem -%endif -for i in *.config; do - sed -i 's@CONFIG_SYSTEM_TRUSTED_KEYS=""@CONFIG_SYSTEM_TRUSTED_KEYS="certs/rhel.pem"@' $i -done -%endif -%endif - -cp %{SOURCE81} . -OPTS="" -%if %{with_configchecks} - OPTS="$OPTS -w -n -c" -%endif -%if %{with clang_lto} -for opt in %{clang_make_opts}; do - OPTS="$OPTS -m $opt" -done -%endif -RHJOBS=$RPM_BUILD_NCPUS PACKAGE_NAME=kernel ./process_configs.sh $OPTS ${specversion} - -cp %{SOURCE82} . -RPM_SOURCE_DIR=$RPM_SOURCE_DIR ./update_scripts.sh %{primary_target} - -# We may want to override files from the primary target in case of building -# against a flavour of it (eg. centos not rhel), thus override it here if -# necessary -if [ "%{primary_target}" == "rhel" ]; then -%if 0%{?centos} - echo "Updating scripts/sources to centos version" - RPM_SOURCE_DIR=$RPM_SOURCE_DIR ./update_scripts.sh centos -%else - echo "Not updating scripts/sources to centos version" -%endif -fi - -# end of kernel config -%endif - -cd .. -# # End of Configs stuff - -# get rid of unwanted files resulting from patch fuzz -find . \( -name "*.orig" -o -name "*~" \) -delete >/dev/null - -# remove unnecessary SCM files -find . -name .gitignore -delete >/dev/null - -cd .. - -### -### build -### -%build - -%if %{with_sparse} -%define sparse_mflags C=1 -%endif - -cp_vmlinux() -{ - eu-strip --remove-comment -o "$2" "$1" -} - -# Note we need to disable these flags for cross builds because the flags -# from redhat-rpm-config assume that host == target so target arch -# flags cause issues with the host compiler. -%if !%{with_cross} -%define build_hostcflags %{?build_cflags} -%define build_hostldflags %{?build_ldflags} -%endif - -%define make %{__make} %{?cross_opts} %{?make_opts} HOSTCFLAGS="%{?build_hostcflags}" HOSTLDFLAGS="%{?build_hostldflags}" - -InitBuildVars() { - # Initialize the kernel .config file and create some variables that are - # needed for the actual build process. - - Variant=$1 - - # Pick the right kernel config file - Config=kernel-%{version}-%{_target_cpu}${Variant:+-${Variant}}.config - DevelDir=/usr/src/kernels/%{KVERREL}${Variant:++${Variant}} - - KernelVer=%{version}-%{release}.%{_target_cpu}${Variant:++${Variant}} - - # make sure EXTRAVERSION says what we want it to say - # Trim the release if this is a CI build, since KERNELVERSION is limited to 64 characters - ShortRel=$(perl -e "print \"%{release}\" =~ s/\.pr\.[0-9A-Fa-f]{32}//r") - perl -p -i -e "s/^EXTRAVERSION.*/EXTRAVERSION = -${ShortRel}.%{_target_cpu}${Variant:++${Variant}}/" Makefile - - # if pre-rc1 devel kernel, must fix up PATCHLEVEL for our versioning scheme - # if we are post rc1 this should match anyway so this won't matter - perl -p -i -e 's/^PATCHLEVEL.*/PATCHLEVEL = %{patchlevel}/' Makefile - - %{make} %{?_smp_mflags} mrproper - cp configs/$Config .config - - %if %{signkernel}%{signmodules} - cp configs/x509.genkey certs/. - %endif - - Arch=`head -1 .config | cut -b 3-` - echo USING ARCH=$Arch - - KCFLAGS="%{?kcflags}" - - # add kpatch flags for base kernel - if [ "$Variant" == "" ]; then - KCFLAGS="$KCFLAGS %{?kpatch_kcflags}" - fi -} - -BuildKernel() { - MakeTarget=$1 - KernelImage=$2 - DoVDSO=$3 - Variant=$4 - InstallName=${5:-vmlinuz} - - DoModules=1 - if [ "$Variant" = "zfcpdump" ]; then - DoModules=0 - fi - - # When the bootable image is just the ELF kernel, strip it. - # We already copy the unstripped file into the debuginfo package. - if [ "$KernelImage" = vmlinux ]; then - CopyKernel=cp_vmlinux - else - CopyKernel=cp - fi - - InitBuildVars $Variant - - echo BUILDING A KERNEL FOR ${Variant} %{_target_cpu}... - - %{make} ARCH=$Arch olddefconfig >/dev/null - - # This ensures build-ids are unique to allow parallel debuginfo - perl -p -i -e "s/^CONFIG_BUILD_SALT.*/CONFIG_BUILD_SALT=\"%{KVERREL}\"/" .config - %{make} ARCH=$Arch KCFLAGS="$KCFLAGS" WITH_GCOV="%{?with_gcov}" %{?_smp_mflags} $MakeTarget %{?sparse_mflags} %{?kernel_mflags} - if [ $DoModules -eq 1 ]; then - %{make} ARCH=$Arch KCFLAGS="$KCFLAGS" WITH_GCOV="%{?with_gcov}" %{?_smp_mflags} modules %{?sparse_mflags} || exit 1 - fi - - mkdir -p $RPM_BUILD_ROOT/%{image_install_path} - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/systemtap -%if %{with_debuginfo} - mkdir -p $RPM_BUILD_ROOT%{debuginfodir}/%{image_install_path} -%endif - -%ifarch %{arm} aarch64 - %{make} ARCH=$Arch dtbs INSTALL_DTBS_PATH=$RPM_BUILD_ROOT/%{image_install_path}/dtb-$KernelVer - %{make} ARCH=$Arch dtbs_install INSTALL_DTBS_PATH=$RPM_BUILD_ROOT/%{image_install_path}/dtb-$KernelVer - cp -r $RPM_BUILD_ROOT/%{image_install_path}/dtb-$KernelVer $RPM_BUILD_ROOT/lib/modules/$KernelVer/dtb - find arch/$Arch/boot/dts -name '*.dtb' -type f -delete -%endif - - # Start installing the results - install -m 644 .config $RPM_BUILD_ROOT/boot/config-$KernelVer - install -m 644 .config $RPM_BUILD_ROOT/lib/modules/$KernelVer/config - install -m 644 System.map $RPM_BUILD_ROOT/boot/System.map-$KernelVer - install -m 644 System.map $RPM_BUILD_ROOT/lib/modules/$KernelVer/System.map - - # We estimate the size of the initramfs because rpm needs to take this size - # into consideration when performing disk space calculations. (See bz #530778) - dd if=/dev/zero of=$RPM_BUILD_ROOT/boot/initramfs-$KernelVer.img bs=1M count=20 - - if [ -f arch/$Arch/boot/zImage.stub ]; then - cp arch/$Arch/boot/zImage.stub $RPM_BUILD_ROOT/%{image_install_path}/zImage.stub-$KernelVer || : - cp arch/$Arch/boot/zImage.stub $RPM_BUILD_ROOT/lib/modules/$KernelVer/zImage.stub-$KernelVer || : - fi - - %if %{signkernel} - if [ "$KernelImage" = vmlinux ]; then - # We can't strip and sign $KernelImage in place, because - # we need to preserve original vmlinux for debuginfo. - # Use a copy for signing. - $CopyKernel $KernelImage $KernelImage.tosign - KernelImage=$KernelImage.tosign - CopyKernel=cp - fi - - # Sign the image if we're using EFI - # aarch64 kernels are gziped EFI images - KernelExtension=${KernelImage##*.} - if [ "$KernelExtension" == "gz" ]; then - SignImage=${KernelImage%.*} - else - SignImage=$KernelImage - fi - - %ifarch x86_64 aarch64 - %pesign -s -i $SignImage -o vmlinuz.tmp -a %{secureboot_ca_0} -c %{secureboot_key_0} -n %{pesign_name_0} - %pesign -s -i vmlinuz.tmp -o vmlinuz.signed -a %{secureboot_ca_1} -c %{secureboot_key_1} -n %{pesign_name_1} - rm vmlinuz.tmp - %endif - %ifarch s390x ppc64le - if [ -x /usr/bin/rpm-sign ]; then - rpm-sign --key "%{pesign_name_0}" --lkmsign $SignImage --output vmlinuz.signed - elif [ $DoModules -eq 1 ]; then - chmod +x scripts/sign-file - ./scripts/sign-file -p sha256 certs/signing_key.pem certs/signing_key.x509 $SignImage vmlinuz.signed - else - mv $SignImage vmlinuz.signed - fi - %endif - - if [ ! -s vmlinuz.signed ]; then - echo "pesigning failed" - exit 1 - fi - mv vmlinuz.signed $SignImage - if [ "$KernelExtension" == "gz" ]; then - gzip -f9 $SignImage - fi - # signkernel - %endif - - $CopyKernel $KernelImage \ - $RPM_BUILD_ROOT/%{image_install_path}/$InstallName-$KernelVer - chmod 755 $RPM_BUILD_ROOT/%{image_install_path}/$InstallName-$KernelVer - cp $RPM_BUILD_ROOT/%{image_install_path}/$InstallName-$KernelVer $RPM_BUILD_ROOT/lib/modules/$KernelVer/$InstallName - - # hmac sign the kernel for FIPS - echo "Creating hmac file: $RPM_BUILD_ROOT/%{image_install_path}/.vmlinuz-$KernelVer.hmac" - ls -l $RPM_BUILD_ROOT/%{image_install_path}/$InstallName-$KernelVer - (cd $RPM_BUILD_ROOT/%{image_install_path} && sha512hmac $InstallName-$KernelVer) > $RPM_BUILD_ROOT/%{image_install_path}/.vmlinuz-$KernelVer.hmac; - cp $RPM_BUILD_ROOT/%{image_install_path}/.vmlinuz-$KernelVer.hmac $RPM_BUILD_ROOT/lib/modules/$KernelVer/.vmlinuz.hmac - - if [ $DoModules -eq 1 ]; then - # Override $(mod-fw) because we don't want it to install any firmware - # we'll get it from the linux-firmware package and we don't want conflicts - %{make} %{?_smp_mflags} ARCH=$Arch INSTALL_MOD_PATH=$RPM_BUILD_ROOT %{?_smp_mflags} modules_install KERNELRELEASE=$KernelVer mod-fw= - fi - -%if %{with_gcov} - # install gcov-needed files to $BUILDROOT/$BUILD/...: - # gcov_info->filename is absolute path - # gcno references to sources can use absolute paths (e.g. in out-of-tree builds) - # sysfs symlink targets (set up at compile time) use absolute paths to BUILD dir - find . \( -name '*.gcno' -o -name '*.[chS]' \) -exec install -D '{}' "$RPM_BUILD_ROOT/$(pwd)/{}" \; -%endif - - # add an a noop %%defattr statement 'cause rpm doesn't like empty file list files - echo '%%defattr(-,-,-)' > ../kernel${Variant:+-${Variant}}-ldsoconf.list - if [ $DoVDSO -ne 0 ]; then - %{make} ARCH=$Arch INSTALL_MOD_PATH=$RPM_BUILD_ROOT vdso_install KERNELRELEASE=$KernelVer - if [ -s ldconfig-kernel.conf ]; then - install -D -m 444 ldconfig-kernel.conf \ - $RPM_BUILD_ROOT/etc/ld.so.conf.d/kernel-$KernelVer.conf - echo /etc/ld.so.conf.d/kernel-$KernelVer.conf >> ../kernel${Variant:+-${Variant}}-ldsoconf.list - fi - - rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/vdso/.build-id - fi - - # And save the headers/makefiles etc for building modules against - # - # This all looks scary, but the end result is supposed to be: - # * all arch relevant include/ files - # * all Makefile/Kconfig files - # * all script/ files - - rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/source - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - (cd $RPM_BUILD_ROOT/lib/modules/$KernelVer ; ln -s build source) - # dirs for additional modules per module-init-tools, kbuild/modules.txt - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/updates - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/weak-updates - # CONFIG_KERNEL_HEADER_TEST generates some extra files in the process of - # testing so just delete - find . -name *.h.s -delete - # first copy everything - cp --parents `find -type f -name "Makefile*" -o -name "Kconfig*"` $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - if [ ! -e Module.symvers ]; then - touch Module.symvers - fi - cp Module.symvers $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp System.map $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - if [ -s Module.markers ]; then - cp Module.markers $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - fi - - # create the kABI metadata for use in packaging - # NOTENOTE: the name symvers is used by the rpm backend - # NOTENOTE: to discover and run the /usr/lib/rpm/fileattrs/kabi.attr - # NOTENOTE: script which dynamically adds exported kernel symbol - # NOTENOTE: checksums to the rpm metadata provides list. - # NOTENOTE: if you change the symvers name, update the backend too - echo "**** GENERATING kernel ABI metadata ****" - gzip -c9 < Module.symvers > $RPM_BUILD_ROOT/boot/symvers-$KernelVer.gz - cp $RPM_BUILD_ROOT/boot/symvers-$KernelVer.gz $RPM_BUILD_ROOT/lib/modules/$KernelVer/symvers.gz - -%if %{with_kabichk} - echo "**** kABI checking is enabled in kernel SPEC file. ****" - chmod 0755 $RPM_SOURCE_DIR/check-kabi - if [ -e $RPM_SOURCE_DIR/Module.kabi_%{_target_cpu}$Variant ]; then - cp $RPM_SOURCE_DIR/Module.kabi_%{_target_cpu}$Variant $RPM_BUILD_ROOT/Module.kabi - $RPM_SOURCE_DIR/check-kabi -k $RPM_BUILD_ROOT/Module.kabi -s Module.symvers || exit 1 - # for now, don't keep it around. - rm $RPM_BUILD_ROOT/Module.kabi - else - echo "**** NOTE: Cannot find reference Module.kabi file. ****" - fi -%endif - -%if %{with_kabidupchk} - echo "**** kABI DUP checking is enabled in kernel SPEC file. ****" - if [ -e $RPM_SOURCE_DIR/Module.kabi_dup_%{_target_cpu}$Variant ]; then - cp $RPM_SOURCE_DIR/Module.kabi_dup_%{_target_cpu}$Variant $RPM_BUILD_ROOT/Module.kabi - $RPM_SOURCE_DIR/check-kabi -k $RPM_BUILD_ROOT/Module.kabi -s Module.symvers || exit 1 - # for now, don't keep it around. - rm $RPM_BUILD_ROOT/Module.kabi - else - echo "**** NOTE: Cannot find DUP reference Module.kabi file. ****" - fi -%endif - -%if %{with_kabidw_base} - # Don't build kabi base for debug kernels - if [ "$Variant" != "zfcpdump" -a "$Variant" != "debug" ]; then - mkdir -p $RPM_BUILD_ROOT/kabi-dwarf - tar xjvf %{SOURCE301} -C $RPM_BUILD_ROOT/kabi-dwarf - - mkdir -p $RPM_BUILD_ROOT/kabi-dwarf/stablelists - tar xjvf %{SOURCE300} -C $RPM_BUILD_ROOT/kabi-dwarf/stablelists - - echo "**** GENERATING DWARF-based kABI baseline dataset ****" - chmod 0755 $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh - $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh generate \ - "$RPM_BUILD_ROOT/kabi-dwarf/stablelists/kabi-current/kabi_stablelist_%{_target_cpu}" \ - "$(pwd)" \ - "$RPM_BUILD_ROOT/kabidw-base/%{_target_cpu}${Variant:+.${Variant}}" || : - - rm -rf $RPM_BUILD_ROOT/kabi-dwarf - fi -%endif - -%if %{with_kabidwchk} - if [ "$Variant" != "zfcpdump" ]; then - mkdir -p $RPM_BUILD_ROOT/kabi-dwarf - tar xjvf %{SOURCE301} -C $RPM_BUILD_ROOT/kabi-dwarf - if [ -d "$RPM_BUILD_ROOT/kabi-dwarf/base/%{_target_cpu}${Variant:+.${Variant}}" ]; then - mkdir -p $RPM_BUILD_ROOT/kabi-dwarf/stablelists - tar xjvf %{SOURCE300} -C $RPM_BUILD_ROOT/kabi-dwarf/stablelists - - echo "**** GENERATING DWARF-based kABI dataset ****" - chmod 0755 $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh - $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh generate \ - "$RPM_BUILD_ROOT/kabi-dwarf/stablelists/kabi-current/kabi_stablelist_%{_target_cpu}" \ - "$(pwd)" \ - "$RPM_BUILD_ROOT/kabi-dwarf/base/%{_target_cpu}${Variant:+.${Variant}}.tmp" || : - - echo "**** kABI DWARF-based comparison report ****" - $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh compare \ - "$RPM_BUILD_ROOT/kabi-dwarf/base/%{_target_cpu}${Variant:+.${Variant}}" \ - "$RPM_BUILD_ROOT/kabi-dwarf/base/%{_target_cpu}${Variant:+.${Variant}}.tmp" || : - echo "**** End of kABI DWARF-based comparison report ****" - else - echo "**** Baseline dataset for kABI DWARF-BASED comparison report not found ****" - fi - - rm -rf $RPM_BUILD_ROOT/kabi-dwarf - fi -%endif - - # then drop all but the needed Makefiles/Kconfig files - rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts - rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include - cp .config $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a scripts $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts/tracing - rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts/spdxcheck.py - -%ifarch s390x - # CONFIG_EXPOLINE_EXTERN=y produces arch/s390/lib/expoline.o - # which is needed during external module build. - if [ -f arch/s390/lib/expoline.o ]; then - cp -a --parents arch/s390/lib/expoline.o $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - fi -%endif - - # Files for 'make scripts' to succeed with kernel-devel. - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/security/selinux/include - cp -a --parents security/selinux/include/classmap.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents security/selinux/include/initial_sid_to_string.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/tools/include/tools - cp -a --parents tools/include/tools/be_byteshift.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/tools/le_byteshift.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - - # Files for 'make prepare' to succeed with kernel-devel. - cp -a --parents tools/include/linux/compiler* $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/linux/types.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/build/Build.include $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/build/Build $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/build/fixdep.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/objtool/sync-check.sh $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/bpf/resolve_btfids $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - - cp --parents security/selinux/include/policycap_names.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents security/selinux/include/policycap.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - - cp -a --parents tools/include/asm-generic $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/linux $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/uapi/asm $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/uapi/asm-generic $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/uapi/linux $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/vdso $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/scripts/utilities.mak $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/lib/subcmd $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/lib/*.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/objtool/*.[ch] $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/objtool/Build $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/objtool/include/objtool/*.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/lib/bpf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/lib/bpf/Build $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - - if [ -f tools/objtool/objtool ]; then - cp -a tools/objtool/objtool $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/tools/objtool/ || : - fi - if [ -f tools/objtool/fixdep ]; then - cp -a tools/objtool/fixdep $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/tools/objtool/ || : - fi - if [ -d arch/$Arch/scripts ]; then - cp -a arch/$Arch/scripts $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/arch/%{_arch} || : - fi - if [ -f arch/$Arch/*lds ]; then - cp -a arch/$Arch/*lds $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/arch/%{_arch}/ || : - fi - if [ -f arch/%{asmarch}/kernel/module.lds ]; then - cp -a --parents arch/%{asmarch}/kernel/module.lds $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - fi - find $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts \( -iname "*.o" -o -iname "*.cmd" \) -exec rm -f {} + -%ifarch ppc64le - cp -a --parents arch/powerpc/lib/crtsavres.[So] $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ -%endif - if [ -d arch/%{asmarch}/include ]; then - cp -a --parents arch/%{asmarch}/include $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - fi -%ifarch aarch64 - # arch/arm64/include/asm/xen references arch/arm - cp -a --parents arch/arm/include/asm/xen $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - # arch/arm64/include/asm/opcodes.h references arch/arm - cp -a --parents arch/arm/include/asm/opcodes.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ -%endif - # include the machine specific headers for ARM variants, if available. -%ifarch %{arm} - if [ -d arch/%{asmarch}/mach-${Variant}/include ]; then - cp -a --parents arch/%{asmarch}/mach-${Variant}/include $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - fi - # include a few files for 'make prepare' - cp -a --parents arch/arm/tools/gen-mach-types $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/arm/tools/mach-types $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - -%endif - cp -a include $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include -%ifarch i686 x86_64 - # files for 'make prepare' to succeed with kernel-devel - cp -a --parents arch/x86/entry/syscalls/syscall_32.tbl $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/entry/syscalls/syscall_64.tbl $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs_32.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs_64.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs_common.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/purgatory/purgatory.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/purgatory/stack.S $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/purgatory/setup-x86_64.S $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/purgatory/entry64.S $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/boot/string.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/boot/string.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/boot/ctype.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - - cp -a --parents scripts/syscalltbl.sh $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents scripts/syscallhdr.sh $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - - cp -a --parents tools/arch/x86/include/asm $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/arch/x86/include/uapi/asm $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/objtool/arch/x86/lib $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/arch/x86/lib/ $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/arch/x86/tools/gen-insn-attr-x86.awk $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/objtool/arch/x86/ $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - -%endif - # Clean up intermediate tools files - find $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/tools \( -iname "*.o" -o -iname "*.cmd" \) -exec rm -f {} + - - # Make sure the Makefile, version.h, and auto.conf have a matching - # timestamp so that external modules can be built - touch -r $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/Makefile \ - $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include/generated/uapi/linux/version.h \ - $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include/config/auto.conf - -%if %{with_debuginfo} - eu-readelf -n vmlinux | grep "Build ID" | awk '{print $NF}' > vmlinux.id - cp vmlinux.id $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/vmlinux.id - - # - # save the vmlinux file for kernel debugging into the kernel-debuginfo rpm - # - mkdir -p $RPM_BUILD_ROOT%{debuginfodir}/lib/modules/$KernelVer - cp vmlinux $RPM_BUILD_ROOT%{debuginfodir}/lib/modules/$KernelVer - if [ -n "%{vmlinux_decompressor}" ]; then - eu-readelf -n %{vmlinux_decompressor} | grep "Build ID" | awk '{print $NF}' > vmlinux.decompressor.id - # Without build-id the build will fail. But for s390 the build-id - # wasn't added before 5.11. In case it is missing prefer not - # packaging the debuginfo over a build failure. - if [ -s vmlinux.decompressor.id ]; then - cp vmlinux.decompressor.id $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/vmlinux.decompressor.id - cp %{vmlinux_decompressor} $RPM_BUILD_ROOT%{debuginfodir}/lib/modules/$KernelVer/vmlinux.decompressor - fi - fi -%endif - - find $RPM_BUILD_ROOT/lib/modules/$KernelVer -name "*.ko" -type f >modnames - - # mark modules executable so that strip-to-file can strip them - xargs --no-run-if-empty chmod u+x < modnames - - # Generate a list of modules for block and networking. - - grep -F /drivers/ modnames | xargs --no-run-if-empty nm -upA | - sed -n 's,^.*/\([^/]*\.ko\): *U \(.*\)$,\1 \2,p' > drivers.undef - - collect_modules_list() - { - sed -r -n -e "s/^([^ ]+) \\.?($2)\$/\\1/p" drivers.undef | - LC_ALL=C sort -u > $RPM_BUILD_ROOT/lib/modules/$KernelVer/modules.$1 - if [ ! -z "$3" ]; then - sed -r -e "/^($3)\$/d" -i $RPM_BUILD_ROOT/lib/modules/$KernelVer/modules.$1 - fi - } - - collect_modules_list networking \ - 'register_netdev|ieee80211_register_hw|usbnet_probe|phy_driver_register|rt(l_|2x00)(pci|usb)_probe|register_netdevice' - collect_modules_list block \ - 'ata_scsi_ioctl|scsi_add_host|scsi_add_host_with_dma|blk_alloc_queue|blk_init_queue|register_mtd_blktrans|scsi_esp_register|scsi_register_device_handler|blk_queue_physical_block_size' 'pktcdvd.ko|dm-mod.ko' - collect_modules_list drm \ - 'drm_open|drm_init' - collect_modules_list modesetting \ - 'drm_crtc_init' - - # detect missing or incorrect license tags - ( find $RPM_BUILD_ROOT/lib/modules/$KernelVer -name '*.ko' | xargs /sbin/modinfo -l | \ - grep -E -v 'GPL( v2)?$|Dual BSD/GPL$|Dual MPL/GPL$|GPL and additional rights$' ) && exit 1 - - remove_depmod_files() - { - # remove files that will be auto generated by depmod at rpm -i time - pushd $RPM_BUILD_ROOT/lib/modules/$KernelVer/ - rm -f modules.{alias,alias.bin,builtin.alias.bin,builtin.bin} \ - modules.{dep,dep.bin,devname,softdep,symbols,symbols.bin} - popd - } - - remove_depmod_files - - # Identify modules in the kernel-modules-extras package - %{SOURCE20} $RPM_BUILD_ROOT lib/modules/$KernelVer $(realpath configs/mod-extra.list) - # Identify modules in the kernel-modules-extras package - %{SOURCE20} $RPM_BUILD_ROOT lib/modules/$KernelVer %{SOURCE84} internal - - # - # Generate the kernel-core and kernel-modules files lists - # - - # Copy the System.map file for depmod to use, and create a backup of the - # full module tree so we can restore it after we're done filtering - cp System.map $RPM_BUILD_ROOT/. - cp configs/filter-*.sh $RPM_BUILD_ROOT/. - pushd $RPM_BUILD_ROOT - mkdir restore - cp -r lib/modules/$KernelVer/* restore/. - - # don't include anything going into kernel-modules-extra in the file lists - xargs rm -rf < mod-extra.list - # don't include anything going int kernel-modules-internal in the file lists - xargs rm -rf < mod-internal.list - - if [ $DoModules -eq 1 ]; then - # Find all the module files and filter them out into the core and - # modules lists. This actually removes anything going into -modules - # from the dir. - find lib/modules/$KernelVer/kernel -name *.ko | sort -n > modules.list - ./filter-modules.sh modules.list %{_target_cpu} - rm filter-*.sh - - # Run depmod on the resulting module tree and make sure it isn't broken - depmod -b . -aeF ./System.map $KernelVer &> depmod.out - if [ -s depmod.out ]; then - echo "Depmod failure" - cat depmod.out - exit 1 - else - rm depmod.out - fi - else - # Ensure important files/directories exist to let the packaging succeed - echo '%%defattr(-,-,-)' > modules.list - echo '%%defattr(-,-,-)' > k-d.list - mkdir -p lib/modules/$KernelVer/kernel - # Add files usually created by make modules, needed to prevent errors - # thrown by depmod during package installation - touch lib/modules/$KernelVer/modules.order - touch lib/modules/$KernelVer/modules.builtin - fi - - remove_depmod_files - - # Go back and find all of the various directories in the tree. We use this - # for the dir lists in kernel-core - find lib/modules/$KernelVer/kernel -mindepth 1 -type d | sort -n > module-dirs.list - - # Cleanup - rm System.map - # Just "cp -r" can be very slow: here, it rewrites _existing files_ - # with open(O_TRUNC). Many filesystems synchronously wait for metadata - # update for such file rewrites (seen in strace as final close syscall - # taking a long time). On a rotational disk, cp was observed to take - # more than 5 minutes on ext4 and more than 15 minutes (!) on xfs. - # With --remove-destination, we avoid this, and copying - # (with enough RAM to cache it) takes 5 seconds: - cp -r --remove-destination restore/* lib/modules/$KernelVer/. - rm -rf restore - popd - - # Make sure the files lists start with absolute paths or rpmbuild fails. - # Also add in the dir entries - sed -e 's/^lib*/\/lib/' %{?zipsed} $RPM_BUILD_ROOT/k-d.list > ../kernel${Variant:+-${Variant}}-modules.list - sed -e 's/^lib*/%dir \/lib/' %{?zipsed} $RPM_BUILD_ROOT/module-dirs.list > ../kernel${Variant:+-${Variant}}-core.list - sed -e 's/^lib*/\/lib/' %{?zipsed} $RPM_BUILD_ROOT/modules.list >> ../kernel${Variant:+-${Variant}}-core.list - sed -e 's/^lib*/\/lib/' %{?zipsed} $RPM_BUILD_ROOT/mod-extra.list >> ../kernel${Variant:+-${Variant}}-modules-extra.list - sed -e 's/^lib*/\/lib/' %{?zipsed} $RPM_BUILD_ROOT/mod-internal.list >> ../kernel${Variant:+-${Variant}}-modules-internal.list - - # Cleanup - rm -f $RPM_BUILD_ROOT/k-d.list - rm -f $RPM_BUILD_ROOT/modules.list - rm -f $RPM_BUILD_ROOT/module-dirs.list - rm -f $RPM_BUILD_ROOT/mod-extra.list - rm -f $RPM_BUILD_ROOT/mod-internal.list - -%if %{signmodules} - if [ $DoModules -eq 1 ]; then - # Save the signing keys so we can sign the modules in __modsign_install_post - cp certs/signing_key.pem certs/signing_key.pem.sign${Variant:++${Variant}} - cp certs/signing_key.x509 certs/signing_key.x509.sign${Variant:++${Variant}} - fi -%endif - - # Move the devel headers out of the root file system - mkdir -p $RPM_BUILD_ROOT/usr/src/kernels - mv $RPM_BUILD_ROOT/lib/modules/$KernelVer/build $RPM_BUILD_ROOT/$DevelDir - - # This is going to create a broken link during the build, but we don't use - # it after this point. We need the link to actually point to something - # when kernel-devel is installed, and a relative link doesn't work across - # the F17 UsrMove feature. - ln -sf $DevelDir $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - -%ifnarch armv7hl - # Generate vmlinux.h and put it to kernel-devel path - bpftool btf dump file vmlinux format c > $RPM_BUILD_ROOT/$DevelDir/vmlinux.h -%endif - - # prune junk from kernel-devel - find $RPM_BUILD_ROOT/usr/src/kernels -name ".*.cmd" -delete - - # Red Hat UEFI Secure Boot CA cert, which can be used to authenticate the kernel - mkdir -p $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer - %ifarch x86_64 aarch64 - install -m 0644 %{secureboot_ca_0} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca-20200609.cer - install -m 0644 %{secureboot_ca_1} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca-20140212.cer - ln -s kernel-signing-ca-20200609.cer $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca.cer - %else - install -m 0644 %{secureboot_ca_0} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca.cer - %endif - %ifarch s390x ppc64le - if [ $DoModules -eq 1 ]; then - if [ -x /usr/bin/rpm-sign ]; then - install -m 0644 %{secureboot_key_0} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/%{signing_key_filename} - else - install -m 0644 certs/signing_key.x509.sign${Variant:++${Variant}} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca.cer - openssl x509 -in certs/signing_key.pem.sign${Variant:++${Variant}} -outform der -out $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/%{signing_key_filename} - chmod 0644 $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/%{signing_key_filename} - fi - fi - %endif - -%if %{with_ipaclones} - MAXPROCS=$(echo %{?_smp_mflags} | sed -n 's/-j\s*\([0-9]\+\)/\1/p') - if [ -z "$MAXPROCS" ]; then - MAXPROCS=1 - fi - if [ "$Variant" == "" ]; then - mkdir -p $RPM_BUILD_ROOT/$DevelDir-ipaclones - find . -name '*.ipa-clones' | xargs -i{} -r -n 1 -P $MAXPROCS install -m 644 -D "{}" "$RPM_BUILD_ROOT/$DevelDir-ipaclones/{}" - fi -%endif - -} - -### -# DO it... -### - -# prepare directories -rm -rf $RPM_BUILD_ROOT -mkdir -p $RPM_BUILD_ROOT/boot -mkdir -p $RPM_BUILD_ROOT%{_libexecdir} - -cd linux-%{KVERREL} - - -%if %{with_debug} -BuildKernel %make_target %kernel_image %{_use_vdso} debug -%endif - -%if %{with_zfcpdump} -BuildKernel %make_target %kernel_image %{_use_vdso} zfcpdump -%endif - -%if %{with_pae} -BuildKernel %make_target %kernel_image %{use_vdso} lpae -%endif - -%if %{with_up} -BuildKernel %make_target %kernel_image %{_use_vdso} -%endif - -%ifnarch noarch i686 -%if !%{with_debug} && !%{with_zfcpdump} && !%{with_pae} && !%{with_up} -# If only building the user space tools, then initialize the build environment -# and some variables so that the various userspace tools can be built. -InitBuildVars -%endif -%endif - -%ifarch aarch64 -%global perf_build_extra_opts CORESIGHT=1 -%endif -%global perf_make \ - %{__make} %{?make_opts} EXTRA_CFLAGS="${RPM_OPT_FLAGS}" LDFLAGS="%{__global_ldflags}" %{?cross_opts} -C tools/perf V=1 NO_PERF_READ_VDSO32=1 NO_PERF_READ_VDSOX32=1 WERROR=0 NO_LIBUNWIND=1 HAVE_CPLUS_DEMANGLE=1 NO_GTK2=1 NO_STRLCPY=1 NO_BIONIC=1 LIBBPF_DYNAMIC=1 LIBTRACEEVENT_DYNAMIC=1 %{?perf_build_extra_opts} prefix=%{_prefix} PYTHON=%{__python3} -%if %{with_perf} -# perf -# make sure check-headers.sh is executable -chmod +x tools/perf/check-headers.sh -%{perf_make} DESTDIR=$RPM_BUILD_ROOT all -%endif - -%global tools_make \ - CFLAGS="${RPM_OPT_FLAGS}" LDFLAGS="%{__global_ldflags}" %{make} %{?make_opts} - -%if %{with_tools} -%ifarch %{cpupowerarchs} -# cpupower -# make sure version-gen.sh is executable. -chmod +x tools/power/cpupower/utils/version-gen.sh -%{tools_make} %{?_smp_mflags} -C tools/power/cpupower CPUFREQ_BENCH=false DEBUG=false -%ifarch x86_64 - pushd tools/power/cpupower/debug/x86_64 - %{tools_make} %{?_smp_mflags} centrino-decode powernow-k8-decode - popd -%endif -%ifarch x86_64 - pushd tools/power/x86/x86_energy_perf_policy/ - %{tools_make} - popd - pushd tools/power/x86/turbostat - %{tools_make} - popd - pushd tools/power/x86/intel-speed-select - %{tools_make} - popd - pushd tools/arch/x86/intel_sdsi - %{tools_make} CFLAGS="${RPM_OPT_FLAGS}" - popd -%endif -%endif -pushd tools/thermal/tmon/ -%{tools_make} -popd -pushd tools/iio/ -%{tools_make} -popd -pushd tools/gpio/ -%{tools_make} -popd -# build VM tools -pushd tools/vm/ -%{tools_make} slabinfo page_owner_sort -popd -%endif - -if [ -f $DevelDir/vmlinux.h ]; then - RPM_VMLINUX_H=$DevelDir/vmlinux.h -fi - -%global bpftool_make \ - %{__make} EXTRA_CFLAGS="${RPM_OPT_FLAGS}" EXTRA_LDFLAGS="%{__global_ldflags}" DESTDIR=$RPM_BUILD_ROOT %{?make_opts} VMLINUX_H="${RPM_VMLINUX_H}" V=1 -%if %{with_bpftool} -pushd tools/bpf/bpftool -%{bpftool_make} -popd -%endif - -%if %{with_selftests} -# Unfortunately, samples/bpf/Makefile expects that the headers are installed -# in the source tree. We installed them previously to $RPM_BUILD_ROOT/usr -# but there's no way to tell the Makefile to take them from there. -%{make} %{?_smp_mflags} headers_install -%{make} %{?_smp_mflags} ARCH=$Arch V=1 M=samples/bpf/ || true - -# Prevent bpf selftests to build bpftool repeatedly: -export BPFTOOL=$(pwd)/tools/bpf/bpftool/bpftool - -pushd tools/testing/selftests -# We need to install here because we need to call make with ARCH set which -# doesn't seem possible to do in the install section. -%{make} %{?_smp_mflags} ARCH=$Arch V=1 TARGETS="bpf vm livepatch net net/forwarding net/mptcp netfilter tc-testing" SKIP_TARGETS="" INSTALL_PATH=%{buildroot}%{_libexecdir}/kselftests VMLINUX_H="${RPM_VMLINUX_H}" install - -# 'make install' for bpf is broken and upstream refuses to fix it. -# Install the needed files manually. -for dir in bpf bpf/no_alu32 bpf/progs; do - # In ARK, the rpm build continues even if some of the selftests - # cannot be built. It's not always possible to build selftests, - # as upstream sometimes dependens on too new llvm version or has - # other issues. If something did not get built, just skip it. - test -d $dir || continue - mkdir -p %{buildroot}%{_libexecdir}/kselftests/$dir - find $dir -maxdepth 1 -type f \( -executable -o -name '*.py' -o -name settings -o \ - -name 'btf_dump_test_case_*.c' -o -name '*.ko' -o \ - -name '*.o' -exec sh -c 'readelf -h "{}" | grep -q "^ Machine:.*BPF"' \; \) -print0 | \ - xargs -0 cp -t %{buildroot}%{_libexecdir}/kselftests/$dir || true -done -popd -export -n BPFTOOL -%endif - -%if %{with_doc} -# Make the HTML pages. -%{__make} PYTHON=/usr/bin/python3 htmldocs || %{doc_build_fail} - -# sometimes non-world-readable files sneak into the kernel source tree -chmod -R a=rX Documentation -find Documentation -type d | xargs chmod u+w -%endif - -# In the modsign case, we do 3 things. 1) We check the "variant" and hard -# code the value in the following invocations. This is somewhat sub-optimal -# but we're doing this inside of an RPM macro and it isn't as easy as it -# could be because of that. 2) We restore the .tmp_versions/ directory from -# the one we saved off in BuildKernel above. This is to make sure we're -# signing the modules we actually built/installed in that variant. 3) We -# grab the arch and invoke mod-sign.sh command to actually sign the modules. -# -# We have to do all of those things _after_ find-debuginfo runs, otherwise -# that will strip the signature off of the modules. -# -# Don't sign modules for the zfcpdump variant as it is monolithic. - -%define __modsign_install_post \ - if [ "%{signmodules}" -eq "1" ]; then \ - if [ "%{with_pae}" -ne "0" ]; then \ - %{modsign_cmd} certs/signing_key.pem.sign+lpae certs/signing_key.x509.sign+lpae $RPM_BUILD_ROOT/lib/modules/%{KVERREL}+lpae/ \ - fi \ - if [ "%{with_debug}" -ne "0" ]; then \ - %{modsign_cmd} certs/signing_key.pem.sign+debug certs/signing_key.x509.sign+debug $RPM_BUILD_ROOT/lib/modules/%{KVERREL}+debug/ \ - fi \ - if [ "%{with_up}" -ne "0" ]; then \ - %{modsign_cmd} certs/signing_key.pem.sign certs/signing_key.x509.sign $RPM_BUILD_ROOT/lib/modules/%{KVERREL}/ \ - fi \ - fi \ - if [ "%{zipmodules}" -eq "1" ]; then \ - find $RPM_BUILD_ROOT/lib/modules/ -type f -name '*.ko' | xargs -P${RPM_BUILD_NCPUS} -r xz; \ - fi \ -%{nil} - -### -### Special hacks for debuginfo subpackages. -### - -# This macro is used by %%install, so we must redefine it before that. -%define debug_package %{nil} - -%if %{with_debuginfo} - -%ifnarch noarch -%global __debug_package 1 -%files -f debugfiles.list debuginfo-common-%{_target_cpu} -%endif - -%endif - -# We don't want to package debuginfo for self-tests and samples but -# we have to delete them to avoid an error messages about unpackaged -# files. -# Delete the debuginfo for kernel-devel files -%define __remove_unwanted_dbginfo_install_post \ - if [ "%{with_selftests}" -ne "0" ]; then \ - rm -rf $RPM_BUILD_ROOT/usr/lib/debug/usr/libexec/ksamples; \ - rm -rf $RPM_BUILD_ROOT/usr/lib/debug/usr/libexec/kselftests; \ - fi \ - rm -rf $RPM_BUILD_ROOT/usr/lib/debug/usr/src; \ -%{nil} - -# -# Disgusting hack alert! We need to ensure we sign modules *after* all -# invocations of strip occur, which is in __debug_install_post if -# find-debuginfo.sh runs, and __os_install_post if not. -# -%define __spec_install_post \ - %{?__debug_package:%{__debug_install_post}}\ - %{__arch_install_post}\ - %{__os_install_post}\ - %{__remove_unwanted_dbginfo_install_post}\ - %{__modsign_install_post} - -### -### install -### - -%install - -cd linux-%{KVERREL} - -%if %{with_doc} -docdir=$RPM_BUILD_ROOT%{_datadir}/doc/kernel-doc-%{specversion}-%{pkgrelease} - -# copy the source over -mkdir -p $docdir -tar -h -f - --exclude=man --exclude='.*' -c Documentation | tar xf - -C $docdir - -# with_doc -%endif - -# We have to do the headers install before the tools install because the -# kernel headers_install will remove any header files in /usr/include that -# it doesn't install itself. - -%if %{with_headers} -# Install kernel headers -%{__make} ARCH=%{hdrarch} INSTALL_HDR_PATH=$RPM_BUILD_ROOT/usr headers_install - -find $RPM_BUILD_ROOT/usr/include \ - \( -name .install -o -name .check -o \ - -name ..install.cmd -o -name ..check.cmd \) -delete - -%endif - -%if %{with_cross_headers} -%if 0%{?fedora} -HDR_ARCH_LIST='arm arm64 powerpc s390 x86' -%else -HDR_ARCH_LIST='arm64 powerpc s390 x86' -%endif -mkdir -p $RPM_BUILD_ROOT/usr/tmp-headers - -for arch in $HDR_ARCH_LIST; do - mkdir $RPM_BUILD_ROOT/usr/tmp-headers/arch-${arch} - %{__make} ARCH=${arch} INSTALL_HDR_PATH=$RPM_BUILD_ROOT/usr/tmp-headers/arch-${arch} headers_install -done - -find $RPM_BUILD_ROOT/usr/tmp-headers \ - \( -name .install -o -name .check -o \ - -name ..install.cmd -o -name ..check.cmd \) -delete - -# Copy all the architectures we care about to their respective asm directories -for arch in $HDR_ARCH_LIST ; do - mkdir -p $RPM_BUILD_ROOT/usr/${arch}-linux-gnu/include - mv $RPM_BUILD_ROOT/usr/tmp-headers/arch-${arch}/include/* $RPM_BUILD_ROOT/usr/${arch}-linux-gnu/include/ -done - -rm -rf $RPM_BUILD_ROOT/usr/tmp-headers -%endif - -%if %{with_kernel_abi_stablelists} -# kabi directory -INSTALL_KABI_PATH=$RPM_BUILD_ROOT/lib/modules/ -mkdir -p $INSTALL_KABI_PATH - -# install kabi releases directories -tar xjvf %{SOURCE300} -C $INSTALL_KABI_PATH -# with_kernel_abi_stablelists -%endif - -%if %{with_perf} -# perf tool binary and supporting scripts/binaries -%{perf_make} DESTDIR=$RPM_BUILD_ROOT lib=%{_lib} install-bin -# remove the 'trace' symlink. -rm -f %{buildroot}%{_bindir}/trace - -# For both of the below, yes, this should be using a macro but right now -# it's hard coded and we don't actually want it anyway right now. -# Whoever wants examples can fix it up! - -# remove examples -rm -rf %{buildroot}/usr/lib/perf/examples -rm -rf %{buildroot}/usr/lib/perf/include - -# python-perf extension -%{perf_make} DESTDIR=$RPM_BUILD_ROOT install-python_ext - -# perf man pages (note: implicit rpm magic compresses them later) -mkdir -p %{buildroot}/%{_mandir}/man1 -%{perf_make} DESTDIR=$RPM_BUILD_ROOT install-man - -# remove any tracevent files, eg. its plugins still gets built and installed, -# even if we build against system's libtracevent during perf build (by setting -# LIBTRACEEVENT_DYNAMIC=1 above in perf_make macro). Those files should already -# ship with libtraceevent package. -rm -rf %{buildroot}%{_libdir}/traceevent -%endif - -%if %{with_tools} -%ifarch %{cpupowerarchs} -%{make} -C tools/power/cpupower DESTDIR=$RPM_BUILD_ROOT libdir=%{_libdir} mandir=%{_mandir} CPUFREQ_BENCH=false install -rm -f %{buildroot}%{_libdir}/*.{a,la} -%find_lang cpupower -mv cpupower.lang ../ -%ifarch x86_64 - pushd tools/power/cpupower/debug/x86_64 - install -m755 centrino-decode %{buildroot}%{_bindir}/centrino-decode - install -m755 powernow-k8-decode %{buildroot}%{_bindir}/powernow-k8-decode - popd -%endif -chmod 0755 %{buildroot}%{_libdir}/libcpupower.so* -mkdir -p %{buildroot}%{_unitdir} %{buildroot}%{_sysconfdir}/sysconfig -install -m644 %{SOURCE2000} %{buildroot}%{_unitdir}/cpupower.service -install -m644 %{SOURCE2001} %{buildroot}%{_sysconfdir}/sysconfig/cpupower -%endif -%ifarch x86_64 - mkdir -p %{buildroot}%{_mandir}/man8 - pushd tools/power/x86/x86_energy_perf_policy - %{tools_make} DESTDIR=%{buildroot} install - popd - pushd tools/power/x86/turbostat - %{tools_make} DESTDIR=%{buildroot} install - popd - pushd tools/power/x86/intel-speed-select - %{tools_make} DESTDIR=%{buildroot} install - popd - pushd tools/arch/x86/intel_sdsi - %{tools_make} CFLAGS="${RPM_OPT_FLAGS}" DESTDIR=%{buildroot} install - popd -%endif -pushd tools/thermal/tmon -%{tools_make} INSTALL_ROOT=%{buildroot} install -popd -pushd tools/iio -%{tools_make} DESTDIR=%{buildroot} install -popd -pushd tools/gpio -%{tools_make} DESTDIR=%{buildroot} install -popd -install -m644 -D %{SOURCE2002} %{buildroot}%{_sysconfdir}/logrotate.d/kvm_stat -pushd tools/kvm/kvm_stat -%{__make} INSTALL_ROOT=%{buildroot} install-tools -%{__make} INSTALL_ROOT=%{buildroot} install-man -install -m644 -D kvm_stat.service %{buildroot}%{_unitdir}/kvm_stat.service -popd -# install VM tools -pushd tools/vm/ -install -m755 slabinfo %{buildroot}%{_bindir}/slabinfo -install -m755 page_owner_sort %{buildroot}%{_bindir}/page_owner_sort -popd -%endif - -if [ -f $DevelDir/vmlinux.h ]; then - RPM_VMLINUX_H=$DevelDir/vmlinux.h -fi - -%if %{with_bpftool} -pushd tools/bpf/bpftool -%{bpftool_make} prefix=%{_prefix} bash_compdir=%{_sysconfdir}/bash_completion.d/ mandir=%{_mandir} install doc-install -popd -%endif - -%if %{with_selftests} -pushd samples -install -d %{buildroot}%{_libexecdir}/ksamples -# install bpf samples -pushd bpf -install -d %{buildroot}%{_libexecdir}/ksamples/bpf -find -type f -executable -exec install -m755 {} %{buildroot}%{_libexecdir}/ksamples/bpf \; -install -m755 *.sh %{buildroot}%{_libexecdir}/ksamples/bpf -# test_lwt_bpf.sh compiles test_lwt_bpf.c when run; this works only from the -# kernel tree. Just remove it. -rm %{buildroot}%{_libexecdir}/ksamples/bpf/test_lwt_bpf.sh -install -m644 *_kern.o %{buildroot}%{_libexecdir}/ksamples/bpf || true -install -m644 tcp_bpf.readme %{buildroot}%{_libexecdir}/ksamples/bpf -popd -# install pktgen samples -pushd pktgen -install -d %{buildroot}%{_libexecdir}/ksamples/pktgen -find . -type f -executable -exec install -m755 {} %{buildroot}%{_libexecdir}/ksamples/pktgen/{} \; -find . -type f ! -executable -exec install -m644 {} %{buildroot}%{_libexecdir}/ksamples/pktgen/{} \; -popd -popd -# install vm selftests -pushd tools/testing/selftests/vm -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/vm/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/vm/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/vm/{} \; -popd -# install drivers/net/mlxsw selftests -pushd tools/testing/selftests/drivers/net/mlxsw -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/drivers/net/mlxsw/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/drivers/net/mlxsw/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/drivers/net/mlxsw/{} \; -popd -# install drivers/net/netdevsim selftests -pushd tools/testing/selftests/drivers/net/netdevsim -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/drivers/net/netdevsim/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/drivers/net/netdevsim/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/drivers/net/netdevsim/{} \; -popd -# install net/forwarding selftests -pushd tools/testing/selftests/net/forwarding -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/net/forwarding/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/net/forwarding/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/net/forwarding/{} \; -popd -# install net/mptcp selftests -pushd tools/testing/selftests/net/mptcp -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/net/mptcp/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/net/mptcp/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/net/mptcp/{} \; -popd -# install tc-testing selftests -pushd tools/testing/selftests/tc-testing -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/tc-testing/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/tc-testing/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/tc-testing/{} \; -popd -# install livepatch selftests -pushd tools/testing/selftests/livepatch -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/livepatch/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/livepatch/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/livepatch/{} \; -popd -# install netfilter selftests -pushd tools/testing/selftests/netfilter -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/netfilter/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/netfilter/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/netfilter/{} \; -popd -%endif - -### -### clean -### - -### -### scripts -### - -%if %{with_tools} -%post -n kernel-tools-libs -/sbin/ldconfig - -%postun -n kernel-tools-libs -/sbin/ldconfig -%endif - -# -# This macro defines a %%post script for a kernel*-devel package. -# %%kernel_devel_post [<subpackage>] -# Note we don't run hardlink if ostree is in use, as ostree is -# a far more sophisticated hardlink implementation. -# https://github.com/projectatomic/rpm-ostree/commit/58a79056a889be8814aa51f507b2c7a4dccee526 -# -# The deletion of *.hardlink-temporary files is a temporary workaround -# for this bug in the hardlink binary (fixed in util-linux 2.38): -# https://github.com/util-linux/util-linux/issues/1602 -# -%define kernel_devel_post() \ -%{expand:%%post %{?1:%{1}-}devel}\ -if [ -f /etc/sysconfig/kernel ]\ -then\ - . /etc/sysconfig/kernel || exit $?\ -fi\ -if [ "$HARDLINK" != "no" -a -x /usr/bin/hardlink -a ! -e /run/ostree-booted ] \ -then\ - (cd /usr/src/kernels/%{KVERREL}%{?1:+%{1}} &&\ - /usr/bin/find . -type f | while read f; do\ - hardlink -c /usr/src/kernels/*%{?dist}.*/$f $f > /dev/null\ - done;\ - /usr/bin/find /usr/src/kernels -type f -name '*.hardlink-temporary' -delete\ - )\ -fi\ -%{nil} - -# -# This macro defines a %%post script for a kernel*-modules-extra package. -# It also defines a %%postun script that does the same thing. -# %%kernel_modules_extra_post [<subpackage>] -# -%define kernel_modules_extra_post() \ -%{expand:%%post %{?1:%{1}-}modules-extra}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil}\ -%{expand:%%postun %{?1:%{1}-}modules-extra}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil} - -# -# This macro defines a %%post script for a kernel*-modules-internal package. -# It also defines a %%postun script that does the same thing. -# %%kernel_modules_internal_post [<subpackage>] -# -%define kernel_modules_internal_post() \ -%{expand:%%post %{?1:%{1}-}modules-internal}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil}\ -%{expand:%%postun %{?1:%{1}-}modules-internal}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil} - -# -# This macro defines a %%post script for a kernel*-modules package. -# It also defines a %%postun script that does the same thing. -# %%kernel_modules_post [<subpackage>] -# -%define kernel_modules_post() \ -%{expand:%%post %{?1:%{1}-}modules}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -if [ ! -f %{_localstatedir}/lib/rpm-state/%{name}/installing_core_%{KVERREL}%{?1:+%{1}} ]; then\ - mkdir -p %{_localstatedir}/lib/rpm-state/%{name}\ - touch %{_localstatedir}/lib/rpm-state/%{name}/need_to_run_dracut_%{KVERREL}%{?1:+%{1}}\ -fi\ -%{nil}\ -%{expand:%%postun %{?1:%{1}-}modules}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil}\ -%{expand:%%posttrans %{?1:%{1}-}modules}\ -if [ -f %{_localstatedir}/lib/rpm-state/%{name}/need_to_run_dracut_%{KVERREL}%{?1:+%{1}} ]; then\ - rm -f %{_localstatedir}/lib/rpm-state/%{name}/need_to_run_dracut_%{KVERREL}%{?1:+%{1}}\ - echo "Running: dracut -f --kver %{KVERREL}%{?1:+%{1}}"\ - dracut -f --kver "%{KVERREL}%{?1:+%{1}}" || exit $?\ -fi\ -%{nil} - -# This macro defines a %%posttrans script for a kernel package. -# %%kernel_variant_posttrans [<subpackage>] -# More text can follow to go at the end of this variant's %%post. -# -%define kernel_variant_posttrans() \ -%{expand:%%posttrans %{?1:%{1}-}core}\ -%if 0%{!?fedora:1}\ -if [ -x %{_sbindir}/weak-modules ]\ -then\ - %{_sbindir}/weak-modules --add-kernel %{KVERREL}%{?1:+%{1}} || exit $?\ -fi\ -%endif\ -rm -f %{_localstatedir}/lib/rpm-state/%{name}/installing_core_%{KVERREL}%{?1:+%{1}}\ -/bin/kernel-install add %{KVERREL}%{?1:+%{1}} /lib/modules/%{KVERREL}%{?1:+%{1}}/vmlinuz || exit $?\ -%{nil} - -# -# This macro defines a %%post script for a kernel package and its devel package. -# %%kernel_variant_post [-v <subpackage>] [-r <replace>] -# More text can follow to go at the end of this variant's %%post. -# -%define kernel_variant_post(v:r:) \ -%{expand:%%kernel_devel_post %{?-v*}}\ -%{expand:%%kernel_modules_post %{?-v*}}\ -%{expand:%%kernel_modules_extra_post %{?-v*}}\ -%{expand:%%kernel_modules_internal_post %{?-v*}}\ -%{expand:%%kernel_variant_posttrans %{?-v*}}\ -%{expand:%%post %{?-v*:%{-v*}-}core}\ -%{-r:\ -if [ `uname -i` == "x86_64" -o `uname -i` == "i386" ] &&\ - [ -f /etc/sysconfig/kernel ]; then\ - /bin/sed -r -i -e 's/^DEFAULTKERNEL=%{-r*}$/DEFAULTKERNEL=kernel%{?-v:-%{-v*}}/' /etc/sysconfig/kernel || exit $?\ -fi}\ -mkdir -p %{_localstatedir}/lib/rpm-state/%{name}\ -touch %{_localstatedir}/lib/rpm-state/%{name}/installing_core_%{KVERREL}%{?1:+%{1}}\ -%{nil} - -# -# This macro defines a %%preun script for a kernel package. -# %%kernel_variant_preun <subpackage> -# -%define kernel_variant_preun() \ -%{expand:%%preun %{?1:%{1}-}core}\ -/bin/kernel-install remove %{KVERREL}%{?1:+%{1}} /lib/modules/%{KVERREL}%{?1:+%{1}}/vmlinuz || exit $?\ -if [ -x %{_sbindir}/weak-modules ]\ -then\ - %{_sbindir}/weak-modules --remove-kernel %{KVERREL}%{?1:+%{1}} || exit $?\ -fi\ -%{nil} - -%kernel_variant_preun -%kernel_variant_post -r kernel-smp - -%if %{with_pae} -%kernel_variant_preun lpae -%kernel_variant_post -v lpae -r (kernel|kernel-smp) -%endif - -%if %{with_debug} -%kernel_variant_preun debug -%kernel_variant_post -v debug -%endif - -%if %{with_zfcpdump} -%kernel_variant_preun zfcpdump -%kernel_variant_post -v zfcpdump -%endif - -if [ -x /sbin/ldconfig ] -then - /sbin/ldconfig -X || exit $? -fi - -### -### file lists -### - -%if %{with_headers} -%files headers -/usr/include/* -%endif - -%if %{with_cross_headers} -%files cross-headers -/usr/*-linux-gnu/include/* -%endif - -%if %{with_kernel_abi_stablelists} -%files -n kernel-abi-stablelists -/lib/modules/kabi-* -%endif - -%if %{with_kabidw_base} -%ifarch x86_64 s390x ppc64 ppc64le aarch64 -%files kernel-kabidw-base-internal -%defattr(-,root,root) -/kabidw-base/%{_target_cpu}/* -%endif -%endif - -# only some architecture builds need kernel-doc -%if %{with_doc} -%files doc -%defattr(-,root,root) -%{_datadir}/doc/kernel-doc-%{specversion}-%{pkgrelease}/Documentation/* -%dir %{_datadir}/doc/kernel-doc-%{specversion}-%{pkgrelease}/Documentation -%dir %{_datadir}/doc/kernel-doc-%{specversion}-%{pkgrelease} -%endif - -%if %{with_perf} -%files -n perf -%{_bindir}/perf -%{_libdir}/libperf-jvmti.so -%dir %{_libexecdir}/perf-core -%{_libexecdir}/perf-core/* -%{_datadir}/perf-core/* -%{_mandir}/man[1-8]/perf* -%{_sysconfdir}/bash_completion.d/perf -%doc linux-%{KVERREL}/tools/perf/Documentation/examples.txt -%{_docdir}/perf-tip/tips.txt - -%files -n python3-perf -%{python3_sitearch}/* - -%if %{with_debuginfo} -%files -f perf-debuginfo.list -n perf-debuginfo - -%files -f python3-perf-debuginfo.list -n python3-perf-debuginfo -%endif -# with_perf -%endif - -%if %{with_tools} -%ifnarch %{cpupowerarchs} -%files -n kernel-tools -%else -%files -n kernel-tools -f cpupower.lang -%{_bindir}/cpupower -%{_datadir}/bash-completion/completions/cpupower -%ifarch x86_64 -%{_bindir}/centrino-decode -%{_bindir}/powernow-k8-decode -%endif -%{_unitdir}/cpupower.service -%{_mandir}/man[1-8]/cpupower* -%config(noreplace) %{_sysconfdir}/sysconfig/cpupower -%ifarch x86_64 -%{_bindir}/x86_energy_perf_policy -%{_mandir}/man8/x86_energy_perf_policy* -%{_bindir}/turbostat -%{_mandir}/man8/turbostat* -%{_bindir}/intel-speed-select -%{_sbindir}/intel_sdsi -%endif -# cpupowerarchs -%endif -%{_bindir}/tmon -%{_bindir}/iio_event_monitor -%{_bindir}/iio_generic_buffer -%{_bindir}/lsiio -%{_bindir}/lsgpio -%{_bindir}/gpio-hammer -%{_bindir}/gpio-event-mon -%{_bindir}/gpio-watch -%{_mandir}/man1/kvm_stat* -%{_bindir}/kvm_stat -%{_unitdir}/kvm_stat.service -%config(noreplace) %{_sysconfdir}/logrotate.d/kvm_stat -%{_bindir}/page_owner_sort -%{_bindir}/slabinfo - -%if %{with_debuginfo} -%files -f kernel-tools-debuginfo.list -n kernel-tools-debuginfo -%endif - -%ifarch %{cpupowerarchs} -%files -n kernel-tools-libs -%{_libdir}/libcpupower.so.0 -%{_libdir}/libcpupower.so.0.0.1 - -%files -n kernel-tools-libs-devel -%{_libdir}/libcpupower.so -%{_includedir}/cpufreq.h -%endif -# with_tools -%endif - -%if %{with_bpftool} -%files -n bpftool -%{_sbindir}/bpftool -%{_sysconfdir}/bash_completion.d/bpftool -%{_mandir}/man8/bpftool-cgroup.8.gz -%{_mandir}/man8/bpftool-gen.8.gz -%{_mandir}/man8/bpftool-iter.8.gz -%{_mandir}/man8/bpftool-link.8.gz -%{_mandir}/man8/bpftool-map.8.gz -%{_mandir}/man8/bpftool-prog.8.gz -%{_mandir}/man8/bpftool-perf.8.gz -%{_mandir}/man8/bpftool.8.gz -%{_mandir}/man8/bpftool-net.8.gz -%{_mandir}/man8/bpftool-feature.8.gz -%{_mandir}/man8/bpftool-btf.8.gz -%{_mandir}/man8/bpftool-struct_ops.8.gz - -%if %{with_debuginfo} -%files -f bpftool-debuginfo.list -n bpftool-debuginfo -%defattr(-,root,root) -%endif -%endif - -%if %{with_selftests} -%files selftests-internal -%{_libexecdir}/ksamples -%{_libexecdir}/kselftests -%endif - -# empty meta-package -%ifnarch %nobuildarches noarch -%files -%endif - -%if %{with_gcov} -%ifnarch %nobuildarches noarch -%files gcov -%{_builddir} -%endif -%endif - -# This is %%{image_install_path} on an arch where that includes ELF files, -# or empty otherwise. -%define elf_image_install_path %{?kernel_image_elf:%{image_install_path}} - -# -# This macro defines the %%files sections for a kernel package -# and its devel and debuginfo packages. -# %%kernel_variant_files [-k vmlinux] <use_vdso> <condition> <subpackage> -# -%define kernel_variant_files(k:) \ -%if %{2}\ -%{expand:%%files -f kernel-%{?3:%{3}-}core.list %{?1:-f kernel-%{?3:%{3}-}ldsoconf.list} %{?3:%{3}-}core}\ -%{!?_licensedir:%global license %%doc}\ -%license linux-%{KVERREL}/COPYING-%{version}-%{release}\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/%{?-k:%{-k*}}%{!?-k:vmlinuz}\ -%ghost /%{image_install_path}/%{?-k:%{-k*}}%{!?-k:vmlinuz}-%{KVERREL}%{?3:+%{3}}\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/.vmlinuz.hmac \ -%ghost /%{image_install_path}/.vmlinuz-%{KVERREL}%{?3:+%{3}}.hmac \ -%ifarch %{arm} aarch64\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/dtb \ -%ghost /%{image_install_path}/dtb-%{KVERREL}%{?3:+%{3}} \ -%endif\ -%attr(0600, root, root) /lib/modules/%{KVERREL}%{?3:+%{3}}/System.map\ -%ghost %attr(0600, root, root) /boot/System.map-%{KVERREL}%{?3:+%{3}}\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/symvers.gz\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/config\ -%ghost %attr(0600, root, root) /boot/symvers-%{KVERREL}%{?3:+%{3}}.gz\ -%ghost %attr(0600, root, root) /boot/initramfs-%{KVERREL}%{?3:+%{3}}.img\ -%ghost %attr(0644, root, root) /boot/config-%{KVERREL}%{?3:+%{3}}\ -%dir /lib/modules\ -%dir /lib/modules/%{KVERREL}%{?3:+%{3}}\ -%dir /lib/modules/%{KVERREL}%{?3:+%{3}}/kernel\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/build\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/source\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/updates\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/weak-updates\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/systemtap\ -%{_datadir}/doc/kernel-keys/%{KVERREL}%{?3:+%{3}}\ -%if %{1}\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/vdso\ -%endif\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/modules.*\ -%{expand:%%files -f kernel-%{?3:%{3}-}modules.list %{?3:%{3}-}modules}\ -%{expand:%%files %{?3:%{3}-}devel}\ -%defverify(not mtime)\ -/usr/src/kernels/%{KVERREL}%{?3:+%{3}}\ -%{expand:%%files %{?3:%{3}-}devel-matched}\ -%{expand:%%files -f kernel-%{?3:%{3}-}modules-extra.list %{?3:%{3}-}modules-extra}\ -%config(noreplace) /etc/modprobe.d/*-blacklist.conf\ -%{expand:%%files -f kernel-%{?3:%{3}-}modules-internal.list %{?3:%{3}-}modules-internal}\ -%if %{with_debuginfo}\ -%ifnarch noarch\ -%{expand:%%files -f debuginfo%{?3}.list %{?3:%{3}-}debuginfo}\ -%endif\ -%endif\ -%if %{?3:1} %{!?3:0}\ -%{expand:%%files %{3}}\ -%endif\ -%endif\ -%{nil} - -%kernel_variant_files %{_use_vdso} %{with_up} -%kernel_variant_files %{_use_vdso} %{with_debug} debug -%if %{with_debug_meta} -%files debug -%files debug-core -%files debug-devel -%files debug-devel-matched -%files debug-modules -%files debug-modules-extra -%endif -%kernel_variant_files %{use_vdso} %{with_pae} lpae -%kernel_variant_files %{_use_vdso} %{with_zfcpdump} zfcpdump - -%define kernel_variant_ipaclones(k:) \ -%if %{1}\ -%if %{with_ipaclones}\ -%{expand:%%files %{?2:%{2}-}ipaclones-internal}\ -%defattr(-,root,root)\ -%defverify(not mtime)\ -/usr/src/kernels/%{KVERREL}%{?2:+%{2}}-ipaclones\ -%endif\ -%endif\ -%{nil} - -%kernel_variant_ipaclones %{with_up} - -# plz don't put in a version string unless you're going to tag -# and build. -# -# -%changelog Mon Mar 28 2022 Fedora Kernel Team <kernel-team@xxxxxxxxxxxxxxxxx> [5.17.0-0.rc0.78e36f3b0dae.6.test] - -### -# The following Emacs magic makes C-c C-e use UTC dates. -# Local Variables: -# rpm-change-log-uses-utc: t -# End: -### diff --git a/redhat/self-test/data/rhel-78e36f3b0dae.fc25.spec b/redhat/self-test/data/rhel-78e36f3b0dae.fc25.spec index blahblah..blahblah 100755 --- a/redhat/self-test/data/rhel-78e36f3b0dae.fc25.spec +++ b/redhat/self-test/data/rhel-78e36f3b0dae.fc25.spec @@ -1,125 +1,7 @@ -# All Global changes to build and install go here. -# Per the below section about __spec_install_pre, any rpm -# environment changes that affect %%install need to go -# here before the %%install macro is pre-built. - -# Disable LTO in userspace packages. -%global _lto_cflags %{nil} - -# Option to enable compiling with clang instead of gcc. -%bcond_with toolchain_clang - -%if %{with toolchain_clang} -%global toolchain clang -%endif - -# Compile the kernel with LTO (only supported when building with clang). -%bcond_with clang_lto - -%if %{with clang_lto} && %{without toolchain_clang} -{error:clang_lto requires --with toolchain_clang} -%endif - -# Cross compile on copr for arm -# See https://bugzilla.redhat.com/1879599 -%if 0%{?_with_cross_arm:1} -%global _target_cpu armv7hl -%global _arch arm -%global _build_arch arm -%global _with_cross 1 -%endif - -# The kernel's %%install section is special -# Normally the %%install section starts by cleaning up the BUILD_ROOT -# like so: -# -# %%__spec_install_pre %%{___build_pre}\ -# [ "$RPM_BUILD_ROOT" != "/" ] && rm -rf "${RPM_BUILD_ROOT}"\ -# mkdir -p `dirname "$RPM_BUILD_ROOT"`\ -# mkdir "$RPM_BUILD_ROOT"\ -# %%{nil} -# -# But because of kernel variants, the %%build section, specifically -# BuildKernel(), moves each variant to its final destination as the -# variant is built. This violates the expectation of the %%install -# section. As a result we snapshot the current env variables and -# purposely leave out the removal section. All global wide changes -# should be added above this line otherwise the %%install section -# will not see them. -%global __spec_install_pre %{___build_pre} - -# At the time of this writing (2019-03), RHEL8 packages use w2.xzdio -# compression for rpms (xz, level 2). -# Kernel has several large (hundreds of mbytes) rpms, they take ~5 mins -# to compress by single-threaded xz. Switch to threaded compression, -# and from level 2 to 3 to keep compressed sizes close to "w2" results. -# -# NB: if default compression in /usr/lib/rpm/redhat/macros ever changes, -# this one might need tweaking (e.g. if default changes to w3.xzdio, -# change below to w4T.xzdio): -# -# This is disabled on i686 as it triggers oom errors - -%ifnarch i686 -%define _binary_payload w3T.xzdio -%endif - -Summary: The Linux kernel -%if 0%{?fedora} -%define secure_boot_arch x86_64 -%else -%define secure_boot_arch x86_64 aarch64 s390x ppc64le -%endif - -# Signing for secure boot authentication -%ifarch %{secure_boot_arch} -%global signkernel 1 -%else -%global signkernel 0 -%endif - -# Sign modules on all arches -%global signmodules 1 - -# Compress modules only for architectures that build modules -%ifarch noarch -%global zipmodules 0 -%else -%global zipmodules 1 -%endif - -%if %{zipmodules} -%global zipsed -e 's/\.ko$/\.ko.xz/' -# for parallel xz processes, replace with 1 to go back to single process -%endif - -%if 0%{?fedora} -%define primary_target fedora -%else -%define primary_target rhel -%endif - -# -# genspec.sh variables -# - -# Include Fedora files %global include_fedora 1 -# Include RHEL files %global include_rhel 1 -# Provide Patchlist.changelog file %global patchlist_changelog 1 -# Set released_kernel to 1 when the upstream source tarball contains a -# kernel release. (This includes prepatch or "rc" releases.) -# Set released_kernel to 0 when the upstream source tarball contains an -# unreleased kernel development snapshot. %global released_kernel 0 -# Set debugbuildsenabled to 1 to build separate base and debug kernels -# (on supported architectures). The kernel-debug-* subpackages will -# contain the debug kernel. -# Set debugbuildsenabled to 0 to not build a separate debug kernel, but -# to build the base kernel using the debug configuration. (Specifying -# the --with-release option overrides this setting.) %define debugbuildsenabled 0 %define buildid .test %define specversion 5.17.0 @@ -127,2924 +9,6 @@ Summary: The Linux kernel %define pkgrelease 0.rc0.78e36f3b0dae.6.test %define kversion 5 %define tarfile_release 5.17.0-0.rc0.78e36f3b0dae.6.test -# This is needed to do merge window version magic %define patchlevel 17 -# allow pkg_release to have configurable %%{?dist} tag %define specrelease 0.rc0.78e36f3b0dae.6%{?buildid}%{?dist} - -# -# End of genspec.sh variables -# - -%define pkg_release %{specrelease} - -# libexec dir is not used by the linker, so the shared object there -# should not be exported to RPM provides -%global __provides_exclude_from ^%{_libexecdir}/kselftests - -# The following build options are enabled by default, but may become disabled -# by later architecture-specific checks. These can also be disabled by using -# --without <opt> in the rpmbuild command, or by forcing these values to 0. -# -# standard kernel -%define with_up %{?_without_up: 0} %{?!_without_up: 1} -# kernel PAE (only valid for ARM (lpae)) -%define with_pae %{?_without_pae: 0} %{?!_without_pae: 1} -# kernel-debug -%define with_debug %{?_without_debug: 0} %{?!_without_debug: 1} -# kernel-zfcpdump (s390 specific kernel for zfcpdump) -%define with_zfcpdump %{?_without_zfcpdump: 0} %{?!_without_zfcpdump: 1} -# kernel-doc -%define with_doc %{?_without_doc: 0} %{?!_without_doc: 1} -# kernel-headers -%define with_headers %{?_without_headers: 0} %{?!_without_headers: 1} -%define with_cross_headers %{?_without_cross_headers: 0} %{?!_without_cross_headers: 1} -# perf -%define with_perf %{?_without_perf: 0} %{?!_without_perf: 1} -# tools -%define with_tools %{?_without_tools: 0} %{?!_without_tools: 1} -# bpf tool -%define with_bpftool %{?_without_bpftool: 0} %{?!_without_bpftool: 1} -# kernel-debuginfo -%define with_debuginfo %{?_without_debuginfo: 0} %{?!_without_debuginfo: 1} -# kernel-abi-stablelists -%define with_kernel_abi_stablelists %{?_without_kernel_abi_stablelists: 0} %{?!_without_kernel_abi_stablelists: 1} -# internal samples and selftests -%define with_selftests %{?_without_selftests: 0} %{?!_without_selftests: 1} -# -# Additional options for user-friendly one-off kernel building: -# -# Only build the base kernel (--with baseonly): -%define with_baseonly %{?_with_baseonly: 1} %{?!_with_baseonly: 0} -# Only build the pae kernel (--with paeonly): -%define with_paeonly %{?_with_paeonly: 1} %{?!_with_paeonly: 0} -# Only build the debug kernel (--with dbgonly): -%define with_dbgonly %{?_with_dbgonly: 1} %{?!_with_dbgonly: 0} -# Control whether we perform a compat. check against published ABI. -%define with_kabichk %{?_without_kabichk: 0} %{?!_without_kabichk: 1} -# Temporarily disable kabi checks until RC. -%define with_kabichk 0 -# Control whether we perform a compat. check against DUP ABI. -%define with_kabidupchk %{?_with_kabidupchk: 1} %{?!_with_kabidupchk: 0} -# -# Control whether to run an extensive DWARF based kABI check. -# Note that this option needs to have baseline setup in SOURCE300. -%define with_kabidwchk %{?_without_kabidwchk: 0} %{?!_without_kabidwchk: 1} -%define with_kabidw_base %{?_with_kabidw_base: 1} %{?!_with_kabidw_base: 0} -# -# Control whether to install the vdso directories. -%define with_vdso_install %{?_without_vdso_install: 0} %{?!_without_vdso_install: 1} -# -# should we do C=1 builds with sparse -%define with_sparse %{?_with_sparse: 1} %{?!_with_sparse: 0} -# -# Cross compile requested? -%define with_cross %{?_with_cross: 1} %{?!_with_cross: 0} -# -# build a release kernel on rawhide -%define with_release %{?_with_release: 1} %{?!_with_release: 0} - -# verbose build, i.e. no silent rules and V=1 -%define with_verbose %{?_with_verbose: 1} %{?!_with_verbose: 0} - -# -# check for mismatched config options -%define with_configchecks %{?_without_configchecks: 0} %{?!_without_configchecks: 1} - -# -# gcov support -%define with_gcov %{?_with_gcov:1}%{?!_with_gcov:0} - -# -# ipa_clone support -%define with_ipaclones %{?_without_ipaclones: 0} %{?!_without_ipaclones: 1} - -# Want to build a vanilla kernel build without any non-upstream patches? -%define with_vanilla %{?_with_vanilla: 1} %{?!_with_vanilla: 0} - -%if 0%{?fedora} -# Kernel headers are being split out into a separate package -%define with_headers 0 -%define with_cross_headers 0 -# no ipa_clone for now -%define with_ipaclones 0 -# no stablelist -%define with_kernel_abi_stablelists 0 -# Fedora builds these separately -%define with_perf 0 -%define with_tools 0 -%define with_bpftool 0 -# selftests turns on bpftool -%define with_selftests 0 -%endif - -%if %{with_verbose} -%define make_opts V=1 -%else -%define make_opts -s -%endif - -%if %{with toolchain_clang} -%ifarch s390x ppc64le -%global llvm_ias 0 -%else -%global llvm_ias 1 -%endif -%global clang_make_opts HOSTCC=clang CC=clang LLVM_IAS=%{llvm_ias} -%if %{with clang_lto} -%global clang_make_opts %{clang_make_opts} LD=ld.lld HOSTLD=ld.lld AR=llvm-ar NM=llvm-nm HOSTAR=llvm-ar HOSTNM=llvm-nm -%endif -%global make_opts %{make_opts} %{clang_make_opts} -# clang does not support the -fdump-ipa-clones option -%global with_ipaclones 0 -%endif - -# turn off debug kernel and kabichk for gcov builds -%if %{with_gcov} -%define with_debug 0 -%define with_kabichk 0 -%define with_kabidupchk 0 -%define with_kabidwchk 0 -%define with_kabidw_base 0 -%define with_kernel_abi_stablelists 0 -%endif - -# turn off kABI DWARF-based check if we're generating the base dataset -%if %{with_kabidw_base} -%define with_kabidwchk 0 -%endif - -# kpatch_kcflags are extra compiler flags applied to base kernel -# -fdump-ipa-clones is enabled only for base kernels on selected arches -%if %{with_ipaclones} -%ifarch x86_64 ppc64le -%define kpatch_kcflags -fdump-ipa-clones -%else -%define with_ipaclones 0 -%endif -%endif - -%define make_target bzImage -%define image_install_path boot - -%define KVERREL %{version}-%{release}.%{_target_cpu} -%define KVERREL_RE %(echo %KVERREL | sed 's/+/[+]/g') -%define hdrarch %_target_cpu -%define asmarch %_target_cpu - -%if 0%{!?nopatches:1} -%define nopatches 0 -%endif - -%if %{with_vanilla} -%define nopatches 1 -%endif - -%if %{with_release} -%define debugbuildsenabled 1 -%endif - -%if !%{with_debuginfo} -%define _enable_debug_packages 0 -%endif -%define debuginfodir /usr/lib/debug -# Needed because we override almost everything involving build-ids -# and debuginfo generation. Currently we rely on the old alldebug setting. -%global _build_id_links alldebug - -# kernel PAE is only built on ARMv7 -%ifnarch armv7hl -%define with_pae 0 -%endif - -# if requested, only build base kernel -%if %{with_baseonly} -%define with_pae 0 -%define with_debug 0 -%define with_vdso_install 0 -%define with_perf 0 -%define with_tools 0 -%define with_bpftool 0 -%define with_kernel_abi_stablelists 0 -%define with_selftests 0 -%define with_cross 0 -%define with_cross_headers 0 -%define with_ipaclones 0 -%endif - -# if requested, only build pae kernel -%if %{with_paeonly} -%define with_up 0 -%define with_debug 0 -%endif - -# if requested, only build debug kernel -%if %{with_dbgonly} -%define with_up 0 -%define with_vdso_install 0 -%define with_perf 0 -%define with_tools 0 -%define with_bpftool 0 -%define with_kernel_abi_stablelists 0 -%define with_selftests 0 -%define with_cross 0 -%define with_cross_headers 0 -%define with_ipaclones 0 -%endif - -# turn off kABI DUP check and DWARF-based check if kABI check is disabled -%if !%{with_kabichk} -%define with_kabidupchk 0 -%define with_kabidwchk 0 -%endif - -%if %{with_vdso_install} -%define use_vdso 1 -%endif - -# selftests require bpftool to be built -%if %{with_selftests} -%define with_bpftool 1 -%endif - -%ifnarch noarch -%define with_kernel_abi_stablelists 0 -%endif - -# Overrides for generic default options - -# only package docs noarch -%ifnarch noarch -%define with_doc 0 -%define doc_build_fail true -%endif - -%if 0%{?fedora} -# don't do debug builds on anything but i686 and x86_64 -%ifnarch i686 x86_64 -%define with_debug 0 -%endif -%endif - -# don't build noarch kernels or headers (duh) -%ifarch noarch -%define with_up 0 -%define with_headers 0 -%define with_cross_headers 0 -%define with_tools 0 -%define with_perf 0 -%define with_bpftool 0 -%define with_selftests 0 -%define with_debug 0 -%define all_arch_configs kernel-%{version}-*.config -%endif - -# sparse blows up on ppc -%ifnarch ppc64le -%define with_sparse 0 -%endif - -# zfcpdump mechanism is s390 only -%ifnarch s390x -%define with_zfcpdump 0 -%endif - -%if 0%{?fedora} -# This is not for Fedora -%define with_zfcpdump 0 -%endif - -# Per-arch tweaks - -%ifarch i686 -%define asmarch x86 -%define hdrarch i386 -%define all_arch_configs kernel-%{version}-i?86*.config -%define kernel_image arch/x86/boot/bzImage -%endif - -%ifarch x86_64 -%define asmarch x86 -%define all_arch_configs kernel-%{version}-x86_64*.config -%define kernel_image arch/x86/boot/bzImage -%endif - -%ifarch ppc64le -%define asmarch powerpc -%define hdrarch powerpc -%define make_target vmlinux -%define kernel_image vmlinux -%define kernel_image_elf 1 -%define use_vdso 0 -%define all_arch_configs kernel-%{version}-ppc64le*.config -%endif - -%ifarch s390x -%define asmarch s390 -%define hdrarch s390 -%define all_arch_configs kernel-%{version}-s390x.config -%define kernel_image arch/s390/boot/bzImage -%define vmlinux_decompressor arch/s390/boot/compressed/vmlinux -%endif - -%ifarch %{arm} -%define all_arch_configs kernel-%{version}-arm*.config -%define skip_nonpae_vdso 1 -%define asmarch arm -%define hdrarch arm -%define make_target bzImage -%define kernel_image arch/arm/boot/zImage -# http://lists.infradead.org/pipermail/linux-arm-kernel/2012-March/091404.html -%define kernel_mflags KALLSYMS_EXTRA_PASS=1 -# we only build headers/perf/tools on the base arm arches -# just like we used to only build them on i386 for x86 -%ifnarch armv7hl -%define with_headers 0 -%define with_cross_headers 0 -%endif -# These currently don't compile on armv7 -%define with_selftests 0 -%endif - -%ifarch aarch64 -%define all_arch_configs kernel-%{version}-aarch64*.config -%define asmarch arm64 -%define hdrarch arm64 -%define make_target Image.gz -%define kernel_image arch/arm64/boot/Image.gz -%endif - -# Should make listnewconfig fail if there's config options -# printed out? -%if %{nopatches} -%define with_configchecks 0 -%endif - -# To temporarily exclude an architecture from being built, add it to -# %%nobuildarches. Do _NOT_ use the ExclusiveArch: line, because if we -# don't build kernel-headers then the new build system will no longer let -# us use the previous build of that package -- it'll just be completely AWOL. -# Which is a BadThing(tm). - -# We only build kernel-headers on the following... -%if 0%{?fedora} -%define nobuildarches i386 -%else -%define nobuildarches i386 i686 %{arm} -%endif - -%ifarch %nobuildarches -# disable BuildKernel commands -%define with_up 0 -%define with_debug 0 -%define with_pae 0 -%define with_zfcpdump 0 - -%define with_debuginfo 0 -%define with_perf 0 -%define with_tools 0 -%define with_bpftool 0 -%define with_selftests 0 -%define _enable_debug_packages 0 -%endif - -# Architectures we build tools/cpupower on -%if 0%{?fedora} -%define cpupowerarchs %{ix86} x86_64 ppc64le %{arm} aarch64 -%else -%define cpupowerarchs i686 x86_64 ppc64le aarch64 -%endif - -%if 0%{?use_vdso} - -%if 0%{?skip_nonpae_vdso} -%define _use_vdso 0 -%else -%define _use_vdso 1 -%endif - -%else -%define _use_vdso 0 -%endif - -# If build of debug packages is disabled, we need to know if we want to create -# meta debug packages or not, after we define with_debug for all specific cases -# above. So this must be at the end here, after all cases of with_debug or not. -%define with_debug_meta 0 -%if !%{debugbuildsenabled} -%if %{with_debug} -%define with_debug_meta 1 -%endif -%define with_debug 0 -%endif - - -# -# Packages that need to be installed before the kernel is, because the %%post -# scripts use them. -# -%define kernel_prereq coreutils, systemd >= 203-2, /usr/bin/kernel-install -%define initrd_prereq dracut >= 027 - - -Name: kernel -License: GPLv2 and Redistributable, no modification permitted -URL: https://www.kernel.org/ -Version: %{specversion} -Release: %{pkg_release} -# DO NOT CHANGE THE 'ExclusiveArch' LINE TO TEMPORARILY EXCLUDE AN ARCHITECTURE BUILD. -# SET %%nobuildarches (ABOVE) INSTEAD -%if 0%{?fedora} -ExclusiveArch: noarch x86_64 s390x %{arm} aarch64 ppc64le -%else -ExclusiveArch: noarch i386 i686 x86_64 s390x %{arm} aarch64 ppc64le -%endif -ExclusiveOS: Linux -%ifnarch %{nobuildarches} -Requires: kernel-core-uname-r = %{KVERREL} -Requires: kernel-modules-uname-r = %{KVERREL} -%endif - - -# -# List the packages used during the kernel build -# -BuildRequires: kmod, patch, bash, coreutils, tar, git-core, which -BuildRequires: bzip2, xz, findutils, gzip, m4, perl-interpreter, perl-Carp, perl-devel, perl-generators, make, diffutils, gawk -BuildRequires: gcc, binutils, redhat-rpm-config, hmaccalc, bison, flex, gcc-c++ -BuildRequires: net-tools, hostname, bc, elfutils-devel -BuildRequires: dwarves -BuildRequires: python3-devel -BuildRequires: gcc-plugin-devel -# glibc-static is required for a consistent build environment (specifically -# CONFIG_CC_CAN_LINK_STATIC=y). -BuildRequires: glibc-static -%ifnarch %{nobuildarches} noarch -BuildRequires: bpftool -%endif -%if %{with_headers} -BuildRequires: rsync -%endif -%if %{with_doc} -BuildRequires: xmlto, asciidoc, python3-sphinx, python3-sphinx_rtd_theme -%endif -%if %{with_sparse} -BuildRequires: sparse -%endif -%if %{with_perf} -BuildRequires: zlib-devel binutils-devel newt-devel perl(ExtUtils::Embed) bison flex xz-devel -BuildRequires: audit-libs-devel -BuildRequires: java-devel -BuildRequires: libbpf-devel -BuildRequires: libbabeltrace-devel -BuildRequires: libtraceevent-devel -%ifnarch %{arm} s390x -BuildRequires: numactl-devel -%endif -%ifarch aarch64 -BuildRequires: opencsd-devel >= 1.0.0 -%endif -%endif -%if %{with_tools} -BuildRequires: gettext ncurses-devel -BuildRequires: libcap-devel libcap-ng-devel -%ifnarch s390x -BuildRequires: pciutils-devel -%endif -%ifarch i686 x86_64 -BuildRequires: libnl3-devel -%endif -%endif -%if %{with_tools} || %{signmodules} || %{signkernel} -BuildRequires: openssl-devel -%endif -%if %{with_bpftool} -BuildRequires: python3-docutils -BuildRequires: zlib-devel binutils-devel -%endif -%if %{with_selftests} -BuildRequires: clang llvm -%ifnarch %{arm} -BuildRequires: numactl-devel -%endif -BuildRequires: libcap-devel libcap-ng-devel rsync libmnl-devel -%endif -BuildConflicts: rhbuildsys(DiskFree) < 500Mb -%if %{with_debuginfo} -BuildRequires: rpm-build, elfutils -BuildConflicts: rpm < 4.13.0.1-19 -BuildConflicts: dwarves < 1.13 -# Most of these should be enabled after more investigation -%undefine _include_minidebuginfo -%undefine _find_debuginfo_dwz_opts -%undefine _unique_build_ids -%undefine _unique_debug_names -%undefine _unique_debug_srcs -%undefine _debugsource_packages -%undefine _debuginfo_subpackages -%global _find_debuginfo_opts -r -%global _missing_build_ids_terminate_build 1 -%global _no_recompute_build_ids 1 -%endif -%if %{with_kabidwchk} || %{with_kabidw_base} -BuildRequires: kabi-dw -%endif - -%if %{signkernel}%{signmodules} -BuildRequires: openssl -%if %{signkernel} -# ELN uses Fedora signing process, so exclude -%if 0%{?rhel}%{?centos} && !0%{?eln} -BuildRequires: system-sb-certs -%endif -%ifarch x86_64 aarch64 -BuildRequires: nss-tools -BuildRequires: pesign >= 0.10-4 -%endif -%endif -%endif - -%if %{with_cross} -BuildRequires: binutils-%{_build_arch}-linux-gnu, gcc-%{_build_arch}-linux-gnu -%define cross_opts CROSS_COMPILE=%{_build_arch}-linux-gnu- -%define __strip %{_build_arch}-linux-gnu-strip -%endif - -# These below are required to build man pages -%if %{with_perf} -BuildRequires: xmlto -%endif -%if %{with_perf} || %{with_tools} -BuildRequires: asciidoc -%endif - -%if %{with toolchain_clang} -BuildRequires: clang -%endif - -%if %{with clang_lto} -BuildRequires: llvm -BuildRequires: lld -%endif - -# Because this is the kernel, it's hard to get a single upstream URL -# to represent the base without needing to do a bunch of patching. This -# tarball is generated from a src-git tree. If you want to see the -# exact git commit you can run -# -# xzcat -qq ${TARBALL} | git get-tar-commit-id -Source0: linux-%{tarfile_release}.tar.xz - -Source1: Makefile.rhelver - - -# Name of the packaged file containing signing key -%ifarch ppc64le -%define signing_key_filename kernel-signing-ppc.cer -%endif -%ifarch s390x -%define signing_key_filename kernel-signing-s390.cer -%endif - -%if %{?released_kernel} - -Source10: redhatsecurebootca5.cer -Source11: redhatsecurebootca1.cer -Source12: redhatsecureboot501.cer -Source13: redhatsecureboot301.cer -Source14: secureboot_s390.cer -Source15: secureboot_ppc.cer - -%define secureboot_ca_1 %{SOURCE10} -%define secureboot_ca_0 %{SOURCE11} -%ifarch x86_64 aarch64 -%define secureboot_key_1 %{SOURCE12} -%define pesign_name_1 redhatsecureboot501 -%define secureboot_key_0 %{SOURCE13} -%define pesign_name_0 redhatsecureboot301 -%endif -%ifarch s390x -%define secureboot_key_0 %{SOURCE14} -%define pesign_name_0 redhatsecureboot302 -%endif -%ifarch ppc64le -%define secureboot_key_0 %{SOURCE15} -%define pesign_name_0 redhatsecureboot303 -%endif - -# released_kernel -%else - -Source10: redhatsecurebootca4.cer -Source11: redhatsecurebootca2.cer -Source12: redhatsecureboot401.cer -Source13: redhatsecureboot003.cer - -%define secureboot_ca_1 %{SOURCE10} -%define secureboot_ca_0 %{SOURCE11} -%define secureboot_key_1 %{SOURCE12} -%define pesign_name_1 redhatsecureboot401 -%define secureboot_key_0 %{SOURCE13} -%define pesign_name_0 redhatsecureboot003 - -# released_kernel -%endif - -Source20: mod-denylist.sh -Source21: mod-sign.sh -Source22: parallel_xz.sh - -%define modsign_cmd %{SOURCE21} - -%if 0%{?include_rhel} -Source23: x509.genkey.rhel - -Source24: kernel-aarch64-rhel.config -Source25: kernel-aarch64-debug-rhel.config -Source26: mod-extra.list.rhel - -Source27: kernel-ppc64le-rhel.config -Source28: kernel-ppc64le-debug-rhel.config -Source29: kernel-s390x-rhel.config -Source30: kernel-s390x-debug-rhel.config -Source31: kernel-s390x-zfcpdump-rhel.config -Source32: kernel-x86_64-rhel.config -Source33: kernel-x86_64-debug-rhel.config - -Source34: filter-x86_64.sh.rhel -Source35: filter-armv7hl.sh.rhel -Source37: filter-aarch64.sh.rhel -Source38: filter-ppc64le.sh.rhel -Source39: filter-s390x.sh.rhel -Source40: filter-modules.sh.rhel - -Source41: x509.genkey.centos -%endif - -%if 0%{?include_fedora} -Source50: x509.genkey.fedora -Source51: mod-extra.list.fedora - -Source52: kernel-aarch64-fedora.config -Source53: kernel-aarch64-debug-fedora.config -Source54: kernel-armv7hl-fedora.config -Source55: kernel-armv7hl-debug-fedora.config -Source56: kernel-armv7hl-lpae-fedora.config -Source57: kernel-armv7hl-lpae-debug-fedora.config -Source60: kernel-ppc64le-fedora.config -Source61: kernel-ppc64le-debug-fedora.config -Source62: kernel-s390x-fedora.config -Source63: kernel-s390x-debug-fedora.config -Source64: kernel-x86_64-fedora.config -Source65: kernel-x86_64-debug-fedora.config - -Source67: filter-x86_64.sh.fedora -Source68: filter-armv7hl.sh.fedora -Source70: filter-aarch64.sh.fedora -Source71: filter-ppc64le.sh.fedora -Source72: filter-s390x.sh.fedora -Source73: filter-modules.sh.fedora -%endif - -Source75: partial-kgcov-snip.config -Source80: generate_all_configs.sh -Source81: process_configs.sh - -Source82: update_scripts.sh - -Source84: mod-internal.list - -Source100: rheldup3.x509 -Source101: rhelkpatch1.x509 - -Source200: check-kabi - -Source201: Module.kabi_aarch64 -Source202: Module.kabi_ppc64le -Source203: Module.kabi_s390x -Source204: Module.kabi_x86_64 - -Source210: Module.kabi_dup_aarch64 -Source211: Module.kabi_dup_ppc64le -Source212: Module.kabi_dup_s390x -Source213: Module.kabi_dup_x86_64 - -Source300: kernel-abi-stablelists-%{specversion}-%{pkgrelease}.tar.bz2 -Source301: kernel-kabi-dw-%{specversion}-%{pkgrelease}.tar.bz2 - -# Sources for kernel-tools -Source2000: cpupower.service -Source2001: cpupower.config -Source2002: kvm_stat.logrotate - -# Some people enjoy building customized kernels from the dist-git in Fedora and -# use this to override configuration options. One day they may all use the -# source tree, but in the mean time we carry this to support the legacy workflow -Source3000: merge.pl -Source3001: kernel-local -%if %{patchlist_changelog} -Source3002: Patchlist.changelog -%endif - -Source4000: README.rst -Source4001: rpminspect.yaml -Source4002: gating.yaml - -## Patches needed for building this package - -%if !%{nopatches} - -Patch1: patch-%{patchversion}-redhat.patch -%endif - -# empty final patch to facilitate testing of kernel patches -Patch999999: linux-kernel-test.patch - -# END OF PATCH DEFINITIONS - -%description -The kernel meta package - -# -# This macro does requires, provides, conflicts, obsoletes for a kernel package. -# %%kernel_reqprovconf <subpackage> -# It uses any kernel_<subpackage>_conflicts and kernel_<subpackage>_obsoletes -# macros defined above. -# -%define kernel_reqprovconf \ -Provides: kernel = %{specversion}-%{pkg_release}\ -Provides: kernel-%{_target_cpu} = %{specversion}-%{pkg_release}%{?1:+%{1}}\ -Provides: kernel-drm-nouveau = 16\ -Provides: kernel-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires(pre): %{kernel_prereq}\ -Requires(pre): %{initrd_prereq}\ -Requires(pre): ((linux-firmware >= 20150904-56.git6ebf5d57) if linux-firmware)\ -Recommends: linux-firmware\ -Requires(preun): systemd >= 200\ -Conflicts: xfsprogs < 4.3.0-1\ -Conflicts: xorg-x11-drv-vmmouse < 13.0.99\ -%{expand:%%{?kernel%{?1:_%{1}}_conflicts:Conflicts: %%{kernel%{?1:_%{1}}_conflicts}}}\ -%{expand:%%{?kernel%{?1:_%{1}}_obsoletes:Obsoletes: %%{kernel%{?1:_%{1}}_obsoletes}}}\ -%{expand:%%{?kernel%{?1:_%{1}}_provides:Provides: %%{kernel%{?1:_%{1}}_provides}}}\ -# We can't let RPM do the dependencies automatic because it'll then pick up\ -# a correct but undesirable perl dependency from the module headers which\ -# isn't required for the kernel proper to function\ -AutoReq: no\ -AutoProv: yes\ -%{nil} - - -%package doc -Summary: Various documentation bits found in the kernel source -Group: Documentation -%description doc -This package contains documentation files from the kernel -source. Various bits of information about the Linux kernel and the -device drivers shipped with it are documented in these files. - -You'll want to install this package if you need a reference to the -options that can be passed to Linux kernel modules at load time. - - -%package headers -Summary: Header files for the Linux kernel for use by glibc -Obsoletes: glibc-kernheaders < 3.0-46 -Provides: glibc-kernheaders = 3.0-46 -%description headers -Kernel-headers includes the C header files that specify the interface -between the Linux kernel and userspace libraries and programs. The -header files define structures and constants that are needed for -building most standard programs and are also needed for rebuilding the -glibc package. - -%package cross-headers -Summary: Header files for the Linux kernel for use by cross-glibc -%description cross-headers -Kernel-cross-headers includes the C header files that specify the interface -between the Linux kernel and userspace libraries and programs. The -header files define structures and constants that are needed for -building most standard programs and are also needed for rebuilding the -cross-glibc package. - - -%package debuginfo-common-%{_target_cpu} -Summary: Kernel source files used by %{name}-debuginfo packages -Provides: installonlypkg(kernel) -%description debuginfo-common-%{_target_cpu} -This package is required by %{name}-debuginfo subpackages. -It provides the kernel source files common to all builds. - -%if %{with_perf} -%package -n perf -Summary: Performance monitoring for the Linux kernel -Requires: bzip2 -License: GPLv2 -%description -n perf -This package contains the perf tool, which enables performance monitoring -of the Linux kernel. - -%package -n perf-debuginfo -Summary: Debug information for package perf -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release} -AutoReqProv: no -%description -n perf-debuginfo -This package provides debug information for the perf package. - -# Note that this pattern only works right to match the .build-id -# symlinks because of the trailing nonmatching alternation and -# the leading .*, because of find-debuginfo.sh's buggy handling -# of matching the pattern against the symlinks file. -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{_bindir}/perf(\.debug)?|.*%%{_libexecdir}/perf-core/.*|.*%%{_libdir}/libperf-jvmti.so(\.debug)?|XXX' -o perf-debuginfo.list} - -%package -n python3-perf -Summary: Python bindings for apps which will manipulate perf events -%description -n python3-perf -The python3-perf package contains a module that permits applications -written in the Python programming language to use the interface -to manipulate perf events. - -%package -n python3-perf-debuginfo -Summary: Debug information for package perf python bindings -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release} -AutoReqProv: no -%description -n python3-perf-debuginfo -This package provides debug information for the perf python bindings. - -# the python_sitearch macro should already be defined from above -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{python3_sitearch}/perf.*so(\.debug)?|XXX' -o python3-perf-debuginfo.list} - -# with_perf -%endif - -%if %{with_tools} -%package -n kernel-tools -Summary: Assortment of tools for the Linux kernel -License: GPLv2 -%ifarch %{cpupowerarchs} -Provides: cpupowerutils = 1:009-0.6.p1 -Obsoletes: cpupowerutils < 1:009-0.6.p1 -Provides: cpufreq-utils = 1:009-0.6.p1 -Provides: cpufrequtils = 1:009-0.6.p1 -Obsoletes: cpufreq-utils < 1:009-0.6.p1 -Obsoletes: cpufrequtils < 1:009-0.6.p1 -Obsoletes: cpuspeed < 1:1.5-16 -Requires: kernel-tools-libs = %{version}-%{release} -%endif -%define __requires_exclude ^%{_bindir}/python -%description -n kernel-tools -This package contains the tools/ directory from the kernel source -and the supporting documentation. - -%package -n kernel-tools-libs -Summary: Libraries for the kernels-tools -License: GPLv2 -%description -n kernel-tools-libs -This package contains the libraries built from the tools/ directory -from the kernel source. - -%package -n kernel-tools-libs-devel -Summary: Assortment of tools for the Linux kernel -License: GPLv2 -Requires: kernel-tools = %{version}-%{release} -%ifarch %{cpupowerarchs} -Provides: cpupowerutils-devel = 1:009-0.6.p1 -Obsoletes: cpupowerutils-devel < 1:009-0.6.p1 -%endif -Requires: kernel-tools-libs = %{version}-%{release} -Provides: kernel-tools-devel -%description -n kernel-tools-libs-devel -This package contains the development files for the tools/ directory from -the kernel source. - -%package -n kernel-tools-debuginfo -Summary: Debug information for package kernel-tools -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release} -AutoReqProv: no -%description -n kernel-tools-debuginfo -This package provides debug information for package kernel-tools. - -# Note that this pattern only works right to match the .build-id -# symlinks because of the trailing nonmatching alternation and -# the leading .*, because of find-debuginfo.sh's buggy handling -# of matching the pattern against the symlinks file. -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{_bindir}/centrino-decode(\.debug)?|.*%%{_bindir}/powernow-k8-decode(\.debug)?|.*%%{_bindir}/cpupower(\.debug)?|.*%%{_libdir}/libcpupower.*|.*%%{_bindir}/turbostat(\.debug)?|.*%%{_bindir}/x86_energy_perf_policy(\.debug)?|.*%%{_bindir}/tmon(\.debug)?|.*%%{_bindir}/lsgpio(\.debug)?|.*%%{_bindir}/gpio-hammer(\.debug)?|.*%%{_bindir}/gpio-event-mon(\.debug)?|.*%%{_bindir}/gpio-watch(\.debug)?|.*%%{_bindir}/iio_event_monitor(\.debug)?|.*%%{_bindir}/iio_generic_buffer(\.debug)?|.*%%{_bindir}/lsiio(\.debug)?|.*%%{_bindir}/intel-speed-select(\.debug)?|.*%%{_bindir}/page_owner_sort(\.debug)?|.*%%{_bindir}/slabinfo(\.debug)?|.*%%{_sbindir}/intel_sdsi(\.debug)?|XXX' -o kernel-tools-debuginfo.list} - -# with_tools -%endif - -%if %{with_bpftool} - -%package -n bpftool -Summary: Inspection and simple manipulation of eBPF programs and maps -License: GPLv2 -%description -n bpftool -This package contains the bpftool, which allows inspection and simple -manipulation of eBPF programs and maps. - -%package -n bpftool-debuginfo -Summary: Debug information for package bpftool -Group: Development/Debug -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release} -AutoReqProv: no -%description -n bpftool-debuginfo -This package provides debug information for the bpftool package. - -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{_sbindir}/bpftool(\.debug)?|XXX' -o bpftool-debuginfo.list} - -# with_bpftool -%endif - -%if %{with_selftests} - -%package selftests-internal -Summary: Kernel samples and selftests -License: GPLv2 -Requires: binutils, bpftool, iproute-tc, nmap-ncat, python3 -%description selftests-internal -Kernel sample programs and selftests. - -# Note that this pattern only works right to match the .build-id -# symlinks because of the trailing nonmatching alternation and -# the leading .*, because of find-debuginfo.sh's buggy handling -# of matching the pattern against the symlinks file. -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{_libexecdir}/(ksamples|kselftests)/.*|XXX' -o selftests-debuginfo.list} - -# with_selftests -%endif - -%if %{with_gcov} -%package gcov -Summary: gcov graph and source files for coverage data collection. -%description gcov -kernel-gcov includes the gcov graph and source files for gcov coverage collection. -%endif - -%package -n kernel-abi-stablelists -Summary: The Red Hat Enterprise Linux kernel ABI symbol stablelists -AutoReqProv: no -%description -n kernel-abi-stablelists -The kABI package contains information pertaining to the Red Hat Enterprise -Linux kernel ABI, including lists of kernel symbols that are needed by -external Linux kernel modules, and a yum plugin to aid enforcement. - -%if %{with_kabidw_base} -%package kernel-kabidw-base-internal -Summary: The baseline dataset for kABI verification using DWARF data -Group: System Environment/Kernel -AutoReqProv: no -%description kernel-kabidw-base-internal -The package contains data describing the current ABI of the Red Hat Enterprise -Linux kernel, suitable for the kabi-dw tool. -%endif - -# -# This macro creates a kernel-<subpackage>-debuginfo package. -# %%kernel_debuginfo_package <subpackage> -# -# Explanation of the find_debuginfo_opts: We build multiple kernels (debug -# pae etc.) so the regex filters those kernels appropriately. We also -# have to package several binaries as part of kernel-devel but getting -# unique build-ids is tricky for these userspace binaries. We don't really -# care about debugging those so we just filter those out and remove it. -%define kernel_debuginfo_package() \ -%package %{?1:%{1}-}debuginfo\ -Summary: Debug information for package %{name}%{?1:-%{1}}\ -Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release}\ -Provides: %{name}%{?1:-%{1}}-debuginfo-%{_target_cpu} = %{version}-%{release}\ -Provides: installonlypkg(kernel)\ -AutoReqProv: no\ -%description %{?1:%{1}-}debuginfo\ -This package provides debug information for package %{name}%{?1:-%{1}}.\ -This is required to use SystemTap with %{name}%{?1:-%{1}}-%{KVERREL}.\ -%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} --keep-section '.BTF' -p '.*\/usr\/src\/kernels/.*|XXX' -o ignored-debuginfo.list -p '/.*/%%{KVERREL_RE}%{?1:[+]%{1}}/.*|/.*%%{KVERREL_RE}%{?1:\+%{1}}(\.debug)?' -o debuginfo%{?1}.list}\ -%{nil} - -# -# This macro creates a kernel-<subpackage>-devel package. -# %%kernel_devel_package [-m] <subpackage> <pretty-name> -# -%define kernel_devel_package(m) \ -%package %{?1:%{1}-}devel\ -Summary: Development package for building kernel modules to match the %{?2:%{2} }kernel\ -Provides: kernel%{?1:-%{1}}-devel-%{_target_cpu} = %{version}-%{release}\ -Provides: kernel-devel-%{_target_cpu} = %{version}-%{release}%{?1:+%{1}}\ -Provides: kernel-devel-uname-r = %{KVERREL}%{?1:+%{1}}\ -Provides: installonlypkg(kernel)\ -AutoReqProv: no\ -Requires(pre): findutils\ -Requires: findutils\ -Requires: perl-interpreter\ -Requires: openssl-devel\ -Requires: elfutils-libelf-devel\ -Requires: bison\ -Requires: flex\ -Requires: make\ -Requires: gcc\ -%if %{-m:1}%{!-m:0}\ -Requires: kernel-devel-uname-r = %{KVERREL}\ -%endif\ -%description %{?1:%{1}-}devel\ -This package provides kernel headers and makefiles sufficient to build modules\ -against the %{?2:%{2} }kernel package.\ -%{nil} - -# -# This macro creates an empty kernel-<subpackage>-devel-matched package that -# requires both the core and devel packages locked on the same version. -# %%kernel_devel_matched_package [-m] <subpackage> <pretty-name> -# -%define kernel_devel_matched_package(m) \ -%package %{?1:%{1}-}devel-matched\ -Summary: Meta package to install matching core and devel packages for a given %{?2:%{2} }kernel\ -Requires: kernel%{?1:-%{1}}-devel = %{version}-%{release}\ -Requires: kernel%{?1:-%{1}}-core = %{version}-%{release}\ -%description %{?1:%{1}-}devel-matched\ -This meta package is used to install matching core and devel packages for a given %{?2:%{2} }kernel.\ -%{nil} - -# -# kernel-<variant>-ipaclones-internal package -# -%define kernel_ipaclones_package() \ -%package %{?1:%{1}-}ipaclones-internal\ -Summary: *.ipa-clones files generated by -fdump-ipa-clones for kernel%{?1:-%{1}}\ -Group: System Environment/Kernel\ -AutoReqProv: no\ -%description %{?1:%{1}-}ipaclones-internal\ -This package provides *.ipa-clones files.\ -%{nil} - -# -# This macro creates a kernel-<subpackage>-modules-internal package. -# %%kernel_modules_internal_package <subpackage> <pretty-name> -# -%define kernel_modules_internal_package() \ -%package %{?1:%{1}-}modules-internal\ -Summary: Extra kernel modules to match the %{?2:%{2} }kernel\ -Group: System Environment/Kernel\ -Provides: kernel%{?1:-%{1}}-modules-internal-%{_target_cpu} = %{version}-%{release}\ -Provides: kernel%{?1:-%{1}}-modules-internal-%{_target_cpu} = %{version}-%{release}%{?1:+%{1}}\ -Provides: kernel%{?1:-%{1}}-modules-internal = %{version}-%{release}%{?1:+%{1}}\ -Provides: installonlypkg(kernel-module)\ -Provides: kernel%{?1:-%{1}}-modules-internal-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel%{?1:-%{1}}-modules-uname-r = %{KVERREL}%{?1:+%{1}}\ -AutoReq: no\ -AutoProv: yes\ -%description %{?1:%{1}-}modules-internal\ -This package provides kernel modules for the %{?2:%{2} }kernel package for Red Hat internal usage.\ -%{nil} - -# -# This macro creates a kernel-<subpackage>-modules-extra package. -# %%kernel_modules_extra_package [-m] <subpackage> <pretty-name> -# -%define kernel_modules_extra_package(m) \ -%package %{?1:%{1}-}modules-extra\ -Summary: Extra kernel modules to match the %{?2:%{2} }kernel\ -Provides: kernel%{?1:-%{1}}-modules-extra-%{_target_cpu} = %{version}-%{release}\ -Provides: kernel%{?1:-%{1}}-modules-extra-%{_target_cpu} = %{version}-%{release}%{?1:+%{1}}\ -Provides: kernel%{?1:-%{1}}-modules-extra = %{version}-%{release}%{?1:+%{1}}\ -Provides: installonlypkg(kernel-module)\ -Provides: kernel%{?1:-%{1}}-modules-extra-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel%{?1:-%{1}}-modules-uname-r = %{KVERREL}%{?1:+%{1}}\ -%if %{-m:1}%{!-m:0}\ -Requires: kernel-modules-extra-uname-r = %{KVERREL}\ -%endif\ -AutoReq: no\ -AutoProv: yes\ -%description %{?1:%{1}-}modules-extra\ -This package provides less commonly used kernel modules for the %{?2:%{2} }kernel package.\ -%{nil} - -# -# This macro creates a kernel-<subpackage>-modules package. -# %%kernel_modules_package [-m] <subpackage> <pretty-name> -# -%define kernel_modules_package(m) \ -%package %{?1:%{1}-}modules\ -Summary: kernel modules to match the %{?2:%{2}-}core kernel\ -Provides: kernel%{?1:-%{1}}-modules-%{_target_cpu} = %{version}-%{release}\ -Provides: kernel-modules-%{_target_cpu} = %{version}-%{release}%{?1:+%{1}}\ -Provides: kernel-modules = %{version}-%{release}%{?1:+%{1}}\ -Provides: installonlypkg(kernel-module)\ -Provides: kernel%{?1:-%{1}}-modules-uname-r = %{KVERREL}%{?1:+%{1}}\ -Requires: kernel-uname-r = %{KVERREL}%{?1:+%{1}}\ -%if %{-m:1}%{!-m:0}\ -Requires: kernel-modules-uname-r = %{KVERREL}\ -%endif\ -AutoReq: no\ -AutoProv: yes\ -%description %{?1:%{1}-}modules\ -This package provides commonly used kernel modules for the %{?2:%{2}-}core kernel package.\ -%{nil} - -# -# this macro creates a kernel-<subpackage> meta package. -# %%kernel_meta_package <subpackage> -# -%define kernel_meta_package() \ -%package %{1}\ -summary: kernel meta-package for the %{1} kernel\ -Requires: kernel-%{1}-core-uname-r = %{KVERREL}+%{1}\ -Requires: kernel-%{1}-modules-uname-r = %{KVERREL}+%{1}\ -Provides: installonlypkg(kernel)\ -%description %{1}\ -The meta-package for the %{1} kernel\ -%{nil} - -# -# This macro creates a kernel-<subpackage> and its -devel and -debuginfo too. -# %%define variant_summary The Linux kernel compiled for <configuration> -# %%kernel_variant_package [-n <pretty-name>] [-m] <subpackage> -# -%define kernel_variant_package(n:m) \ -%package %{?1:%{1}-}core\ -Summary: %{variant_summary}\ -Provides: kernel-%{?1:%{1}-}core-uname-r = %{KVERREL}%{?1:+%{1}}\ -Provides: installonlypkg(kernel)\ -%if %{-m:1}%{!-m:0}\ -Requires: kernel-core-uname-r = %{KVERREL}\ -%endif\ -%{expand:%%kernel_reqprovconf}\ -%if %{?1:1} %{!?1:0} \ -%{expand:%%kernel_meta_package %{?1:%{1}}}\ -%endif\ -%{expand:%%kernel_devel_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}} %{-m:%{-m}}}\ -%{expand:%%kernel_devel_matched_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}} %{-m:%{-m}}}\ -%{expand:%%kernel_modules_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}} %{-m:%{-m}}}\ -%{expand:%%kernel_modules_extra_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}} %{-m:%{-m}}}\ -%if %{-m:0}%{!-m:1}\ -%{expand:%%kernel_modules_internal_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}}}\ -%{expand:%%kernel_debuginfo_package %{?1:%{1}}}\ -%endif\ -%{nil} - -# Now, each variant package. - -%if %{with_pae} -%define variant_summary The Linux kernel compiled for Cortex-A15 -%kernel_variant_package lpae -%description lpae-core -This package includes a version of the Linux kernel with support for -Cortex-A15 devices with LPAE and HW virtualisation support -%endif - -%if %{with_zfcpdump} -%define variant_summary The Linux kernel compiled for zfcpdump usage -%kernel_variant_package zfcpdump -%description zfcpdump-core -The kernel package contains the Linux kernel (vmlinuz) for use by the -zfcpdump infrastructure. -# with_zfcpdump -%endif - -%define variant_summary The Linux kernel compiled with extra debugging enabled -%if !%{debugbuildsenabled} -%kernel_variant_package -m debug -%else -%kernel_variant_package debug -%endif -%description debug-core -The kernel package contains the Linux kernel (vmlinuz), the core of any -Linux operating system. The kernel handles the basic functions -of the operating system: memory allocation, process allocation, device -input and output, etc. - -This variant of the kernel has numerous debugging options enabled. -It should only be installed when trying to gather additional information -on kernel bugs, as some of these options impact performance noticably. - -# And finally the main -core package - -%define variant_summary The Linux kernel -%kernel_variant_package -%description core -The kernel package contains the Linux kernel (vmlinuz), the core of any -Linux operating system. The kernel handles the basic functions -of the operating system: memory allocation, process allocation, device -input and output, etc. - -%if %{with_ipaclones} -%kernel_ipaclones_package -%endif - -%prep -# do a few sanity-checks for --with *only builds -%if %{with_baseonly} -%if !%{with_up} -echo "Cannot build --with baseonly, up build is disabled" -exit 1 -%endif -%endif - -# more sanity checking; do it quietly -if [ "%{patches}" != "%%{patches}" ] ; then - for patch in %{patches} ; do - if [ ! -f $patch ] ; then - echo "ERROR: Patch ${patch##/*/} listed in specfile but is missing" - exit 1 - fi - done -fi 2>/dev/null - -patch_command='patch -p1 -F1 -s' -ApplyPatch() -{ - local patch=$1 - shift - if [ ! -f $RPM_SOURCE_DIR/$patch ]; then - exit 1 - fi - if ! grep -E "^Patch[0-9]+: $patch\$" %{_specdir}/${RPM_PACKAGE_NAME}.spec ; then - if [ "${patch:0:8}" != "patch-%{kversion}." ] ; then - echo "ERROR: Patch $patch not listed as a source patch in specfile" - exit 1 - fi - fi 2>/dev/null - case "$patch" in - *.bz2) bunzip2 < "$RPM_SOURCE_DIR/$patch" | $patch_command ${1+"$@"} ;; - *.gz) gunzip < "$RPM_SOURCE_DIR/$patch" | $patch_command ${1+"$@"} ;; - *.xz) unxz < "$RPM_SOURCE_DIR/$patch" | $patch_command ${1+"$@"} ;; - *) $patch_command ${1+"$@"} < "$RPM_SOURCE_DIR/$patch" ;; - esac -} - -# don't apply patch if it's empty -ApplyOptionalPatch() -{ - local patch=$1 - shift - if [ ! -f $RPM_SOURCE_DIR/$patch ]; then - exit 1 - fi - local C=$(wc -l $RPM_SOURCE_DIR/$patch | awk '{print $1}') - if [ "$C" -gt 9 ]; then - ApplyPatch $patch ${1+"$@"} - fi -} - -%setup -q -n kernel-%{tarfile_release} -c -mv linux-%{tarfile_release} linux-%{KVERREL} - -cd linux-%{KVERREL} -cp -a %{SOURCE1} . - -%if !%{nopatches} - -ApplyOptionalPatch patch-%{patchversion}-redhat.patch -%endif - -ApplyOptionalPatch linux-kernel-test.patch - -# END OF PATCH APPLICATIONS - -# Any further pre-build tree manipulations happen here. - -chmod +x scripts/checkpatch.pl -mv COPYING COPYING-%{version}-%{release} - -# This Prevents scripts/setlocalversion from mucking with our version numbers. -touch .scmversion - -# Mangle /usr/bin/python shebangs to /usr/bin/python3 -# Mangle all Python shebangs to be Python 3 explicitly -# -p preserves timestamps -# -n prevents creating ~backup files -# -i specifies the interpreter for the shebang -# This fixes errors such as -# *** ERROR: ambiguous python shebang in /usr/bin/kvm_stat: #!/usr/bin/python. Change it to python3 (or python2) explicitly. -# We patch all sources below for which we got a report/error. -pathfix.py -i "%{__python3} %{py3_shbang_opts}" -p -n \ - tools/kvm/kvm_stat/kvm_stat \ - scripts/show_delta \ - scripts/diffconfig \ - scripts/bloat-o-meter \ - scripts/jobserver-exec \ - tools \ - Documentation \ - scripts/clang-tools - -# only deal with configs if we are going to build for the arch -%ifnarch %nobuildarches - -if [ -L configs ]; then - rm -f configs -fi -mkdir configs -cd configs - -# Drop some necessary files from the source dir into the buildroot -cp $RPM_SOURCE_DIR/kernel-*.config . -cp %{SOURCE80} . -# merge.pl -cp %{SOURCE3000} . -# kernel-local -cp %{SOURCE3001} . -FLAVOR=%{primary_target} SPECVERSION=%{version} ./generate_all_configs.sh %{debugbuildsenabled} - -# Merge in any user-provided local config option changes -%ifnarch %nobuildarches -for i in %{all_arch_configs} -do - mv $i $i.tmp - ./merge.pl %{SOURCE3001} $i.tmp > $i -%if %{with_gcov} - echo "Merging with gcov options" - cat %{SOURCE75} - mv $i $i.tmp - ./merge.pl %{SOURCE75} $i.tmp > $i -%endif - rm $i.tmp -done -%endif - -%if %{with clang_lto} -for i in *aarch64*.config *x86_64*.config; do - sed -i 's/# CONFIG_LTO_CLANG_THIN is not set/CONFIG_LTO_CLANG_THIN=y/' $i - sed -i 's/CONFIG_LTO_NONE=y/# CONFIG_LTO_NONE is not set/' $i -done -%endif - -# Add DUP and kpatch certificates to system trusted keys for RHEL -%if 0%{?rhel} -%if %{signkernel}%{signmodules} -openssl x509 -inform der -in %{SOURCE100} -out rheldup3.pem -openssl x509 -inform der -in %{SOURCE101} -out rhelkpatch1.pem -cat rheldup3.pem rhelkpatch1.pem > ../certs/rhel.pem -%ifarch s390x ppc64le -openssl x509 -inform der -in %{secureboot_ca_0} -out secureboot.pem -cat secureboot.pem >> ../certs/rhel.pem -%endif -for i in *.config; do - sed -i 's@CONFIG_SYSTEM_TRUSTED_KEYS=""@CONFIG_SYSTEM_TRUSTED_KEYS="certs/rhel.pem"@' $i -done -%endif -%endif - -cp %{SOURCE81} . -OPTS="" -%if %{with_configchecks} - OPTS="$OPTS -w -n -c" -%endif -%if %{with clang_lto} -for opt in %{clang_make_opts}; do - OPTS="$OPTS -m $opt" -done -%endif -RHJOBS=$RPM_BUILD_NCPUS PACKAGE_NAME=kernel ./process_configs.sh $OPTS ${specversion} - -cp %{SOURCE82} . -RPM_SOURCE_DIR=$RPM_SOURCE_DIR ./update_scripts.sh %{primary_target} - -# We may want to override files from the primary target in case of building -# against a flavour of it (eg. centos not rhel), thus override it here if -# necessary -if [ "%{primary_target}" == "rhel" ]; then -%if 0%{?centos} - echo "Updating scripts/sources to centos version" - RPM_SOURCE_DIR=$RPM_SOURCE_DIR ./update_scripts.sh centos -%else - echo "Not updating scripts/sources to centos version" -%endif -fi - -# end of kernel config -%endif - -cd .. -# # End of Configs stuff - -# get rid of unwanted files resulting from patch fuzz -find . \( -name "*.orig" -o -name "*~" \) -delete >/dev/null - -# remove unnecessary SCM files -find . -name .gitignore -delete >/dev/null - -cd .. - -### -### build -### -%build - -%if %{with_sparse} -%define sparse_mflags C=1 -%endif - -cp_vmlinux() -{ - eu-strip --remove-comment -o "$2" "$1" -} - -# Note we need to disable these flags for cross builds because the flags -# from redhat-rpm-config assume that host == target so target arch -# flags cause issues with the host compiler. -%if !%{with_cross} -%define build_hostcflags %{?build_cflags} -%define build_hostldflags %{?build_ldflags} -%endif - -%define make %{__make} %{?cross_opts} %{?make_opts} HOSTCFLAGS="%{?build_hostcflags}" HOSTLDFLAGS="%{?build_hostldflags}" - -InitBuildVars() { - # Initialize the kernel .config file and create some variables that are - # needed for the actual build process. - - Variant=$1 - - # Pick the right kernel config file - Config=kernel-%{version}-%{_target_cpu}${Variant:+-${Variant}}.config - DevelDir=/usr/src/kernels/%{KVERREL}${Variant:++${Variant}} - - KernelVer=%{version}-%{release}.%{_target_cpu}${Variant:++${Variant}} - - # make sure EXTRAVERSION says what we want it to say - # Trim the release if this is a CI build, since KERNELVERSION is limited to 64 characters - ShortRel=$(perl -e "print \"%{release}\" =~ s/\.pr\.[0-9A-Fa-f]{32}//r") - perl -p -i -e "s/^EXTRAVERSION.*/EXTRAVERSION = -${ShortRel}.%{_target_cpu}${Variant:++${Variant}}/" Makefile - - # if pre-rc1 devel kernel, must fix up PATCHLEVEL for our versioning scheme - # if we are post rc1 this should match anyway so this won't matter - perl -p -i -e 's/^PATCHLEVEL.*/PATCHLEVEL = %{patchlevel}/' Makefile - - %{make} %{?_smp_mflags} mrproper - cp configs/$Config .config - - %if %{signkernel}%{signmodules} - cp configs/x509.genkey certs/. - %endif - - Arch=`head -1 .config | cut -b 3-` - echo USING ARCH=$Arch - - KCFLAGS="%{?kcflags}" - - # add kpatch flags for base kernel - if [ "$Variant" == "" ]; then - KCFLAGS="$KCFLAGS %{?kpatch_kcflags}" - fi -} - -BuildKernel() { - MakeTarget=$1 - KernelImage=$2 - DoVDSO=$3 - Variant=$4 - InstallName=${5:-vmlinuz} - - DoModules=1 - if [ "$Variant" = "zfcpdump" ]; then - DoModules=0 - fi - - # When the bootable image is just the ELF kernel, strip it. - # We already copy the unstripped file into the debuginfo package. - if [ "$KernelImage" = vmlinux ]; then - CopyKernel=cp_vmlinux - else - CopyKernel=cp - fi - - InitBuildVars $Variant - - echo BUILDING A KERNEL FOR ${Variant} %{_target_cpu}... - - %{make} ARCH=$Arch olddefconfig >/dev/null - - # This ensures build-ids are unique to allow parallel debuginfo - perl -p -i -e "s/^CONFIG_BUILD_SALT.*/CONFIG_BUILD_SALT=\"%{KVERREL}\"/" .config - %{make} ARCH=$Arch KCFLAGS="$KCFLAGS" WITH_GCOV="%{?with_gcov}" %{?_smp_mflags} $MakeTarget %{?sparse_mflags} %{?kernel_mflags} - if [ $DoModules -eq 1 ]; then - %{make} ARCH=$Arch KCFLAGS="$KCFLAGS" WITH_GCOV="%{?with_gcov}" %{?_smp_mflags} modules %{?sparse_mflags} || exit 1 - fi - - mkdir -p $RPM_BUILD_ROOT/%{image_install_path} - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/systemtap -%if %{with_debuginfo} - mkdir -p $RPM_BUILD_ROOT%{debuginfodir}/%{image_install_path} -%endif - -%ifarch %{arm} aarch64 - %{make} ARCH=$Arch dtbs INSTALL_DTBS_PATH=$RPM_BUILD_ROOT/%{image_install_path}/dtb-$KernelVer - %{make} ARCH=$Arch dtbs_install INSTALL_DTBS_PATH=$RPM_BUILD_ROOT/%{image_install_path}/dtb-$KernelVer - cp -r $RPM_BUILD_ROOT/%{image_install_path}/dtb-$KernelVer $RPM_BUILD_ROOT/lib/modules/$KernelVer/dtb - find arch/$Arch/boot/dts -name '*.dtb' -type f -delete -%endif - - # Start installing the results - install -m 644 .config $RPM_BUILD_ROOT/boot/config-$KernelVer - install -m 644 .config $RPM_BUILD_ROOT/lib/modules/$KernelVer/config - install -m 644 System.map $RPM_BUILD_ROOT/boot/System.map-$KernelVer - install -m 644 System.map $RPM_BUILD_ROOT/lib/modules/$KernelVer/System.map - - # We estimate the size of the initramfs because rpm needs to take this size - # into consideration when performing disk space calculations. (See bz #530778) - dd if=/dev/zero of=$RPM_BUILD_ROOT/boot/initramfs-$KernelVer.img bs=1M count=20 - - if [ -f arch/$Arch/boot/zImage.stub ]; then - cp arch/$Arch/boot/zImage.stub $RPM_BUILD_ROOT/%{image_install_path}/zImage.stub-$KernelVer || : - cp arch/$Arch/boot/zImage.stub $RPM_BUILD_ROOT/lib/modules/$KernelVer/zImage.stub-$KernelVer || : - fi - - %if %{signkernel} - if [ "$KernelImage" = vmlinux ]; then - # We can't strip and sign $KernelImage in place, because - # we need to preserve original vmlinux for debuginfo. - # Use a copy for signing. - $CopyKernel $KernelImage $KernelImage.tosign - KernelImage=$KernelImage.tosign - CopyKernel=cp - fi - - # Sign the image if we're using EFI - # aarch64 kernels are gziped EFI images - KernelExtension=${KernelImage##*.} - if [ "$KernelExtension" == "gz" ]; then - SignImage=${KernelImage%.*} - else - SignImage=$KernelImage - fi - - %ifarch x86_64 aarch64 - %pesign -s -i $SignImage -o vmlinuz.tmp -a %{secureboot_ca_0} -c %{secureboot_key_0} -n %{pesign_name_0} - %pesign -s -i vmlinuz.tmp -o vmlinuz.signed -a %{secureboot_ca_1} -c %{secureboot_key_1} -n %{pesign_name_1} - rm vmlinuz.tmp - %endif - %ifarch s390x ppc64le - if [ -x /usr/bin/rpm-sign ]; then - rpm-sign --key "%{pesign_name_0}" --lkmsign $SignImage --output vmlinuz.signed - elif [ $DoModules -eq 1 ]; then - chmod +x scripts/sign-file - ./scripts/sign-file -p sha256 certs/signing_key.pem certs/signing_key.x509 $SignImage vmlinuz.signed - else - mv $SignImage vmlinuz.signed - fi - %endif - - if [ ! -s vmlinuz.signed ]; then - echo "pesigning failed" - exit 1 - fi - mv vmlinuz.signed $SignImage - if [ "$KernelExtension" == "gz" ]; then - gzip -f9 $SignImage - fi - # signkernel - %endif - - $CopyKernel $KernelImage \ - $RPM_BUILD_ROOT/%{image_install_path}/$InstallName-$KernelVer - chmod 755 $RPM_BUILD_ROOT/%{image_install_path}/$InstallName-$KernelVer - cp $RPM_BUILD_ROOT/%{image_install_path}/$InstallName-$KernelVer $RPM_BUILD_ROOT/lib/modules/$KernelVer/$InstallName - - # hmac sign the kernel for FIPS - echo "Creating hmac file: $RPM_BUILD_ROOT/%{image_install_path}/.vmlinuz-$KernelVer.hmac" - ls -l $RPM_BUILD_ROOT/%{image_install_path}/$InstallName-$KernelVer - (cd $RPM_BUILD_ROOT/%{image_install_path} && sha512hmac $InstallName-$KernelVer) > $RPM_BUILD_ROOT/%{image_install_path}/.vmlinuz-$KernelVer.hmac; - cp $RPM_BUILD_ROOT/%{image_install_path}/.vmlinuz-$KernelVer.hmac $RPM_BUILD_ROOT/lib/modules/$KernelVer/.vmlinuz.hmac - - if [ $DoModules -eq 1 ]; then - # Override $(mod-fw) because we don't want it to install any firmware - # we'll get it from the linux-firmware package and we don't want conflicts - %{make} %{?_smp_mflags} ARCH=$Arch INSTALL_MOD_PATH=$RPM_BUILD_ROOT %{?_smp_mflags} modules_install KERNELRELEASE=$KernelVer mod-fw= - fi - -%if %{with_gcov} - # install gcov-needed files to $BUILDROOT/$BUILD/...: - # gcov_info->filename is absolute path - # gcno references to sources can use absolute paths (e.g. in out-of-tree builds) - # sysfs symlink targets (set up at compile time) use absolute paths to BUILD dir - find . \( -name '*.gcno' -o -name '*.[chS]' \) -exec install -D '{}' "$RPM_BUILD_ROOT/$(pwd)/{}" \; -%endif - - # add an a noop %%defattr statement 'cause rpm doesn't like empty file list files - echo '%%defattr(-,-,-)' > ../kernel${Variant:+-${Variant}}-ldsoconf.list - if [ $DoVDSO -ne 0 ]; then - %{make} ARCH=$Arch INSTALL_MOD_PATH=$RPM_BUILD_ROOT vdso_install KERNELRELEASE=$KernelVer - if [ -s ldconfig-kernel.conf ]; then - install -D -m 444 ldconfig-kernel.conf \ - $RPM_BUILD_ROOT/etc/ld.so.conf.d/kernel-$KernelVer.conf - echo /etc/ld.so.conf.d/kernel-$KernelVer.conf >> ../kernel${Variant:+-${Variant}}-ldsoconf.list - fi - - rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/vdso/.build-id - fi - - # And save the headers/makefiles etc for building modules against - # - # This all looks scary, but the end result is supposed to be: - # * all arch relevant include/ files - # * all Makefile/Kconfig files - # * all script/ files - - rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/source - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - (cd $RPM_BUILD_ROOT/lib/modules/$KernelVer ; ln -s build source) - # dirs for additional modules per module-init-tools, kbuild/modules.txt - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/updates - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/weak-updates - # CONFIG_KERNEL_HEADER_TEST generates some extra files in the process of - # testing so just delete - find . -name *.h.s -delete - # first copy everything - cp --parents `find -type f -name "Makefile*" -o -name "Kconfig*"` $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - if [ ! -e Module.symvers ]; then - touch Module.symvers - fi - cp Module.symvers $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp System.map $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - if [ -s Module.markers ]; then - cp Module.markers $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - fi - - # create the kABI metadata for use in packaging - # NOTENOTE: the name symvers is used by the rpm backend - # NOTENOTE: to discover and run the /usr/lib/rpm/fileattrs/kabi.attr - # NOTENOTE: script which dynamically adds exported kernel symbol - # NOTENOTE: checksums to the rpm metadata provides list. - # NOTENOTE: if you change the symvers name, update the backend too - echo "**** GENERATING kernel ABI metadata ****" - gzip -c9 < Module.symvers > $RPM_BUILD_ROOT/boot/symvers-$KernelVer.gz - cp $RPM_BUILD_ROOT/boot/symvers-$KernelVer.gz $RPM_BUILD_ROOT/lib/modules/$KernelVer/symvers.gz - -%if %{with_kabichk} - echo "**** kABI checking is enabled in kernel SPEC file. ****" - chmod 0755 $RPM_SOURCE_DIR/check-kabi - if [ -e $RPM_SOURCE_DIR/Module.kabi_%{_target_cpu}$Variant ]; then - cp $RPM_SOURCE_DIR/Module.kabi_%{_target_cpu}$Variant $RPM_BUILD_ROOT/Module.kabi - $RPM_SOURCE_DIR/check-kabi -k $RPM_BUILD_ROOT/Module.kabi -s Module.symvers || exit 1 - # for now, don't keep it around. - rm $RPM_BUILD_ROOT/Module.kabi - else - echo "**** NOTE: Cannot find reference Module.kabi file. ****" - fi -%endif - -%if %{with_kabidupchk} - echo "**** kABI DUP checking is enabled in kernel SPEC file. ****" - if [ -e $RPM_SOURCE_DIR/Module.kabi_dup_%{_target_cpu}$Variant ]; then - cp $RPM_SOURCE_DIR/Module.kabi_dup_%{_target_cpu}$Variant $RPM_BUILD_ROOT/Module.kabi - $RPM_SOURCE_DIR/check-kabi -k $RPM_BUILD_ROOT/Module.kabi -s Module.symvers || exit 1 - # for now, don't keep it around. - rm $RPM_BUILD_ROOT/Module.kabi - else - echo "**** NOTE: Cannot find DUP reference Module.kabi file. ****" - fi -%endif - -%if %{with_kabidw_base} - # Don't build kabi base for debug kernels - if [ "$Variant" != "zfcpdump" -a "$Variant" != "debug" ]; then - mkdir -p $RPM_BUILD_ROOT/kabi-dwarf - tar xjvf %{SOURCE301} -C $RPM_BUILD_ROOT/kabi-dwarf - - mkdir -p $RPM_BUILD_ROOT/kabi-dwarf/stablelists - tar xjvf %{SOURCE300} -C $RPM_BUILD_ROOT/kabi-dwarf/stablelists - - echo "**** GENERATING DWARF-based kABI baseline dataset ****" - chmod 0755 $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh - $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh generate \ - "$RPM_BUILD_ROOT/kabi-dwarf/stablelists/kabi-current/kabi_stablelist_%{_target_cpu}" \ - "$(pwd)" \ - "$RPM_BUILD_ROOT/kabidw-base/%{_target_cpu}${Variant:+.${Variant}}" || : - - rm -rf $RPM_BUILD_ROOT/kabi-dwarf - fi -%endif - -%if %{with_kabidwchk} - if [ "$Variant" != "zfcpdump" ]; then - mkdir -p $RPM_BUILD_ROOT/kabi-dwarf - tar xjvf %{SOURCE301} -C $RPM_BUILD_ROOT/kabi-dwarf - if [ -d "$RPM_BUILD_ROOT/kabi-dwarf/base/%{_target_cpu}${Variant:+.${Variant}}" ]; then - mkdir -p $RPM_BUILD_ROOT/kabi-dwarf/stablelists - tar xjvf %{SOURCE300} -C $RPM_BUILD_ROOT/kabi-dwarf/stablelists - - echo "**** GENERATING DWARF-based kABI dataset ****" - chmod 0755 $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh - $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh generate \ - "$RPM_BUILD_ROOT/kabi-dwarf/stablelists/kabi-current/kabi_stablelist_%{_target_cpu}" \ - "$(pwd)" \ - "$RPM_BUILD_ROOT/kabi-dwarf/base/%{_target_cpu}${Variant:+.${Variant}}.tmp" || : - - echo "**** kABI DWARF-based comparison report ****" - $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh compare \ - "$RPM_BUILD_ROOT/kabi-dwarf/base/%{_target_cpu}${Variant:+.${Variant}}" \ - "$RPM_BUILD_ROOT/kabi-dwarf/base/%{_target_cpu}${Variant:+.${Variant}}.tmp" || : - echo "**** End of kABI DWARF-based comparison report ****" - else - echo "**** Baseline dataset for kABI DWARF-BASED comparison report not found ****" - fi - - rm -rf $RPM_BUILD_ROOT/kabi-dwarf - fi -%endif - - # then drop all but the needed Makefiles/Kconfig files - rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts - rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include - cp .config $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a scripts $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts/tracing - rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts/spdxcheck.py - -%ifarch s390x - # CONFIG_EXPOLINE_EXTERN=y produces arch/s390/lib/expoline.o - # which is needed during external module build. - if [ -f arch/s390/lib/expoline.o ]; then - cp -a --parents arch/s390/lib/expoline.o $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - fi -%endif - - # Files for 'make scripts' to succeed with kernel-devel. - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/security/selinux/include - cp -a --parents security/selinux/include/classmap.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents security/selinux/include/initial_sid_to_string.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/tools/include/tools - cp -a --parents tools/include/tools/be_byteshift.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/tools/le_byteshift.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - - # Files for 'make prepare' to succeed with kernel-devel. - cp -a --parents tools/include/linux/compiler* $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/linux/types.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/build/Build.include $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/build/Build $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/build/fixdep.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/objtool/sync-check.sh $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/bpf/resolve_btfids $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - - cp --parents security/selinux/include/policycap_names.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents security/selinux/include/policycap.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - - cp -a --parents tools/include/asm-generic $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/linux $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/uapi/asm $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/uapi/asm-generic $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/uapi/linux $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/include/vdso $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/scripts/utilities.mak $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/lib/subcmd $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/lib/*.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/objtool/*.[ch] $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/objtool/Build $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/objtool/include/objtool/*.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/lib/bpf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp --parents tools/lib/bpf/Build $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - - if [ -f tools/objtool/objtool ]; then - cp -a tools/objtool/objtool $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/tools/objtool/ || : - fi - if [ -f tools/objtool/fixdep ]; then - cp -a tools/objtool/fixdep $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/tools/objtool/ || : - fi - if [ -d arch/$Arch/scripts ]; then - cp -a arch/$Arch/scripts $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/arch/%{_arch} || : - fi - if [ -f arch/$Arch/*lds ]; then - cp -a arch/$Arch/*lds $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/arch/%{_arch}/ || : - fi - if [ -f arch/%{asmarch}/kernel/module.lds ]; then - cp -a --parents arch/%{asmarch}/kernel/module.lds $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - fi - find $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts \( -iname "*.o" -o -iname "*.cmd" \) -exec rm -f {} + -%ifarch ppc64le - cp -a --parents arch/powerpc/lib/crtsavres.[So] $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ -%endif - if [ -d arch/%{asmarch}/include ]; then - cp -a --parents arch/%{asmarch}/include $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - fi -%ifarch aarch64 - # arch/arm64/include/asm/xen references arch/arm - cp -a --parents arch/arm/include/asm/xen $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - # arch/arm64/include/asm/opcodes.h references arch/arm - cp -a --parents arch/arm/include/asm/opcodes.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ -%endif - # include the machine specific headers for ARM variants, if available. -%ifarch %{arm} - if [ -d arch/%{asmarch}/mach-${Variant}/include ]; then - cp -a --parents arch/%{asmarch}/mach-${Variant}/include $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - fi - # include a few files for 'make prepare' - cp -a --parents arch/arm/tools/gen-mach-types $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/arm/tools/mach-types $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - -%endif - cp -a include $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include -%ifarch i686 x86_64 - # files for 'make prepare' to succeed with kernel-devel - cp -a --parents arch/x86/entry/syscalls/syscall_32.tbl $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/entry/syscalls/syscall_64.tbl $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs_32.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs_64.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs_common.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/tools/relocs.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/purgatory/purgatory.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/purgatory/stack.S $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/purgatory/setup-x86_64.S $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/purgatory/entry64.S $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/boot/string.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/boot/string.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents arch/x86/boot/ctype.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - - cp -a --parents scripts/syscalltbl.sh $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - cp -a --parents scripts/syscallhdr.sh $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/ - - cp -a --parents tools/arch/x86/include/asm $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/arch/x86/include/uapi/asm $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/objtool/arch/x86/lib $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/arch/x86/lib/ $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/arch/x86/tools/gen-insn-attr-x86.awk $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - cp -a --parents tools/objtool/arch/x86/ $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - -%endif - # Clean up intermediate tools files - find $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/tools \( -iname "*.o" -o -iname "*.cmd" \) -exec rm -f {} + - - # Make sure the Makefile, version.h, and auto.conf have a matching - # timestamp so that external modules can be built - touch -r $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/Makefile \ - $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include/generated/uapi/linux/version.h \ - $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include/config/auto.conf - -%if %{with_debuginfo} - eu-readelf -n vmlinux | grep "Build ID" | awk '{print $NF}' > vmlinux.id - cp vmlinux.id $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/vmlinux.id - - # - # save the vmlinux file for kernel debugging into the kernel-debuginfo rpm - # - mkdir -p $RPM_BUILD_ROOT%{debuginfodir}/lib/modules/$KernelVer - cp vmlinux $RPM_BUILD_ROOT%{debuginfodir}/lib/modules/$KernelVer - if [ -n "%{vmlinux_decompressor}" ]; then - eu-readelf -n %{vmlinux_decompressor} | grep "Build ID" | awk '{print $NF}' > vmlinux.decompressor.id - # Without build-id the build will fail. But for s390 the build-id - # wasn't added before 5.11. In case it is missing prefer not - # packaging the debuginfo over a build failure. - if [ -s vmlinux.decompressor.id ]; then - cp vmlinux.decompressor.id $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/vmlinux.decompressor.id - cp %{vmlinux_decompressor} $RPM_BUILD_ROOT%{debuginfodir}/lib/modules/$KernelVer/vmlinux.decompressor - fi - fi -%endif - - find $RPM_BUILD_ROOT/lib/modules/$KernelVer -name "*.ko" -type f >modnames - - # mark modules executable so that strip-to-file can strip them - xargs --no-run-if-empty chmod u+x < modnames - - # Generate a list of modules for block and networking. - - grep -F /drivers/ modnames | xargs --no-run-if-empty nm -upA | - sed -n 's,^.*/\([^/]*\.ko\): *U \(.*\)$,\1 \2,p' > drivers.undef - - collect_modules_list() - { - sed -r -n -e "s/^([^ ]+) \\.?($2)\$/\\1/p" drivers.undef | - LC_ALL=C sort -u > $RPM_BUILD_ROOT/lib/modules/$KernelVer/modules.$1 - if [ ! -z "$3" ]; then - sed -r -e "/^($3)\$/d" -i $RPM_BUILD_ROOT/lib/modules/$KernelVer/modules.$1 - fi - } - - collect_modules_list networking \ - 'register_netdev|ieee80211_register_hw|usbnet_probe|phy_driver_register|rt(l_|2x00)(pci|usb)_probe|register_netdevice' - collect_modules_list block \ - 'ata_scsi_ioctl|scsi_add_host|scsi_add_host_with_dma|blk_alloc_queue|blk_init_queue|register_mtd_blktrans|scsi_esp_register|scsi_register_device_handler|blk_queue_physical_block_size' 'pktcdvd.ko|dm-mod.ko' - collect_modules_list drm \ - 'drm_open|drm_init' - collect_modules_list modesetting \ - 'drm_crtc_init' - - # detect missing or incorrect license tags - ( find $RPM_BUILD_ROOT/lib/modules/$KernelVer -name '*.ko' | xargs /sbin/modinfo -l | \ - grep -E -v 'GPL( v2)?$|Dual BSD/GPL$|Dual MPL/GPL$|GPL and additional rights$' ) && exit 1 - - remove_depmod_files() - { - # remove files that will be auto generated by depmod at rpm -i time - pushd $RPM_BUILD_ROOT/lib/modules/$KernelVer/ - rm -f modules.{alias,alias.bin,builtin.alias.bin,builtin.bin} \ - modules.{dep,dep.bin,devname,softdep,symbols,symbols.bin} - popd - } - - remove_depmod_files - - # Identify modules in the kernel-modules-extras package - %{SOURCE20} $RPM_BUILD_ROOT lib/modules/$KernelVer $(realpath configs/mod-extra.list) - # Identify modules in the kernel-modules-extras package - %{SOURCE20} $RPM_BUILD_ROOT lib/modules/$KernelVer %{SOURCE84} internal - - # - # Generate the kernel-core and kernel-modules files lists - # - - # Copy the System.map file for depmod to use, and create a backup of the - # full module tree so we can restore it after we're done filtering - cp System.map $RPM_BUILD_ROOT/. - cp configs/filter-*.sh $RPM_BUILD_ROOT/. - pushd $RPM_BUILD_ROOT - mkdir restore - cp -r lib/modules/$KernelVer/* restore/. - - # don't include anything going into kernel-modules-extra in the file lists - xargs rm -rf < mod-extra.list - # don't include anything going int kernel-modules-internal in the file lists - xargs rm -rf < mod-internal.list - - if [ $DoModules -eq 1 ]; then - # Find all the module files and filter them out into the core and - # modules lists. This actually removes anything going into -modules - # from the dir. - find lib/modules/$KernelVer/kernel -name *.ko | sort -n > modules.list - ./filter-modules.sh modules.list %{_target_cpu} - rm filter-*.sh - - # Run depmod on the resulting module tree and make sure it isn't broken - depmod -b . -aeF ./System.map $KernelVer &> depmod.out - if [ -s depmod.out ]; then - echo "Depmod failure" - cat depmod.out - exit 1 - else - rm depmod.out - fi - else - # Ensure important files/directories exist to let the packaging succeed - echo '%%defattr(-,-,-)' > modules.list - echo '%%defattr(-,-,-)' > k-d.list - mkdir -p lib/modules/$KernelVer/kernel - # Add files usually created by make modules, needed to prevent errors - # thrown by depmod during package installation - touch lib/modules/$KernelVer/modules.order - touch lib/modules/$KernelVer/modules.builtin - fi - - remove_depmod_files - - # Go back and find all of the various directories in the tree. We use this - # for the dir lists in kernel-core - find lib/modules/$KernelVer/kernel -mindepth 1 -type d | sort -n > module-dirs.list - - # Cleanup - rm System.map - # Just "cp -r" can be very slow: here, it rewrites _existing files_ - # with open(O_TRUNC). Many filesystems synchronously wait for metadata - # update for such file rewrites (seen in strace as final close syscall - # taking a long time). On a rotational disk, cp was observed to take - # more than 5 minutes on ext4 and more than 15 minutes (!) on xfs. - # With --remove-destination, we avoid this, and copying - # (with enough RAM to cache it) takes 5 seconds: - cp -r --remove-destination restore/* lib/modules/$KernelVer/. - rm -rf restore - popd - - # Make sure the files lists start with absolute paths or rpmbuild fails. - # Also add in the dir entries - sed -e 's/^lib*/\/lib/' %{?zipsed} $RPM_BUILD_ROOT/k-d.list > ../kernel${Variant:+-${Variant}}-modules.list - sed -e 's/^lib*/%dir \/lib/' %{?zipsed} $RPM_BUILD_ROOT/module-dirs.list > ../kernel${Variant:+-${Variant}}-core.list - sed -e 's/^lib*/\/lib/' %{?zipsed} $RPM_BUILD_ROOT/modules.list >> ../kernel${Variant:+-${Variant}}-core.list - sed -e 's/^lib*/\/lib/' %{?zipsed} $RPM_BUILD_ROOT/mod-extra.list >> ../kernel${Variant:+-${Variant}}-modules-extra.list - sed -e 's/^lib*/\/lib/' %{?zipsed} $RPM_BUILD_ROOT/mod-internal.list >> ../kernel${Variant:+-${Variant}}-modules-internal.list - - # Cleanup - rm -f $RPM_BUILD_ROOT/k-d.list - rm -f $RPM_BUILD_ROOT/modules.list - rm -f $RPM_BUILD_ROOT/module-dirs.list - rm -f $RPM_BUILD_ROOT/mod-extra.list - rm -f $RPM_BUILD_ROOT/mod-internal.list - -%if %{signmodules} - if [ $DoModules -eq 1 ]; then - # Save the signing keys so we can sign the modules in __modsign_install_post - cp certs/signing_key.pem certs/signing_key.pem.sign${Variant:++${Variant}} - cp certs/signing_key.x509 certs/signing_key.x509.sign${Variant:++${Variant}} - fi -%endif - - # Move the devel headers out of the root file system - mkdir -p $RPM_BUILD_ROOT/usr/src/kernels - mv $RPM_BUILD_ROOT/lib/modules/$KernelVer/build $RPM_BUILD_ROOT/$DevelDir - - # This is going to create a broken link during the build, but we don't use - # it after this point. We need the link to actually point to something - # when kernel-devel is installed, and a relative link doesn't work across - # the F17 UsrMove feature. - ln -sf $DevelDir $RPM_BUILD_ROOT/lib/modules/$KernelVer/build - -%ifnarch armv7hl - # Generate vmlinux.h and put it to kernel-devel path - bpftool btf dump file vmlinux format c > $RPM_BUILD_ROOT/$DevelDir/vmlinux.h -%endif - - # prune junk from kernel-devel - find $RPM_BUILD_ROOT/usr/src/kernels -name ".*.cmd" -delete - - # Red Hat UEFI Secure Boot CA cert, which can be used to authenticate the kernel - mkdir -p $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer - %ifarch x86_64 aarch64 - install -m 0644 %{secureboot_ca_0} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca-20200609.cer - install -m 0644 %{secureboot_ca_1} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca-20140212.cer - ln -s kernel-signing-ca-20200609.cer $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca.cer - %else - install -m 0644 %{secureboot_ca_0} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca.cer - %endif - %ifarch s390x ppc64le - if [ $DoModules -eq 1 ]; then - if [ -x /usr/bin/rpm-sign ]; then - install -m 0644 %{secureboot_key_0} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/%{signing_key_filename} - else - install -m 0644 certs/signing_key.x509.sign${Variant:++${Variant}} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca.cer - openssl x509 -in certs/signing_key.pem.sign${Variant:++${Variant}} -outform der -out $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/%{signing_key_filename} - chmod 0644 $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/%{signing_key_filename} - fi - fi - %endif - -%if %{with_ipaclones} - MAXPROCS=$(echo %{?_smp_mflags} | sed -n 's/-j\s*\([0-9]\+\)/\1/p') - if [ -z "$MAXPROCS" ]; then - MAXPROCS=1 - fi - if [ "$Variant" == "" ]; then - mkdir -p $RPM_BUILD_ROOT/$DevelDir-ipaclones - find . -name '*.ipa-clones' | xargs -i{} -r -n 1 -P $MAXPROCS install -m 644 -D "{}" "$RPM_BUILD_ROOT/$DevelDir-ipaclones/{}" - fi -%endif - -} - -### -# DO it... -### - -# prepare directories -rm -rf $RPM_BUILD_ROOT -mkdir -p $RPM_BUILD_ROOT/boot -mkdir -p $RPM_BUILD_ROOT%{_libexecdir} - -cd linux-%{KVERREL} - - -%if %{with_debug} -BuildKernel %make_target %kernel_image %{_use_vdso} debug -%endif - -%if %{with_zfcpdump} -BuildKernel %make_target %kernel_image %{_use_vdso} zfcpdump -%endif - -%if %{with_pae} -BuildKernel %make_target %kernel_image %{use_vdso} lpae -%endif - -%if %{with_up} -BuildKernel %make_target %kernel_image %{_use_vdso} -%endif - -%ifnarch noarch i686 -%if !%{with_debug} && !%{with_zfcpdump} && !%{with_pae} && !%{with_up} -# If only building the user space tools, then initialize the build environment -# and some variables so that the various userspace tools can be built. -InitBuildVars -%endif -%endif - -%ifarch aarch64 -%global perf_build_extra_opts CORESIGHT=1 -%endif -%global perf_make \ - %{__make} %{?make_opts} EXTRA_CFLAGS="${RPM_OPT_FLAGS}" LDFLAGS="%{__global_ldflags}" %{?cross_opts} -C tools/perf V=1 NO_PERF_READ_VDSO32=1 NO_PERF_READ_VDSOX32=1 WERROR=0 NO_LIBUNWIND=1 HAVE_CPLUS_DEMANGLE=1 NO_GTK2=1 NO_STRLCPY=1 NO_BIONIC=1 LIBBPF_DYNAMIC=1 LIBTRACEEVENT_DYNAMIC=1 %{?perf_build_extra_opts} prefix=%{_prefix} PYTHON=%{__python3} -%if %{with_perf} -# perf -# make sure check-headers.sh is executable -chmod +x tools/perf/check-headers.sh -%{perf_make} DESTDIR=$RPM_BUILD_ROOT all -%endif - -%global tools_make \ - CFLAGS="${RPM_OPT_FLAGS}" LDFLAGS="%{__global_ldflags}" %{make} %{?make_opts} - -%if %{with_tools} -%ifarch %{cpupowerarchs} -# cpupower -# make sure version-gen.sh is executable. -chmod +x tools/power/cpupower/utils/version-gen.sh -%{tools_make} %{?_smp_mflags} -C tools/power/cpupower CPUFREQ_BENCH=false DEBUG=false -%ifarch x86_64 - pushd tools/power/cpupower/debug/x86_64 - %{tools_make} %{?_smp_mflags} centrino-decode powernow-k8-decode - popd -%endif -%ifarch x86_64 - pushd tools/power/x86/x86_energy_perf_policy/ - %{tools_make} - popd - pushd tools/power/x86/turbostat - %{tools_make} - popd - pushd tools/power/x86/intel-speed-select - %{tools_make} - popd - pushd tools/arch/x86/intel_sdsi - %{tools_make} CFLAGS="${RPM_OPT_FLAGS}" - popd -%endif -%endif -pushd tools/thermal/tmon/ -%{tools_make} -popd -pushd tools/iio/ -%{tools_make} -popd -pushd tools/gpio/ -%{tools_make} -popd -# build VM tools -pushd tools/vm/ -%{tools_make} slabinfo page_owner_sort -popd -%endif - -if [ -f $DevelDir/vmlinux.h ]; then - RPM_VMLINUX_H=$DevelDir/vmlinux.h -fi - -%global bpftool_make \ - %{__make} EXTRA_CFLAGS="${RPM_OPT_FLAGS}" EXTRA_LDFLAGS="%{__global_ldflags}" DESTDIR=$RPM_BUILD_ROOT %{?make_opts} VMLINUX_H="${RPM_VMLINUX_H}" V=1 -%if %{with_bpftool} -pushd tools/bpf/bpftool -%{bpftool_make} -popd -%endif - -%if %{with_selftests} -# Unfortunately, samples/bpf/Makefile expects that the headers are installed -# in the source tree. We installed them previously to $RPM_BUILD_ROOT/usr -# but there's no way to tell the Makefile to take them from there. -%{make} %{?_smp_mflags} headers_install -%{make} %{?_smp_mflags} ARCH=$Arch V=1 M=samples/bpf/ || true - -# Prevent bpf selftests to build bpftool repeatedly: -export BPFTOOL=$(pwd)/tools/bpf/bpftool/bpftool - -pushd tools/testing/selftests -# We need to install here because we need to call make with ARCH set which -# doesn't seem possible to do in the install section. -%{make} %{?_smp_mflags} ARCH=$Arch V=1 TARGETS="bpf vm livepatch net net/forwarding net/mptcp netfilter tc-testing" SKIP_TARGETS="" INSTALL_PATH=%{buildroot}%{_libexecdir}/kselftests VMLINUX_H="${RPM_VMLINUX_H}" install - -# 'make install' for bpf is broken and upstream refuses to fix it. -# Install the needed files manually. -for dir in bpf bpf/no_alu32 bpf/progs; do - # In ARK, the rpm build continues even if some of the selftests - # cannot be built. It's not always possible to build selftests, - # as upstream sometimes dependens on too new llvm version or has - # other issues. If something did not get built, just skip it. - test -d $dir || continue - mkdir -p %{buildroot}%{_libexecdir}/kselftests/$dir - find $dir -maxdepth 1 -type f \( -executable -o -name '*.py' -o -name settings -o \ - -name 'btf_dump_test_case_*.c' -o -name '*.ko' -o \ - -name '*.o' -exec sh -c 'readelf -h "{}" | grep -q "^ Machine:.*BPF"' \; \) -print0 | \ - xargs -0 cp -t %{buildroot}%{_libexecdir}/kselftests/$dir || true -done -popd -export -n BPFTOOL -%endif - -%if %{with_doc} -# Make the HTML pages. -%{__make} PYTHON=/usr/bin/python3 htmldocs || %{doc_build_fail} - -# sometimes non-world-readable files sneak into the kernel source tree -chmod -R a=rX Documentation -find Documentation -type d | xargs chmod u+w -%endif - -# In the modsign case, we do 3 things. 1) We check the "variant" and hard -# code the value in the following invocations. This is somewhat sub-optimal -# but we're doing this inside of an RPM macro and it isn't as easy as it -# could be because of that. 2) We restore the .tmp_versions/ directory from -# the one we saved off in BuildKernel above. This is to make sure we're -# signing the modules we actually built/installed in that variant. 3) We -# grab the arch and invoke mod-sign.sh command to actually sign the modules. -# -# We have to do all of those things _after_ find-debuginfo runs, otherwise -# that will strip the signature off of the modules. -# -# Don't sign modules for the zfcpdump variant as it is monolithic. - -%define __modsign_install_post \ - if [ "%{signmodules}" -eq "1" ]; then \ - if [ "%{with_pae}" -ne "0" ]; then \ - %{modsign_cmd} certs/signing_key.pem.sign+lpae certs/signing_key.x509.sign+lpae $RPM_BUILD_ROOT/lib/modules/%{KVERREL}+lpae/ \ - fi \ - if [ "%{with_debug}" -ne "0" ]; then \ - %{modsign_cmd} certs/signing_key.pem.sign+debug certs/signing_key.x509.sign+debug $RPM_BUILD_ROOT/lib/modules/%{KVERREL}+debug/ \ - fi \ - if [ "%{with_up}" -ne "0" ]; then \ - %{modsign_cmd} certs/signing_key.pem.sign certs/signing_key.x509.sign $RPM_BUILD_ROOT/lib/modules/%{KVERREL}/ \ - fi \ - fi \ - if [ "%{zipmodules}" -eq "1" ]; then \ - find $RPM_BUILD_ROOT/lib/modules/ -type f -name '*.ko' | xargs -P${RPM_BUILD_NCPUS} -r xz; \ - fi \ -%{nil} - -### -### Special hacks for debuginfo subpackages. -### - -# This macro is used by %%install, so we must redefine it before that. -%define debug_package %{nil} - -%if %{with_debuginfo} - -%ifnarch noarch -%global __debug_package 1 -%files -f debugfiles.list debuginfo-common-%{_target_cpu} -%endif - -%endif - -# We don't want to package debuginfo for self-tests and samples but -# we have to delete them to avoid an error messages about unpackaged -# files. -# Delete the debuginfo for kernel-devel files -%define __remove_unwanted_dbginfo_install_post \ - if [ "%{with_selftests}" -ne "0" ]; then \ - rm -rf $RPM_BUILD_ROOT/usr/lib/debug/usr/libexec/ksamples; \ - rm -rf $RPM_BUILD_ROOT/usr/lib/debug/usr/libexec/kselftests; \ - fi \ - rm -rf $RPM_BUILD_ROOT/usr/lib/debug/usr/src; \ -%{nil} - -# -# Disgusting hack alert! We need to ensure we sign modules *after* all -# invocations of strip occur, which is in __debug_install_post if -# find-debuginfo.sh runs, and __os_install_post if not. -# -%define __spec_install_post \ - %{?__debug_package:%{__debug_install_post}}\ - %{__arch_install_post}\ - %{__os_install_post}\ - %{__remove_unwanted_dbginfo_install_post}\ - %{__modsign_install_post} - -### -### install -### - -%install - -cd linux-%{KVERREL} - -%if %{with_doc} -docdir=$RPM_BUILD_ROOT%{_datadir}/doc/kernel-doc-%{specversion}-%{pkgrelease} - -# copy the source over -mkdir -p $docdir -tar -h -f - --exclude=man --exclude='.*' -c Documentation | tar xf - -C $docdir - -# with_doc -%endif - -# We have to do the headers install before the tools install because the -# kernel headers_install will remove any header files in /usr/include that -# it doesn't install itself. - -%if %{with_headers} -# Install kernel headers -%{__make} ARCH=%{hdrarch} INSTALL_HDR_PATH=$RPM_BUILD_ROOT/usr headers_install - -find $RPM_BUILD_ROOT/usr/include \ - \( -name .install -o -name .check -o \ - -name ..install.cmd -o -name ..check.cmd \) -delete - -%endif - -%if %{with_cross_headers} -%if 0%{?fedora} -HDR_ARCH_LIST='arm arm64 powerpc s390 x86' -%else -HDR_ARCH_LIST='arm64 powerpc s390 x86' -%endif -mkdir -p $RPM_BUILD_ROOT/usr/tmp-headers - -for arch in $HDR_ARCH_LIST; do - mkdir $RPM_BUILD_ROOT/usr/tmp-headers/arch-${arch} - %{__make} ARCH=${arch} INSTALL_HDR_PATH=$RPM_BUILD_ROOT/usr/tmp-headers/arch-${arch} headers_install -done - -find $RPM_BUILD_ROOT/usr/tmp-headers \ - \( -name .install -o -name .check -o \ - -name ..install.cmd -o -name ..check.cmd \) -delete - -# Copy all the architectures we care about to their respective asm directories -for arch in $HDR_ARCH_LIST ; do - mkdir -p $RPM_BUILD_ROOT/usr/${arch}-linux-gnu/include - mv $RPM_BUILD_ROOT/usr/tmp-headers/arch-${arch}/include/* $RPM_BUILD_ROOT/usr/${arch}-linux-gnu/include/ -done - -rm -rf $RPM_BUILD_ROOT/usr/tmp-headers -%endif - -%if %{with_kernel_abi_stablelists} -# kabi directory -INSTALL_KABI_PATH=$RPM_BUILD_ROOT/lib/modules/ -mkdir -p $INSTALL_KABI_PATH - -# install kabi releases directories -tar xjvf %{SOURCE300} -C $INSTALL_KABI_PATH -# with_kernel_abi_stablelists -%endif - -%if %{with_perf} -# perf tool binary and supporting scripts/binaries -%{perf_make} DESTDIR=$RPM_BUILD_ROOT lib=%{_lib} install-bin -# remove the 'trace' symlink. -rm -f %{buildroot}%{_bindir}/trace - -# For both of the below, yes, this should be using a macro but right now -# it's hard coded and we don't actually want it anyway right now. -# Whoever wants examples can fix it up! - -# remove examples -rm -rf %{buildroot}/usr/lib/perf/examples -rm -rf %{buildroot}/usr/lib/perf/include - -# python-perf extension -%{perf_make} DESTDIR=$RPM_BUILD_ROOT install-python_ext - -# perf man pages (note: implicit rpm magic compresses them later) -mkdir -p %{buildroot}/%{_mandir}/man1 -%{perf_make} DESTDIR=$RPM_BUILD_ROOT install-man - -# remove any tracevent files, eg. its plugins still gets built and installed, -# even if we build against system's libtracevent during perf build (by setting -# LIBTRACEEVENT_DYNAMIC=1 above in perf_make macro). Those files should already -# ship with libtraceevent package. -rm -rf %{buildroot}%{_libdir}/traceevent -%endif - -%if %{with_tools} -%ifarch %{cpupowerarchs} -%{make} -C tools/power/cpupower DESTDIR=$RPM_BUILD_ROOT libdir=%{_libdir} mandir=%{_mandir} CPUFREQ_BENCH=false install -rm -f %{buildroot}%{_libdir}/*.{a,la} -%find_lang cpupower -mv cpupower.lang ../ -%ifarch x86_64 - pushd tools/power/cpupower/debug/x86_64 - install -m755 centrino-decode %{buildroot}%{_bindir}/centrino-decode - install -m755 powernow-k8-decode %{buildroot}%{_bindir}/powernow-k8-decode - popd -%endif -chmod 0755 %{buildroot}%{_libdir}/libcpupower.so* -mkdir -p %{buildroot}%{_unitdir} %{buildroot}%{_sysconfdir}/sysconfig -install -m644 %{SOURCE2000} %{buildroot}%{_unitdir}/cpupower.service -install -m644 %{SOURCE2001} %{buildroot}%{_sysconfdir}/sysconfig/cpupower -%endif -%ifarch x86_64 - mkdir -p %{buildroot}%{_mandir}/man8 - pushd tools/power/x86/x86_energy_perf_policy - %{tools_make} DESTDIR=%{buildroot} install - popd - pushd tools/power/x86/turbostat - %{tools_make} DESTDIR=%{buildroot} install - popd - pushd tools/power/x86/intel-speed-select - %{tools_make} DESTDIR=%{buildroot} install - popd - pushd tools/arch/x86/intel_sdsi - %{tools_make} CFLAGS="${RPM_OPT_FLAGS}" DESTDIR=%{buildroot} install - popd -%endif -pushd tools/thermal/tmon -%{tools_make} INSTALL_ROOT=%{buildroot} install -popd -pushd tools/iio -%{tools_make} DESTDIR=%{buildroot} install -popd -pushd tools/gpio -%{tools_make} DESTDIR=%{buildroot} install -popd -install -m644 -D %{SOURCE2002} %{buildroot}%{_sysconfdir}/logrotate.d/kvm_stat -pushd tools/kvm/kvm_stat -%{__make} INSTALL_ROOT=%{buildroot} install-tools -%{__make} INSTALL_ROOT=%{buildroot} install-man -install -m644 -D kvm_stat.service %{buildroot}%{_unitdir}/kvm_stat.service -popd -# install VM tools -pushd tools/vm/ -install -m755 slabinfo %{buildroot}%{_bindir}/slabinfo -install -m755 page_owner_sort %{buildroot}%{_bindir}/page_owner_sort -popd -%endif - -if [ -f $DevelDir/vmlinux.h ]; then - RPM_VMLINUX_H=$DevelDir/vmlinux.h -fi - -%if %{with_bpftool} -pushd tools/bpf/bpftool -%{bpftool_make} prefix=%{_prefix} bash_compdir=%{_sysconfdir}/bash_completion.d/ mandir=%{_mandir} install doc-install -popd -%endif - -%if %{with_selftests} -pushd samples -install -d %{buildroot}%{_libexecdir}/ksamples -# install bpf samples -pushd bpf -install -d %{buildroot}%{_libexecdir}/ksamples/bpf -find -type f -executable -exec install -m755 {} %{buildroot}%{_libexecdir}/ksamples/bpf \; -install -m755 *.sh %{buildroot}%{_libexecdir}/ksamples/bpf -# test_lwt_bpf.sh compiles test_lwt_bpf.c when run; this works only from the -# kernel tree. Just remove it. -rm %{buildroot}%{_libexecdir}/ksamples/bpf/test_lwt_bpf.sh -install -m644 *_kern.o %{buildroot}%{_libexecdir}/ksamples/bpf || true -install -m644 tcp_bpf.readme %{buildroot}%{_libexecdir}/ksamples/bpf -popd -# install pktgen samples -pushd pktgen -install -d %{buildroot}%{_libexecdir}/ksamples/pktgen -find . -type f -executable -exec install -m755 {} %{buildroot}%{_libexecdir}/ksamples/pktgen/{} \; -find . -type f ! -executable -exec install -m644 {} %{buildroot}%{_libexecdir}/ksamples/pktgen/{} \; -popd -popd -# install vm selftests -pushd tools/testing/selftests/vm -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/vm/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/vm/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/vm/{} \; -popd -# install drivers/net/mlxsw selftests -pushd tools/testing/selftests/drivers/net/mlxsw -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/drivers/net/mlxsw/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/drivers/net/mlxsw/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/drivers/net/mlxsw/{} \; -popd -# install drivers/net/netdevsim selftests -pushd tools/testing/selftests/drivers/net/netdevsim -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/drivers/net/netdevsim/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/drivers/net/netdevsim/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/drivers/net/netdevsim/{} \; -popd -# install net/forwarding selftests -pushd tools/testing/selftests/net/forwarding -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/net/forwarding/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/net/forwarding/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/net/forwarding/{} \; -popd -# install net/mptcp selftests -pushd tools/testing/selftests/net/mptcp -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/net/mptcp/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/net/mptcp/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/net/mptcp/{} \; -popd -# install tc-testing selftests -pushd tools/testing/selftests/tc-testing -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/tc-testing/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/tc-testing/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/tc-testing/{} \; -popd -# install livepatch selftests -pushd tools/testing/selftests/livepatch -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/livepatch/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/livepatch/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/livepatch/{} \; -popd -# install netfilter selftests -pushd tools/testing/selftests/netfilter -find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/netfilter/{} \; -find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/netfilter/{} \; -find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/netfilter/{} \; -popd -%endif - -### -### clean -### - -### -### scripts -### - -%if %{with_tools} -%post -n kernel-tools-libs -/sbin/ldconfig - -%postun -n kernel-tools-libs -/sbin/ldconfig -%endif - -# -# This macro defines a %%post script for a kernel*-devel package. -# %%kernel_devel_post [<subpackage>] -# Note we don't run hardlink if ostree is in use, as ostree is -# a far more sophisticated hardlink implementation. -# https://github.com/projectatomic/rpm-ostree/commit/58a79056a889be8814aa51f507b2c7a4dccee526 -# -# The deletion of *.hardlink-temporary files is a temporary workaround -# for this bug in the hardlink binary (fixed in util-linux 2.38): -# https://github.com/util-linux/util-linux/issues/1602 -# -%define kernel_devel_post() \ -%{expand:%%post %{?1:%{1}-}devel}\ -if [ -f /etc/sysconfig/kernel ]\ -then\ - . /etc/sysconfig/kernel || exit $?\ -fi\ -if [ "$HARDLINK" != "no" -a -x /usr/bin/hardlink -a ! -e /run/ostree-booted ] \ -then\ - (cd /usr/src/kernels/%{KVERREL}%{?1:+%{1}} &&\ - /usr/bin/find . -type f | while read f; do\ - hardlink -c /usr/src/kernels/*%{?dist}.*/$f $f > /dev/null\ - done;\ - /usr/bin/find /usr/src/kernels -type f -name '*.hardlink-temporary' -delete\ - )\ -fi\ -%{nil} - -# -# This macro defines a %%post script for a kernel*-modules-extra package. -# It also defines a %%postun script that does the same thing. -# %%kernel_modules_extra_post [<subpackage>] -# -%define kernel_modules_extra_post() \ -%{expand:%%post %{?1:%{1}-}modules-extra}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil}\ -%{expand:%%postun %{?1:%{1}-}modules-extra}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil} - -# -# This macro defines a %%post script for a kernel*-modules-internal package. -# It also defines a %%postun script that does the same thing. -# %%kernel_modules_internal_post [<subpackage>] -# -%define kernel_modules_internal_post() \ -%{expand:%%post %{?1:%{1}-}modules-internal}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil}\ -%{expand:%%postun %{?1:%{1}-}modules-internal}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil} - -# -# This macro defines a %%post script for a kernel*-modules package. -# It also defines a %%postun script that does the same thing. -# %%kernel_modules_post [<subpackage>] -# -%define kernel_modules_post() \ -%{expand:%%post %{?1:%{1}-}modules}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -if [ ! -f %{_localstatedir}/lib/rpm-state/%{name}/installing_core_%{KVERREL}%{?1:+%{1}} ]; then\ - mkdir -p %{_localstatedir}/lib/rpm-state/%{name}\ - touch %{_localstatedir}/lib/rpm-state/%{name}/need_to_run_dracut_%{KVERREL}%{?1:+%{1}}\ -fi\ -%{nil}\ -%{expand:%%postun %{?1:%{1}-}modules}\ -/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\ -%{nil}\ -%{expand:%%posttrans %{?1:%{1}-}modules}\ -if [ -f %{_localstatedir}/lib/rpm-state/%{name}/need_to_run_dracut_%{KVERREL}%{?1:+%{1}} ]; then\ - rm -f %{_localstatedir}/lib/rpm-state/%{name}/need_to_run_dracut_%{KVERREL}%{?1:+%{1}}\ - echo "Running: dracut -f --kver %{KVERREL}%{?1:+%{1}}"\ - dracut -f --kver "%{KVERREL}%{?1:+%{1}}" || exit $?\ -fi\ -%{nil} - -# This macro defines a %%posttrans script for a kernel package. -# %%kernel_variant_posttrans [<subpackage>] -# More text can follow to go at the end of this variant's %%post. -# -%define kernel_variant_posttrans() \ -%{expand:%%posttrans %{?1:%{1}-}core}\ -%if 0%{!?fedora:1}\ -if [ -x %{_sbindir}/weak-modules ]\ -then\ - %{_sbindir}/weak-modules --add-kernel %{KVERREL}%{?1:+%{1}} || exit $?\ -fi\ -%endif\ -rm -f %{_localstatedir}/lib/rpm-state/%{name}/installing_core_%{KVERREL}%{?1:+%{1}}\ -/bin/kernel-install add %{KVERREL}%{?1:+%{1}} /lib/modules/%{KVERREL}%{?1:+%{1}}/vmlinuz || exit $?\ -%{nil} - -# -# This macro defines a %%post script for a kernel package and its devel package. -# %%kernel_variant_post [-v <subpackage>] [-r <replace>] -# More text can follow to go at the end of this variant's %%post. -# -%define kernel_variant_post(v:r:) \ -%{expand:%%kernel_devel_post %{?-v*}}\ -%{expand:%%kernel_modules_post %{?-v*}}\ -%{expand:%%kernel_modules_extra_post %{?-v*}}\ -%{expand:%%kernel_modules_internal_post %{?-v*}}\ -%{expand:%%kernel_variant_posttrans %{?-v*}}\ -%{expand:%%post %{?-v*:%{-v*}-}core}\ -%{-r:\ -if [ `uname -i` == "x86_64" -o `uname -i` == "i386" ] &&\ - [ -f /etc/sysconfig/kernel ]; then\ - /bin/sed -r -i -e 's/^DEFAULTKERNEL=%{-r*}$/DEFAULTKERNEL=kernel%{?-v:-%{-v*}}/' /etc/sysconfig/kernel || exit $?\ -fi}\ -mkdir -p %{_localstatedir}/lib/rpm-state/%{name}\ -touch %{_localstatedir}/lib/rpm-state/%{name}/installing_core_%{KVERREL}%{?1:+%{1}}\ -%{nil} - -# -# This macro defines a %%preun script for a kernel package. -# %%kernel_variant_preun <subpackage> -# -%define kernel_variant_preun() \ -%{expand:%%preun %{?1:%{1}-}core}\ -/bin/kernel-install remove %{KVERREL}%{?1:+%{1}} /lib/modules/%{KVERREL}%{?1:+%{1}}/vmlinuz || exit $?\ -if [ -x %{_sbindir}/weak-modules ]\ -then\ - %{_sbindir}/weak-modules --remove-kernel %{KVERREL}%{?1:+%{1}} || exit $?\ -fi\ -%{nil} - -%kernel_variant_preun -%kernel_variant_post -r kernel-smp - -%if %{with_pae} -%kernel_variant_preun lpae -%kernel_variant_post -v lpae -r (kernel|kernel-smp) -%endif - -%if %{with_debug} -%kernel_variant_preun debug -%kernel_variant_post -v debug -%endif - -%if %{with_zfcpdump} -%kernel_variant_preun zfcpdump -%kernel_variant_post -v zfcpdump -%endif - -if [ -x /sbin/ldconfig ] -then - /sbin/ldconfig -X || exit $? -fi - -### -### file lists -### - -%if %{with_headers} -%files headers -/usr/include/* -%endif - -%if %{with_cross_headers} -%files cross-headers -/usr/*-linux-gnu/include/* -%endif - -%if %{with_kernel_abi_stablelists} -%files -n kernel-abi-stablelists -/lib/modules/kabi-* -%endif - -%if %{with_kabidw_base} -%ifarch x86_64 s390x ppc64 ppc64le aarch64 -%files kernel-kabidw-base-internal -%defattr(-,root,root) -/kabidw-base/%{_target_cpu}/* -%endif -%endif - -# only some architecture builds need kernel-doc -%if %{with_doc} -%files doc -%defattr(-,root,root) -%{_datadir}/doc/kernel-doc-%{specversion}-%{pkgrelease}/Documentation/* -%dir %{_datadir}/doc/kernel-doc-%{specversion}-%{pkgrelease}/Documentation -%dir %{_datadir}/doc/kernel-doc-%{specversion}-%{pkgrelease} -%endif - -%if %{with_perf} -%files -n perf -%{_bindir}/perf -%{_libdir}/libperf-jvmti.so -%dir %{_libexecdir}/perf-core -%{_libexecdir}/perf-core/* -%{_datadir}/perf-core/* -%{_mandir}/man[1-8]/perf* -%{_sysconfdir}/bash_completion.d/perf -%doc linux-%{KVERREL}/tools/perf/Documentation/examples.txt -%{_docdir}/perf-tip/tips.txt - -%files -n python3-perf -%{python3_sitearch}/* - -%if %{with_debuginfo} -%files -f perf-debuginfo.list -n perf-debuginfo - -%files -f python3-perf-debuginfo.list -n python3-perf-debuginfo -%endif -# with_perf -%endif - -%if %{with_tools} -%ifnarch %{cpupowerarchs} -%files -n kernel-tools -%else -%files -n kernel-tools -f cpupower.lang -%{_bindir}/cpupower -%{_datadir}/bash-completion/completions/cpupower -%ifarch x86_64 -%{_bindir}/centrino-decode -%{_bindir}/powernow-k8-decode -%endif -%{_unitdir}/cpupower.service -%{_mandir}/man[1-8]/cpupower* -%config(noreplace) %{_sysconfdir}/sysconfig/cpupower -%ifarch x86_64 -%{_bindir}/x86_energy_perf_policy -%{_mandir}/man8/x86_energy_perf_policy* -%{_bindir}/turbostat -%{_mandir}/man8/turbostat* -%{_bindir}/intel-speed-select -%{_sbindir}/intel_sdsi -%endif -# cpupowerarchs -%endif -%{_bindir}/tmon -%{_bindir}/iio_event_monitor -%{_bindir}/iio_generic_buffer -%{_bindir}/lsiio -%{_bindir}/lsgpio -%{_bindir}/gpio-hammer -%{_bindir}/gpio-event-mon -%{_bindir}/gpio-watch -%{_mandir}/man1/kvm_stat* -%{_bindir}/kvm_stat -%{_unitdir}/kvm_stat.service -%config(noreplace) %{_sysconfdir}/logrotate.d/kvm_stat -%{_bindir}/page_owner_sort -%{_bindir}/slabinfo - -%if %{with_debuginfo} -%files -f kernel-tools-debuginfo.list -n kernel-tools-debuginfo -%endif - -%ifarch %{cpupowerarchs} -%files -n kernel-tools-libs -%{_libdir}/libcpupower.so.0 -%{_libdir}/libcpupower.so.0.0.1 - -%files -n kernel-tools-libs-devel -%{_libdir}/libcpupower.so -%{_includedir}/cpufreq.h -%endif -# with_tools -%endif - -%if %{with_bpftool} -%files -n bpftool -%{_sbindir}/bpftool -%{_sysconfdir}/bash_completion.d/bpftool -%{_mandir}/man8/bpftool-cgroup.8.gz -%{_mandir}/man8/bpftool-gen.8.gz -%{_mandir}/man8/bpftool-iter.8.gz -%{_mandir}/man8/bpftool-link.8.gz -%{_mandir}/man8/bpftool-map.8.gz -%{_mandir}/man8/bpftool-prog.8.gz -%{_mandir}/man8/bpftool-perf.8.gz -%{_mandir}/man8/bpftool.8.gz -%{_mandir}/man8/bpftool-net.8.gz -%{_mandir}/man8/bpftool-feature.8.gz -%{_mandir}/man8/bpftool-btf.8.gz -%{_mandir}/man8/bpftool-struct_ops.8.gz - -%if %{with_debuginfo} -%files -f bpftool-debuginfo.list -n bpftool-debuginfo -%defattr(-,root,root) -%endif -%endif - -%if %{with_selftests} -%files selftests-internal -%{_libexecdir}/ksamples -%{_libexecdir}/kselftests -%endif - -# empty meta-package -%ifnarch %nobuildarches noarch -%files -%endif - -%if %{with_gcov} -%ifnarch %nobuildarches noarch -%files gcov -%{_builddir} -%endif -%endif - -# This is %%{image_install_path} on an arch where that includes ELF files, -# or empty otherwise. -%define elf_image_install_path %{?kernel_image_elf:%{image_install_path}} - -# -# This macro defines the %%files sections for a kernel package -# and its devel and debuginfo packages. -# %%kernel_variant_files [-k vmlinux] <use_vdso> <condition> <subpackage> -# -%define kernel_variant_files(k:) \ -%if %{2}\ -%{expand:%%files -f kernel-%{?3:%{3}-}core.list %{?1:-f kernel-%{?3:%{3}-}ldsoconf.list} %{?3:%{3}-}core}\ -%{!?_licensedir:%global license %%doc}\ -%license linux-%{KVERREL}/COPYING-%{version}-%{release}\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/%{?-k:%{-k*}}%{!?-k:vmlinuz}\ -%ghost /%{image_install_path}/%{?-k:%{-k*}}%{!?-k:vmlinuz}-%{KVERREL}%{?3:+%{3}}\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/.vmlinuz.hmac \ -%ghost /%{image_install_path}/.vmlinuz-%{KVERREL}%{?3:+%{3}}.hmac \ -%ifarch %{arm} aarch64\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/dtb \ -%ghost /%{image_install_path}/dtb-%{KVERREL}%{?3:+%{3}} \ -%endif\ -%attr(0600, root, root) /lib/modules/%{KVERREL}%{?3:+%{3}}/System.map\ -%ghost %attr(0600, root, root) /boot/System.map-%{KVERREL}%{?3:+%{3}}\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/symvers.gz\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/config\ -%ghost %attr(0600, root, root) /boot/symvers-%{KVERREL}%{?3:+%{3}}.gz\ -%ghost %attr(0600, root, root) /boot/initramfs-%{KVERREL}%{?3:+%{3}}.img\ -%ghost %attr(0644, root, root) /boot/config-%{KVERREL}%{?3:+%{3}}\ -%dir /lib/modules\ -%dir /lib/modules/%{KVERREL}%{?3:+%{3}}\ -%dir /lib/modules/%{KVERREL}%{?3:+%{3}}/kernel\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/build\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/source\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/updates\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/weak-updates\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/systemtap\ -%{_datadir}/doc/kernel-keys/%{KVERREL}%{?3:+%{3}}\ -%if %{1}\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/vdso\ -%endif\ -/lib/modules/%{KVERREL}%{?3:+%{3}}/modules.*\ -%{expand:%%files -f kernel-%{?3:%{3}-}modules.list %{?3:%{3}-}modules}\ -%{expand:%%files %{?3:%{3}-}devel}\ -%defverify(not mtime)\ -/usr/src/kernels/%{KVERREL}%{?3:+%{3}}\ -%{expand:%%files %{?3:%{3}-}devel-matched}\ -%{expand:%%files -f kernel-%{?3:%{3}-}modules-extra.list %{?3:%{3}-}modules-extra}\ -%config(noreplace) /etc/modprobe.d/*-blacklist.conf\ -%{expand:%%files -f kernel-%{?3:%{3}-}modules-internal.list %{?3:%{3}-}modules-internal}\ -%if %{with_debuginfo}\ -%ifnarch noarch\ -%{expand:%%files -f debuginfo%{?3}.list %{?3:%{3}-}debuginfo}\ -%endif\ -%endif\ -%if %{?3:1} %{!?3:0}\ -%{expand:%%files %{3}}\ -%endif\ -%endif\ -%{nil} - -%kernel_variant_files %{_use_vdso} %{with_up} -%kernel_variant_files %{_use_vdso} %{with_debug} debug -%if %{with_debug_meta} -%files debug -%files debug-core -%files debug-devel -%files debug-devel-matched -%files debug-modules -%files debug-modules-extra -%endif -%kernel_variant_files %{use_vdso} %{with_pae} lpae -%kernel_variant_files %{_use_vdso} %{with_zfcpdump} zfcpdump - -%define kernel_variant_ipaclones(k:) \ -%if %{1}\ -%if %{with_ipaclones}\ -%{expand:%%files %{?2:%{2}-}ipaclones-internal}\ -%defattr(-,root,root)\ -%defverify(not mtime)\ -/usr/src/kernels/%{KVERREL}%{?2:+%{2}}-ipaclones\ -%endif\ -%endif\ -%{nil} - -%kernel_variant_ipaclones %{with_up} - -# plz don't put in a version string unless you're going to tag -# and build. -# -# -%changelog Mon Mar 28 2022 Fedora Kernel Team <kernel-team@xxxxxxxxxxxxxxxxx> [5.17.0-0.rc0.78e36f3b0dae.6.test] - -### -# The following Emacs magic makes C-c C-e use UTC dates. -# Local Variables: -# rpm-change-log-uses-utc: t -# End: -### -- https://gitlab.com/cki-project/kernel-ark/-/merge_requests/1878 _______________________________________________ kernel mailing list -- kernel@xxxxxxxxxxxxxxxxxxxxxxx To unsubscribe send an email to kernel-leave@xxxxxxxxxxxxxxxxxxxxxxx Fedora Code of Conduct: https://docs.fedoraproject.org/en-US/project/code-of-conduct/ List Guidelines: https://fedoraproject.org/wiki/Mailing_list_guidelines List Archives: https://lists.fedoraproject.org/archives/list/kernel@xxxxxxxxxxxxxxxxxxxxxxx Do not reply to spam on the list, report it: https://pagure.io/fedora-infrastructure