ff14ab0c13
This adds support to basevm.py so that we always drain the console chars. This makes use of support added in an earlier commit that allows QEMUMachine to use the ConsoleSocket. This is a workaround we found was needed since there is a known issue where QEMU will hang waiting for console characters to be consumed. We also added the option of logging the console to a file. LOG_CONSOLE=1 will now log the output to a file. Signed-off-by: Robert Foley <robert.foley@linaro.org> Reviewed-by: Peter Puhov <peter.puhov@linaro.org> Acked-by: Alex Bennée <alex.bennee@linaro.org> Signed-off-by: Alex Bennée <alex.bennee@linaro.org> Message-Id: <20200601211421.1277-10-robert.foley@linaro.org> Message-Id: <20200701135652.1366-14-alex.bennee@linaro.org>
125 lines
4.4 KiB
Makefile
125 lines
4.4 KiB
Makefile
# Makefile for VM tests
|
|
|
|
.PHONY: vm-build-all vm-clean-all
|
|
|
|
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)
|
|
|
|
# '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 ($(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
|