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))