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