From patchwork Thu Sep 30 04:00:48 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tim Gardner X-Patchwork-Id: 66110 X-Patchwork-Delegate: tim.gardner@canonical.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from chlorine.canonical.com (chlorine.canonical.com [91.189.94.204]) by ozlabs.org (Postfix) with ESMTP id 4CAC2B6F10 for ; Thu, 30 Sep 2010 14:01:12 +1000 (EST) Received: from localhost ([127.0.0.1] helo=chlorine.canonical.com) by chlorine.canonical.com with esmtp (Exim 4.69) (envelope-from ) id 1P1AKJ-00035y-TK; Thu, 30 Sep 2010 05:00:59 +0100 Received: from mail.tpi.com ([70.99.223.143]) by chlorine.canonical.com with esmtp (Exim 4.69) (envelope-from ) id 1P1AKG-00035D-K8 for kernel-team@lists.ubuntu.com; Thu, 30 Sep 2010 05:00:57 +0100 Received: from [10.0.2.5] (unknown [10.0.2.5]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by mail.tpi.com (Postfix) with ESMTP id 356EB269114; Wed, 29 Sep 2010 21:01:15 -0700 (PDT) Message-ID: <4CA40B70.7060807@canonical.com> Date: Wed, 29 Sep 2010 22:00:48 -0600 From: Tim Gardner User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.12) Gecko/20100915 Thunderbird/3.0.8 MIME-Version: 1.0 To: Andy Whitcroft Subject: Cross compile rules update Cc: Kernel team list X-BeenThere: kernel-team@lists.ubuntu.com X-Mailman-Version: 2.1.9 Precedence: list Reply-To: tim.gardner@canonical.com List-Id: Kernel team discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: kernel-team-bounces@lists.ubuntu.com Errors-To: kernel-team-bounces@lists.ubuntu.com 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 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