From: Don Zickus <dzickus@xxxxxxxxxx> For CKI and its cross-compile environment, it can not cross compile userspace tools. Instead we will native compiles them. To allow this split, the kernel.spec needs to support only building userspace stuff and not the kernel itself. However the userspace tools need some vars defined. This patch creates a new function and sets up those vars. Also very useful for debugging userspace tools and skipping the hour long kernel build times (like LTO). To use this effectively, one would use --without_up --without_debug --without_zfcpdump Original author is Brian Masney <bmasney@xxxxxxxxxx>, which I took from his RHEL-8 contribution. His original changelog The kernel.spec file initializes the .config file and Arch variable in the BuildKernel() function. This works fine when the user space tools are built at the same time as the kernel, however this fails when attempting to build the user space tools in isolation. Specifically, this fails when debug, zfcpdump, and up are all disabled. The kernel-tools and kernel-selftests packages fail to build. Let's fix this by adding a new function InitBuildKernel() that initializes a kernel build. This function is called when debug, zfcpdump, and up are all disabled. V2: Fix inline comment and add original changelog. Cc: Brian Masney <bmasney@xxxxxxxxxx> Signed-off-by: Don Zickus <dzickus@xxxxxxxxxx> --- redhat/kernel.spec.template | 70 +++++++++++++++++++++++-------------- 1 file changed, 43 insertions(+), 27 deletions(-) diff --git a/redhat/kernel.spec.template b/redhat/kernel.spec.template index 7cbfb9c139eb..4ab391d23dd3 100644 --- a/redhat/kernel.spec.template +++ b/redhat/kernel.spec.template @@ -79,10 +79,9 @@ Summary: The Linux kernel %define pkg_release %{specrelease} -# What parts do we want to build? We must build at least one kernel. -# These are the kernels that are built IF the architecture allows it. -# All should default to 1 (enabled) and be flipped to 0 (disabled) -# by later arch-specific checks. +# What parts do we want to build? These are the kernels that are built IF the +# architecture allows it. All should default to 1 (enabled) and be flipped to +# 0 (disabled) by later arch-specific checks. # The following build options are enabled by default. # Use either --without <opt> in your rpmbuild command or force values @@ -1338,33 +1337,18 @@ cp_vmlinux() %define make %{__make} %{?cross_opts} %{?make_opts} HOSTCFLAGS="%{?build_hostcflags}" HOSTLDFLAGS="%{?build_hostldflags}" -BuildKernel() { - MakeTarget=$1 - KernelImage=$2 - Flavour=$4 - DoVDSO=$3 - Flav=${Flavour:++${Flavour}} - InstallName=${5:-vmlinuz} +InitBuildVars() { + # Initialize the kernel .config file and create some variables that are + # needed for the actual build process. - DoModules=1 - if [ "$Flavour" = "zfcpdump" ]; then - DoModules=0 - fi + Flavour=$1 + Flav=${Flavour:++${Flavour}} - # Pick the right config file for the kernel we're building + # Pick the right kernel config file Config=kernel-%{version}-%{_target_cpu}${Flavour:+-${Flavour}}.config DevelDir=/usr/src/kernels/%{KVERREL}${Flav} - # When the bootable image is just the ELF kernel, strip it. - # We already copy the unstripped file into the debuginfo package. - if [ "$KernelImage" = vmlinux ]; then - CopyKernel=cp_vmlinux - else - CopyKernel=cp - fi - KernelVer=%{version}-%{release}.%{_target_cpu}${Flav} - echo BUILDING A KERNEL FOR ${Flavour} %{_target_cpu}... # make sure EXTRAVERSION says what we want it to say # Trim the release if this is a CI build, since KERNELVERSION is limited to 64 characters @@ -1375,8 +1359,6 @@ BuildKernel() { # if we are post rc1 this should match anyway so this won't matter perl -p -i -e 's/^PATCHLEVEL.*/PATCHLEVEL = %{patchlevel}/' Makefile - # and now to start the build process - %{make} %{?_smp_mflags} mrproper cp configs/$Config .config @@ -1393,6 +1375,32 @@ BuildKernel() { if [ "$Flavour" == "" ]; then KCFLAGS="$KCFLAGS %{?kpatch_kcflags}" fi +} + +BuildKernel() { + MakeTarget=$1 + KernelImage=$2 + Flavour=$4 + DoVDSO=$3 + Flav=${Flavour:++${Flavour}} + InstallName=${5:-vmlinuz} + + DoModules=1 + if [ "$Flavour" = "zfcpdump" ]; then + DoModules=0 + fi + + # When the bootable image is just the ELF kernel, strip it. + # We already copy the unstripped file into the debuginfo package. + if [ "$KernelImage" = vmlinux ]; then + CopyKernel=cp_vmlinux + else + CopyKernel=cp + fi + + InitBuildVars $Flavour + + echo BUILDING A KERNEL FOR ${Flavour} %{_target_cpu}... %{make} ARCH=$Arch olddefconfig >/dev/null @@ -1920,6 +1928,14 @@ BuildKernel %make_target %kernel_image %{use_vdso} lpae BuildKernel %make_target %kernel_image %{_use_vdso} %endif +%ifnarch noarch i686 +%if !%{with_debug} && !%{with_zfcpdump} && !%{with_up} +# If only building the user space tools, then initialize the build environment +# and some variables so that the various userspace tools can be built. +InitBuildVars +%endif +%endif + %global perf_make \ %{__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} %if %{with_perf} -- GitLab _______________________________________________ kernel mailing list -- kernel@xxxxxxxxxxxxxxxxxxxxxxx To unsubscribe send an email to kernel-leave@xxxxxxxxxxxxxxxxxxxxxxx Fedora Code of Conduct: https://docs.fedoraproject.org/en-US/project/code-of-conduct/ List Guidelines: https://fedoraproject.org/wiki/Mailing_list_guidelines List Archives: https://lists.fedoraproject.org/archives/list/kernel@xxxxxxxxxxxxxxxxxxxxxxx