summaryrefslogtreecommitdiffstats
path: root/kernel.spec
diff options
context:
space:
mode:
authorLaura Abbott <labbott@redhat.com>2019-10-21 15:27:30 -0400
committerLaura Abbott <labbott@redhat.com>2019-10-29 15:28:51 -0400
commitc68fd73909c5522f3d58a8267c4a0e50b3d88a5a (patch)
tree064cf785454c1085ea471f49cc0121285a0dd8ed /kernel.spec
parent1d23fdad0ff58ca20761935b5c27ce9590cd7857 (diff)
downloadkernel-c68fd73909c5522f3d58a8267c4a0e50b3d88a5a.tar.gz
kernel-c68fd73909c5522f3d58a8267c4a0e50b3d88a5a.tar.xz
kernel-c68fd73909c5522f3d58a8267c4a0e50b3d88a5a.zip
Add support for building ipaclones
While Fedora doesn't officially support kpatch, there's work being done to enable kpatch elsewhere. Add the packaging work but don't actually build anything.
Diffstat (limited to 'kernel.spec')
-rw-r--r--kernel.spec58
1 files changed, 58 insertions, 0 deletions
diff --git a/kernel.spec b/kernel.spec
index 47fdd82f2..9ad95794c 100644
--- a/kernel.spec
+++ b/kernel.spec
@@ -133,6 +133,11 @@ Summary: The Linux kernel
# gcov support
%define with_gcov %{?_with_gcov: 1} %{?!_with_gcov: 0}
+#
+# ipa_clone support
+%define with_ipaclones %{?_without_ipaclones: 0} %{?!_without_ipaclones: 1}
+
+
# Set debugbuildsenabled to 1 for production (build separate debug kernels)
# and 0 for rawhide (all kernels are debug kernels).
# See also 'make debug' and 'make release'.
@@ -144,6 +149,8 @@ Summary: The Linux kernel
%define with_cross_headers 0
# no selftests for now
%define with_selftests 0
+# no ipa_clone for now
+%define with_ipaclones 0
%endif
%if %{with_verbose}
@@ -189,6 +196,16 @@ Summary: The Linux kernel
%define with_kabidwchk 0
%endif
+# kpatch_kcflags are extra compiler flags applied to base kernel
+# -fdump-ipa-clones is enabled only for base kernels on selected arches
+%if %{with_ipaclones}
+%ifarch x86_64 ppc64le
+%define kpatch_kcflags -fdump-ipa-clones
+%else
+%define with_ipaclones 0
+%endif
+%endif
+
%define make_target bzImage
%define image_install_path boot
@@ -751,6 +768,18 @@ against the %{?2:%{2} }kernel package.\
%{nil}
#
+# kernel-<variant>-ipaclones-internal package
+#
+%define kernel_ipaclones_package() \
+%package %{?1:%{1}-}ipaclones-internal\
+Summary: *.ipa-clones files generated by -fdump-ipa-clones for kernel%{?1:-%{1}}\
+Group: System Environment/Kernel\
+AutoReqProv: no\
+%description %{?1:%{1}-}ipaclones-internal\
+This package provides *.ipa-clones files.\
+%{nil}
+
+#
# This macro creates a kernel-<subpackage>-modules-extra package.
# %%kernel_modules_extra_package <subpackage> <pretty-name>
#
@@ -858,6 +887,10 @@ Linux operating system. The kernel handles the basic functions
of the operating system: memory allocation, process allocation, device
input and output, etc.
+%if %{with_ipaclones}
+%kernel_ipaclones_package
+%endif
+
%prep
# do a few sanity-checks for --with *only builds
%if %{with_baseonly}
@@ -1574,6 +1607,18 @@ BuildKernel() {
# build a BLS config for this kernel
%{SOURCE43} "$KernelVer" "$RPM_BUILD_ROOT" "%{?variant}"
+
+%if %{with_ipaclones}
+ MAXPROCS=$(echo %{?_smp_mflags} | sed -n 's/-j\s*\([0-9]\+\)/\1/p')
+ if [ -z "$MAXPROCS" ]; then
+ MAXPROCS=1
+ fi
+ if [ "$Flavour" == "" ]; then
+ mkdir -p $RPM_BUILD_ROOT/$DevelDir-ipaclones
+ find . -name '*.ipa-clones' | xargs -i{} -r -n 1 -P $MAXPROCS install -m 644 -D "{}" "$RPM_BUILD_ROOT/$DevelDir-ipaclones/{}"
+ fi
+%endif
+
}
###
@@ -1985,6 +2030,19 @@ fi
%kernel_variant_files %{_use_vdso} %{with_debug} debug
%kernel_variant_files %{use_vdso} %{with_pae} lpae
+%define kernel_variant_ipaclones(k:) \
+%if %{1}\
+%if %{with_ipaclones}\
+%{expand:%%files %{?2:%{2}-}ipaclones-internal}\
+%defattr(-,root,root)\
+%defverify(not mtime)\
+/usr/src/kernels/%{KVERREL}%{?2:+%{2}}-ipaclones\
+%endif\
+%endif\
+%{nil}
+
+%kernel_variant_ipaclones %{with_up}
+
# plz don't put in a version string unless you're going to tag
# and build.
#