Introduce infrastructure for cross-compiling Fedora kernels
Intended to assist building for secondary architectures like ppc64, s390x, and arm. To use, create an .src.rpm using "fedpkg srpm" and then run "rpmbuild --rebuild --with cross --without perf --without tools \ kernel*.src.rpm" to cross compile. This requires binutils and gcc packages named like %_target_cpu, which all but powerpc64 currently provides in rawhide/F-19. Can't (currently) cross compile perf or kernel-tools, since libc is missing from the cross environment.
This commit is contained in:
parent
2afa3c7952
commit
43d64b26e6
46
kernel.spec
46
kernel.spec
@ -147,6 +147,9 @@ Summary: The Linux kernel
|
|||||||
# should we do C=1 builds with sparse
|
# should we do C=1 builds with sparse
|
||||||
%define with_sparse %{?_with_sparse: 1} %{?!_with_sparse: 0}
|
%define with_sparse %{?_with_sparse: 1} %{?!_with_sparse: 0}
|
||||||
#
|
#
|
||||||
|
# Cross compile requested?
|
||||||
|
%define with_cross %{?_with_cross: 1} %{?!_with_cross: 0}
|
||||||
|
#
|
||||||
# build a release kernel on rawhide
|
# build a release kernel on rawhide
|
||||||
%define with_release %{?_with_release: 1} %{?!_with_release: 0}
|
%define with_release %{?_with_release: 1} %{?!_with_release: 0}
|
||||||
|
|
||||||
@ -534,6 +537,11 @@ BuildRequires: openssl
|
|||||||
BuildRequires: pesign >= 0.10-4
|
BuildRequires: pesign >= 0.10-4
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
|
%if %{with_cross}
|
||||||
|
BuildRequires: binutils-%{_build_arch}-linux-gnu, gcc-%{_build_arch}-linux-gnu
|
||||||
|
%define cross_opts CROSS_COMPILE=%{_build_arch}-linux-gnu-
|
||||||
|
%endif
|
||||||
|
|
||||||
Source0: ftp://ftp.kernel.org/pub/linux/kernel/v3.0/linux-%{kversion}.tar.xz
|
Source0: ftp://ftp.kernel.org/pub/linux/kernel/v3.0/linux-%{kversion}.tar.xz
|
||||||
|
|
||||||
%if %{signmodules}
|
%if %{signmodules}
|
||||||
@ -1507,6 +1515,8 @@ mkdir configs
|
|||||||
rm -f kernel-%{version}-*debug.config
|
rm -f kernel-%{version}-*debug.config
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
|
%define make make %{?cross_opts}
|
||||||
|
|
||||||
# now run oldconfig over all the config files
|
# now run oldconfig over all the config files
|
||||||
for i in *.config
|
for i in *.config
|
||||||
do
|
do
|
||||||
@ -1600,7 +1610,7 @@ BuildKernel() {
|
|||||||
|
|
||||||
# and now to start the build process
|
# and now to start the build process
|
||||||
|
|
||||||
make -s mrproper
|
%{make} -s mrproper
|
||||||
cp configs/$Config .config
|
cp configs/$Config .config
|
||||||
|
|
||||||
%if %{signmodules}
|
%if %{signmodules}
|
||||||
@ -1613,11 +1623,11 @@ BuildKernel() {
|
|||||||
echo USING ARCH=$Arch
|
echo USING ARCH=$Arch
|
||||||
|
|
||||||
make -s ARCH=$Arch oldnoconfig >/dev/null
|
make -s ARCH=$Arch oldnoconfig >/dev/null
|
||||||
make -s ARCH=$Arch V=1 %{?_smp_mflags} $MakeTarget %{?sparse_mflags} %{?kernel_mflags}
|
%{make} -s ARCH=$Arch V=1 %{?_smp_mflags} $MakeTarget %{?sparse_mflags} %{?kernel_mflags}
|
||||||
make -s ARCH=$Arch V=1 %{?_smp_mflags} modules %{?sparse_mflags} || exit 1
|
%{make} -s ARCH=$Arch V=1 %{?_smp_mflags} modules %{?sparse_mflags} || exit 1
|
||||||
|
|
||||||
%ifarch %{arm}
|
%ifarch %{arm}
|
||||||
make -s ARCH=$Arch V=1 dtbs
|
%{make} -s ARCH=$Arch V=1 dtbs
|
||||||
mkdir -p $RPM_BUILD_ROOT/%{image_install_path}/dtb-$KernelVer
|
mkdir -p $RPM_BUILD_ROOT/%{image_install_path}/dtb-$KernelVer
|
||||||
install -m 644 arch/arm/boot/dts/*.dtb $RPM_BUILD_ROOT/boot/dtb-$KernelVer/
|
install -m 644 arch/arm/boot/dts/*.dtb $RPM_BUILD_ROOT/boot/dtb-$KernelVer/
|
||||||
rm -f arch/arm/boot/dts/*.dtb
|
rm -f arch/arm/boot/dts/*.dtb
|
||||||
@ -1656,10 +1666,10 @@ BuildKernel() {
|
|||||||
mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer
|
mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer
|
||||||
# Override $(mod-fw) because we don't want it to install any firmware
|
# Override $(mod-fw) because we don't want it to install any firmware
|
||||||
# we'll get it from the linux-firmware package and we don't want conflicts
|
# we'll get it from the linux-firmware package and we don't want conflicts
|
||||||
make -s ARCH=$Arch INSTALL_MOD_PATH=$RPM_BUILD_ROOT modules_install KERNELRELEASE=$KernelVer mod-fw=
|
%{make} -s ARCH=$Arch INSTALL_MOD_PATH=$RPM_BUILD_ROOT modules_install KERNELRELEASE=$KernelVer mod-fw=
|
||||||
|
|
||||||
%ifarch %{vdso_arches}
|
%ifarch %{vdso_arches}
|
||||||
make -s ARCH=$Arch INSTALL_MOD_PATH=$RPM_BUILD_ROOT vdso_install KERNELRELEASE=$KernelVer
|
%{make} -s ARCH=$Arch INSTALL_MOD_PATH=$RPM_BUILD_ROOT vdso_install KERNELRELEASE=$KernelVer
|
||||||
if [ ! -s ldconfig-kernel.conf ]; then
|
if [ ! -s ldconfig-kernel.conf ]; then
|
||||||
echo > ldconfig-kernel.conf "\
|
echo > ldconfig-kernel.conf "\
|
||||||
# Placeholder file, no vDSO hwcap entries used in this kernel."
|
# Placeholder file, no vDSO hwcap entries used in this kernel."
|
||||||
@ -1828,7 +1838,7 @@ BuildKernel %make_target %kernel_image smp
|
|||||||
%endif
|
%endif
|
||||||
|
|
||||||
%global perf_make \
|
%global perf_make \
|
||||||
make %{?_smp_mflags} -C tools/perf -s V=1 WERROR=0 NO_LIBUNWIND=1 HAVE_CPLUS_DEMANGLE=1 NO_GTK2=1 NO_LIBNUMA=1 NO_STRLCPY=1 prefix=%{_prefix}
|
make -s %{?cross_opts} %{?_smp_mflags} -C tools/perf V=1 WERROR=0 NO_LIBUNWIND=1 HAVE_CPLUS_DEMANGLE=1 NO_GTK2=1 NO_LIBNUMA=1 NO_STRLCPY=1 prefix=%{_prefix}
|
||||||
%if %{with_perf}
|
%if %{with_perf}
|
||||||
# perf
|
# perf
|
||||||
%{perf_make} all
|
%{perf_make} all
|
||||||
@ -1840,23 +1850,23 @@ BuildKernel %make_target %kernel_image smp
|
|||||||
# cpupower
|
# cpupower
|
||||||
# make sure version-gen.sh is executable.
|
# make sure version-gen.sh is executable.
|
||||||
chmod +x tools/power/cpupower/utils/version-gen.sh
|
chmod +x tools/power/cpupower/utils/version-gen.sh
|
||||||
make %{?_smp_mflags} -C tools/power/cpupower CPUFREQ_BENCH=false
|
%{make} %{?_smp_mflags} -C tools/power/cpupower CPUFREQ_BENCH=false
|
||||||
%ifarch %{ix86}
|
%ifarch %{ix86}
|
||||||
pushd tools/power/cpupower/debug/i386
|
pushd tools/power/cpupower/debug/i386
|
||||||
make %{?_smp_mflags} centrino-decode powernow-k8-decode
|
%{make} %{?_smp_mflags} centrino-decode powernow-k8-decode
|
||||||
popd
|
popd
|
||||||
%endif
|
%endif
|
||||||
%ifarch x86_64
|
%ifarch x86_64
|
||||||
pushd tools/power/cpupower/debug/x86_64
|
pushd tools/power/cpupower/debug/x86_64
|
||||||
make %{?_smp_mflags} centrino-decode powernow-k8-decode
|
%{make} %{?_smp_mflags} centrino-decode powernow-k8-decode
|
||||||
popd
|
popd
|
||||||
%endif
|
%endif
|
||||||
%ifarch %{ix86} x86_64
|
%ifarch %{ix86} x86_64
|
||||||
pushd tools/power/x86/x86_energy_perf_policy/
|
pushd tools/power/x86/x86_energy_perf_policy/
|
||||||
make
|
%{make}
|
||||||
popd
|
popd
|
||||||
pushd tools/power/x86/turbostat
|
pushd tools/power/x86/turbostat
|
||||||
make
|
%{make}
|
||||||
popd
|
popd
|
||||||
%endif #turbostat/x86_energy_perf_policy
|
%endif #turbostat/x86_energy_perf_policy
|
||||||
%endif
|
%endif
|
||||||
@ -1990,7 +2000,7 @@ find $RPM_BUILD_ROOT/usr/include \
|
|||||||
|
|
||||||
%if %{with_tools}
|
%if %{with_tools}
|
||||||
%ifarch %{cpupowerarchs}
|
%ifarch %{cpupowerarchs}
|
||||||
make -C tools/power/cpupower DESTDIR=$RPM_BUILD_ROOT libdir=%{_libdir} mandir=%{_mandir} CPUFREQ_BENCH=false install
|
%{make} -C tools/power/cpupower DESTDIR=$RPM_BUILD_ROOT libdir=%{_libdir} mandir=%{_mandir} CPUFREQ_BENCH=false install
|
||||||
rm -f %{buildroot}%{_libdir}/*.{a,la}
|
rm -f %{buildroot}%{_libdir}/*.{a,la}
|
||||||
%find_lang cpupower
|
%find_lang cpupower
|
||||||
mv cpupower.lang ../
|
mv cpupower.lang ../
|
||||||
@ -2281,6 +2291,16 @@ fi
|
|||||||
# ||----w |
|
# ||----w |
|
||||||
# || ||
|
# || ||
|
||||||
%changelog
|
%changelog
|
||||||
|
* Thu Jun 13 2013 Kyle McMartin <kyle@redhat.com>
|
||||||
|
- Introduce infrastructure for cross-compiling Fedora kernels. Intended to
|
||||||
|
assist building for secondary architectures like ppc64, s390x, and arm.
|
||||||
|
To use, create an .src.rpm using "fedpkg srpm" and then run
|
||||||
|
"rpmbuild --rebuild --with cross --without perf --without tools \
|
||||||
|
kernel*.src.rpm" to cross compile. This requires binutils and gcc
|
||||||
|
packages named like %_target_cpu, which all but powerpc64 currently provides
|
||||||
|
in rawhide/F-19. Can't (currently) cross compile perf or kernel-tools, since
|
||||||
|
libc is missing from the cross environment.
|
||||||
|
|
||||||
* Thu Jun 13 2013 Kyle McMartin <kyle@redhat.com>
|
* Thu Jun 13 2013 Kyle McMartin <kyle@redhat.com>
|
||||||
- arm-export-read_current_timer.patch: drop upstream patch
|
- arm-export-read_current_timer.patch: drop upstream patch
|
||||||
(results in duplicate exports)
|
(results in duplicate exports)
|
||||||
|
Loading…
Reference in New Issue
Block a user