UBUNTU: [Config] Add support for cross compiling armel
authorTim Gardner <tim.gardner@canonical.com>
Wed, 29 Sep 2010 15:39:09 +0000 (09:39 -0600)
committerLeann Ogasawara <leann.ogasawara@canonical.com>
Mon, 28 Mar 2011 13:49:23 +0000 (06:49 -0700)
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
debian/rules.d/1-maintainer.mk
debian/rules.d/2-binary-arch.mk

index e03fa14..5ff544b 100644 (file)
@@ -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
+
index 7ad68dd..9713e3d 100644 (file)
@@ -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' | \
index c66973d..9b9123b 100644 (file)
@@ -360,7 +360,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 $@