blob: f25e4a00e7fb7ee4e732fe2cb1ef966dcb516b0a [file] [log] [blame] [edit]
# Copyright 2024 The ChromiumOS Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
# make CONFIG=hatch-bloonchipper-test all
CONFIG ?= brya-latest-test
# Example: 2023-06-25
DATE_DAY := $(shell date --iso-8601)
# Example: 2023-06-25_21:13:15+00:00
# DATE_SEC := $(shell date --rfc-3339=seconds | tr ' ' '_')
# Example: 2023-06-25_14:32:09_PDT
DATE_SEC := $(shell date "+%Y-%m-%d_%H:%M:%S_%Z")
out = $(CONFIG)
include $(out)/build_config.mk
IMAGE := fpstudy-image-$(BOARD)-$(BRANCH).bin
BUNDLE := fpstudy-bundle-$(BOARD)-$(TYPE)-$(BRANCH).tar.gz
BUNDLE_ARCHIVE := fpstudy-bundle-$(BOARD)-$(TYPE)-$(BRANCH)-$(DATE_SEC).tar.gz
BUILD_ROOT := $(HOME)/chromiumos-fpstudy-$(BOARD)-$(BRANCH)
# Artifacts that we want to see after running "make all"
TARGETS = $(BUNDLE) README.html README.md checksum.md5
all : $(out)/$(BUNDLE)
help:
@echo "Ex: make CONFIG=$(CONFIG)"
$(out)/% : TEMPLATE_%.in
cp $< $@
sed -i "s|@BOARD@|$(BOARD)|" $@
sed -i "s|@DATE_DAY@|$(DATE_DAY)|" $@
sed -i "s|@DATE_SEC@|$(DATE_SEC)|" $@
sed -i "s|@BRANCH@|$(BRANCH)|" $@
sed -i "s|@BRANCH_SHORT@|$(BRANCH_SHORT)|" $@
sed -i "s|@IMAGE@|$(IMAGE)|" $@
sed -i "s|@DESCRIPTION@|$(DESCRIPTION)|" $@
%.html : %.md
pandoc -t html -o $@ $^
%.pdf : %.md
pandoc -t pdf -o $@ $^
#fpstudy-install.tar.gz: run.sh
# docker run "-v$(pwd):/out" -it debian /out/run.sh
# If we directly depend on build.sh, it will trigger a massive
# rebuild if the build.sh or build_config.sh files are touched.
#
# If we remove the dependency on these, we will only trigger
# a rebuild if the release version is changed. This doesn't work
# if we are using the "stable" branch name.
$(out)/$(IMAGE) : build.sh $(out)/build_config.sh
bash build.sh "$(CONFIG)"
$(out)/checksum.md5 : $(addprefix $(out)/,README.html README.md $(IMAGE))
$(RM) $@
bash drivefs-util.sh wait $^
md5sum $^ | sed "s|$(out)/||" >$@
# We remove the archive if tar failed, but we still need to return an error
# to stop the build.
#
# If we are writing to DriveFS, we see that the subsequent tar command fails
# with an error about the file changing while reading. Add this in the hopes
# that it forces DriveFS to stabilize.
$(out)/$(BUNDLE) : $(addprefix $(out)/,README.html README.md $(IMAGE) checksum.md5)
@echo "# wait for drivefs upload ##########################################"
@# This avoids the "file changed as we read it" tar error we keep seeing.
@# Note that sync doesn't help here.
./drivefs-util.sh wait $^
@echo "# syncing ##########################################################"
sync $^
sleep 1 # Wait for any possible file swaps that drive-fs needs to make
@echo "# bundling #########################################################"
mkdir -p "$(out)/archive"
tar czvf "$(out)/archive/$(BUNDLE_ARCHIVE)" -C "$(out)" $(subst $(out)/,,$^) || ( rm "$@" && false )
ln -f -s "$(out)/archive/$(BUNDLE_ARCHIVE)" "$@"
@#cp "$(out)/archive/$(BUNDLE_ARCHIVE)" "$@"
verify :
cd "$(out)"; md5sum -c checksum.md5
clean :
$(RM) $(addprefix $(out)/,$(TARGETS))
$(RM) -i $(out)/$(IMAGE)
# Can't access DriveFS mount from root, so we must copt to tmp first.
flash : IMAGE_TMP := $(shell mktemp /tmp/fpstudy-image-XXXX.bin)
flash :
@[ -b "$(OF)" ] \
|| ( echo "Error - The variable 'OF=$(OF)' is invalid." \
&& echo -e "Example: make flash CONFIG=brya-latest-test OF=/dev/sdX." \
&& exit 1 )
sudo umount $(OF)* || true
cp -v "$(out)/$(IMAGE)" "$(IMAGE_TMP)"
sudo dd if="$(IMAGE_TMP)" bs=4M status=progress oflag=sync of="$(OF)"
sudo sync
.PHONY: all clean verify help flash