* [PATCH v3 00/17] testing: various docker clean-ups post meson tcg conversion
@ 2026-09-16 8:53 Alex Bennée
2026-09-16 8:53 ` [PATCH v3 01/17] Revert "configure: remove cross_cc and gdb detection logic" Alex Bennée
` (17 more replies)
0 siblings, 18 replies; 24+ messages in thread
From: Alex Bennée @ 2026-09-16 8:53 UTC (permalink / raw)
To: qemu-devel
Cc: John Snow, Daniel P. Berrangé, Helge Deller, Peter Maydell,
Thomas Huth, Richard Henderson, Brad Smith, qemu-arm,
Fabiano Rosas, Warner Losh, Cleber Rosa,
Philippe Mathieu-Daudé, Ilya Leoshkevich, Cornelia Huck,
Paolo Bonzini, Brian Cain, Song Gao, Kyle Evans, Jiaxun Yang,
Eric Farman, Marc-André Lureau, Laurent Vivier,
Alex Bennée, Pierrick Bouvier
This cleans up a few bits and pieces although doesn't totally solve
the issue of an apparent stall while meson builds the docker image.
However with these changes there should be no difference between the
meson build and the equivalent "make docker-image-foo" invocation.
We also finally get rid of the ill-advised magic caching support in
docker.py.
v3
- Update make2test to trigger docker build from Makefile.include.
- add Daniels's suggested console: true patch
- fixed up some unref vars from the reverts
v2
I've restored the configure based compiler checks for so we can build
roms and the vdso blobs again. It looks like we could never build roms
with container based images so I've left it for now. Unlike the vdso
build we can't trigger a container build through Makefile.prereqs.
TODO
----
I've still got Ilya's s390 test image patches to look at but I'm
sending v2 because enough people are hitting issues.
I also need to look at the timestamp stuff that Pierrick has suggested
to see if that improves the caching from the registry.
The following still need review:
tests/tcg: add console property to docker image custom target
scripts/make2mtest: add docker dependencies for check-tcg-% targets
tests/docker: fix brown bag typo for docker-ccache
tests/docker: swap --quiet for --verbose
tests/docker: add container registry to configure and use
tests/tcg: use --add-current-user when building containers
configure: re-purpose the tcg test compiler configs for vdso building
Revert "tests/tcg/meson.build: implement ./configure -cross-cc-* options"
Please test and review.
Alex.
Alex Bennée (15):
Revert "configure: remove cross_cc and gdb detection logic"
Revert "tests/tcg/meson.build: implement ./configure -cross-cc-*
options"
Revert "tests/tcg/meson.build: implement ./configure containers
options"
configure: re-purpose the tcg test compiler configs for vdso building
tests/tcg: prefix meson built docker tags with qemu/
tests/tcg: use --add-current-user when building containers
tests/docker: add container registry to configure and use
tests/docker: remove used _read_qemu_dockerfile
tests/docker: strip remaining caching logic from docker.py
tests/docker: add specific command to parser
tests/docker: swap --quiet for --verbose
tests/docker: fix brown bag typo for docker-ccache
gitlab: update the @user id mapping file
scripts/make2mtest: add docker dependencies for check-tcg-% targets
tests/tcg: add console property to docker image custom target
Daniel P. Berrangé (2):
configure: correctly honour --disable-containers
tests/tcg: improve check for working cross compilers
configure | 491 +++++++++++++++++++++++-
tests/tcg/test_cc.c | 6 +-
.gitlab-map-auto | 8 +-
linux-user/aarch64/Makefile.vdso | 2 +-
linux-user/arm/Makefile.vdso | 2 +-
linux-user/hppa/Makefile.vdso | 2 +-
linux-user/i386/Makefile.vdso | 2 +-
linux-user/loongarch64/Makefile.vdso | 2 +-
linux-user/ppc/Makefile.vdso | 2 +-
linux-user/riscv/Makefile.vdso | 2 +-
linux-user/s390x/Makefile.vdso | 2 +-
linux-user/sh4/Makefile.vdso | 2 +-
linux-user/x86_64/Makefile.vdso | 2 +-
meson_options.txt | 95 +----
scripts/coverity-scan/run-coverity-scan | 2 +-
scripts/gitlab-map-update | 2 +-
scripts/meson-buildoptions.sh | 3 +
scripts/mtest2make.py | 35 +-
tests/docker/Makefile.include | 16 +-
tests/docker/docker.py | 188 ++++-----
tests/tcg/meson.build | 72 +---
21 files changed, 627 insertions(+), 311 deletions(-)
--
2.47.3
^ permalink raw reply [flat|nested] 24+ messages in thread
* [PATCH v3 01/17] Revert "configure: remove cross_cc and gdb detection logic"
2026-09-16 8:53 [PATCH v3 00/17] testing: various docker clean-ups post meson tcg conversion Alex Bennée
@ 2026-09-16 8:53 ` Alex Bennée
2026-09-16 8:53 ` [PATCH v3 02/17] Revert "tests/tcg/meson.build: implement ./configure -cross-cc-* options" Alex Bennée
` (16 subsequent siblings)
17 siblings, 0 replies; 24+ messages in thread
From: Alex Bennée @ 2026-09-16 8:53 UTC (permalink / raw)
To: qemu-devel
Cc: John Snow, Daniel P. Berrangé, Helge Deller, Peter Maydell,
Thomas Huth, Richard Henderson, Brad Smith, qemu-arm,
Fabiano Rosas, Warner Losh, Cleber Rosa,
Philippe Mathieu-Daudé, Ilya Leoshkevich, Cornelia Huck,
Paolo Bonzini, Brian Cain, Song Gao, Kyle Evans, Jiaxun Yang,
Eric Farman, Marc-André Lureau, Laurent Vivier,
Alex Bennée, Pierrick Bouvier
We want to restore the logic to configure as it's also used by the
firmware builds.
This reverts commit 031f935567ab8abfa4e84682ecea08915ca9656d.
Reviewed-by: Pierrick Bouvier <pierrick.bouvier@oss.qualcomm.com>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
configure | 461 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 461 insertions(+)
diff --git a/configure b/configure
index aaa41fe47aa..1973f023b1e 100755
--- a/configure
+++ b/configure
@@ -1266,6 +1266,366 @@ EOF
fi
fi
+##########################################
+# functions to probe cross compilers
+
+if test "$container_command" = ""; then
+ container_command=$($python "$source_path"/tests/docker/docker.py probe)
+ test "$container_command" = "no" && container_command=""
+fi
+if test $use_containers = "yes" && test "$container_command" != ""; then
+ docker_py="$python $source_path/tests/docker/docker.py --command $container_command"
+fi
+
+# cross compilers defaults, can be overridden with --cross-cc-ARCH
+: ${cross_prefix_aarch64="aarch64-linux-gnu-"}
+: ${cross_prefix_aarch64_be="$cross_prefix_aarch64"}
+: ${cross_prefix_alpha="alpha-linux-gnu-"}
+: ${cross_prefix_arm="arm-linux-gnueabihf-"}
+: ${cross_prefix_armeb="$cross_prefix_arm"}
+: ${cross_prefix_hexagon="hexagon-unknown-linux-musl-"}
+: ${cross_prefix_loongarch64="loongarch64-unknown-linux-gnu-"}
+: ${cross_prefix_hppa="hppa-linux-gnu-"}
+: ${cross_prefix_i386="i686-linux-gnu-"}
+: ${cross_prefix_m68k="m68k-linux-gnu-"}
+: ${cross_prefix_microblaze="microblaze-linux-musl-"}
+: ${cross_prefix_mips64el="mips64el-linux-gnuabi64-"}
+: ${cross_prefix_mips64="mips64-linux-gnuabi64-"}
+: ${cross_prefix_mipsel="mipsel-linux-gnu-"}
+: ${cross_prefix_mips="mips-linux-gnu-"}
+: ${cross_prefix_ppc="powerpc-linux-gnu-"}
+: ${cross_prefix_ppc64="powerpc64-linux-gnu-"}
+: ${cross_prefix_ppc64le="$cross_prefix_ppc64"}
+: ${cross_prefix_riscv64="riscv64-linux-gnu-"}
+: ${cross_prefix_s390x="s390x-linux-gnu-"}
+: ${cross_prefix_sh4="sh4-linux-gnu-"}
+: ${cross_prefix_sparc64="sparc64-linux-gnu-"}
+: ${cross_prefix_sparc="$cross_prefix_sparc64"}
+: ${cross_prefix_tricore="tricore-"}
+: ${cross_prefix_x86_64="x86_64-linux-gnu-"}
+
+: ${cross_cc_aarch64_be="$cross_cc_aarch64"}
+: ${cross_cc_cflags_aarch64_be="-mbig-endian"}
+: ${cross_cc_armeb="$cross_cc_arm"}
+: ${cross_cc_cflags_armeb="-mbig-endian"}
+: ${cross_cc_hexagon="hexagon-unknown-linux-musl-clang"}
+: ${cross_cc_cflags_hexagon="-mv73 -O2 -static"}
+: ${cross_cc_cflags_i386="-m32"}
+: ${cross_cc_cflags_ppc="-m32 -mbig-endian"}
+: ${cross_cc_cflags_ppc64="-m64 -mbig-endian"}
+: ${cross_cc_ppc64le="$cross_cc_ppc64"}
+: ${cross_cc_cflags_ppc64le="-m64 -mlittle-endian"}
+: ${cross_cc_cflags_sparc64="-m64 -mcpu=ultrasparc"}
+: ${cross_cc_sparc="$cross_cc_sparc64"}
+: ${cross_cc_cflags_sparc="-m32 -mcpu=supersparc"}
+: ${cross_cc_cflags_x86_64="-m64 -mcx16"}
+
+compute_target_variable() {
+ eval "$2="
+ if eval test -n "\"\${cross_prefix_$1}\""; then
+ if eval has "\"\${cross_prefix_$1}\$3\""; then
+ eval "$2=\"\${cross_prefix_$1}\$3\""
+ fi
+ fi
+}
+
+have_target() {
+ for i; do
+ case " $target_list " in
+ *" $i "*) return 0;;
+ *) ;;
+ esac
+ done
+ return 1
+}
+
+# probe_target_compiler TARGET
+#
+# Look for a compiler for the given target, either native or cross.
+# Set variables target_* if a compiler is found, and container_cross_*
+# if a Docker-based cross-compiler image is known for the target.
+# Set got_cross_cc to yes/no depending on whether a non-container-based
+# compiler was found.
+#
+# If TARGET is a user-mode emulation target, also set build_static to
+# "y" if static linking is possible.
+#
+probe_target_compiler() {
+ # reset all output variables
+ got_cross_cc=no
+ container_image=
+ container_hosts=
+ container_cross_prefix=
+ container_cross_cc=
+ container_cross_ar=
+ container_cross_as=
+ container_cross_ld=
+ container_cross_nm=
+ container_cross_objcopy=
+ container_cross_ranlib=
+ container_cross_strip=
+
+ target_arch=${1%%-*}
+ case $target_arch in
+ aarch64) container_hosts="x86_64 aarch64" ;;
+ aarch64_be) container_hosts="x86_64 aarch64" ;;
+ alpha) container_hosts=x86_64 ;;
+ arm) container_hosts="x86_64 aarch64" ;;
+ hexagon) container_hosts=x86_64 ;;
+ hppa) container_hosts=x86_64 ;;
+ i386) container_hosts=x86_64 ;;
+ loongarch64) container_hosts=x86_64 ;;
+ m68k) container_hosts=x86_64 ;;
+ microblaze) container_hosts=x86_64 ;;
+ mips64el) container_hosts=x86_64 ;;
+ mips64) container_hosts=x86_64 ;;
+ mipsel) container_hosts=x86_64 ;;
+ mips) container_hosts=x86_64 ;;
+ ppc) container_hosts=x86_64 ;;
+ ppc64|ppc64le) container_hosts=x86_64 ;;
+ riscv64) container_hosts=x86_64 ;;
+ s390x) container_hosts=x86_64 ;;
+ sh4) container_hosts=x86_64 ;;
+ sparc64) container_hosts=x86_64 ;;
+ tricore) container_hosts=x86_64 ;;
+ x86_64) container_hosts="aarch64 ppc64le x86_64" ;;
+ xtensa*) container_hosts=x86_64 ;;
+ esac
+
+ for host in $container_hosts; do
+ test "$container_command" != "" || continue
+ test "$host" = "$cpu" || continue
+ case $target_arch in
+ # debian-all-test-cross architectures
+
+ aarch64_be)
+ container_image=debian-all-test-cross
+ container_cross_prefix=aarch64-linux-gnu-
+ ;;
+ alpha|hppa|m68k|mips|mipsel|riscv64|sh4|sparc64)
+ container_image=debian-all-test-cross
+ ;;
+ mips64)
+ container_image=debian-all-test-cross
+ container_cross_prefix=mips64-linux-gnuabi64-
+ ;;
+ ppc|ppc64|ppc64le)
+ container_image=debian-all-test-cross
+ container_cross_prefix=powerpc${target_arch#ppc}-linux-gnu-
+ ;;
+
+ # architectures with individual containers
+
+ aarch64)
+ # We don't have any bigendian build tools so we only use this for AArch64
+ container_image=debian-arm64-cross
+ ;;
+ arm)
+ # We don't have any bigendian build tools so we only use this for ARM
+ container_image=debian-armhf-cross
+ container_cross_prefix=arm-linux-gnueabihf-
+ ;;
+ hexagon)
+ container_cross_prefix=hexagon-unknown-linux-musl-
+ container_cross_cc=${container_cross_prefix}clang
+ ;;
+ i386)
+ container_image=debian-i686-cross
+ container_cross_prefix=i686-linux-gnu-
+ ;;
+ loongarch64)
+ container_image=debian-loongarch-cross
+ container_cross_prefix=loongarch64-unknown-linux-gnu-
+ ;;
+ microblaze)
+ container_cross_prefix=microblaze-linux-musl-
+ ;;
+ mips64el)
+ container_image=debian-all-test-cross
+ container_cross_prefix=mips64el-linux-gnuabi64-
+ ;;
+ tricore)
+ container_image=debian-tricore-cross
+ container_cross_prefix=tricore-
+ ;;
+ x86_64)
+ container_image=debian-amd64-cross
+ ;;
+ xtensa*)
+ container_image=debian-xtensa-cross
+
+ # default to the dc232b cpu
+ container_cross_prefix=/opt/2020.07/xtensa-dc232b-elf/bin/xtensa-dc232b-elf-
+ ;;
+ esac
+ # Debian and GNU architecture names usually match
+ : ${container_image:=debian-$target_arch-cross}
+ : ${container_cross_prefix:=$target_arch-linux-gnu-}
+ : ${container_cross_cc:=${container_cross_prefix}gcc}
+ : ${container_cross_ar:=${container_cross_prefix}ar}
+ : ${container_cross_as:=${container_cross_prefix}as}
+ : ${container_cross_ld:=${container_cross_prefix}ld}
+ : ${container_cross_nm:=${container_cross_prefix}nm}
+ : ${container_cross_objcopy:=${container_cross_prefix}objcopy}
+ : ${container_cross_ranlib:=${container_cross_prefix}ranlib}
+ : ${container_cross_strip:=${container_cross_prefix}strip}
+ done
+
+ try=cross
+ # For softmmu/roms also look for a bi-endian or multilib-enabled host compiler
+ if [ "${1%softmmu}" != "$1" ] || test "$target_arch" = "$cpu"; then
+ case "$target_arch:$cpu" in
+ aarch64_be:aarch64 | \
+ armeb:arm | \
+ i386:x86_64 | \
+ ppc*:ppc64 | \
+ sparc:sparc64 | \
+ "$cpu:$cpu")
+ try='native cross' ;;
+ esac
+ fi
+ eval "target_cflags=\${cross_cc_cflags_$target_arch}"
+ for thistry in $try; do
+ case $thistry in
+ native)
+ target_cc=$cc
+ target_ccas=$ccas
+ target_ar=$ar
+ target_as=$as
+ target_ld=$ld
+ target_nm=$nm
+ target_objcopy=$objcopy
+ target_ranlib=$ranlib
+ target_strip=$strip
+ ;;
+ cross)
+ target_cc=
+ if eval test -n "\"\${cross_cc_$target_arch}\""; then
+ if eval has "\"\${cross_cc_$target_arch}\""; then
+ eval "target_cc=\"\${cross_cc_$target_arch}\""
+ fi
+ else
+ compute_target_variable $target_arch target_cc gcc
+ fi
+ target_ccas=$target_cc
+ compute_target_variable $target_arch target_ar ar
+ compute_target_variable $target_arch target_as as
+ compute_target_variable $target_arch target_ld ld
+ compute_target_variable $target_arch target_nm nm
+ compute_target_variable $target_arch target_objcopy objcopy
+ compute_target_variable $target_arch target_ranlib ranlib
+ compute_target_variable $target_arch target_strip strip
+ ;;
+ esac
+
+ if test -n "$target_cc"; then
+ case $target_arch in
+ i386|x86_64)
+ if $target_cc --version | grep -qi "clang"; then
+ continue
+ fi
+ ;;
+ esac
+ elif test -n "$target_as" && test -n "$target_ld"; then
+ # Special handling for assembler only targets
+ case $target in
+ tricore-softmmu)
+ build_static=
+ got_cross_cc=yes
+ break
+ ;;
+ *)
+ continue
+ ;;
+ esac
+ else
+ continue
+ fi
+
+ write_c_skeleton
+ case $1 in
+ *-softmmu)
+ if do_compiler "$target_cc" $target_cflags -o $TMPO -c $TMPC &&
+ do_compiler "$target_cc" $target_cflags -r -nostdlib -o "${TMPDIR1}/${TMPB}2.o" "$TMPO" -lgcc; then
+ got_cross_cc=yes
+ break
+ fi
+ ;;
+ *)
+ if do_compiler "$target_cc" $target_cflags -o $TMPE $TMPC -static ; then
+ build_static=y
+ got_cross_cc=yes
+ break
+ fi
+ if do_compiler "$target_cc" $target_cflags -o $TMPE $TMPC ; then
+ build_static=
+ got_cross_cc=yes
+ break
+ fi
+ ;;
+ esac
+ done
+ if test $got_cross_cc != yes; then
+ build_static=
+ target_cc=
+ target_ccas=
+ target_ar=
+ target_as=
+ target_ld=
+ target_nm=
+ target_objcopy=
+ target_ranlib=
+ target_strip=
+ fi
+ test -n "$target_cc"
+}
+
+write_target_makefile() {
+ echo "PYTHON=$python"
+ echo "EXTRA_CFLAGS=$target_cflags"
+ if test -z "$target_cc" && test -z "$target_as"; then
+ test -z "$container_image" && error_exit "Internal error: could not find cross compiler for $1?"
+ echo "$1: docker-image-$container_image" >> Makefile.prereqs
+ if test -n "$container_cross_cc"; then
+ echo "CC=$docker_py cc --cc $container_cross_cc -i qemu/$container_image -s $source_path --"
+ echo "CCAS=$docker_py cc --cc $container_cross_cc -i qemu/$container_image -s $source_path --"
+ fi
+ echo "AR=$docker_py cc --cc $container_cross_ar -i qemu/$container_image -s $source_path --"
+ echo "AS=$docker_py cc --cc $container_cross_as -i qemu/$container_image -s $source_path --"
+ echo "LD=$docker_py cc --cc $container_cross_ld -i qemu/$container_image -s $source_path --"
+ echo "NM=$docker_py cc --cc $container_cross_nm -i qemu/$container_image -s $source_path --"
+ echo "OBJCOPY=$docker_py cc --cc $container_cross_objcopy -i qemu/$container_image -s $source_path --"
+ echo "RANLIB=$docker_py cc --cc $container_cross_ranlib -i qemu/$container_image -s $source_path --"
+ echo "STRIP=$docker_py cc --cc $container_cross_strip -i qemu/$container_image -s $source_path --"
+ else
+ if test -n "$target_cc"; then
+ echo "CC=$target_cc"
+ echo "CCAS=$target_ccas"
+ fi
+ if test -n "$target_ar"; then
+ echo "AR=$target_ar"
+ fi
+ if test -n "$target_as"; then
+ echo "AS=$target_as"
+ fi
+ if test -n "$target_ld"; then
+ echo "LD=$target_ld"
+ fi
+ if test -n "$target_nm"; then
+ echo "NM=$target_nm"
+ fi
+ if test -n "$target_objcopy"; then
+ echo "OBJCOPY=$target_objcopy"
+ fi
+ if test -n "$target_ranlib"; then
+ echo "RANLIB=$target_ranlib"
+ fi
+ if test -n "$target_strip"; then
+ echo "STRIP=$target_strip"
+ fi
+ fi
+}
+
#######################################
# cross-compiled firmware targets
@@ -1299,6 +1659,48 @@ fi
echo "# Automatically generated by configure - do not modify" > Makefile.prereqs
+# Mac OS X ships with a broken assembler
+if have_target i386-softmmu x86_64-softmmu && \
+ test "$host_os" != "darwin" && test "$host_os" != "sunos" && \
+ test "$host_os" != "haiku" && \
+ probe_target_compiler i386-softmmu; then
+ subdirs="$subdirs pc-bios/optionrom"
+ config_mak=pc-bios/optionrom/config.mak
+ echo "# Automatically generated by configure - do not modify" > $config_mak
+ echo "TOPSRC_DIR=$source_path" >> $config_mak
+ write_target_makefile >> $config_mak
+fi
+
+if have_target ppc-softmmu ppc64-softmmu && \
+ probe_target_compiler ppc-softmmu; then
+ subdirs="$subdirs pc-bios/vof"
+ config_mak=pc-bios/vof/config.mak
+ echo "# Automatically generated by configure - do not modify" > $config_mak
+ echo "SRC_DIR=$source_path/pc-bios/vof" >> $config_mak
+ write_target_makefile >> $config_mak
+fi
+
+# Only build s390-ccw bios if the compiler has -march=z900 or -march=z10
+# (which is the lowest architecture level that Clang supports)
+if have_target s390x-softmmu && probe_target_compiler s390x-softmmu && \
+ GIT=git "$source_path/scripts/git-submodule.sh" "$git_submodules_action" roms/SLOF >> config.log 2>&1; then
+ write_c_skeleton
+ do_compiler "$target_cc" $target_cc_cflags -march=z900 -o $TMPO -c $TMPC
+ has_z900=$?
+ if [ $has_z900 = 0 ] || do_compiler "$target_cc" $target_cc_cflags -march=z10 -msoft-float -Werror -o $TMPO -c $TMPC; then
+ if [ $has_z900 != 0 ]; then
+ echo "WARNING: Your compiler does not support the z900!"
+ echo " The s390-ccw bios will only work with guest CPUs >= z10."
+ fi
+ subdirs="$subdirs pc-bios/s390-ccw"
+ config_mak=pc-bios/s390-ccw/config-host.mak
+ echo "# Automatically generated by configure - do not modify" > $config_mak
+ echo "SRC_PATH=$source_path/pc-bios/s390-ccw" >> $config_mak
+ echo "GIT_SUBMODULES_ACTION=$git_submodules_action" >> $config_mak
+ write_target_makefile >> $config_mak
+ fi
+fi
+
#######################################
# generate config-host.mak
@@ -1322,6 +1724,65 @@ if test "$default_targets" = "yes"; then
echo "CONFIG_DEFAULT_TARGETS=y" >> $config_host_mak
fi
+tcg_tests_with_compilers=
+for target in $target_list; do
+ arch=${target%%-*}
+
+ case $target in
+ xtensa*-linux-user)
+ # the toolchain is not complete with headers, only build system tests
+ continue
+ ;;
+ *-softmmu)
+ test -f "$source_path/tests/tcg/$arch/Makefile.softmmu-target" || continue
+ qemu="qemu-system-$arch"
+ ;;
+ *-linux-user|*-bsd-user)
+ qemu="qemu-$arch"
+ ;;
+ esac
+
+ if probe_target_compiler $target || test -n "$container_image"; then
+ test -n "$container_image" && build_static=y
+ mkdir -p "tests/tcg/$target"
+ config_target_mak=tests/tcg/$target/config-target.mak
+ ln -sf "$source_path/tests/tcg/Makefile.target" "tests/tcg/$target/Makefile"
+ echo "# Automatically generated by configure - do not modify" > "$config_target_mak"
+ echo "TARGET_NAME=$arch" >> "$config_target_mak"
+ echo "TARGET=$target" >> "$config_target_mak"
+ write_target_makefile "build-tcg-tests-$target" >> "$config_target_mak"
+ echo "BUILD_STATIC=$build_static" >> "$config_target_mak"
+ echo "QEMU=$PWD/$qemu" >> "$config_target_mak"
+
+ # will GDB work with these binaries?
+ if test "${gdb_arches#*$arch}" != "$gdb_arches"; then
+ echo "GDB=$gdb_bin" >> $config_target_mak
+ fi
+
+ if test "${gdb_arches#*$arch}" != "$gdb_arches" && version_ge $gdb_version 14.1; then
+ echo "GDB_HAS_SME_TILES=y" >> $config_target_mak
+ else
+ echo "GDB_HAS_SME_TILES=n" >> $config_target_mak
+ fi
+
+ if test "${gdb_arches#*aarch64}" != "$gdb_arches" && version_ge $gdb_version 15.1; then
+ echo "GDB_HAS_MTE=y" >> $config_target_mak
+ fi
+
+ if test "${gdb_arches#*aarch64}" != "$gdb_arches" && version_ge $gdb_version 16.0; then
+ # GDB has to support MTE in baremetal to allow debugging MTE in QEMU system mode
+ echo "GDB_SUPPORTS_MTE_IN_BAREMETAL=y" >> $config_target_mak
+ fi
+
+ echo "run-tcg-tests-$target: $qemu\$(EXESUF)" >> Makefile.prereqs
+ tcg_tests_with_compilers="$tcg_tests_with_compilers $target"
+ fi
+done
+
+if test "$tcg" = "enabled"; then
+ echo "TCG_TESTS_WITH_COMPILERS=$tcg_tests_with_compilers" >> $config_host_mak
+fi
+
if test "$skip_meson" = no; then
cross="config-meson.cross.new"
meson_quote() {
--
2.47.3
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH v3 02/17] Revert "tests/tcg/meson.build: implement ./configure -cross-cc-* options"
2026-09-16 8:53 [PATCH v3 00/17] testing: various docker clean-ups post meson tcg conversion Alex Bennée
2026-09-16 8:53 ` [PATCH v3 01/17] Revert "configure: remove cross_cc and gdb detection logic" Alex Bennée
@ 2026-09-16 8:53 ` Alex Bennée
2026-09-16 8:53 ` [PATCH v3 03/17] Revert "tests/tcg/meson.build: implement ./configure containers options" Alex Bennée
` (15 subsequent siblings)
17 siblings, 0 replies; 24+ messages in thread
From: Alex Bennée @ 2026-09-16 8:53 UTC (permalink / raw)
To: qemu-devel
Cc: John Snow, Daniel P. Berrangé, Helge Deller, Peter Maydell,
Thomas Huth, Richard Henderson, Brad Smith, qemu-arm,
Fabiano Rosas, Warner Losh, Cleber Rosa,
Philippe Mathieu-Daudé, Ilya Leoshkevich, Cornelia Huck,
Paolo Bonzini, Brian Cain, Song Gao, Kyle Evans, Jiaxun Yang,
Eric Farman, Marc-André Lureau, Laurent Vivier,
Alex Bennée, Pierrick Bouvier
We want to keep configuring of the cross compiler within configure so
it can be used by the firmware.
This reverts commit 7e1d54da6faf10e1fc70f6b3d8247068b80b1597.
Suggested-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
v3
- declare empty container_command/use_containers to avoid unref var
---
configure | 31 ++++++++-------
meson_options.txt | 89 -------------------------------------------
tests/tcg/meson.build | 31 +++------------
3 files changed, 23 insertions(+), 128 deletions(-)
diff --git a/configure b/configure
index 1973f023b1e..bedde58b8cf 100755
--- a/configure
+++ b/configure
@@ -172,6 +172,7 @@ fi
# some defaults, based on the host environment
# default parameters
+container_command=""
cpu=""
cross_compile="no"
cross_prefix=""
@@ -227,6 +228,19 @@ for opt do
;;
--extra-ldflags=*) EXTRA_LDFLAGS="$EXTRA_LDFLAGS $optarg"
;;
+ --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-cc-FOO option"
+ ;;
+ --cross-cc-cflags-*) cc_arch=${opt#--cross-cc-cflags-}; cc_arch=${cc_arch%%=*}
+ eval "cross_cc_cflags_${cc_arch}=\$optarg"
+ ;;
+ --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*}
+ eval "cross_cc_${cc_arch}=\$optarg"
+ ;;
+ --cross-prefix-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-prefix-FOO option"
+ ;;
+ --cross-prefix-*) cc_arch=${opt#--cross-prefix-}; cc_arch=${cc_arch%%=*}
+ eval "cross_prefix_${cc_arch}=\$optarg"
+ ;;
--without-default-features) default_feature="no"
;;
--wasm64-32bit-address-limit) wasm64_memory64="2"
@@ -246,6 +260,7 @@ ninja=""
python=
download="enabled"
skip_meson=no
+use_containers=""
rust="disabled"
rust_target_triple=""
@@ -618,19 +633,9 @@ for opt do
;;
--extra-ldflags=*)
;;
- --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-cc-FOO option"
- ;;
- --cross-cc-cflags-*) arch=${opt#--cross-cc-cflags-}; arch=${arch%%=*}
- meson_option_add "-Dtcg_tests_cross_cflags_${arch}=${optarg}"
- ;;
- --cross-cc-*) arch=${opt#--cross-cc-}; arch=${arch%%=*}
- meson_option_add "-Dtcg_tests_cross_cc_${arch}=${optarg}"
- ;;
- --cross-prefix-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-prefix-FOO option"
+ --cross-cc-*)
;;
- # cross-prefix is just used as a syntactic sugar for -cross-cc.
- --cross-prefix-*) arch=${opt#--cross-prefix-}; arch=${arch%%=*}
- meson_option_add "-Dtcg_tests_cross_cc_${arch}=${optarg}gcc"
+ --cross-prefix-*)
;;
--enable-docs) docs=enabled
;;
@@ -1273,7 +1278,7 @@ if test "$container_command" = ""; then
container_command=$($python "$source_path"/tests/docker/docker.py probe)
test "$container_command" = "no" && container_command=""
fi
-if test $use_containers = "yes" && test "$container_command" != ""; then
+if test "$use_containers" = "yes" && test "$container_command" != ""; then
docker_py="$python $source_path/tests/docker/docker.py --command $container_command"
fi
diff --git a/meson_options.txt b/meson_options.txt
index e3570a418aa..66d3689d14c 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -393,92 +393,3 @@ 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('tcg_tests_cross_cc_aarch64', type: 'string',
- description: 'cc for aarch64 tcg tests')
-option('tcg_tests_cross_cflags_aarch64', type: 'string',
- description: 'cflags for aarch64 tcg tests')
-option('tcg_tests_cross_cc_aarch64_be', type: 'string',
- description: 'cc for aarch64_be tcg tests')
-option('tcg_tests_cross_cflags_aarch64_be', type: 'string',
- description: 'cflags for aarch64_be tcg tests')
-option('tcg_tests_cross_cc_alpha', type: 'string',
- description: 'cc for alpha tcg tests')
-option('tcg_tests_cross_cflags_alpha', type: 'string',
- description: 'cflags for alpha tcg tests')
-option('tcg_tests_cross_cc_arm', type: 'string',
- description: 'cc for arm tcg tests')
-option('tcg_tests_cross_cflags_arm', type: 'string',
- description: 'cflags for arm tcg tests')
-option('tcg_tests_cross_cc_hexagon', type: 'string',
- description: 'cc for hexagon tcg tests')
-option('tcg_tests_cross_cflags_hexagon', type: 'string',
- description: 'cflags for hexagon tcg tests')
-option('tcg_tests_cross_cc_hppa', type: 'string',
- description: 'cc for hppa tcg tests')
-option('tcg_tests_cross_cflags_hppa', type: 'string',
- description: 'cflags for hppa tcg tests')
-option('tcg_tests_cross_cc_i386', type: 'string',
- description: 'cc for i386 tcg tests')
-option('tcg_tests_cross_cflags_i386', type: 'string',
- description: 'cflags for i386 tcg tests')
-option('tcg_tests_cross_cc_loongarch64', type: 'string',
- description: 'cc for loongarch64 tcg tests')
-option('tcg_tests_cross_cflags_loongarch64', type: 'string',
- description: 'cflags for loongarch64 tcg tests')
-option('tcg_tests_cross_cc_m68k', type: 'string',
- description: 'cc for m68k tcg tests')
-option('tcg_tests_cross_cflags_m68k', type: 'string',
- description: 'cflags for m68k tcg tests')
-option('tcg_tests_cross_cc_mips', type: 'string',
- description: 'cc for mips tcg tests')
-option('tcg_tests_cross_cflags_mips', type: 'string',
- description: 'cflags for mips tcg tests')
-option('tcg_tests_cross_cc_mips64', type: 'string',
- description: 'cc for mips64 tcg tests')
-option('tcg_tests_cross_cflags_mips64', type: 'string',
- description: 'cflags for mips64 tcg tests')
-option('tcg_tests_cross_cc_mips64el', type: 'string',
- description: 'cc for mips64el tcg tests')
-option('tcg_tests_cross_cflags_mips64el', type: 'string',
- description: 'cflags for mips64el tcg tests')
-option('tcg_tests_cross_cc_or1k', type: 'string',
- description: 'cc for or1k tcg tests')
-option('tcg_tests_cross_cflags_or1k', type: 'string',
- description: 'cflags for or1k tcg tests')
-option('tcg_tests_cross_cc_ppc64', type: 'string',
- description: 'cc for ppc64 tcg tests')
-option('tcg_tests_cross_cflags_ppc64', type: 'string',
- description: 'cflags for ppc64 tcg tests')
-option('tcg_tests_cross_cc_ppc64le', type: 'string',
- description: 'cc for ppc64le tcg tests')
-option('tcg_tests_cross_cflags_ppc64le', type: 'string',
- description: 'cflags for ppc64le tcg tests')
-option('tcg_tests_cross_cc_riscv64', type: 'string',
- description: 'cc for riscv64 tcg tests')
-option('tcg_tests_cross_cflags_riscv64', type: 'string',
- description: 'cflags for riscv64 tcg tests')
-option('tcg_tests_cross_cc_s390x', type: 'string',
- description: 'cc for s390x tcg tests')
-option('tcg_tests_cross_cflags_s390x', type: 'string',
- description: 'cflags for s390x tcg tests')
-option('tcg_tests_cross_cc_sh4', type: 'string',
- description: 'cc for sh4 tcg tests')
-option('tcg_tests_cross_cflags_sh4', type: 'string',
- description: 'cflags for sh4 tcg tests')
-option('tcg_tests_cross_cc_tricore', type: 'string',
- description: 'cc for tricore tcg tests')
-option('tcg_tests_cross_cflags_tricore', type: 'string',
- description: 'cflags for tricore tcg tests')
-option('tcg_tests_cross_cc_x86_64', type: 'string',
- description: 'cc for x86_64 tcg tests')
-option('tcg_tests_cross_cflags_x86_64', type: 'string',
- description: 'cflags for x86_64 tcg tests')
-option('tcg_tests_cross_cc_xtensa', type: 'string',
- description: 'cc for xtensa tcg tests')
-option('tcg_tests_cross_cflags_xtensa', type: 'string',
- description: 'cflags for xtensa tcg tests')
-option('tcg_tests_cross_cc_xtensaeb', type: 'string',
- description: 'cc for xtensaeb tcg tests')
-option('tcg_tests_cross_cflags_xtensaeb', type: 'string',
- description: 'cflags for xtensaeb tcg tests')
diff --git a/tests/tcg/meson.build b/tests/tcg/meson.build
index d41a228fb3d..ce208e686ff 100644
--- a/tests/tcg/meson.build
+++ b/tests/tcg/meson.build
@@ -185,8 +185,6 @@ foreach target, plan: tcg_tests
continue
endif
- cc_arch = target.replace('-linux-user', '').replace('-softmmu', '')
-
# Detect duplicated executables/tests, and report an error to force user to
# choose how to deal with it.
built_tests = {}
@@ -204,35 +202,16 @@ foreach target, plan: tcg_tests
endforeach
cc = find_program(plan['cc'], required : false)
- cc_cflags = []
-
- check_flags = []
- check_required = false
- cross_cc = get_option('tcg_tests_cross_cc_' + cc_arch)
- if cross_cc != ''
- # we make sure cross cc exists
- cc = find_program(cross_cc, required: true)
- check_required = true
- endif
- cross_cflags = get_option('tcg_tests_cross_cflags_' + cc_arch)
- if cross_cflags != ''
- cc_cflags = cross_cflags.split()
- # and that cross cc can compile programs
- check_flags = cc_cflags
- check_required = true
- endif
-
cc_from_system = cc.found()
has_cc = cc.found()
if has_cc
+ check_flags = ['-static']
if target.endswith('softmmu')
- check_flags += ['-nostdlib', '-ffreestanding', '-r']
- else
- check_flags += ['-static']
+ check_flags = ['-nostdlib', '-ffreestanding', '-r']
endif
cmd = run_command([cc, files('test_cc.c'), check_flags, '-o', '/dev/null'],
- check: check_required)
+ check: false)
has_cc = cmd.returncode() == 0
cc_from_system = has_cc
endif
@@ -368,9 +347,9 @@ foreach target, plan: tcg_tests
endif
endif
- cflags = cc_cflags
+ cflags = []
if 'cflags' in setup
- cflags += setup['cflags']
+ cflags = setup['cflags']
endif
if 'cc_feat' in setup
--
2.47.3
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH v3 03/17] Revert "tests/tcg/meson.build: implement ./configure containers options"
2026-09-16 8:53 [PATCH v3 00/17] testing: various docker clean-ups post meson tcg conversion Alex Bennée
2026-09-16 8:53 ` [PATCH v3 01/17] Revert "configure: remove cross_cc and gdb detection logic" Alex Bennée
2026-09-16 8:53 ` [PATCH v3 02/17] Revert "tests/tcg/meson.build: implement ./configure -cross-cc-* options" Alex Bennée
@ 2026-09-16 8:53 ` Alex Bennée
2026-09-16 13:32 ` Jared Rossi
2026-09-16 8:53 ` [PATCH v3 04/17] configure: correctly honour --disable-containers Alex Bennée
` (14 subsequent siblings)
17 siblings, 1 reply; 24+ messages in thread
From: Alex Bennée @ 2026-09-16 8:53 UTC (permalink / raw)
To: qemu-devel
Cc: John Snow, Daniel P. Berrangé, Helge Deller, Peter Maydell,
Thomas Huth, Richard Henderson, Brad Smith, qemu-arm,
Fabiano Rosas, Warner Losh, Cleber Rosa,
Philippe Mathieu-Daudé, Ilya Leoshkevich, Cornelia Huck,
Paolo Bonzini, Brian Cain, Song Gao, Kyle Evans, Jiaxun Yang,
Eric Farman, Marc-André Lureau, Laurent Vivier,
Alex Bennée, Pierrick Bouvier
We want to keep the container configuration inside configure for the
firmware builds.
This reverts commit 522b299ca4316d8cad57f9496ffcba87dcc20719.
Tested-by: Eric Farman <farman@linux.ibm.com>
Reviewed-by: Pierrick Bouvier <pierrick.bouvier@oss.qualcomm.com>
Suggested-by: Paolo Bonzini <pbonzini@redhat.com>
[AJB: untangle changes since]
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
configure | 11 +++++++----
meson_options.txt | 4 ----
tests/tcg/meson.build | 25 ++++---------------------
3 files changed, 11 insertions(+), 29 deletions(-)
diff --git a/configure b/configure
index bedde58b8cf..25d26376f12 100755
--- a/configure
+++ b/configure
@@ -260,7 +260,7 @@ ninja=""
python=
download="enabled"
skip_meson=no
-use_containers=""
+use_containers="yes"
rust="disabled"
rust_target_triple=""
@@ -727,11 +727,11 @@ for opt do
;;
--disable-plugins) plugins="no"
;;
- --enable-containers) # enabled by default
+ --enable-containers) use_containers="yes"
;;
- --disable-containers) meson_option_add -Dcontainers=false
+ --disable-containers) use_containers="no"
;;
- --container-command=*) meson_option_add -Dcontainer_command="$optarg"
+ --container-command=*) container_command="$optarg"
;;
--rust-target-triple=*) rust_target_triple="$optarg"
;;
@@ -1718,6 +1718,9 @@ echo all: >> $config_host_mak
echo "SRC_PATH=$source_path" >> $config_host_mak
echo "TARGET_DIRS=$target_list" >> $config_host_mak
+if test "$container_command" != ""; then
+ echo "CONTAINER_COMMAND=$container_command" >> $config_host_mak
+fi
echo "SUBDIRS=$subdirs" >> $config_host_mak
echo "PYTHON=$python" >> $config_host_mak
echo "MKVENV_ENSUREGROUP=$mkvenv ensuregroup $mkvenv_online_flag" >> $config_host_mak
diff --git a/meson_options.txt b/meson_options.txt
index 66d3689d14c..218d003a80b 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -389,7 +389,3 @@ option('rust', type: 'feature', value: 'disabled',
description: 'Rust support')
option('strict_rust_lints', type: 'boolean', value: false,
description: 'Enable stricter set of Rust warnings')
-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')
diff --git a/tests/tcg/meson.build b/tests/tcg/meson.build
index ce208e686ff..e966774c8c2 100644
--- a/tests/tcg/meson.build
+++ b/tests/tcg/meson.build
@@ -79,28 +79,11 @@ if gdb.found()
endif
tcg_tests_summary += {'gdb': gdb}
-docker_supported = false
-container_command = false
-if get_option('containers')
- if get_option('container_command') != ''
- # make sure command is working
- container_command = get_option('container_command')
- cmd = container_command.split()
- run_command([cmd, 'info'], check: true)
- docker_supported = true
- docker_wrapper = [docker_wrapper, '--command',
- container_command]
- else
- docker_probe = run_command(docker_wrapper, 'probe', check: false)
- docker_supported = docker_probe.returncode() == 0
- if docker_supported
- container_command = docker_probe.stdout().strip()
- docker_wrapper = [docker_wrapper, '--command',
- container_command]
- endif
- endif
+docker_probe = run_command(docker_wrapper, 'probe', check: false)
+docker_supported = docker_probe.returncode() == 0
+if docker_supported
+ docker_wrapper = [docker_wrapper, '--command', docker_probe.stdout().strip()]
endif
-tcg_tests_summary += {'container command': container_command}
# plugins come first, as we need to build the list
test_plugins = {}
--
2.47.3
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH v3 04/17] configure: correctly honour --disable-containers
2026-09-16 8:53 [PATCH v3 00/17] testing: various docker clean-ups post meson tcg conversion Alex Bennée
` (2 preceding siblings ...)
2026-09-16 8:53 ` [PATCH v3 03/17] Revert "tests/tcg/meson.build: implement ./configure containers options" Alex Bennée
@ 2026-09-16 8:53 ` Alex Bennée
2026-09-16 8:53 ` [PATCH v3 05/17] configure: re-purpose the tcg test compiler configs for vdso building Alex Bennée
` (13 subsequent siblings)
17 siblings, 0 replies; 24+ messages in thread
From: Alex Bennée @ 2026-09-16 8:53 UTC (permalink / raw)
To: qemu-devel
Cc: John Snow, Daniel P. Berrangé, Helge Deller, Peter Maydell,
Thomas Huth, Richard Henderson, Brad Smith, qemu-arm,
Fabiano Rosas, Warner Losh, Cleber Rosa,
Philippe Mathieu-Daudé, Ilya Leoshkevich, Cornelia Huck,
Paolo Bonzini, Brian Cain, Song Gao, Kyle Evans, Jiaxun Yang,
Eric Farman, Marc-André Lureau, Laurent Vivier,
Alex Bennée, Pierrick Bouvier
From: Daniel P. Berrangé <berrange@redhat.com>
The configure script originally only probed for 'runc' command
in order to handle cross-compilation containers. The Makefile
under tests/docker would then probe again when used.
In order to eliminate the additional probeing, we changed
configure in commit c4ce04cfb7460d46c0262d437a7f35bb5c5fc449
to always probe for 'runc', so the result could be passed
along to tests/docker make rules.
That commit overlooked that the 'probe_target_compiler' func
was relying on '$runc' == 'no' as a proxy for the state of
the --disable-containers arg.
When we started unconditionally probing, that short cut no
longer works and we must explicitly check "$use_containers"
too.
Fixes: c4ce04cfb7460d46c0262d437a7f35bb5c5fc449
Reported-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
Tested-by: Alex Bennée <alex.bennee@linaro.org>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
---
configure | 1 +
1 file changed, 1 insertion(+)
diff --git a/configure b/configure
index 25d26376f12..86cc8d0a942 100755
--- a/configure
+++ b/configure
@@ -1398,6 +1398,7 @@ probe_target_compiler() {
esac
for host in $container_hosts; do
+ test "$use_containers" = "yes" || continue
test "$container_command" != "" || continue
test "$host" = "$cpu" || continue
case $target_arch in
--
2.47.3
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH v3 05/17] configure: re-purpose the tcg test compiler configs for vdso building
2026-09-16 8:53 [PATCH v3 00/17] testing: various docker clean-ups post meson tcg conversion Alex Bennée
` (3 preceding siblings ...)
2026-09-16 8:53 ` [PATCH v3 04/17] configure: correctly honour --disable-containers Alex Bennée
@ 2026-09-16 8:53 ` Alex Bennée
2026-09-16 8:53 ` [PATCH v3 06/17] tests/tcg: improve check for working cross compilers Alex Bennée
` (12 subsequent siblings)
17 siblings, 0 replies; 24+ messages in thread
From: Alex Bennée @ 2026-09-16 8:53 UTC (permalink / raw)
To: qemu-devel
Cc: John Snow, Daniel P. Berrangé, Helge Deller, Peter Maydell,
Thomas Huth, Richard Henderson, Brad Smith, qemu-arm,
Fabiano Rosas, Warner Losh, Cleber Rosa,
Philippe Mathieu-Daudé, Ilya Leoshkevich, Cornelia Huck,
Paolo Bonzini, Brian Cain, Song Gao, Kyle Evans, Jiaxun Yang,
Eric Farman, Marc-André Lureau, Laurent Vivier,
Alex Bennée, Pierrick Bouvier
All the tcg tests are in meson now so there is no reason to put the
config-target.mak files in those directories. We also don't need the
GDB feature tests or to emit prerequsistes.
The vdso re-build blob does use the compiler definitions though so
we can emit the details for that and tweak the vdso makefiles to point
at the right place. Note some of the vdso makefiles build both 32 and
64 bit versions from the same compiler.
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
configure | 69 +++++++++++-----------------
linux-user/aarch64/Makefile.vdso | 2 +-
linux-user/arm/Makefile.vdso | 2 +-
linux-user/hppa/Makefile.vdso | 2 +-
linux-user/i386/Makefile.vdso | 2 +-
linux-user/loongarch64/Makefile.vdso | 2 +-
linux-user/ppc/Makefile.vdso | 2 +-
linux-user/riscv/Makefile.vdso | 2 +-
linux-user/s390x/Makefile.vdso | 2 +-
linux-user/sh4/Makefile.vdso | 2 +-
linux-user/x86_64/Makefile.vdso | 2 +-
11 files changed, 36 insertions(+), 53 deletions(-)
diff --git a/configure b/configure
index 86cc8d0a942..d1b4e6d3ff6 100755
--- a/configure
+++ b/configure
@@ -1733,65 +1733,48 @@ if test "$default_targets" = "yes"; then
echo "CONFIG_DEFAULT_TARGETS=y" >> $config_host_mak
fi
-tcg_tests_with_compilers=
+# Export the compiler details needed for rebuilding the vdso blobs
for target in $target_list; do
- arch=${target%%-*}
+ # Skip anything that is not a linux-user target
case $target in
+ *-linux-user)
+ ;;
+ *)
+ continue
+ ;;
+ esac
+
+ arch=${target%%-*}
+
+ case $arch in
xtensa*-linux-user)
- # the toolchain is not complete with headers, only build system tests
+ # the toolchain can only build system tests due to missing headers
+ continue
+ ;;
+ aarch64_be-linux-user)
+ # there is no BE user space
continue
;;
- *-softmmu)
- test -f "$source_path/tests/tcg/$arch/Makefile.softmmu-target" || continue
- qemu="qemu-system-$arch"
+ aarch64|arm|hppa|i386|loongarch64|ppc64|riscv64|s390x|sh4|x86_64)
+ # arches which need a vdso, some 64 bit arches build both
;;
- *-linux-user|*-bsd-user)
- qemu="qemu-$arch"
+ *)
+ continue
;;
esac
- if probe_target_compiler $target || test -n "$container_image"; then
- test -n "$container_image" && build_static=y
- mkdir -p "tests/tcg/$target"
- config_target_mak=tests/tcg/$target/config-target.mak
- ln -sf "$source_path/tests/tcg/Makefile.target" "tests/tcg/$target/Makefile"
+ # note container_image is set by a successful call to probe_target_compiler
+ if probe_target_compiler "$target" || test -n "$container_image"; then
+ mkdir -p "linux-user/$arch"
+ config_target_mak=linux-user/$arch/config-target.mak
echo "# Automatically generated by configure - do not modify" > "$config_target_mak"
echo "TARGET_NAME=$arch" >> "$config_target_mak"
echo "TARGET=$target" >> "$config_target_mak"
- write_target_makefile "build-tcg-tests-$target" >> "$config_target_mak"
- echo "BUILD_STATIC=$build_static" >> "$config_target_mak"
- echo "QEMU=$PWD/$qemu" >> "$config_target_mak"
-
- # will GDB work with these binaries?
- if test "${gdb_arches#*$arch}" != "$gdb_arches"; then
- echo "GDB=$gdb_bin" >> $config_target_mak
- fi
-
- if test "${gdb_arches#*$arch}" != "$gdb_arches" && version_ge $gdb_version 14.1; then
- echo "GDB_HAS_SME_TILES=y" >> $config_target_mak
- else
- echo "GDB_HAS_SME_TILES=n" >> $config_target_mak
- fi
-
- if test "${gdb_arches#*aarch64}" != "$gdb_arches" && version_ge $gdb_version 15.1; then
- echo "GDB_HAS_MTE=y" >> $config_target_mak
- fi
-
- if test "${gdb_arches#*aarch64}" != "$gdb_arches" && version_ge $gdb_version 16.0; then
- # GDB has to support MTE in baremetal to allow debugging MTE in QEMU system mode
- echo "GDB_SUPPORTS_MTE_IN_BAREMETAL=y" >> $config_target_mak
- fi
-
- echo "run-tcg-tests-$target: $qemu\$(EXESUF)" >> Makefile.prereqs
- tcg_tests_with_compilers="$tcg_tests_with_compilers $target"
+ write_target_makefile "update-linux-vdso" >> "$config_target_mak"
fi
done
-if test "$tcg" = "enabled"; then
- echo "TCG_TESTS_WITH_COMPILERS=$tcg_tests_with_compilers" >> $config_host_mak
-fi
-
if test "$skip_meson" = no; then
cross="config-meson.cross.new"
meson_quote() {
diff --git a/linux-user/aarch64/Makefile.vdso b/linux-user/aarch64/Makefile.vdso
index c33a679c0f2..82ed2011087 100644
--- a/linux-user/aarch64/Makefile.vdso
+++ b/linux-user/aarch64/Makefile.vdso
@@ -1,4 +1,4 @@
-include $(BUILD_DIR)/tests/tcg/aarch64-linux-user/config-target.mak
+include $(BUILD_DIR)/linux-user/aarch64/config-target.mak
SUBDIR = $(SRC_PATH)/linux-user/aarch64
VPATH += $(SUBDIR)
diff --git a/linux-user/arm/Makefile.vdso b/linux-user/arm/Makefile.vdso
index ede489e2363..16ae8d7aaae 100644
--- a/linux-user/arm/Makefile.vdso
+++ b/linux-user/arm/Makefile.vdso
@@ -1,4 +1,4 @@
-include $(BUILD_DIR)/tests/tcg/arm-linux-user/config-target.mak
+include $(BUILD_DIR)/linux-user/arm/config-target.mak
SUBDIR = $(SRC_PATH)/linux-user/arm
VPATH += $(SUBDIR)
diff --git a/linux-user/hppa/Makefile.vdso b/linux-user/hppa/Makefile.vdso
index f4537ae7169..78642c42661 100644
--- a/linux-user/hppa/Makefile.vdso
+++ b/linux-user/hppa/Makefile.vdso
@@ -1,4 +1,4 @@
-include $(BUILD_DIR)/tests/tcg/hppa-linux-user/config-target.mak
+include $(BUILD_DIR)/linux-user/hppa/config-target.mak
SUBDIR = $(SRC_PATH)/linux-user/hppa
VPATH += $(SUBDIR)
diff --git a/linux-user/i386/Makefile.vdso b/linux-user/i386/Makefile.vdso
index 95bc616f6d6..ca2e37fa6b6 100644
--- a/linux-user/i386/Makefile.vdso
+++ b/linux-user/i386/Makefile.vdso
@@ -1,4 +1,4 @@
-include $(BUILD_DIR)/tests/tcg/i386-linux-user/config-target.mak
+include $(BUILD_DIR)/linux-user/i386/config-target.mak
SUBDIR = $(SRC_PATH)/linux-user/i386
VPATH += $(SUBDIR)
diff --git a/linux-user/loongarch64/Makefile.vdso b/linux-user/loongarch64/Makefile.vdso
index 1d760b1e47e..ceb61101209 100644
--- a/linux-user/loongarch64/Makefile.vdso
+++ b/linux-user/loongarch64/Makefile.vdso
@@ -1,4 +1,4 @@
-include $(BUILD_DIR)/tests/tcg/loongarch64-linux-user/config-target.mak
+include $(BUILD_DIR)/linux-user/loongarch64/config-target.mak
SUBDIR = $(SRC_PATH)/linux-user/loongarch64
VPATH += $(SUBDIR)
diff --git a/linux-user/ppc/Makefile.vdso b/linux-user/ppc/Makefile.vdso
index e2b8facbb50..6b9be843817 100644
--- a/linux-user/ppc/Makefile.vdso
+++ b/linux-user/ppc/Makefile.vdso
@@ -1,4 +1,4 @@
-include $(BUILD_DIR)/tests/tcg/ppc64-linux-user/config-target.mak
+include $(BUILD_DIR)/linux-user/ppc64/config-target.mak
SUBDIR = $(SRC_PATH)/linux-user/ppc
VPATH += $(SUBDIR)
diff --git a/linux-user/riscv/Makefile.vdso b/linux-user/riscv/Makefile.vdso
index 2c257dbfda5..2eefdb70cf9 100644
--- a/linux-user/riscv/Makefile.vdso
+++ b/linux-user/riscv/Makefile.vdso
@@ -1,4 +1,4 @@
-include $(BUILD_DIR)/tests/tcg/riscv64-linux-user/config-target.mak
+include $(BUILD_DIR)/linux-user/riscv64/config-target.mak
SUBDIR = $(SRC_PATH)/linux-user/riscv
VPATH += $(SUBDIR)
diff --git a/linux-user/s390x/Makefile.vdso b/linux-user/s390x/Makefile.vdso
index e82bf9e29ff..51f7c50a2de 100644
--- a/linux-user/s390x/Makefile.vdso
+++ b/linux-user/s390x/Makefile.vdso
@@ -1,4 +1,4 @@
-include $(BUILD_DIR)/tests/tcg/s390x-linux-user/config-target.mak
+include $(BUILD_DIR)/linux-user/s390x/config-target.mak
SUBDIR = $(SRC_PATH)/linux-user/s390x
VPATH += $(SUBDIR)
diff --git a/linux-user/sh4/Makefile.vdso b/linux-user/sh4/Makefile.vdso
index 272c5d262de..ed2cc11b825 100644
--- a/linux-user/sh4/Makefile.vdso
+++ b/linux-user/sh4/Makefile.vdso
@@ -1,4 +1,4 @@
-include $(BUILD_DIR)/tests/tcg/sh4-linux-user/config-target.mak
+include $(BUILD_DIR)/linux-user/sh4/config-target.mak
SUBDIR = $(SRC_PATH)/linux-user/sh4
VPATH += $(SUBDIR)
diff --git a/linux-user/x86_64/Makefile.vdso b/linux-user/x86_64/Makefile.vdso
index 26552b66dba..56fe87af72b 100644
--- a/linux-user/x86_64/Makefile.vdso
+++ b/linux-user/x86_64/Makefile.vdso
@@ -1,4 +1,4 @@
-include $(BUILD_DIR)/tests/tcg/x86_64-linux-user/config-target.mak
+include $(BUILD_DIR)/linux-user/x86_64/config-target.mak
SUBDIR = $(SRC_PATH)/linux-user/x86_64
VPATH += $(SUBDIR)
--
2.47.3
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH v3 06/17] tests/tcg: improve check for working cross compilers
2026-09-16 8:53 [PATCH v3 00/17] testing: various docker clean-ups post meson tcg conversion Alex Bennée
` (4 preceding siblings ...)
2026-09-16 8:53 ` [PATCH v3 05/17] configure: re-purpose the tcg test compiler configs for vdso building Alex Bennée
@ 2026-09-16 8:53 ` Alex Bennée
2026-09-16 8:53 ` [PATCH v3 07/17] tests/tcg: prefix meson built docker tags with qemu/ Alex Bennée
` (11 subsequent siblings)
17 siblings, 0 replies; 24+ messages in thread
From: Alex Bennée @ 2026-09-16 8:53 UTC (permalink / raw)
To: qemu-devel
Cc: John Snow, Daniel P. Berrangé, Helge Deller, Peter Maydell,
Thomas Huth, Richard Henderson, Brad Smith, qemu-arm,
Fabiano Rosas, Warner Losh, Cleber Rosa,
Philippe Mathieu-Daudé, Ilya Leoshkevich, Cornelia Huck,
Paolo Bonzini, Brian Cain, Song Gao, Kyle Evans, Jiaxun Yang,
Eric Farman, Marc-André Lureau, Laurent Vivier,
Alex Bennée, Pierrick Bouvier
From: Daniel P. Berrangé <berrange@redhat.com>
When it finds a cross compiler, tests/tcg/meson.build tries
building test_cc.c to validate that the compiler works. This
includes "stdint.h" as a witness for working C library, however,
that is not a good choice as it can be provided by the toolchain
alone:
$ rpm -ql gcc-s390x-linux-gnu | grep /stdint.h
/usr/lib/gcc/s390x-linux-gnu/16/include/stdint.h
As a result, if you install the s390x GCC cross compiler, but
not any C library, meson decides to use the host compiler instead
of the container:
cc for aarch64-softmmu : aarch64-linux-gnu-gcc (from 'debian-all-test-cross' container)
cc for loongarch64-softmmu : loongarch64-unknown-linux-gnu-gcc (from 'debian-loongarch-cross' container)
cc for riscv64-softmmu : riscv64-linux-gnu-gcc (from 'debian-all-test-cross' container)
cc for s390x-softmmu : s390x-linux-gnu-gcc
cc for x86_64-softmmu : x86_64-linux-gnu-gcc (from 'debian-amd64-cross' container)
Eventually this results in failure to run 'make check':
[33/40] Generating tests/tcg/s390x-softmmu-hello with a custom command
FAILED: [code=1] tests/tcg/s390x-softmmu-hello.test
/usr/bin/s390x-linux-gnu-gcc /home/berrange/src/virt/qemu/tests/tcg/multiarch/system/hello.c -o tests/tcg/s390x-softmmu-hello.test -static -MMD -MF tests/tcg/s390x-softmmu-hello.d -Wall -Werror -O0 -g -fno-strict-aliasing -nostdlib -ffreestanding -Wa,--noexecstack -I /home/berrange/src/virt/qemu/tests/tcg/s390x/system/../../minilib /home/berrange/src/virt/qemu/tests/tcg/s390x/system/../../minilib/printf.c -I /home/berrange/src/virt/qemu/include/hw/s390x/ipl -march=z13 ../tests/tcg/s390x/system/../head64.S ../tests/tcg/s390x/system/../console.c
In file included from ../tests/tcg/s390x/system/../console.c:8:
../tests/tcg/s390x/system/../../../../pc-bios/s390-ccw/sclp.c:11:10: fatal error: string.h: No such file or directory
11 | #include <string.h>
| ^~~~~~~~~~
compilation terminated.
Adding more include files to the test program ensures the
meson probe makes a better decision.
Fixes: e5d084d622b1 (tests/tcg/meson.build: check host cross cc is working)
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
Reviewed-by: Pierrick Bouvier <pierrick.bouvier@oss.qualcomm.com>
Message-ID: <20260910100120.2076092-1-berrange@redhat.com>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
tests/tcg/test_cc.c | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/tests/tcg/test_cc.c b/tests/tcg/test_cc.c
index d3614a01fe6..fafee055b40 100644
--- a/tests/tcg/test_cc.c
+++ b/tests/tcg/test_cc.c
@@ -1,7 +1,11 @@
/* SPDX-License-Identifier: GPL-2.0-or-later */
-/* Include a standard header to make sure cross compiler provides them */
+/* Use some standard headers to ensure the cross compiler provides them */
#include <stdint.h>
+#include <string.h>
+#include <stdbool.h>
+#include <stddef.h>
+#include <stdio.h>
int main(void)
{
--
2.47.3
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH v3 07/17] tests/tcg: prefix meson built docker tags with qemu/
2026-09-16 8:53 [PATCH v3 00/17] testing: various docker clean-ups post meson tcg conversion Alex Bennée
` (5 preceding siblings ...)
2026-09-16 8:53 ` [PATCH v3 06/17] tests/tcg: improve check for working cross compilers Alex Bennée
@ 2026-09-16 8:53 ` Alex Bennée
2026-09-16 8:53 ` [PATCH v3 08/17] tests/tcg: use --add-current-user when building containers Alex Bennée
` (10 subsequent siblings)
17 siblings, 0 replies; 24+ messages in thread
From: Alex Bennée @ 2026-09-16 8:53 UTC (permalink / raw)
To: qemu-devel
Cc: John Snow, Daniel P. Berrangé, Helge Deller, Peter Maydell,
Thomas Huth, Richard Henderson, Brad Smith, qemu-arm,
Fabiano Rosas, Warner Losh, Cleber Rosa,
Philippe Mathieu-Daudé, Ilya Leoshkevich, Cornelia Huck,
Paolo Bonzini, Brian Cain, Song Gao, Kyle Evans, Jiaxun Yang,
Eric Farman, Marc-André Lureau, Laurent Vivier,
Alex Bennée, Pierrick Bouvier
With the meson changes we now build the images directly by calling
docker.py. However the Makefile.include builds prefix all the images
with qemu/:
# General rule for building docker images.
docker-image-%: $(DOCKER_FILES_DIR)/%.docker
$(call quiet-command, \
DOCKER_BUILDKIT=1 $(CONTAINER_COMMAND) build \
$(if $(DOCKER_V),,--quiet) \
$(if $(NOCACHE),--no-cache, \
$(if $(DOCKER_REGISTRY),--cache-from $(DOCKER_REGISTRY)/qemu/$*)) \
--build-arg BUILDKIT_INLINE_CACHE=1 \
$(if $(NOUSER),, \
--build-arg USER=$(USER) \
--build-arg UID=$(UID)) \
-t qemu/$* - < $< $(if $(DOCKER_V),,> /dev/null),\
"BUILD", $*)
So to ensure we don't end up building every container twice make sure
the naming conventions line up.
Reviewed-by: Pierrick Bouvier <pierrick.bouvier@oss.qualcomm.com>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
tests/tcg/meson.build | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/tests/tcg/meson.build b/tests/tcg/meson.build
index e966774c8c2..5e2ee3e6e3f 100644
--- a/tests/tcg/meson.build
+++ b/tests/tcg/meson.build
@@ -217,7 +217,7 @@ foreach target, plan: tcg_tests
image_name = 'image-' + cc_dockerfile
has_docker = docker_host_arch_supported and docker_supported
if cc_dockerfile not in image_targets and has_docker
- cmd = [docker_wrapper, 'build', '-f', dockerfile, '-t', cc_dockerfile]
+ cmd = [docker_wrapper, 'build', '-f', dockerfile, '-t', 'qemu/' + cc_dockerfile]
t = custom_target(image_name, command: cmd,
build_by_default: false,
output: 'no_output_' + image_name)
@@ -232,7 +232,7 @@ foreach target, plan: tcg_tests
here = meson.project_build_root()
cc = [docker_wrapper, 'run', '--run-as-current-user',
'-w', here, '-v', mount,
- cc_dockerfile, plan['cc']]
+ 'qemu/' + cc_dockerfile, plan['cc']]
has_cc = true
endif
endif
@@ -241,7 +241,7 @@ foreach target, plan: tcg_tests
if has_cc
summary_cc = plan['cc']
if not cc_from_system
- summary_cc += ' (from \'' + plan['cc_dockerfile'] + '\' container)'
+ summary_cc += ' (from \'qemu/' + plan['cc_dockerfile'] + '\' container)'
endif
endif
tcg_tests_summary += {'cc for ' + target: summary_cc}
--
2.47.3
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH v3 08/17] tests/tcg: use --add-current-user when building containers
2026-09-16 8:53 [PATCH v3 00/17] testing: various docker clean-ups post meson tcg conversion Alex Bennée
` (6 preceding siblings ...)
2026-09-16 8:53 ` [PATCH v3 07/17] tests/tcg: prefix meson built docker tags with qemu/ Alex Bennée
@ 2026-09-16 8:53 ` Alex Bennée
2026-09-16 8:53 ` [PATCH v3 09/17] tests/docker: add container registry to configure and use Alex Bennée
` (9 subsequent siblings)
17 siblings, 0 replies; 24+ messages in thread
From: Alex Bennée @ 2026-09-16 8:53 UTC (permalink / raw)
To: qemu-devel
Cc: John Snow, Daniel P. Berrangé, Helge Deller, Peter Maydell,
Thomas Huth, Richard Henderson, Brad Smith, qemu-arm,
Fabiano Rosas, Warner Losh, Cleber Rosa,
Philippe Mathieu-Daudé, Ilya Leoshkevich, Cornelia Huck,
Paolo Bonzini, Brian Cain, Song Gao, Kyle Evans, Jiaxun Yang,
Eric Farman, Marc-André Lureau, Laurent Vivier,
Alex Bennée, Pierrick Bouvier
As the meson tcg build routes the container builds through docker.py
we can also clean up its hack which involved appending a RUN line to
the dockerfile. All the dockerfiles that care will work with the
--build-arg.
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
tests/docker/docker.py | 13 ++++++-------
tests/tcg/meson.build | 3 ++-
2 files changed, 8 insertions(+), 8 deletions(-)
diff --git a/tests/docker/docker.py b/tests/docker/docker.py
index 315fa2ff848..6090a9dc957 100755
--- a/tests/docker/docker.py
+++ b/tests/docker/docker.py
@@ -297,13 +297,6 @@ def build_image(self, tag, docker_dir, dockerfile,
dir=docker_dir, suffix=".docker")
tmp_df.write(dockerfile)
- if user:
- uid = os.getuid()
- uname = getpass.getuser()
- tmp_df.write("\n")
- tmp_df.write("RUN id %s 2>/dev/null || useradd -u %d -U %s" %
- (uname, uid, uname))
-
tmp_df.write("\n")
tmp_df.write("LABEL com.qemu.dockerfile-checksum=%s\n" % (checksum))
for f, c in extra_files_cksum:
@@ -315,6 +308,12 @@ def build_image(self, tag, docker_dir, dockerfile,
if self._buildkit:
build_args += ["--build-arg", "BUILDKIT_INLINE_CACHE=1"]
+ if user:
+ uid = os.getuid()
+ uname = getpass.getuser()
+ build_args += ["--build-arg", "USER=%s" % uname,
+ "--build-arg", "UID=%s" % uid]
+
if registry is not None:
pull_args = ["pull", "%s/%s" % (registry, tag)]
self._do(pull_args, quiet=quiet)
diff --git a/tests/tcg/meson.build b/tests/tcg/meson.build
index 5e2ee3e6e3f..28a8e7a0558 100644
--- a/tests/tcg/meson.build
+++ b/tests/tcg/meson.build
@@ -217,7 +217,8 @@ foreach target, plan: tcg_tests
image_name = 'image-' + cc_dockerfile
has_docker = docker_host_arch_supported and docker_supported
if cc_dockerfile not in image_targets and has_docker
- cmd = [docker_wrapper, 'build', '-f', dockerfile, '-t', 'qemu/' + cc_dockerfile]
+ cmd = [docker_wrapper, 'build', '-f', dockerfile, '-t', 'qemu/' + cc_dockerfile,
+ '--add-current-user']
t = custom_target(image_name, command: cmd,
build_by_default: false,
output: 'no_output_' + image_name)
--
2.47.3
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH v3 09/17] tests/docker: add container registry to configure and use
2026-09-16 8:53 [PATCH v3 00/17] testing: various docker clean-ups post meson tcg conversion Alex Bennée
` (7 preceding siblings ...)
2026-09-16 8:53 ` [PATCH v3 08/17] tests/tcg: use --add-current-user when building containers Alex Bennée
@ 2026-09-16 8:53 ` Alex Bennée
2026-09-16 8:53 ` [PATCH v3 10/17] tests/docker: remove used _read_qemu_dockerfile Alex Bennée
` (8 subsequent siblings)
17 siblings, 0 replies; 24+ messages in thread
From: Alex Bennée @ 2026-09-16 8:53 UTC (permalink / raw)
To: qemu-devel
Cc: John Snow, Daniel P. Berrangé, Helge Deller, Peter Maydell,
Thomas Huth, Richard Henderson, Brad Smith, qemu-arm,
Fabiano Rosas, Warner Losh, Cleber Rosa,
Philippe Mathieu-Daudé, Ilya Leoshkevich, Cornelia Huck,
Paolo Bonzini, Brian Cain, Song Gao, Kyle Evans, Jiaxun Yang,
Eric Farman, Marc-André Lureau, Laurent Vivier,
Alex Bennée, Pierrick Bouvier
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 <alex.bennee@linaro.org>
---
v2
- fixed conflicts from the revert.
v3
- regen meson-buildoptions.sh
---
configure | 8 ++++++++
meson_options.txt | 4 ++++
scripts/meson-buildoptions.sh | 3 +++
tests/docker/Makefile.include | 4 +---
tests/tcg/meson.build | 6 ++++++
5 files changed, 22 insertions(+), 3 deletions(-)
diff --git a/configure b/configure
index d1b4e6d3ff6..b9d64993835 100755
--- a/configure
+++ b/configure
@@ -173,6 +173,7 @@ fi
# default parameters
container_command=""
+container_registry="registry.gitlab.com/qemu-project/qemu"
cpu=""
cross_compile="no"
cross_prefix=""
@@ -733,6 +734,9 @@ for opt do
;;
--container-command=*) container_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"
@@ -867,6 +871,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).
@@ -1729,6 +1734,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 218d003a80b..5a080b2360c 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -389,3 +389,7 @@ option('rust', type: 'feature', value: 'disabled',
description: 'Rust support')
option('strict_rust_lints', type: 'boolean', value: false,
description: 'Enable stricter set of Rust warnings')
+
+option('container_registry', type: 'string',
+ value: 'registry.gitlab.com/qemu-project/qemu',
+ description: 'container registry to cache from')
diff --git a/scripts/meson-buildoptions.sh b/scripts/meson-buildoptions.sh
index ba3c9de216b..0cb1d48c982 100644
--- a/scripts/meson-buildoptions.sh
+++ b/scripts/meson-buildoptions.sh
@@ -10,6 +10,9 @@ meson_options_help() {
printf "%s\n" ' --block-drv-rw-whitelist=VALUE'
printf "%s\n" ' set block driver read-write whitelist (by default'
printf "%s\n" ' affects only QEMU, not tools like qemu-img)'
+ printf "%s\n" ' --container-registry=VALUE'
+ printf "%s\n" ' container registry to cache from'
+ printf "%s\n" ' [registry.gitlab.com/qemu-project/qemu]'
printf "%s\n" ' --datadir=VALUE Data file directory [share]'
printf "%s\n" ' --disable-coroutine-pool coroutine freelist (better performance)'
printf "%s\n" ' --disable-debug-info Enable debug symbols and other information'
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))
CONTAINER_COMMAND ?= $(shell $(SRC_PATH)/tests/docker/docker.py probe)
diff --git a/tests/tcg/meson.build b/tests/tcg/meson.build
index 28a8e7a0558..fce70f8e56f 100644
--- a/tests/tcg/meson.build
+++ b/tests/tcg/meson.build
@@ -84,6 +84,9 @@ docker_supported = docker_probe.returncode() == 0
if docker_supported
docker_wrapper = [docker_wrapper, '--command', docker_probe.stdout().strip()]
endif
+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 = {}
@@ -219,6 +222,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)
--
2.47.3
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH v3 10/17] tests/docker: remove used _read_qemu_dockerfile
2026-09-16 8:53 [PATCH v3 00/17] testing: various docker clean-ups post meson tcg conversion Alex Bennée
` (8 preceding siblings ...)
2026-09-16 8:53 ` [PATCH v3 09/17] tests/docker: add container registry to configure and use Alex Bennée
@ 2026-09-16 8:53 ` Alex Bennée
2026-09-16 8:53 ` [PATCH v3 11/17] tests/docker: strip remaining caching logic from docker.py Alex Bennée
` (7 subsequent siblings)
17 siblings, 0 replies; 24+ messages in thread
From: Alex Bennée @ 2026-09-16 8:53 UTC (permalink / raw)
To: qemu-devel
Cc: John Snow, Daniel P. Berrangé, Helge Deller, Peter Maydell,
Thomas Huth, Richard Henderson, Brad Smith, qemu-arm,
Fabiano Rosas, Warner Losh, Cleber Rosa,
Philippe Mathieu-Daudé, Ilya Leoshkevich, Cornelia Huck,
Paolo Bonzini, Brian Cain, Song Gao, Kyle Evans, Jiaxun Yang,
Eric Farman, Marc-André Lureau, Laurent Vivier,
Alex Bennée, Pierrick Bouvier
This is no longer needed since the functionality using it was removed.
Fixes: 07056db1b50 (tests/docker: remove FROM qemu/ support from docker.py)
Reviewed-by: Pierrick Bouvier <pierrick.bouvier@oss.qualcomm.com>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
tests/docker/docker.py | 10 ----------
1 file changed, 10 deletions(-)
diff --git a/tests/docker/docker.py b/tests/docker/docker.py
index 6090a9dc957..fd0cbdfe856 100755
--- a/tests/docker/docker.py
+++ b/tests/docker/docker.py
@@ -175,16 +175,6 @@ def _check_binfmt_misc(executable):
return interp, True
-def _read_qemu_dockerfile(img_name):
- # special case for Debian linux-user images
- if img_name.startswith("debian") and img_name.endswith("user"):
- img_name = "debian-bootstrap"
-
- df = os.path.join(os.path.dirname(__file__), "dockerfiles",
- img_name + ".docker")
- return _read_dockerfile(df)
-
-
def _dockerfile_verify_flat(df):
"Verify we do not include other qemu/ layers"
for l in df.splitlines():
--
2.47.3
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH v3 11/17] tests/docker: strip remaining caching logic from docker.py
2026-09-16 8:53 [PATCH v3 00/17] testing: various docker clean-ups post meson tcg conversion Alex Bennée
` (9 preceding siblings ...)
2026-09-16 8:53 ` [PATCH v3 10/17] tests/docker: remove used _read_qemu_dockerfile Alex Bennée
@ 2026-09-16 8:53 ` Alex Bennée
2026-09-16 8:53 ` [PATCH v3 12/17] tests/docker: add specific command to parser Alex Bennée
` (6 subsequent siblings)
17 siblings, 0 replies; 24+ messages in thread
From: Alex Bennée @ 2026-09-16 8:53 UTC (permalink / raw)
To: qemu-devel
Cc: John Snow, Daniel P. Berrangé, Helge Deller, Peter Maydell,
Thomas Huth, Richard Henderson, Brad Smith, qemu-arm,
Fabiano Rosas, Warner Losh, Cleber Rosa,
Philippe Mathieu-Daudé, Ilya Leoshkevich, Cornelia Huck,
Paolo Bonzini, Brian Cain, Song Gao, Kyle Evans, Jiaxun Yang,
Eric Farman, Marc-André Lureau, Laurent Vivier,
Alex Bennée, Pierrick Bouvier
The caching logic was a remnant of an older time when we had multiple
shared layers building that went into the final image. It was arguable
that it worked back then but it is definitely not needed now so into
the bin it goes.
Reviewed-by: Pierrick Bouvier <pierrick.bouvier@oss.qualcomm.com>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
tests/docker/docker.py | 148 ++++++++++++++---------------------------
1 file changed, 49 insertions(+), 99 deletions(-)
diff --git a/tests/docker/docker.py b/tests/docker/docker.py
index fd0cbdfe856..a2e97061240 100755
--- a/tests/docker/docker.py
+++ b/tests/docker/docker.py
@@ -15,7 +15,6 @@
import sys
import subprocess
import json
-import hashlib
import atexit
import uuid
import argparse
@@ -27,7 +26,6 @@
from tarfile import TarFile, TarInfo
from io import StringIO, BytesIO
from shutil import copy, rmtree
-from datetime import datetime, timedelta
FILTERED_ENV_NAMES = ['ftp_proxy', 'http_proxy', 'https_proxy']
@@ -35,20 +33,9 @@
DEVNULL = open(os.devnull, 'wb')
-def _bytes_checksum(bytes):
- """Calculate a digest string unique to the text content"""
- return hashlib.sha1(bytes).hexdigest()
-
-def _text_checksum(text):
- """Calculate a digest string unique to the text content"""
- return _bytes_checksum(text.encode('utf-8'))
-
def _read_dockerfile(path):
return open(path, 'rt', encoding='utf-8').read()
-def _file_checksum(filename):
- return _bytes_checksum(open(filename, 'rb').read())
-
def _guess_engine_command():
""" Guess a working engine command or raise exception if not found"""
@@ -263,38 +250,15 @@ def inspect_tag(self, tag):
except subprocess.CalledProcessError:
return None
- def get_image_creation_time(self, info):
- return json.loads(info)[0]["Created"]
-
- def get_image_dockerfile_checksum(self, tag):
- resp = self.inspect_tag(tag)
- labels = json.loads(resp)[0]["Config"].get("Labels", {})
- return labels.get("com.qemu.dockerfile-checksum", "")
-
- def build_image(self, tag, docker_dir, dockerfile,
- quiet=True, user=False, argv=None, registry=None,
- extra_files_cksum=[]):
+ def build_image(self, tag, docker_dir, dockerfile_path,
+ quiet=True, user=False, argv=None, registry=None):
if argv is None:
argv = []
- if not _dockerfile_verify_flat(dockerfile):
+ if not _dockerfile_verify_flat(_read_dockerfile(dockerfile_path)):
return -1
- checksum = _text_checksum(dockerfile)
-
- tmp_df = tempfile.NamedTemporaryFile(mode="w+t",
- encoding='utf-8',
- dir=docker_dir, suffix=".docker")
- tmp_df.write(dockerfile)
-
- tmp_df.write("\n")
- tmp_df.write("LABEL com.qemu.dockerfile-checksum=%s\n" % (checksum))
- for f, c in extra_files_cksum:
- tmp_df.write("LABEL com.qemu.%s-checksum=%s\n" % (f, c))
-
- tmp_df.flush()
-
- build_args = ["build", "-t", tag, "-f", tmp_df.name]
+ build_args = ["build", "-t", tag, "-f", dockerfile_path]
if self._buildkit:
build_args += ["--build-arg", "BUILDKIT_INLINE_CACHE=1"]
@@ -320,13 +284,6 @@ def update_image(self, tag, tarball, quiet=True):
self._do_check(["build", "-t", tag, "-"], quiet=quiet, stdin=tarball)
- def image_matches_dockerfile(self, tag, dockerfile):
- try:
- checksum = self.get_image_dockerfile_checksum(tag)
- except Exception:
- return False
- return checksum == _text_checksum(dockerfile)
-
def run(self, cmd, keep, quiet, as_user=False):
label = uuid.uuid4().hex
if not keep:
@@ -412,61 +369,54 @@ def args(self, parser):
help="Dockerfile name")
def run(self, args, argv):
- dockerfile = _read_dockerfile(args.dockerfile)
tag = args.tag
dkr = Docker(args.command)
- if "--no-cache" not in argv and \
- dkr.image_matches_dockerfile(tag, dockerfile):
- pass
- else:
- # Create a docker context directory for the build
- docker_dir = tempfile.mkdtemp(prefix="docker_build")
-
- # Validate binfmt_misc will work
- if args.skip_binfmt:
- qpath = args.include_executable
- elif args.include_executable:
- qpath, enabled = _check_binfmt_misc(args.include_executable)
- if not enabled:
- return 1
-
- # Is there a .pre file to run in the build context?
- docker_pre = os.path.splitext(args.dockerfile)[0]+".pre"
- if os.path.exists(docker_pre):
- stdout = DEVNULL if args.quiet else None
- rc = subprocess.call(os.path.realpath(docker_pre),
- cwd=docker_dir, stdout=stdout)
- if rc == 3:
- print("Skip")
- return 0
- elif rc != 0:
- print("%s exited with code %d" % (docker_pre, rc))
- return 1
-
- # Copy any extra files into the Docker context. These can be
- # included by the use of the ADD directive in the Dockerfile.
- cksum = []
- if args.include_executable:
- # FIXME: there is no checksum of this executable and the linked
- # libraries, once the image built any change of this executable
- # or any library won't trigger another build.
- _copy_binary_with_libs(args.include_executable,
- qpath, docker_dir)
-
- for filename in args.extra_files or []:
- _copy_with_mkdir(filename, docker_dir)
- cksum += [(filename, _file_checksum(filename))]
-
- argv += ["--build-arg=" + k.lower() + "=" + v
- for k, v in os.environ.items()
- if k.lower() in FILTERED_ENV_NAMES]
- dkr.build_image(tag, docker_dir, dockerfile,
- quiet=args.quiet, user=args.user,
- argv=argv, registry=args.registry,
- extra_files_cksum=cksum)
-
- rmtree(docker_dir)
+
+ # Create a docker context directory for the build
+ docker_dir = tempfile.mkdtemp(prefix="docker_build")
+
+ # Validate binfmt_misc will work
+ if args.skip_binfmt:
+ qpath = args.include_executable
+ elif args.include_executable:
+ qpath, enabled = _check_binfmt_misc(args.include_executable)
+ if not enabled:
+ return 1
+
+ # Is there a .pre file to run in the build context?
+ docker_pre = os.path.splitext(args.dockerfile)[0]+".pre"
+ if os.path.exists(docker_pre):
+ stdout = DEVNULL if args.quiet else None
+ rc = subprocess.call(os.path.realpath(docker_pre),
+ cwd=docker_dir, stdout=stdout)
+ if rc == 3:
+ print("Skip")
+ return 0
+ elif rc != 0:
+ print("%s exited with code %d" % (docker_pre, rc))
+ return 1
+
+ # Copy any extra files into the Docker context. These can be
+ # included by the use of the ADD directive in the Dockerfile.
+ if args.include_executable:
+ # FIXME: there is no checksum of this executable and the linked
+ # libraries, once the image built any change of this executable
+ # or any library won't trigger another build.
+ _copy_binary_with_libs(args.include_executable,
+ qpath, docker_dir)
+
+ for filename in args.extra_files or []:
+ _copy_with_mkdir(filename, docker_dir)
+
+ argv += ["--build-arg=" + k.lower() + "=" + v
+ for k, v in os.environ.items()
+ if k.lower() in FILTERED_ENV_NAMES]
+ dkr.build_image(tag, docker_dir, args.dockerfile,
+ quiet=args.quiet, user=args.user,
+ argv=argv, registry=args.registry)
+
+ rmtree(docker_dir)
return 0
--
2.47.3
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH v3 12/17] tests/docker: add specific command to parser
2026-09-16 8:53 [PATCH v3 00/17] testing: various docker clean-ups post meson tcg conversion Alex Bennée
` (10 preceding siblings ...)
2026-09-16 8:53 ` [PATCH v3 11/17] tests/docker: strip remaining caching logic from docker.py Alex Bennée
@ 2026-09-16 8:53 ` Alex Bennée
2026-09-16 8:53 ` [PATCH v3 13/17] tests/docker: swap --quiet for --verbose Alex Bennée
` (5 subsequent siblings)
17 siblings, 0 replies; 24+ messages in thread
From: Alex Bennée @ 2026-09-16 8:53 UTC (permalink / raw)
To: qemu-devel
Cc: John Snow, Daniel P. Berrangé, Helge Deller, Peter Maydell,
Thomas Huth, Richard Henderson, Brad Smith, qemu-arm,
Fabiano Rosas, Warner Losh, Cleber Rosa,
Philippe Mathieu-Daudé, Ilya Leoshkevich, Cornelia Huck,
Paolo Bonzini, Brian Cain, Song Gao, Kyle Evans, Jiaxun Yang,
Eric Farman, Marc-André Lureau, Laurent Vivier,
Alex Bennée, Pierrick Bouvier
A future change will want to use additional flags which clash with
docker/podman command lines. Currently they would get snarfed up by
argparser. Make the pass-through commands explicit to avoid this.
Reviewed-by: Pierrick Bouvier <pierrick.bouvier@oss.qualcomm.com>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
scripts/coverity-scan/run-coverity-scan | 2 +-
tests/docker/docker.py | 5 ++++-
tests/tcg/meson.build | 2 +-
3 files changed, 6 insertions(+), 3 deletions(-)
diff --git a/scripts/coverity-scan/run-coverity-scan b/scripts/coverity-scan/run-coverity-scan
index 2f9ccd5e44b..0e1361606e0 100755
--- a/scripts/coverity-scan/run-coverity-scan
+++ b/scripts/coverity-scan/run-coverity-scan
@@ -381,7 +381,7 @@ if [ "$DOCKER" = yes ]; then
# Arrange for this docker run to get access to the sources with -v.
# We pass through all the configuration from the outer script to the inner.
export COVERITY_EMAIL COVERITY_BUILD_CMD
- tests/docker/docker.py run -it --env COVERITY_EMAIL --env COVERITY_BUILD_CMD \
+ tests/docker/docker.py run -- -it --env COVERITY_EMAIL --env COVERITY_BUILD_CMD \
-v "$SECRETDIR:/work" coverity-scanner \
./run-coverity-scan --version "$VERSION" \
--description "$DESCRIPTION" $ARGS --tokenfile /work/token \
diff --git a/tests/docker/docker.py b/tests/docker/docker.py
index a2e97061240..d7eb4cf6811 100755
--- a/tests/docker/docker.py
+++ b/tests/docker/docker.py
@@ -336,9 +336,12 @@ def args(self, parser):
help="Don't remove image when command completes")
parser.add_argument("--run-as-current-user", action="store_true",
help="Run container using the current user's uid")
+ parser.add_argument('cmd', nargs='*',
+ help="""The command to run. You should precede with
+ -- to avoid confusion about its flags""")
def run(self, args, argv):
- return Docker(args.command).run(argv, args.keep, quiet=args.quiet,
+ return Docker(args.command).run(args.cmd, args.keep, quiet=args.quiet,
as_user=args.run_as_current_user)
diff --git a/tests/tcg/meson.build b/tests/tcg/meson.build
index fce70f8e56f..17974e4d15c 100644
--- a/tests/tcg/meson.build
+++ b/tests/tcg/meson.build
@@ -237,7 +237,7 @@ foreach target, plan: tcg_tests
mount = meson.project_source_root()
mount = mount + ':' + mount
here = meson.project_build_root()
- cc = [docker_wrapper, 'run', '--run-as-current-user',
+ cc = [docker_wrapper, 'run', '--run-as-current-user', '--',
'-w', here, '-v', mount,
'qemu/' + cc_dockerfile, plan['cc']]
has_cc = true
--
2.47.3
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH v3 13/17] tests/docker: swap --quiet for --verbose
2026-09-16 8:53 [PATCH v3 00/17] testing: various docker clean-ups post meson tcg conversion Alex Bennée
` (11 preceding siblings ...)
2026-09-16 8:53 ` [PATCH v3 12/17] tests/docker: add specific command to parser Alex Bennée
@ 2026-09-16 8:53 ` Alex Bennée
2026-09-16 8:53 ` [PATCH v3 14/17] tests/docker: fix brown bag typo for docker-ccache Alex Bennée
` (4 subsequent siblings)
17 siblings, 0 replies; 24+ messages in thread
From: Alex Bennée @ 2026-09-16 8:53 UTC (permalink / raw)
To: qemu-devel
Cc: John Snow, Daniel P. Berrangé, Helge Deller, Peter Maydell,
Thomas Huth, Richard Henderson, Brad Smith, qemu-arm,
Fabiano Rosas, Warner Losh, Cleber Rosa,
Philippe Mathieu-Daudé, Ilya Leoshkevich, Cornelia Huck,
Paolo Bonzini, Brian Cain, Song Gao, Kyle Evans, Jiaxun Yang,
Eric Farman, Marc-André Lureau, Laurent Vivier,
Alex Bennée, Pierrick Bouvier
Running the docker build in meson spams the output so default to quiet
and make --verbose the options. If we want to expose verbosity in
meson we can deal with that later.
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
v3
- dropped accidental libvirt-ci inclusion
---
tests/docker/Makefile.include | 10 +++++-----
tests/docker/docker.py | 22 ++++++++++++----------
2 files changed, 17 insertions(+), 15 deletions(-)
diff --git a/tests/docker/Makefile.include b/tests/docker/Makefile.include
index 74bf471f171..85825d74dfb 100644
--- a/tests/docker/Makefile.include
+++ b/tests/docker/Makefile.include
@@ -72,13 +72,13 @@ docker-binfmt-image-debian-%: $(DOCKER_FILES_DIR)/debian-bootstrap.docker
DEB_TYPE=$(DEB_TYPE) \
$(if $(DEB_URL),DEB_URL=$(DEB_URL),) \
$(DOCKER_SCRIPT) build -t qemu/debian-$* -f $< \
- $(if $(DOCKER_V),,--quiet) $(if $(NOCACHE),--no-cache) \
+ $(if $(DOCKER_V),--verbose) $(if $(NOCACHE),--no-cache) \
$(if $(NOUSER),,--add-current-user) \
$(if $(EXTRA_FILES),--extra-files $(EXTRA_FILES)) \
$(if $(EXECUTABLE),--include-executable=$(EXECUTABLE)), \
"BUILD","binfmt debian-$* (debootstrapped)"), \
$(call quiet-command, \
- $(DOCKER_SCRIPT) check --quiet qemu/debian-$* $< || \
+ $(DOCKER_SCRIPT) check qemu/debian-$* $< || \
{ echo "You will need to build $(EXECUTABLE)"; exit 1;},\
"CHECK", "debian-$* exists"))
@@ -103,17 +103,17 @@ debian-toolchain-run = \
$(if $(NOCACHE)$(NOFETCH), \
$(call quiet-command, \
$(DOCKER_SCRIPT) build -t qemu/$1 -f $< \
- $(if $(DOCKER_V),,--quiet) \
+ $(if $(DOCKER_V),--verbose) \
$(if $(NOCACHE),--no-cache) \
--registry $(DOCKER_REGISTRY) --extra-files \
$(DOCKER_FILES_DIR)/$1.d/build-toolchain.sh, \
"BUILD", $1), \
$(call quiet-command, \
- $(DOCKER_SCRIPT) fetch $(if $(DOCKER_V),,--quiet) \
+ $(DOCKER_SCRIPT) fetch $(if $(DOCKER_V),--verbose) \
qemu/$1 $(DOCKER_REGISTRY), \
"FETCH", $1) \
$(call quiet-command, \
- $(DOCKER_SCRIPT) update $(if $(DOCKER_V),,--quiet) \
+ $(DOCKER_SCRIPT) update $(if $(DOCKER_V),--verbose) \
qemu/$1 \
$(if $(NOUSER),,--add-current-user) \
"PREPARE", $1))
diff --git a/tests/docker/docker.py b/tests/docker/docker.py
index d7eb4cf6811..10cb4cbde11 100755
--- a/tests/docker/docker.py
+++ b/tests/docker/docker.py
@@ -312,8 +312,8 @@ class SubCommand(object):
name = None # Subcommand name
def shared_args(self, parser):
- parser.add_argument("--quiet", action="store_true",
- help="Run quietly unless an error occurred")
+ parser.add_argument("--verbose", "-v", action="store_true",
+ help="Run verbosely (default is quiet)")
def args(self, parser):
"""Setup argument parser"""
@@ -341,7 +341,8 @@ def args(self, parser):
-- to avoid confusion about its flags""")
def run(self, args, argv):
- return Docker(args.command).run(args.cmd, args.keep, quiet=args.quiet,
+ return Docker(args.command).run(args.cmd, args.keep,
+ quiet=not args.verbose,
as_user=args.run_as_current_user)
@@ -390,7 +391,7 @@ def run(self, args, argv):
# Is there a .pre file to run in the build context?
docker_pre = os.path.splitext(args.dockerfile)[0]+".pre"
if os.path.exists(docker_pre):
- stdout = DEVNULL if args.quiet else None
+ stdout = None if args.verbose else DEVNULL
rc = subprocess.call(os.path.realpath(docker_pre),
cwd=docker_dir, stdout=stdout)
if rc == 3:
@@ -416,7 +417,7 @@ def run(self, args, argv):
for k, v in os.environ.items()
if k.lower() in FILTERED_ENV_NAMES]
dkr.build_image(tag, docker_dir, args.dockerfile,
- quiet=args.quiet, user=args.user,
+ quiet=not args.verbose, user=args.user,
argv=argv, registry=args.registry)
rmtree(docker_dir)
@@ -435,9 +436,9 @@ def args(self, parser):
def run(self, args, argv):
dkr = Docker(args.command)
- dkr.command(cmd="pull", quiet=args.quiet,
+ dkr.command(cmd="pull", quiet=not args.verbose,
argv=["%s/%s" % (args.registry, args.tag)])
- dkr.command(cmd="tag", quiet=args.quiet,
+ dkr.command(cmd="tag", quiet=not args.verbose,
argv=["%s/%s" % (args.registry, args.tag), args.tag])
@@ -513,7 +514,7 @@ def run(self, args, argv):
# Run the build with our tarball context
dkr = Docker(args.command)
- dkr.update_image(args.tag, tmp, quiet=args.quiet)
+ dkr.update_image(args.tag, tmp, quiet=not args.verbose)
return 0
@@ -532,7 +533,8 @@ class ImagesCommand(SubCommand):
name = "images"
def run(self, args, argv):
- return Docker(args.command).command("images", argv, args.quiet)
+ return Docker(args.command).command("images", argv,
+ quiet=not args.verbose)
class ProbeCommand(SubCommand):
@@ -574,7 +576,7 @@ def run(self, args, argv):
cmd += ["-v", "%s:%s:ro,z" % (p, p)]
cmd += [args.image, args.cc]
cmd += argv
- return Docker(args.command).run(cmd, False, quiet=args.quiet,
+ return Docker(args.command).run(cmd, False, quiet=not args.verbose,
as_user=True)
--
2.47.3
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH v3 14/17] tests/docker: fix brown bag typo for docker-ccache
2026-09-16 8:53 [PATCH v3 00/17] testing: various docker clean-ups post meson tcg conversion Alex Bennée
` (12 preceding siblings ...)
2026-09-16 8:53 ` [PATCH v3 13/17] tests/docker: swap --quiet for --verbose Alex Bennée
@ 2026-09-16 8:53 ` Alex Bennée
2026-09-16 8:53 ` [PATCH v3 15/17] gitlab: update the @user id mapping file Alex Bennée
` (3 subsequent siblings)
17 siblings, 0 replies; 24+ messages in thread
From: Alex Bennée @ 2026-09-16 8:53 UTC (permalink / raw)
To: qemu-devel
Cc: John Snow, Daniel P. Berrangé, Helge Deller, Peter Maydell,
Thomas Huth, Richard Henderson, Brad Smith, qemu-arm,
Fabiano Rosas, Warner Losh, Cleber Rosa,
Philippe Mathieu-Daudé, Ilya Leoshkevich, Cornelia Huck,
Paolo Bonzini, Brian Cain, Song Gao, Kyle Evans, Jiaxun Yang,
Eric Farman, Marc-André Lureau, Laurent Vivier,
Alex Bennée, Pierrick Bouvier
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
tests/docker/Makefile.include | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tests/docker/Makefile.include b/tests/docker/Makefile.include
index 85825d74dfb..fa873e09b4f 100644
--- a/tests/docker/Makefile.include
+++ b/tests/docker/Makefile.include
@@ -197,7 +197,7 @@ docker-help: docker
# Where QEMU caches build artefacts
DOCKER_QEMU_CACHE_DIR := $$HOME/.cache/qemu
# Use a global constant ccache directory to speed up repetitive builds
-DOCKER_QEMU_CCACHE_DIR := DOCKER_QEMU_CACHE_DIR/docker-ccache
+DOCKER_QEMU_CCACHE_DIR := $$DOCKER_QEMU_CACHE_DIR/docker-ccache
# This rule if for directly running against an arbitrary docker target.
# It is called by the expanded docker targets (e.g. make
--
2.47.3
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH v3 15/17] gitlab: update the @user id mapping file
2026-09-16 8:53 [PATCH v3 00/17] testing: various docker clean-ups post meson tcg conversion Alex Bennée
` (13 preceding siblings ...)
2026-09-16 8:53 ` [PATCH v3 14/17] tests/docker: fix brown bag typo for docker-ccache Alex Bennée
@ 2026-09-16 8:53 ` Alex Bennée
2026-09-16 8:53 ` [PATCH v3 16/17] scripts/make2mtest: add docker dependencies for check-tcg-% targets Alex Bennée
` (2 subsequent siblings)
17 siblings, 0 replies; 24+ messages in thread
From: Alex Bennée @ 2026-09-16 8:53 UTC (permalink / raw)
To: qemu-devel
Cc: John Snow, Daniel P. Berrangé, Helge Deller, Peter Maydell,
Thomas Huth, Richard Henderson, Brad Smith, qemu-arm,
Fabiano Rosas, Warner Losh, Cleber Rosa,
Philippe Mathieu-Daudé, Ilya Leoshkevich, Cornelia Huck,
Paolo Bonzini, Brian Cain, Song Gao, Kyle Evans, Jiaxun Yang,
Eric Farman, Marc-André Lureau, Laurent Vivier,
Alex Bennée, Pierrick Bouvier
I needed to fix a POSIX-ism in the script as well.
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Message-ID: <20260914184534.706637-1-alex.bennee@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
.gitlab-map-auto | 8 +++++---
scripts/gitlab-map-update | 2 +-
2 files changed, 6 insertions(+), 4 deletions(-)
diff --git a/.gitlab-map-auto b/.gitlab-map-auto
index 28ce448f1bf..3f717a15d4e 100644
--- a/.gitlab-map-auto
+++ b/.gitlab-map-auto
@@ -12,11 +12,12 @@ a1xndr Alexander Bulekov
adi-g15-ibm Aditya Gupta
agraf Alexander Graf
alex.williamson Alex Williamson
-aliang1 Aihua Liang
alistair23 Alistair Francis
+amachhiw Amit Machhiwal
anisinha Ani Sinha
anthony-linaro Anthony Roberts
anthonyper Anthony PERARD
+aroxell Anders Roxell
berrange Daniel P. Berrangé
birkelund Klaus Jensen
bonzini Paolo Bonzini
@@ -36,10 +37,10 @@ dwmw2 David Woodhouse
eauger1 Eric Auger
ebblake Eric Blake
edgar.iglesias Edgar E. Iglesias
+efarman Eric Farman
ehabkost Eduardo Habkost
eldondev Eldon
epilys Manos Pitsidianakis
-famzheng Fam Zheng
farosas Fabiano Rosas
gautammenghani Gautam Menghani
gkurz Greg Kurz
@@ -51,7 +52,6 @@ imammedo Igor Mammedov
jasowang Jason Wang
jmacarthur Jim MacArthur
jsnow John Snow
-juan.quintela Juan Quintela
kbastian-qemu Bastian Koppelmann
kmwolf Kevin Wolf
kostyanf14 Kostiantyn Kostiuk
@@ -67,6 +67,7 @@ mauromatteo.cascella Mauro Matteo Cascella
mcayland Mark Cave-Ayland
mdroth Michael Roth
mediouni-m M. Mediouni
+mjrosato Matthew Rosato
mjt0k Michael Tokarev
mstredhat MST
npiggin npiggin
@@ -79,6 +80,7 @@ pipo.sk Peter Krempa
pkrempa Peter Krempa (work)
pm215 Peter Maydell
qemu-janitor Qemu Janitor
+raphael.s.norwitz Raphael Norwitz
rathc Chinmay Rath
rth7680 Richard Henderson
schoenebeck Christian Schoenebeck
diff --git a/scripts/gitlab-map-update b/scripts/gitlab-map-update
index c134c226aa2..743ad11900d 100755
--- a/scripts/gitlab-map-update
+++ b/scripts/gitlab-map-update
@@ -33,7 +33,7 @@ glab api --paginate /projects/qemu-project%2fqemu/members | \
.gitlab-map-auto.tmp
test $? != 0 && fail=1
-if test $fail == 0
+if test $fail -eq 0
then
grep '^#' .gitlab-map-auto > .gitlab-map-auto.new
LC_ALL=C sort .gitlab-map-auto.tmp | uniq >> .gitlab-map-auto.new
--
2.47.3
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH v3 16/17] scripts/make2mtest: add docker dependencies for check-tcg-% targets
2026-09-16 8:53 [PATCH v3 00/17] testing: various docker clean-ups post meson tcg conversion Alex Bennée
` (14 preceding siblings ...)
2026-09-16 8:53 ` [PATCH v3 15/17] gitlab: update the @user id mapping file Alex Bennée
@ 2026-09-16 8:53 ` Alex Bennée
2026-09-16 9:56 ` Pierrick Bouvier
2026-09-16 8:53 ` [PATCH v3 17/17] tests/tcg: add console property to docker image custom target Alex Bennée
2026-09-16 10:47 ` [PATCH v3 00/17] testing: various docker clean-ups post meson tcg conversion Richard Henderson
17 siblings, 1 reply; 24+ messages in thread
From: Alex Bennée @ 2026-09-16 8:53 UTC (permalink / raw)
To: qemu-devel
Cc: John Snow, Daniel P. Berrangé, Helge Deller, Peter Maydell,
Thomas Huth, Richard Henderson, Brad Smith, qemu-arm,
Fabiano Rosas, Warner Losh, Cleber Rosa,
Philippe Mathieu-Daudé, Ilya Leoshkevich, Cornelia Huck,
Paolo Bonzini, Brian Cain, Song Gao, Kyle Evans, Jiaxun Yang,
Eric Farman, Marc-André Lureau, Laurent Vivier,
Alex Bennée, Pierrick Bouvier
This should trigger the building of the docker image when the user
calls "make check-tcg" or one of the arch specific targets such as
"make check-tcg-m68k-linux-user".
We still keep the internal meson dependency so individual tests can
launched and the docker build verified.
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
scripts/mtest2make.py | 35 +++++++++++++++++++++++++++++------
1 file changed, 29 insertions(+), 6 deletions(-)
diff --git a/scripts/mtest2make.py b/scripts/mtest2make.py
index 383ea68b16d..ab894d90d47 100644
--- a/scripts/mtest2make.py
+++ b/scripts/mtest2make.py
@@ -14,6 +14,7 @@ class Suite(object):
def __init__(self):
self.deps = set()
self.speeds = set()
+ self.docker_deps = set()
def names(self, base):
return [f'{base}-{speed}' for speed in self.speeds]
@@ -40,7 +41,22 @@ def names(self, base):
introspect = json.load(sys.stdin)
-def process_tests(test, targets, suites):
+targets = {t['id']: [os.path.relpath(f) for f in t['filename']]
+ for t in introspect['targets']}
+
+# collect the docker images uses by the tests. This is totally a hacky
+# heuristic that fishes the images out of the test custom commands by
+# looking for the qemu/image pattern.
+targets_docker = {}
+for t in introspect['targets']:
+ for src in t.get('target_sources', []):
+ for arg in src.get('compiler', []):
+ if arg.startswith('qemu/'):
+ img = arg.split('/', 1)[1]
+ targets_docker[t['id']] = f'docker-image-{img}'
+ break
+
+def process_tests(test, targets, targets_docker, suites):
executable = test['cmd'][0]
try:
executable = os.path.relpath(executable)
@@ -51,6 +67,8 @@ def process_tests(test, targets, suites):
deps = itertools.chain.from_iterable(deps)
deps = list(deps)
+ docker_deps = [targets_docker[x] for x in test['depends'] if x in targets_docker]
+
test_suites = test['suite'] or ['default']
for s in test_suites:
# The suite name in the introspection info is "PROJECT" or "PROJECT:SUITE"
@@ -59,6 +77,7 @@ def process_tests(test, targets, suites):
if s == 'slow' or s == 'thorough':
continue
suites[s].deps.update(deps)
+ suites[s].docker_deps.update(docker_deps)
if s.endswith('-slow'):
s = s[:-5]
suites[s].speeds.add('slow')
@@ -81,6 +100,9 @@ def emit_prolog(suites, prefix):
print(f'all-{prefix}-xml = {all_xml}')
print(f'.PHONY: {prefix} do-meson-{prefix} {prefix}-report.junit.xml $(all-{prefix}-targets) $(all-{prefix}-xml)')
print(f'ninja-cmd-goals += $(foreach s, $(.{prefix}.mtest-suites), $(.{prefix}-$s.deps))')
+ print(f'docker-cmd-goals += $(foreach s, $(.{prefix}.mtest-suites), $(.{prefix}-$s.docker-deps))')
+ print(f'docker-cmd-goals += $(foreach g, $(MAKECMDGOALS), $(.docker-goals.$g))')
+ print(f'run-ninja: $(sort $(docker-cmd-goals))')
print(f'{prefix}-build: run-ninja')
print(f'{prefix} $(all-{prefix}-targets): do-meson-{prefix}')
print(f'do-meson-{prefix}: run-ninja; $(if $(MAKE.n),,+)$(MESON) test $(.{prefix}.mtestargs)')
@@ -93,6 +115,10 @@ def emit_suite(name, suite, prefix):
print()
print(f'.{prefix}-{tgtname}.deps = {deps}')
print(f'.ninja-goals.check-build += $(.{prefix}-{tgtname}.deps)')
+ if suite.docker_deps:
+ docker_deps = ' '.join(sorted(suite.docker_deps))
+ print(f'.{prefix}-{tgtname}.docker-deps = {docker_deps}')
+ print(f'.docker-goals.check-build += $(.{prefix}-{tgtname}.docker-deps)')
names = ' '.join(sorted(suite.names(name)))
targets = f'{prefix}-{tgtname} {prefix}-report-{tgtname}.junit.xml'
@@ -105,19 +131,16 @@ def emit_suite(name, suite, prefix):
print(f".{prefix}.mtest-suites += {name} $(call .speed.$(SPEED), {names})")
print(f'endif')
-targets = {t['id']: [os.path.relpath(f) for f in t['filename']]
- for t in introspect['targets']}
-
testsuites = defaultdict(Suite)
for test in introspect['tests']:
- process_tests(test, targets, testsuites)
+ process_tests(test, targets, targets_docker, testsuites)
emit_prolog(testsuites, 'check')
for name, suite in testsuites.items():
emit_suite(name, suite, 'check')
benchsuites = defaultdict(Suite)
for test in introspect['benchmarks']:
- process_tests(test, targets, benchsuites)
+ process_tests(test, targets, targets_docker, benchsuites)
emit_prolog(benchsuites, 'bench')
for name, suite in benchsuites.items():
emit_suite(name, suite, 'bench')
--
2.47.3
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH v3 17/17] tests/tcg: add console property to docker image custom target
2026-09-16 8:53 [PATCH v3 00/17] testing: various docker clean-ups post meson tcg conversion Alex Bennée
` (15 preceding siblings ...)
2026-09-16 8:53 ` [PATCH v3 16/17] scripts/make2mtest: add docker dependencies for check-tcg-% targets Alex Bennée
@ 2026-09-16 8:53 ` Alex Bennée
2026-09-16 10:47 ` [PATCH v3 00/17] testing: various docker clean-ups post meson tcg conversion Richard Henderson
17 siblings, 0 replies; 24+ messages in thread
From: Alex Bennée @ 2026-09-16 8:53 UTC (permalink / raw)
To: qemu-devel
Cc: John Snow, Daniel P. Berrangé, Helge Deller, Peter Maydell,
Thomas Huth, Richard Henderson, Brad Smith, qemu-arm,
Fabiano Rosas, Warner Losh, Cleber Rosa,
Philippe Mathieu-Daudé, Ilya Leoshkevich, Cornelia Huck,
Paolo Bonzini, Brian Cain, Song Gao, Kyle Evans, Jiaxun Yang,
Eric Farman, Marc-André Lureau, Laurent Vivier,
Alex Bennée, Pierrick Bouvier
According to the meson docs this serialises the target in a special
"console" pool which also disables the buffering of stdout. This helps
avoid the appearance of a massive stall when a docker image is built.
Suggested-by: Daniel P. Berrangé <berrange@redhat.com>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
tests/tcg/meson.build | 1 +
1 file changed, 1 insertion(+)
diff --git a/tests/tcg/meson.build b/tests/tcg/meson.build
index 17974e4d15c..baa22e19336 100644
--- a/tests/tcg/meson.build
+++ b/tests/tcg/meson.build
@@ -227,6 +227,7 @@ foreach target, plan: tcg_tests
endif
t = custom_target(image_name, command: cmd,
build_by_default: false,
+ console: true,
output: 'no_output_' + image_name)
image_targets += {cc_dockerfile: t}
endif
--
2.47.3
^ permalink raw reply related [flat|nested] 24+ messages in thread
* Re: [PATCH v3 16/17] scripts/make2mtest: add docker dependencies for check-tcg-% targets
2026-09-16 8:53 ` [PATCH v3 16/17] scripts/make2mtest: add docker dependencies for check-tcg-% targets Alex Bennée
@ 2026-09-16 9:56 ` Pierrick Bouvier
2026-09-16 10:03 ` Daniel P. Berrangé
0 siblings, 1 reply; 24+ messages in thread
From: Pierrick Bouvier @ 2026-09-16 9:56 UTC (permalink / raw)
To: Alex Bennée, qemu-devel
Cc: John Snow, Daniel P. Berrangé, Helge Deller, Peter Maydell,
Thomas Huth, Richard Henderson, Brad Smith, qemu-arm,
Fabiano Rosas, Warner Losh, Cleber Rosa,
Philippe Mathieu-Daudé, Ilya Leoshkevich, Cornelia Huck,
Paolo Bonzini, Brian Cain, Song Gao, Kyle Evans, Jiaxun Yang,
Eric Farman, Marc-André Lureau, Laurent Vivier
On 9/16/2026 1:53 AM, Alex Bennée wrote:
> This should trigger the building of the docker image when the user
> calls "make check-tcg" or one of the arch specific targets such as
> "make check-tcg-m68k-linux-user".
>
Maybe there is some confusion, patch 2 only reverts option
enable/disable-containers + --container-command for meson. It does not
disable container support for meson tcg tests, which is there and
enabled by default. Thus, container image dependencies are already
there, with ninja or make.
$ ./configure && make check-tcg-m68k-linux-user --dry-run |& grep debian
[246/1052] Generating tests/tcg/image-debian-all-test-cross with a
custom command
Given that dependencies are already there, what is the goal of current
patch?
> We still keep the internal meson dependency so individual tests can
> launched and the docker build verified.
>
As a side note, since patch 3 removes existing meson options, there will
be no way to disable container build and run. It might be a (new)
problem if some people were relying on this to avoid using
docker/podman, which is the current workaround for John Snow's issue for
instance.
At minimum, current series should at least keep meson implementation of
--disable-containers, which implies to keep this entry in
meson_options.txt. The rest is less important, as risk is only to skip
tests, which is not blocking for users.
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
> ---
> scripts/mtest2make.py | 35 +++++++++++++++++++++++++++++------
> 1 file changed, 29 insertions(+), 6 deletions(-)
>
> diff --git a/scripts/mtest2make.py b/scripts/mtest2make.py
> index 383ea68b16d..ab894d90d47 100644
> --- a/scripts/mtest2make.py
> +++ b/scripts/mtest2make.py
> @@ -14,6 +14,7 @@ class Suite(object):
> def __init__(self):
> self.deps = set()
> self.speeds = set()
> + self.docker_deps = set()
>
> def names(self, base):
> return [f'{base}-{speed}' for speed in self.speeds]
> @@ -40,7 +41,22 @@ def names(self, base):
>
> introspect = json.load(sys.stdin)
>
> -def process_tests(test, targets, suites):
> +targets = {t['id']: [os.path.relpath(f) for f in t['filename']]
> + for t in introspect['targets']}
> +
> +# collect the docker images uses by the tests. This is totally a hacky
> +# heuristic that fishes the images out of the test custom commands by
> +# looking for the qemu/image pattern.
> +targets_docker = {}
> +for t in introspect['targets']:
> + for src in t.get('target_sources', []):
> + for arg in src.get('compiler', []):
> + if arg.startswith('qemu/'):
> + img = arg.split('/', 1)[1]
> + targets_docker[t['id']] = f'docker-image-{img}'
> + break
> +
> +def process_tests(test, targets, targets_docker, suites):
> executable = test['cmd'][0]
> try:
> executable = os.path.relpath(executable)
> @@ -51,6 +67,8 @@ def process_tests(test, targets, suites):
> deps = itertools.chain.from_iterable(deps)
> deps = list(deps)
>
> + docker_deps = [targets_docker[x] for x in test['depends'] if x in targets_docker]
> +
> test_suites = test['suite'] or ['default']
> for s in test_suites:
> # The suite name in the introspection info is "PROJECT" or "PROJECT:SUITE"
> @@ -59,6 +77,7 @@ def process_tests(test, targets, suites):
> if s == 'slow' or s == 'thorough':
> continue
> suites[s].deps.update(deps)
> + suites[s].docker_deps.update(docker_deps)
> if s.endswith('-slow'):
> s = s[:-5]
> suites[s].speeds.add('slow')
> @@ -81,6 +100,9 @@ def emit_prolog(suites, prefix):
> print(f'all-{prefix}-xml = {all_xml}')
> print(f'.PHONY: {prefix} do-meson-{prefix} {prefix}-report.junit.xml $(all-{prefix}-targets) $(all-{prefix}-xml)')
> print(f'ninja-cmd-goals += $(foreach s, $(.{prefix}.mtest-suites), $(.{prefix}-$s.deps))')
> + print(f'docker-cmd-goals += $(foreach s, $(.{prefix}.mtest-suites), $(.{prefix}-$s.docker-deps))')
> + print(f'docker-cmd-goals += $(foreach g, $(MAKECMDGOALS), $(.docker-goals.$g))')
> + print(f'run-ninja: $(sort $(docker-cmd-goals))')
> print(f'{prefix}-build: run-ninja')
> print(f'{prefix} $(all-{prefix}-targets): do-meson-{prefix}')
> print(f'do-meson-{prefix}: run-ninja; $(if $(MAKE.n),,+)$(MESON) test $(.{prefix}.mtestargs)')
> @@ -93,6 +115,10 @@ def emit_suite(name, suite, prefix):
> print()
> print(f'.{prefix}-{tgtname}.deps = {deps}')
> print(f'.ninja-goals.check-build += $(.{prefix}-{tgtname}.deps)')
> + if suite.docker_deps:
> + docker_deps = ' '.join(sorted(suite.docker_deps))
> + print(f'.{prefix}-{tgtname}.docker-deps = {docker_deps}')
> + print(f'.docker-goals.check-build += $(.{prefix}-{tgtname}.docker-deps)')
>
> names = ' '.join(sorted(suite.names(name)))
> targets = f'{prefix}-{tgtname} {prefix}-report-{tgtname}.junit.xml'
> @@ -105,19 +131,16 @@ def emit_suite(name, suite, prefix):
> print(f".{prefix}.mtest-suites += {name} $(call .speed.$(SPEED), {names})")
> print(f'endif')
>
> -targets = {t['id']: [os.path.relpath(f) for f in t['filename']]
> - for t in introspect['targets']}
> -
> testsuites = defaultdict(Suite)
> for test in introspect['tests']:
> - process_tests(test, targets, testsuites)
> + process_tests(test, targets, targets_docker, testsuites)
> emit_prolog(testsuites, 'check')
> for name, suite in testsuites.items():
> emit_suite(name, suite, 'check')
>
> benchsuites = defaultdict(Suite)
> for test in introspect['benchmarks']:
> - process_tests(test, targets, benchsuites)
> + process_tests(test, targets, targets_docker, benchsuites)
> emit_prolog(benchsuites, 'bench')
> for name, suite in benchsuites.items():
> emit_suite(name, suite, 'bench')
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH v3 16/17] scripts/make2mtest: add docker dependencies for check-tcg-% targets
2026-09-16 9:56 ` Pierrick Bouvier
@ 2026-09-16 10:03 ` Daniel P. Berrangé
2026-09-16 15:24 ` Alex Bennée
0 siblings, 1 reply; 24+ messages in thread
From: Daniel P. Berrangé @ 2026-09-16 10:03 UTC (permalink / raw)
To: Pierrick Bouvier
Cc: Alex Bennée, qemu-devel, John Snow, Helge Deller,
Peter Maydell, Thomas Huth, Richard Henderson, Brad Smith,
qemu-arm, Fabiano Rosas, Warner Losh, Cleber Rosa,
Philippe Mathieu-Daudé, Ilya Leoshkevich, Cornelia Huck,
Paolo Bonzini, Brian Cain, Song Gao, Kyle Evans, Jiaxun Yang,
Eric Farman, Marc-André Lureau, Laurent Vivier
On Wed, Sep 16, 2026 at 02:56:09AM -0700, Pierrick Bouvier wrote:
> On 9/16/2026 1:53 AM, Alex Bennée wrote:
> > This should trigger the building of the docker image when the user
> > calls "make check-tcg" or one of the arch specific targets such as
> > "make check-tcg-m68k-linux-user".
> >
>
> Maybe there is some confusion, patch 2 only reverts option
> enable/disable-containers + --container-command for meson. It does not
> disable container support for meson tcg tests, which is there and
> enabled by default. Thus, container image dependencies are already
> there, with ninja or make.
>
> $ ./configure && make check-tcg-m68k-linux-user --dry-run |& grep debian
> [246/1052] Generating tests/tcg/image-debian-all-test-cross with a
> custom command
>
> Given that dependencies are already there, what is the goal of current
> patch?
>
> > We still keep the internal meson dependency so individual tests can
> > launched and the docker build verified.
> >
>
> As a side note, since patch 3 removes existing meson options, there will
> be no way to disable container build and run. It might be a (new)
> problem if some people were relying on this to avoid using
> docker/podman, which is the current workaround for John Snow's issue for
> instance.
>
> At minimum, current series should at least keep meson implementation of
> --disable-containers, which implies to keep this entry in
> meson_options.txt. The rest is less important, as risk is only to skip
> tests, which is not blocking for users.
Yes, if we're keeping meson.build rules that rely on containers,
then meson stll needs to honour the --disable-containers arg that
configure is processing now.
With regards,
Daniel
--
|: https://berrange.com ~~ https://hachyderm.io/@berrange :|
|: https://libvirt.org ~~ https://entangle-photo.org :|
|: https://pixelfed.art/berrange ~~ https://fstop138.berrange.com :|
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH v3 00/17] testing: various docker clean-ups post meson tcg conversion
2026-09-16 8:53 [PATCH v3 00/17] testing: various docker clean-ups post meson tcg conversion Alex Bennée
` (16 preceding siblings ...)
2026-09-16 8:53 ` [PATCH v3 17/17] tests/tcg: add console property to docker image custom target Alex Bennée
@ 2026-09-16 10:47 ` Richard Henderson
2026-09-16 15:44 ` Alex Bennée
17 siblings, 1 reply; 24+ messages in thread
From: Richard Henderson @ 2026-09-16 10:47 UTC (permalink / raw)
To: Alex Bennée, qemu-devel; +Cc: Ilya Leoshkevich
On 9/15/26 22:53, Alex Bennée wrote:
> This cleans up a few bits and pieces although doesn't totally solve
> the issue of an apparent stall while meson builds the docker image.
> However with these changes there should be no difference between the
> meson build and the equivalent "make docker-image-foo" invocation.
>
> We also finally get rid of the ill-advised magic caching support in
> docker.py.
>
> v3
>
> - Update make2test to trigger docker build from Makefile.include.
> - add Daniels's suggested console: true patch
> - fixed up some unref vars from the reverts
>
> v2
>
> I've restored the configure based compiler checks for so we can build
> roms and the vdso blobs again. It looks like we could never build roms
> with container based images so I've left it for now. Unlike the vdso
> build we can't trigger a container build through Makefile.prereqs.
>
> TODO
> ----
>
> I've still got Ilya's s390 test image patches to look at but I'm
> sending v2 because enough people are hitting issues.
>
> I also need to look at the timestamp stuff that Pierrick has suggested
> to see if that improves the caching from the registry.
>
> The following still need review:
>
> tests/tcg: add console property to docker image custom target
> scripts/make2mtest: add docker dependencies for check-tcg-% targets
> tests/docker: fix brown bag typo for docker-ccache
> tests/docker: swap --quiet for --verbose
> tests/docker: add container registry to configure and use
> tests/tcg: use --add-current-user when building containers
> configure: re-purpose the tcg test compiler configs for vdso building
> Revert "tests/tcg/meson.build: implement ./configure -cross-cc-* options"
Still missing 20260915110855.491985-1-iii@linux.ibm.com
("[PATCH] tests/tcg: Fix building outside of the source tree")
which is second behind --disable-containers in my current pain points.
r~
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH v3 03/17] Revert "tests/tcg/meson.build: implement ./configure containers options"
2026-09-16 8:53 ` [PATCH v3 03/17] Revert "tests/tcg/meson.build: implement ./configure containers options" Alex Bennée
@ 2026-09-16 13:32 ` Jared Rossi
0 siblings, 0 replies; 24+ messages in thread
From: Jared Rossi @ 2026-09-16 13:32 UTC (permalink / raw)
To: qemu-devel
On 9/16/26 4:53 AM, Alex Bennée wrote:
> We want to keep the container configuration inside configure for the
> firmware builds.
>
> This reverts commit 522b299ca4316d8cad57f9496ffcba87dcc20719.
>
> Tested-by: Eric Farman <farman@linux.ibm.com>
> Reviewed-by: Pierrick Bouvier <pierrick.bouvier@oss.qualcomm.com>
> Suggested-by: Paolo Bonzini <pbonzini@redhat.com>
> [AJB: untangle changes since]
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
> ---
> configure | 11 +++++++----
> meson_options.txt | 4 ----
> tests/tcg/meson.build | 25 ++++---------------------
> 3 files changed, 11 insertions(+), 29 deletions(-)
I've verified the s390-ccw.img is building again on real s390x hardware with
the reverts applied. Thanks again.
Tested-by: Jared Rossi <jrossi@linux.ibm.com>
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH v3 16/17] scripts/make2mtest: add docker dependencies for check-tcg-% targets
2026-09-16 10:03 ` Daniel P. Berrangé
@ 2026-09-16 15:24 ` Alex Bennée
0 siblings, 0 replies; 24+ messages in thread
From: Alex Bennée @ 2026-09-16 15:24 UTC (permalink / raw)
To: Daniel P. Berrangé
Cc: Pierrick Bouvier, qemu-devel, John Snow, Helge Deller,
Peter Maydell, Thomas Huth, Richard Henderson, Brad Smith,
qemu-arm, Fabiano Rosas, Warner Losh, Cleber Rosa,
Philippe Mathieu-Daudé, Ilya Leoshkevich, Cornelia Huck,
Paolo Bonzini, Brian Cain, Song Gao, Kyle Evans, Jiaxun Yang,
Eric Farman, Marc-André Lureau, Laurent Vivier
Daniel P. Berrangé <berrange@redhat.com> writes:
> On Wed, Sep 16, 2026 at 02:56:09AM -0700, Pierrick Bouvier wrote:
>> On 9/16/2026 1:53 AM, Alex Bennée wrote:
>> > This should trigger the building of the docker image when the user
>> > calls "make check-tcg" or one of the arch specific targets such as
>> > "make check-tcg-m68k-linux-user".
>> >
>>
>> Maybe there is some confusion, patch 2 only reverts option
>> enable/disable-containers + --container-command for meson. It does not
>> disable container support for meson tcg tests, which is there and
>> enabled by default. Thus, container image dependencies are already
>> there, with ninja or make.
>>
>> $ ./configure && make check-tcg-m68k-linux-user --dry-run |& grep debian
>> [246/1052] Generating tests/tcg/image-debian-all-test-cross with a
>> custom command
>>
>> Given that dependencies are already there, what is the goal of current
>> patch?
>>
>> > We still keep the internal meson dependency so individual tests can
>> > launched and the docker build verified.
>> >
>>
>> As a side note, since patch 3 removes existing meson options, there will
>> be no way to disable container build and run. It might be a (new)
>> problem if some people were relying on this to avoid using
>> docker/podman, which is the current workaround for John Snow's issue for
>> instance.
>>
>> At minimum, current series should at least keep meson implementation of
>> --disable-containers, which implies to keep this entry in
>> meson_options.txt. The rest is less important, as risk is only to skip
>> tests, which is not blocking for users.
>
> Yes, if we're keeping meson.build rules that rely on containers,
> then meson stll needs to honour the --disable-containers arg that
> configure is processing now.
I've modified the revert to ensure we don't loose the options being
passed down to meson.
>
> With regards,
> Daniel
--
Alex Bennée
Virtualisation Tech Lead @ Linaro
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH v3 00/17] testing: various docker clean-ups post meson tcg conversion
2026-09-16 10:47 ` [PATCH v3 00/17] testing: various docker clean-ups post meson tcg conversion Richard Henderson
@ 2026-09-16 15:44 ` Alex Bennée
0 siblings, 0 replies; 24+ messages in thread
From: Alex Bennée @ 2026-09-16 15:44 UTC (permalink / raw)
To: Richard Henderson; +Cc: qemu-devel, Ilya Leoshkevich
Richard Henderson <richard.henderson@linaro.org> writes:
> On 9/15/26 22:53, Alex Bennée wrote:
>> This cleans up a few bits and pieces although doesn't totally solve
>> the issue of an apparent stall while meson builds the docker image.
>> However with these changes there should be no difference between the
>> meson build and the equivalent "make docker-image-foo" invocation.
>> We also finally get rid of the ill-advised magic caching support in
>> docker.py.
>> v3
>> - Update make2test to trigger docker build from Makefile.include.
>> - add Daniels's suggested console: true patch
>> - fixed up some unref vars from the reverts
>> v2
>> I've restored the configure based compiler checks for so we can
>> build
>> roms and the vdso blobs again. It looks like we could never build roms
>> with container based images so I've left it for now. Unlike the vdso
>> build we can't trigger a container build through Makefile.prereqs.
>> TODO
>> ----
>> I've still got Ilya's s390 test image patches to look at but I'm
>> sending v2 because enough people are hitting issues.
>> I also need to look at the timestamp stuff that Pierrick has
>> suggested
>> to see if that improves the caching from the registry.
>> The following still need review:
>> tests/tcg: add console property to docker image custom target
>> scripts/make2mtest: add docker dependencies for check-tcg-% targets
>> tests/docker: fix brown bag typo for docker-ccache
>> tests/docker: swap --quiet for --verbose
>> tests/docker: add container registry to configure and use
>> tests/tcg: use --add-current-user when building containers
>> configure: re-purpose the tcg test compiler configs for vdso building
>> Revert "tests/tcg/meson.build: implement ./configure -cross-cc-* options"
>
> Still missing 20260915110855.491985-1-iii@linux.ibm.com
> ("[PATCH] tests/tcg: Fix building outside of the source tree")
>
> which is second behind --disable-containers in my current pain points.
Both those and the SKIP issue are addressed in v4.
>
>
> r~
--
Alex Bennée
Virtualisation Tech Lead @ Linaro
^ permalink raw reply [flat|nested] 24+ messages in thread
end of thread, other threads:[~2026-09-16 15:45 UTC | newest]
Thread overview: 24+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-09-16 8:53 [PATCH v3 00/17] testing: various docker clean-ups post meson tcg conversion Alex Bennée
2026-09-16 8:53 ` [PATCH v3 01/17] Revert "configure: remove cross_cc and gdb detection logic" Alex Bennée
2026-09-16 8:53 ` [PATCH v3 02/17] Revert "tests/tcg/meson.build: implement ./configure -cross-cc-* options" Alex Bennée
2026-09-16 8:53 ` [PATCH v3 03/17] Revert "tests/tcg/meson.build: implement ./configure containers options" Alex Bennée
2026-09-16 13:32 ` Jared Rossi
2026-09-16 8:53 ` [PATCH v3 04/17] configure: correctly honour --disable-containers Alex Bennée
2026-09-16 8:53 ` [PATCH v3 05/17] configure: re-purpose the tcg test compiler configs for vdso building Alex Bennée
2026-09-16 8:53 ` [PATCH v3 06/17] tests/tcg: improve check for working cross compilers Alex Bennée
2026-09-16 8:53 ` [PATCH v3 07/17] tests/tcg: prefix meson built docker tags with qemu/ Alex Bennée
2026-09-16 8:53 ` [PATCH v3 08/17] tests/tcg: use --add-current-user when building containers Alex Bennée
2026-09-16 8:53 ` [PATCH v3 09/17] tests/docker: add container registry to configure and use Alex Bennée
2026-09-16 8:53 ` [PATCH v3 10/17] tests/docker: remove used _read_qemu_dockerfile Alex Bennée
2026-09-16 8:53 ` [PATCH v3 11/17] tests/docker: strip remaining caching logic from docker.py Alex Bennée
2026-09-16 8:53 ` [PATCH v3 12/17] tests/docker: add specific command to parser Alex Bennée
2026-09-16 8:53 ` [PATCH v3 13/17] tests/docker: swap --quiet for --verbose Alex Bennée
2026-09-16 8:53 ` [PATCH v3 14/17] tests/docker: fix brown bag typo for docker-ccache Alex Bennée
2026-09-16 8:53 ` [PATCH v3 15/17] gitlab: update the @user id mapping file Alex Bennée
2026-09-16 8:53 ` [PATCH v3 16/17] scripts/make2mtest: add docker dependencies for check-tcg-% targets Alex Bennée
2026-09-16 9:56 ` Pierrick Bouvier
2026-09-16 10:03 ` Daniel P. Berrangé
2026-09-16 15:24 ` Alex Bennée
2026-09-16 8:53 ` [PATCH v3 17/17] tests/tcg: add console property to docker image custom target Alex Bennée
2026-09-16 10:47 ` [PATCH v3 00/17] testing: various docker clean-ups post meson tcg conversion Richard Henderson
2026-09-16 15:44 ` Alex Bennée
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.