On 7/15/2026 10:36 AM, Alex Bennée wrote:
> Pierrick Bouvier <[email protected]> writes:
> 
>> It's now built-in meson, which offers targets check-tcg and check-tcg-*.
>>
>> Tested-by: Alex Bennée <[email protected]>
>> Signed-off-by: Pierrick Bouvier <[email protected]>
>> ---
>>  tests/Makefile.include | 68 ++----------------------------------------
>>  1 file changed, 2 insertions(+), 66 deletions(-)
>>
>> diff --git a/tests/Makefile.include b/tests/Makefile.include
>> index 494d0109f26..9f82552ab54 100644
>> --- a/tests/Makefile.include
>> +++ b/tests/Makefile.include
>> @@ -19,9 +19,7 @@ check-help:
>>  ifneq ($(filter $(all-check-targets), check-softfloat),)
>>      @echo " $(MAKE) check-softfloat               Run FPU emulation tests"
>>      @echo " $(MAKE) check-tcg                     Run TCG tests"
>> -    @echo " $(MAKE) run-tcg-tests-TARGET          Run TCG tests for a given 
>> target"
>> -    @echo
>> -    @echo "The variable TCG_TEST_FILTER will select the subset of matching 
>> tests."
>> +    @echo " $(MAKE) check-tcg-TARGET              Run TCG tests for a given 
>> target"
>>  endif
>>      @echo
>>      @echo " $(MAKE) check-report.junit.xml        Generates an aggregated 
>> XML test report"
>> @@ -40,67 +38,6 @@ export SRC_PATH
>>  
>>  SPEED = quick
>>  
>> -
>> -# TCG_TESTS_WITH_COMPILERS represents the test targets we have cross 
>> compiler
>> -# support for, CONFIGURED_TCG_TARGETS it what meson has finally
>> -# configured having rejected stuff we can't build.
>> -CONFIGURED_TCG_TARGETS=$(patsubst %-config-target.h, %, $(wildcard 
>> *-config-target.h))
>> -
>> -# This is the intersection of what tests we can build and is configured
>> -TCG_TESTS_TARGETS=$(filter $(CONFIGURED_TCG_TARGETS), 
>> $(TCG_TESTS_WITH_COMPILERS))
>> -
>> -# Per guest TCG tests
>> -BUILD_TCG_TARGET_RULES=$(patsubst %,build-tcg-tests-%, $(TCG_TESTS_TARGETS))
>> -CLEAN_TCG_TARGET_RULES=$(patsubst %,clean-tcg-tests-%, $(TCG_TESTS_TARGETS))
>> -DISTCLEAN_TCG_TARGET_RULES=$(patsubst %,distclean-tcg-tests-%, 
>> $(TCG_TESTS_TARGETS))
>> -RUN_TCG_TARGET_RULES=$(patsubst %,run-tcg-tests-%, $(TCG_TESTS_TARGETS))
>> -
>> -$(foreach TARGET,$(TCG_TESTS_TARGETS), \
>> -        $(eval $(BUILD_DIR)/tests/tcg/config-$(TARGET).mak: 
>> config-host.mak))
>> -
>> -# $1 = the stem (e.g., arm-softmmu or x86_64-linux-user)
>> -get-qemu-bin = $(if $(findstring softmmu,$1),qemu-system-$(subst 
>> -softmmu,,$1),qemu-$(subst -linux-user,,$1))
>> -
>> -$(foreach TARGET,$(TCG_TESTS_TARGETS), \
>> -        $(eval .ninja-goals.run-tcg-tests-$(TARGET) += $(call 
>> get-qemu-bin,$(TARGET))))
>> -
>> -.PHONY: $(TCG_TESTS_TARGETS:%=build-tcg-tests-%)
>> -$(TCG_TESTS_TARGETS:%=build-tcg-tests-%): build-tcg-tests-%: 
>> $(BUILD_DIR)/tests/tcg/config-%.mak
>> -    $(call quiet-command, \
>> -            $(MAKE) -C tests/tcg/$* $(SUBDIR_MAKEFLAGS), \
>> -        "BUILD","$* guest-tests")
>> -
>> -.PHONY: $(TCG_TESTS_TARGETS:%=run-tcg-tests-%)
>> -$(TCG_TESTS_TARGETS:%=run-tcg-tests-%): run-tcg-tests-%: build-tcg-tests-%
>> -    $(call quiet-command, \
>> -           $(MAKE) -C tests/tcg/$* $(SUBDIR_MAKEFLAGS) SPEED=$(SPEED) 
>> TCG_TEST_FILTER=$(TCG_TEST_FILTER) run, \
>> -        "RUN", "$* guest-tests")
>> -
>> -.PHONY: $(TCG_TESTS_TARGETS:%=clean-tcg-tests-%)
>> -$(TCG_TESTS_TARGETS:%=clean-tcg-tests-%): clean-tcg-tests-%:
>> -    $(call quiet-command, \
>> -           $(MAKE) -C tests/tcg/$* $(SUBDIR_MAKEFLAGS) clean, \
>> -        "CLEAN", "$* guest-tests")
>> -
>> -.PHONY: $(TCG_TESTS_TARGETS:%=distclean-tcg-tests-%)
>> -$(TCG_TESTS_TARGETS:%=distclean-tcg-tests-%): distclean-tcg-tests-%:
>> -    $(call quiet-command, \
>> -           $(MAKE) -C tests/tcg/$* $(SUBDIR_MAKEFLAGS) distclean, \
>> -        "CLEAN", "$* guest-tests")
>> -
>> -.PHONY: build-tcg
>> -build-tcg: $(BUILD_TCG_TARGET_RULES)
>> -
>> -.PHONY: check-tcg
>> -.ninja-goals.check-tcg = all test-plugins
>> -check-tcg: $(RUN_TCG_TARGET_RULES)
>> -
>> -.PHONY: clean-tcg
>> -clean-tcg: $(CLEAN_TCG_TARGET_RULES)
> 
> We still need a clean-tcg or similar rule to force a rebuild of the
> tests without killing the whole build dir.
>

It was needed before, since we only had partial dependencies.
But now considering that all dependencies are correctly tracked, what's
the use case?
- If a test is mtime modified, it rebuilds the test.
- If a dockerfile is mtime modified, associated tests are rebuilt.
- If docker.py is modified, it will rebuild tests transitively.
- If cflags are modified, test will be rebuilt also.
- All input of a test (.h, .c, ...) are all tracked.
- If user installs a cross compiler or remove podman/docker, next meson
configuration will identify this and rebuild all associated tests.

In case you find a missing dep, we just need to add it in meson. clean
is not needed anymore.

>> -
>> -.PHONY: distclean-tcg
>> -distclean-tcg: $(DISTCLEAN_TCG_TARGET_RULES)
>> -
>>  # Build up our target list from the filtered list of ninja targets
>>  TARGETS=$(patsubst libqemu-%.a, %, $(filter libqemu-%.a, $(ninja-targets)))
>>  
>> @@ -128,7 +65,6 @@ check-build: run-ninja
>>  check-clean:
>>      rm -rf $(BUILD_DIR)/tests/functional
>>  
>> -clean: check-clean clean-tcg
>> -distclean: distclean-tcg
>> +clean: check-clean
>>  
>>  endif
> 


Reply via email to