Use arch-specific rootfs
- boot and rootfs can now be built for multiple architectures without
conflicting with each other.
- Kokoro generates arm64 and armhf versions of the mmc image, root
filesystems, and sdcard image. It also generates a recovery sdcard.
- Tighten up the partition-table %.img wildcard.
Change-Id: Ieb9a073bf4b94af7f731f3685c457e9c020b0c83
diff --git a/boot.mk b/boot.mk
index 6732a06..e49f85d 100644
--- a/boot.mk
+++ b/boot.mk
@@ -18,9 +18,9 @@
include $(ROOTDIR)/build/preamble.mk
-boot: $(PRODUCT_OUT)/boot.img
+boot: $(PRODUCT_OUT)/boot_$(USERSPACE_ARCH).img
-$(PRODUCT_OUT)/boot.img: | out-dirs
+$(PRODUCT_OUT)/boot_$(USERSPACE_ARCH).img: | out-dirs
$(LOG) boot fallocate
fallocate -l $(BOOT_SIZE_MB)M $@
mkfs.ext2 -F $@
@@ -30,6 +30,6 @@
@echo "boot - builds the kernel and boot partition"
clean::
- rm -f $(PRODUCT_OUT)/boot.img
+ rm -f $(PRODUCT_OUT)/boot_*.img
.PHONY:: boot
diff --git a/kokoro/build.sh b/kokoro/build.sh
index 434fa7d..6c4c95b 100644
--- a/kokoro/build.sh
+++ b/kokoro/build.sh
@@ -42,8 +42,16 @@
;;
esac
-m docker-all
-m docker-sdcard
+ARCHES="armhf arm64"
+
+for arch in ${ARCHES}
+do
+ export USERSPACE_ARCH=${arch}
+ m docker-all
+ m docker-sdcard
+ unset USERSPACE_ARCH
+done
+
m docker-recovery
pushd ${ROOTDIR}
@@ -52,20 +60,35 @@
-o ${PRODUCT_OUT}/manifest.xml
popd
-if [[ -f ${PRODUCT_OUT}/u-boot.imx && \
- -f ${PRODUCT_OUT}/boot.img && \
- -f ${PRODUCT_OUT}/partition-table-8gb.img && \
- -f ${PRODUCT_OUT}/rootfs.img && \
- -f ${PRODUCT_OUT}/sdcard.img && \
- -f ${PRODUCT_OUT}/manifest.xml ]]; then
- cp ${ROOTDIR}/board/flash.sh ${KOKORO_ARTIFACTS_DIR}
- chmod -x ${KOKORO_ARTIFACTS_DIR}/flash.sh
- cp ${PRODUCT_OUT}/u-boot.imx ${KOKORO_ARTIFACTS_DIR}
- cp ${PRODUCT_OUT}/boot.img ${KOKORO_ARTIFACTS_DIR}
- cp ${PRODUCT_OUT}/partition-table-*.img ${KOKORO_ARTIFACTS_DIR}
- cp ${PRODUCT_OUT}/rootfs.img ${KOKORO_ARTIFACTS_DIR}
- cp ${PRODUCT_OUT}/sdcard.img ${KOKORO_ARTIFACTS_DIR}
- cp ${PRODUCT_OUT}/manifest.xml ${KOKORO_ARTIFACTS_DIR}
-else
- exit 1
-fi
+ARTIFACTS+="${ROOTDIR}/board/flash.sh "
+ARTIFACTS+="${PRODUCT_OUT}/u-boot.imx "
+ARTIFACTS+="${PRODUCT_OUT}/manifest.xml "
+ARTIFACTS+="${PRODUCT_OUT}/recovery.img "
+ARTIFACTS+="${PRODUCT_OUT}/partition-table-8gb.img "
+ARTIFACTS+="${PRODUCT_OUT}/partition-table-16gb.img "
+ARTIFACTS+="${PRODUCT_OUT}/partition-table-64gb.img "
+
+for arch in ${ARCHES}
+do
+ ARTIFACTS+="${PRODUCT_OUT}/boot_${arch}.img "
+ ARTIFACTS+="${PRODUCT_OUT}/rootfs_${arch}.img "
+ ARTIFACTS+="${PRODUCT_OUT}/sdcard_${arch}.img "
+done
+
+# Check existence of artifacts, exit if one is missing
+for artifact in ${ARTIFACTS}
+do
+ if [[ ! -f ${artifact} ]]; then
+ echo "${artifact} not found!"
+ exit 1
+ fi
+done
+
+# Copy all artifacts to KOKORO_ARTIFACTS_DIR
+for artifact in ${ARTIFACTS}
+do
+ cp ${artifact} ${KOKORO_ARTIFACTS_DIR}
+done
+
+# Clear executable bit from artifacts
+chmod -x ${KOKORO_ARTIFACTS_DIR}/*
diff --git a/kokoro/common.cfg b/kokoro/common.cfg
index 77c58e0..976bbf6 100644
--- a/kokoro/common.cfg
+++ b/kokoro/common.cfg
@@ -1,19 +1,18 @@
gfile_resources: "/x20/teams/spacepark/enterprise/kokoro/prod/spacepark/enterprise/docker/aiy-board-builder.tar"
gfile_resources: "/x20/teams/spacepark/enterprise/kokoro/prod/spacepark/enterprise/pbuilder/base.tgz"
-gfile_resources: "/x20/teams/spacepark/enterprise/kokoro/prod/spacepark/enterprise/rootfs/latest/rootfs.raw.img"
-gfile_resources: "/x20/teams/spacepark/enterprise/kokoro/prod/spacepark/enterprise/rootfs/latest/rootfs.raw.img.sha256sum"
+gfile_resources: "/x20/teams/spacepark/enterprise/kokoro/prod/spacepark/enterprise/rootfs/latest/"
action {
define_artifacts {
- regex: "boot.img"
+ regex: "boot*.img"
regex: "flash.sh"
regex: "manifest.xml"
regex: "partition-table-*.img"
regex: "recovery.img"
- regex: "rootfs.img"
- regex: "rootfs.raw.img"
- regex: "rootfs.raw.img.sha256sum"
- regex: "sdcard.img"
+ regex: "rootfs*.img"
+ regex: "rootfs*.raw.img"
+ regex: "rootfs*.raw.img.sha256sum"
+ regex: "sdcard*.img"
regex: "u-boot.imx"
}
}
diff --git a/kokoro/rootfs.sh b/kokoro/rootfs.sh
index 53a6bdc..5efedd4 100644
--- a/kokoro/rootfs.sh
+++ b/kokoro/rootfs.sh
@@ -10,13 +10,38 @@
export IS_GLINUX=true
export ROOTFS_FETCH_TARBALL=false
export FETCH_PACKAGES=false
-export PREBUILT_DOCKER_ROOT=$KOKORO_GFILE_DIR
+export PREBUILT_DOCKER_ROOT=${KOKORO_GFILE_DIR}
# Install haveged on the host to provide extra entropy.
sudo apt-get install -y haveged
sudo /etc/init.d/haveged start
-m docker-rootfs_raw
+ARCHES="armhf arm64"
-cp ${PRODUCT_OUT}/obj/ROOTFS/rootfs.raw.img $KOKORO_ARTIFACTS_DIR
-cp ${PRODUCT_OUT}/obj/ROOTFS/rootfs.raw.img.sha256sum $KOKORO_ARTIFACTS_DIR
+for arch in ${ARCHES}
+do
+ USERSPACE_ARCH=${arch} m docker-rootfs_raw
+done
+
+for arch in ${ARCHES}
+do
+ ARTIFACTS+="${PRODUCT_OUT}/obj/ROOTFS/rootfs_${arch}.raw.img "
+ ARTIFACTS+="${PRODUCT_OUT}/obj/ROOTFS/rootfs_${arch}.raw.img.sha256sum "
+done
+
+for artifact in ${ARTIFACTS}
+do
+ if [[ ! -f ${artifact} ]]; then
+ echo "${artifact} not found!"
+ exit 1
+ fi
+done
+
+for artifact in ${ARTIFACTS}
+do
+ cp ${artifact} ${KOKORO_ARTIFACTS_DIR}
+done
+
+# For now, symlink rootfs_arm64 to rootfs.
+# Remove when nothing depends on rootfs.img existing.
+ln -sf rootfs_arm64.img ${KOKORO_ARTIFACTS_DIR}/rootfs.img
diff --git a/packages.mk b/packages.mk
index 39746eb..f1fd191 100644
--- a/packages.mk
+++ b/packages.mk
@@ -131,7 +131,7 @@
packages-tarball: $(ROOTDIR)/cache/packages.tgz
$(ROOTDIR)/cache/packages.tgz: $(ALL_PACKAGE_TARGETS) | out-dirs
$(ROOTDIR)/build/update_packages.sh
- tar -C $(PRODUCT_OUT) -czf $@ packages
+ tar -C $(PRODUCT_OUT) --overwrite -czf $@ packages
packages:: $(ALL_PACKAGE_TARGETS)
diff --git a/partition-table.mk b/partition-table.mk
index 94e558f..40f2047 100644
--- a/partition-table.mk
+++ b/partition-table.mk
@@ -54,11 +54,11 @@
$(TARGET_64GB_IMG): $(SOURCE_JSON)
$(TARGET_64GB_IMG): MMC_SIZE = $(MMC_64GB)
-$(PRODUCT_OUT)/%.json: $(SOURCE_JSON)
+$(PRODUCT_OUT)/partition-table-%.json: $(SOURCE_JSON)
mkdir -p $(@D)
$(BPTTOOL) make_table --disk_size $(MMC_SIZE) --input $< --output_json $@
-$(PRODUCT_OUT)/%.img: $(SOURCE_JSON)
+$(PRODUCT_OUT)/partition-table-%.img: $(SOURCE_JSON)
mkdir -p $(@D)
$(BPTTOOL) make_table --disk_size $(MMC_SIZE) --input $< --output_gpt $@
diff --git a/rootfs.mk b/rootfs.mk
index 9bcab6f..e0d5529 100644
--- a/rootfs.mk
+++ b/rootfs.mk
@@ -19,8 +19,11 @@
include $(ROOTDIR)/build/preamble.mk
ROOTFS_DIR := $(PRODUCT_OUT)/obj/ROOTFS/rootfs
-ROOTFS_RAW_IMG := $(PRODUCT_OUT)/obj/ROOTFS/rootfs.raw.img
-ROOTFS_PATCHED_IMG := $(PRODUCT_OUT)/obj/ROOTFS/rootfs.patched.img
+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
@@ -66,8 +69,10 @@
$(info *** Building packages locally, set FETCH_PACKAGES=true to use prebuilts)
endif
+$(ROOTFS_DIR):
+ mkdir -p $(ROOTFS_DIR)
-rootfs: $(PRODUCT_OUT)/rootfs.img
+rootfs: $(ROOTFS_IMG)
$(LOG) rootfs finished
rootfs_raw: $(ROOTFS_RAW_IMG)
@@ -77,16 +82,16 @@
sudo $(ROOTDIR)/build/fix_permissions.sh -p $(ROOTDIR)/build/permissions.txt -t $(ROOTFS_DIR)
ifeq ($(ROOTFS_FETCH_TARBALL),true)
-$(ROOTFS_RAW_IMG): $(TARBALL_FETCH_ROOT_DIRECTORY)/$(ROOTFS_REVISION)/rootfs.raw.img
+$(ROOTFS_RAW_IMG): $(ROOTFS_RAW_CACHE_PATH)
$(LOG) rootfs raw-fetch
mkdir -p $(dir $(ROOTFS_RAW_IMG))
cp $< $<.sha256sum $(dir $(ROOTFS_RAW_IMG))
$(LOG) rootfs raw-fetch finished
-else ifeq ($(shell test -f $(ROOTDIR)/cache/rootfs.raw.img && echo found),found)
-$(ROOTFS_RAW_IMG): $(ROOTDIR)/cache/rootfs.raw.img
+else ifeq ($(shell test -f $(ROOTFS_RAW_LOCAL_CACHE_PATH) && echo found),found)
+$(ROOTFS_RAW_IMG): $(ROOTFS_RAW_LOCAL_CACHE_PATH)
$(LOG) rootfs raw-cache
mkdir -p $(dir $(ROOTFS_RAW_IMG))
- cp $(ROOTDIR)/cache/rootfs.raw.img $(ROOTFS_RAW_IMG)
+ cp $(ROOTFS_RAW_LOCAL_CACHE_PATH) $(ROOTFS_RAW_IMG)
sha256sum $(ROOTFS_RAW_IMG) > $(ROOTFS_RAW_IMG).sha256sum
$(LOG) rootfs raw-cache finished
else
@@ -134,8 +139,9 @@
endif
$(ROOTFS_PATCHED_IMG): $(ROOTFS_PATCHED_DEPS) \
- | $(PRODUCT_OUT)/boot.img \
- /usr/bin/qemu-$(QEMU_ARCH)-static
+ | $(PRODUCT_OUT)/boot_$(USERSPACE_ARCH).img \
+ /usr/bin/qemu-$(QEMU_ARCH)-static \
+ $(ROOTFS_DIR)
$(LOG) rootfs patch
cp $(ROOTFS_RAW_IMG) $(ROOTFS_PATCHED_IMG).wip
mkdir -p $(ROOTFS_DIR)
@@ -143,7 +149,7 @@
-sudo umount $(ROOTFS_DIR)
sudo mount -o loop $(ROOTFS_PATCHED_IMG).wip $(ROOTFS_DIR)
-sudo mkdir -p $(ROOTFS_DIR)/boot
- sudo mount -o loop $(PRODUCT_OUT)/boot.img $(ROOTFS_DIR)/boot
+ sudo mount -o loop $(PRODUCT_OUT)/boot_$(USERSPACE_ARCH).img $(ROOTFS_DIR)/boot
-sudo mkdir -p $(ROOTFS_DIR)/dev
sudo mount -o bind /dev $(ROOTFS_DIR)/dev
sudo cp /usr/bin/qemu-$(QEMU_ARCH)-static $(ROOTFS_DIR)/usr/bin
@@ -179,15 +185,15 @@
mv $(ROOTFS_PATCHED_IMG).wip $(ROOTFS_PATCHED_IMG)
$(LOG) rootfs patch finished
-$(PRODUCT_OUT)/rootfs.img: $(HOST_OUT)/bin/img2simg $(ROOTFS_PATCHED_IMG)
+$(ROOTFS_IMG): $(HOST_OUT)/bin/img2simg $(ROOTFS_PATCHED_IMG)
$(LOG) rootfs img2simg
- $(HOST_OUT)/bin/img2simg $(ROOTFS_PATCHED_IMG) $(PRODUCT_OUT)/rootfs.img
+ $(HOST_OUT)/bin/img2simg $(ROOTFS_PATCHED_IMG) $(ROOTFS_IMG)
$(LOG) rootfs img2simg finished
clean::
if mount |grep -q $(ROOTFS_DIR); then sudo umount -R $(ROOTFS_DIR); fi
if [[ -d $(ROOTFS_DIR) ]]; then rmdir $(ROOTFS_DIR); fi
- rm -f $(ROOTFS_PATCHED_IMG) $(ROOTFS_RAW_IMG) $(PRODUCT_OUT)/rootfs.img
+ rm -f $(ROOTFS_PATCHED_IMG) $(ROOTFS_RAW_IMG) $(ROOTFS_IMG)
targets::
@echo "rootfs - runs multistrap to build the rootfs tree"