1b1fb9a63SFam Zheng# Makefile for VM tests 2b1fb9a63SFam Zheng 3ebe95fa0SFam Zheng.PHONY: vm-build-all vm-clean-all 4b1fb9a63SFam Zheng 5f5c73069SPaolo BonziniEFI_AARCH64 = $(wildcard $(BUILD_DIR)/pc-bios/edk2-aarch64-code.fd) 6f5c73069SPaolo Bonzini 739d87c8cSAlex BennéeIMAGES := freebsd netbsd openbsd centos fedora 839d87c8cSAlex Bennéeifneq ($(GENISOIMAGE),) 939d87c8cSAlex BennéeIMAGES += ubuntu.i386 centos 1013336606SRobert Foleyifneq ($(EFI_AARCH64),) 11d322fe2dSRobert FoleyIMAGES += ubuntu.aarch64 centos.aarch64 1213336606SRobert Foleyendif 1339d87c8cSAlex Bennéeendif 1439d87c8cSAlex Bennée 15bd1497dcSGerd HoffmannIMAGES_DIR := $(HOME)/.cache/qemu-vm/images 16bd1497dcSGerd HoffmannIMAGE_FILES := $(patsubst %, $(IMAGES_DIR)/%.img, $(IMAGES)) 17b1fb9a63SFam Zheng 18b1fb9a63SFam Zheng.PRECIOUS: $(IMAGE_FILES) 19b1fb9a63SFam Zheng 20*00eb3db0SPaolo Bonziniifneq ($(PYTHON),) 21*00eb3db0SPaolo BonziniHAVE_PYTHON_YAML = $(shell $(PYTHON) -c "import yaml" 2> /dev/null && echo yes) 22*00eb3db0SPaolo Bonziniendif 23*00eb3db0SPaolo Bonzini 244f2f6276SPhilippe Mathieu-Daudé# 'vm-help' target was historically named 'vm-test' 254f2f6276SPhilippe Mathieu-Daudévm-help vm-test: 264f2f6276SPhilippe Mathieu-Daudé @echo "vm-help: Test QEMU in preconfigured virtual machines" 27b1fb9a63SFam Zheng @echo 28b1fb9a63SFam Zheng @echo " vm-build-freebsd - Build QEMU in FreeBSD VM" 29b1fb9a63SFam Zheng @echo " vm-build-netbsd - Build QEMU in NetBSD VM" 30b1fb9a63SFam Zheng @echo " vm-build-openbsd - Build QEMU in OpenBSD VM" 3160136e06SGerd Hoffmann @echo " vm-build-fedora - Build QEMU in Fedora VM" 3239d87c8cSAlex Bennéeifneq ($(GENISOIMAGE),) 3339d87c8cSAlex Bennée @echo " vm-build-centos - Build QEMU in CentOS VM, with Docker" 3439d87c8cSAlex Bennée @echo " vm-build-ubuntu.i386 - Build QEMU in ubuntu i386 VM" 3513336606SRobert Foleyifneq ($(EFI_AARCH64),) 3613336606SRobert Foley @echo " vm-build-ubuntu.aarch64 - Build QEMU in ubuntu aarch64 VM" 37d322fe2dSRobert Foley @echo " vm-build-centos.aarch64 - Build QEMU in CentOS aarch64 VM" 3813336606SRobert Foleyelse 3913336606SRobert Foley @echo " (to build centos/ubuntu aarch64 images use configure --efi-aarch64)" 4013336606SRobert Foleyendif 4139d87c8cSAlex Bennéeelse 4239d87c8cSAlex Bennée @echo " (install genisoimage to build centos/ubuntu images)" 4339d87c8cSAlex Bennéeendif 44af7e9168SFam Zheng @echo "" 45af7e9168SFam Zheng @echo " vm-build-all - Build QEMU in all VMs" 46af7e9168SFam Zheng @echo " vm-clean-all - Clean up VM images" 47ddafa31fSAlex Bennée @echo 48b1210f02SGerd Hoffmann @echo "For trouble-shooting:" 49b1210f02SGerd Hoffmann @echo " vm-boot-serial-<guest> - Boot guest, serial console on stdio" 50b1210f02SGerd Hoffmann @echo " vm-boot-ssh-<guest> - Boot guest and login via ssh" 51b1210f02SGerd Hoffmann @echo 52ddafa31fSAlex Bennée @echo "Special variables:" 53eec4b30aSWainer dos Santos Moschetta @echo " BUILD_TARGET=foo - Override the build target" 54eec4b30aSWainer dos Santos Moschetta @echo " TARGET_LIST=a,b,c - Override target list in builds" 55ddafa31fSAlex Bennée @echo ' EXTRA_CONFIGURE_OPTS="..."' 56eec4b30aSWainer dos Santos Moschetta @echo " J=[0..9]* - Override the -jN parameter for make commands" 57eec4b30aSWainer dos Santos Moschetta @echo " DEBUG=1 - Enable verbose output on host and interactive debugging" 58ff14ab0cSRobert Foley @echo " LOG_CONSOLE=1 - Log console to file in: ~/.cache/qemu-vm " 59eec4b30aSWainer dos Santos Moschetta @echo " V=1 - Enable verbose ouput on host and guest commands" 60e56c4504SRobert Foley @echo " QEMU_LOCAL=1 - Use QEMU binary local to this build." 61eec4b30aSWainer dos Santos Moschetta @echo " QEMU=/path/to/qemu - Change path to QEMU binary" 621e48931cSWainer dos Santos Moschetta @echo " QEMU_IMG=/path/to/qemu-img - Change path to qemu-img tool" 63*00eb3db0SPaolo Bonziniifeq ($(HAVE_PYTHON_YAML),yes) 643f1e8137SRobert Foley @echo " QEMU_CONFIG=/path/conf.yml - Change path to VM configuration .yml file." 653f1e8137SRobert Foleyelse 663f1e8137SRobert Foley @echo " (install python3-yaml to enable support for yaml file to configure a VM.)" 673f1e8137SRobert Foleyendif 683f1e8137SRobert Foley @echo " See conf_example_*.yml for file format details." 69b1fb9a63SFam Zheng 70b1fb9a63SFam Zhengvm-build-all: $(addprefix vm-build-, $(IMAGES)) 71b1fb9a63SFam Zheng 72ebe95fa0SFam Zhengvm-clean-all: 73ebe95fa0SFam Zheng rm -f $(IMAGE_FILES) 74ebe95fa0SFam Zheng 75bd1497dcSGerd Hoffmann$(IMAGES_DIR)/%.img: $(SRC_PATH)/tests/vm/% \ 76b1fb9a63SFam Zheng $(SRC_PATH)/tests/vm/basevm.py \ 77b1fb9a63SFam Zheng $(SRC_PATH)/tests/vm/Makefile.include 78bd1497dcSGerd Hoffmann @mkdir -p $(IMAGES_DIR) 79b1fb9a63SFam Zheng $(call quiet-command, \ 80b0040fa1SWainer dos Santos Moschetta $(PYTHON) $< \ 81b1fb9a63SFam Zheng $(if $(V)$(DEBUG), --debug) \ 8292fecad3SAlex Bennée $(if $(GENISOIMAGE),--genisoimage $(GENISOIMAGE)) \ 83e56c4504SRobert Foley $(if $(QEMU_LOCAL),--build-path $(BUILD_DIR)) \ 8413336606SRobert Foley $(if $(EFI_AARCH64),--efi-aarch64 $(EFI_AARCH64)) \ 85ff14ab0cSRobert Foley $(if $(LOG_CONSOLE),--log-console) \ 86b1fb9a63SFam Zheng --image "$@" \ 87b1fb9a63SFam Zheng --force \ 88b1fb9a63SFam Zheng --build-image $@, \ 89b1fb9a63SFam Zheng " VM-IMAGE $*") 90b1fb9a63SFam Zheng 91b1fb9a63SFam Zheng 92b1fb9a63SFam Zheng# Build in VM $(IMAGE) 93bd1497dcSGerd Hoffmannvm-build-%: $(IMAGES_DIR)/%.img 94b1fb9a63SFam Zheng $(call quiet-command, \ 95b0040fa1SWainer dos Santos Moschetta $(PYTHON) $(SRC_PATH)/tests/vm/$* \ 96b1fb9a63SFam Zheng $(if $(V)$(DEBUG), --debug) \ 97b1fb9a63SFam Zheng $(if $(DEBUG), --interactive) \ 98b1fb9a63SFam Zheng $(if $(J),--jobs $(J)) \ 9941e3340aSPeter Maydell $(if $(V),--verbose) \ 100e56c4504SRobert Foley $(if $(QEMU_LOCAL),--build-path $(BUILD_DIR)) \ 10113336606SRobert Foley $(if $(EFI_AARCH64),--efi-aarch64 $(EFI_AARCH64)) \ 102ff14ab0cSRobert Foley $(if $(LOG_CONSOLE),--log-console) \ 103b1fb9a63SFam Zheng --image "$<" \ 104ddafa31fSAlex Bennée $(if $(BUILD_TARGET),--build-target $(BUILD_TARGET)) \ 1057f71d505SGerd Hoffmann --snapshot \ 106ddafa31fSAlex Bennée --build-qemu $(SRC_PATH) -- \ 107ddafa31fSAlex Bennée $(if $(TARGET_LIST),--target-list=$(TARGET_LIST)) \ 108ddafa31fSAlex Bennée $(if $(EXTRA_CONFIGURE_OPTS),$(EXTRA_CONFIGURE_OPTS)), \ 109b1fb9a63SFam Zheng " VM-BUILD $*") 110b1fb9a63SFam Zheng 111b1210f02SGerd Hoffmannvm-boot-serial-%: $(IMAGES_DIR)/%.img 112b1210f02SGerd Hoffmann qemu-system-x86_64 -enable-kvm -m 4G -smp 2 -nographic \ 113b1210f02SGerd Hoffmann -drive if=none,id=vblk,cache=writeback,file="$<" \ 114b1210f02SGerd Hoffmann -netdev user,id=vnet \ 115b1210f02SGerd Hoffmann -device virtio-blk-pci,drive=vblk \ 116b1210f02SGerd Hoffmann -device virtio-net-pci,netdev=vnet \ 117b1210f02SGerd Hoffmann || true 118b1210f02SGerd Hoffmann 119b1210f02SGerd Hoffmannvm-boot-ssh-%: $(IMAGES_DIR)/%.img 120b1210f02SGerd Hoffmann $(call quiet-command, \ 1210bc72f90SRobert Foley $(PYTHON) $(SRC_PATH)/tests/vm/$* \ 12246313326SThomas Huth $(if $(J),--jobs $(J)) \ 123d5326a24SRobert Foley $(if $(V)$(DEBUG), --debug) \ 124e56c4504SRobert Foley $(if $(QEMU_LOCAL),--build-path $(BUILD_DIR)) \ 12513336606SRobert Foley $(if $(EFI_AARCH64),--efi-aarch64 $(EFI_AARCH64)) \ 126ff14ab0cSRobert Foley $(if $(LOG_CONSOLE),--log-console) \ 127b1210f02SGerd Hoffmann --image "$<" \ 128b1210f02SGerd Hoffmann --interactive \ 129b1210f02SGerd Hoffmann false, \ 130b1210f02SGerd Hoffmann " VM-BOOT-SSH $*") || true 131