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)