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 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