Add support for specifying package architecture

- USERSPACE_ARCH (either arm64 or armhf) environment variable controls the package architecture
used throughout the build process
- pbuilder base tarball now includes crossbuild-essentials for armhf

Change-Id: I2b2b340e5b07d3cb9d7be1c5207aba31eface548
diff --git a/docker.mk b/docker.mk
index f269f08..b5850a8 100644
--- a/docker.mk
+++ b/docker.mk
@@ -76,6 +76,8 @@
 		-e "HEADLESS_BUILD=$(HEADLESS_BUILD)" \
 		-e "IS_EXTERNAL=$(IS_EXTERNAL)" \
 		-e "http_proxy=$(http_proxy)" \
+		-e "USERSPACE_ARCH=$(USERSPACE_ARCH)" \
+		-e "QEMU_ARCH=$(QEMU_ARCH)" \
 		aiy-board-builder \
 		/bin/bash -c \
 			'groupadd --gid $(shell id -g) $(shell id -g -n); \
diff --git a/multistrap.conf b/multistrap.conf
index 512f55b..e36872f 100644
--- a/multistrap.conf
+++ b/multistrap.conf
@@ -1,5 +1,5 @@
 [General]
-arch=arm64
+arch=USERSPACE_ARCH
 cleanup=true
 unpack=true
 bootstrap=main non-free contrib
diff --git a/packages.mk b/packages.mk
index 91f2385..f66bf24 100644
--- a/packages.mk
+++ b/packages.mk
@@ -18,21 +18,24 @@
 
 include $(ROOTDIR)/build/preamble.mk
 
+pbuilder-base: $(ROOTDIR)/cache/base.tgz
+
 ifeq ($(FETCH_PBUILDER_BASE),true)
 $(ROOTDIR)/cache/base.tgz: $(FETCH_PBUILDER_DIRECTORY)/base.tgz | out-dirs
 	cp $< $(ROOTDIR)/cache
 else
-$(ROOTDIR)/cache/base.tgz: /usr/bin/qemu-aarch64-static
+$(ROOTDIR)/cache/base.tgz: /usr/bin/qemu-aarch64-static /usr/bin/qemu-arm-static
 	mkdir -p $(ROOTDIR)/cache
 	sudo pbuilder create \
 		--basetgz $@ \
 		--mirror http://ftp.debian.org/debian \
 		--distribution stretch \
 		--architecture amd64 \
-		--extrapackages crossbuild-essential-arm64 debhelper
+		--extrapackages crossbuild-essential-armhf crossbuild-essential-arm64 debhelper
 	mkdir -p $(ROOTDIR)/cache/base-tmp
 	cd $(ROOTDIR)/cache/base-tmp; \
 	sudo tar xf $@; \
+	sudo cp /usr/bin/qemu-arm-static usr/bin; \
 	sudo cp /usr/bin/qemu-aarch64-static usr/bin; \
 	sudo tar cf base.tar .; \
 	gzip base.tar; mv -f base.tar.gz $@
@@ -54,12 +57,12 @@
 # $4: space separated list of external dependencies (may be empty)
 # $5: dpkg-buildpackage --build value (may be empty, defaults to full)
 define make-pbuilder-package-target
-$1: $(PRODUCT_OUT)/.$1-pbuilder
-PBUILDER_TARGETS += $(PRODUCT_OUT)/.$1-pbuilder
+$1: $(PRODUCT_OUT)/.$1-pbuilder-$(USERSPACE_ARCH)
+PBUILDER_TARGETS += $(PRODUCT_OUT)/.$1-pbuilder-$(USERSPACE_ARCH)
 
 ifneq (,$(wildcard $(ROOTDIR)/packages/$1))
-$(PRODUCT_OUT)/.$1-pbuilder: \
-	$(foreach package,$3,$(PRODUCT_OUT)/.$(package)-pbuilder) \
+$(PRODUCT_OUT)/.$1-pbuilder-$(USERSPACE_ARCH): \
+	$(foreach package,$3,$(PRODUCT_OUT)/.$(package)-pbuilder-$(USERSPACE_ARCH)) \
 	$$(shell find $(ROOTDIR)/packages/$1 -type f) \
 	$$(shell find $(ROOTDIR)/$2 -type f | sed -e 's/ /\\ /g') \
 	| out-dirs $(ROOTDIR)/cache/base.tgz \
@@ -89,11 +92,10 @@
 		--basetgz $(ROOTDIR)/cache/base.tgz \
 		--configfile $(ROOTDIR)/build/pbuilderrc \
 		--hookdir $(ROOTDIR)/build/pbuilder-hooks \
-		--host-arch arm64 --logfile $(PRODUCT_OUT)/$1.log
-
+		--host-arch $(USERSPACE_ARCH) --logfile $(PRODUCT_OUT)/$1-$(USERSPACE_ARCH).log
 	$(LOG) $1 finished
 else
-$(PRODUCT_OUT)/.$1-pbuilder: \
+$(PRODUCT_OUT)/.$1-pbuilder-$(USERSPACE_ARCH): \
 	| out-dirs \
 	$(PACKAGES_FETCH_ROOT_DIRECTORY)/$(PACKAGES_REVISION)/packages.tgz
 	$(LOG) $1 pbuilder extract
@@ -103,7 +105,7 @@
 	$(ROOTDIR)/build/update_packages.sh
 	$(LOG) $1 finished
 endif
-	touch $(PRODUCT_OUT)/.$1-pbuilder
+	touch $(PRODUCT_OUT)/.$1-pbuilder-$(USERSPACE_ARCH)
 .PHONY:: $1
 endef
 
@@ -161,4 +163,4 @@
 
 packages:: $(ALL_PACKAGE_TARGETS)
 
-.PHONY:: packages
+.PHONY:: packages pbuilder-base
diff --git a/preamble.mk b/preamble.mk
index acfc385..1065701 100644
--- a/preamble.mk
+++ b/preamble.mk
@@ -34,6 +34,17 @@
 endif
 IS_GLINUX ?= false
 
+USERSPACE_ARCH ?= arm64
+
+# Architecture specific defines here
+ifeq (armhf,$(USERSPACE_ARCH))
+	QEMU_ARCH := arm
+endif
+
+ifeq (arm64,$(USERSPACE_ARCH))
+	QEMU_ARCH := aarch64
+endif
+
 # Globally useful directories
 TOOLCHAIN := $(ROOTDIR)/toolchains/aarch64-linux-android/bin/aarch64-linux-android-
 
diff --git a/rootfs.mk b/rootfs.mk
index 9221d55..8f3a539 100644
--- a/rootfs.mk
+++ b/rootfs.mk
@@ -36,6 +36,7 @@
 	bluetooth \
 	bluez \
 	libbluetooth3 \
+	linux-image-4.9.51-aiy \
 	uboot-imx
 
 ifeq ($(IS_EXTERNAL),)
@@ -94,7 +95,7 @@
 	sha256sum $(ROOTFS_RAW_IMG) > $(ROOTFS_RAW_IMG).sha256sum
 	$(LOG) rootfs raw-cache finished
 else
-$(ROOTFS_RAW_IMG): $(ROOTDIR)/build/preamble.mk $(ROOTDIR)/build/rootfs.mk /usr/bin/qemu-aarch64-static
+$(ROOTFS_RAW_IMG): $(ROOTDIR)/build/preamble.mk $(ROOTDIR)/build/rootfs.mk /usr/bin/qemu-$(QEMU_ARCH)-static
 	$(LOG) rootfs raw-build
 	mkdir -p $(ROOTFS_DIR)
 	rm -f $(ROOTFS_RAW_IMG)
@@ -106,20 +107,20 @@
 	sudo mount -o loop $(ROOTFS_RAW_IMG) $(ROOTFS_DIR)
 	cp $(ROOTDIR)/build/multistrap.conf $(PRODUCT_OUT)
 	sed -i -e 's/MAIN_PACKAGES/$(PACKAGES_EXTRA)/g' $(PRODUCT_OUT)/multistrap.conf
-
+	sed -i -e 's/USERSPACE_ARCH/$(USERSPACE_ARCH)/g' $(PRODUCT_OUT)/multistrap.conf
 	$(LOG) rootfs raw-build multistrap
 	sudo multistrap -f $(PRODUCT_OUT)/multistrap.conf -d $(ROOTFS_DIR)
 	$(LOG) rootfs raw-build multistrap finished
 
 	sudo mount -o bind /dev $(ROOTFS_DIR)/dev
-	sudo cp /usr/bin/qemu-aarch64-static $(ROOTFS_DIR)/usr/bin
+	sudo cp /usr/bin/qemu-$(QEMU_ARCH)-static $(ROOTFS_DIR)/usr/bin
 	sudo chroot $(ROOTFS_DIR) /var/lib/dpkg/info/dash.preinst install
 
 	$(LOG) rootfs raw-build dpkg-configure
 	sudo DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true LC_ALL=C LANGUAGE=C LANG=C chroot $(ROOTFS_DIR) dpkg --configure -a
 	$(LOG) rootfs raw-build dpkg-configure finished
 
-	sudo rm -f $(ROOTFS_DIR)/usr/bin/qemu-aarch64-static
+	sudo rm -f $(ROOTFS_DIR)/usr/bin/qemu-$(QEMU_ARCH)-static
 	sudo umount $(ROOTFS_DIR)/dev
 	sudo umount $(ROOTFS_DIR)
 	sudo rmdir $(ROOTFS_DIR)
@@ -134,9 +135,8 @@
                        $(ROOTDIR)/build/boot.mk \
                        $(ROOTDIR)/cache/packages.tgz \
                        | $(PRODUCT_OUT)/boot.img \
-                         /usr/bin/qemu-aarch64-static
+                         /usr/bin/qemu-$(QEMU_ARCH)-static
 	$(LOG) rootfs patch
-
 	cp $(ROOTFS_RAW_IMG) $(ROOTFS_PATCHED_IMG).wip
 	mkdir -p $(ROOTFS_DIR)
 	-sudo umount $(ROOTFS_DIR)/boot
@@ -146,7 +146,7 @@
 	sudo mount -o loop $(PRODUCT_OUT)/boot.img $(ROOTFS_DIR)/boot
 	-sudo mkdir -p $(ROOTFS_DIR)/dev
 	sudo mount -o bind /dev $(ROOTFS_DIR)/dev
-	sudo cp /usr/bin/qemu-aarch64-static $(ROOTFS_DIR)/usr/bin
+	sudo cp /usr/bin/qemu-$(QEMU_ARCH)-static $(ROOTFS_DIR)/usr/bin
 
 	sudo cp $(ROOTDIR)/board/fstab.emmc $(ROOTFS_DIR)/etc/fstab
 
@@ -163,16 +163,11 @@
 
 	$(LOG) rootfs patch bsp
 	sudo chroot $(ROOTFS_DIR) bash -c 'apt-get install --allow-downgrades --no-install-recommends -y $(PRE_INSTALL_PACKAGES)'
-	sudo mount -t tmpfs none $(ROOTFS_DIR)/tmp
-	sudo cp $(PRODUCT_OUT)/packages/linux-headers-*-aiy_*_arm64.deb \
-		$(PRODUCT_OUT)/packages/linux-image-*-aiy_*_arm64.deb $(ROOTFS_DIR)/tmp
-	sudo chroot $(ROOTFS_DIR) bash -c 'apt-get install --allow-downgrades --no-install-recommends -y /tmp/*.deb'
-	sudo umount $(ROOTFS_DIR)/tmp
 	$(LOG) rootfs patch bsp finished
 
 	+make -f $(ROOTDIR)/build/rootfs.mk adjustments
 
-	sudo rm -f $(ROOTFS_DIR)/usr/bin/qemu-aarch64-static
+	sudo rm -f $(ROOTFS_DIR)/usr/bin/qemu-$(QEMU_ARCH)-static
 	sudo umount $(ROOTFS_DIR)/dev
 	sudo umount $(ROOTFS_DIR)/boot
 	sudo umount $(ROOTFS_DIR)