1b1fb9a63SFam Zheng# Makefile for VM tests 2b1fb9a63SFam Zheng 3*39735a91SPaolo Bonzini# Hack to allow running in an unconfigured build tree 4*39735a91SPaolo Bonziniifeq ($(wildcard $(SRC_PATH)/config-host.mak),) 5*39735a91SPaolo BonziniVM_PYTHON = PYTHONPATH=$(SRC_PATH)/python /usr/bin/env python3 6*39735a91SPaolo BonziniVM_VENV = 7*39735a91SPaolo BonziniHOST_ARCH := $(shell uname -m) 8*39735a91SPaolo Bonzinielse 9*39735a91SPaolo BonziniVM_PYTHON = $(TESTS_PYTHON) 10*39735a91SPaolo BonziniVM_VENV = check-venv 11*39735a91SPaolo BonziniHOST_ARCH = $(ARCH) 12*39735a91SPaolo Bonziniendif 13b1fb9a63SFam Zheng 14*39735a91SPaolo Bonzini.PHONY: vm-build-all vm-clean-all 15ebd654aaSAlex Bennée 16f5c73069SPaolo BonziniEFI_AARCH64 = $(wildcard $(BUILD_DIR)/pc-bios/edk2-aarch64-code.fd) 17f5c73069SPaolo Bonzini 18ebd654aaSAlex BennéeX86_IMAGES := freebsd netbsd openbsd centos fedora haiku.x86_64 1939d87c8cSAlex Bennéeifneq ($(GENISOIMAGE),) 20ebd654aaSAlex BennéeX86_IMAGES += ubuntu.i386 centos 2113336606SRobert Foleyifneq ($(EFI_AARCH64),) 22ebd654aaSAlex BennéeARM64_IMAGES += ubuntu.aarch64 centos.aarch64 2313336606SRobert Foleyendif 2439d87c8cSAlex Bennéeendif 2539d87c8cSAlex Bennée 26ebd654aaSAlex Bennéeifeq ($(HOST_ARCH),x86_64) 27ebd654aaSAlex BennéeIMAGES=$(X86_IMAGES) $(if $(USE_TCG),$(ARM64_IMAGES)) 28ebd654aaSAlex Bennéeelse ifeq ($(HOST_ARCH),aarch64) 29ebd654aaSAlex BennéeIMAGES=$(ARM64_IMAGES) $(if $(USE_TCG),$(X86_IMAGES)) 30ebd654aaSAlex Bennéeendif 31ebd654aaSAlex Bennée 32bd1497dcSGerd HoffmannIMAGES_DIR := $(HOME)/.cache/qemu-vm/images 33bd1497dcSGerd HoffmannIMAGE_FILES := $(patsubst %, $(IMAGES_DIR)/%.img, $(IMAGES)) 34b1fb9a63SFam Zheng 35b1fb9a63SFam Zheng.PRECIOUS: $(IMAGE_FILES) 36b1fb9a63SFam Zheng 3700eb3db0SPaolo Bonziniifneq ($(PYTHON),) 3800eb3db0SPaolo BonziniHAVE_PYTHON_YAML = $(shell $(PYTHON) -c "import yaml" 2> /dev/null && echo yes) 3900eb3db0SPaolo Bonziniendif 4000eb3db0SPaolo Bonzini 414f2f6276SPhilippe Mathieu-Daudé# 'vm-help' target was historically named 'vm-test' 424f2f6276SPhilippe Mathieu-Daudévm-help vm-test: 434f2f6276SPhilippe Mathieu-Daudé @echo "vm-help: Test QEMU in preconfigured virtual machines" 44b1fb9a63SFam Zheng @echo 45b1fb9a63SFam Zheng @echo " vm-build-freebsd - Build QEMU in FreeBSD VM" 46b1fb9a63SFam Zheng @echo " vm-build-netbsd - Build QEMU in NetBSD VM" 47b1fb9a63SFam Zheng @echo " vm-build-openbsd - Build QEMU in OpenBSD VM" 4860136e06SGerd Hoffmann @echo " vm-build-fedora - Build QEMU in Fedora VM" 4939d87c8cSAlex Bennéeifneq ($(GENISOIMAGE),) 5039d87c8cSAlex Bennée @echo " vm-build-centos - Build QEMU in CentOS VM, with Docker" 5139d87c8cSAlex Bennée @echo " vm-build-ubuntu.i386 - Build QEMU in ubuntu i386 VM" 5213336606SRobert Foleyifneq ($(EFI_AARCH64),) 5313336606SRobert Foley @echo " vm-build-ubuntu.aarch64 - Build QEMU in ubuntu aarch64 VM" 54d322fe2dSRobert Foley @echo " vm-build-centos.aarch64 - Build QEMU in CentOS aarch64 VM" 5513336606SRobert Foleyelse 5613336606SRobert Foley @echo " (to build centos/ubuntu aarch64 images use configure --efi-aarch64)" 5713336606SRobert Foleyendif 5839d87c8cSAlex Bennéeelse 5939d87c8cSAlex Bennée @echo " (install genisoimage to build centos/ubuntu images)" 6039d87c8cSAlex Bennéeendif 619fc33bf4SAlexander von Gluck IV @echo " vm-build-haiku.x86_64 - Build QEMU in Haiku VM" 62af7e9168SFam Zheng @echo "" 63ebd654aaSAlex Bennée @echo " vm-build-all - Build QEMU in: $(IMAGES)" 64af7e9168SFam Zheng @echo " vm-clean-all - Clean up VM images" 65ddafa31fSAlex Bennée @echo 66b1210f02SGerd Hoffmann @echo "For trouble-shooting:" 67b1210f02SGerd Hoffmann @echo " vm-boot-serial-<guest> - Boot guest, serial console on stdio" 68b1210f02SGerd Hoffmann @echo " vm-boot-ssh-<guest> - Boot guest and login via ssh" 69b1210f02SGerd Hoffmann @echo 70ddafa31fSAlex Bennée @echo "Special variables:" 71eec4b30aSWainer dos Santos Moschetta @echo " BUILD_TARGET=foo - Override the build target" 72eec4b30aSWainer dos Santos Moschetta @echo " DEBUG=1 - Enable verbose output on host and interactive debugging" 7381c9b06eSAlex Bennée @echo ' EXTRA_CONFIGURE_OPTS="..." - Pass to configure step' 7481c9b06eSAlex Bennée @echo " J=[0..9]* - Override the -jN parameter for make commands" 75ff14ab0cSRobert Foley @echo " LOG_CONSOLE=1 - Log console to file in: ~/.cache/qemu-vm " 76ebd654aaSAlex Bennée @echo " USE_TCG=1 - Use TCG for cross-arch images" 77eec4b30aSWainer dos Santos Moschetta @echo " QEMU=/path/to/qemu - Change path to QEMU binary" 7800eb3db0SPaolo Bonziniifeq ($(HAVE_PYTHON_YAML),yes) 793f1e8137SRobert Foley @echo " QEMU_CONFIG=/path/conf.yml - Change path to VM configuration .yml file." 803f1e8137SRobert Foleyelse 813f1e8137SRobert Foley @echo " (install python3-yaml to enable support for yaml file to configure a VM.)" 823f1e8137SRobert Foleyendif 833f1e8137SRobert Foley @echo " See conf_example_*.yml for file format details." 8481c9b06eSAlex Bennée @echo " QEMU_IMG=/path/to/qemu-img - Change path to qemu-img tool" 8581c9b06eSAlex Bennée @echo " QEMU_LOCAL=1 - Use QEMU binary local to this build." 8681c9b06eSAlex Bennée @echo " TARGET_LIST=a,b,c - Override target list in builds" 8781c9b06eSAlex Bennée @echo " V=1 - Enable verbose ouput on host and guest commands" 88b1fb9a63SFam Zheng 89b1fb9a63SFam Zhengvm-build-all: $(addprefix vm-build-, $(IMAGES)) 90b1fb9a63SFam Zheng 91ebe95fa0SFam Zhengvm-clean-all: 92ebe95fa0SFam Zheng rm -f $(IMAGE_FILES) 93ebe95fa0SFam Zheng 94bd1497dcSGerd Hoffmann$(IMAGES_DIR)/%.img: $(SRC_PATH)/tests/vm/% \ 95b1fb9a63SFam Zheng $(SRC_PATH)/tests/vm/basevm.py \ 96f4c66f17SJohn Snow $(SRC_PATH)/tests/vm/Makefile.include \ 97*39735a91SPaolo Bonzini $(VM_VENV) 98bd1497dcSGerd Hoffmann @mkdir -p $(IMAGES_DIR) 99b1fb9a63SFam Zheng $(call quiet-command, \ 100*39735a91SPaolo Bonzini $(VM_PYTHON) $< \ 101b1fb9a63SFam Zheng $(if $(V)$(DEBUG), --debug) \ 10292fecad3SAlex Bennée $(if $(GENISOIMAGE),--genisoimage $(GENISOIMAGE)) \ 103e56c4504SRobert Foley $(if $(QEMU_LOCAL),--build-path $(BUILD_DIR)) \ 10413336606SRobert Foley $(if $(EFI_AARCH64),--efi-aarch64 $(EFI_AARCH64)) \ 105ff14ab0cSRobert Foley $(if $(LOG_CONSOLE),--log-console) \ 1067bb17a92SAlex Bennée --source-path $(SRC_PATH) \ 107b1fb9a63SFam Zheng --image "$@" \ 108b1fb9a63SFam Zheng --force \ 109b1fb9a63SFam Zheng --build-image $@, \ 110b1fb9a63SFam Zheng " VM-IMAGE $*") 111b1fb9a63SFam Zheng 112b1fb9a63SFam Zheng# Build in VM $(IMAGE) 113*39735a91SPaolo Bonzinivm-build-%: $(IMAGES_DIR)/%.img $(VM_VENV) 114b1fb9a63SFam Zheng $(call quiet-command, \ 115*39735a91SPaolo Bonzini $(VM_PYTHON) $(SRC_PATH)/tests/vm/$* \ 116b1fb9a63SFam Zheng $(if $(V)$(DEBUG), --debug) \ 117b1fb9a63SFam Zheng $(if $(DEBUG), --interactive) \ 118b1fb9a63SFam Zheng $(if $(J),--jobs $(J)) \ 11941e3340aSPeter Maydell $(if $(V),--verbose) \ 120e56c4504SRobert Foley $(if $(QEMU_LOCAL),--build-path $(BUILD_DIR)) \ 12113336606SRobert Foley $(if $(EFI_AARCH64),--efi-aarch64 $(EFI_AARCH64)) \ 122ff14ab0cSRobert Foley $(if $(LOG_CONSOLE),--log-console) \ 123b1fb9a63SFam Zheng --image "$<" \ 124ddafa31fSAlex Bennée $(if $(BUILD_TARGET),--build-target $(BUILD_TARGET)) \ 1257f71d505SGerd Hoffmann --snapshot \ 126ddafa31fSAlex Bennée --build-qemu $(SRC_PATH) -- \ 127ddafa31fSAlex Bennée $(if $(TARGET_LIST),--target-list=$(TARGET_LIST)) \ 128ddafa31fSAlex Bennée $(if $(EXTRA_CONFIGURE_OPTS),$(EXTRA_CONFIGURE_OPTS)), \ 129b1fb9a63SFam Zheng " VM-BUILD $*") 130b1fb9a63SFam Zheng 131b1210f02SGerd Hoffmannvm-boot-serial-%: $(IMAGES_DIR)/%.img 132b1210f02SGerd Hoffmann qemu-system-x86_64 -enable-kvm -m 4G -smp 2 -nographic \ 133b1210f02SGerd Hoffmann -drive if=none,id=vblk,cache=writeback,file="$<" \ 134b1210f02SGerd Hoffmann -netdev user,id=vnet \ 135b1210f02SGerd Hoffmann -device virtio-blk-pci,drive=vblk \ 136b1210f02SGerd Hoffmann -device virtio-net-pci,netdev=vnet \ 137b1210f02SGerd Hoffmann || true 138b1210f02SGerd Hoffmann 139*39735a91SPaolo Bonzinivm-boot-ssh-%: $(IMAGES_DIR)/%.img $(VM_VENV) 140b1210f02SGerd Hoffmann $(call quiet-command, \ 141*39735a91SPaolo Bonzini $(VM_PYTHON) $(SRC_PATH)/tests/vm/$* \ 14246313326SThomas Huth $(if $(J),--jobs $(J)) \ 143d5326a24SRobert Foley $(if $(V)$(DEBUG), --debug) \ 144e56c4504SRobert Foley $(if $(QEMU_LOCAL),--build-path $(BUILD_DIR)) \ 14513336606SRobert Foley $(if $(EFI_AARCH64),--efi-aarch64 $(EFI_AARCH64)) \ 146ff14ab0cSRobert Foley $(if $(LOG_CONSOLE),--log-console) \ 147b1210f02SGerd Hoffmann --image "$<" \ 148b1210f02SGerd Hoffmann --interactive \ 149b1210f02SGerd Hoffmann false, \ 150b1210f02SGerd Hoffmann " VM-BOOT-SSH $*") || true 151