On 9/14/2026 12:28 AM, Alex Bennée wrote: > Pierrick Bouvier <[email protected]> writes: > >> On 9/10/26 11:15 AM, Alex Bennée wrote: >>> Previously we had the default baked into Makefile.include but as the >>> meson container logic will also benefit from it we update the configure >>> machinery. >>> For now we allow direct make invocations to override but for the >>> normal case it is in one place now. >>> Signed-off-by: Alex Bennée <[email protected]> >>> --- >>> configure | 8 ++++++++ >>> meson_options.txt | 3 +++ >>> tests/docker/Makefile.include | 4 +--- >>> tests/tcg/meson.build | 6 ++++++ >>> 4 files changed, 18 insertions(+), 3 deletions(-) >>> diff --git a/configure b/configure >>> index aaa41fe47aa..7d6b11ddd35 100755 >>> --- a/configure >>> +++ b/configure >>> @@ -172,6 +172,7 @@ fi >>> # some defaults, based on the host environment >>> # default parameters >>> +container_registry="registry.gitlab.com/qemu-project/qemu" >>> cpu="" >>> cross_compile="no" >>> cross_prefix="" >>> @@ -728,6 +729,9 @@ for opt do >>> ;; >>> --container-command=*) meson_option_add -Dcontainer_command="$optarg" >>> ;; >>> + --container-registry=*) container_registry="$optarg" >>> + meson_option_add -Dcontainer_registry="$optarg" >>> + ;; >>> --rust-target-triple=*) rust_target_triple="$optarg" >>> ;; >>> --gdb=*) meson_option_add -Dgdb="$optarg" >>> @@ -862,6 +866,7 @@ Advanced options (experts only): >>> --cpu=CPU Build for host CPU [$cpu] >>> --disable-containers don't use containers for cross-building >>> --container-command=CMD which container command to use [autodetect] >>> + --container-registry=URL which container registry to cache from >>> [$container_registry] >>> --gdb=GDB-path gdb to use for gdbstub tests [autodetect] >>> --wasm64-32bit-address-limit Restrict wasm64 address space to 32-bit >>> (default >>> is to use the whole 64-bit range). >>> @@ -1318,6 +1323,9 @@ echo "GENISOIMAGE=$genisoimage" >> $config_host_mak >>> echo "MESON=$meson" >> $config_host_mak >>> echo "NINJA=$ninja" >> $config_host_mak >>> echo "EXESUF=$EXESUF" >> $config_host_mak >>> +if test -n "$container_registry"; then >>> + echo "DOCKER_DEFAULT_REGISTRY=$container_registry" >> $config_host_mak >>> +fi >>> if test "$default_targets" = "yes"; then >>> echo "CONFIG_DEFAULT_TARGETS=y" >> $config_host_mak >>> fi >>> diff --git a/meson_options.txt b/meson_options.txt >>> index 292625af08a..030231492e1 100644 >>> --- a/meson_options.txt >>> +++ b/meson_options.txt >>> @@ -391,6 +391,9 @@ option('containers', type: 'boolean', value: true, >>> description: 'use containers to cross compile tcg tests') >>> option('container_command', type: 'string', >>> description: 'command to build/run containers') >>> +option('container_registry', type: 'string', >>> + value: 'registry.gitlab.com/qemu-project/qemu', >>> + description: 'container registry to cache from') >>> option('tcg_tests_cross_cc_aarch64', type: 'string', >>> description: 'cc for aarch64 tcg tests') >>> diff --git a/tests/docker/Makefile.include b/tests/docker/Makefile.include >>> index 0adddb6a5c6..74bf471f171 100644 >>> --- a/tests/docker/Makefile.include >>> +++ b/tests/docker/Makefile.include >>> @@ -11,9 +11,7 @@ USER = $(if $(NOUSER),,$(shell id -un)) >>> UID = $(if $(NOUSER),,$(shell id -u)) >>> DOCKER_FILES_DIR := $(SRC_PATH)/tests/docker/dockerfiles >>> -ifeq ($(HOST_ARCH),x86_64) >>> -DOCKER_DEFAULT_REGISTRY := registry.gitlab.com/qemu-project/qemu >>> -endif >>> +DOCKER_DEFAULT_REGISTRY ?= registry.gitlab.com/qemu-project/qemu >>> DOCKER_REGISTRY := $(if >>> $(REGISTRY),$(REGISTRY),$(DOCKER_DEFAULT_REGISTRY)) >>> >> >> Couldn't we read the default from config_host_mak generated by >> configure instead? >> >>> CONTAINER_COMMAND ?= $(shell $(SRC_PATH)/tests/docker/docker.py probe) >>> diff --git a/tests/tcg/meson.build b/tests/tcg/meson.build >>> index 814f2f8cd8c..22157a47c96 100644 >>> --- a/tests/tcg/meson.build >>> +++ b/tests/tcg/meson.build >>> @@ -101,6 +101,9 @@ if get_option('containers') >>> endif >>> endif >>> tcg_tests_summary += {'container command': container_command} >>> +if get_option('container_registry') != '' >>> + tcg_tests_summary += {'container registry': >>> get_option('container_registry')} >>> +endif >>> # plugins come first, as we need to build the list >>> test_plugins = {} >>> @@ -257,6 +260,9 @@ foreach target, plan: tcg_tests >>> if cc_dockerfile not in image_targets and has_docker >>> cmd = [docker_wrapper, 'build', '-f', dockerfile, '-t', 'qemu/' + >>> cc_dockerfile, >>> '--add-current-user'] >>> + if get_option('container_registry') != '' >>> + cmd += ['--registry', get_option('container_registry')] >>> + endif >>> t = custom_target(image_name, command: cmd, >>> build_by_default: false, >>> output: 'no_output_' + image_name) >> >> Do user benefit from this, or is it mostly for CI need? > > The aim is for faster image builds because the CI registry should always > be up to date. Most of the time the images don't change. >
Ok. In this case, you need to add --timestamp 0 (that's enough in what I tested) to original build command that generates those layers from our CI, and use it here also. Else --cache-from does not work as intended and you'll see have some duplication because timestamp is part of hash for each layer. See this guide for more info: https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/10/html/building_running_and_managing_containers/introduction-to-reproducible-container-builds >> >> The effect is to use --cache-from $registry, which I'm not sure is >> what we want by default, given all the "caching issues" we had >> previously with dockerfiles already. >> If that's for CI, maybe it could simply set with --container-command >> in our CI only. >> >> Regards, >> Pierrick >
