manibuilder: Switch to a per-image ccache
We used to have one big, shared ccache dir used by almost all images.
This doesn't scale well when we already know that parallel builds
(for different architectures, for instance) don't have a chance to
hit the same cache entries. Also, newer versions of ccache seem to
have a problem with this setup (Debian Bookworm and Fedora 37, to be
investigated).
We pass a per-image identifier `${IDENT}` into the build and place
the cache in `/ccache/${IDENT}`. However, the configuration is kept
in the default location, e.g. `~/.ccache/ccache.conf`. We can't
configure this via ENV variables easily, because some distributions
override them.
We used to have the default 5GiB ccache limit. Now with the growing
list of images, we set a 32MiB limit per image. This should keep us
within 5GiB for a while.
Change-Id: I082f95aee050efad85867b309d363f61bfea751e
Signed-off-by: Nico Huber <nico.h@gmx.de>
Reviewed-on: https://review.coreboot.org/c/flashrom-stable/+/73471
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
diff --git a/util/manibuilder/Makefile b/util/manibuilder/Makefile
index e6834cf..bef0ad7 100644
--- a/util/manibuilder/Makefile
+++ b/util/manibuilder/Makefile
@@ -21,14 +21,14 @@
.INTERMEDIATE: Dockerfile.$(call ident,$(1))
$(1)-build: Dockerfile.$(call ident,$(1))
- $(QUIET_SETUP)docker build . -f $$< -t mani/$(1) $$(DOCKER_BUILD_ARGS)
+ $(QUIET_SETUP)docker build . -f $$< -t mani/$(1) --build-arg IDENT=$(call ident,$(1)) $$(DOCKER_BUILD_ARGS)
endef
$(foreach tag,$(MULTIARCH_TAGS), \
$(eval $(call build_template,$(tag),multiarch)))
djgpp\:6.1.0-build: %-build: Dockerfile.djgpp mani-wrapper.sh
- $(QUIET_SETUP)docker build . -f $< -t mani/$*
+ $(QUIET_SETUP)docker build . -f $< -t mani/$* --build-arg IDENT=$(call ident,$*)
git-check-build $(addsuffix -check-build,$(ALL_TAGS)): %-check-build:
$(QUIET_SETUP)\
@@ -56,7 +56,7 @@
docker run \
$(MANI_DOCKER_ARGS) \
--env IDENT=$(call ident,$*) \
- --volume manicache:/home/mani/.ccache \
+ --volume manicache:/ccache \
--network=manibuilder \
--name mani_$(call ident,$*) mani/$* \
"git fetch $(TEST_REMOTE) $(TEST_REVISION) && \
@@ -75,7 +75,7 @@
docker run --rm -it \
$(MANI_DOCKER_ARGS) \
--env IDENT=$(call ident,$*) \
- --volume manicache:/home/mani/.ccache \
+ --volume manicache:/ccache \
--network=manibuilder \
--entrypoint /bin/sh mani_run/$* \
/home/mani/mani-wrapper.sh \
@@ -85,7 +85,7 @@
docker run --rm -it \
$(MANI_DOCKER_ARGS) \
--env IDENT=$(call ident,$*) \
- --volume manicache:/home/mani/.ccache \
+ --volume manicache:/ccache \
--network=manibuilder \
mani/$* $(patsubst %,"%",$(SHELL_ARG)); \
fi