mirror of
https://github.com/qemu/qemu.git
synced 2024-12-11 20:53:51 +08:00
0e7647aa8a
This patch adds the "qemu" namespace package to the $build/tests/venv directory. It does so in "editable" mode, which means that changes to the source python directory will actively be reflected by the venv. This patch also then removes any sys.path hacking from the avocado test scripts directly. By doing this, the environment of where to find these packages is managed entirely by the virtual environment and not by the scripts themselves. Signed-off-by: John Snow <jsnow@redhat.com> Reviewed-by: Paolo Bonzini <pbonzini@redhat.com> Message-Id: <20220526000921.1581503-7-jsnow@redhat.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
168 lines
6.2 KiB
Makefile
168 lines
6.2 KiB
Makefile
# -*- Mode: makefile -*-
|
|
|
|
.PHONY: check-help
|
|
check-help:
|
|
@echo "Regression testing targets:"
|
|
@echo " $(MAKE) check Run block, qapi-schema, unit, softfloat, qtest and decodetree tests"
|
|
@echo " $(MAKE) bench Run speed tests"
|
|
@echo
|
|
@echo "Individual test suites:"
|
|
@echo " $(MAKE) check-qtest-TARGET Run qtest tests for given target"
|
|
@echo " $(MAKE) check-qtest Run qtest tests"
|
|
@echo " $(MAKE) check-unit Run qobject tests"
|
|
@echo " $(MAKE) check-qapi-schema Run QAPI schema tests"
|
|
@echo " $(MAKE) check-block Run block tests"
|
|
ifneq ($(filter $(all-check-targets), check-softfloat),)
|
|
@echo " $(MAKE) check-tcg Run TCG tests"
|
|
@echo " $(MAKE) check-softfloat Run FPU emulation tests"
|
|
endif
|
|
@echo " $(MAKE) check-avocado Run avocado (integration) tests for currently configured targets"
|
|
@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"
|
|
@echo " $(MAKE) check-build Build most test binaries"
|
|
@echo " $(MAKE) get-vm-images Downloads all images used by avocado tests, according to configured targets (~350 MB each, 1.5 GB max)"
|
|
@echo
|
|
@echo
|
|
@echo "The variable SPEED can be set to control the gtester speed setting."
|
|
@echo "Default options are -k and (for $(MAKE) V=1) --verbose; they can be"
|
|
@echo "changed with variable GTESTER_OPTIONS."
|
|
|
|
ifneq ($(wildcard config-host.mak),)
|
|
export SRC_PATH
|
|
|
|
SPEED = quick
|
|
|
|
-include tests/tcg/Makefile.prereqs
|
|
tests/tcg/Makefile.prereqs: config-host.mak
|
|
|
|
# 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))
|
|
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))
|
|
|
|
.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/$* -f ../Makefile.target $(SUBDIR_MAKEFLAGS) \
|
|
DOCKER_SCRIPT="$(DOCKER_SCRIPT)" \
|
|
TARGET="$*" SRC_PATH="$(SRC_PATH)", \
|
|
"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/$* -f ../Makefile.target $(SUBDIR_MAKEFLAGS) \
|
|
TARGET="$*" SRC_PATH="$(SRC_PATH)" SPEED=$(SPEED) 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/$* -f ../Makefile.target $(SUBDIR_MAKEFLAGS) \
|
|
TARGET="$*" SRC_PATH="$(SRC_PATH)" clean, \
|
|
"CLEAN", "$* guest-tests")
|
|
|
|
.PHONY: build-tcg
|
|
build-tcg: $(BUILD_TCG_TARGET_RULES)
|
|
|
|
.PHONY: check-tcg
|
|
.ninja-goals.check-tcg = all $(if $(CONFIG_PLUGIN),test-plugins)
|
|
check-tcg: $(RUN_TCG_TARGET_RULES)
|
|
|
|
.PHONY: clean-tcg
|
|
clean-tcg: $(CLEAN_TCG_TARGET_RULES)
|
|
|
|
# Python venv for running tests
|
|
|
|
.PHONY: check-venv check-avocado check-acceptance check-acceptance-deprecated-warning
|
|
|
|
# Build up our target list from the filtered list of ninja targets
|
|
TARGETS=$(patsubst libqemu-%.fa, %, $(filter libqemu-%.fa, $(ninja-targets)))
|
|
|
|
TESTS_VENV_DIR=$(BUILD_DIR)/tests/venv
|
|
TESTS_VENV_REQ=$(SRC_PATH)/tests/requirements.txt
|
|
TESTS_RESULTS_DIR=$(BUILD_DIR)/tests/results
|
|
TESTS_PYTHON=$(TESTS_VENV_DIR)/bin/python3
|
|
ifndef AVOCADO_TESTS
|
|
AVOCADO_TESTS=tests/avocado
|
|
endif
|
|
# Controls the output generated by Avocado when running tests.
|
|
# Any number of command separated loggers are accepted. For more
|
|
# information please refer to "avocado --help".
|
|
AVOCADO_SHOW=app
|
|
ifndef AVOCADO_TAGS
|
|
AVOCADO_CMDLINE_TAGS=$(patsubst %-softmmu,-t arch:%, \
|
|
$(filter %-softmmu,$(TARGETS)))
|
|
else
|
|
AVOCADO_CMDLINE_TAGS=$(addprefix -t , $(AVOCADO_TAGS))
|
|
endif
|
|
|
|
quiet-venv-pip = $(quiet-@)$(call quiet-command-run, \
|
|
$(TESTS_PYTHON) -m pip -q --disable-pip-version-check $1, \
|
|
"VENVPIP","$1")
|
|
|
|
$(TESTS_VENV_DIR): $(TESTS_VENV_REQ)
|
|
$(call quiet-command, $(PYTHON) -m venv $@, VENV, $@)
|
|
$(call quiet-venv-pip,install -e "$(SRC_PATH)/python/")
|
|
$(call quiet-venv-pip,install -r $(TESTS_VENV_REQ))
|
|
$(call quiet-command, touch $@)
|
|
|
|
$(TESTS_RESULTS_DIR):
|
|
$(call quiet-command, mkdir -p $@, \
|
|
MKDIR, $@)
|
|
|
|
check-venv: $(TESTS_VENV_DIR)
|
|
|
|
FEDORA_31_ARCHES_TARGETS=$(patsubst %-softmmu,%, $(filter %-softmmu,$(TARGETS)))
|
|
FEDORA_31_ARCHES_CANDIDATES=$(patsubst ppc64,ppc64le,$(FEDORA_31_ARCHES_TARGETS))
|
|
FEDORA_31_ARCHES := x86_64 aarch64 ppc64le s390x
|
|
FEDORA_31_DOWNLOAD=$(filter $(FEDORA_31_ARCHES),$(FEDORA_31_ARCHES_CANDIDATES))
|
|
|
|
# download one specific Fedora 31 image
|
|
get-vm-image-fedora-31-%: check-venv
|
|
$(call quiet-command, \
|
|
$(TESTS_PYTHON) -m avocado vmimage get \
|
|
--distro=fedora --distro-version=31 --arch=$*, \
|
|
"AVOCADO", "Downloading avocado tests VM image for $*")
|
|
|
|
# download all vm images, according to defined targets
|
|
get-vm-images: check-venv $(patsubst %,get-vm-image-fedora-31-%, $(FEDORA_31_DOWNLOAD))
|
|
|
|
check-avocado: check-venv $(TESTS_RESULTS_DIR) get-vm-images
|
|
$(call quiet-command, \
|
|
$(TESTS_PYTHON) -m avocado \
|
|
--show=$(AVOCADO_SHOW) run --job-results-dir=$(TESTS_RESULTS_DIR) \
|
|
$(if $(AVOCADO_TAGS),, --filter-by-tags-include-empty \
|
|
--filter-by-tags-include-empty-key) \
|
|
$(AVOCADO_CMDLINE_TAGS) \
|
|
$(if $(GITLAB_CI),,--failfast) $(AVOCADO_TESTS), \
|
|
"AVOCADO", "tests/avocado")
|
|
|
|
check-acceptance-deprecated-warning:
|
|
@echo
|
|
@echo "Note '$(MAKE) check-acceptance' is deprecated, use '$(MAKE) check-avocado' instead."
|
|
@echo
|
|
|
|
check-acceptance: check-acceptance-deprecated-warning | check-avocado
|
|
|
|
# Consolidated targets
|
|
|
|
.PHONY: check check-clean get-vm-images
|
|
check:
|
|
|
|
check-build: run-ninja
|
|
|
|
check-clean:
|
|
rm -rf $(TESTS_VENV_DIR) $(TESTS_RESULTS_DIR)
|
|
|
|
clean: check-clean clean-tcg
|
|
|
|
endif
|