Patchwork Cross compile rules update

login
register
mail settings
Submitter Tim Gardner
Date Sept. 30, 2010, 5:46 p.m.
Message ID <4CA4CD09.5080801@canonical.com>
Download mbox | patch
Permalink /patch/66187/
State Accepted
Delegated to: Tim Gardner
Headers show

Comments

Tim Gardner - Sept. 30, 2010, 5:46 p.m.
On 09/30/2010 09:41 AM, Andy Whitcroft wrote:
> 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

It turns out the dh_gencontrol line changes were superfluous. It didn't 
work anyways with the 'fakeroot debian/rules binary arch=armel' 
invocation. It only works using 'dpkg-buildpackage -aarmel' which sets 
the internal notion of HOST arch that dh_gencontrol uses.

Loic - I've made the CROSS_COMPILE and do_tools changes as requested.

rtg
Loïc Minier - Sept. 30, 2010, 7:21 p.m.
On Thu, Sep 30, 2010, Tim Gardner wrote:
> Loic - I've made the CROSS_COMPILE and do_tools changes as requested.

 Awesome, thanks!

Patch

From de991878cd738a947571bd8e2d7774d23f3dcc16 Mon Sep 17 00:00:00 2001
From: Tim Gardner <tim.gardner@canonical.com>
Date: Wed, 29 Sep 2010 09:39:09 -0600
Subject: [PATCH] UBUNTU: [Config] Add support for cross compiling armel

The best way to cross compile is by using dpkg-buildpackage, e.g.,

dpkg-buildpackage -B -aarmel

You'll likely have problems cross compiling the tools unless you've
built and installed some prerequisites, but thats your problem. Work
around the issue by deleting the tools directorty or specify do_tools=false.

Signed-off-by: Tim Gardner <tim.gardner@canonical.com>
---
 debian/rules.d/0-common-vars.mk |   29 ++++++++++++++++++++++++++++-
 debian/rules.d/1-maintainer.mk  |    6 ++++++
 debian/rules.d/2-binary-arch.mk |    2 +-
 3 files changed, 35 insertions(+), 2 deletions(-)

diff --git a/debian/rules.d/0-common-vars.mk b/debian/rules.d/0-common-vars.mk
index e03fa14..5ff544b 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
@@ -191,6 +216,7 @@  conc_level		= -j$(CONCURRENCY_LEVEL)
 
 # target_flavour is filled in for each step
 kmake = make ARCH=$(build_arch) \
+	$(CROSS_COMPILE) \
 	EXTRAVERSION=-$(abinum)-$(target_flavour) \
 	CONFIG_DEBUG_SECTION_MISMATCH=y SUBLEVEL=$(SUBLEVEL) \
 	KBUILD_BUILD_VERSION="$(uploadnum)" \
@@ -198,3 +224,4 @@  kmake = make ARCH=$(build_arch) \
 ifneq ($(LOCAL_ENV_CC),)
 kmake += CC=$(LOCAL_ENV_CC) DISTCC_HOSTS=$(LOCAL_ENV_DISTCC_HOSTS)
 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..2c4332e 100644
--- a/debian/rules.d/2-binary-arch.mk
+++ b/debian/rules.d/2-binary-arch.mk
@@ -353,7 +353,7 @@  endif
 
 $(stampdir)/stamp-build-perarch: prepare-perarch
 ifeq ($(do_tools),true)
-	cd $(builddir)/tools-$*/tools/perf && make
+	cd $(builddir)/tools-$*/tools/perf && make $(CROSS_COMPILE)
 endif
 	@touch $@
 
-- 
1.7.0.4