
Split dynamic target generation across several lines to make the nested loops more obvious. Backslashes are needed for make to be happy about what would otherwise be detected as unfinished foreach function calls.
76 lines
2.3 KiB
Makefile
76 lines
2.3 KiB
Makefile
all: shasums
|
|
|
|
# List all the supported and built Pi platforms here. They get expanded
|
|
# to names like 'raspi_2_buster.yaml' and 'raspi_3_bullseye.img.xz'.
|
|
BUILD_FAMILIES := 1 2 3 4
|
|
BUILD_RELEASES := buster bullseye
|
|
|
|
platforms := $(foreach plat, $(BUILD_FAMILIES),$(foreach rel, $(BUILD_RELEASES), raspi_$(plat)_$(rel)))
|
|
|
|
shasums: $(addsuffix .img.sha256,$(platforms)) $(addsuffix .img.xz.sha256,$(platforms))
|
|
xzimages: $(addsuffix .img.xz,$(platforms))
|
|
images: $(addsuffix .img,$(platforms))
|
|
yaml: $(addsuffix .yaml,$(platforms))
|
|
|
|
ifeq ($(shell id -u),0)
|
|
as_root =
|
|
else ifneq (,$(wildcard /usr/bin/fakemachine))
|
|
$(warning "This should normally be run as root, but found 'fakemachine', so using that.")
|
|
as_root = fakemachine -v $(CURDIR) -- env --chdir $(CURDIR)
|
|
else
|
|
$(error "This must be run as root")
|
|
endif
|
|
|
|
target_platforms:
|
|
@echo $(platforms)
|
|
|
|
# Generate targets based on all family * release combinations:
|
|
define dynamic_yaml_target =
|
|
raspi_$(1)_$(2).yaml: raspi_master.yaml generate-recipe.py
|
|
raspi_$(1)_$(2).yaml:
|
|
./generate-recipe.py $(1) $(2)
|
|
endef
|
|
$(foreach release,$(BUILD_RELEASES), \
|
|
$(foreach family,$(BUILD_FAMILIES), \
|
|
$(eval $(call dynamic_yaml_target,$(family),$(release)))))
|
|
|
|
%.img.sha256: %.img
|
|
echo $@
|
|
sha256sum $< > $@
|
|
|
|
%.img.xz.sha256: %.img.xz
|
|
echo $@
|
|
sha256sum $< > $@
|
|
|
|
%.img.xz: %.img
|
|
xz -f -k -z -9 $<
|
|
|
|
%.img.bmap: %.img
|
|
bmaptool create -o $@ $<
|
|
|
|
%.img: %.yaml
|
|
touch $(@:.img=.log)
|
|
time nice $(as_root) vmdb2 --verbose --rootfs-tarball=$(subst .img,.tar.gz,$@) --output=$@ $(subst .img,.yaml,$@) --log $(subst .img,.log,$@)
|
|
chmod 0644 $@ $(@,.img=.log)
|
|
|
|
_ck_root:
|
|
[ `whoami` = 'root' ] # Only root can summon vmdb2 ☹
|
|
|
|
_clean_yaml:
|
|
rm -f $(addsuffix .yaml,$(platforms)) raspi_base_buster.yaml raspi_base_bullseye.yaml
|
|
_clean_images:
|
|
rm -f $(addsuffix .img,$(platforms))
|
|
_clean_xzimages:
|
|
rm -f $(addsuffix .img.xz,$(platforms))
|
|
_clean_bmaps:
|
|
rm -f $(addsuffix .img.bmap,$(platforms))
|
|
_clean_shasums:
|
|
rm -f $(addsuffix .sha256,$(platforms)) $(addsuffix .img.xz.sha256,$(platforms))
|
|
_clean_logs:
|
|
rm -f $(addsuffix .log,$(platforms))
|
|
_clean_tarballs:
|
|
rm -f $(addsuffix .tar.gz,$(platforms))
|
|
clean: _clean_xzimages _clean_images _clean_shasums _clean_yaml _clean_tarballs _clean_logs _clean_bmaps
|
|
|
|
.PHONY: _ck_root _build_img clean _clean_images _clean_yaml _clean_tarballs _clean_logs
|