# Makefile for VM tests

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

HOST_ARCH = $(if $(ARCH),$(ARCH),$(shell uname -m))

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
	@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) \
		--source-path $(SRC_PATH) \
		--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
