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
> 


Reply via email to