pbuilder support

Change-Id: I7d10a3b0867aab1af5462aea03dbd92e32f9fc68
diff --git a/D05deps b/D05deps
new file mode 100755
index 0000000..f8feb1b
--- /dev/null
+++ b/D05deps
@@ -0,0 +1,8 @@
+#!/bin/bash -xe
+apt-get install -y apt-utils
+(
+	flock -e 200
+	( cd "$DEPSBASE"; apt-ftparchive packages . > Packages )
+	echo "deb [trusted=yes] file://$DEPSBASE ./" >> /etc/apt/sources.list
+	apt-get update
+) 200>/tmp/pbuilder-apt-lock
diff --git a/Dockerfile b/Dockerfile
index f3a069c..8f51e18 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -13,6 +13,13 @@
 
 # Install the prerequisite packages into the image.
 ADD . /build
-RUN /bin/bash -c 'apt-get update && apt-get install sudo make && ln -sfr /build/Makefile /Makefile && source /build/setup.sh && make -C /build prereqs'
+RUN /bin/bash -c '\
+apt-get update && \
+apt-get install sudo make && \
+ln -sfr /build/Makefile /Makefile && \
+source /build/setup.sh && \
+make -C /build prereqs'
+ADD pbuilderrc /etc/pbuilderrc
+ADD D05deps /var/cache/pbuilder/hooks/D05deps
 
 VOLUME /var/lib/docker
diff --git a/docker.mk b/docker.mk
index e4a9671..8470a9d 100644
--- a/docker.mk
+++ b/docker.mk
@@ -46,15 +46,18 @@
 	   -v $(TARBALL_FETCH_ROOT_DIRECTORY)\:/tarballs \
 	   -v $(PREBUILT_DOCKER_ROOT)\:/docker \
 	   -v $(PREBUILT_MODULES_ROOT)\:/modules \
+		 -v $(FETCH_PBUILDER_DIRECTORY)\:/pbuilder \
 	   -w /build \
 		 -e "DEBOOTSTRAP_FETCH_TARBALL=$(DEBOOTSTRAP_FETCH_TARBALL)" \
 		 -e "ROOTFS_FETCH_TARBALL=$(ROOTFS_FETCH_TARBALL)" \
 		 -e "ARM64_BUILDER_FETCH_TARBALL=$(ARM64_BUILDER_FETCH_TARBALL)" \
+		 -e "FETCH_PBUILDER_BASE=$(FETCH_PBUILDER_BASE)" \
 		 -e "TARBALL_FETCH_ROOT_DIRECTORY=/tarballs" \
 		 -e "PREBUILT_DOCKER_ROOT=/docker" \
 		 -e "ROOTFS_REVISION=$(ROOTFS_REVISION)" \
 		 -e "DEBOOTSTRAP_TARBALL_REVISION=$(DEBOOTSTRAP_TARBALL_REVISION)" \
 		 -e "PREBUILT_MODULES_ROOT=/modules" \
+		 -e "FETCH_PBUILDER_DIRECTORY=/pbuilder" \
 	   aiy-board-builder \
 	   /bin/bash -c \
 	   'groupadd --gid $$(shell id -g) $$(shell id -g -n); \
diff --git a/packages.mk b/packages.mk
index a80fdc9..370280a 100644
--- a/packages.mk
+++ b/packages.mk
@@ -48,6 +48,35 @@
 	touch $$@
 endef
 
+ifeq ($(FETCH_PBUILDER_BASE),true)
+$(ROOTDIR)/cache/base.tgz: $(FETCH_PBUILDER_DIRECTORY)/base.tgz
+	mkdir -p $(ROOTDIR)/cache
+	cp $< $(ROOTDIR)/cache
+else
+$(ROOTDIR)/cache/base.tgz:
+	mkdir -p $(ROOTDIR)/cache
+	sudo pbuilder create \
+		--basetgz $@ \
+		--mirror http://http.us.debian.org/debian \
+		--distribution stretch \
+		--architecture arm64 \
+		--extrapackages debhelper
+endif
+
+define make-pbuilder-package-target
+$1: $(PRODUCT_OUT)/.$1-pbuilder
+$(PRODUCT_OUT)/.$1-pbuilder: \
+	$(foreach package,$2,$(PRODUCT_OUT)/.$(package)-pbuilder) \
+	$(shell find $(ROOTDIR)/packages/$1 -type f) \
+	| $(ROOTDIR)/cache/base.tgz
+	mkdir -p $(PRODUCT_OUT)
+	cd $(ROOTDIR)/packages/$1; pdebuild \
+		--buildresult $(PRODUCT_OUT) -- \
+		--basetgz $(ROOTDIR)/cache/base.tgz
+	sudo touch $(PRODUCT_OUT)/.$1-pbuilder
+.PHONY:: $1
+endef
+
 # Generate ARM64 targets
 $(foreach package,$(ARM64_PACKAGE_NAMES),$(eval $(call make-arm64-package-target,$(package))))
 
diff --git a/pbuilderrc b/pbuilderrc
new file mode 100644
index 0000000..9ca29a6
--- /dev/null
+++ b/pbuilderrc
@@ -0,0 +1,11 @@
+# this is your configuration file for pbuilder.
+# the file in /usr/share/pbuilder/pbuilderrc is the default template.
+# /etc/pbuilderrc is the one meant for overwriting defaults in
+# the default template
+#
+# read pbuilderrc.5 document for notes on specific options.
+MIRRORSITE=http://http.us.debian.org/debian
+PBUILDERSATISFYDEPENDSCMD=/usr/lib/pbuilder/pbuilder-satisfydepends-apt
+HOOKDIR="/var/cache/pbuilder/hooks"
+export DEPSBASE=$PRODUCT_OUT
+BINDMOUNTS=$DEPSBASE
diff --git a/preamble.mk b/preamble.mk
index bcc13fb..4f4f12f 100644
--- a/preamble.mk
+++ b/preamble.mk
@@ -13,6 +13,9 @@
 DEBOOTSTRAP_TARBALL := $(ROOTDIR)/cache/debootstrap.tgz
 DEBOOTSTRAP_TARBALL_SHA256 := $(ROOTDIR)/cache/debootstrap.tgz.sha256sum
 
+FETCH_PBUILDER_DIRECTORY ?= /google/data/ro/teams/spacepark/enterprise/kokoro/prod/spacepark/enterprise/pbuilder
+FETCH_PBUILDER_BASE ?= true
+
 DEBOOTSTRAP_EXTRA := \
 	alsa-utils \
 	apt-listchanges \
diff --git a/prereqs.mk b/prereqs.mk
index 156b758..2cd6cdb 100644
--- a/prereqs.mk
+++ b/prereqs.mk
@@ -22,6 +22,7 @@
 	libwayland-dev \
 	mtools \
 	parted \
+	pbuilder \
 	pkg-config \
 	python-minimal \
 	python2.7 \