From patchwork Thu Sep 30 04:00:48 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: Cross compile rules update Date: Wed, 29 Sep 2010 18:00:48 -0000 From: Tim Gardner X-Patchwork-Id: 66110 Message-Id: <4CA40B70.7060807@canonical.com> To: Andy Whitcroft Cc: Kernel team list 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