Simplify external build and artifact caching logic

- Transition from having a boolean and a path to just a path. The
existence of a value for the path is used in the same cases where the
boolean was checked for truth before.
- Remove IS_GLINUX in favor of IS_EXTERNAL everywhere.
- Conditionally add the cache directories to the docker volumes list and
environment.
- Make sure the cache variables and FETCH_PACKAGES are always
overridable, so that even an external build can use them.

Change-Id: Idf222354f6bf2f4c2f2c0c478430f1e1617a2e64
diff --git a/docker.mk b/docker.mk
index 7d013ce..3a25286 100644
--- a/docker.mk
+++ b/docker.mk
@@ -18,10 +18,8 @@
 
 include $(ROOTDIR)/build/preamble.mk
 
-DOCKER_FETCH_TARBALL ?= $(IS_GLINUX)
-
 docker-build: $(ROOTDIR)/cache/aiy-board-builder.tar
-ifeq ($(DOCKER_FETCH_TARBALL),true)
+ifneq ($(PREBUILT_DOCKER_ROOT),)
 $(ROOTDIR)/cache/aiy-board-builder.tar: $(PREBUILT_DOCKER_ROOT)/aiy-board-builder.tar
 	mkdir -p $(ROOTDIR)/cache
 	cp $< $(ROOTDIR)/cache
@@ -37,30 +35,35 @@
 	rm -rf $(ROOTDIR)/cache/docker-build
 endif
 
+DOCKER_VOLUMES := \
+  -v /dev\:/dev \
+  -v $(ROOTDIR)\:/rootdir
+
+DOCKER_ENV := \
+  -e "FETCH_PACKAGES=$(FETCH_PACKAGES)" \
+  -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)"
+
+ifneq ($(ROOTFS_RAW_CACHE_DIRECTORY),)
+  DOCKER_VOLUMES += -v $(ROOTFS_RAW_CACHE_DIRECTORY)\:/rootfs
+  DOCKER_ENV += -e "ROOTFS_RAW_CACHE_DIRECTORY=/rootfs"
+endif
+
+ifneq ($(FETCH_PBUILDER_DIRECTORY),)
+	DOCKER_VOLUMES += -v $(FETCH_PBUILDER_DIRECTORY)\:/pbuilder
+	DOCKER_ENV += -e "FETCH_PBUILDER_DIRECTORY=/pbuilder"
+endif
+
 # Runs any make TARGET in x86 docker image ('m docker-TARGET')
 docker-%: docker-build;
 	docker load -i $(ROOTDIR)/cache/aiy-board-builder.tar
 	docker run --rm --privileged --tty \
-		-v /dev\:/dev \
-		-v $(ROOTDIR)\:/rootdir \
-		-v $(TARBALL_FETCH_ROOT_DIRECTORY)\:/tarballs \
-		-v $(PREBUILT_DOCKER_ROOT)\:/docker \
-		-v $(PREBUILT_MODULES_ROOT)\:/modules \
-		-v $(FETCH_PBUILDER_DIRECTORY)\:/pbuilder \
+		$(DOCKER_VOLUMES) \
+		$(DOCKER_ENV) \
 		-w /rootdir \
-		-e "ROOTFS_FETCH_TARBALL=$(ROOTFS_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 "PREBUILT_MODULES_ROOT=/modules" \
-		-e "FETCH_PBUILDER_DIRECTORY=/pbuilder" \
-		-e "FETCH_PACKAGES=$(FETCH_PACKAGES)" \
-		-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/kokoro/build.sh b/kokoro/build.sh
index 3db3ea1..ee0632a 100644
--- a/kokoro/build.sh
+++ b/kokoro/build.sh
@@ -22,12 +22,9 @@
 source build/setup.sh
 popd
 
-export IS_GLINUX=true
-export TARBALL_FETCH_ROOT_DIRECTORY=${KOKORO_GFILE_DIR}
-export PREBUILT_MODULES_ROOT=${KOKORO_GFILE_DIR}
 export PREBUILT_DOCKER_ROOT=${KOKORO_GFILE_DIR}
 export FETCH_PBUILDER_DIRECTORY=${KOKORO_GFILE_DIR}
-export ROOTFS_REVISION=.
+export ROOTFS_RAW_CACHE_DIRECTORY=${KOKORO_GFILE_DIR}
 export FETCH_PACKAGES=false
 
 # Install haveged on the host to provide extra entropy.
diff --git a/kokoro/packages.sh b/kokoro/packages.sh
index cc08772..7f95673 100644
--- a/kokoro/packages.sh
+++ b/kokoro/packages.sh
@@ -12,12 +12,9 @@
 source build/setup.sh
 popd
 
-export IS_GLINUX=true
-export TARBALL_FETCH_ROOT_DIRECTORY=${KOKORO_GFILE_DIR}
-export PREBUILT_MODULES_ROOT=${KOKORO_GFILE_DIR}
 export PREBUILT_DOCKER_ROOT=${KOKORO_GFILE_DIR}
 export FETCH_PBUILDER_DIRECTORY=${KOKORO_GFILE_DIR}
-export ROOTFS_REVISION=.
+export ROOTFS_RAW_CACHE_DIRECTORY=${KOKORO_GFILE_DIR}
 export FETCH_PACKAGES=false
 
 # Install haveged on the host to provide extra entropy.
diff --git a/kokoro/rootfs.sh b/kokoro/rootfs.sh
index 16a4edd..831b954 100644
--- a/kokoro/rootfs.sh
+++ b/kokoro/rootfs.sh
@@ -7,8 +7,7 @@
 source build/setup.sh
 popd
 
-export IS_GLINUX=true
-export ROOTFS_FETCH_TARBALL=false
+export IS_EXTERNAL=false
 export FETCH_PACKAGES=false
 export PREBUILT_DOCKER_ROOT=${KOKORO_GFILE_DIR}
 
diff --git a/packages.mk b/packages.mk
index 9a57ef2..47f9b09 100644
--- a/packages.mk
+++ b/packages.mk
@@ -20,7 +20,7 @@
 
 pbuilder-base: $(ROOTDIR)/cache/base.tgz
 
-ifeq ($(FETCH_PBUILDER_BASE),true)
+ifneq ($(FETCH_PBUILDER_DIRECTORY),)
 $(ROOTDIR)/cache/base.tgz: $(FETCH_PBUILDER_DIRECTORY)/base.tgz | out-dirs
 	cp $< $(ROOTDIR)/cache
 else
diff --git a/preamble.mk b/preamble.mk
index e3f30dc..1569c66 100644
--- a/preamble.mk
+++ b/preamble.mk
@@ -17,20 +17,18 @@
 
 LOG := @$(ROOTDIR)/build/log.sh
 
-ifneq ($(IS_EXTERNAL),)
-    DOCKER_FETCH_TARBALL := false
-    FETCH_PBUILDER_BASE := false
-    ROOTFS_FETCH_TARBALL := false
-    DEBOOTSTRAP_FETCH_TARBALL := false
-    FETCH_PACKAGES := false
-endif
-
 ifneq (,$(wildcard /etc/dpkg/origins/glinux))
 ifneq (,$(wildcard /google))
-	IS_GLINUX = true
+	IS_EXTERNAL ?= true
 endif
 endif
-IS_GLINUX ?= false
+
+FETCH_PACKAGES ?= false
+ifeq ($(IS_EXTERNAL),false)
+  PREBUILT_DOCKER_ROOT ?= /google/data/ro/teams/spacepark/enterprise/kokoro/prod/spacepark/enterprise/docker/
+  FETCH_PBUILDER_DIRECTORY ?= /google/data/ro/teams/spacepark/enterprise/kokoro/prod/spacepark/enterprise/pbuilder/
+  ROOTFS_RAW_CACHE_DIRECTORY ?= /google/data/ro/teams/spacepark/enterprise/kokoro/prod/spacepark/enterprise/rootfs/latest/
+endif
 
 USERSPACE_ARCH ?= arm64
 
@@ -43,9 +41,6 @@
 	QEMU_ARCH := aarch64
 endif
 
-FETCH_PBUILDER_DIRECTORY ?= /google/data/ro/teams/spacepark/enterprise/kokoro/prod/spacepark/enterprise/pbuilder
-FETCH_PBUILDER_BASE ?= $(IS_GLINUX)
-
 PACKAGES_EXTRA := \
 	alsa-utils \
 	apt-transport-https \
@@ -145,12 +140,5 @@
 	xdg-user-dirs \
 	xwayland
 
-TARBALL_FETCH_ROOT_DIRECTORY ?= \
-	/google/data/ro/teams/spacepark/enterprise/kokoro/prod/spacepark/enterprise/rootfs
-
-PREBUILT_DOCKER_ROOT ?= /google/data/ro/teams/spacepark/enterprise/kokoro/prod/spacepark/enterprise/docker
-
-FETCH_PACKAGES ?= $(IS_GLINUX)
-
 BOOT_SIZE_MB := 128
 ROOTFS_SIZE_MB := 4096
diff --git a/rootfs.mk b/rootfs.mk
index e0d5529..dcf0aba 100644
--- a/rootfs.mk
+++ b/rootfs.mk
@@ -22,12 +22,8 @@
 ROOTFS_IMG := $(PRODUCT_OUT)/rootfs_$(USERSPACE_ARCH).img
 ROOTFS_RAW_IMG := $(PRODUCT_OUT)/obj/ROOTFS/rootfs_$(USERSPACE_ARCH).raw.img
 ROOTFS_PATCHED_IMG := $(PRODUCT_OUT)/obj/ROOTFS/rootfs_$(USERSPACE_ARCH).patched.img
-ROOTFS_RAW_CACHE_PATH := $(TARBALL_FETCH_ROOT_DIRECTORY)/$(ROOTFS_REVISION)/rootfs_$(USERSPACE_ARCH).raw.img
 ROOTFS_RAW_LOCAL_CACHE_PATH := $(ROOTDIR)/cache/rootfs_$(USERSPACE).raw.img
 
-ROOTFS_FETCH_TARBALL ?= $(IS_GLINUX)
-ROOTFS_REVISION ?= latest
-
 BASE_PACKAGES := \
 	aiy-board-gadget \
 	aiy-board-keyring \
@@ -81,8 +77,8 @@
 	$(LOG) rootfs adjustments
 	sudo $(ROOTDIR)/build/fix_permissions.sh -p $(ROOTDIR)/build/permissions.txt -t $(ROOTFS_DIR)
 
-ifeq ($(ROOTFS_FETCH_TARBALL),true)
-$(ROOTFS_RAW_IMG): $(ROOTFS_RAW_CACHE_PATH)
+ifneq ($(ROOTFS_RAW_CACHE_DIRECTORY),)
+$(ROOTFS_RAW_IMG): $(ROOTFS_RAW_CACHE_DIRECTORY)/rootfs_$(USERSPACE_ARCH).raw.img
 	$(LOG) rootfs raw-fetch
 	mkdir -p $(dir $(ROOTFS_RAW_IMG))
 	cp $< $<.sha256sum $(dir $(ROOTFS_RAW_IMG))