On 7/6/2026 3:32 PM, Pierrick Bouvier wrote: > This series replaces TCG tests makefiles with meson, with the > goal of having something more readable and maintainable in the long term. > Also it closes the gap that tcg tests had with the rest of tests, by > integrating > them with meson directly. > > It covers all existing tests for all architectures, including > user/system/multiarch-user/multiarch-system. It implements all requirements > listed on original thread [1]. > > [1] https://lore.kernel.org/qemu-devel/[email protected]/ > > We also have for free: > - correct and complete dependencies for any test, including: > scripts, c.inc, headers, reference files and binaries/plugins. > - catch test declaration issues at configure time vs test time. > - proper data types for variables instead of string expansion with make. > > Series first introduce the meson machinery needed in tests/tcg/meson.build, > step > by step. Then it adds support for all existing archs. Finally, we remove > Makefiles and configure bits. > > Usage: > > ``` > make check-tcg > make check-tcg-aarch64-linux-user > make check-tcg-aarch64-softmmu > > make tcg-tests > > ninja clean > ./pyvenv/bin/meson test aarch64-softmmu-asid2 --verbose > ``` > > A few items were left for further work (out of scope for this series): > - xtensaeb: didn't find how to cross compile for this architecture with what > we > have now in container debian-xtensa-cross. Tips are welcome. > - tricore: implemented but reverted as all tests seem to hang. To be > investigated. > - riscv64/interruptedmemory.S is hanging. To be investigated. > - i386/test-i386-fprem.c is deactivated for now. It's broken (output does not > match bare metal result) and is the slowest test we have. To be refactored > and > fixed. > > v3 > -- > > - add all architectures > - reduce number of plugins tests (only add one test for each plugin from > multiarch pool) > - add depends for executable - allow to depend on a custom target for > generated > headers (x86_64 mmx, avx) > - add new tests added since last version for aarch64 (mte + gpc) > - refactor series to keep all arch files at end > - add docker host architecture selection > > v2 > -- > > - s/mispell/misspell > - moved comment about why we remove 'lib' prefix for plugins > - if user declare a wrong entry in a dictionary, list possible keys > - build tests by default (with 'all' target), as long as cross compiler is > natively installed, to avoid triggering a container build. > - reword some comments based on reviewers feedback > - always declare all tests and avoid "per config" errors (no 'if' in arch > files) > - move compiler feature and gdb version checks directly in > tests/tcg/meson.build > - add support for cross containers > - add top target 'tcg-tests' to rebuild all tests > > Pierrick Bouvier (91): > tests/tcg/multiarch/system/memory.c: remove unused variable > tests/tcg/multiarch/plugin/check-plugin-output.sh: take test output as > input > tests/tcg/multiarch/plugin: rename check-plugin-output to > regex-compare > tests/tcg: introduce meson.build > tests/tcg/meson.build: introduce exe_name > tests/tcg/meson.build: introduce test_name > tests/tcg/meson.build: introduce cflags > tests/tcg/meson.build: introduce qemu_args > tests/tcg/meson.build: introduce env_var > tests/tcg/plugins: build list of test_plugins > tests/tcg/meson.build: introduce plugin_test > tests/tcg/meson.build: test gdb support and introduce gdb_arch > tests/tcg/meson.build: introduce gdb_test > tests/tcg/meson.build: add default flag for testing compiler support > tests/tcg/meson.build: introduce wrapper > tests/tcg/meson.build: introduce expected_output > tests/tcg/meson.build: add wrapper run_and_check_forbidden_output > tests/tcg/meson.build: add wrapper run_with_input > tests/tcg/meson.build: add wrapper record_replay > tests/tcg/meson.build: add wrapper check_plugin_output > tests/tcg/meson.build: add logic to skip tests > tests/tcg/meson.build: introduce cc_feat and cc_feat_cflags > tests/tcg/meson.build: introduce gdb_feat and gdb_feat_version > tests/tcg/meson.build: move gdb_arch support check > tests/tcg/meson.build: let test infrastructure detect compiler > tests/docker/docker.py: return error code if probe fails > tests/docker/docker.py: remove "Image is up to date" info > tests/tcg/meson.build: introduce cc_dockerfile and cc_docker_arch > tests/tcg/meson.build: introduce depends > tests/tcg/meson.build: add top-level 'tcg-tests' target > tests/tcg/multiarch: declare user tests > tests/tcg/multiarch: declare system tests > tests/tcg/meson.build: add generic plugin tests > tests/tcg/aarch64: user tests > tests/tcg/aarch64/system/gpc-test.c: remove unused variables > tests/tcg/aarch64: system tests > tests/tcg/aarch64_be: user tests > tests/tcg/alpha: add float reference files > tests/tcg/alpha: user tests > tests/tcg/alpha: system tests > tests/tcg/arm: user tests > tests/tcg/arm: system tests > tests/tcg/hexagon/overflow.c: add missing include > tests/tcg/hexagon: user tests > tests/tcg/multiarch/sha1.c: fix big endian implementation > tests/tcg/hppa: add float reference files > tests/tcg/hppa: user tests > tests/tcg/i386: add missing float reference files > tests/tcg/i386: user tests > tests/tcg/i386: system tests > tests/tcg/loongarch64: user tests > tests/tcg/loongarch64: system tests > tests/tcg/m68k: add float reference files > tests/tcg/m68k: user tests > scripts/probe-gdb-support.py: add mapping for mips architecture > tests/tcg/mips: add float reference files > test/tcg/mips: user tests > tests/tcg/mips64: add float reference files > tests/tcg/mips64: user tests > tests/tcg/mips64el: add float reference files > tests/tcg/mips64el: user tests > tests/docker/dockerfiles/debian-all-test-cross.docker: add or1k > toolchain > tests/tcg/or1k/test_addic.c: remove unused variables > tests/tcg/or1k/test_muli.c: remove set but unused variable > tests/tcg/or1k: add float reference files > plugins/api.c: identify or1k pc register and mark it as read only > tests/tcg/or1k: user tests > tests/tcg/ppc64: add float reference files > tests/tcg/ppc64: remove dependency on qemu/compiler.h > tests/tcg/ppc64: user tests > tests/tcg/ppc64le: add missing float reference file > tests/tcg/ppc64le: user tests > tests/tcg/riscv64: add float reference files > tests/tcg/riscv64: user tests > tests/tcg/riscv64: system tests > tests/tcg/s390x/head64.S: declare _exit symbol after main > tests/tcg/s390x: add float reference files > tests/tcg/s390x: user tests > tests/tcg/s390x: system tests > tests/tcg/sh4: add float reference files > tests/tcg/sh4: user tests > tests/tcg/tricore: system tests > Revert "tests/tcg/tricore: system tests" > tests/tcg/x86_64: add missing float reference file > tests/tcg/x86_64: user tests > tests/tcg/x86_64: system tests > tests/tcg/xtensa/crt.S: align .text section > tests/tcg/xtensa: system tests > tests: remove tcg tests machinery > tests/tcg: remove Makefiles > configure: remove --cross-cc* options > > configure | 473 --------- > docs/devel/testing/main.rst | 22 +- > plugins/api.c | 2 + > scripts/probe-gdb-support.py | 1 + > tests/Makefile.include | 68 +- > tests/docker/docker.py | 4 +- > .../dockerfiles/debian-all-test-cross.docker | 16 +- > tests/lcitool/refresh | 107 +- > tests/meson.build | 2 +- > tests/tcg/Makefile.target | 281 ----- > tests/tcg/aarch64/Makefile.softmmu-target | 147 --- > tests/tcg/aarch64/Makefile.target | 198 ---- > tests/tcg/aarch64/meson.build | 195 ++++ > tests/tcg/aarch64/system/gpc-test.c | 5 - > tests/tcg/aarch64/system/meson.build | 108 ++ > tests/tcg/aarch64_be/Makefile.target | 17 - > tests/tcg/aarch64_be/meson.build | 22 + > tests/tcg/alpha/Makefile.softmmu-target | 34 - > tests/tcg/alpha/Makefile.target | 18 - > tests/tcg/alpha/float_convd.ref | 988 ++++++++++++++++++ > tests/tcg/alpha/float_convs.ref | 748 +++++++++++++ > tests/tcg/alpha/float_madds.ref | 768 ++++++++++++++ > tests/tcg/alpha/meson.build | 55 + > tests/tcg/alpha/system/meson.build | 46 + > tests/tcg/arm/Makefile.softmmu-target | 80 -- > tests/tcg/arm/Makefile.target | 87 -- > tests/tcg/arm/meson.build | 80 ++ > tests/tcg/arm/system/meson.build | 66 ++ > tests/tcg/hexagon/Makefile.target | 146 --- > tests/tcg/hexagon/meson.build | 111 ++ > tests/tcg/hexagon/overflow.c | 1 + > tests/tcg/hppa/Makefile.target | 14 - > tests/tcg/hppa/float_convd.ref | 988 ++++++++++++++++++ > tests/tcg/hppa/float_convs.ref | 748 +++++++++++++ > tests/tcg/hppa/float_madds.ref | 768 ++++++++++++++ > tests/tcg/hppa/meson.build | 22 + > tests/tcg/i386/Makefile.softmmu-target | 37 - > tests/tcg/i386/Makefile.target | 102 -- > tests/tcg/i386/float_convd.conf | 988 ------------------ > tests/tcg/i386/float_convd.ref | 988 ++++++++++++++++++ > tests/tcg/i386/float_madds.ref | 768 ++++++++++++++ > tests/tcg/i386/meson.build | 58 + > tests/tcg/i386/system/meson.build | 48 + > tests/tcg/loongarch64/Makefile.softmmu-target | 33 - > tests/tcg/loongarch64/Makefile.target | 20 - > tests/tcg/loongarch64/meson.build | 32 + > tests/tcg/loongarch64/system/meson.build | 47 + > tests/tcg/m68k/Makefile.target | 7 - > tests/tcg/m68k/float_convd.ref | 988 ++++++++++++++++++ > tests/tcg/m68k/float_convs.ref | 748 +++++++++++++ > tests/tcg/m68k/float_madds.ref | 768 ++++++++++++++ > tests/tcg/m68k/meson.build | 23 + > tests/tcg/meson.build | 447 ++++++++ > tests/tcg/minilib/Makefile.target | 21 - > tests/tcg/mips/Makefile.target | 19 - > tests/tcg/mips/float_convd.ref | 988 ++++++++++++++++++ > tests/tcg/mips/float_convs.ref | 748 +++++++++++++ > tests/tcg/mips/float_madds.ref | 768 ++++++++++++++ > tests/tcg/mips/meson.build | 25 + > tests/tcg/mips/user/ase/dsp/Makefile | 184 ---- > tests/tcg/mips/user/isa/mips64r6/crc/Makefile | 40 - > tests/tcg/mips/user/isa/r5900/Makefile | 32 - > tests/tcg/mips64/Makefile.target | 20 - > tests/tcg/mips64/float_convd.ref | 988 ++++++++++++++++++ > tests/tcg/mips64/float_convs.ref | 748 +++++++++++++ > tests/tcg/mips64/float_madds.ref | 768 ++++++++++++++ > tests/tcg/mips64/meson.build | 27 + > tests/tcg/mips64el/Makefile.target | 8 - > tests/tcg/mips64el/float_convd.ref | 988 ++++++++++++++++++ > tests/tcg/mips64el/float_convs.ref | 748 +++++++++++++ > tests/tcg/mips64el/float_madds.ref | 768 ++++++++++++++ > tests/tcg/mips64el/meson.build | 14 + > tests/tcg/multiarch/Makefile.target | 233 ----- > tests/tcg/multiarch/meson.build | 149 +++ > .../multiarch/plugin/check-plugin-output.sh | 36 - > tests/tcg/multiarch/plugin/regex-compare.sh | 28 + > tests/tcg/multiarch/sha1.c | 4 +- > tests/tcg/multiarch/sha1.ref | 1 + > .../multiarch/system/Makefile.softmmu-target | 81 -- > tests/tcg/multiarch/system/memory.c | 3 +- > tests/tcg/multiarch/system/meson.build | 53 + > tests/tcg/or1k/Makefile | 71 -- > tests/tcg/or1k/float_convd.ref | 247 +++++ > tests/tcg/or1k/float_convs.ref | 187 ++++ > tests/tcg/or1k/float_madds.ref | 192 ++++ > tests/tcg/or1k/meson.build | 72 ++ > tests/tcg/or1k/test_addic.c | 2 +- > tests/tcg/or1k/test_muli.c | 5 +- > tests/tcg/plugins/meson.build | 11 +- > tests/tcg/ppc64/Makefile.target | 63 -- > tests/tcg/ppc64/float_convd.ref | 988 ++++++++++++++++++ > tests/tcg/ppc64/float_convs.ref | 748 +++++++++++++ > tests/tcg/ppc64/float_madds.ref | 768 ++++++++++++++ > tests/tcg/ppc64/meson.build | 56 + > tests/tcg/ppc64/vector.c | 11 +- > tests/tcg/ppc64/vsx_f2i_nan.c | 7 +- > tests/tcg/ppc64le/Makefile.target | 7 - > tests/tcg/ppc64le/float_convd.ref | 988 ++++++++++++++++++ > tests/tcg/ppc64le/meson.build | 14 + > tests/tcg/riscv64/Makefile.softmmu-target | 45 - > tests/tcg/riscv64/Makefile.target | 20 - > tests/tcg/riscv64/float_convd.ref | 988 ++++++++++++++++++ > tests/tcg/riscv64/float_convs.ref | 748 +++++++++++++ > tests/tcg/riscv64/float_madds.ref | 768 ++++++++++++++ > tests/tcg/riscv64/meson.build | 38 + > tests/tcg/riscv64/system/meson.build | 38 + > tests/tcg/s390x/Makefile.softmmu-target | 57 - > tests/tcg/s390x/Makefile.target | 127 --- > tests/tcg/s390x/float_convd.ref | 988 ++++++++++++++++++ > tests/tcg/s390x/float_convs.ref | 748 +++++++++++++ > tests/tcg/s390x/float_madds.ref | 768 ++++++++++++++ > tests/tcg/s390x/head64.S | 2 + > tests/tcg/s390x/meson.build | 140 +++ > tests/tcg/s390x/system/meson.build | 92 ++ > tests/tcg/scripts/check_plugin_output.sh | 25 + > tests/tcg/scripts/record_replay.sh | 16 + > .../scripts/run_and_check_forbidden_output.sh | 19 + > tests/tcg/scripts/run_and_diff.sh | 15 + > tests/tcg/scripts/run_with_input.sh | 12 + > tests/tcg/sh4/Makefile.target | 18 - > tests/tcg/sh4/float_convd.ref | 494 +++++++++ > tests/tcg/sh4/float_convs.ref | 374 +++++++ > tests/tcg/sh4/float_madds.ref | 384 +++++++ > tests/tcg/sh4/meson.build | 25 + > tests/tcg/tricore/Makefile.softmmu-target | 53 - > tests/tcg/x86_64/Makefile.softmmu-target | 44 - > tests/tcg/x86_64/Makefile.target | 40 - > tests/tcg/x86_64/float_madds.ref | 768 ++++++++++++++ > tests/tcg/x86_64/meson.build | 83 ++ > tests/tcg/x86_64/system/meson.build | 62 ++ > tests/tcg/xtensa/Makefile.softmmu-target | 46 - > tests/tcg/xtensa/crt.S | 1 + > tests/tcg/xtensa/meson.build | 89 ++ > tests/tcg/xtensaeb/Makefile.softmmu-target | 5 - > 134 files changed, 30491 insertions(+), 4114 deletions(-) > delete mode 100644 tests/tcg/Makefile.target > delete mode 100644 tests/tcg/aarch64/Makefile.softmmu-target > delete mode 100644 tests/tcg/aarch64/Makefile.target > create mode 100644 tests/tcg/aarch64/meson.build > create mode 100644 tests/tcg/aarch64/system/meson.build > delete mode 100644 tests/tcg/aarch64_be/Makefile.target > create mode 100644 tests/tcg/aarch64_be/meson.build > delete mode 100644 tests/tcg/alpha/Makefile.softmmu-target > delete mode 100644 tests/tcg/alpha/Makefile.target > create mode 100644 tests/tcg/alpha/float_convd.ref > create mode 100644 tests/tcg/alpha/float_convs.ref > create mode 100644 tests/tcg/alpha/float_madds.ref > create mode 100644 tests/tcg/alpha/meson.build > create mode 100644 tests/tcg/alpha/system/meson.build > delete mode 100644 tests/tcg/arm/Makefile.softmmu-target > delete mode 100644 tests/tcg/arm/Makefile.target > create mode 100644 tests/tcg/arm/meson.build > create mode 100644 tests/tcg/arm/system/meson.build > delete mode 100644 tests/tcg/hexagon/Makefile.target > create mode 100644 tests/tcg/hexagon/meson.build > delete mode 100644 tests/tcg/hppa/Makefile.target > create mode 100644 tests/tcg/hppa/float_convd.ref > create mode 100644 tests/tcg/hppa/float_convs.ref > create mode 100644 tests/tcg/hppa/float_madds.ref > create mode 100644 tests/tcg/hppa/meson.build > delete mode 100644 tests/tcg/i386/Makefile.softmmu-target > delete mode 100644 tests/tcg/i386/Makefile.target > delete mode 100644 tests/tcg/i386/float_convd.conf > create mode 100644 tests/tcg/i386/float_convd.ref > create mode 100644 tests/tcg/i386/float_madds.ref > create mode 100644 tests/tcg/i386/meson.build > create mode 100644 tests/tcg/i386/system/meson.build > delete mode 100644 tests/tcg/loongarch64/Makefile.softmmu-target > delete mode 100644 tests/tcg/loongarch64/Makefile.target > create mode 100644 tests/tcg/loongarch64/meson.build > create mode 100644 tests/tcg/loongarch64/system/meson.build > delete mode 100644 tests/tcg/m68k/Makefile.target > create mode 100644 tests/tcg/m68k/float_convd.ref > create mode 100644 tests/tcg/m68k/float_convs.ref > create mode 100644 tests/tcg/m68k/float_madds.ref > create mode 100644 tests/tcg/m68k/meson.build > create mode 100644 tests/tcg/meson.build > delete mode 100644 tests/tcg/minilib/Makefile.target > delete mode 100644 tests/tcg/mips/Makefile.target > create mode 100644 tests/tcg/mips/float_convd.ref > create mode 100644 tests/tcg/mips/float_convs.ref > create mode 100644 tests/tcg/mips/float_madds.ref > create mode 100644 tests/tcg/mips/meson.build > delete mode 100644 tests/tcg/mips/user/ase/dsp/Makefile > delete mode 100644 tests/tcg/mips/user/isa/mips64r6/crc/Makefile > delete mode 100644 tests/tcg/mips/user/isa/r5900/Makefile > delete mode 100644 tests/tcg/mips64/Makefile.target > create mode 100644 tests/tcg/mips64/float_convd.ref > create mode 100644 tests/tcg/mips64/float_convs.ref > create mode 100644 tests/tcg/mips64/float_madds.ref > create mode 100644 tests/tcg/mips64/meson.build > delete mode 100644 tests/tcg/mips64el/Makefile.target > create mode 100644 tests/tcg/mips64el/float_convd.ref > create mode 100644 tests/tcg/mips64el/float_convs.ref > create mode 100644 tests/tcg/mips64el/float_madds.ref > create mode 100644 tests/tcg/mips64el/meson.build > delete mode 100644 tests/tcg/multiarch/Makefile.target > create mode 100644 tests/tcg/multiarch/meson.build > delete mode 100755 tests/tcg/multiarch/plugin/check-plugin-output.sh > create mode 100755 tests/tcg/multiarch/plugin/regex-compare.sh > create mode 100644 tests/tcg/multiarch/sha1.ref > delete mode 100644 tests/tcg/multiarch/system/Makefile.softmmu-target > create mode 100644 tests/tcg/multiarch/system/meson.build > delete mode 100644 tests/tcg/or1k/Makefile > create mode 100644 tests/tcg/or1k/float_convd.ref > create mode 100644 tests/tcg/or1k/float_convs.ref > create mode 100644 tests/tcg/or1k/float_madds.ref > create mode 100644 tests/tcg/or1k/meson.build > delete mode 100644 tests/tcg/ppc64/Makefile.target > create mode 100644 tests/tcg/ppc64/float_convd.ref > create mode 100644 tests/tcg/ppc64/float_convs.ref > create mode 100644 tests/tcg/ppc64/float_madds.ref > create mode 100644 tests/tcg/ppc64/meson.build > delete mode 100644 tests/tcg/ppc64le/Makefile.target > create mode 100644 tests/tcg/ppc64le/float_convd.ref > create mode 100644 tests/tcg/ppc64le/meson.build > delete mode 100644 tests/tcg/riscv64/Makefile.softmmu-target > delete mode 100644 tests/tcg/riscv64/Makefile.target > create mode 100644 tests/tcg/riscv64/float_convd.ref > create mode 100644 tests/tcg/riscv64/float_convs.ref > create mode 100644 tests/tcg/riscv64/float_madds.ref > create mode 100644 tests/tcg/riscv64/meson.build > create mode 100644 tests/tcg/riscv64/system/meson.build > delete mode 100644 tests/tcg/s390x/Makefile.softmmu-target > delete mode 100644 tests/tcg/s390x/Makefile.target > create mode 100644 tests/tcg/s390x/float_convd.ref > create mode 100644 tests/tcg/s390x/float_convs.ref > create mode 100644 tests/tcg/s390x/float_madds.ref > create mode 100644 tests/tcg/s390x/meson.build > create mode 100644 tests/tcg/s390x/system/meson.build > create mode 100755 tests/tcg/scripts/check_plugin_output.sh > create mode 100755 tests/tcg/scripts/record_replay.sh > create mode 100755 tests/tcg/scripts/run_and_check_forbidden_output.sh > create mode 100755 tests/tcg/scripts/run_and_diff.sh > create mode 100755 tests/tcg/scripts/run_with_input.sh > delete mode 100644 tests/tcg/sh4/Makefile.target > create mode 100644 tests/tcg/sh4/float_convd.ref > create mode 100644 tests/tcg/sh4/float_convs.ref > create mode 100644 tests/tcg/sh4/float_madds.ref > create mode 100644 tests/tcg/sh4/meson.build > delete mode 100644 tests/tcg/tricore/Makefile.softmmu-target > delete mode 100644 tests/tcg/x86_64/Makefile.softmmu-target > delete mode 100644 tests/tcg/x86_64/Makefile.target > create mode 100644 tests/tcg/x86_64/float_madds.ref > create mode 100644 tests/tcg/x86_64/meson.build > create mode 100644 tests/tcg/x86_64/system/meson.build > delete mode 100644 tests/tcg/xtensa/Makefile.softmmu-target > create mode 100644 tests/tcg/xtensa/meson.build > delete mode 100644 tests/tcg/xtensaeb/Makefile.softmmu-target >
Sent v4, adding missing targets (xtensaeb + tricore) and all changes requested on v3. https://lore.kernel.org/qemu-devel/[email protected]/T/# Regards, Pierrick
