1b1fb9a63SFam Zheng# Makefile for VM tests 2b1fb9a63SFam Zheng 339735a91SPaolo Bonzini# Hack to allow running in an unconfigured build tree 4b1399b0cSPaolo Bonziniifeq ($(realpath $(SRC_PATH)),$(realpath .)) 539735a91SPaolo BonziniVM_PYTHON = PYTHONPATH=$(SRC_PATH)/python /usr/bin/env python3 639735a91SPaolo BonziniVM_VENV = 739735a91SPaolo Bonzinielse 8c03f57fdSPaolo BonziniVM_PYTHON = $(PYTHON) 939735a91SPaolo BonziniVM_VENV = check-venv 1039735a91SPaolo Bonziniendif 11b1fb9a63SFam Zheng 1239735a91SPaolo Bonzini.PHONY: vm-build-all vm-clean-all 13ebd654aaSAlex Bennée 14f5c73069SPaolo BonziniEFI_AARCH64 = $(wildcard $(BUILD_DIR)/pc-bios/edk2-aarch64-code.fd) 15f5c73069SPaolo Bonzini 163c696fdcSThomas HuthX86_IMAGES := freebsd netbsd openbsd haiku.x86_64 1739d87c8cSAlex Bennéeifneq ($(GENISOIMAGE),) 185e658729SJohn SnowX86_IMAGES += centos 1913336606SRobert Foleyifneq ($(EFI_AARCH64),) 20ebd654aaSAlex BennéeARM64_IMAGES += ubuntu.aarch64 centos.aarch64 2113336606SRobert Foleyendif 2239d87c8cSAlex Bennéeendif 2339d87c8cSAlex Bennée 24b1399b0cSPaolo BonziniHOST_ARCH = $(shell uname -m) 25ebd654aaSAlex Bennéeifeq ($(HOST_ARCH),x86_64) 26ebd654aaSAlex BennéeIMAGES=$(X86_IMAGES) $(if $(USE_TCG),$(ARM64_IMAGES)) 27ebd654aaSAlex Bennéeelse ifeq ($(HOST_ARCH),aarch64) 28ebd654aaSAlex BennéeIMAGES=$(ARM64_IMAGES) $(if $(USE_TCG),$(X86_IMAGES)) 29ebd654aaSAlex Bennéeendif 30ebd654aaSAlex Bennée 31bd1497dcSGerd HoffmannIMAGES_DIR := $(HOME)/.cache/qemu-vm/images 32bd1497dcSGerd HoffmannIMAGE_FILES := $(patsubst %, $(IMAGES_DIR)/%.img, $(IMAGES)) 33b1fb9a63SFam Zheng 34b1fb9a63SFam Zheng.PRECIOUS: $(IMAGE_FILES) 35b1fb9a63SFam Zheng 3600eb3db0SPaolo Bonziniifneq ($(PYTHON),) 3700eb3db0SPaolo BonziniHAVE_PYTHON_YAML = $(shell $(PYTHON) -c "import yaml" 2> /dev/null && echo yes) 3800eb3db0SPaolo Bonziniendif 3900eb3db0SPaolo Bonzini 404f2f6276SPhilippe Mathieu-Daudé# 'vm-help' target was historically named 'vm-test' 414f2f6276SPhilippe Mathieu-Daudévm-help vm-test: 424f2f6276SPhilippe Mathieu-Daudé @echo "vm-help: Test QEMU in preconfigured virtual machines" 43b1fb9a63SFam Zheng @echo 44b1fb9a63SFam Zheng @echo " vm-build-freebsd - Build QEMU in FreeBSD VM" 45b1fb9a63SFam Zheng @echo " vm-build-netbsd - Build QEMU in NetBSD VM" 46b1fb9a63SFam Zheng @echo " vm-build-openbsd - Build QEMU in OpenBSD VM" 4739d87c8cSAlex Bennéeifneq ($(GENISOIMAGE),) 4813336606SRobert Foleyifneq ($(EFI_AARCH64),) 4913336606SRobert Foley @echo " vm-build-ubuntu.aarch64 - Build QEMU in ubuntu aarch64 VM" 50d322fe2dSRobert Foley @echo " vm-build-centos.aarch64 - Build QEMU in CentOS aarch64 VM" 5113336606SRobert Foleyelse 5213336606SRobert Foley @echo " (to build centos/ubuntu aarch64 images use configure --efi-aarch64)" 5313336606SRobert Foleyendif 5439d87c8cSAlex Bennéeelse 5539d87c8cSAlex Bennée @echo " (install genisoimage to build centos/ubuntu images)" 5639d87c8cSAlex Bennéeendif 579fc33bf4SAlexander von Gluck IV @echo " vm-build-haiku.x86_64 - Build QEMU in Haiku VM" 58af7e9168SFam Zheng @echo "" 59ebd654aaSAlex Bennée @echo " vm-build-all - Build QEMU in: $(IMAGES)" 60af7e9168SFam Zheng @echo " vm-clean-all - Clean up VM images" 61ddafa31fSAlex Bennée @echo 62b1210f02SGerd Hoffmann @echo "For trouble-shooting:" 63b1210f02SGerd Hoffmann @echo " vm-boot-serial-<guest> - Boot guest, serial console on stdio" 64b1210f02SGerd Hoffmann @echo " vm-boot-ssh-<guest> - Boot guest and login via ssh" 65b1210f02SGerd Hoffmann @echo 66ddafa31fSAlex Bennée @echo "Special variables:" 67eec4b30aSWainer dos Santos Moschetta @echo " BUILD_TARGET=foo - Override the build target" 68eec4b30aSWainer dos Santos Moschetta @echo " DEBUG=1 - Enable verbose output on host and interactive debugging" 6981c9b06eSAlex Bennée @echo ' EXTRA_CONFIGURE_OPTS="..." - Pass to configure step' 7081c9b06eSAlex Bennée @echo " J=[0..9]* - Override the -jN parameter for make commands" 71ff14ab0cSRobert Foley @echo " LOG_CONSOLE=1 - Log console to file in: ~/.cache/qemu-vm " 72ebd654aaSAlex Bennée @echo " USE_TCG=1 - Use TCG for cross-arch images" 73eec4b30aSWainer dos Santos Moschetta @echo " QEMU=/path/to/qemu - Change path to QEMU binary" 7400eb3db0SPaolo Bonziniifeq ($(HAVE_PYTHON_YAML),yes) 753f1e8137SRobert Foley @echo " QEMU_CONFIG=/path/conf.yml - Change path to VM configuration .yml file." 763f1e8137SRobert Foleyelse 773f1e8137SRobert Foley @echo " (install python3-yaml to enable support for yaml file to configure a VM.)" 783f1e8137SRobert Foleyendif 793f1e8137SRobert Foley @echo " See conf_example_*.yml for file format details." 8081c9b06eSAlex Bennée @echo " QEMU_IMG=/path/to/qemu-img - Change path to qemu-img tool" 8181c9b06eSAlex Bennée @echo " QEMU_LOCAL=1 - Use QEMU binary local to this build." 8281c9b06eSAlex Bennée @echo " TARGET_LIST=a,b,c - Override target list in builds" 8396420a30SMichael Tokarev @echo " V=1 - Enable verbose output on host and guest commands" 84b1fb9a63SFam Zheng 85b1fb9a63SFam Zhengvm-build-all: $(addprefix vm-build-, $(IMAGES)) 86b1fb9a63SFam Zheng 87ebe95fa0SFam Zhengvm-clean-all: 88ebe95fa0SFam Zheng rm -f $(IMAGE_FILES) 89ebe95fa0SFam Zheng 90bd1497dcSGerd Hoffmann$(IMAGES_DIR)/%.img: $(SRC_PATH)/tests/vm/% \ 91b1fb9a63SFam Zheng $(SRC_PATH)/tests/vm/basevm.py \ 92f4c66f17SJohn Snow $(SRC_PATH)/tests/vm/Makefile.include \ 9339735a91SPaolo Bonzini $(VM_VENV) 94bd1497dcSGerd Hoffmann @mkdir -p $(IMAGES_DIR) 95b1fb9a63SFam Zheng $(call quiet-command, \ 9639735a91SPaolo Bonzini $(VM_PYTHON) $< \ 97b1fb9a63SFam Zheng $(if $(V)$(DEBUG), --debug) \ 9892fecad3SAlex Bennée $(if $(GENISOIMAGE),--genisoimage $(GENISOIMAGE)) \ 99e56c4504SRobert Foley $(if $(QEMU_LOCAL),--build-path $(BUILD_DIR)) \ 10013336606SRobert Foley $(if $(EFI_AARCH64),--efi-aarch64 $(EFI_AARCH64)) \ 101ff14ab0cSRobert Foley $(if $(LOG_CONSOLE),--log-console) \ 1027bb17a92SAlex Bennée --source-path $(SRC_PATH) \ 103b1fb9a63SFam Zheng --image "$@" \ 104*151b7dbaSAlex Bennée $(if $(filter-out check-venv, $?), --force) \ 105b1fb9a63SFam Zheng --build-image $@, \ 106b1fb9a63SFam Zheng " VM-IMAGE $*") 107b1fb9a63SFam Zheng 108b1fb9a63SFam Zheng# Build in VM $(IMAGE) 10939735a91SPaolo Bonzinivm-build-%: $(IMAGES_DIR)/%.img $(VM_VENV) 110b1fb9a63SFam Zheng $(call quiet-command, \ 11139735a91SPaolo Bonzini $(VM_PYTHON) $(SRC_PATH)/tests/vm/$* \ 112b1fb9a63SFam Zheng $(if $(V)$(DEBUG), --debug) \ 113b1fb9a63SFam Zheng $(if $(DEBUG), --interactive) \ 114b1fb9a63SFam Zheng $(if $(J),--jobs $(J)) \ 11541e3340aSPeter Maydell $(if $(V),--verbose) \ 116e56c4504SRobert Foley $(if $(QEMU_LOCAL),--build-path $(BUILD_DIR)) \ 11713336606SRobert Foley $(if $(EFI_AARCH64),--efi-aarch64 $(EFI_AARCH64)) \ 118ff14ab0cSRobert Foley $(if $(LOG_CONSOLE),--log-console) \ 119b1fb9a63SFam Zheng --image "$<" \ 120ddafa31fSAlex Bennée $(if $(BUILD_TARGET),--build-target $(BUILD_TARGET)) \ 1217f71d505SGerd Hoffmann --snapshot \ 122ddafa31fSAlex Bennée --build-qemu $(SRC_PATH) -- \ 123ddafa31fSAlex Bennée $(if $(TARGET_LIST),--target-list=$(TARGET_LIST)) \ 124ddafa31fSAlex Bennée $(if $(EXTRA_CONFIGURE_OPTS),$(EXTRA_CONFIGURE_OPTS)), \ 125b1fb9a63SFam Zheng " VM-BUILD $*") 126b1fb9a63SFam Zheng 127b1210f02SGerd Hoffmannvm-boot-serial-%: $(IMAGES_DIR)/%.img 128b1210f02SGerd Hoffmann qemu-system-x86_64 -enable-kvm -m 4G -smp 2 -nographic \ 129b1210f02SGerd Hoffmann -drive if=none,id=vblk,cache=writeback,file="$<" \ 130b1210f02SGerd Hoffmann -netdev user,id=vnet \ 131b1210f02SGerd Hoffmann -device virtio-blk-pci,drive=vblk \ 132b1210f02SGerd Hoffmann -device virtio-net-pci,netdev=vnet \ 133b1210f02SGerd Hoffmann || true 134b1210f02SGerd Hoffmann 13539735a91SPaolo Bonzinivm-boot-ssh-%: $(IMAGES_DIR)/%.img $(VM_VENV) 136b1210f02SGerd Hoffmann $(call quiet-command, \ 13739735a91SPaolo Bonzini $(VM_PYTHON) $(SRC_PATH)/tests/vm/$* \ 13846313326SThomas Huth $(if $(J),--jobs $(J)) \ 139d5326a24SRobert Foley $(if $(V)$(DEBUG), --debug) \ 140e56c4504SRobert Foley $(if $(QEMU_LOCAL),--build-path $(BUILD_DIR)) \ 14113336606SRobert Foley $(if $(EFI_AARCH64),--efi-aarch64 $(EFI_AARCH64)) \ 142ff14ab0cSRobert Foley $(if $(LOG_CONSOLE),--log-console) \ 143b1210f02SGerd Hoffmann --image "$<" \ 144b1210f02SGerd Hoffmann --interactive \ 145b1210f02SGerd Hoffmann false, \ 146b1210f02SGerd Hoffmann " VM-BOOT-SSH $*") || true 147