orgads / rpms / kernel

Forked from rpms/kernel 4 years ago
Clone
Pablo Greco d6c4c4
# We have to override the new %%install behavior because, well... the kernel is special.
Pablo Greco d6c4c4
%global __spec_install_pre %{___build_pre}
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# At the time of this writing (2019-03), RHEL8 packages use w2.xzdio
Pablo Greco d6c4c4
# compression for rpms (xz, level 2).
Pablo Greco d6c4c4
# Kernel has several large (hundreds of mbytes) rpms, they take ~5 mins
Pablo Greco d6c4c4
# to compress by single-threaded xz. Switch to threaded compression,
Pablo Greco d6c4c4
# and from level 2 to 3 to keep compressed sizes close to "w2" results.
Pablo Greco d6c4c4
#
Pablo Greco d6c4c4
# NB: if default compression in /usr/lib/rpm/redhat/macros ever changes,
Pablo Greco d6c4c4
# this one might need tweaking (e.g. if default changes to w3.xzdio,
Pablo Greco d6c4c4
# change below to w4T.xzdio):
Pablo Greco d6c4c4
#
Pablo Greco d6c4c4
# This is disabled on i686 as it triggers oom errors
Pablo Greco d6c4c4
Pablo Greco d6c4c4
%ifnarch i686
Pablo Greco d6c4c4
%define _binary_payload w3T.xzdio
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
Summary: The Linux kernel
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# For a kernel released for public testing, released_kernel should be 1.
Pablo Greco d6c4c4
# For internal testing builds during development, it should be 0.
Pablo Greco d6c4c4
# For rawhide and/or a kernel built from an rc or git snapshot,
Pablo Greco d6c4c4
# released_kernel should be 0.
Pablo Greco d6c4c4
# For a stable, released kernel, released_kernel should be 1.
Pablo Greco d6c4c4
%global released_kernel 1
Pablo Greco d6c4c4
Pablo Greco d6c4c4
%if 0%{?fedora}
Pablo Greco d6c4c4
%define secure_boot_arch x86_64
Pablo Greco d6c4c4
%else
Pablo Greco d6c4c4
%define secure_boot_arch x86_64 aarch64 s390x ppc64le
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# Signing for secure boot authentication
Pablo Greco d6c4c4
%ifarch %{secure_boot_arch}
Pablo Greco d6c4c4
%global signkernel 1
Pablo Greco d6c4c4
%else
Pablo Greco d6c4c4
%global signkernel 0
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# Sign modules on all arches
Pablo Greco d6c4c4
%global signmodules 1
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# Compress modules only for architectures that build modules
Pablo Greco d6c4c4
%ifarch noarch
Pablo Greco d6c4c4
%global zipmodules 0
Pablo Greco d6c4c4
%else
Pablo Greco d6c4c4
%global zipmodules 1
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
%if %{zipmodules}
Pablo Greco d6c4c4
%global zipsed -e 's/\.ko$/\.ko.xz/'
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# define buildid .local
Pablo Greco d6c4c4
Pablo Greco 81a88a
%if 0%{?fedora}%{?centos}
Pablo Greco d6c4c4
%define primary_target fedora
Pablo Greco d6c4c4
%else
Pablo Greco d6c4c4
%define primary_target rhel
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# baserelease defines which build revision of this kernel version we're
Pablo Greco d6c4c4
# building.  We used to call this fedora_build, but the magical name
Pablo Greco d6c4c4
# baserelease is matched by the rpmdev-bumpspec tool, which you should use.
Pablo Greco d6c4c4
#
Pablo Greco d6c4c4
# We used to have some extra magic weirdness to bump this automatically,
Pablo Greco d6c4c4
# but now we don't.  Just use: rpmdev-bumpspec -c 'comment for changelog'
Pablo Greco d6c4c4
# When changing base_sublevel below or going from rc to a final kernel,
Pablo Greco d6c4c4
# reset this by hand to 1 (or to 0 and then use rpmdev-bumpspec).
Pablo Greco d6c4c4
# scripts/rebase.sh should be made to do that for you, actually.
Pablo Greco d6c4c4
#
Pablo Greco d6c4c4
# NOTE: baserelease must be > 0 or bad things will happen if you switch
Pablo Greco d6c4c4
#       to a released kernel (released version will be < rc version)
Pablo Greco d6c4c4
#
Pablo Greco d6c4c4
# For non-released -rc kernels, this will be appended after the rcX and
Pablo Greco d6c4c4
# gitX tags, so a 3 here would become part of release "0.rcX.gitX.3"
Pablo Greco d6c4c4
#
Pablo Greco d6c4c4
%global baserelease 200
Pablo Greco d6c4c4
%global fedora_build %{baserelease}
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# base_sublevel is the kernel version we're starting with and patching
Pablo Greco d6c4c4
# on top of -- for example, 3.1-rc7-git1 starts with a 3.0 base,
Pablo Greco d6c4c4
# which yields a base_sublevel of 0.
Pablo Greco d6c4c4
%define base_sublevel 4
Pablo Greco d6c4c4
Pablo Greco d6c4c4
## If this is a released kernel ##
Pablo Greco d6c4c4
%if 0%{?released_kernel}
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# Do we have a -stable update to apply?
Pablo Greco d6c4c4
%define stable_update 20
Pablo Greco d6c4c4
# Set rpm version accordingly
Pablo Greco d6c4c4
%if 0%{?stable_update}
Pablo Greco d6c4c4
%define stablerev %{stable_update}
Pablo Greco d6c4c4
%define stable_base %{stable_update}
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
%define rpmversion 5.%{base_sublevel}.%{stable_update}
Pablo Greco d6c4c4
Pablo Greco d6c4c4
## The not-released-kernel case ##
Pablo Greco d6c4c4
%else
Pablo Greco d6c4c4
# The next upstream release sublevel (base_sublevel+1)
Pablo Greco d6c4c4
%define upstream_sublevel %(echo $((%{base_sublevel} + 1)))
Pablo Greco d6c4c4
# The rc snapshot level
Pablo Greco d6c4c4
%global rcrev 0
Pablo Greco d6c4c4
# The git snapshot level
Pablo Greco d6c4c4
%define gitrev 0
Pablo Greco d6c4c4
# Set rpm version accordingly
Pablo Greco d6c4c4
%define rpmversion 5.%{upstream_sublevel}.0
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
# Nb: The above rcrev and gitrev values automagically define Patch00 and Patch01 below.
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# What parts do we want to build?  We must build at least one kernel.
Pablo Greco d6c4c4
# These are the kernels that are built IF the architecture allows it.
Pablo Greco d6c4c4
# All should default to 1 (enabled) and be flipped to 0 (disabled)
Pablo Greco d6c4c4
# by later arch-specific checks.
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# The following build options are enabled by default.
Pablo Greco d6c4c4
# Use either --without <opt> in your rpmbuild command or force values
Pablo Greco d6c4c4
# to 0 in here to disable them.
Pablo Greco d6c4c4
#
Pablo Greco d6c4c4
# standard kernel
Pablo Greco d6c4c4
%define with_up        %{?_without_up:        0} %{?!_without_up:        1}
Pablo Greco d6c4c4
# kernel PAE (only valid for ARM (lpae))
Pablo Greco d6c4c4
%define with_pae       %{?_without_pae:       0} %{?!_without_pae:       1}
Pablo Greco d6c4c4
# kernel-debug
Pablo Greco d6c4c4
%define with_debug     %{?_without_debug:     0} %{?!_without_debug:     1}
Pablo Greco d6c4c4
# kernel-doc
Pablo Greco d6c4c4
%define with_doc       %{?_without_doc:       0} %{?!_without_doc:       1}
Pablo Greco d6c4c4
# kernel-headers
Pablo Greco d6c4c4
%define with_headers   %{?_without_headers:   0} %{?!_without_headers:   1}
Pablo Greco d6c4c4
%define with_cross_headers   %{?_without_cross_headers:   0} %{?!_without_cross_headers:   1}
Pablo Greco 11afb4
# perf
Pablo Greco 11afb4
%define with_perf      %{?_without_perf:      0} %{?!_without_perf:      1}
Pablo Greco 11afb4
# tools
Pablo Greco 11afb4
%define with_tools     %{?_without_tools:     0} %{?!_without_tools:     1}
Pablo Greco 11afb4
# bpf tool
Pablo Greco 11afb4
%define with_bpftool   %{?_without_bpftool:   0} %{?!_without_bpftool:   1}
Pablo Greco d6c4c4
# kernel-debuginfo
Pablo Greco d6c4c4
%define with_debuginfo %{?_without_debuginfo: 0} %{?!_without_debuginfo: 1}
Pablo Greco d6c4c4
# Want to build a the vsdo directories installed
Pablo Greco d6c4c4
%define with_vdso_install %{?_without_vdso_install: 0} %{?!_without_vdso_install: 1}
Pablo Greco d6c4c4
# kernel-zfcpdump (s390 specific kernel for zfcpdump)
Pablo Greco d6c4c4
%define with_zfcpdump  %{?_without_zfcpdump:  0} %{?!_without_zfcpdump:  1}
Pablo Greco d6c4c4
# kernel-abi-whitelists
Pablo Greco d6c4c4
%define with_kernel_abi_whitelists %{?_without_kernel_abi_whitelists: 0} %{?!_without_kernel_abi_whitelists: 1}
Pablo Greco d6c4c4
# internal samples and selftests
Pablo Greco d6c4c4
%define with_selftests %{?_without_selftests: 0} %{?!_without_selftests: 1}
Pablo Greco d6c4c4
#
Pablo Greco d6c4c4
# Additional options for user-friendly one-off kernel building:
Pablo Greco d6c4c4
#
Pablo Greco d6c4c4
# Only build the base kernel (--with baseonly):
Pablo Greco d6c4c4
%define with_baseonly  %{?_with_baseonly:     1} %{?!_with_baseonly:     0}
Pablo Greco d6c4c4
# Only build the pae kernel (--with paeonly):
Pablo Greco d6c4c4
%define with_paeonly   %{?_with_paeonly:      1} %{?!_with_paeonly:      0}
Pablo Greco d6c4c4
# Only build the debug kernel (--with dbgonly):
Pablo Greco d6c4c4
%define with_dbgonly   %{?_with_dbgonly:      1} %{?!_with_dbgonly:      0}
Pablo Greco d6c4c4
# Control whether we perform a compat. check against published ABI.
Pablo Greco d6c4c4
%define with_kabichk   %{?_without_kabichk:   0} %{?!_without_kabichk:   1}
Pablo Greco d6c4c4
# Temporarily disable kabi checks until RC.
Pablo Greco d6c4c4
%define with_kabichk 0
Pablo Greco d6c4c4
# Control whether we perform a compat. check against DUP ABI.
Pablo Greco d6c4c4
%define with_kabidupchk %{?_with_kabidupchk:  1} %{?!_with_kabidupchk:   0}
Pablo Greco d6c4c4
#
Pablo Greco d6c4c4
# Control whether to run an extensive DWARF based kABI check.
Pablo Greco d6c4c4
# Note that this option needs to have baseline setup in SOURCE300.
Pablo Greco d6c4c4
%define with_kabidwchk %{?_without_kabidwchk: 0} %{?!_without_kabidwchk: 1}
Pablo Greco d6c4c4
%define with_kabidw_base %{?_with_kabidw_base: 1} %{?!_with_kabidw_base: 0}
Pablo Greco d6c4c4
#
Pablo Greco d6c4c4
# should we do C=1 builds with sparse
Pablo Greco d6c4c4
%define with_sparse    %{?_with_sparse:       1} %{?!_with_sparse:       0}
Pablo Greco d6c4c4
#
Pablo Greco d6c4c4
# Cross compile requested?
Pablo Greco d6c4c4
%define with_cross    %{?_with_cross:         1} %{?!_with_cross:        0}
Pablo Greco d6c4c4
#
Pablo Greco d6c4c4
# build a release kernel on rawhide
Pablo Greco d6c4c4
%define with_release   %{?_with_release:      1} %{?!_with_release:      0}
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# verbose build, i.e. no silent rules and V=1
Pablo Greco d6c4c4
%define with_verbose %{?_with_verbose:        1} %{?!_with_verbose:      0}
Pablo Greco d6c4c4
Pablo Greco d6c4c4
#
Pablo Greco d6c4c4
# check for mismatched config options
Pablo Greco d6c4c4
%define with_configchecks %{?_without_configchecks:        0} %{?!_without_configchecks:        1}
Pablo Greco d6c4c4
Pablo Greco d6c4c4
#
Pablo Greco d6c4c4
# gcov support
Pablo Greco d6c4c4
%define with_gcov %{?_with_gcov: 1} %{?!_with_gcov: 0}
Pablo Greco d6c4c4
Pablo Greco d6c4c4
#
Pablo Greco d6c4c4
# ipa_clone support
Pablo Greco d6c4c4
%define with_ipaclones %{?_without_ipaclones: 0} %{?!_without_ipaclones: 1}
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# Want to build a vanilla kernel build without any non-upstream patches?
Pablo Greco d6c4c4
%define with_vanilla %{?_with_vanilla: 1} %{?!_with_vanilla: 0}
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# Set debugbuildsenabled to 1 for production (build separate debug kernels)
Pablo Greco d6c4c4
#  and 0 for rawhide (all kernels are debug kernels).
Pablo Greco d6c4c4
# See also 'make debug' and 'make release'.
Pablo Greco d6c4c4
%define debugbuildsenabled 1
Pablo Greco d6c4c4
Pablo Greco d6c4c4
%if 0%{?fedora}
Pablo Greco d6c4c4
# Kernel headers are being split out into a separate package
Pablo Greco d6c4c4
%define with_headers 0
Pablo Greco d6c4c4
%define with_cross_headers 0
Pablo Greco d6c4c4
# no selftests for now
Pablo Greco d6c4c4
%define with_selftests 0
Pablo Greco d6c4c4
# no ipa_clone for now
Pablo Greco d6c4c4
%define with_ipaclones 0
Pablo Greco d6c4c4
# no whitelist
Pablo Greco d6c4c4
%define with_kernel_abi_whitelists 0
Pablo Greco d6c4c4
# Fedora builds these separately
Pablo Greco d6c4c4
%define with_perf 0
Pablo Greco d6c4c4
%define with_tools 0
Pablo Greco d6c4c4
%define with_bpftool 0
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
%if %{with_verbose}
Pablo Greco d6c4c4
%define make_opts V=1
Pablo Greco d6c4c4
%else
Pablo Greco d6c4c4
%define make_opts -s
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# pkg_release is what we'll fill in for the rpm Release: field
Pablo Greco d6c4c4
%if 0%{?released_kernel}
Pablo Greco d6c4c4
Pablo Greco d6c4c4
%define pkg_release %{fedora_build}%{?buildid}%{?dist}
Pablo Greco d6c4c4
Pablo Greco d6c4c4
%else
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# non-released_kernel
Pablo Greco d6c4c4
%if 0%{?rcrev}
Pablo Greco d6c4c4
%define rctag .rc%rcrev
Pablo Greco d6c4c4
%else
Pablo Greco d6c4c4
%define rctag .rc0
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
%if 0%{?gitrev}
Pablo Greco d6c4c4
%define gittag .git%gitrev
Pablo Greco d6c4c4
%else
Pablo Greco d6c4c4
%define gittag .git0
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
%define pkg_release 0%{?rctag}%{?gittag}.%{fedora_build}%{?buildid}%{?dist}
Pablo Greco d6c4c4
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# The kernel tarball/base version
Pablo Greco d6c4c4
%define kversion 5.%{base_sublevel}
Pablo Greco d6c4c4
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# turn off debug kernel and kabichk for gcov builds
Pablo Greco d6c4c4
%if %{with_gcov}
Pablo Greco d6c4c4
%define with_debug 0
Pablo Greco d6c4c4
%define with_kabichk 0
Pablo Greco d6c4c4
%define with_kabidupchk 0
Pablo Greco d6c4c4
%define with_kabidwchk 0
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# turn off kABI DWARF-based check if we're generating the base dataset
Pablo Greco d6c4c4
%if %{with_kabidw_base}
Pablo Greco d6c4c4
%define with_kabidwchk 0
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# kpatch_kcflags are extra compiler flags applied to base kernel
Pablo Greco d6c4c4
# -fdump-ipa-clones is enabled only for base kernels on selected arches
Pablo Greco d6c4c4
%if %{with_ipaclones}
Pablo Greco d6c4c4
%ifarch x86_64 ppc64le
Pablo Greco d6c4c4
%define kpatch_kcflags -fdump-ipa-clones
Pablo Greco d6c4c4
%else
Pablo Greco d6c4c4
%define with_ipaclones 0
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
%define make_target bzImage
Pablo Greco d6c4c4
%define image_install_path boot
Pablo Greco d6c4c4
Pablo Greco d6c4c4
%define KVERREL %{version}-%{release}.%{_target_cpu}
Pablo Greco d6c4c4
%define KVERREL_RE %(echo %KVERREL | sed 's/+/[+]/g')
Pablo Greco d6c4c4
%define hdrarch %_target_cpu
Pablo Greco d6c4c4
%define asmarch %_target_cpu
Pablo Greco d6c4c4
Pablo Greco d6c4c4
%if 0%{!?nopatches:1}
Pablo Greco d6c4c4
%define nopatches 0
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
%if %{with_vanilla}
Pablo Greco d6c4c4
%define nopatches 1
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
%if %{nopatches}
Pablo Greco d6c4c4
%define variant -vanilla
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
%if !%{debugbuildsenabled}
Pablo Greco d6c4c4
%define with_debug 0
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
%if !%{with_debuginfo}
Pablo Greco d6c4c4
%define _enable_debug_packages 0
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
%define debuginfodir /usr/lib/debug
Pablo Greco d6c4c4
# Needed because we override almost everything involving build-ids
Pablo Greco d6c4c4
# and debuginfo generation. Currently we rely on the old alldebug setting.
Pablo Greco d6c4c4
%global _build_id_links alldebug
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# kernel PAE is only built on ARMv7
Pablo Greco d6c4c4
%ifnarch armv7hl
Pablo Greco d6c4c4
%define with_pae 0
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# if requested, only build base kernel
Pablo Greco d6c4c4
%if %{with_baseonly}
Pablo Greco d6c4c4
%define with_pae 0
Pablo Greco d6c4c4
%define with_debug 0
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# if requested, only build pae kernel
Pablo Greco d6c4c4
%if %{with_paeonly}
Pablo Greco d6c4c4
%define with_up 0
Pablo Greco d6c4c4
%define with_debug 0
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# if requested, only build debug kernel
Pablo Greco d6c4c4
%if %{with_dbgonly}
Pablo Greco d6c4c4
%if %{debugbuildsenabled}
Pablo Greco d6c4c4
%define with_up 0
Pablo Greco d6c4c4
%define with_pae 0
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
%define with_pae 0
Pablo Greco 11afb4
%define with_tools 0
Pablo Greco 11afb4
%define with_perf 0
Pablo Greco 11afb4
%define with_bpftool 0
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# turn off kABI DUP check and DWARF-based check if kABI check is disabled
Pablo Greco d6c4c4
%if !%{with_kabichk}
Pablo Greco d6c4c4
%define with_kabidupchk 0
Pablo Greco d6c4c4
%define with_kabidwchk 0
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
%if %{with_vdso_install}
Pablo Greco d6c4c4
%define use_vdso 1
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
Pablo Greco d6c4c4
%ifnarch noarch
Pablo Greco d6c4c4
%define with_kernel_abi_whitelists 0
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# Overrides for generic default options
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# only package docs noarch
Pablo Greco d6c4c4
%ifnarch noarch
Pablo Greco d6c4c4
%define with_doc 0
Pablo Greco d6c4c4
%define doc_build_fail true
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
%if 0%{?fedora}
Pablo Greco d6c4c4
# don't do debug builds on anything but i686 and x86_64
Pablo Greco d6c4c4
%ifnarch i686 x86_64
Pablo Greco d6c4c4
%define with_debug 0
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# don't build noarch kernels or headers (duh)
Pablo Greco d6c4c4
%ifarch noarch
Pablo Greco d6c4c4
%define with_up 0
Pablo Greco d6c4c4
%define with_headers 0
Pablo Greco d6c4c4
%define with_cross_headers 0
Pablo Greco 11afb4
%define with_tools 0
Pablo Greco 11afb4
%define with_perf 0
Pablo Greco 11afb4
%define with_bpftool 0
Pablo Greco d6c4c4
%define with_selftests 0
Pablo Greco d6c4c4
%define with_debug 0
Pablo Greco d6c4c4
%define all_arch_configs kernel-%{version}-*.config
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# sparse blows up on ppc
Pablo Greco d6c4c4
%ifnarch ppc64le
Pablo Greco d6c4c4
%define with_sparse 0
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# zfcpdump mechanism is s390 only
Pablo Greco d6c4c4
%ifnarch s390x
Pablo Greco d6c4c4
%define with_zfcpdump 0
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
%if 0%{?fedora}
Pablo Greco d6c4c4
# This is not for Fedora
Pablo Greco d6c4c4
%define with_zfcpdump 0
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# Per-arch tweaks
Pablo Greco d6c4c4
Pablo Greco d6c4c4
%ifarch i686
Pablo Greco d6c4c4
%define asmarch x86
Pablo Greco d6c4c4
%define hdrarch i386
Pablo Greco d6c4c4
%define all_arch_configs kernel-%{version}-i?86*.config
Pablo Greco d6c4c4
%define kernel_image arch/x86/boot/bzImage
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
%ifarch x86_64
Pablo Greco d6c4c4
%define asmarch x86
Pablo Greco d6c4c4
%define all_arch_configs kernel-%{version}-x86_64*.config
Pablo Greco d6c4c4
%define kernel_image arch/x86/boot/bzImage
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
%ifarch ppc64le
Pablo Greco d6c4c4
%define asmarch powerpc
Pablo Greco d6c4c4
%define hdrarch powerpc
Pablo Greco d6c4c4
%define make_target vmlinux
Pablo Greco d6c4c4
%define kernel_image vmlinux
Pablo Greco d6c4c4
%define kernel_image_elf 1
Pablo Greco d6c4c4
%define all_arch_configs kernel-%{version}-ppc64le*.config
Pablo Greco d6c4c4
%define kcflags -O3
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
%ifarch s390x
Pablo Greco d6c4c4
%define asmarch s390
Pablo Greco d6c4c4
%define hdrarch s390
Pablo Greco d6c4c4
%define all_arch_configs kernel-%{version}-s390x.config
Pablo Greco d6c4c4
%define kernel_image arch/s390/boot/bzImage
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
%ifarch %{arm}
Pablo Greco d6c4c4
%define all_arch_configs kernel-%{version}-arm*.config
Pablo Greco d6c4c4
%define skip_nonpae_vdso 1
Pablo Greco d6c4c4
%define asmarch arm
Pablo Greco d6c4c4
%define hdrarch arm
Pablo Greco d6c4c4
%define make_target bzImage
Pablo Greco d6c4c4
%define kernel_image arch/arm/boot/zImage
Pablo Greco d6c4c4
# http://lists.infradead.org/pipermail/linux-arm-kernel/2012-March/091404.html
Pablo Greco d6c4c4
%define kernel_mflags KALLSYMS_EXTRA_PASS=1
Pablo Greco d6c4c4
# we only build headers/perf/tools on the base arm arches
Pablo Greco d6c4c4
# just like we used to only build them on i386 for x86
Pablo Greco d6c4c4
%ifnarch armv7hl
Pablo Greco d6c4c4
%define with_headers 0
Pablo Greco d6c4c4
%define with_cross_headers 0
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
# These currently don't compile on armv7
Pablo Greco d6c4c4
%define with_selftests 0
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
%ifarch aarch64
Pablo Greco d6c4c4
%define all_arch_configs kernel-%{version}-aarch64*.config
Pablo Greco d6c4c4
%define asmarch arm64
Pablo Greco d6c4c4
%define hdrarch arm64
Pablo Greco d6c4c4
%define make_target Image.gz
Pablo Greco d6c4c4
%define kernel_image arch/arm64/boot/Image.gz
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# Should make listnewconfig fail if there's config options
Pablo Greco d6c4c4
# printed out?
Pablo Greco d6c4c4
%if %{nopatches}
Pablo Greco d6c4c4
%define with_configchecks 0
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# To temporarily exclude an architecture from being built, add it to
Pablo Greco d6c4c4
# %%nobuildarches. Do _NOT_ use the ExclusiveArch: line, because if we
Pablo Greco d6c4c4
# don't build kernel-headers then the new build system will no longer let
Pablo Greco d6c4c4
# us use the previous build of that package -- it'll just be completely AWOL.
Pablo Greco d6c4c4
# Which is a BadThing(tm).
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# We only build kernel-headers on the following...
Pablo Greco d6c4c4
%if 0%{?fedora}
Pablo Greco d6c4c4
%define nobuildarches i386
Pablo Greco d6c4c4
%else
Pablo Greco d6c4c4
%define nobuildarches i386 i686
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
%ifarch %nobuildarches
Pablo Greco d6c4c4
%define with_up 0
Pablo Greco d6c4c4
%define with_debug 0
Pablo Greco d6c4c4
%define with_debuginfo 0
Pablo Greco 81a88a
%define with_perf 0
Pablo Greco 81a88a
%define with_tools 0
Pablo Greco 81a88a
%define with_bpftool 0
Pablo Greco d6c4c4
%define with_selftests 0
Pablo Greco d6c4c4
%define with_pae 0
Pablo Greco d6c4c4
%define _enable_debug_packages 0
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# Architectures we build tools/cpupower on
Pablo Greco 81a88a
%if 0%{?fedora}%{?centos}
Pablo Greco d6c4c4
%define cpupowerarchs %{ix86} x86_64 ppc64le %{arm} aarch64
Pablo Greco d6c4c4
%else
Pablo Greco d6c4c4
%define cpupowerarchs i686 x86_64 ppc64le aarch64
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
%if %{use_vdso}
Pablo Greco d6c4c4
Pablo Greco d6c4c4
%if 0%{?skip_nonpae_vdso}
Pablo Greco d6c4c4
%define _use_vdso 0
Pablo Greco d6c4c4
%else
Pablo Greco d6c4c4
%define _use_vdso 1
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
%else
Pablo Greco d6c4c4
%define _use_vdso 0
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
#
Pablo Greco d6c4c4
# Packages that need to be installed before the kernel is, because the %%post
Pablo Greco d6c4c4
# scripts use them.
Pablo Greco d6c4c4
#
Pablo Greco d6c4c4
%define kernel_prereq  coreutils, systemd >= 203-2, /usr/bin/kernel-install
Pablo Greco d6c4c4
%define initrd_prereq  dracut >= 027
Pablo Greco d6c4c4
Pablo Greco d6c4c4
Pablo Greco d6c4c4
Name: kernel%{?variant}
Pablo Greco d6c4c4
License: GPLv2 and Redistributable, no modification permitted
Pablo Greco d6c4c4
URL: https://www.kernel.org/
Pablo Greco d6c4c4
Version: %{rpmversion}
Pablo Greco d6c4c4
Release: %{pkg_release}
Pablo Greco d6c4c4
# DO NOT CHANGE THE 'ExclusiveArch' LINE TO TEMPORARILY EXCLUDE AN ARCHITECTURE BUILD.
Pablo Greco d6c4c4
# SET %%nobuildarches (ABOVE) INSTEAD
Pablo Greco d6c4c4
%if 0%{?fedora}
Pablo Greco d6c4c4
ExclusiveArch: x86_64 s390x %{arm} aarch64 ppc64le
Pablo Greco d6c4c4
%else
Pablo Greco d6c4c4
ExclusiveArch: noarch i386 i686 x86_64 s390x %{arm} aarch64 ppc64le
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
ExclusiveOS: Linux
Pablo Greco d6c4c4
%ifnarch %{nobuildarches}
Pablo Greco d6c4c4
Requires: kernel-core-uname-r = %{KVERREL}%{?variant}
Pablo Greco d6c4c4
Requires: kernel-modules-uname-r = %{KVERREL}%{?variant}
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
Pablo Greco d6c4c4
#
Pablo Greco d6c4c4
# List the packages used during the kernel build
Pablo Greco d6c4c4
#
Pablo Greco d6c4c4
BuildRequires: kmod, patch, bash, tar, git-core
Pablo Greco d6c4c4
BuildRequires: bzip2, xz, findutils, gzip, m4, perl-interpreter, perl-Carp, perl-devel, perl-generators, make, diffutils, gawk
Pablo Greco d6c4c4
BuildRequires: gcc, binutils, redhat-rpm-config, hmaccalc, bison, flex
Pablo Greco d6c4c4
BuildRequires: net-tools, hostname, bc, elfutils-devel
Pablo Greco d6c4c4
%if 0%{?fedora}
Pablo Greco d6c4c4
BuildRequires: dwarves
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
# Used to mangle unversioned shebangs to be Python 3
Pablo Greco d6c4c4
BuildRequires: python3-devel
Pablo Greco d6c4c4
%if %{with_headers}
Pablo Greco d6c4c4
BuildRequires: rsync
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
%if %{with_doc}
Pablo Greco d6c4c4
BuildRequires: xmlto, asciidoc, python3-sphinx
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
%if %{with_sparse}
Pablo Greco d6c4c4
BuildRequires: sparse
Pablo Greco d6c4c4
%endif
Pablo Greco 11afb4
%if %{with_perf}
Pablo Greco 11afb4
BuildRequires: zlib-devel binutils-devel newt-devel perl(ExtUtils::Embed) bison flex xz-devel
Pablo Greco 11afb4
BuildRequires: audit-libs-devel
Pablo Greco 11afb4
BuildRequires: java-devel
Pablo Greco 11afb4
%ifnarch %{arm} s390x
Pablo Greco 11afb4
BuildRequires: numactl-devel
Pablo Greco 11afb4
%endif
Pablo Greco 11afb4
%endif
Pablo Greco 11afb4
%if %{with_tools}
Pablo Greco 11afb4
BuildRequires: gettext ncurses-devel
Pablo Greco 11afb4
%ifnarch s390x
Pablo Greco 11afb4
BuildRequires: pciutils-devel
Pablo Greco 11afb4
%endif
Pablo Greco 11afb4
%endif
Pablo Greco 11afb4
%if %{with_bpftool}
Pablo Greco 2a2b57
%if 0%{?rhel} == 7
Pablo Greco 2a2b57
BuildRequires: python2-docutils
Pablo Greco 2a2b57
%else
Pablo Greco 11afb4
BuildRequires: python3-docutils
Pablo Greco 2a2b57
%endif
Pablo Greco 11afb4
BuildRequires: zlib-devel binutils-devel
Pablo Greco 11afb4
%endif
Pablo Greco d6c4c4
%if %{with_selftests}
Pablo Greco d6c4c4
%if 0%{?fedora}
Pablo Greco d6c4c4
BuildRequires: clang llvm
Pablo Greco d6c4c4
%else
Pablo Greco d6c4c4
BuildRequires: llvm-toolset
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
%ifnarch %{arm}
Pablo Greco d6c4c4
BuildRequires: numactl-devel
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
BuildRequires: libcap-devel libcap-ng-devel rsync
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
BuildConflicts: rhbuildsys(DiskFree) < 500Mb
Pablo Greco d6c4c4
%if %{with_debuginfo}
Pablo Greco d6c4c4
BuildRequires: rpm-build, elfutils
Pablo Greco d6c4c4
BuildConflicts: rpm < 4.13.0.1-19
Pablo Greco d6c4c4
%if 0%{?fedora}
Pablo Greco d6c4c4
BuildConflicts: dwarves < 1.13
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
# Most of these should be enabled after more investigation
Pablo Greco d6c4c4
%undefine _include_minidebuginfo
Pablo Greco d6c4c4
%undefine _find_debuginfo_dwz_opts
Pablo Greco d6c4c4
%undefine _unique_build_ids
Pablo Greco d6c4c4
%undefine _unique_debug_names
Pablo Greco d6c4c4
%undefine _unique_debug_srcs
Pablo Greco d6c4c4
%undefine _debugsource_packages
Pablo Greco d6c4c4
%undefine _debuginfo_subpackages
Pablo Greco d6c4c4
%global _find_debuginfo_opts -r
Pablo Greco d6c4c4
%global _missing_build_ids_terminate_build 1
Pablo Greco d6c4c4
%global _no_recompute_build_ids 1
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
%if %{with_kabidwchk} || %{with_kabidw_base}
Pablo Greco d6c4c4
BuildRequires: kabi-dw
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
%if %{signkernel}%{signmodules}
Pablo Greco d6c4c4
BuildRequires: openssl openssl-devel
Pablo Greco d6c4c4
%if %{signkernel}
Pablo Greco d6c4c4
%ifarch x86_64 aarch64
Pablo Greco d6c4c4
BuildRequires: nss-tools
Pablo Greco d6c4c4
BuildRequires: pesign >= 0.10-4
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
%if %{with_cross}
Pablo Greco d6c4c4
BuildRequires: binutils-%{_build_arch}-linux-gnu, gcc-%{_build_arch}-linux-gnu
Pablo Greco d6c4c4
%define cross_opts CROSS_COMPILE=%{_build_arch}-linux-gnu-
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco 11afb4
# These below are required to build man pages
Pablo Greco 11afb4
%if %{with_perf}
Pablo Greco 11afb4
BuildRequires: xmlto
Pablo Greco 11afb4
%endif
Pablo Greco 11afb4
%if %{with_perf} || %{with_tools}
Pablo Greco 11afb4
BuildRequires: asciidoc
Pablo Greco 11afb4
%endif
Pablo Greco 11afb4
Pablo Greco d6c4c4
Source0: https://www.kernel.org/pub/linux/kernel/v5.x/linux-%{kversion}.tar.xz
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# Name of the packaged file containing signing key
Pablo Greco d6c4c4
%ifarch ppc64le
Pablo Greco d6c4c4
%define signing_key_filename kernel-signing-ppc.cer
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
%ifarch s390x
Pablo Greco d6c4c4
%define signing_key_filename kernel-signing-s390.cer
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
Source10: x509.genkey.rhel
Pablo Greco d6c4c4
Source11: x509.genkey.fedora
Pablo Greco d6c4c4
%if %{?released_kernel}
Pablo Greco d6c4c4
Pablo Greco d6c4c4
Source12: securebootca.cer
Pablo Greco d6c4c4
Source13: secureboot.cer
Pablo Greco d6c4c4
Pablo Greco d6c4c4
%define secureboot_ca %{SOURCE12}
Pablo Greco d6c4c4
%ifarch x86_64 aarch64
Pablo Greco d6c4c4
%define secureboot_key %{SOURCE13}
Pablo Greco d6c4c4
%define pesign_name redhatsecureboot301
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
%else # released_kernel
Pablo Greco d6c4c4
Pablo Greco d6c4c4
Source12: redhatsecurebootca2.cer
Pablo Greco d6c4c4
Source13: redhatsecureboot003.cer
Pablo Greco d6c4c4
Pablo Greco d6c4c4
%define secureboot_ca %{SOURCE12}
Pablo Greco d6c4c4
%define secureboot_key %{SOURCE13}
Pablo Greco d6c4c4
%define pesign_name redhatsecureboot003
Pablo Greco d6c4c4
Pablo Greco d6c4c4
%endif # released_kernel
Pablo Greco d6c4c4
Pablo Greco d6c4c4
Source15: mod-extra.list.rhel
Pablo Greco d6c4c4
Source16: mod-extra.list.fedora
Pablo Greco d6c4c4
Source17: mod-extra.sh
Pablo Greco d6c4c4
Source18: mod-sign.sh
Pablo Greco d6c4c4
Source19: mod-extra-blacklist.sh
Pablo Greco d6c4c4
Source79: parallel_xz.sh
Pablo Greco d6c4c4
Pablo Greco d6c4c4
Source80: filter-x86_64.sh.fedora
Pablo Greco d6c4c4
Source81: filter-armv7hl.sh.fedora
Pablo Greco d6c4c4
Source82: filter-i686.sh.fedora
Pablo Greco d6c4c4
Source83: filter-aarch64.sh.fedora
Pablo Greco d6c4c4
Source86: filter-ppc64le.sh.fedora
Pablo Greco d6c4c4
Source87: filter-s390x.sh.fedora
Pablo Greco d6c4c4
Source89: filter-modules.sh.fedora
Pablo Greco d6c4c4
Pablo Greco d6c4c4
Source90: filter-x86_64.sh.rhel
Pablo Greco d6c4c4
Source91: filter-armv7hl.sh.rhel
Pablo Greco d6c4c4
Source92: filter-i686.sh.rhel
Pablo Greco d6c4c4
Source93: filter-aarch64.sh.rhel
Pablo Greco d6c4c4
Source96: filter-ppc64le.sh.rhel
Pablo Greco d6c4c4
Source97: filter-s390x.sh.rhel
Pablo Greco d6c4c4
Source99: filter-modules.sh.rhel
Pablo Greco d6c4c4
%define modsign_cmd %{SOURCE18}
Pablo Greco d6c4c4
Pablo Greco d6c4c4
Source20: kernel-aarch64-rhel.config
Pablo Greco d6c4c4
Source21: kernel-aarch64-debug-rhel.config
Pablo Greco d6c4c4
Source30: kernel-ppc64le-rhel.config
Pablo Greco d6c4c4
Source31: kernel-ppc64le-debug-rhel.config
Pablo Greco d6c4c4
Source32: kernel-s390x-rhel.config
Pablo Greco d6c4c4
Source33: kernel-s390x-debug-rhel.config
Pablo Greco d6c4c4
Source34: kernel-s390x-zfcpdump-rhel.config
Pablo Greco d6c4c4
Source35: kernel-x86_64-rhel.config
Pablo Greco d6c4c4
Source36: kernel-x86_64-debug-rhel.config
Pablo Greco d6c4c4
Pablo Greco d6c4c4
Source37: kernel-aarch64-fedora.config
Pablo Greco d6c4c4
Source38: kernel-aarch64-debug-fedora.config
Pablo Greco d6c4c4
Source39: kernel-armv7hl-fedora.config
Pablo Greco d6c4c4
Source40: kernel-armv7hl-debug-fedora.config
Pablo Greco d6c4c4
Source41: kernel-armv7hl-lpae-fedora.config
Pablo Greco d6c4c4
Source42: kernel-armv7hl-lpae-debug-fedora.config
Pablo Greco d6c4c4
Source43: kernel-i686-fedora.config
Pablo Greco d6c4c4
Source44: kernel-i686-debug-fedora.config
Pablo Greco d6c4c4
Source45: kernel-ppc64le-fedora.config
Pablo Greco d6c4c4
Source46: kernel-ppc64le-debug-fedora.config
Pablo Greco d6c4c4
Source47: kernel-s390x-fedora.config
Pablo Greco d6c4c4
Source48: kernel-s390x-debug-fedora.config
Pablo Greco d6c4c4
Source49: kernel-x86_64-fedora.config
Pablo Greco d6c4c4
Source50: kernel-x86_64-debug-fedora.config
Pablo Greco d6c4c4
Pablo Greco d6c4c4
Pablo Greco d6c4c4
Pablo Greco d6c4c4
Source51: generate_all_configs.sh
Pablo Greco d6c4c4
Pablo Greco d6c4c4
Source52: process_configs.sh
Pablo Greco d6c4c4
Source53: generate_bls_conf.sh
Pablo Greco d6c4c4
Source56: update_scripts.sh
Pablo Greco d6c4c4
Pablo Greco d6c4c4
Source54: mod-internal.list
Pablo Greco d6c4c4
Source55: merge.pl
Pablo Greco d6c4c4
Pablo Greco d6c4c4
Source200: check-kabi
Pablo Greco d6c4c4
Pablo Greco d6c4c4
Source201: Module.kabi_aarch64
Pablo Greco d6c4c4
Source202: Module.kabi_ppc64le
Pablo Greco d6c4c4
Source203: Module.kabi_s390x
Pablo Greco d6c4c4
Source204: Module.kabi_x86_64
Pablo Greco d6c4c4
Pablo Greco d6c4c4
Source210: Module.kabi_dup_aarch64
Pablo Greco d6c4c4
Source211: Module.kabi_dup_ppc64le
Pablo Greco d6c4c4
Source212: Module.kabi_dup_s390x
Pablo Greco d6c4c4
Source213: Module.kabi_dup_x86_64
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# Source300: kernel-abi-whitelists-%{rpmversion}-%{distro_build}.tar.bz2
Pablo Greco d6c4c4
# Source301: kernel-kabi-dw-%{rpmversion}-%{distro_build}.tar.bz2
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# Sources for kernel-tools
Pablo Greco d6c4c4
Source2000: cpupower.service
Pablo Greco d6c4c4
Source2001: cpupower.config
Pablo Greco d6c4c4
Pablo Greco d6c4c4
## Patches needed for building this package
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# Patch1: patch-%{rpmversion}-redhat.patch
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# empty final patch to facilitate testing of kernel patches
Pablo Greco d6c4c4
# Patch999999: linux-kernel-test.patch
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# This file is intentionally left empty in the stock kernel. Its a nicety
Pablo Greco d6c4c4
# added for those wanting to do custom rebuilds with altered config opts.
Pablo Greco d6c4c4
Source1000: kernel-local
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# Here should be only the patches up to the upstream canonical Linus tree.
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# For a stable release kernel
Pablo Greco d6c4c4
%if 0%{?stable_update}
Pablo Greco d6c4c4
%if 0%{?stable_base}
Pablo Greco d6c4c4
%define    stable_patch_00  patch-5.%{base_sublevel}.%{stable_base}.xz
Pablo Greco d6c4c4
Source5000: %{stable_patch_00}
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# non-released_kernel case
Pablo Greco d6c4c4
# These are automagically defined by the rcrev and gitrev values set up
Pablo Greco d6c4c4
# near the top of this spec file.
Pablo Greco d6c4c4
%else
Pablo Greco d6c4c4
%if 0%{?rcrev}
Pablo Greco d6c4c4
Source5000: patch-5.%{upstream_sublevel}-rc%{rcrev}.xz
Pablo Greco d6c4c4
%if 0%{?gitrev}
Pablo Greco d6c4c4
Source5001: patch-5.%{upstream_sublevel}-rc%{rcrev}-git%{gitrev}.xz
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
%else
Pablo Greco d6c4c4
# pre-{base_sublevel+1}-rc1 case
Pablo Greco d6c4c4
%if 0%{?gitrev}
Pablo Greco d6c4c4
Source5000: patch-5.%{base_sublevel}-git%{gitrev}.xz
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
## Patches needed for building this package
Pablo Greco d6c4c4
Pablo Greco d6c4c4
## compile fixes
Pablo Greco d6c4c4
Pablo Greco d6c4c4
%if !%{nopatches}
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# Git trees.
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# Standalone patches
Pablo Greco d6c4c4
# 100 - Generic long running patches
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# 200 - x86 / secureboot
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# bz 1497559 - Make kernel MODSIGN code not error on missing variables
Pablo Greco d6c4c4
Patch200: 0001-Make-get_cert_list-not-complain-about-cert-lists-tha.patch
Pablo Greco d6c4c4
Patch201: 0002-Add-efi_status_to_str-and-rework-efi_status_to_err.patch
Pablo Greco d6c4c4
Patch202: 0003-Make-get_cert_list-use-efi_status_to_str-to-print-er.patch
Pablo Greco d6c4c4
Pablo Greco d6c4c4
Patch204: efi-secureboot.patch
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# 300 - ARM patches
Pablo Greco d6c4c4
Patch300: arm64-Add-option-of-13-for-FORCE_MAX_ZONEORDER.patch
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# RHBZ Bug 1576593 - work around while vendor investigates
Pablo Greco d6c4c4
Patch301: arm-make-highpte-not-expert.patch
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# https://patchwork.kernel.org/patch/10351797/
Pablo Greco d6c4c4
Patch302: ACPI-scan-Fix-regression-related-to-X-Gene-UARTs.patch
Pablo Greco d6c4c4
# rhbz 1574718
Pablo Greco d6c4c4
Patch303: ACPI-irq-Workaround-firmware-issue-on-X-Gene-based-m400.patch
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# http://www.spinics.net/lists/linux-tegra/msg26029.html
Pablo Greco d6c4c4
Patch304: usb-phy-tegra-Add-38.4MHz-clock-table-entry.patch
Pablo Greco d6c4c4
# http://patchwork.ozlabs.org/patch/587554/
Pablo Greco d6c4c4
Patch305: ARM-tegra-usb-no-reset.patch
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# Tegra bits
Pablo Greco d6c4c4
Patch320: arm64-tegra-jetson-tx1-fixes.patch
Pablo Greco d6c4c4
# https://www.spinics.net/lists/linux-tegra/msg43110.html
Pablo Greco d6c4c4
Patch321: arm64-tegra-Jetson-TX2-Allow-bootloader-to-configure.patch
Pablo Greco d6c4c4
# https://patchwork.kernel.org/patch/11171225/
Pablo Greco d6c4c4
Patch322: mfd-max77620-Do-not-allocate-IRQs-upfront.patch
Pablo Greco d6c4c4
# https://patchwork.ozlabs.org/patch/1170631/
Pablo Greco d6c4c4
Patch323: gpio-max77620-Use-correct-unit-for-debounce-times.patch
Pablo Greco d6c4c4
# https://www.spinics.net/lists/linux-tegra/msg44216.html
Pablo Greco d6c4c4
Patch324: arm64-tegra186-enable-USB-on-Jetson-TX2.patch
Pablo Greco d6c4c4
# https://patchwork.kernel.org/patch/11224177/
Pablo Greco d6c4c4
Patch325: arm64-usb-host-xhci-tegra-set-MODULE_FIRMWARE-for-tegra186.patch
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# 400 - IBM (ppc/s390x) patches
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# 500 - Temp fixes/CVEs etc
Pablo Greco d6c4c4
Patch500: PATCH-v2-selinux-allow-labeling-before-policy-is-loaded.patch
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# rhbz 1431375
Pablo Greco d6c4c4
Patch501: input-rmi4-remove-the-need-for-artifical-IRQ.patch
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# gcc9 fixes
Pablo Greco d6c4c4
Patch502: 0001-Drop-that-for-now.patch
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# https://bugzilla.redhat.com/show_bug.cgi?id=1701096
Pablo Greco d6c4c4
# Submitted upstream at https://lkml.org/lkml/2019/4/23/89
Pablo Greco d6c4c4
Patch503: KEYS-Make-use-of-platform-keyring-for-module-signature.patch
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# it seems CONFIG_OPTIMIZE_INLINING has been forced now and is causing issues on ARMv7
Pablo Greco d6c4c4
# https://lore.kernel.org/patchwork/patch/1132459/
Pablo Greco d6c4c4
# https://lkml.org/lkml/2019/8/29/1772
Pablo Greco d6c4c4
Patch504: ARM-fix-__get_user_check-in-case-uaccess_-calls-are-not-inlined.patch
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# CVE-2019-19054 rhbz 1775063 1775117
Pablo Greco d6c4c4
Patch523: media-rc-prevent-memory-leak-in-cx23888_ir_probe.patch
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# CVE-2019-18808 rhbz 1777418 1777421
Pablo Greco d6c4c4
Patch527: 0001-crypto-ccp-Release-all-allocated-memory-if-sha-type-.patch
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# https://gitlab.freedesktop.org/drm/intel/issues/673
Pablo Greco d6c4c4
Patch531: drm-i915-gt-Detect-if-we-miss-WaIdleLiteRestore.patch
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# ALSA code from v5.5 (Intel ASoC Sound Open Firmware driver support)
Pablo Greco d6c4c4
Patch600: alsa-5.5.patch
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# ALSA code from v5.6 (Intel ASoC Sound Open Firmware driver support)
Pablo Greco d6c4c4
Patch601: alsa-5.6.patch
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# This is already in 5.5 rhbz 1794369
Pablo Greco d6c4c4
Patch603: 0001-e1000e-Add-support-for-Comet-Lake.patch
Pablo Greco d6c4c4
Pablo Greco 81a88a
#CentOS
Pablo Greco 81a88a
Patch9999: 0001-Fix-mt7615.patch
Pablo Greco d6c4c4
# END OF PATCH DEFINITIONS
Pablo Greco d6c4c4
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
Pablo Greco d6c4c4
%description
Pablo Greco d6c4c4
The kernel meta package
Pablo Greco d6c4c4
Pablo Greco d6c4c4
#
Pablo Greco d6c4c4
# This macro does requires, provides, conflicts, obsoletes for a kernel package.
Pablo Greco d6c4c4
#	%%kernel_reqprovconf <subpackage>
Pablo Greco d6c4c4
# It uses any kernel_<subpackage>_conflicts and kernel_<subpackage>_obsoletes
Pablo Greco d6c4c4
# macros defined above.
Pablo Greco d6c4c4
#
Pablo Greco d6c4c4
%define kernel_reqprovconf \
Pablo Greco d6c4c4
Provides: kernel = %{rpmversion}-%{pkg_release}\
Pablo Greco d6c4c4
Provides: kernel-%{_target_cpu} = %{rpmversion}-%{pkg_release}%{?1:+%{1}}\
Pablo Greco d6c4c4
Provides: kernel-drm-nouveau = 16\
Pablo Greco d6c4c4
Provides: kernel-uname-r = %{KVERREL}%{?variant}%{?1:+%{1}}\
Pablo Greco d6c4c4
Requires(pre): %{kernel_prereq}\
Pablo Greco d6c4c4
Requires(pre): %{initrd_prereq}\
Pablo Greco d6c4c4
Requires(pre): linux-firmware >= 20150904-56.git6ebf5d57\
Pablo Greco d6c4c4
Requires(preun): systemd >= 200\
Pablo Greco d6c4c4
Conflicts: xfsprogs < 4.3.0-1\
Pablo Greco d6c4c4
Conflicts: xorg-x11-drv-vmmouse < 13.0.99\
Pablo Greco d6c4c4
%{expand:%%{?kernel%{?1:_%{1}}_conflicts:Conflicts: %%{kernel%{?1:_%{1}}_conflicts}}}\
Pablo Greco d6c4c4
%{expand:%%{?kernel%{?1:_%{1}}_obsoletes:Obsoletes: %%{kernel%{?1:_%{1}}_obsoletes}}}\
Pablo Greco d6c4c4
%{expand:%%{?kernel%{?1:_%{1}}_provides:Provides: %%{kernel%{?1:_%{1}}_provides}}}\
Pablo Greco d6c4c4
# We can't let RPM do the dependencies automatic because it'll then pick up\
Pablo Greco d6c4c4
# a correct but undesirable perl dependency from the module headers which\
Pablo Greco d6c4c4
# isn't required for the kernel proper to function\
Pablo Greco d6c4c4
AutoReq: no\
Pablo Greco d6c4c4
AutoProv: yes\
Pablo Greco d6c4c4
%{nil}
Pablo Greco d6c4c4
Pablo Greco d6c4c4
Pablo Greco d6c4c4
%package doc
Pablo Greco d6c4c4
Summary: Various documentation bits found in the kernel source
Pablo Greco d6c4c4
Group: Documentation
Pablo Greco d6c4c4
%description doc
Pablo Greco d6c4c4
This package contains documentation files from the kernel
Pablo Greco d6c4c4
source. Various bits of information about the Linux kernel and the
Pablo Greco d6c4c4
device drivers shipped with it are documented in these files.
Pablo Greco d6c4c4
Pablo Greco d6c4c4
You'll want to install this package if you need a reference to the
Pablo Greco d6c4c4
options that can be passed to Linux kernel modules at load time.
Pablo Greco d6c4c4
Pablo Greco d6c4c4
Pablo Greco d6c4c4
%package headers
Pablo Greco d6c4c4
Summary: Header files for the Linux kernel for use by glibc
Pablo Greco d6c4c4
Obsoletes: glibc-kernheaders < 3.0-46
Pablo Greco d6c4c4
Provides: glibc-kernheaders = 3.0-46
Pablo Greco d6c4c4
%if "0%{?variant}"
Pablo Greco d6c4c4
Obsoletes: kernel-headers < %{rpmversion}-%{pkg_release}
Pablo Greco d6c4c4
Provides: kernel-headers = %{rpmversion}-%{pkg_release}
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
%description headers
Pablo Greco d6c4c4
Kernel-headers includes the C header files that specify the interface
Pablo Greco d6c4c4
between the Linux kernel and userspace libraries and programs.  The
Pablo Greco d6c4c4
header files define structures and constants that are needed for
Pablo Greco d6c4c4
building most standard programs and are also needed for rebuilding the
Pablo Greco d6c4c4
glibc package.
Pablo Greco d6c4c4
Pablo Greco d6c4c4
%package cross-headers
Pablo Greco d6c4c4
Summary: Header files for the Linux kernel for use by cross-glibc
Pablo Greco d6c4c4
%description cross-headers
Pablo Greco d6c4c4
Kernel-cross-headers includes the C header files that specify the interface
Pablo Greco d6c4c4
between the Linux kernel and userspace libraries and programs.  The
Pablo Greco d6c4c4
header files define structures and constants that are needed for
Pablo Greco d6c4c4
building most standard programs and are also needed for rebuilding the
Pablo Greco d6c4c4
cross-glibc package.
Pablo Greco d6c4c4
Pablo Greco d6c4c4
Pablo Greco d6c4c4
%package debuginfo-common-%{_target_cpu}
Pablo Greco d6c4c4
Summary: Kernel source files used by %{name}-debuginfo packages
Pablo Greco d6c4c4
Provides: installonlypkg(kernel)
Pablo Greco d6c4c4
%description debuginfo-common-%{_target_cpu}
Pablo Greco d6c4c4
This package is required by %{name}-debuginfo subpackages.
Pablo Greco d6c4c4
It provides the kernel source files common to all builds.
Pablo Greco d6c4c4
Pablo Greco 11afb4
%if %{with_perf}
Pablo Greco 11afb4
%package -n perf
Pablo Greco 11afb4
Summary: Performance monitoring for the Linux kernel
Pablo Greco 11afb4
License: GPLv2
Pablo Greco 11afb4
%description -n perf
Pablo Greco 11afb4
This package contains the perf tool, which enables performance monitoring
Pablo Greco 11afb4
of the Linux kernel.
Pablo Greco 11afb4
Pablo Greco 11afb4
%package -n perf-debuginfo
Pablo Greco 11afb4
Summary: Debug information for package perf
Pablo Greco 11afb4
Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release}
Pablo Greco 11afb4
AutoReqProv: no
Pablo Greco 11afb4
%description -n perf-debuginfo
Pablo Greco 11afb4
This package provides debug information for the perf package.
Pablo Greco 11afb4
Pablo Greco 11afb4
# Note that this pattern only works right to match the .build-id
Pablo Greco 11afb4
# symlinks because of the trailing nonmatching alternation and
Pablo Greco 11afb4
# the leading .*, because of find-debuginfo.sh's buggy handling
Pablo Greco 11afb4
# of matching the pattern against the symlinks file.
Pablo Greco 11afb4
%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{_bindir}/perf(\.debug)?|.*%%{_libexecdir}/perf-core/.*|.*%%{_libdir}/traceevent/plugins/.*|.*%%{_libdir}/libperf-jvmti.so(\.debug)?|XXX' -o perf-debuginfo.list}
Pablo Greco 11afb4
Pablo Greco 11afb4
%package -n python3-perf
Pablo Greco 11afb4
Summary: Python bindings for apps which will manipulate perf events
Pablo Greco 11afb4
%description -n python3-perf
Pablo Greco 11afb4
The python3-perf package contains a module that permits applications
Pablo Greco 11afb4
written in the Python programming language to use the interface
Pablo Greco 11afb4
to manipulate perf events.
Pablo Greco 11afb4
Pablo Greco 11afb4
%package -n python3-perf-debuginfo
Pablo Greco 11afb4
Summary: Debug information for package perf python bindings
Pablo Greco 11afb4
Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release}
Pablo Greco 11afb4
AutoReqProv: no
Pablo Greco 11afb4
%description -n python3-perf-debuginfo
Pablo Greco 11afb4
This package provides debug information for the perf python bindings.
Pablo Greco 11afb4
Pablo Greco 11afb4
# the python_sitearch macro should already be defined from above
Pablo Greco 11afb4
%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{python3_sitearch}/perf.*so(\.debug)?|XXX' -o python3-perf-debuginfo.list}
Pablo Greco 11afb4
Pablo Greco 11afb4
Pablo Greco 11afb4
%endif # with_perf
Pablo Greco 11afb4
Pablo Greco 11afb4
%if %{with_tools}
Pablo Greco 11afb4
%package -n kernel-tools
Pablo Greco 11afb4
Summary: Assortment of tools for the Linux kernel
Pablo Greco 11afb4
License: GPLv2
Pablo Greco 11afb4
%ifarch %{cpupowerarchs}
Pablo Greco 11afb4
Provides:  cpupowerutils = 1:009-0.6.p1
Pablo Greco 11afb4
Obsoletes: cpupowerutils < 1:009-0.6.p1
Pablo Greco 11afb4
Provides:  cpufreq-utils = 1:009-0.6.p1
Pablo Greco 11afb4
Provides:  cpufrequtils = 1:009-0.6.p1
Pablo Greco 11afb4
Obsoletes: cpufreq-utils < 1:009-0.6.p1
Pablo Greco 11afb4
Obsoletes: cpufrequtils < 1:009-0.6.p1
Pablo Greco 11afb4
Obsoletes: cpuspeed < 1:1.5-16
Pablo Greco 11afb4
Requires: kernel-tools-libs = %{version}-%{release}
Pablo Greco 11afb4
%endif
Pablo Greco 11afb4
%define __requires_exclude ^%{_bindir}/python
Pablo Greco 11afb4
%description -n kernel-tools
Pablo Greco 11afb4
This package contains the tools/ directory from the kernel source
Pablo Greco 11afb4
and the supporting documentation.
Pablo Greco 11afb4
Pablo Greco 11afb4
%package -n kernel-tools-libs
Pablo Greco 11afb4
Summary: Libraries for the kernels-tools
Pablo Greco 11afb4
License: GPLv2
Pablo Greco 11afb4
%description -n kernel-tools-libs
Pablo Greco 11afb4
This package contains the libraries built from the tools/ directory
Pablo Greco 11afb4
from the kernel source.
Pablo Greco 11afb4
Pablo Greco 11afb4
%package -n kernel-tools-libs-devel
Pablo Greco 11afb4
Summary: Assortment of tools for the Linux kernel
Pablo Greco 11afb4
License: GPLv2
Pablo Greco 11afb4
Requires: kernel-tools = %{version}-%{release}
Pablo Greco 11afb4
%ifarch %{cpupowerarchs}
Pablo Greco 11afb4
Provides:  cpupowerutils-devel = 1:009-0.6.p1
Pablo Greco 11afb4
Obsoletes: cpupowerutils-devel < 1:009-0.6.p1
Pablo Greco 11afb4
%endif
Pablo Greco 11afb4
Requires: kernel-tools-libs = %{version}-%{release}
Pablo Greco 11afb4
Provides: kernel-tools-devel
Pablo Greco 11afb4
%description -n kernel-tools-libs-devel
Pablo Greco 11afb4
This package contains the development files for the tools/ directory from
Pablo Greco 11afb4
the kernel source.
Pablo Greco 11afb4
Pablo Greco 11afb4
%package -n kernel-tools-debuginfo
Pablo Greco 11afb4
Summary: Debug information for package kernel-tools
Pablo Greco 11afb4
Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release}
Pablo Greco 11afb4
AutoReqProv: no
Pablo Greco 11afb4
%description -n kernel-tools-debuginfo
Pablo Greco 11afb4
This package provides debug information for package kernel-tools.
Pablo Greco 11afb4
Pablo Greco 11afb4
# Note that this pattern only works right to match the .build-id
Pablo Greco 11afb4
# symlinks because of the trailing nonmatching alternation and
Pablo Greco 11afb4
# the leading .*, because of find-debuginfo.sh's buggy handling
Pablo Greco 11afb4
# of matching the pattern against the symlinks file.
Pablo Greco 11afb4
%{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}/iio_event_monitor(\.debug)?|.*%%{_bindir}/iio_generic_buffer(\.debug)?|.*%%{_bindir}/lsiio(\.debug)?|XXX' -o kernel-tools-debuginfo.list}
Pablo Greco 11afb4
Pablo Greco 11afb4
%endif # with_tools
Pablo Greco 11afb4
Pablo Greco 11afb4
%if %{with_bpftool}
Pablo Greco 11afb4
Pablo Greco 11afb4
%package -n bpftool
Pablo Greco 11afb4
Summary: Inspection and simple manipulation of eBPF programs and maps
Pablo Greco 11afb4
License: GPLv2
Pablo Greco 11afb4
%description -n bpftool
Pablo Greco 11afb4
This package contains the bpftool, which allows inspection and simple
Pablo Greco 11afb4
manipulation of eBPF programs and maps.
Pablo Greco 11afb4
Pablo Greco 11afb4
%package -n bpftool-debuginfo
Pablo Greco 11afb4
Summary: Debug information for package bpftool
Pablo Greco 11afb4
Group: Development/Debug
Pablo Greco 11afb4
Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release}
Pablo Greco 11afb4
AutoReqProv: no
Pablo Greco 11afb4
%description -n bpftool-debuginfo
Pablo Greco 11afb4
This package provides debug information for the bpftool package.
Pablo Greco 11afb4
Pablo Greco 11afb4
%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{_sbindir}/bpftool(\.debug)?|XXX' -o bpftool-debuginfo.list}
Pablo Greco 11afb4
Pablo Greco 11afb4
%endif # with_bpftool
Pablo Greco 11afb4
Pablo Greco d6c4c4
%if %{with_selftests}
Pablo Greco d6c4c4
%package selftests-internal
Pablo Greco d6c4c4
Summary: Kernel samples and selftests
Pablo Greco d6c4c4
License: GPLv2
Pablo Greco d6c4c4
Requires: binutils, bpftool, iproute-tc, nmap-ncat
Pablo Greco d6c4c4
Requires: kernel-modules-internal = %{version}-%{release}
Pablo Greco d6c4c4
%description selftests-internal
Pablo Greco d6c4c4
Kernel sample programs and selftests.
Pablo Greco d6c4c4
%{nil}
Pablo Greco d6c4c4
# Note that this pattern only works right to match the .build-id
Pablo Greco d6c4c4
# symlinks because of the trailing nonmatching alternation and
Pablo Greco d6c4c4
# the leading .*, because of find-debuginfo.sh's buggy handling
Pablo Greco d6c4c4
# of matching the pattern against the symlinks file.
Pablo Greco d6c4c4
%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{_libexecdir}/(ksamples|kselftests)/.*|XXX' -o selftests-debuginfo.list}
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
%if %{with_gcov}
Pablo Greco d6c4c4
%package gcov
Pablo Greco d6c4c4
Summary: gcov graph and source files for coverage data collection.
Pablo Greco d6c4c4
%description gcov
Pablo Greco d6c4c4
kernel-gcov includes the gcov graph and source files for gcov coverage collection.
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
%package -n kernel-abi-whitelists
Pablo Greco d6c4c4
Summary: The Red Hat Enterprise Linux kernel ABI symbol whitelists
Pablo Greco d6c4c4
AutoReqProv: no
Pablo Greco d6c4c4
%description -n kernel-abi-whitelists
Pablo Greco d6c4c4
The kABI package contains information pertaining to the Red Hat Enterprise
Pablo Greco d6c4c4
Linux kernel ABI, including lists of kernel symbols that are needed by
Pablo Greco d6c4c4
external Linux kernel modules, and a yum plugin to aid enforcement.
Pablo Greco d6c4c4
Pablo Greco d6c4c4
%if %{with_kabidw_base}
Pablo Greco d6c4c4
%package kabidw-base
Pablo Greco d6c4c4
Summary: The baseline dataset for kABI verification using DWARF data
Pablo Greco d6c4c4
Group: System Environment/Kernel
Pablo Greco d6c4c4
AutoReqProv: no
Pablo Greco d6c4c4
%description kabidw-base
Pablo Greco d6c4c4
The kabidw-base package contains data describing the current ABI of the Red Hat
Pablo Greco d6c4c4
Enterprise Linux kernel, suitable for the kabi-dw tool.
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
#
Pablo Greco d6c4c4
# This macro creates a kernel-<subpackage>-debuginfo package.
Pablo Greco d6c4c4
#	%%kernel_debuginfo_package <subpackage>
Pablo Greco d6c4c4
#
Pablo Greco d6c4c4
# Explanation of the find_debuginfo_opts: We build multiple kernels (debug
Pablo Greco d6c4c4
# pae etc.) so the regex filters those kernels appropriately. We also
Pablo Greco d6c4c4
# have to package several binaries as part of kernel-devel but getting
Pablo Greco d6c4c4
# unique build-ids is tricky for these userspace binaries. We don't really
Pablo Greco d6c4c4
# care about debugging those so we just filter those out and remove it.
Pablo Greco d6c4c4
%define kernel_debuginfo_package() \
Pablo Greco d6c4c4
%package %{?1:%{1}-}debuginfo\
Pablo Greco d6c4c4
Summary: Debug information for package %{name}%{?1:-%{1}}\
Pablo Greco d6c4c4
Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release}\
Pablo Greco d6c4c4
Provides: %{name}%{?1:-%{1}}-debuginfo-%{_target_cpu} = %{version}-%{release}\
Pablo Greco d6c4c4
Provides: installonlypkg(kernel)\
Pablo Greco d6c4c4
AutoReqProv: no\
Pablo Greco d6c4c4
%description %{?1:%{1}-}debuginfo\
Pablo Greco d6c4c4
This package provides debug information for package %{name}%{?1:-%{1}}.\
Pablo Greco d6c4c4
This is required to use SystemTap with %{name}%{?1:-%{1}}-%{KVERREL}.\
Pablo Greco d6c4c4
%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*\/usr\/src\/kernels/.*|XXX' -o ignored-debuginfo.list -p '/.*/%%{KVERREL_RE}%{?1:[+]%{1}}/.*|/.*%%{KVERREL_RE}%{?1:\+%{1}}(\.debug)?' -o debuginfo%{?1}.list}\
Pablo Greco d6c4c4
Pablo Greco d6c4c4
Pablo Greco d6c4c4
%{nil}
Pablo Greco d6c4c4
Pablo Greco d6c4c4
#
Pablo Greco d6c4c4
# This macro creates a kernel-<subpackage>-devel package.
Pablo Greco d6c4c4
#	%%kernel_devel_package <subpackage> <pretty-name>
Pablo Greco d6c4c4
#
Pablo Greco d6c4c4
%define kernel_devel_package() \
Pablo Greco d6c4c4
%package %{?1:%{1}-}devel\
Pablo Greco d6c4c4
Summary: Development package for building kernel modules to match the %{?2:%{2} }kernel\
Pablo Greco d6c4c4
Provides: kernel%{?1:-%{1}}-devel-%{_target_cpu} = %{version}-%{release}\
Pablo Greco d6c4c4
Provides: kernel-devel-%{_target_cpu} = %{version}-%{release}%{?1:+%{1}}\
Pablo Greco d6c4c4
Provides: kernel-devel-uname-r = %{KVERREL}%{?variant}%{?1:+%{1}}\
Pablo Greco d6c4c4
Provides: installonlypkg(kernel)\
Pablo Greco d6c4c4
AutoReqProv: no\
Pablo Greco d6c4c4
Requires(pre): findutils\
Pablo Greco d6c4c4
Requires: findutils\
Pablo Greco d6c4c4
Requires: perl-interpreter\
Pablo Greco d6c4c4
%description %{?1:%{1}-}devel\
Pablo Greco d6c4c4
This package provides kernel headers and makefiles sufficient to build modules\
Pablo Greco d6c4c4
against the %{?2:%{2} }kernel package.\
Pablo Greco d6c4c4
%{nil}
Pablo Greco d6c4c4
Pablo Greco d6c4c4
#
Pablo Greco d6c4c4
# kernel-<variant>-ipaclones-internal package
Pablo Greco d6c4c4
#
Pablo Greco d6c4c4
%define kernel_ipaclones_package() \
Pablo Greco d6c4c4
%package %{?1:%{1}-}ipaclones-internal\
Pablo Greco d6c4c4
Summary: *.ipa-clones files generated by -fdump-ipa-clones for kernel%{?1:-%{1}}\
Pablo Greco d6c4c4
Group: System Environment/Kernel\
Pablo Greco d6c4c4
AutoReqProv: no\
Pablo Greco d6c4c4
%description %{?1:%{1}-}ipaclones-internal\
Pablo Greco d6c4c4
This package provides *.ipa-clones files.\
Pablo Greco d6c4c4
%{nil}
Pablo Greco d6c4c4
Pablo Greco d6c4c4
#
Pablo Greco d6c4c4
# This macro creates a kernel-<subpackage>-modules-internal package.
Pablo Greco d6c4c4
#	%%kernel_modules_internal_package <subpackage> <pretty-name>
Pablo Greco d6c4c4
#
Pablo Greco d6c4c4
%define kernel_modules_internal_package() \
Pablo Greco d6c4c4
%package %{?1:%{1}-}modules-internal\
Pablo Greco d6c4c4
Summary: Extra kernel modules to match the %{?2:%{2} }kernel\
Pablo Greco d6c4c4
Group: System Environment/Kernel\
Pablo Greco d6c4c4
Provides: kernel%{?1:-%{1}}-modules-internal-%{_target_cpu} = %{version}-%{release}\
Pablo Greco d6c4c4
Provides: kernel%{?1:-%{1}}-modules-internal-%{_target_cpu} = %{version}-%{release}%{?1:+%{1}}\
Pablo Greco d6c4c4
Provides: kernel%{?1:-%{1}}-modules-internal = %{version}-%{release}%{?1:+%{1}}\
Pablo Greco d6c4c4
Provides: installonlypkg(kernel-module)\
Pablo Greco d6c4c4
Provides: kernel%{?1:-%{1}}-modules-internal-uname-r = %{KVERREL}%{?variant}%{?1:+%{1}}\
Pablo Greco d6c4c4
Requires: kernel-uname-r = %{KVERREL}%{?variant}%{?1:+%{1}}\
Pablo Greco d6c4c4
Requires: kernel%{?1:-%{1}}-modules-uname-r = %{KVERREL}%{?variant}%{?1:+%{1}}\
Pablo Greco d6c4c4
AutoReq: no\
Pablo Greco d6c4c4
AutoProv: yes\
Pablo Greco d6c4c4
%description %{?1:%{1}-}modules-internal\
Pablo Greco d6c4c4
This package provides kernel modules for the %{?2:%{2} }kernel package for Red Hat internal usage.\
Pablo Greco d6c4c4
%{nil}
Pablo Greco d6c4c4
Pablo Greco d6c4c4
#
Pablo Greco d6c4c4
# This macro creates a kernel-<subpackage>-modules-extra package.
Pablo Greco d6c4c4
#	%%kernel_modules_extra_package <subpackage> <pretty-name>
Pablo Greco d6c4c4
#
Pablo Greco d6c4c4
%define kernel_modules_extra_package() \
Pablo Greco d6c4c4
%package %{?1:%{1}-}modules-extra\
Pablo Greco d6c4c4
Summary: Extra kernel modules to match the %{?2:%{2} }kernel\
Pablo Greco d6c4c4
Provides: kernel%{?1:-%{1}}-modules-extra-%{_target_cpu} = %{version}-%{release}\
Pablo Greco d6c4c4
Provides: kernel%{?1:-%{1}}-modules-extra-%{_target_cpu} = %{version}-%{release}%{?1:+%{1}}\
Pablo Greco d6c4c4
Provides: kernel%{?1:-%{1}}-modules-extra = %{version}-%{release}%{?1:+%{1}}\
Pablo Greco d6c4c4
Provides: installonlypkg(kernel-module)\
Pablo Greco d6c4c4
Provides: kernel%{?1:-%{1}}-modules-extra-uname-r = %{KVERREL}%{?variant}%{?1:+%{1}}\
Pablo Greco d6c4c4
Requires: kernel-uname-r = %{KVERREL}%{?variant}%{?1:+%{1}}\
Pablo Greco d6c4c4
Requires: kernel%{?1:-%{1}}-modules-uname-r = %{KVERREL}%{?variant}%{?1:+%{1}}\
Pablo Greco d6c4c4
AutoReq: no\
Pablo Greco d6c4c4
AutoProv: yes\
Pablo Greco d6c4c4
%description %{?1:%{1}-}modules-extra\
Pablo Greco d6c4c4
This package provides less commonly used kernel modules for the %{?2:%{2} }kernel package.\
Pablo Greco d6c4c4
%{nil}
Pablo Greco d6c4c4
Pablo Greco d6c4c4
#
Pablo Greco d6c4c4
# This macro creates a kernel-<subpackage>-modules package.
Pablo Greco d6c4c4
#	%%kernel_modules_package <subpackage> <pretty-name>
Pablo Greco d6c4c4
#
Pablo Greco d6c4c4
%define kernel_modules_package() \
Pablo Greco d6c4c4
%package %{?1:%{1}-}modules\
Pablo Greco d6c4c4
Summary: kernel modules to match the %{?2:%{2}-}core kernel\
Pablo Greco d6c4c4
Provides: kernel%{?1:-%{1}}-modules-%{_target_cpu} = %{version}-%{release}\
Pablo Greco d6c4c4
Provides: kernel-modules-%{_target_cpu} = %{version}-%{release}%{?1:+%{1}}\
Pablo Greco d6c4c4
Provides: kernel-modules = %{version}-%{release}%{?1:+%{1}}\
Pablo Greco d6c4c4
Provides: installonlypkg(kernel-module)\
Pablo Greco d6c4c4
Provides: kernel%{?1:-%{1}}-modules-uname-r = %{KVERREL}%{?variant}%{?1:+%{1}}\
Pablo Greco d6c4c4
Requires: kernel-uname-r = %{KVERREL}%{?variant}%{?1:+%{1}}\
Pablo Greco d6c4c4
AutoReq: no\
Pablo Greco d6c4c4
AutoProv: yes\
Pablo Greco d6c4c4
%description %{?1:%{1}-}modules\
Pablo Greco d6c4c4
This package provides commonly used kernel modules for the %{?2:%{2}-}core kernel package.\
Pablo Greco d6c4c4
%{nil}
Pablo Greco d6c4c4
Pablo Greco d6c4c4
#
Pablo Greco d6c4c4
# this macro creates a kernel-<subpackage> meta package.
Pablo Greco d6c4c4
#	%%kernel_meta_package <subpackage>
Pablo Greco d6c4c4
#
Pablo Greco d6c4c4
%define kernel_meta_package() \
Pablo Greco d6c4c4
%package %{1}\
Pablo Greco d6c4c4
summary: kernel meta-package for the %{1} kernel\
Pablo Greco d6c4c4
Requires: kernel-%{1}-core-uname-r = %{KVERREL}%{?variant}+%{1}\
Pablo Greco d6c4c4
Requires: kernel-%{1}-modules-uname-r = %{KVERREL}%{?variant}+%{1}\
Pablo Greco d6c4c4
Provides: installonlypkg(kernel)\
Pablo Greco d6c4c4
%description %{1}\
Pablo Greco d6c4c4
The meta-package for the %{1} kernel\
Pablo Greco d6c4c4
%{nil}
Pablo Greco d6c4c4
Pablo Greco d6c4c4
#
Pablo Greco d6c4c4
# This macro creates a kernel-<subpackage> and its -devel and -debuginfo too.
Pablo Greco d6c4c4
#	%%define variant_summary The Linux kernel compiled for <configuration>
Pablo Greco d6c4c4
#	%%kernel_variant_package [-n <pretty-name>] <subpackage>
Pablo Greco d6c4c4
#
Pablo Greco d6c4c4
%define kernel_variant_package(n:) \
Pablo Greco d6c4c4
%package %{?1:%{1}-}core\
Pablo Greco d6c4c4
Summary: %{variant_summary}\
Pablo Greco d6c4c4
Provides: kernel-%{?1:%{1}-}core-uname-r = %{KVERREL}%{?variant}%{?1:+%{1}}\
Pablo Greco d6c4c4
Provides: installonlypkg(kernel)\
Pablo Greco d6c4c4
%ifarch ppc64le\
Pablo Greco d6c4c4
Obsoletes: kernel-bootwrapper\
Pablo Greco d6c4c4
%endif\
Pablo Greco d6c4c4
%{expand:%%kernel_reqprovconf}\
Pablo Greco d6c4c4
%if %{?1:1} %{!?1:0} \
Pablo Greco d6c4c4
%{expand:%%kernel_meta_package %{?1:%{1}}}\
Pablo Greco d6c4c4
%endif\
Pablo Greco d6c4c4
%{expand:%%kernel_devel_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}}}\
Pablo Greco d6c4c4
%{expand:%%kernel_modules_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}}}\
Pablo Greco d6c4c4
%{expand:%%kernel_modules_extra_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}}}\
Pablo Greco d6c4c4
%{expand:%%kernel_modules_internal_package %{?1:%{1}} %{!?{-n}:%{1}}%{?{-n}:%{-n*}}}\
Pablo Greco d6c4c4
%{expand:%%kernel_debuginfo_package %{?1:%{1}}}\
Pablo Greco d6c4c4
%{nil}
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# Now, each variant package.
Pablo Greco d6c4c4
Pablo Greco d6c4c4
%if %{with_pae}
Pablo Greco d6c4c4
%define variant_summary The Linux kernel compiled for Cortex-A15
Pablo Greco d6c4c4
%kernel_variant_package lpae
Pablo Greco d6c4c4
%description lpae-core
Pablo Greco d6c4c4
This package includes a version of the Linux kernel with support for
Pablo Greco d6c4c4
Cortex-A15 devices with LPAE and HW virtualisation support
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
%if %{with_zfcpdump}
Pablo Greco d6c4c4
%define variant_summary The Linux kernel compiled for zfcpdump usage
Pablo Greco d6c4c4
%kernel_variant_package zfcpdump
Pablo Greco d6c4c4
%description zfcpdump-core
Pablo Greco d6c4c4
The kernel package contains the Linux kernel (vmlinuz) for use by the
Pablo Greco d6c4c4
zfcpdump infrastructure.
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
%define variant_summary The Linux kernel compiled with extra debugging enabled
Pablo Greco d6c4c4
%kernel_variant_package debug
Pablo Greco d6c4c4
%description debug-core
Pablo Greco d6c4c4
The kernel package contains the Linux kernel (vmlinuz), the core of any
Pablo Greco d6c4c4
Linux operating system.  The kernel handles the basic functions
Pablo Greco d6c4c4
of the operating system:  memory allocation, process allocation, device
Pablo Greco d6c4c4
input and output, etc.
Pablo Greco d6c4c4
Pablo Greco d6c4c4
This variant of the kernel has numerous debugging options enabled.
Pablo Greco d6c4c4
It should only be installed when trying to gather additional information
Pablo Greco d6c4c4
on kernel bugs, as some of these options impact performance noticably.
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# And finally the main -core package
Pablo Greco d6c4c4
Pablo Greco d6c4c4
%define variant_summary The Linux kernel
Pablo Greco d6c4c4
%kernel_variant_package
Pablo Greco d6c4c4
%description core
Pablo Greco d6c4c4
The kernel package contains the Linux kernel (vmlinuz), the core of any
Pablo Greco d6c4c4
Linux operating system.  The kernel handles the basic functions
Pablo Greco d6c4c4
of the operating system: memory allocation, process allocation, device
Pablo Greco d6c4c4
input and output, etc.
Pablo Greco d6c4c4
Pablo Greco d6c4c4
%if %{with_ipaclones}
Pablo Greco d6c4c4
%kernel_ipaclones_package
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
%prep
Pablo Greco d6c4c4
# do a few sanity-checks for --with *only builds
Pablo Greco d6c4c4
%if %{with_baseonly}
Pablo Greco d6c4c4
%if !%{with_up}%{with_pae}
Pablo Greco d6c4c4
echo "Cannot build --with baseonly, up build is disabled"
Pablo Greco d6c4c4
exit 1
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
%if "%{baserelease}" == "0"
Pablo Greco d6c4c4
echo "baserelease must be greater than zero"
Pablo Greco d6c4c4
exit 1
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# more sanity checking; do it quietly
Pablo Greco d6c4c4
if [ "%{patches}" != "%%{patches}" ] ; then
Pablo Greco d6c4c4
  for patch in %{patches} ; do
Pablo Greco d6c4c4
    if [ ! -f $patch ] ; then
Pablo Greco d6c4c4
      echo "ERROR: Patch  ${patch##/*/}  listed in specfile but is missing"
Pablo Greco d6c4c4
      exit 1
Pablo Greco d6c4c4
    fi
Pablo Greco d6c4c4
  done
Pablo Greco d6c4c4
fi 2>/dev/null
Pablo Greco d6c4c4
Pablo Greco d6c4c4
patch_command='patch -p1 -F1 -s'
Pablo Greco d6c4c4
ApplyPatch()
Pablo Greco d6c4c4
{
Pablo Greco d6c4c4
  local patch=$1
Pablo Greco d6c4c4
  shift
Pablo Greco d6c4c4
  if [ ! -f $RPM_SOURCE_DIR/$patch ]; then
Pablo Greco d6c4c4
    exit 1
Pablo Greco d6c4c4
  fi
Pablo Greco d6c4c4
  if ! grep -E "^Patch[0-9]+: $patch\$" %{_specdir}/${RPM_PACKAGE_NAME%%%%%{?variant}}.spec ; then
Pablo Greco d6c4c4
    if [ "${patch:0:8}" != "patch-5." ] ; then
Pablo Greco d6c4c4
      echo "ERROR: Patch  $patch  not listed as a source patch in specfile"
Pablo Greco d6c4c4
      exit 1
Pablo Greco d6c4c4
    fi
Pablo Greco d6c4c4
  fi 2>/dev/null
Pablo Greco d6c4c4
  case "$patch" in
Pablo Greco d6c4c4
  *.bz2) bunzip2 < "$RPM_SOURCE_DIR/$patch" | $patch_command ${1+"$@"} ;;
Pablo Greco d6c4c4
  *.gz)  gunzip  < "$RPM_SOURCE_DIR/$patch" | $patch_command ${1+"$@"} ;;
Pablo Greco d6c4c4
  *.xz)  unxz    < "$RPM_SOURCE_DIR/$patch" | $patch_command ${1+"$@"} ;;
Pablo Greco d6c4c4
  *) $patch_command ${1+"$@"} < "$RPM_SOURCE_DIR/$patch" ;;
Pablo Greco d6c4c4
  esac
Pablo Greco d6c4c4
}
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# don't apply patch if it's empty
Pablo Greco d6c4c4
ApplyOptionalPatch()
Pablo Greco d6c4c4
{
Pablo Greco d6c4c4
  local patch=$1
Pablo Greco d6c4c4
  shift
Pablo Greco d6c4c4
  if [ ! -f $RPM_SOURCE_DIR/$patch ]; then
Pablo Greco d6c4c4
    exit 1
Pablo Greco d6c4c4
  fi
Pablo Greco d6c4c4
  local C=$(wc -l $RPM_SOURCE_DIR/$patch | awk '{print $1}')
Pablo Greco d6c4c4
  if [ "$C" -gt 9 ]; then
Pablo Greco d6c4c4
    ApplyPatch $patch ${1+"$@"}
Pablo Greco d6c4c4
  fi
Pablo Greco d6c4c4
}
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# First we unpack the kernel tarball.
Pablo Greco d6c4c4
# If this isn't the first make prep, we use links to the existing clean tarball
Pablo Greco d6c4c4
# which speeds things up quite a bit.
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# Update to latest upstream.
Pablo Greco d6c4c4
%if 0%{?released_kernel}
Pablo Greco d6c4c4
%define vanillaversion 5.%{base_sublevel}
Pablo Greco d6c4c4
# non-released_kernel case
Pablo Greco d6c4c4
%else
Pablo Greco d6c4c4
%if 0%{?rcrev}
Pablo Greco d6c4c4
%define vanillaversion 5.%{upstream_sublevel}-rc%{rcrev}
Pablo Greco d6c4c4
%if 0%{?gitrev}
Pablo Greco d6c4c4
%define vanillaversion 5.%{upstream_sublevel}-rc%{rcrev}-git%{gitrev}
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
%else
Pablo Greco d6c4c4
# pre-{base_sublevel+1}-rc1 case
Pablo Greco d6c4c4
%if 0%{?gitrev}
Pablo Greco d6c4c4
%define vanillaversion 5.%{base_sublevel}-git%{gitrev}
Pablo Greco d6c4c4
%else
Pablo Greco d6c4c4
%define vanillaversion 5.%{base_sublevel}
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# %%{vanillaversion} : the full version name, e.g. 2.6.35-rc6-git3
Pablo Greco d6c4c4
# %%{kversion}       : the base version, e.g. 2.6.34
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# Use kernel-%%{kversion}%%{?dist} as the top-level directory name
Pablo Greco d6c4c4
# so we can prep different trees within a single git directory.
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# Build a list of the other top-level kernel tree directories.
Pablo Greco d6c4c4
# This will be used to hardlink identical vanilla subdirs.
Pablo Greco d6c4c4
sharedirs=$(find "$PWD" -maxdepth 1 -type d -name 'kernel-5.*' \
Pablo Greco d6c4c4
            | grep -x -v "$PWD"/kernel-%{kversion}%{?dist}) ||:
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# Delete all old stale trees.
Pablo Greco d6c4c4
if [ -d kernel-%{kversion}%{?dist} ]; then
Pablo Greco d6c4c4
  cd kernel-%{kversion}%{?dist}
Pablo Greco d6c4c4
  for i in linux-*
Pablo Greco d6c4c4
  do
Pablo Greco d6c4c4
     if [ -d $i ]; then
Pablo Greco d6c4c4
       # Just in case we ctrl-c'd a prep already
Pablo Greco d6c4c4
       rm -rf deleteme.%{_target_cpu}
Pablo Greco d6c4c4
       # Move away the stale away, and delete in background.
Pablo Greco d6c4c4
       mv $i deleteme-$i
Pablo Greco d6c4c4
       rm -rf deleteme* &
Pablo Greco d6c4c4
     fi
Pablo Greco d6c4c4
  done
Pablo Greco d6c4c4
  cd ..
Pablo Greco d6c4c4
fi
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# Generate new tree
Pablo Greco d6c4c4
if [ ! -d kernel-%{kversion}%{?dist}/vanilla-%{vanillaversion} ]; then
Pablo Greco d6c4c4
Pablo Greco d6c4c4
  if [ -d kernel-%{kversion}%{?dist}/vanilla-%{kversion} ]; then
Pablo Greco d6c4c4
Pablo Greco d6c4c4
    # The base vanilla version already exists.
Pablo Greco d6c4c4
    cd kernel-%{kversion}%{?dist}
Pablo Greco d6c4c4
Pablo Greco d6c4c4
    # Any vanilla-* directories other than the base one are stale.
Pablo Greco d6c4c4
    for dir in vanilla-*; do
Pablo Greco d6c4c4
      [ "$dir" = vanilla-%{kversion} ] || rm -rf $dir &
Pablo Greco d6c4c4
    done
Pablo Greco d6c4c4
Pablo Greco d6c4c4
  else
Pablo Greco d6c4c4
Pablo Greco d6c4c4
    rm -f pax_global_header
Pablo Greco d6c4c4
    # Look for an identical base vanilla dir that can be hardlinked.
Pablo Greco d6c4c4
    for sharedir in $sharedirs ; do
Pablo Greco d6c4c4
      if [[ ! -z $sharedir  &&  -d $sharedir/vanilla-%{kversion} ]] ; then
Pablo Greco d6c4c4
        break
Pablo Greco d6c4c4
      fi
Pablo Greco d6c4c4
    done
Pablo Greco d6c4c4
    if [[ ! -z $sharedir  &&  -d $sharedir/vanilla-%{kversion} ]] ; then
Pablo Greco d6c4c4
%setup -q -n kernel-%{kversion}%{?dist} -c -T
Pablo Greco d6c4c4
      cp -al $sharedir/vanilla-%{kversion} .
Pablo Greco d6c4c4
    else
Pablo Greco d6c4c4
%setup -q -n kernel-%{kversion}%{?dist} -c
Pablo Greco d6c4c4
      mv linux-%{kversion} vanilla-%{kversion}
Pablo Greco d6c4c4
    fi
Pablo Greco d6c4c4
Pablo Greco d6c4c4
  fi
Pablo Greco d6c4c4
Pablo Greco d6c4c4
%if "%{kversion}" != "%{vanillaversion}"
Pablo Greco d6c4c4
Pablo Greco d6c4c4
  for sharedir in $sharedirs ; do
Pablo Greco d6c4c4
    if [[ ! -z $sharedir  &&  -d $sharedir/vanilla-%{vanillaversion} ]] ; then
Pablo Greco d6c4c4
      break
Pablo Greco d6c4c4
    fi
Pablo Greco d6c4c4
  done
Pablo Greco d6c4c4
  if [[ ! -z $sharedir  &&  -d $sharedir/vanilla-%{vanillaversion} ]] ; then
Pablo Greco d6c4c4
Pablo Greco d6c4c4
    cp -al $sharedir/vanilla-%{vanillaversion} .
Pablo Greco d6c4c4
Pablo Greco d6c4c4
  else
Pablo Greco d6c4c4
Pablo Greco d6c4c4
    # Need to apply patches to the base vanilla version.
Pablo Greco d6c4c4
    cp -al vanilla-%{kversion} vanilla-%{vanillaversion}
Pablo Greco d6c4c4
    cd vanilla-%{vanillaversion}
Pablo Greco d6c4c4
Pablo Greco d6c4c4
cp %{SOURCE12} .
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# Update vanilla to the latest upstream.
Pablo Greco d6c4c4
# (non-released_kernel case only)
Pablo Greco d6c4c4
%if 0%{?rcrev}
Pablo Greco d6c4c4
    xzcat %{SOURCE5000} | patch -p1 -F1 -s
Pablo Greco d6c4c4
%if 0%{?gitrev}
Pablo Greco d6c4c4
    xzcat %{SOURCE5001} | patch -p1 -F1 -s
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
%else
Pablo Greco d6c4c4
# pre-{base_sublevel+1}-rc1 case
Pablo Greco d6c4c4
%if 0%{?gitrev}
Pablo Greco d6c4c4
    xzcat %{SOURCE5000} | patch -p1 -F1 -s
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
    git init
Pablo Greco d6c4c4
    git config user.email "kernel-team@fedoraproject.org"
Pablo Greco d6c4c4
    git config user.name "Fedora Kernel Team"
Pablo Greco d6c4c4
    git config gc.auto 0
Pablo Greco d6c4c4
    git add .
Pablo Greco d6c4c4
    git commit -a -q -m "baseline"
Pablo Greco d6c4c4
Pablo Greco d6c4c4
    cd ..
Pablo Greco d6c4c4
Pablo Greco d6c4c4
  fi
Pablo Greco d6c4c4
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
else
Pablo Greco d6c4c4
Pablo Greco d6c4c4
  # We already have all vanilla dirs, just change to the top-level directory.
Pablo Greco d6c4c4
  cd kernel-%{kversion}%{?dist}
Pablo Greco d6c4c4
Pablo Greco d6c4c4
fi
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# Now build the fedora kernel tree.
Pablo Greco d6c4c4
cp -al vanilla-%{vanillaversion} linux-%{KVERREL}
Pablo Greco d6c4c4
Pablo Greco d6c4c4
cd linux-%{KVERREL}
Pablo Greco d6c4c4
if [ ! -d .git ]; then
Pablo Greco d6c4c4
    git init
Pablo Greco d6c4c4
    git config user.email "kernel-team@fedoraproject.org"
Pablo Greco d6c4c4
    git config user.name "Fedora Kernel Team"
Pablo Greco d6c4c4
    git config gc.auto 0
Pablo Greco d6c4c4
    git add .
Pablo Greco d6c4c4
    git commit -a -q -m "baseline"
Pablo Greco d6c4c4
fi
Pablo Greco d6c4c4
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# released_kernel with possible stable updates
Pablo Greco d6c4c4
%if 0%{?stable_base}
Pablo Greco d6c4c4
# This is special because the kernel spec is hell and nothing is consistent
Pablo Greco d6c4c4
xzcat %{SOURCE5000} | patch -p1 -F1 -s
Pablo Greco d6c4c4
git commit -a -m "Stable update"
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# Note: Even in the "nopatches" path some patches (build tweaks and compile
Pablo Greco d6c4c4
# fixes) will always get applied; see patch defition above for details
Pablo Greco d6c4c4
Pablo Greco d6c4c4
git am %{patches}
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# END OF PATCH APPLICATIONS
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# Any further pre-build tree manipulations happen here.
Pablo Greco d6c4c4
Pablo Greco d6c4c4
chmod +x scripts/checkpatch.pl
Pablo Greco d6c4c4
chmod +x tools/objtool/sync-check.sh
Pablo Greco d6c4c4
mv COPYING COPYING-%{version}
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# This Prevents scripts/setlocalversion from mucking with our version numbers.
Pablo Greco d6c4c4
touch .scmversion
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# Mangle /usr/bin/python shebangs to /usr/bin/python3
Pablo Greco d6c4c4
# Mangle all Python shebangs to be Python 3 explicitly
Pablo Greco d6c4c4
# -p preserves timestamps
Pablo Greco d6c4c4
# -n prevents creating ~backup files
Pablo Greco d6c4c4
# -i specifies the interpreter for the shebang
Pablo Greco d6c4c4
# This fixes errors such as
Pablo Greco d6c4c4
# *** ERROR: ambiguous python shebang in /usr/bin/kvm_stat: #!/usr/bin/python. Change it to python3 (or python2) explicitly.
Pablo Greco d6c4c4
# We patch all sources below for which we got a report/error.
Pablo Greco d6c4c4
pathfix.py -i "%{__python3} %{py3_shbang_opts}" -p -n \
Pablo Greco d6c4c4
	tools/kvm/kvm_stat/kvm_stat \
Pablo Greco d6c4c4
	scripts/show_delta \
Pablo Greco d6c4c4
	scripts/diffconfig \
Pablo Greco d6c4c4
	scripts/bloat-o-meter \
Pablo Greco d6c4c4
	tools/perf/tests/attr.py \
Pablo Greco d6c4c4
	tools/perf/scripts/python/stat-cpi.py \
Pablo Greco d6c4c4
	tools/perf/scripts/python/sched-migration.py \
Pablo Greco d6c4c4
	Documentation \
Pablo Greco d6c4c4
	scripts/gen_compile_commands.py
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# only deal with configs if we are going to build for the arch
Pablo Greco d6c4c4
%ifnarch %nobuildarches
Pablo Greco d6c4c4
Pablo Greco d6c4c4
if [ -L configs ]; then
Pablo Greco d6c4c4
	rm -f configs
Pablo Greco d6c4c4
fi
Pablo Greco d6c4c4
# Deal with configs stuff
Pablo Greco d6c4c4
mkdir configs
Pablo Greco d6c4c4
cd configs
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# Drop some necessary files from the source dir into the buildroot
Pablo Greco d6c4c4
cp $RPM_SOURCE_DIR/kernel-*.config .
Pablo Greco d6c4c4
cp %{SOURCE1000} .
Pablo Greco d6c4c4
cp %{SOURCE55} .
Pablo Greco d6c4c4
cp %{SOURCE51} .
Pablo Greco d6c4c4
VERSION=%{version} ./generate_all_configs.sh %{primary_target} %{debugbuildsenabled}
Pablo Greco d6c4c4
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# Merge in any user-provided local config option changes
Pablo Greco d6c4c4
%ifnarch %nobuildarches
Pablo Greco d6c4c4
for i in %{all_arch_configs}
Pablo Greco d6c4c4
do
Pablo Greco d6c4c4
  mv $i $i.tmp
Pablo Greco d6c4c4
  ./merge.pl %{SOURCE1000} $i.tmp > $i
Pablo Greco d6c4c4
  rm $i.tmp
Pablo Greco d6c4c4
done
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
%if !%{debugbuildsenabled}
Pablo Greco d6c4c4
rm -f kernel-%{version}-*debug.config
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# enable GCOV kernel config options if gcov is on
Pablo Greco d6c4c4
%if %{with_gcov}
Pablo Greco d6c4c4
for i in *.config
Pablo Greco d6c4c4
do
Pablo Greco d6c4c4
  sed -i 's/# CONFIG_GCOV_KERNEL is not set/CONFIG_GCOV_KERNEL=y\nCONFIG_GCOV_PROFILE_ALL=y\n/' $i
Pablo Greco d6c4c4
done
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
cp %{SOURCE52} .
Pablo Greco d6c4c4
OPTS=""
Pablo Greco d6c4c4
%if %{with_configchecks}
Pablo Greco d6c4c4
	OPTS="$OPTS -w -n -c"
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
./process_configs.sh $OPTS kernel %{rpmversion}
Pablo Greco d6c4c4
Pablo Greco d6c4c4
cp %{SOURCE56} .
Pablo Greco d6c4c4
RPM_SOURCE_DIR=$RPM_SOURCE_DIR ./update_scripts.sh %{primary_target}
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# end of kernel config
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
cd ..
Pablo Greco d6c4c4
# # End of Configs stuff
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# get rid of unwanted files resulting from patch fuzz
Pablo Greco d6c4c4
find . \( -name "*.orig" -o -name "*~" \) -delete >/dev/null
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# remove unnecessary SCM files
Pablo Greco d6c4c4
find . -name .gitignore -delete >/dev/null
Pablo Greco d6c4c4
Pablo Greco d6c4c4
cd ..
Pablo Greco d6c4c4
Pablo Greco d6c4c4
###
Pablo Greco d6c4c4
### build
Pablo Greco d6c4c4
###
Pablo Greco d6c4c4
%build
Pablo Greco d6c4c4
Pablo Greco d6c4c4
%if %{with_sparse}
Pablo Greco d6c4c4
%define sparse_mflags	C=1
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
cp_vmlinux()
Pablo Greco d6c4c4
{
Pablo Greco d6c4c4
  eu-strip --remove-comment -o "$2" "$1"
Pablo Greco d6c4c4
}
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# These are for host programs that get built as part of the kernel and
Pablo Greco d6c4c4
# are required to be packaged in kernel-devel for building external modules.
Pablo Greco d6c4c4
# Since they are userspace binaries, they are required to pickup the hardening
Pablo Greco d6c4c4
# flags defined in the macros. The --build-id=uuid is a trick to get around
Pablo Greco d6c4c4
# debuginfo limitations: Typically, find-debuginfo.sh will update the build
Pablo Greco d6c4c4
# id of all binaries to allow for parllel debuginfo installs. The kernel
Pablo Greco d6c4c4
# can't use this because it breaks debuginfo for the vDSO so we have to
Pablo Greco d6c4c4
# use a special mechanism for kernel and modules to be unique. Unfortunately,
Pablo Greco d6c4c4
# we still have userspace binaries which need unique debuginfo and because
Pablo Greco d6c4c4
# they come from the kernel package, we can't just use find-debuginfo.sh to
Pablo Greco d6c4c4
# rewrite only those binaries. The easiest option right now is just to have
Pablo Greco d6c4c4
# the build id be a uuid for the host programs.
Pablo Greco d6c4c4
#
Pablo Greco d6c4c4
# Note we need to disable these flags for cross builds because the flags
Pablo Greco d6c4c4
# from redhat-rpm-config assume that host == target so target arch
Pablo Greco d6c4c4
# flags cause issues with the host compiler.
Pablo Greco d6c4c4
%if !%{with_cross}
Pablo Greco d6c4c4
%define build_hostcflags  %{?build_cflags}
Pablo Greco d6c4c4
%define build_hostldflags %{?build_ldflags}
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
%define make make %{?cross_opts} %{?make_opts} HOSTCFLAGS="%{?build_hostcflags}" HOSTLDFLAGS="%{?build_hostldflags}"
Pablo Greco d6c4c4
Pablo Greco d6c4c4
BuildKernel() {
Pablo Greco d6c4c4
    MakeTarget=$1
Pablo Greco d6c4c4
    KernelImage=$2
Pablo Greco d6c4c4
    Flavour=$4
Pablo Greco d6c4c4
    DoVDSO=$3
Pablo Greco d6c4c4
    Flav=${Flavour:++${Flavour}}
Pablo Greco d6c4c4
    InstallName=${5:-vmlinuz}
Pablo Greco d6c4c4
Pablo Greco d6c4c4
    DoModules=1
Pablo Greco d6c4c4
    if [ "$Flavour" = "zfcpdump" ]; then
Pablo Greco d6c4c4
	    DoModules=0
Pablo Greco d6c4c4
    fi
Pablo Greco d6c4c4
Pablo Greco d6c4c4
    # Pick the right config file for the kernel we're building
Pablo Greco d6c4c4
    Config=kernel-%{version}-%{_target_cpu}${Flavour:+-${Flavour}}.config
Pablo Greco d6c4c4
    DevelDir=/usr/src/kernels/%{KVERREL}${Flav}
Pablo Greco d6c4c4
Pablo Greco d6c4c4
    # When the bootable image is just the ELF kernel, strip it.
Pablo Greco d6c4c4
    # We already copy the unstripped file into the debuginfo package.
Pablo Greco d6c4c4
    if [ "$KernelImage" = vmlinux ]; then
Pablo Greco d6c4c4
      CopyKernel=cp_vmlinux
Pablo Greco d6c4c4
    else
Pablo Greco d6c4c4
      CopyKernel=cp
Pablo Greco d6c4c4
    fi
Pablo Greco d6c4c4
Pablo Greco d6c4c4
    KernelVer=%{version}-%{release}.%{_target_cpu}${Flav}
Pablo Greco d6c4c4
    echo BUILDING A KERNEL FOR ${Flavour} %{_target_cpu}...
Pablo Greco d6c4c4
Pablo Greco d6c4c4
    %if 0%{?stable_update}
Pablo Greco d6c4c4
    # make sure SUBLEVEL is incremented on a stable release.  Sigh 3.x.
Pablo Greco d6c4c4
    perl -p -i -e "s/^SUBLEVEL.*/SUBLEVEL = %{?stablerev}/" Makefile
Pablo Greco d6c4c4
    %endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
    # make sure EXTRAVERSION says what we want it to say
Pablo Greco d6c4c4
    perl -p -i -e "s/^EXTRAVERSION.*/EXTRAVERSION = -%{release}.%{_target_cpu}${Flav}/" Makefile
Pablo Greco d6c4c4
Pablo Greco d6c4c4
    # if pre-rc1 devel kernel, must fix up PATCHLEVEL for our versioning scheme
Pablo Greco d6c4c4
    %if !0%{?rcrev}
Pablo Greco d6c4c4
    %if 0%{?gitrev}
Pablo Greco d6c4c4
    perl -p -i -e 's/^PATCHLEVEL.*/PATCHLEVEL = %{upstream_sublevel}/' Makefile
Pablo Greco d6c4c4
    %endif
Pablo Greco d6c4c4
    %endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
    # and now to start the build process
Pablo Greco d6c4c4
Pablo Greco d6c4c4
    %{make} %{?_smp_mflags} mrproper
Pablo Greco d6c4c4
    cp configs/$Config .config
Pablo Greco d6c4c4
Pablo Greco d6c4c4
    %if %{signkernel}%{signmodules}
Pablo Greco d6c4c4
    cp $RPM_SOURCE_DIR/x509.genkey certs/.
Pablo Greco d6c4c4
    %endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
    Arch=`head -1 .config | cut -b 3-`
Pablo Greco d6c4c4
    echo USING ARCH=$Arch
Pablo Greco d6c4c4
Pablo Greco d6c4c4
    KCFLAGS="%{?kcflags}"
Pablo Greco d6c4c4
Pablo Greco d6c4c4
    # add kpatch flags for base kernel
Pablo Greco d6c4c4
    if [ "$Flavour" == "" ]; then
Pablo Greco d6c4c4
        KCFLAGS="$KCFLAGS %{?kpatch_kcflags}"
Pablo Greco d6c4c4
    fi
Pablo Greco d6c4c4
Pablo Greco d6c4c4
    %{make} ARCH=$Arch olddefconfig >/dev/null
Pablo Greco d6c4c4
Pablo Greco d6c4c4
    # This ensures build-ids are unique to allow parallel debuginfo
Pablo Greco d6c4c4
    perl -p -i -e "s/^CONFIG_BUILD_SALT.*/CONFIG_BUILD_SALT=\"%{KVERREL}\"/" .config
Pablo Greco d6c4c4
    %{make} ARCH=$Arch KCFLAGS="$KCFLAGS" WITH_GCOV="%{?with_gcov}" %{?_smp_mflags} $MakeTarget %{?sparse_mflags} %{?kernel_mflags}
Pablo Greco d6c4c4
    if [ $DoModules -eq 1 ]; then
Pablo Greco d6c4c4
	%{make} ARCH=$Arch KCFLAGS="$KCFLAGS" WITH_GCOV="%{?with_gcov}" %{?_smp_mflags} modules %{?sparse_mflags} || exit 1
Pablo Greco d6c4c4
    fi
Pablo Greco d6c4c4
Pablo Greco d6c4c4
    mkdir -p $RPM_BUILD_ROOT/%{image_install_path}
Pablo Greco d6c4c4
    mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer
Pablo Greco d6c4c4
%if %{with_debuginfo}
Pablo Greco d6c4c4
    mkdir -p $RPM_BUILD_ROOT%{debuginfodir}/%{image_install_path}
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
%ifarch %{arm} aarch64
Pablo Greco d6c4c4
    %{make} ARCH=$Arch dtbs INSTALL_DTBS_PATH=$RPM_BUILD_ROOT/%{image_install_path}/dtb-$KernelVer
Pablo Greco d6c4c4
    %{make} ARCH=$Arch dtbs_install INSTALL_DTBS_PATH=$RPM_BUILD_ROOT/%{image_install_path}/dtb-$KernelVer
Pablo Greco d6c4c4
    cp -r $RPM_BUILD_ROOT/%{image_install_path}/dtb-$KernelVer $RPM_BUILD_ROOT/lib/modules/$KernelVer/dtb
Pablo Greco d6c4c4
    find arch/$Arch/boot/dts -name '*.dtb' -type f -delete
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
    # Start installing the results
Pablo Greco d6c4c4
    install -m 644 .config $RPM_BUILD_ROOT/boot/config-$KernelVer
Pablo Greco d6c4c4
    install -m 644 .config $RPM_BUILD_ROOT/lib/modules/$KernelVer/config
Pablo Greco d6c4c4
    install -m 644 System.map $RPM_BUILD_ROOT/boot/System.map-$KernelVer
Pablo Greco d6c4c4
    install -m 644 System.map $RPM_BUILD_ROOT/lib/modules/$KernelVer/System.map
Pablo Greco d6c4c4
Pablo Greco d6c4c4
    # We estimate the size of the initramfs because rpm needs to take this size
Pablo Greco d6c4c4
    # into consideration when performing disk space calculations. (See bz #530778)
Pablo Greco d6c4c4
    dd if=/dev/zero of=$RPM_BUILD_ROOT/boot/initramfs-$KernelVer.img bs=1M count=20
Pablo Greco d6c4c4
Pablo Greco d6c4c4
    if [ -f arch/$Arch/boot/zImage.stub ]; then
Pablo Greco d6c4c4
      cp arch/$Arch/boot/zImage.stub $RPM_BUILD_ROOT/%{image_install_path}/zImage.stub-$KernelVer || :
Pablo Greco d6c4c4
      cp arch/$Arch/boot/zImage.stub $RPM_BUILD_ROOT/lib/modules/$KernelVer/zImage.stub-$KernelVer || :
Pablo Greco d6c4c4
    fi
Pablo Greco d6c4c4
Pablo Greco d6c4c4
    %if %{signkernel}
Pablo Greco d6c4c4
    if [ "$KernelImage" = vmlinux ]; then
Pablo Greco d6c4c4
        # We can't strip and sign $KernelImage in place, because
Pablo Greco d6c4c4
        # we need to preserve original vmlinux for debuginfo.
Pablo Greco d6c4c4
        # Use a copy for signing.
Pablo Greco d6c4c4
        $CopyKernel $KernelImage $KernelImage.tosign
Pablo Greco d6c4c4
        KernelImage=$KernelImage.tosign
Pablo Greco d6c4c4
        CopyKernel=cp
Pablo Greco d6c4c4
    fi
Pablo Greco d6c4c4
Pablo Greco d6c4c4
    # Sign the image if we're using EFI
Pablo Greco d6c4c4
    # aarch64 kernels are gziped EFI images
Pablo Greco d6c4c4
    KernelExtension=${KernelImage##*.}
Pablo Greco d6c4c4
    if [ "$KernelExtension" == "gz" ]; then
Pablo Greco d6c4c4
        SignImage=${KernelImage%.*}
Pablo Greco d6c4c4
    else
Pablo Greco d6c4c4
        SignImage=$KernelImage
Pablo Greco d6c4c4
    fi
Pablo Greco d6c4c4
Pablo Greco d6c4c4
    %ifarch x86_64 aarch64
Pablo Greco d6c4c4
    %pesign -s -i $SignImage -o vmlinuz.signed -a %{secureboot_ca} -c %{secureboot_key} -n %{pesign_name}
Pablo Greco d6c4c4
    %endif
Pablo Greco d6c4c4
    %ifarch s390x ppc64le
Pablo Greco d6c4c4
    if [ -x /usr/bin/rpm-sign ]; then
Pablo Greco d6c4c4
	rpm-sign --key "%{pesign_name}" --lkmsign $SignImage --output vmlinuz.signed
Pablo Greco d6c4c4
    elif [ $DoModules -eq 1 ]; then
Pablo Greco d6c4c4
	chmod +x scripts/sign-file
Pablo Greco d6c4c4
	./scripts/sign-file -p sha256 certs/signing_key.pem certs/signing_key.x509 $SignImage vmlinuz.signed
Pablo Greco d6c4c4
    else
Pablo Greco d6c4c4
	mv $SignImage vmlinuz.signed
Pablo Greco d6c4c4
    fi
Pablo Greco d6c4c4
    %endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
    if [ ! -s vmlinuz.signed ]; then
Pablo Greco d6c4c4
        echo "pesigning failed"
Pablo Greco d6c4c4
        exit 1
Pablo Greco d6c4c4
    fi
Pablo Greco d6c4c4
    mv vmlinuz.signed $SignImage
Pablo Greco d6c4c4
    if [ "$KernelExtension" == "gz" ]; then
Pablo Greco d6c4c4
        gzip -f9 $SignImage
Pablo Greco d6c4c4
    fi
Pablo Greco d6c4c4
    %endif
Pablo Greco d6c4c4
    $CopyKernel $KernelImage \
Pablo Greco d6c4c4
                $RPM_BUILD_ROOT/%{image_install_path}/$InstallName-$KernelVer
Pablo Greco d6c4c4
    chmod 755 $RPM_BUILD_ROOT/%{image_install_path}/$InstallName-$KernelVer
Pablo Greco d6c4c4
    cp $RPM_BUILD_ROOT/%{image_install_path}/$InstallName-$KernelVer $RPM_BUILD_ROOT/lib/modules/$KernelVer/$InstallName
Pablo Greco d6c4c4
Pablo Greco d6c4c4
    # hmac sign the kernel for FIPS
Pablo Greco d6c4c4
    echo "Creating hmac file: $RPM_BUILD_ROOT/%{image_install_path}/.vmlinuz-$KernelVer.hmac"
Pablo Greco d6c4c4
    ls -l $RPM_BUILD_ROOT/%{image_install_path}/$InstallName-$KernelVer
Pablo Greco d6c4c4
    sha512hmac $RPM_BUILD_ROOT/%{image_install_path}/$InstallName-$KernelVer | sed -e "s,$RPM_BUILD_ROOT,," > $RPM_BUILD_ROOT/%{image_install_path}/.vmlinuz-$KernelVer.hmac;
Pablo Greco d6c4c4
    cp $RPM_BUILD_ROOT/%{image_install_path}/.vmlinuz-$KernelVer.hmac $RPM_BUILD_ROOT/lib/modules/$KernelVer/.vmlinuz.hmac
Pablo Greco d6c4c4
Pablo Greco d6c4c4
    if [ $DoModules -eq 1 ]; then
Pablo Greco d6c4c4
	# Override $(mod-fw) because we don't want it to install any firmware
Pablo Greco d6c4c4
	# we'll get it from the linux-firmware package and we don't want conflicts
Pablo Greco d6c4c4
	%{make} ARCH=$Arch INSTALL_MOD_PATH=$RPM_BUILD_ROOT %{?_smp_mflags} modules_install KERNELRELEASE=$KernelVer mod-fw=
Pablo Greco d6c4c4
    fi
Pablo Greco d6c4c4
Pablo Greco d6c4c4
%if %{with_gcov}
Pablo Greco d6c4c4
    # install gcov-needed files to $BUILDROOT/$BUILD/...:
Pablo Greco d6c4c4
    #   gcov_info->filename is absolute path
Pablo Greco d6c4c4
    #   gcno references to sources can use absolute paths (e.g. in out-of-tree builds)
Pablo Greco d6c4c4
    #   sysfs symlink targets (set up at compile time) use absolute paths to BUILD dir
Pablo Greco d6c4c4
    find . \( -name '*.gcno' -o -name '*.[chS]' \) -exec install -D '{}' "$RPM_BUILD_ROOT/$(pwd)/{}" \;
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
    # add an a noop %%defattr statement 'cause rpm doesn't like empty file list files
Pablo Greco d6c4c4
    echo '%%defattr(-,-,-)' > ../kernel${Flavour:+-${Flavour}}-ldsoconf.list
Pablo Greco d6c4c4
    if [ $DoVDSO -ne 0 ]; then
Pablo Greco d6c4c4
        %{make} ARCH=$Arch INSTALL_MOD_PATH=$RPM_BUILD_ROOT vdso_install KERNELRELEASE=$KernelVer
Pablo Greco d6c4c4
        if [ -s ldconfig-kernel.conf ]; then
Pablo Greco d6c4c4
             install -D -m 444 ldconfig-kernel.conf \
Pablo Greco d6c4c4
                $RPM_BUILD_ROOT/etc/ld.so.conf.d/kernel-$KernelVer.conf
Pablo Greco d6c4c4
	     echo /etc/ld.so.conf.d/kernel-$KernelVer.conf >> ../kernel${Flavour:+-${Flavour}}-ldsoconf.list
Pablo Greco d6c4c4
        fi
Pablo Greco d6c4c4
Pablo Greco d6c4c4
        rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/vdso/.build-id
Pablo Greco d6c4c4
    fi
Pablo Greco d6c4c4
Pablo Greco d6c4c4
    # And save the headers/makefiles etc for building modules against
Pablo Greco d6c4c4
    #
Pablo Greco d6c4c4
    # This all looks scary, but the end result is supposed to be:
Pablo Greco d6c4c4
    # * all arch relevant include/ files
Pablo Greco d6c4c4
    # * all Makefile/Kconfig files
Pablo Greco d6c4c4
    # * all script/ files
Pablo Greco d6c4c4
Pablo Greco d6c4c4
    rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/build
Pablo Greco d6c4c4
    rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/source
Pablo Greco d6c4c4
    mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/build
Pablo Greco d6c4c4
    (cd $RPM_BUILD_ROOT/lib/modules/$KernelVer ; ln -s build source)
Pablo Greco d6c4c4
    # dirs for additional modules per module-init-tools, kbuild/modules.txt
Pablo Greco d6c4c4
    mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/extra
Pablo Greco d6c4c4
    mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/internal
Pablo Greco d6c4c4
    mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/updates
Pablo Greco d6c4c4
    # CONFIG_KERNEL_HEADER_TEST generates some extra files in the process of
Pablo Greco d6c4c4
    # testing so just delete
Pablo Greco d6c4c4
    find . -name *.h.s -delete
Pablo Greco d6c4c4
    # first copy everything
Pablo Greco d6c4c4
    cp --parents `find  -type f -name "Makefile*" -o -name "Kconfig*"` $RPM_BUILD_ROOT/lib/modules/$KernelVer/build
Pablo Greco d6c4c4
    cp Module.symvers $RPM_BUILD_ROOT/lib/modules/$KernelVer/build
Pablo Greco d6c4c4
    cp System.map $RPM_BUILD_ROOT/lib/modules/$KernelVer/build
Pablo Greco d6c4c4
    if [ -s Module.markers ]; then
Pablo Greco d6c4c4
      cp Module.markers $RPM_BUILD_ROOT/lib/modules/$KernelVer/build
Pablo Greco d6c4c4
    fi
Pablo Greco d6c4c4
Pablo Greco d6c4c4
    # create the kABI metadata for use in packaging
Pablo Greco d6c4c4
    # NOTENOTE: the name symvers is used by the rpm backend
Pablo Greco d6c4c4
    # NOTENOTE: to discover and run the /usr/lib/rpm/fileattrs/kabi.attr
Pablo Greco d6c4c4
    # NOTENOTE: script which dynamically adds exported kernel symbol
Pablo Greco d6c4c4
    # NOTENOTE: checksums to the rpm metadata provides list.
Pablo Greco d6c4c4
    # NOTENOTE: if you change the symvers name, update the backend too
Pablo Greco d6c4c4
    echo "**** GENERATING kernel ABI metadata ****"
Pablo Greco d6c4c4
    gzip -c9 < Module.symvers > $RPM_BUILD_ROOT/boot/symvers-$KernelVer.gz
Pablo Greco d6c4c4
    cp $RPM_BUILD_ROOT/boot/symvers-$KernelVer.gz $RPM_BUILD_ROOT/lib/modules/$KernelVer/symvers.gz
Pablo Greco d6c4c4
%if %{with_kabichk}
Pablo Greco d6c4c4
    echo "**** kABI checking is enabled in kernel SPEC file. ****"
Pablo Greco d6c4c4
    chmod 0755 $RPM_SOURCE_DIR/check-kabi
Pablo Greco d6c4c4
    if [ -e $RPM_SOURCE_DIR/Module.kabi_%{_target_cpu}$Flavour ]; then
Pablo Greco d6c4c4
        cp $RPM_SOURCE_DIR/Module.kabi_%{_target_cpu}$Flavour $RPM_BUILD_ROOT/Module.kabi
Pablo Greco d6c4c4
        $RPM_SOURCE_DIR/check-kabi -k $RPM_BUILD_ROOT/Module.kabi -s Module.symvers || exit 1
Pablo Greco d6c4c4
        rm $RPM_BUILD_ROOT/Module.kabi # for now, don't keep it around.
Pablo Greco d6c4c4
    else
Pablo Greco d6c4c4
        echo "**** NOTE: Cannot find reference Module.kabi file. ****"
Pablo Greco d6c4c4
    fi
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
%if %{with_kabidupchk}
Pablo Greco d6c4c4
    echo "**** kABI DUP checking is enabled in kernel SPEC file. ****"
Pablo Greco d6c4c4
    if [ -e $RPM_SOURCE_DIR/Module.kabi_dup_%{_target_cpu}$Flavour ]; then
Pablo Greco d6c4c4
        cp $RPM_SOURCE_DIR/Module.kabi_dup_%{_target_cpu}$Flavour $RPM_BUILD_ROOT/Module.kabi
Pablo Greco d6c4c4
        $RPM_SOURCE_DIR/check-kabi -k $RPM_BUILD_ROOT/Module.kabi -s Module.symvers || exit 1
Pablo Greco d6c4c4
        rm $RPM_BUILD_ROOT/Module.kabi # for now, don't keep it around.
Pablo Greco d6c4c4
    else
Pablo Greco d6c4c4
        echo "**** NOTE: Cannot find DUP reference Module.kabi file. ****"
Pablo Greco d6c4c4
    fi
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
%if %{with_kabidw_base}
Pablo Greco d6c4c4
    # Don't build kabi base for debug kernels
Pablo Greco d6c4c4
    if [ "$Flavour" != "kdump" -a "$Flavour" != "debug" ]; then
Pablo Greco d6c4c4
        mkdir -p $RPM_BUILD_ROOT/kabi-dwarf
Pablo Greco d6c4c4
        tar xjvf %{SOURCE301} -C $RPM_BUILD_ROOT/kabi-dwarf
Pablo Greco d6c4c4
Pablo Greco d6c4c4
        mkdir -p $RPM_BUILD_ROOT/kabi-dwarf/whitelists
Pablo Greco d6c4c4
        tar xjvf %{SOURCE300} -C $RPM_BUILD_ROOT/kabi-dwarf/whitelists
Pablo Greco d6c4c4
Pablo Greco d6c4c4
        echo "**** GENERATING DWARF-based kABI baseline dataset ****"
Pablo Greco d6c4c4
        chmod 0755 $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh
Pablo Greco d6c4c4
        $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh generate \
Pablo Greco d6c4c4
            "$RPM_BUILD_ROOT/kabi-dwarf/whitelists/kabi-current/kabi_whitelist_%{_target_cpu}" \
Pablo Greco d6c4c4
            "$(pwd)" \
Pablo Greco d6c4c4
            "$RPM_BUILD_ROOT/kabidw-base/%{_target_cpu}${Flavour:+.${Flavour}}" || :
Pablo Greco d6c4c4
Pablo Greco d6c4c4
        rm -rf $RPM_BUILD_ROOT/kabi-dwarf
Pablo Greco d6c4c4
    fi
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
%if %{with_kabidwchk}
Pablo Greco d6c4c4
    if [ "$Flavour" != "kdump" ]; then
Pablo Greco d6c4c4
        mkdir -p $RPM_BUILD_ROOT/kabi-dwarf
Pablo Greco d6c4c4
        tar xjvf %{SOURCE301} -C $RPM_BUILD_ROOT/kabi-dwarf
Pablo Greco d6c4c4
        if [ -d "$RPM_BUILD_ROOT/kabi-dwarf/base/%{_target_cpu}${Flavour:+.${Flavour}}" ]; then
Pablo Greco d6c4c4
            mkdir -p $RPM_BUILD_ROOT/kabi-dwarf/whitelists
Pablo Greco d6c4c4
            tar xjvf %{SOURCE300} -C $RPM_BUILD_ROOT/kabi-dwarf/whitelists
Pablo Greco d6c4c4
Pablo Greco d6c4c4
            echo "**** GENERATING DWARF-based kABI dataset ****"
Pablo Greco d6c4c4
            chmod 0755 $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh
Pablo Greco d6c4c4
            $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh generate \
Pablo Greco d6c4c4
                "$RPM_BUILD_ROOT/kabi-dwarf/whitelists/kabi-current/kabi_whitelist_%{_target_cpu}" \
Pablo Greco d6c4c4
                "$(pwd)" \
Pablo Greco d6c4c4
                "$RPM_BUILD_ROOT/kabi-dwarf/base/%{_target_cpu}${Flavour:+.${Flavour}}.tmp" || :
Pablo Greco d6c4c4
Pablo Greco d6c4c4
            echo "**** kABI DWARF-based comparison report ****"
Pablo Greco d6c4c4
            $RPM_BUILD_ROOT/kabi-dwarf/run_kabi-dw.sh compare \
Pablo Greco d6c4c4
                "$RPM_BUILD_ROOT/kabi-dwarf/base/%{_target_cpu}${Flavour:+.${Flavour}}" \
Pablo Greco d6c4c4
                "$RPM_BUILD_ROOT/kabi-dwarf/base/%{_target_cpu}${Flavour:+.${Flavour}}.tmp" || :
Pablo Greco d6c4c4
            echo "**** End of kABI DWARF-based comparison report ****"
Pablo Greco d6c4c4
        else
Pablo Greco d6c4c4
            echo "**** Baseline dataset for kABI DWARF-BASED comparison report not found ****"
Pablo Greco d6c4c4
        fi
Pablo Greco d6c4c4
Pablo Greco d6c4c4
        rm -rf $RPM_BUILD_ROOT/kabi-dwarf
Pablo Greco d6c4c4
    fi
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
    # then drop all but the needed Makefiles/Kconfig files
Pablo Greco d6c4c4
    rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts
Pablo Greco d6c4c4
    rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include
Pablo Greco d6c4c4
    cp .config $RPM_BUILD_ROOT/lib/modules/$KernelVer/build
Pablo Greco d6c4c4
    cp -a scripts $RPM_BUILD_ROOT/lib/modules/$KernelVer/build
Pablo Greco d6c4c4
    rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts/tracing
Pablo Greco d6c4c4
    rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts/spdxcheck.py
Pablo Greco d6c4c4
    if [ -f tools/objtool/objtool ]; then
Pablo Greco d6c4c4
      cp -a tools/objtool/objtool $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/tools/objtool/ || :
Pablo Greco d6c4c4
    fi
Pablo Greco d6c4c4
    if [ -d arch/$Arch/scripts ]; then
Pablo Greco d6c4c4
      cp -a arch/$Arch/scripts $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/arch/%{_arch} || :
Pablo Greco d6c4c4
    fi
Pablo Greco d6c4c4
    if [ -f arch/$Arch/*lds ]; then
Pablo Greco d6c4c4
      cp -a arch/$Arch/*lds $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/arch/%{_arch}/ || :
Pablo Greco d6c4c4
    fi
Pablo Greco d6c4c4
    if [ -f arch/%{asmarch}/kernel/module.lds ]; then
Pablo Greco d6c4c4
      cp -a --parents arch/%{asmarch}/kernel/module.lds $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/
Pablo Greco d6c4c4
    fi
Pablo Greco d6c4c4
    rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts/*.o
Pablo Greco d6c4c4
    rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts/*/*.o
Pablo Greco d6c4c4
%ifarch ppc64le
Pablo Greco d6c4c4
    cp -a --parents arch/powerpc/lib/crtsavres.[So] $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
    if [ -d arch/%{asmarch}/include ]; then
Pablo Greco d6c4c4
      cp -a --parents arch/%{asmarch}/include $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/
Pablo Greco d6c4c4
    fi
Pablo Greco d6c4c4
%ifarch aarch64
Pablo Greco d6c4c4
    # arch/arm64/include/asm/xen references arch/arm
Pablo Greco d6c4c4
    cp -a --parents arch/arm/include/asm/xen $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/
Pablo Greco d6c4c4
    # arch/arm64/include/asm/opcodes.h references arch/arm
Pablo Greco d6c4c4
    cp -a --parents arch/arm/include/asm/opcodes.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
    # include the machine specific headers for ARM variants, if available.
Pablo Greco d6c4c4
%ifarch %{arm}
Pablo Greco d6c4c4
    if [ -d arch/%{asmarch}/mach-${Flavour}/include ]; then
Pablo Greco d6c4c4
      cp -a --parents arch/%{asmarch}/mach-${Flavour}/include $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/
Pablo Greco d6c4c4
    fi
Pablo Greco d6c4c4
    # include a few files for 'make prepare'
Pablo Greco d6c4c4
    cp -a --parents arch/arm/tools/gen-mach-types $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/
Pablo Greco d6c4c4
    cp -a --parents arch/arm/tools/mach-types $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/
Pablo Greco d6c4c4
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
    cp -a include $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include
Pablo Greco d6c4c4
%ifarch i686 x86_64
Pablo Greco d6c4c4
    # files for 'make prepare' to succeed with kernel-devel
Pablo Greco d6c4c4
    cp -a --parents arch/x86/entry/syscalls/syscall_32.tbl $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/
Pablo Greco d6c4c4
    cp -a --parents arch/x86/entry/syscalls/syscalltbl.sh $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/
Pablo Greco d6c4c4
    cp -a --parents arch/x86/entry/syscalls/syscallhdr.sh $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/
Pablo Greco d6c4c4
    cp -a --parents arch/x86/entry/syscalls/syscall_64.tbl $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/
Pablo Greco d6c4c4
    cp -a --parents arch/x86/tools/relocs_32.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/
Pablo Greco d6c4c4
    cp -a --parents arch/x86/tools/relocs_64.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/
Pablo Greco d6c4c4
    cp -a --parents arch/x86/tools/relocs.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/
Pablo Greco d6c4c4
    cp -a --parents arch/x86/tools/relocs_common.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/
Pablo Greco d6c4c4
    cp -a --parents arch/x86/tools/relocs.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/
Pablo Greco d6c4c4
    cp -a --parents tools/include/tools/le_byteshift.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/
Pablo Greco d6c4c4
    cp -a --parents arch/x86/purgatory/purgatory.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/
Pablo Greco d6c4c4
    cp -a --parents arch/x86/purgatory/stack.S $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/
Pablo Greco d6c4c4
    cp -a --parents arch/x86/purgatory/setup-x86_64.S $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/
Pablo Greco d6c4c4
    cp -a --parents arch/x86/purgatory/entry64.S $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/
Pablo Greco d6c4c4
    cp -a --parents arch/x86/boot/string.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/
Pablo Greco d6c4c4
    cp -a --parents arch/x86/boot/string.c $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/
Pablo Greco d6c4c4
    cp -a --parents arch/x86/boot/ctype.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
    # Make sure the Makefile and version.h have a matching timestamp so that
Pablo Greco d6c4c4
    # external modules can be built
Pablo Greco d6c4c4
    touch -r $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/Makefile $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include/generated/uapi/linux/version.h
Pablo Greco d6c4c4
Pablo Greco d6c4c4
    # Copy .config to include/config/auto.conf so "make prepare" is unnecessary.
Pablo Greco d6c4c4
    cp $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/.config $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include/config/auto.conf
Pablo Greco d6c4c4
Pablo Greco d6c4c4
%if %{with_debuginfo}
Pablo Greco d6c4c4
    eu-readelf -n vmlinux | grep "Build ID" | awk '{print $NF}' > vmlinux.id
Pablo Greco d6c4c4
    cp vmlinux.id $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/vmlinux.id
Pablo Greco d6c4c4
Pablo Greco d6c4c4
    #
Pablo Greco d6c4c4
    # save the vmlinux file for kernel debugging into the kernel-debuginfo rpm
Pablo Greco d6c4c4
    #
Pablo Greco d6c4c4
    mkdir -p $RPM_BUILD_ROOT%{debuginfodir}/lib/modules/$KernelVer
Pablo Greco d6c4c4
    cp vmlinux $RPM_BUILD_ROOT%{debuginfodir}/lib/modules/$KernelVer
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
    find $RPM_BUILD_ROOT/lib/modules/$KernelVer -name "*.ko" -type f >modnames
Pablo Greco d6c4c4
Pablo Greco d6c4c4
    # mark modules executable so that strip-to-file can strip them
Pablo Greco d6c4c4
    xargs --no-run-if-empty chmod u+x < modnames
Pablo Greco d6c4c4
Pablo Greco d6c4c4
    # Generate a list of modules for block and networking.
Pablo Greco d6c4c4
Pablo Greco d6c4c4
    grep -F /drivers/ modnames | xargs --no-run-if-empty nm -upA |
Pablo Greco d6c4c4
    sed -n 's,^.*/\([^/]*\.ko\):  *U \(.*\)$,\1 \2,p' > drivers.undef
Pablo Greco d6c4c4
Pablo Greco d6c4c4
    collect_modules_list()
Pablo Greco d6c4c4
    {
Pablo Greco d6c4c4
      sed -r -n -e "s/^([^ ]+) \\.?($2)\$/\\1/p" drivers.undef |
Pablo Greco d6c4c4
        LC_ALL=C sort -u > $RPM_BUILD_ROOT/lib/modules/$KernelVer/modules.$1
Pablo Greco d6c4c4
      if [ ! -z "$3" ]; then
Pablo Greco d6c4c4
        sed -r -e "/^($3)\$/d" -i $RPM_BUILD_ROOT/lib/modules/$KernelVer/modules.$1
Pablo Greco d6c4c4
      fi
Pablo Greco d6c4c4
    }
Pablo Greco d6c4c4
Pablo Greco d6c4c4
    collect_modules_list networking \
Pablo Greco d6c4c4
      'register_netdev|ieee80211_register_hw|usbnet_probe|phy_driver_register|rt(l_|2x00)(pci|usb)_probe|register_netdevice'
Pablo Greco d6c4c4
    collect_modules_list block \
Pablo Greco d6c4c4
      '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'
Pablo Greco d6c4c4
    collect_modules_list drm \
Pablo Greco d6c4c4
      'drm_open|drm_init'
Pablo Greco d6c4c4
    collect_modules_list modesetting \
Pablo Greco d6c4c4
      'drm_crtc_init'
Pablo Greco d6c4c4
Pablo Greco d6c4c4
    # detect missing or incorrect license tags
Pablo Greco d6c4c4
    ( find $RPM_BUILD_ROOT/lib/modules/$KernelVer -name '*.ko' | xargs /sbin/modinfo -l | \
Pablo Greco d6c4c4
        grep -E -v 'GPL( v2)?$|Dual BSD/GPL$|Dual MPL/GPL$|GPL and additional rights$' ) && exit 1
Pablo Greco d6c4c4
Pablo Greco d6c4c4
    # remove files that will be auto generated by depmod at rpm -i time
Pablo Greco d6c4c4
    pushd $RPM_BUILD_ROOT/lib/modules/$KernelVer/
Pablo Greco d6c4c4
        rm -f modules.{alias*,builtin.bin,dep*,*map,symbols*,devname,softdep}
Pablo Greco d6c4c4
    popd
Pablo Greco d6c4c4
Pablo Greco d6c4c4
    # Call the modules-extra script to move things around
Pablo Greco d6c4c4
    %{SOURCE17} $RPM_BUILD_ROOT/lib/modules/$KernelVer $RPM_SOURCE_DIR/mod-extra.list
Pablo Greco d6c4c4
    # Blacklist net autoloadable modules in modules-extra
Pablo Greco d6c4c4
    %{SOURCE19} $RPM_BUILD_ROOT lib/modules/$KernelVer
Pablo Greco d6c4c4
    # Call the modules-extra script for internal modules
Pablo Greco d6c4c4
    %{SOURCE17} $RPM_BUILD_ROOT/lib/modules/$KernelVer %{SOURCE54} internal
Pablo Greco d6c4c4
Pablo Greco d6c4c4
    #
Pablo Greco d6c4c4
    # Generate the kernel-core and kernel-modules files lists
Pablo Greco d6c4c4
    #
Pablo Greco d6c4c4
Pablo Greco d6c4c4
    # Copy the System.map file for depmod to use, and create a backup of the
Pablo Greco d6c4c4
    # full module tree so we can restore it after we're done filtering
Pablo Greco d6c4c4
    cp System.map $RPM_BUILD_ROOT/.
Pablo Greco d6c4c4
    pushd $RPM_BUILD_ROOT
Pablo Greco d6c4c4
    mkdir restore
Pablo Greco d6c4c4
    cp -r lib/modules/$KernelVer/* restore/.
Pablo Greco d6c4c4
Pablo Greco d6c4c4
    # don't include anything going into k-m-e in the file lists
Pablo Greco d6c4c4
    rm -rf lib/modules/$KernelVer/{extra,internal}
Pablo Greco d6c4c4
Pablo Greco d6c4c4
Pablo Greco d6c4c4
    if [ $DoModules -eq 1 ]; then
Pablo Greco d6c4c4
	# Find all the module files and filter them out into the core and
Pablo Greco d6c4c4
	# modules lists.  This actually removes anything going into -modules
Pablo Greco d6c4c4
	# from the dir.
Pablo Greco d6c4c4
	find lib/modules/$KernelVer/kernel -name *.ko | sort -n > modules.list
Pablo Greco d6c4c4
	cp $RPM_SOURCE_DIR/filter-*.sh .
Pablo Greco d6c4c4
	./filter-modules.sh modules.list %{_target_cpu}
Pablo Greco d6c4c4
	rm filter-*.sh
Pablo Greco d6c4c4
Pablo Greco d6c4c4
	# Run depmod on the resulting module tree and make sure it isn't broken
Pablo Greco d6c4c4
	depmod -b . -aeF ./System.map $KernelVer &> depmod.out
Pablo Greco d6c4c4
	if [ -s depmod.out ]; then
Pablo Greco d6c4c4
	    echo "Depmod failure"
Pablo Greco d6c4c4
	    cat depmod.out
Pablo Greco d6c4c4
	    exit 1
Pablo Greco d6c4c4
	else
Pablo Greco d6c4c4
	    rm depmod.out
Pablo Greco d6c4c4
	fi
Pablo Greco d6c4c4
    else
Pablo Greco d6c4c4
	# Ensure important files/directories exist to let the packaging succeed
Pablo Greco d6c4c4
	echo '%%defattr(-,-,-)' > modules.list
Pablo Greco d6c4c4
	echo '%%defattr(-,-,-)' > k-d.list
Pablo Greco d6c4c4
	mkdir -p lib/modules/$KernelVer/kernel
Pablo Greco d6c4c4
	# Add files usually created by make modules, needed to prevent errors
Pablo Greco d6c4c4
	# thrown by depmod during package installation
Pablo Greco d6c4c4
	touch lib/modules/$KernelVer/modules.order
Pablo Greco d6c4c4
	touch lib/modules/$KernelVer/modules.builtin
Pablo Greco d6c4c4
    fi
Pablo Greco d6c4c4
Pablo Greco d6c4c4
    # remove files that will be auto generated by depmod at rpm -i time
Pablo Greco d6c4c4
    pushd $RPM_BUILD_ROOT/lib/modules/$KernelVer/
Pablo Greco d6c4c4
        rm -f modules.{alias*,builtin.bin,dep*,*map,symbols*,devname,softdep}
Pablo Greco d6c4c4
    popd
Pablo Greco d6c4c4
Pablo Greco d6c4c4
    # Go back and find all of the various directories in the tree.  We use this
Pablo Greco d6c4c4
    # for the dir lists in kernel-core
Pablo Greco d6c4c4
    find lib/modules/$KernelVer/kernel -mindepth 1 -type d | sort -n > module-dirs.list
Pablo Greco d6c4c4
Pablo Greco d6c4c4
    # Cleanup
Pablo Greco d6c4c4
    rm System.map
Pablo Greco d6c4c4
    cp -r restore/* lib/modules/$KernelVer/.
Pablo Greco d6c4c4
    rm -rf restore
Pablo Greco d6c4c4
    popd
Pablo Greco d6c4c4
Pablo Greco d6c4c4
    # Make sure the files lists start with absolute paths or rpmbuild fails.
Pablo Greco d6c4c4
    # Also add in the dir entries
Pablo Greco d6c4c4
    sed -e 's/^lib*/\/lib/' %{?zipsed} $RPM_BUILD_ROOT/k-d.list > ../kernel${Flavour:+-${Flavour}}-modules.list
Pablo Greco d6c4c4
    sed -e 's/^lib*/%dir \/lib/' %{?zipsed} $RPM_BUILD_ROOT/module-dirs.list > ../kernel${Flavour:+-${Flavour}}-core.list
Pablo Greco d6c4c4
    sed -e 's/^lib*/\/lib/' %{?zipsed} $RPM_BUILD_ROOT/modules.list >> ../kernel${Flavour:+-${Flavour}}-core.list
Pablo Greco d6c4c4
Pablo Greco d6c4c4
    # Cleanup
Pablo Greco d6c4c4
    rm -f $RPM_BUILD_ROOT/k-d.list
Pablo Greco d6c4c4
    rm -f $RPM_BUILD_ROOT/modules.list
Pablo Greco d6c4c4
    rm -f $RPM_BUILD_ROOT/module-dirs.list
Pablo Greco d6c4c4
Pablo Greco d6c4c4
%if %{signmodules}
Pablo Greco d6c4c4
    if [ $DoModules -eq 1 ]; then
Pablo Greco d6c4c4
	# Save the signing keys so we can sign the modules in __modsign_install_post
Pablo Greco d6c4c4
	cp certs/signing_key.pem certs/signing_key.pem.sign${Flav}
Pablo Greco d6c4c4
	cp certs/signing_key.x509 certs/signing_key.x509.sign${Flav}
Pablo Greco d6c4c4
    fi
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
    # Move the devel headers out of the root file system
Pablo Greco d6c4c4
    mkdir -p $RPM_BUILD_ROOT/usr/src/kernels
Pablo Greco d6c4c4
    mv $RPM_BUILD_ROOT/lib/modules/$KernelVer/build $RPM_BUILD_ROOT/$DevelDir
Pablo Greco d6c4c4
Pablo Greco d6c4c4
    # This is going to create a broken link during the build, but we don't use
Pablo Greco d6c4c4
    # it after this point.  We need the link to actually point to something
Pablo Greco d6c4c4
    # when kernel-devel is installed, and a relative link doesn't work across
Pablo Greco d6c4c4
    # the F17 UsrMove feature.
Pablo Greco d6c4c4
    ln -sf $DevelDir $RPM_BUILD_ROOT/lib/modules/$KernelVer/build
Pablo Greco d6c4c4
Pablo Greco d6c4c4
    # prune junk from kernel-devel
Pablo Greco d6c4c4
    find $RPM_BUILD_ROOT/usr/src/kernels -name ".*.cmd" -delete
Pablo Greco d6c4c4
Pablo Greco d6c4c4
    # build a BLS config for this kernel
Pablo Greco d6c4c4
    %{SOURCE53} "$KernelVer" "$RPM_BUILD_ROOT" "%{?variant}"
Pablo Greco d6c4c4
Pablo Greco d6c4c4
    # Red Hat UEFI Secure Boot CA cert, which can be used to authenticate the kernel
Pablo Greco d6c4c4
    mkdir -p $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer
Pablo Greco d6c4c4
    install -m 0644 %{secureboot_ca} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca.cer
Pablo Greco d6c4c4
    %ifarch s390x ppc64le
Pablo Greco d6c4c4
    if [ $DoModules -eq 1 ]; then
Pablo Greco d6c4c4
	if [ -x /usr/bin/rpm-sign ]; then
Pablo Greco d6c4c4
	    install -m 0644 %{secureboot_key} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/%{signing_key_filename}
Pablo Greco d6c4c4
	else
Pablo Greco d6c4c4
	    install -m 0644 certs/signing_key.x509.sign${Flav} $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/kernel-signing-ca.cer
Pablo Greco d6c4c4
	    openssl x509 -in certs/signing_key.pem.sign${Flav} -outform der -out $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/%{signing_key_filename}
Pablo Greco d6c4c4
	    chmod 0644 $RPM_BUILD_ROOT%{_datadir}/doc/kernel-keys/$KernelVer/%{signing_key_filename}
Pablo Greco d6c4c4
	fi
Pablo Greco d6c4c4
    fi
Pablo Greco d6c4c4
    %endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
%if %{with_ipaclones}
Pablo Greco d6c4c4
    MAXPROCS=$(echo %{?_smp_mflags} | sed -n 's/-j\s*\([0-9]\+\)/\1/p')
Pablo Greco d6c4c4
    if [ -z "$MAXPROCS" ]; then
Pablo Greco d6c4c4
        MAXPROCS=1
Pablo Greco d6c4c4
    fi
Pablo Greco d6c4c4
    if [ "$Flavour" == "" ]; then
Pablo Greco d6c4c4
        mkdir -p $RPM_BUILD_ROOT/$DevelDir-ipaclones
Pablo Greco d6c4c4
        find . -name '*.ipa-clones' | xargs -i{} -r -n 1 -P $MAXPROCS install -m 644 -D "{}" "$RPM_BUILD_ROOT/$DevelDir-ipaclones/{}"
Pablo Greco d6c4c4
    fi
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
}
Pablo Greco d6c4c4
Pablo Greco d6c4c4
###
Pablo Greco d6c4c4
# DO it...
Pablo Greco d6c4c4
###
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# prepare directories
Pablo Greco d6c4c4
rm -rf $RPM_BUILD_ROOT
Pablo Greco d6c4c4
mkdir -p $RPM_BUILD_ROOT/boot
Pablo Greco d6c4c4
mkdir -p $RPM_BUILD_ROOT%{_libexecdir}
Pablo Greco d6c4c4
Pablo Greco d6c4c4
cd linux-%{KVERREL}
Pablo Greco d6c4c4
Pablo Greco d6c4c4
Pablo Greco d6c4c4
%if %{with_debug}
Pablo Greco d6c4c4
BuildKernel %make_target %kernel_image %{_use_vdso} debug
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
%if %{with_zfcpdump}
Pablo Greco d6c4c4
BuildKernel %make_target %kernel_image %{_use_vdso} zfcpdump
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
%if %{with_pae}
Pablo Greco d6c4c4
BuildKernel %make_target %kernel_image %{use_vdso} lpae
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
%if %{with_up}
Pablo Greco d6c4c4
BuildKernel %make_target %kernel_image %{_use_vdso}
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco 11afb4
%global perf_make \
Pablo Greco 11afb4
  make -s 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 prefix=%{_prefix} PYTHON=%{__python3}
Pablo Greco 11afb4
%if %{with_perf}
Pablo Greco 11afb4
# perf
Pablo Greco 11afb4
# make sure check-headers.sh is executable
Pablo Greco 11afb4
chmod +x tools/perf/check-headers.sh
Pablo Greco 11afb4
%{perf_make} DESTDIR=$RPM_BUILD_ROOT all
Pablo Greco 11afb4
%endif
Pablo Greco 11afb4
Pablo Greco 11afb4
%if %{with_tools}
Pablo Greco 11afb4
%ifarch %{cpupowerarchs}
Pablo Greco 11afb4
# cpupower
Pablo Greco 11afb4
# make sure version-gen.sh is executable.
Pablo Greco 11afb4
chmod +x tools/power/cpupower/utils/version-gen.sh
Pablo Greco 11afb4
%{make} %{?_smp_mflags} -C tools/power/cpupower CPUFREQ_BENCH=false
Pablo Greco 11afb4
%ifarch x86_64
Pablo Greco 11afb4
    pushd tools/power/cpupower/debug/x86_64
Pablo Greco 11afb4
    %{make} %{?_smp_mflags} centrino-decode powernow-k8-decode
Pablo Greco 11afb4
    popd
Pablo Greco 11afb4
%endif
Pablo Greco 11afb4
%ifarch x86_64
Pablo Greco 11afb4
   pushd tools/power/x86/x86_energy_perf_policy/
Pablo Greco 11afb4
   %{make}
Pablo Greco 11afb4
   popd
Pablo Greco 11afb4
   pushd tools/power/x86/turbostat
Pablo Greco 11afb4
   %{make}
Pablo Greco 11afb4
   popd
Pablo Greco 11afb4
%endif #turbostat/x86_energy_perf_policy
Pablo Greco 11afb4
%endif
Pablo Greco 11afb4
pushd tools/thermal/tmon/
Pablo Greco 11afb4
%{make}
Pablo Greco 11afb4
popd
Pablo Greco 11afb4
pushd tools/iio/
Pablo Greco 11afb4
%{make}
Pablo Greco 11afb4
popd
Pablo Greco 11afb4
pushd tools/gpio/
Pablo Greco 11afb4
%{make}
Pablo Greco 11afb4
popd
Pablo Greco 11afb4
%endif
Pablo Greco 11afb4
Pablo Greco 11afb4
%global bpftool_make \
Pablo Greco 11afb4
  make EXTRA_CFLAGS="${RPM_OPT_FLAGS}" EXTRA_LDFLAGS="%{__global_ldflags}" DESTDIR=$RPM_BUILD_ROOT V=1
Pablo Greco 11afb4
%if %{with_bpftool}
Pablo Greco 11afb4
pushd tools/bpf/bpftool
Pablo Greco 11afb4
%{bpftool_make}
Pablo Greco 11afb4
popd
Pablo Greco 11afb4
%endif
Pablo Greco 11afb4
Pablo Greco d6c4c4
%if %{with_selftests}
Pablo Greco d6c4c4
%{make} -s ARCH=$Arch V=1 samples/bpf/
Pablo Greco d6c4c4
pushd tools/testing/selftests
Pablo Greco d6c4c4
# We need to install here because we need to call make with ARCH set which
Pablo Greco d6c4c4
# doesn't seem possible to do in the install section.
Pablo Greco d6c4c4
%{make} -s ARCH=$Arch V=1 TARGETS="bpf livepatch net" INSTALL_PATH=%{buildroot}%{_libexecdir}/kselftests install
Pablo Greco d6c4c4
popd
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
%if %{with_doc}
Pablo Greco d6c4c4
# Make the HTML pages.
Pablo Greco d6c4c4
make htmldocs || %{doc_build_fail}
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# sometimes non-world-readable files sneak into the kernel source tree
Pablo Greco d6c4c4
chmod -R a=rX Documentation
Pablo Greco d6c4c4
find Documentation -type d | xargs chmod u+w
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# In the modsign case, we do 3 things.  1) We check the "flavour" and hard
Pablo Greco d6c4c4
# code the value in the following invocations.  This is somewhat sub-optimal
Pablo Greco d6c4c4
# but we're doing this inside of an RPM macro and it isn't as easy as it
Pablo Greco d6c4c4
# could be because of that.  2) We restore the .tmp_versions/ directory from
Pablo Greco d6c4c4
# the one we saved off in BuildKernel above.  This is to make sure we're
Pablo Greco d6c4c4
# signing the modules we actually built/installed in that flavour.  3) We
Pablo Greco d6c4c4
# grab the arch and invoke mod-sign.sh command to actually sign the modules.
Pablo Greco d6c4c4
#
Pablo Greco d6c4c4
# We have to do all of those things _after_ find-debuginfo runs, otherwise
Pablo Greco d6c4c4
# that will strip the signature off of the modules.
Pablo Greco d6c4c4
#
Pablo Greco d6c4c4
# Don't sign modules for the zfcpdump flavour as it is monolithic.
Pablo Greco d6c4c4
Pablo Greco d6c4c4
%define __modsign_install_post \
Pablo Greco d6c4c4
  if [ "%{signmodules}" -eq "1" ]; then \
Pablo Greco d6c4c4
    if [ "%{with_pae}" -ne "0" ]; then \
Pablo Greco d6c4c4
       %{modsign_cmd} certs/signing_key.pem.sign+lpae certs/signing_key.x509.sign+lpae $RPM_BUILD_ROOT/lib/modules/%{KVERREL}+lpae/ \
Pablo Greco d6c4c4
    fi \
Pablo Greco d6c4c4
    if [ "%{with_debug}" -ne "0" ]; then \
Pablo Greco d6c4c4
      %{modsign_cmd} certs/signing_key.pem.sign+debug certs/signing_key.x509.sign+debug $RPM_BUILD_ROOT/lib/modules/%{KVERREL}+debug/ \
Pablo Greco d6c4c4
    fi \
Pablo Greco d6c4c4
    if [ "%{with_up}" -ne "0" ]; then \
Pablo Greco d6c4c4
      %{modsign_cmd} certs/signing_key.pem.sign certs/signing_key.x509.sign $RPM_BUILD_ROOT/lib/modules/%{KVERREL}/ \
Pablo Greco d6c4c4
    fi \
Pablo Greco d6c4c4
  fi \
Pablo Greco d6c4c4
  if [ "%{zipmodules}" -eq "1" ]; then \
Pablo Greco d6c4c4
    find $RPM_BUILD_ROOT/lib/modules/ -type f -name '*.ko' | %{SOURCE79} %{?_smp_mflags}; \
Pablo Greco d6c4c4
  fi \
Pablo Greco d6c4c4
%{nil}
Pablo Greco d6c4c4
Pablo Greco d6c4c4
###
Pablo Greco d6c4c4
### Special hacks for debuginfo subpackages.
Pablo Greco d6c4c4
###
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# This macro is used by %%install, so we must redefine it before that.
Pablo Greco d6c4c4
%define debug_package %{nil}
Pablo Greco d6c4c4
Pablo Greco d6c4c4
%if %{with_debuginfo}
Pablo Greco d6c4c4
Pablo Greco d6c4c4
%ifnarch noarch
Pablo Greco d6c4c4
%global __debug_package 1
Pablo Greco d6c4c4
%files -f debugfiles.list debuginfo-common-%{_target_cpu}
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# We don't want to package debuginfo for self-tests and samples but
Pablo Greco d6c4c4
# we have to delete them to avoid an error messages about unpackaged
Pablo Greco d6c4c4
# files.
Pablo Greco d6c4c4
# Delete the debuginfo for for kernel-devel files
Pablo Greco d6c4c4
%define __remove_unwanted_dbginfo_install_post \
Pablo Greco d6c4c4
  if [ "%{with_selftests}" -ne "0" ]; then \
Pablo Greco d6c4c4
    rm -rf $RPM_BUILD_ROOT/usr/lib/debug/usr/libexec/ksamples; \
Pablo Greco d6c4c4
    rm -rf $RPM_BUILD_ROOT/usr/lib/debug/usr/libexec/kselftests; \
Pablo Greco d6c4c4
  fi \
Pablo Greco d6c4c4
  rm -rf $RPM_BUILD_ROOT/usr/lib/debug/usr/src; \
Pablo Greco d6c4c4
%{nil}
Pablo Greco d6c4c4
Pablo Greco d6c4c4
#
Pablo Greco d6c4c4
# Disgusting hack alert! We need to ensure we sign modules *after* all
Pablo Greco d6c4c4
# invocations of strip occur, which is in __debug_install_post if
Pablo Greco d6c4c4
# find-debuginfo.sh runs, and __os_install_post if not.
Pablo Greco d6c4c4
#
Pablo Greco d6c4c4
%define __spec_install_post \
Pablo Greco d6c4c4
  %{?__debug_package:%{__debug_install_post}}\
Pablo Greco d6c4c4
  %{__arch_install_post}\
Pablo Greco d6c4c4
  %{__os_install_post}\
Pablo Greco d6c4c4
  %{__remove_unwanted_dbginfo_install_post}\
Pablo Greco d6c4c4
  %{__modsign_install_post}
Pablo Greco d6c4c4
Pablo Greco d6c4c4
###
Pablo Greco d6c4c4
### install
Pablo Greco d6c4c4
###
Pablo Greco d6c4c4
Pablo Greco d6c4c4
%install
Pablo Greco d6c4c4
Pablo Greco d6c4c4
cd linux-%{KVERREL}
Pablo Greco d6c4c4
Pablo Greco d6c4c4
%if %{with_doc}
Pablo Greco d6c4c4
docdir=$RPM_BUILD_ROOT%{_datadir}/doc/kernel-doc-%{rpmversion}
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# copy the source over
Pablo Greco d6c4c4
mkdir -p $docdir
Pablo Greco d6c4c4
tar -h -f - --exclude=man --exclude='.*' -c Documentation | tar xf - -C $docdir
Pablo Greco d6c4c4
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# We have to do the headers install before the tools install because the
Pablo Greco d6c4c4
# kernel headers_install will remove any header files in /usr/include that
Pablo Greco d6c4c4
# it doesn't install itself.
Pablo Greco d6c4c4
Pablo Greco d6c4c4
%if %{with_headers}
Pablo Greco d6c4c4
# Install kernel headers
Pablo Greco d6c4c4
make ARCH=%{hdrarch} INSTALL_HDR_PATH=$RPM_BUILD_ROOT/usr headers_install
Pablo Greco d6c4c4
Pablo Greco d6c4c4
find $RPM_BUILD_ROOT/usr/include \
Pablo Greco d6c4c4
     \( -name .install -o -name .check -o \
Pablo Greco d6c4c4
        -name ..install.cmd -o -name ..check.cmd \) -delete
Pablo Greco d6c4c4
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
%if %{with_cross_headers}
Pablo Greco d6c4c4
HDR_ARCH_LIST='arm arm64 powerpc s390 x86'
Pablo Greco d6c4c4
mkdir -p $RPM_BUILD_ROOT/usr/tmp-headers
Pablo Greco d6c4c4
Pablo Greco d6c4c4
for arch in $HDR_ARCH_LIST; do
Pablo Greco d6c4c4
	mkdir $RPM_BUILD_ROOT/usr/tmp-headers/arch-${arch}
Pablo Greco d6c4c4
	make ARCH=${arch} INSTALL_HDR_PATH=$RPM_BUILD_ROOT/usr/tmp-headers/arch-${arch} headers_install
Pablo Greco d6c4c4
done
Pablo Greco d6c4c4
Pablo Greco d6c4c4
find $RPM_BUILD_ROOT/usr/tmp-headers \
Pablo Greco d6c4c4
     \( -name .install -o -name .check -o \
Pablo Greco d6c4c4
        -name ..install.cmd -o -name ..check.cmd \) -delete
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# Copy all the architectures we care about to their respective asm directories
Pablo Greco d6c4c4
for arch in $HDR_ARCH_LIST ; do
Pablo Greco d6c4c4
	mkdir -p $RPM_BUILD_ROOT/usr/${arch}-linux-gnu/include
Pablo Greco d6c4c4
	mv $RPM_BUILD_ROOT/usr/tmp-headers/arch-${arch}/include/* $RPM_BUILD_ROOT/usr/${arch}-linux-gnu/include/
Pablo Greco d6c4c4
done
Pablo Greco d6c4c4
Pablo Greco d6c4c4
rm -rf $RPM_BUILD_ROOT/usr/tmp-headers
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
%if %{with_kernel_abi_whitelists}
Pablo Greco d6c4c4
# kabi directory
Pablo Greco d6c4c4
INSTALL_KABI_PATH=$RPM_BUILD_ROOT/lib/modules/
Pablo Greco d6c4c4
mkdir -p $INSTALL_KABI_PATH
Pablo Greco d6c4c4
# install kabi releases directories
Pablo Greco d6c4c4
tar xjvf %{SOURCE300} -C $INSTALL_KABI_PATH
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco 11afb4
%if %{with_perf}
Pablo Greco 11afb4
# perf tool binary and supporting scripts/binaries
Pablo Greco 11afb4
%{perf_make} DESTDIR=$RPM_BUILD_ROOT lib=%{_lib} install-bin install-traceevent-plugins
Pablo Greco 11afb4
# remove the 'trace' symlink.
Pablo Greco 11afb4
rm -f %{buildroot}%{_bindir}/trace
Pablo Greco 11afb4
Pablo Greco 11afb4
# For both of the below, yes, this should be using a macro but right now
Pablo Greco 11afb4
# it's hard coded and we don't actually want it anyway right now.
Pablo Greco 11afb4
# Whoever wants examples can fix it up!
Pablo Greco 11afb4
Pablo Greco 11afb4
# remove examples
Pablo Greco 11afb4
rm -rf %{buildroot}/usr/lib/perf/examples
Pablo Greco 11afb4
# remove the stray files that somehow got packaged
Pablo Greco 11afb4
rm -rf %{buildroot}/usr/lib/perf/include/bpf/bpf.h
Pablo Greco 11afb4
rm -rf %{buildroot}/usr/lib/perf/include/bpf/stdio.h
Pablo Greco 11afb4
rm -rf %{buildroot}/usr/lib/perf/include/bpf/linux/socket.h
Pablo Greco 11afb4
rm -rf %{buildroot}/usr/lib/perf/include/bpf/pid_filter.h
Pablo Greco 11afb4
rm -rf %{buildroot}/usr/lib/perf/include/bpf/unistd.h
Pablo Greco 11afb4
Pablo Greco 11afb4
# python-perf extension
Pablo Greco 11afb4
%{perf_make} DESTDIR=$RPM_BUILD_ROOT install-python_ext
Pablo Greco 11afb4
Pablo Greco 11afb4
# perf man pages (note: implicit rpm magic compresses them later)
Pablo Greco 11afb4
mkdir -p %{buildroot}/%{_mandir}/man1
Pablo Greco 11afb4
%{perf_make} DESTDIR=$RPM_BUILD_ROOT install-man
Pablo Greco 11afb4
%endif
Pablo Greco 11afb4
Pablo Greco 11afb4
%if %{with_tools}
Pablo Greco 11afb4
%ifarch %{cpupowerarchs}
Pablo Greco 11afb4
%{make} -C tools/power/cpupower DESTDIR=$RPM_BUILD_ROOT libdir=%{_libdir} mandir=%{_mandir} CPUFREQ_BENCH=false install
Pablo Greco 11afb4
rm -f %{buildroot}%{_libdir}/*.{a,la}
Pablo Greco 11afb4
%find_lang cpupower
Pablo Greco 11afb4
mv cpupower.lang ../
Pablo Greco 11afb4
%ifarch x86_64
Pablo Greco 11afb4
    pushd tools/power/cpupower/debug/x86_64
Pablo Greco 11afb4
    install -m755 centrino-decode %{buildroot}%{_bindir}/centrino-decode
Pablo Greco 11afb4
    install -m755 powernow-k8-decode %{buildroot}%{_bindir}/powernow-k8-decode
Pablo Greco 11afb4
    popd
Pablo Greco 11afb4
%endif
Pablo Greco 11afb4
chmod 0755 %{buildroot}%{_libdir}/libcpupower.so*
Pablo Greco 11afb4
mkdir -p %{buildroot}%{_unitdir} %{buildroot}%{_sysconfdir}/sysconfig
Pablo Greco 11afb4
install -m644 %{SOURCE2000} %{buildroot}%{_unitdir}/cpupower.service
Pablo Greco 11afb4
install -m644 %{SOURCE2001} %{buildroot}%{_sysconfdir}/sysconfig/cpupower
Pablo Greco 11afb4
%endif
Pablo Greco 11afb4
%ifarch x86_64
Pablo Greco 11afb4
   mkdir -p %{buildroot}%{_mandir}/man8
Pablo Greco 11afb4
   pushd tools/power/x86/x86_energy_perf_policy
Pablo Greco 11afb4
   make DESTDIR=%{buildroot} install
Pablo Greco 11afb4
   popd
Pablo Greco 11afb4
   pushd tools/power/x86/turbostat
Pablo Greco 11afb4
   make DESTDIR=%{buildroot} install
Pablo Greco 11afb4
   popd
Pablo Greco 11afb4
%endif #turbostat/x86_energy_perf_policy
Pablo Greco 11afb4
pushd tools/thermal/tmon
Pablo Greco 11afb4
make INSTALL_ROOT=%{buildroot} install
Pablo Greco 11afb4
popd
Pablo Greco 11afb4
pushd tools/iio
Pablo Greco 11afb4
make DESTDIR=%{buildroot} install
Pablo Greco 11afb4
popd
Pablo Greco 11afb4
pushd tools/gpio
Pablo Greco 11afb4
make DESTDIR=%{buildroot} install
Pablo Greco 11afb4
popd
Pablo Greco 11afb4
pushd tools/kvm/kvm_stat
Pablo Greco 11afb4
make INSTALL_ROOT=%{buildroot} install-tools
Pablo Greco 11afb4
make INSTALL_ROOT=%{buildroot} install-man
Pablo Greco 11afb4
popd
Pablo Greco 11afb4
%endif
Pablo Greco 11afb4
Pablo Greco 11afb4
%if %{with_bpftool}
Pablo Greco 11afb4
pushd tools/bpf/bpftool
Pablo Greco 11afb4
%{bpftool_make} prefix=%{_prefix} bash_compdir=%{_sysconfdir}/bash_completion.d/ mandir=%{_mandir} install doc-install
Pablo Greco 11afb4
popd
Pablo Greco 11afb4
%endif
Pablo Greco 11afb4
Pablo Greco d6c4c4
%if %{with_selftests}
Pablo Greco d6c4c4
pushd samples
Pablo Greco d6c4c4
install -d %{buildroot}%{_libexecdir}/ksamples
Pablo Greco d6c4c4
# install bpf samples
Pablo Greco d6c4c4
pushd bpf
Pablo Greco d6c4c4
install -d %{buildroot}%{_libexecdir}/ksamples/bpf
Pablo Greco d6c4c4
find -type f -executable -exec install -m755 {} %{buildroot}%{_libexecdir}/ksamples/bpf \;
Pablo Greco d6c4c4
install -m755 *.sh %{buildroot}%{_libexecdir}/ksamples/bpf
Pablo Greco d6c4c4
# test_lwt_bpf.sh compiles test_lwt_bpf.c when run; this works only from the
Pablo Greco d6c4c4
# kernel tree. Just remove it.
Pablo Greco d6c4c4
rm %{buildroot}%{_libexecdir}/ksamples/bpf/test_lwt_bpf.sh
Pablo Greco d6c4c4
install -m644 tcp_bpf.readme %{buildroot}%{_libexecdir}/ksamples/bpf
Pablo Greco d6c4c4
popd
Pablo Greco d6c4c4
# install pktgen samples
Pablo Greco d6c4c4
pushd pktgen
Pablo Greco d6c4c4
install -d %{buildroot}%{_libexecdir}/ksamples/pktgen
Pablo Greco d6c4c4
find . -type f -executable -exec install -m755 {} %{buildroot}%{_libexecdir}/ksamples/pktgen/{} \;
Pablo Greco d6c4c4
find . -type f ! -executable -exec install -m644 {} %{buildroot}%{_libexecdir}/ksamples/pktgen/{} \;
Pablo Greco d6c4c4
popd
Pablo Greco d6c4c4
popd
Pablo Greco d6c4c4
# install drivers/net/mlxsw selftests
Pablo Greco d6c4c4
pushd tools/testing/selftests/drivers/net/mlxsw
Pablo Greco d6c4c4
find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/drivers/net/mlxsw/{} \;
Pablo Greco d6c4c4
find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/drivers/net/mlxsw/{} \;
Pablo Greco d6c4c4
find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/drivers/net/mlxsw/{} \;
Pablo Greco d6c4c4
popd
Pablo Greco d6c4c4
# install net/forwarding selftests
Pablo Greco d6c4c4
pushd tools/testing/selftests/net/forwarding
Pablo Greco d6c4c4
find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/net/forwarding/{} \;
Pablo Greco d6c4c4
find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/net/forwarding/{} \;
Pablo Greco d6c4c4
find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/net/forwarding/{} \;
Pablo Greco d6c4c4
popd
Pablo Greco d6c4c4
# install tc-testing selftests
Pablo Greco d6c4c4
pushd tools/testing/selftests/tc-testing
Pablo Greco d6c4c4
find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/tc-testing/{} \;
Pablo Greco d6c4c4
find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/tc-testing/{} \;
Pablo Greco d6c4c4
find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/tc-testing/{} \;
Pablo Greco d6c4c4
popd
Pablo Greco d6c4c4
# install livepatch selftests
Pablo Greco d6c4c4
pushd tools/testing/selftests/livepatch
Pablo Greco d6c4c4
find -type d -exec install -d %{buildroot}%{_libexecdir}/kselftests/livepatch/{} \;
Pablo Greco d6c4c4
find -type f -executable -exec install -D -m755 {} %{buildroot}%{_libexecdir}/kselftests/livepatch/{} \;
Pablo Greco d6c4c4
find -type f ! -executable -exec install -D -m644 {} %{buildroot}%{_libexecdir}/kselftests/livepatch/{} \;
Pablo Greco d6c4c4
popd
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
###
Pablo Greco d6c4c4
### clean
Pablo Greco d6c4c4
###
Pablo Greco d6c4c4
Pablo Greco d6c4c4
###
Pablo Greco d6c4c4
### scripts
Pablo Greco d6c4c4
###
Pablo Greco d6c4c4
Pablo Greco 11afb4
%if %{with_tools}
Pablo Greco 11afb4
%post -n kernel-tools-libs
Pablo Greco 11afb4
/sbin/ldconfig
Pablo Greco 11afb4
Pablo Greco 11afb4
%postun -n kernel-tools-libs
Pablo Greco 11afb4
/sbin/ldconfig
Pablo Greco 11afb4
%endif
Pablo Greco 11afb4
Pablo Greco d6c4c4
#
Pablo Greco d6c4c4
# This macro defines a %%post script for a kernel*-devel package.
Pablo Greco d6c4c4
#	%%kernel_devel_post [<subpackage>]
Pablo Greco d6c4c4
# Note we don't run hardlink if ostree is in use, as ostree is
Pablo Greco d6c4c4
# a far more sophisticated hardlink implementation.
Pablo Greco d6c4c4
# https://github.com/projectatomic/rpm-ostree/commit/58a79056a889be8814aa51f507b2c7a4dccee526
Pablo Greco d6c4c4
#
Pablo Greco d6c4c4
%define kernel_devel_post() \
Pablo Greco d6c4c4
%{expand:%%post %{?1:%{1}-}devel}\
Pablo Greco d6c4c4
if [ -f /etc/sysconfig/kernel ]\
Pablo Greco d6c4c4
then\
Pablo Greco d6c4c4
    . /etc/sysconfig/kernel || exit $?\
Pablo Greco d6c4c4
fi\
Pablo Greco d6c4c4
if [ "$HARDLINK" != "no" -a -x /usr/sbin/hardlink -a ! -e /run/ostree-booted ] \
Pablo Greco d6c4c4
then\
Pablo Greco d6c4c4
    (cd /usr/src/kernels/%{KVERREL}%{?1:+%{1}} &&\
Pablo Greco d6c4c4
     /usr/bin/find . -type f | while read f; do\
Pablo Greco d6c4c4
       hardlink -c /usr/src/kernels/*%{?dist}.*/$f $f\
Pablo Greco d6c4c4
     done)\
Pablo Greco d6c4c4
fi\
Pablo Greco d6c4c4
%{nil}
Pablo Greco d6c4c4
Pablo Greco d6c4c4
#
Pablo Greco d6c4c4
# This macro defines a %%post script for a kernel*-modules-extra package.
Pablo Greco d6c4c4
# It also defines a %%postun script that does the same thing.
Pablo Greco d6c4c4
#	%%kernel_modules_extra_post [<subpackage>]
Pablo Greco d6c4c4
#
Pablo Greco d6c4c4
%define kernel_modules_extra_post() \
Pablo Greco d6c4c4
%{expand:%%post %{?1:%{1}-}modules-extra}\
Pablo Greco d6c4c4
/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\
Pablo Greco d6c4c4
%{nil}\
Pablo Greco d6c4c4
%{expand:%%postun %{?1:%{1}-}modules-extra}\
Pablo Greco d6c4c4
/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\
Pablo Greco d6c4c4
%{nil}
Pablo Greco d6c4c4
Pablo Greco d6c4c4
#
Pablo Greco d6c4c4
# This macro defines a %%post script for a kernel*-modules-internal package.
Pablo Greco d6c4c4
# It also defines a %%postun script that does the same thing.
Pablo Greco d6c4c4
#	%%kernel_modules_internal_post [<subpackage>]
Pablo Greco d6c4c4
#
Pablo Greco d6c4c4
%define kernel_modules_internal_post() \
Pablo Greco d6c4c4
%{expand:%%post %{?1:%{1}-}modules-internal}\
Pablo Greco d6c4c4
/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\
Pablo Greco d6c4c4
%{nil}\
Pablo Greco d6c4c4
%{expand:%%postun %{?1:%{1}-}modules-internal}\
Pablo Greco d6c4c4
/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\
Pablo Greco d6c4c4
%{nil}
Pablo Greco d6c4c4
Pablo Greco d6c4c4
#
Pablo Greco d6c4c4
# This macro defines a %%post script for a kernel*-modules package.
Pablo Greco d6c4c4
# It also defines a %%postun script that does the same thing.
Pablo Greco d6c4c4
#	%%kernel_modules_post [<subpackage>]
Pablo Greco d6c4c4
#
Pablo Greco d6c4c4
%define kernel_modules_post() \
Pablo Greco d6c4c4
%{expand:%%post %{?1:%{1}-}modules}\
Pablo Greco d6c4c4
/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\
Pablo Greco d6c4c4
%{nil}\
Pablo Greco d6c4c4
%{expand:%%postun %{?1:%{1}-}modules}\
Pablo Greco d6c4c4
/sbin/depmod -a %{KVERREL}%{?1:+%{1}}\
Pablo Greco d6c4c4
%{nil}
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# This macro defines a %%posttrans script for a kernel package.
Pablo Greco d6c4c4
#	%%kernel_variant_posttrans [<subpackage>]
Pablo Greco d6c4c4
# More text can follow to go at the end of this variant's %%post.
Pablo Greco d6c4c4
#
Pablo Greco d6c4c4
%define kernel_variant_posttrans() \
Pablo Greco d6c4c4
%{expand:%%posttrans %{?1:%{1}-}core}\
Pablo Greco d6c4c4
/bin/kernel-install add %{KVERREL}%{?1:+%{1}} /lib/modules/%{KVERREL}%{?1:+%{1}}/vmlinuz || exit $?\
Pablo Greco d6c4c4
%{nil}
Pablo Greco d6c4c4
Pablo Greco d6c4c4
#
Pablo Greco d6c4c4
# This macro defines a %%post script for a kernel package and its devel package.
Pablo Greco d6c4c4
#	%%kernel_variant_post [-v <subpackage>] [-r <replace>]
Pablo Greco d6c4c4
# More text can follow to go at the end of this variant's %%post.
Pablo Greco d6c4c4
#
Pablo Greco d6c4c4
%define kernel_variant_post(v:r:) \
Pablo Greco d6c4c4
%{expand:%%kernel_devel_post %{?-v*}}\
Pablo Greco d6c4c4
%{expand:%%kernel_modules_post %{?-v*}}\
Pablo Greco d6c4c4
%{expand:%%kernel_modules_extra_post %{?-v*}}\
Pablo Greco d6c4c4
%{expand:%%kernel_modules_internal_post %{?-v*}}\
Pablo Greco d6c4c4
%{expand:%%kernel_variant_posttrans %{?-v*}}\
Pablo Greco d6c4c4
%{expand:%%post %{?-v*:%{-v*}-}core}\
Pablo Greco d6c4c4
%{-r:\
Pablo Greco d6c4c4
if [ `uname -i` == "x86_64" -o `uname -i` == "i386" ] &&\
Pablo Greco d6c4c4
   [ -f /etc/sysconfig/kernel ]; then\
Pablo Greco d6c4c4
  /bin/sed -r -i -e 's/^DEFAULTKERNEL=%{-r*}$/DEFAULTKERNEL=kernel%{?-v:-%{-v*}}/' /etc/sysconfig/kernel || exit $?\
Pablo Greco d6c4c4
fi}\
Pablo Greco d6c4c4
%{nil}
Pablo Greco d6c4c4
Pablo Greco d6c4c4
#
Pablo Greco d6c4c4
# This macro defines a %%preun script for a kernel package.
Pablo Greco d6c4c4
#	%%kernel_variant_preun <subpackage>
Pablo Greco d6c4c4
#
Pablo Greco d6c4c4
%define kernel_variant_preun() \
Pablo Greco d6c4c4
%{expand:%%preun %{?1:%{1}-}core}\
Pablo Greco d6c4c4
/bin/kernel-install remove %{KVERREL}%{?1:+%{1}} /lib/modules/%{KVERREL}%{?1:+%{1}}/vmlinuz || exit $?\
Pablo Greco d6c4c4
%{nil}
Pablo Greco d6c4c4
Pablo Greco d6c4c4
%kernel_variant_preun
Pablo Greco d6c4c4
%kernel_variant_post -r kernel-smp
Pablo Greco d6c4c4
Pablo Greco d6c4c4
%if %{with_pae}
Pablo Greco d6c4c4
%kernel_variant_preun lpae
Pablo Greco d6c4c4
%kernel_variant_post -v lpae -r (kernel|kernel-smp)
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
%kernel_variant_preun debug
Pablo Greco d6c4c4
%kernel_variant_post -v debug
Pablo Greco d6c4c4
Pablo Greco d6c4c4
%if %{with_zfcpdump}
Pablo Greco d6c4c4
%kernel_variant_preun zfcpdump
Pablo Greco d6c4c4
%kernel_variant_post -v zfcpdump
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
if [ -x /sbin/ldconfig ]
Pablo Greco d6c4c4
then
Pablo Greco d6c4c4
    /sbin/ldconfig -X || exit $?
Pablo Greco d6c4c4
fi
Pablo Greco d6c4c4
Pablo Greco d6c4c4
###
Pablo Greco d6c4c4
### file lists
Pablo Greco d6c4c4
###
Pablo Greco d6c4c4
Pablo Greco d6c4c4
%if %{with_headers}
Pablo Greco d6c4c4
%files headers
Pablo Greco d6c4c4
/usr/include/*
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
%if %{with_cross_headers}
Pablo Greco d6c4c4
%files cross-headers
Pablo Greco d6c4c4
/usr/*-linux-gnu/include/*
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
%if %{with_kernel_abi_whitelists}
Pablo Greco d6c4c4
%files -n kernel-abi-whitelists
Pablo Greco d6c4c4
/lib/modules/kabi-*
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
%if %{with_kabidw_base}
Pablo Greco d6c4c4
%ifarch x86_64 s390x ppc64 ppc64le aarch64
Pablo Greco d6c4c4
%files kabidw-base
Pablo Greco d6c4c4
%defattr(-,root,root)
Pablo Greco d6c4c4
/kabidw-base/%{_target_cpu}/*
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# only some architecture builds need kernel-doc
Pablo Greco d6c4c4
%if %{with_doc}
Pablo Greco d6c4c4
%files doc
Pablo Greco d6c4c4
%defattr(-,root,root)
Pablo Greco d6c4c4
%{_datadir}/doc/kernel-doc-%{rpmversion}/Documentation/*
Pablo Greco d6c4c4
%dir %{_datadir}/doc/kernel-doc-%{rpmversion}/Documentation
Pablo Greco d6c4c4
%dir %{_datadir}/doc/kernel-doc-%{rpmversion}
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco 11afb4
%if %{with_perf}
Pablo Greco 11afb4
%files -n perf
Pablo Greco 11afb4
%{_bindir}/perf
Pablo Greco 11afb4
%{_libdir}/libperf-jvmti.so
Pablo Greco 11afb4
%dir %{_libdir}/traceevent/plugins
Pablo Greco 11afb4
%{_libdir}/traceevent/plugins/*
Pablo Greco 11afb4
%dir %{_libexecdir}/perf-core
Pablo Greco 11afb4
%{_libexecdir}/perf-core/*
Pablo Greco 11afb4
%{_datadir}/perf-core/*
Pablo Greco 11afb4
%{_mandir}/man[1-8]/perf*
Pablo Greco 11afb4
%{_sysconfdir}/bash_completion.d/perf
Pablo Greco 11afb4
%doc linux-%{KVERREL}/tools/perf/Documentation/examples.txt
Pablo Greco 11afb4
%{_docdir}/perf-tip/tips.txt
Pablo Greco 11afb4
Pablo Greco 11afb4
%files -n python3-perf
Pablo Greco 11afb4
%{python3_sitearch}/*
Pablo Greco 11afb4
Pablo Greco 11afb4
%if %{with_debuginfo}
Pablo Greco 11afb4
%files -f perf-debuginfo.list -n perf-debuginfo
Pablo Greco 11afb4
Pablo Greco 11afb4
%files -f python3-perf-debuginfo.list -n python3-perf-debuginfo
Pablo Greco 11afb4
%endif
Pablo Greco 11afb4
%endif # with_perf
Pablo Greco 11afb4
Pablo Greco 11afb4
%if %{with_tools}
Pablo Greco 11afb4
%ifnarch %{cpupowerarchs}
Pablo Greco 121f73
%files -n kernel-tools
Pablo Greco 121f73
%else
Pablo Greco 11afb4
%files -n kernel-tools -f cpupower.lang
Pablo Greco 11afb4
%{_bindir}/cpupower
Pablo Greco 11afb4
%{_datadir}/bash-completion/completions/cpupower
Pablo Greco 11afb4
%ifarch x86_64
Pablo Greco 11afb4
%{_bindir}/centrino-decode
Pablo Greco 11afb4
%{_bindir}/powernow-k8-decode
Pablo Greco 11afb4
%endif
Pablo Greco 11afb4
%{_unitdir}/cpupower.service
Pablo Greco 11afb4
%{_mandir}/man[1-8]/cpupower*
Pablo Greco 11afb4
%config(noreplace) %{_sysconfdir}/sysconfig/cpupower
Pablo Greco 11afb4
%ifarch x86_64
Pablo Greco 11afb4
%{_bindir}/x86_energy_perf_policy
Pablo Greco 11afb4
%{_mandir}/man8/x86_energy_perf_policy*
Pablo Greco 11afb4
%{_bindir}/turbostat
Pablo Greco 11afb4
%{_mandir}/man8/turbostat*
Pablo Greco 11afb4
%endif
Pablo Greco 11afb4
%endif # cpupowerarchs
Pablo Greco 11afb4
%{_bindir}/tmon
Pablo Greco 11afb4
%{_bindir}/iio_event_monitor
Pablo Greco 11afb4
%{_bindir}/iio_generic_buffer
Pablo Greco 11afb4
%{_bindir}/lsiio
Pablo Greco 11afb4
%{_bindir}/lsgpio
Pablo Greco 11afb4
%{_bindir}/gpio-hammer
Pablo Greco 11afb4
%{_bindir}/gpio-event-mon
Pablo Greco 11afb4
%{_mandir}/man1/kvm_stat*
Pablo Greco 11afb4
%{_bindir}/kvm_stat
Pablo Greco 11afb4
Pablo Greco 11afb4
%if %{with_debuginfo}
Pablo Greco 11afb4
%files -f kernel-tools-debuginfo.list -n kernel-tools-debuginfo
Pablo Greco 11afb4
%endif
Pablo Greco 11afb4
Pablo Greco 11afb4
%ifarch %{cpupowerarchs}
Pablo Greco 11afb4
%files -n kernel-tools-libs
Pablo Greco 11afb4
%{_libdir}/libcpupower.so.0
Pablo Greco 11afb4
%{_libdir}/libcpupower.so.0.0.1
Pablo Greco 11afb4
Pablo Greco 11afb4
%files -n kernel-tools-libs-devel
Pablo Greco 11afb4
%{_libdir}/libcpupower.so
Pablo Greco 11afb4
%{_includedir}/cpufreq.h
Pablo Greco 11afb4
%endif
Pablo Greco 11afb4
%endif # with_tools
Pablo Greco 11afb4
Pablo Greco 11afb4
%if %{with_bpftool}
Pablo Greco 11afb4
%files -n bpftool
Pablo Greco 11afb4
%{_sbindir}/bpftool
Pablo Greco 11afb4
%{_sysconfdir}/bash_completion.d/bpftool
Pablo Greco 11afb4
%{_mandir}/man8/bpftool-cgroup.8.gz
Pablo Greco 11afb4
%{_mandir}/man8/bpftool-map.8.gz
Pablo Greco 11afb4
%{_mandir}/man8/bpftool-prog.8.gz
Pablo Greco 11afb4
%{_mandir}/man8/bpftool-perf.8.gz
Pablo Greco 11afb4
%{_mandir}/man8/bpftool.8.gz
Pablo Greco 11afb4
%{_mandir}/man7/bpf-helpers.7.gz
Pablo Greco 11afb4
%{_mandir}/man8/bpftool-net.8.gz
Pablo Greco 11afb4
%{_mandir}/man8/bpftool-feature.8.gz
Pablo Greco 11afb4
%{_mandir}/man8/bpftool-btf.8.gz
Pablo Greco 11afb4
Pablo Greco 11afb4
%if %{with_debuginfo}
Pablo Greco 11afb4
%files -f bpftool-debuginfo.list -n bpftool-debuginfo
Pablo Greco 11afb4
%defattr(-,root,root)
Pablo Greco 11afb4
%endif
Pablo Greco 11afb4
%endif
Pablo Greco 11afb4
Pablo Greco d6c4c4
%if %{with_selftests}
Pablo Greco d6c4c4
%files selftests-internal
Pablo Greco d6c4c4
%{_libexecdir}/ksamples
Pablo Greco d6c4c4
%{_libexecdir}/kselftests
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# empty meta-package
Pablo Greco d6c4c4
%ifnarch %nobuildarches noarch
Pablo Greco d6c4c4
%files
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
%if %{with_gcov}
Pablo Greco d6c4c4
%ifarch x86_64 s390x ppc64le aarch64
Pablo Greco d6c4c4
%files gcov
Pablo Greco d6c4c4
%{_builddir}
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
%endif
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# This is %%{image_install_path} on an arch where that includes ELF files,
Pablo Greco d6c4c4
# or empty otherwise.
Pablo Greco d6c4c4
%define elf_image_install_path %{?kernel_image_elf:%{image_install_path}}
Pablo Greco d6c4c4
Pablo Greco d6c4c4
#
Pablo Greco d6c4c4
# This macro defines the %%files sections for a kernel package
Pablo Greco d6c4c4
# and its devel and debuginfo packages.
Pablo Greco d6c4c4
#	%%kernel_variant_files [-k vmlinux] <condition> <subpackage> <without_modules>
Pablo Greco d6c4c4
#
Pablo Greco d6c4c4
%define kernel_variant_files(k:) \
Pablo Greco d6c4c4
%if %{2}\
Pablo Greco d6c4c4
%{expand:%%files -f kernel-%{?3:%{3}-}core.list %{?1:-f kernel-%{?3:%{3}-}ldsoconf.list} %{?3:%{3}-}core}\
Pablo Greco d6c4c4
%{!?_licensedir:%global license %%doc}\
Pablo Greco d6c4c4
%license linux-%{KVERREL}/COPYING-%{version}\
Pablo Greco d6c4c4
/lib/modules/%{KVERREL}%{?3:+%{3}}/%{?-k:%{-k*}}%{!?-k:vmlinuz}\
Pablo Greco d6c4c4
%ghost /%{image_install_path}/%{?-k:%{-k*}}%{!?-k:vmlinuz}-%{KVERREL}%{?3:+%{3}}\
Pablo Greco d6c4c4
/lib/modules/%{KVERREL}%{?3:+%{3}}/.vmlinuz.hmac \
Pablo Greco d6c4c4
%ghost /%{image_install_path}/.vmlinuz-%{KVERREL}%{?3:+%{3}}.hmac \
Pablo Greco d6c4c4
%ifarch %{arm} aarch64\
Pablo Greco d6c4c4
/lib/modules/%{KVERREL}%{?3:+%{3}}/dtb \
Pablo Greco d6c4c4
%ghost /%{image_install_path}/dtb-%{KVERREL}%{?3:+%{3}} \
Pablo Greco d6c4c4
%endif\
Pablo Greco d6c4c4
%attr(600,root,root) /lib/modules/%{KVERREL}%{?3:+%{3}}/System.map\
Pablo Greco d6c4c4
%ghost /boot/System.map-%{KVERREL}%{?3:+%{3}}\
Pablo Greco d6c4c4
/lib/modules/%{KVERREL}%{?3:+%{3}}/symvers.gz\
Pablo Greco d6c4c4
/lib/modules/%{KVERREL}%{?3:+%{3}}/config\
Pablo Greco d6c4c4
%ghost /boot/symvers-%{KVERREL}%{?3:+%{3}}.gz\
Pablo Greco d6c4c4
%ghost /boot/config-%{KVERREL}%{?3:+%{3}}\
Pablo Greco d6c4c4
%ghost /boot/initramfs-%{KVERREL}%{?3:+%{3}}.img\
Pablo Greco d6c4c4
%dir /lib/modules\
Pablo Greco d6c4c4
%dir /lib/modules/%{KVERREL}%{?3:+%{3}}\
Pablo Greco d6c4c4
%dir /lib/modules/%{KVERREL}%{?3:+%{3}}/kernel\
Pablo Greco d6c4c4
/lib/modules/%{KVERREL}%{?3:+%{3}}/build\
Pablo Greco d6c4c4
/lib/modules/%{KVERREL}%{?3:+%{3}}/source\
Pablo Greco d6c4c4
/lib/modules/%{KVERREL}%{?3:+%{3}}/updates\
Pablo Greco d6c4c4
/lib/modules/%{KVERREL}%{?3:+%{3}}/bls.conf\
Pablo Greco d6c4c4
%{_datadir}/doc/kernel-keys/%{KVERREL}%{?3:+%{3}}/kernel-signing-ca.cer\
Pablo Greco d6c4c4
%ifarch s390x ppc64le\
Pablo Greco d6c4c4
%if 0%{!?4:1}\
Pablo Greco d6c4c4
%{_datadir}/doc/kernel-keys/%{KVERREL}%{?3:+%{3}}/%{signing_key_filename} \
Pablo Greco d6c4c4
%endif\
Pablo Greco d6c4c4
%endif\
Pablo Greco d6c4c4
%if %{1}\
Pablo Greco d6c4c4
/lib/modules/%{KVERREL}%{?3:+%{3}}/vdso\
Pablo Greco d6c4c4
%endif\
Pablo Greco d6c4c4
/lib/modules/%{KVERREL}%{?3:+%{3}}/modules.*\
Pablo Greco d6c4c4
%{expand:%%files -f kernel-%{?3:%{3}-}modules.list %{?3:%{3}-}modules}\
Pablo Greco d6c4c4
%{expand:%%files %{?3:%{3}-}devel}\
Pablo Greco d6c4c4
%defverify(not mtime)\
Pablo Greco d6c4c4
/usr/src/kernels/%{KVERREL}%{?3:+%{3}}\
Pablo Greco d6c4c4
%{expand:%%files %{?3:%{3}-}modules-extra}\
Pablo Greco d6c4c4
%config(noreplace) /etc/modprobe.d/*-blacklist.conf\
Pablo Greco d6c4c4
/lib/modules/%{KVERREL}%{?3:+%{3}}/extra\
Pablo Greco d6c4c4
%{expand:%%files %{?3:%{3}-}modules-internal}\
Pablo Greco d6c4c4
/lib/modules/%{KVERREL}%{?3:+%{3}}/internal\
Pablo Greco d6c4c4
%if %{with_debuginfo}\
Pablo Greco d6c4c4
%ifnarch noarch\
Pablo Greco d6c4c4
%{expand:%%files -f debuginfo%{?3}.list %{?3:%{3}-}debuginfo}\
Pablo Greco d6c4c4
%endif\
Pablo Greco d6c4c4
%endif\
Pablo Greco d6c4c4
%if %{?3:1} %{!?3:0}\
Pablo Greco d6c4c4
%{expand:%%files %{3}}\
Pablo Greco d6c4c4
%endif\
Pablo Greco d6c4c4
%endif\
Pablo Greco d6c4c4
%{nil}
Pablo Greco d6c4c4
Pablo Greco d6c4c4
%kernel_variant_files %{_use_vdso} %{with_up}
Pablo Greco d6c4c4
%kernel_variant_files %{_use_vdso} %{with_debug} debug
Pablo Greco d6c4c4
%kernel_variant_files %{use_vdso} %{with_pae} lpae
Pablo Greco d6c4c4
%kernel_variant_files %{_use_vdso} %{with_zfcpdump} zfcpdump 1
Pablo Greco d6c4c4
Pablo Greco d6c4c4
%define kernel_variant_ipaclones(k:) \
Pablo Greco d6c4c4
%if %{1}\
Pablo Greco d6c4c4
%if %{with_ipaclones}\
Pablo Greco d6c4c4
%{expand:%%files %{?2:%{2}-}ipaclones-internal}\
Pablo Greco d6c4c4
%defattr(-,root,root)\
Pablo Greco d6c4c4
%defverify(not mtime)\
Pablo Greco d6c4c4
/usr/src/kernels/%{KVERREL}%{?2:+%{2}}-ipaclones\
Pablo Greco d6c4c4
%endif\
Pablo Greco d6c4c4
%endif\
Pablo Greco d6c4c4
%{nil}
Pablo Greco d6c4c4
Pablo Greco d6c4c4
%kernel_variant_ipaclones %{with_up}
Pablo Greco d6c4c4
Pablo Greco d6c4c4
# plz don't put in a version string unless you're going to tag
Pablo Greco d6c4c4
# and build.
Pablo Greco d6c4c4
#
Pablo Greco d6c4c4
#
Pablo Greco d6c4c4
%changelog
Pablo Greco a50509
* Mon Feb 24 2020 Pablo Greco <pgreco@centosproject.org> - 5.4.20-200
Pablo Greco a50509
- Import from f31
Pablo Greco a50509
- Remove Fedora signing token
Pablo Greco a50509
- Disable CONFIG_DEBUG_INFO_BTF
Pablo Greco a50509
- Import headers and tools from Fedora
Pablo Greco a50509
- Fix BR foor CentOS 7