Cross compile rules update

Andy Whitcroft apw at canonical.com
Thu Sep 30 15:41:14 UTC 2010


On Wed, Sep 29, 2010 at 10:00:48PM -0600, Tim Gardner wrote:
> Andy - have a look at the attached rules changes. This should allow
> for much faster ARM compiles and packaging using the Maverick arm
> cross compiler toolchain in universe. I've installed
> gcc-arm-linux-gnueabi by default in all of our Maverick x86'en
> schroots on the kernel team build machines.
> 
> This patch is against Maverick tip, but should likely be applied to
> the generic debian tree.
> 
> rtg
> -- 
> Tim Gardner tim.gardner at canonical.com

> The following changes since commit 34ff3203c626dda402f6570adaf120f47768e052:
>   Len Brown (1):
>         intel_idle: PCI quirk to prevent Lenovo Ideapad s10-3 boot hang
> 
> are available in the git repository at:
> 
>   git://kernel.ubuntu.com/rtg/ubuntu-maverick.git master
> 
> Tim Gardner (1):
>       UBUNTU: [Config] Add support for cross compiling armel
> 
>  debian/rules.d/0-common-vars.mk |   36 +++++++++++++++++++++++++++++++++++-
>  debian/rules.d/1-maintainer.mk  |    6 ++++++
>  debian/rules.d/2-binary-arch.mk |    2 +-
>  3 files changed, 42 insertions(+), 2 deletions(-)
> 
> From e23f7020f2adc74a6fc0d4560377e112954ddcd0 Mon Sep 17 00:00:00 2001
> From: Tim Gardner <tim.gardner at canonical.com>
> Date: Wed, 29 Sep 2010 09:39:09 -0600
> Subject: [PATCH] UBUNTU: [Config] Add support for cross compiling armel
> 
> Signed-off-by: Tim Gardner <tim.gardner at canonical.com>
> ---
>  debian/rules.d/0-common-vars.mk |   36 +++++++++++++++++++++++++++++++++++-
>  debian/rules.d/1-maintainer.mk  |    6 ++++++
>  debian/rules.d/2-binary-arch.mk |    2 +-
>  3 files changed, 42 insertions(+), 2 deletions(-)
> 
> diff --git a/debian/rules.d/0-common-vars.mk b/debian/rules.d/0-common-vars.mk
> index e03fa14..eddcd0d 100644
> --- a/debian/rules.d/0-common-vars.mk
> +++ b/debian/rules.d/0-common-vars.mk
> @@ -96,7 +96,32 @@ endif
>  # committing changes to the top level Makefile
>  SUBLEVEL	:= $(shell echo $(release) | awk -F. '{print $$3}')
>  
> -arch		:= $(shell dpkg-architecture -qDEB_HOST_ARCH)
> +DEB_HOST_GNU_TYPE  = $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE)
> +DEB_BUILD_GNU_TYPE = $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE)
> +DEB_HOST_ARCH = $(shell dpkg-architecture -qDEB_HOST_ARCH)
> +DEB_BUILD_ARCH = $(shell dpkg-architecture -qDEB_BUILD_ARCH)
> +
> +#
> +# Detect invocations of the form 'fakeroot debian/rules binary arch=armel'
> +# within an x86'en schroot. This only gets you part of the way sicne the
> +# packaging phase fails, but you can at least compile the kernel quickly.
> +#
> +arch := $(DEB_HOST_ARCH)
> +ifneq ($(arch),$(DEB_HOST_ARCH))
> +	ifeq ($(arch),armel)
> +		cross_compile = CROSS_COMPILE=arm-linux-gnueabi-
> +	endif
> +endif
> +
> +#
> +# Detect invocations of the form 'dpk-buildpackage -B -aarmel' within
> +# an x86'en schroot. This is the only way to build all of the packages
> +# (except for tools).
> +#
> +ifneq ($(DEB_BUILD_GNU_TYPE),$(DEB_HOST_GNU_TYPE))
> +	cross_compile = CROSS_COMPILE=$(DEB_HOST_GNU_TYPE)-
> +endif
> +
>  abidir		:= $(CURDIR)/$(DEBIAN)/abi/$(release)-$(revision)/$(arch)
>  prev_abidir	:= $(CURDIR)/$(DEBIAN)/abi/$(release)-$(prev_revision)/$(arch)
>  commonconfdir	:= $(CURDIR)/$(DEBIAN)/config
> @@ -198,3 +223,12 @@ kmake = make ARCH=$(build_arch) \
>  ifneq ($(LOCAL_ENV_CC),)
>  kmake += CC=$(LOCAL_ENV_CC) DISTCC_HOSTS=$(LOCAL_ENV_DISTCC_HOSTS)
>  endif
> +
> +ifneq ($(cross_compile),)
> +	#
> +	# Can't build the tools 'cause the make wants cross libraries and such.
> +	#
> +	do_tools=false
> +	kmake += $(cross_compile)
> +endif
> +
> diff --git a/debian/rules.d/1-maintainer.mk b/debian/rules.d/1-maintainer.mk
> index 7ad68dd..9713e3d 100644
> --- a/debian/rules.d/1-maintainer.mk
> +++ b/debian/rules.d/1-maintainer.mk
> @@ -109,6 +109,12 @@ endif
>  	@echo "do_tools                  = $(do_tools)"
>  	@echo "full_build                = $(full_build)"
>  	@echo "libc_dev_version		 = $(libc_dev_version)"
> +	@echo "DEB_HOST_GNU_TYPE         = $(DEB_HOST_GNU_TYPE)"
> +	@echo "DEB_BUILD_GNU_TYPE        = $(DEB_BUILD_GNU_TYPE)"
> +	@echo "DEB_HOST_ARCH             = $(DEB_HOST_ARCH)"
> +	@echo "DEB_BUILD_ARCH            = $(DEB_BUILD_ARCH)"
> +	@echo "arch                      = $(arch)"
> +	@echo "kmake                     = $(kmake)"
>  
>  printchanges:
>  	@baseCommit=$$(git log --pretty=format:'%H %s' | \
> diff --git a/debian/rules.d/2-binary-arch.mk b/debian/rules.d/2-binary-arch.mk
> index 1d26496..ccb3fce 100644
> --- a/debian/rules.d/2-binary-arch.mk
> +++ b/debian/rules.d/2-binary-arch.mk
> @@ -277,7 +277,7 @@ binary-%: install-%
>  	dh_fixperms -p$(pkgimg)
>  	dh_installdeb -p$(pkgimg)
>  	dh_shlibdeps -p$(pkgimg)
> -	dh_gencontrol -p$(pkgimg)
> +	export DEB_BUILD_ARCH=$(arch) && export DEB_HOST_ARCH=$(arch) && dh_gencontrol -p$(pkgimg)
>  	dh_md5sums -p$(pkgimg)
>  	dh_builddeb -p$(pkgimg) -- -Zbzip2 -z9

I am slightly concerned that this one dh_ control needs the arch and
none of the others do.  Might we be better off exporting them at the
time they are defined; pretty sure there is a way to say that you want
that when you set the values.

Otherwise it does look saneish.  It is unfortuanate you need to zap the
tools unconditionally, perhaps we should leave that to the caller.

-apw




More information about the kernel-team mailing list