# Makefile for VM tests

.PHONY: vm-build-all vm-clean-all

EFI_AARCH64 = $(wildcard $(BUILD_DIR)/pc-bios/edk2-aarch64-code.fd)

IMAGES := freebsd netbsd openbsd centos fedora
ifneq ($(GENISOIMAGE),)
IMAGES += ubuntu.i386 centos
ifneq ($(EFI_AARCH64),)
IMAGES += ubuntu.aarch64 centos.aarch64
endif
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 ""
	@echo "  vm-build-all                    - Build QEMU in all VMs"
	@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 "    TARGET_LIST=a,b,c    	 - Override target list in builds"
	@echo '    EXTRA_CONFIGURE_OPTS="..."'
	@echo "    J=[0..9]*            	 - Override the -jN parameter for make commands"
	@echo "    DEBUG=1              	 - Enable verbose output on host and interactive debugging"
	@echo "    LOG_CONSOLE=1        	 - Log console to file in: ~/.cache/qemu-vm "
	@echo "    V=1				 - Enable verbose ouput on host and guest commands"
	@echo "    QEMU_LOCAL=1                 - Use QEMU binary local to this build."
	@echo "    QEMU=/path/to/qemu		 - Change path to QEMU binary"
	@echo "    QEMU_IMG=/path/to/qemu-img	 - Change path to qemu-img tool"
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."

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
	@mkdir -p $(IMAGES_DIR)
	$(call quiet-command, \
		$(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) \
		--image "$@" \
		--force \
		--build-image $@, \
		"  VM-IMAGE $*")


# Build in VM $(IMAGE)
vm-build-%: $(IMAGES_DIR)/%.img
	$(call quiet-command, \
		$(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
	$(call quiet-command, \
		$(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
