39735a914d
tests/vm/Makefile.include used to assume that it could run in an unconfigured
source tree, and Cirrus CI relies on that. It was however broken by commit
f4c66f1705
("tests: use tests/venv to run basevm.py-based scripts", 2022-06-06),
which co-opted the virtual environment being used by avocado tests
to also run the basevm.py tests.
For now, reintroduce the usage of qemu.qmp from the source directory, but
without the sys.path() hacks. The CI configuration can be changed to
install the package via pip when qemu.qmp is removed from the source tree.
Cc: John Snow <jsnow@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
151 lines
5.3 KiB
Makefile
151 lines
5.3 KiB
Makefile
# Makefile for VM tests
|
|
|
|
# Hack to allow running in an unconfigured build tree
|
|
ifeq ($(wildcard $(SRC_PATH)/config-host.mak),)
|
|
VM_PYTHON = PYTHONPATH=$(SRC_PATH)/python /usr/bin/env python3
|
|
VM_VENV =
|
|
HOST_ARCH := $(shell uname -m)
|
|
else
|
|
VM_PYTHON = $(TESTS_PYTHON)
|
|
VM_VENV = check-venv
|
|
HOST_ARCH = $(ARCH)
|
|
endif
|
|
|
|
.PHONY: vm-build-all vm-clean-all
|
|
|
|
EFI_AARCH64 = $(wildcard $(BUILD_DIR)/pc-bios/edk2-aarch64-code.fd)
|
|
|
|
X86_IMAGES := freebsd netbsd openbsd centos fedora haiku.x86_64
|
|
ifneq ($(GENISOIMAGE),)
|
|
X86_IMAGES += ubuntu.i386 centos
|
|
ifneq ($(EFI_AARCH64),)
|
|
ARM64_IMAGES += ubuntu.aarch64 centos.aarch64
|
|
endif
|
|
endif
|
|
|
|
ifeq ($(HOST_ARCH),x86_64)
|
|
IMAGES=$(X86_IMAGES) $(if $(USE_TCG),$(ARM64_IMAGES))
|
|
else ifeq ($(HOST_ARCH),aarch64)
|
|
IMAGES=$(ARM64_IMAGES) $(if $(USE_TCG),$(X86_IMAGES))
|
|
endif
|
|
|
|
IMAGES_DIR := $(HOME)/.cache/qemu-vm/images
|
|
IMAGE_FILES := $(patsubst %, $(IMAGES_DIR)/%.img, $(IMAGES))
|
|
|
|
.PRECIOUS: $(IMAGE_FILES)
|
|
|
|
ifneq ($(PYTHON),)
|
|
HAVE_PYTHON_YAML = $(shell $(PYTHON) -c "import yaml" 2> /dev/null && echo yes)
|
|
endif
|
|
|
|
# 'vm-help' target was historically named 'vm-test'
|
|
vm-help vm-test:
|
|
@echo "vm-help: Test QEMU in preconfigured virtual machines"
|
|
@echo
|
|
@echo " vm-build-freebsd - Build QEMU in FreeBSD VM"
|
|
@echo " vm-build-netbsd - Build QEMU in NetBSD VM"
|
|
@echo " vm-build-openbsd - Build QEMU in OpenBSD VM"
|
|
@echo " vm-build-fedora - Build QEMU in Fedora VM"
|
|
ifneq ($(GENISOIMAGE),)
|
|
@echo " vm-build-centos - Build QEMU in CentOS VM, with Docker"
|
|
@echo " vm-build-ubuntu.i386 - Build QEMU in ubuntu i386 VM"
|
|
ifneq ($(EFI_AARCH64),)
|
|
@echo " vm-build-ubuntu.aarch64 - Build QEMU in ubuntu aarch64 VM"
|
|
@echo " vm-build-centos.aarch64 - Build QEMU in CentOS aarch64 VM"
|
|
else
|
|
@echo " (to build centos/ubuntu aarch64 images use configure --efi-aarch64)"
|
|
endif
|
|
else
|
|
@echo " (install genisoimage to build centos/ubuntu images)"
|
|
endif
|
|
@echo " vm-build-haiku.x86_64 - Build QEMU in Haiku VM"
|
|
@echo ""
|
|
@echo " vm-build-all - Build QEMU in: $(IMAGES)"
|
|
@echo " vm-clean-all - Clean up VM images"
|
|
@echo
|
|
@echo "For trouble-shooting:"
|
|
@echo " vm-boot-serial-<guest> - Boot guest, serial console on stdio"
|
|
@echo " vm-boot-ssh-<guest> - Boot guest and login via ssh"
|
|
@echo
|
|
@echo "Special variables:"
|
|
@echo " BUILD_TARGET=foo - Override the build target"
|
|
@echo " DEBUG=1 - Enable verbose output on host and interactive debugging"
|
|
@echo ' EXTRA_CONFIGURE_OPTS="..." - Pass to configure step'
|
|
@echo " J=[0..9]* - Override the -jN parameter for make commands"
|
|
@echo " LOG_CONSOLE=1 - Log console to file in: ~/.cache/qemu-vm "
|
|
@echo " USE_TCG=1 - Use TCG for cross-arch images"
|
|
@echo " QEMU=/path/to/qemu - Change path to QEMU binary"
|
|
ifeq ($(HAVE_PYTHON_YAML),yes)
|
|
@echo " QEMU_CONFIG=/path/conf.yml - Change path to VM configuration .yml file."
|
|
else
|
|
@echo " (install python3-yaml to enable support for yaml file to configure a VM.)"
|
|
endif
|
|
@echo " See conf_example_*.yml for file format details."
|
|
@echo " QEMU_IMG=/path/to/qemu-img - Change path to qemu-img tool"
|
|
@echo " QEMU_LOCAL=1 - Use QEMU binary local to this build."
|
|
@echo " TARGET_LIST=a,b,c - Override target list in builds"
|
|
@echo " V=1 - Enable verbose ouput on host and guest commands"
|
|
|
|
vm-build-all: $(addprefix vm-build-, $(IMAGES))
|
|
|
|
vm-clean-all:
|
|
rm -f $(IMAGE_FILES)
|
|
|
|
$(IMAGES_DIR)/%.img: $(SRC_PATH)/tests/vm/% \
|
|
$(SRC_PATH)/tests/vm/basevm.py \
|
|
$(SRC_PATH)/tests/vm/Makefile.include \
|
|
$(VM_VENV)
|
|
@mkdir -p $(IMAGES_DIR)
|
|
$(call quiet-command, \
|
|
$(VM_PYTHON) $< \
|
|
$(if $(V)$(DEBUG), --debug) \
|
|
$(if $(GENISOIMAGE),--genisoimage $(GENISOIMAGE)) \
|
|
$(if $(QEMU_LOCAL),--build-path $(BUILD_DIR)) \
|
|
$(if $(EFI_AARCH64),--efi-aarch64 $(EFI_AARCH64)) \
|
|
$(if $(LOG_CONSOLE),--log-console) \
|
|
--source-path $(SRC_PATH) \
|
|
--image "$@" \
|
|
--force \
|
|
--build-image $@, \
|
|
" VM-IMAGE $*")
|
|
|
|
# Build in VM $(IMAGE)
|
|
vm-build-%: $(IMAGES_DIR)/%.img $(VM_VENV)
|
|
$(call quiet-command, \
|
|
$(VM_PYTHON) $(SRC_PATH)/tests/vm/$* \
|
|
$(if $(V)$(DEBUG), --debug) \
|
|
$(if $(DEBUG), --interactive) \
|
|
$(if $(J),--jobs $(J)) \
|
|
$(if $(V),--verbose) \
|
|
$(if $(QEMU_LOCAL),--build-path $(BUILD_DIR)) \
|
|
$(if $(EFI_AARCH64),--efi-aarch64 $(EFI_AARCH64)) \
|
|
$(if $(LOG_CONSOLE),--log-console) \
|
|
--image "$<" \
|
|
$(if $(BUILD_TARGET),--build-target $(BUILD_TARGET)) \
|
|
--snapshot \
|
|
--build-qemu $(SRC_PATH) -- \
|
|
$(if $(TARGET_LIST),--target-list=$(TARGET_LIST)) \
|
|
$(if $(EXTRA_CONFIGURE_OPTS),$(EXTRA_CONFIGURE_OPTS)), \
|
|
" VM-BUILD $*")
|
|
|
|
vm-boot-serial-%: $(IMAGES_DIR)/%.img
|
|
qemu-system-x86_64 -enable-kvm -m 4G -smp 2 -nographic \
|
|
-drive if=none,id=vblk,cache=writeback,file="$<" \
|
|
-netdev user,id=vnet \
|
|
-device virtio-blk-pci,drive=vblk \
|
|
-device virtio-net-pci,netdev=vnet \
|
|
|| true
|
|
|
|
vm-boot-ssh-%: $(IMAGES_DIR)/%.img $(VM_VENV)
|
|
$(call quiet-command, \
|
|
$(VM_PYTHON) $(SRC_PATH)/tests/vm/$* \
|
|
$(if $(J),--jobs $(J)) \
|
|
$(if $(V)$(DEBUG), --debug) \
|
|
$(if $(QEMU_LOCAL),--build-path $(BUILD_DIR)) \
|
|
$(if $(EFI_AARCH64),--efi-aarch64 $(EFI_AARCH64)) \
|
|
$(if $(LOG_CONSOLE),--log-console) \
|
|
--image "$<" \
|
|
--interactive \
|
|
false, \
|
|
" VM-BOOT-SSH $*") || true
|