[PATCH v7 15/19] tests: replace check-venv with vm-venv target

John Snow posted 19 patches 1 month, 3 weeks ago
Maintainers: "Alex Bennée" <alex.bennee@linaro.org>, "Philippe Mathieu-Daudé" <philmd@linaro.org>, Thomas Huth <thuth@redhat.com>, Ed Maste <emaste@freebsd.org>, Li-Wen Hsu <lwhsu@freebsd.org>, Yonggang Luo <luoyonggang@gmail.com>, Paolo Bonzini <pbonzini@redhat.com>, Pierrick Bouvier <pierrick.bouvier@linaro.org>, Alexandre Iooss <erdnaxe@crans.org>, Mahmoud Mandour <ma.mandourr@gmail.com>, "Marc-André Lureau" <marcandre.lureau@redhat.com>, "Daniel P. Berrangé" <berrange@redhat.com>, John Snow <jsnow@redhat.com>, Cleber Rosa <crosa@redhat.com>, Maksim Davydov <davydov-max@yandex-team.ru>, Markus Armbruster <armbru@redhat.com>, Mauro Carvalho Chehab <mchehab+huawei@kernel.org>, Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru>, Peter Xu <peterx@redhat.com>, Fabiano Rosas <farosas@suse.de>, Warner Losh <imp@bsdimp.com>, Kyle Evans <kevans@freebsd.org>
There is a newer version of this series
[PATCH v7 15/19] tests: replace check-venv with vm-venv target
Posted by John Snow 1 month, 3 weeks ago
With the qemu.qmp and qemu.machine dependencies now installed by default
at configure time and additional dependencies required by functional
testing installed on demand, we do not need the explicit "check-venv" target.

...However, to facilitate running VM tests without running configure, we
move some of the former logic into tests/vm/Makefile.include to create a
new venv (vm-venv) on-demand when running VM tests from the source tree.

Signed-off-by: John Snow <jsnow@redhat.com>
---
 tests/Makefile.include    | 22 ++--------------------
 tests/vm/Makefile.include | 18 ++++++++++++++----
 2 files changed, 16 insertions(+), 24 deletions(-)

diff --git a/tests/Makefile.include b/tests/Makefile.include
index 76d77545b71..59b9a4b9220 100644
--- a/tests/Makefile.include
+++ b/tests/Makefile.include
@@ -22,7 +22,6 @@ ifneq ($(filter $(all-check-targets), check-softfloat),)
 endif
 	@echo
 	@echo " $(MAKE) check-report.junit.xml        Generates an aggregated XML test report"
-	@echo " $(MAKE) check-venv                    Creates a Python venv for tests"
 	@echo " $(MAKE) check-clean                   Clean the tests and related data"
 	@echo
 	@echo "The following are useful for CI builds"
@@ -93,33 +92,16 @@ clean-tcg: $(CLEAN_TCG_TARGET_RULES)
 .PHONY: distclean-tcg
 distclean-tcg: $(DISTCLEAN_TCG_TARGET_RULES)
 
-# Python venv for running tests
-
-.PHONY: check-venv
-
 # Build up our target list from the filtered list of ninja targets
 TARGETS=$(patsubst libqemu-%.a, %, $(filter libqemu-%.a, $(ninja-targets)))
 
-TESTS_VENV_TOKEN=$(BUILD_DIR)/pyvenv/tests.group
-
-quiet-venv-pip = $(quiet-@)$(call quiet-command-run, \
-    $(PYTHON) -m pip -q --disable-pip-version-check $1, \
-    "VENVPIP","$1")
-
-$(TESTS_VENV_TOKEN): $(SRC_PATH)/pythondeps.toml
-	$(call quiet-venv-pip,install -e "$(SRC_PATH)/python/")
-	$(MKVENV_ENSUREGROUP) $< tooling functests
-	$(call quiet-command, touch $@)
-
-check-venv: $(TESTS_VENV_TOKEN)
-
 FUNCTIONAL_TARGETS=$(patsubst %-softmmu,check-functional-%, $(filter %-softmmu,$(TARGETS)))
 .PHONY: $(FUNCTIONAL_TARGETS)
-$(FUNCTIONAL_TARGETS): check-venv
+$(FUNCTIONAL_TARGETS):
 	@$(MAKE) SPEED=thorough $(subst -functional,-func,$@)
 
 .PHONY: check-functional
-check-functional: check-venv
+check-functional:
 	@$(NINJA) precache-functional
 	@$(PYTHON) $(SRC_PATH)/scripts/clean_functional_cache.py
 	@QEMU_TEST_NO_DOWNLOAD=1 $(MAKE) SPEED=thorough check-func check-func-quick
diff --git a/tests/vm/Makefile.include b/tests/vm/Makefile.include
index 14188bba1c6..217bc706c20 100644
--- a/tests/vm/Makefile.include
+++ b/tests/vm/Makefile.include
@@ -2,13 +2,23 @@
 
 # Hack to allow running in an unconfigured build tree
 ifeq ($(realpath $(SRC_PATH)),$(realpath .))
-VM_PYTHON = PYTHONPATH=$(SRC_PATH)/python /usr/bin/env python3
-VM_VENV =
+VM_PYTHON = $(SRC_PATH)/vm-venv/bin/python3
+VM_VENV = vm-venv
 else
 VM_PYTHON = $(PYTHON)
-VM_VENV = check-venv
+VM_VENV =
 endif
 
+VM_VENV_TOKEN=$(SRC_PATH)/vm-venv/tooling.group $(SRC_PATH)/vm-venv/functests.group
+
+$(VM_VENV_TOKEN): $(SRC_PATH)/pythondeps.toml
+		/usr/bin/env python3 $(SRC_PATH)/python/scripts/mkvenv.py create vm-venv
+		$(SRC_PATH)/vm-venv/bin/python3 $(SRC_PATH)/python/scripts/mkvenv.py ensuregroup --online $(SRC_PATH)/pythondeps.toml tooling functests
+
+.PHONY: vm-venv
+vm-venv: $(VM_VENV_TOKEN)
+# end hackery
+
 .PHONY: vm-build-all vm-clean-all
 
 EFI_AARCH64 = $(wildcard $(BUILD_DIR)/pc-bios/edk2-aarch64-code.fd)
@@ -102,7 +112,7 @@ $(IMAGES_DIR)/%.img:	$(SRC_PATH)/tests/vm/% \
 		$(if $(LOG_CONSOLE),--log-console) \
 		--source-path $(SRC_PATH) \
 		--image "$@" \
-		$(if $(filter-out check-venv, $?), --force) \
+		--force \
 		--build-image $@, \
 		"  VM-IMAGE $*")
 
-- 
2.53.0
Re: [PATCH v7 15/19] tests: replace check-venv with vm-venv target
Posted by Thomas Huth 1 month, 3 weeks ago
On 16/02/2026 22.29, John Snow wrote:
> With the qemu.qmp and qemu.machine dependencies now installed by default
> at configure time and additional dependencies required by functional
> testing installed on demand, we do not need the explicit "check-venv" target.
> 
> ...However, to facilitate running VM tests without running configure, we
> move some of the former logic into tests/vm/Makefile.include to create a
> new venv (vm-venv) on-demand when running VM tests from the source tree.
> 
> Signed-off-by: John Snow <jsnow@redhat.com>
> ---
>   tests/Makefile.include    | 22 ++--------------------
>   tests/vm/Makefile.include | 18 ++++++++++++++----
>   2 files changed, 16 insertions(+), 24 deletions(-)

Maybe consider adding "vm-venv" to the .gitignore file now?

Anyway,
Tested-by: Thomas Huth <thuth@redhat.com>
Re: [PATCH v7 15/19] tests: replace check-venv with vm-venv target
Posted by John Snow 1 month, 3 weeks ago
On Tue, Feb 17, 2026 at 12:52 PM Thomas Huth <thuth@redhat.com> wrote:
>
> On 16/02/2026 22.29, John Snow wrote:
> > With the qemu.qmp and qemu.machine dependencies now installed by default
> > at configure time and additional dependencies required by functional
> > testing installed on demand, we do not need the explicit "check-venv" target.
> >
> > ...However, to facilitate running VM tests without running configure, we
> > move some of the former logic into tests/vm/Makefile.include to create a
> > new venv (vm-venv) on-demand when running VM tests from the source tree.
> >
> > Signed-off-by: John Snow <jsnow@redhat.com>
> > ---
> >   tests/Makefile.include    | 22 ++--------------------
> >   tests/vm/Makefile.include | 18 ++++++++++++++----
> >   2 files changed, 16 insertions(+), 24 deletions(-)
>
> Maybe consider adding "vm-venv" to the .gitignore file now?

I wasn't sure. Leaving it un-ignored at least calls attention to it if
you want to delete it. Can you run "make clean" on a bare repo you
haven't run configure on? If so, I could have make clean delete that
venv and then also add it to the ignore files.

I could also just instantiate the venv in ~/.cache/qemu/vm-venv
alongside the other VM temporary files.... thoughts?

>
> Anyway,
> Tested-by: Thomas Huth <thuth@redhat.com>
>