]>
Commit | Line | Data |
---|---|---|
b1fb9a63 FZ |
1 | # Makefile for VM tests |
2 | ||
39735a91 | 3 | # Hack to allow running in an unconfigured build tree |
b1399b0c | 4 | ifeq ($(realpath $(SRC_PATH)),$(realpath .)) |
39735a91 PB |
5 | VM_PYTHON = PYTHONPATH=$(SRC_PATH)/python /usr/bin/env python3 |
6 | VM_VENV = | |
39735a91 | 7 | else |
c03f57fd | 8 | VM_PYTHON = $(PYTHON) |
39735a91 | 9 | VM_VENV = check-venv |
39735a91 | 10 | endif |
b1fb9a63 | 11 | |
39735a91 | 12 | .PHONY: vm-build-all vm-clean-all |
ebd654aa | 13 | |
f5c73069 PB |
14 | EFI_AARCH64 = $(wildcard $(BUILD_DIR)/pc-bios/edk2-aarch64-code.fd) |
15 | ||
3c696fdc | 16 | X86_IMAGES := freebsd netbsd openbsd haiku.x86_64 |
39d87c8c | 17 | ifneq ($(GENISOIMAGE),) |
5e658729 | 18 | X86_IMAGES += centos |
13336606 | 19 | ifneq ($(EFI_AARCH64),) |
ebd654aa AB |
20 | ARM64_IMAGES += ubuntu.aarch64 centos.aarch64 |
21 | endif | |
13336606 | 22 | endif |
ebd654aa | 23 | |
b1399b0c | 24 | HOST_ARCH = $(shell uname -m) |
ebd654aa AB |
25 | ifeq ($(HOST_ARCH),x86_64) |
26 | IMAGES=$(X86_IMAGES) $(if $(USE_TCG),$(ARM64_IMAGES)) | |
27 | else ifeq ($(HOST_ARCH),aarch64) | |
28 | IMAGES=$(ARM64_IMAGES) $(if $(USE_TCG),$(X86_IMAGES)) | |
39d87c8c AB |
29 | endif |
30 | ||
bd1497dc GH |
31 | IMAGES_DIR := $(HOME)/.cache/qemu-vm/images |
32 | IMAGE_FILES := $(patsubst %, $(IMAGES_DIR)/%.img, $(IMAGES)) | |
b1fb9a63 FZ |
33 | |
34 | .PRECIOUS: $(IMAGE_FILES) | |
35 | ||
00eb3db0 PB |
36 | ifneq ($(PYTHON),) |
37 | HAVE_PYTHON_YAML = $(shell $(PYTHON) -c "import yaml" 2> /dev/null && echo yes) | |
38 | endif | |
39 | ||
4f2f6276 PMD |
40 | # 'vm-help' target was historically named 'vm-test' |
41 | vm-help vm-test: | |
42 | @echo "vm-help: Test QEMU in preconfigured virtual machines" | |
b1fb9a63 | 43 | @echo |
b1fb9a63 FZ |
44 | @echo " vm-build-freebsd - Build QEMU in FreeBSD VM" |
45 | @echo " vm-build-netbsd - Build QEMU in NetBSD VM" | |
46 | @echo " vm-build-openbsd - Build QEMU in OpenBSD VM" | |
39d87c8c AB |
47 | ifneq ($(GENISOIMAGE),) |
48 | @echo " vm-build-centos - Build QEMU in CentOS VM, with Docker" | |
13336606 RF |
49 | ifneq ($(EFI_AARCH64),) |
50 | @echo " vm-build-ubuntu.aarch64 - Build QEMU in ubuntu aarch64 VM" | |
d322fe2d | 51 | @echo " vm-build-centos.aarch64 - Build QEMU in CentOS aarch64 VM" |
13336606 RF |
52 | else |
53 | @echo " (to build centos/ubuntu aarch64 images use configure --efi-aarch64)" | |
54 | endif | |
39d87c8c AB |
55 | else |
56 | @echo " (install genisoimage to build centos/ubuntu images)" | |
57 | endif | |
9fc33bf4 | 58 | @echo " vm-build-haiku.x86_64 - Build QEMU in Haiku VM" |
af7e9168 | 59 | @echo "" |
ebd654aa | 60 | @echo " vm-build-all - Build QEMU in: $(IMAGES)" |
af7e9168 | 61 | @echo " vm-clean-all - Clean up VM images" |
ddafa31f | 62 | @echo |
b1210f02 GH |
63 | @echo "For trouble-shooting:" |
64 | @echo " vm-boot-serial-<guest> - Boot guest, serial console on stdio" | |
65 | @echo " vm-boot-ssh-<guest> - Boot guest and login via ssh" | |
66 | @echo | |
ddafa31f | 67 | @echo "Special variables:" |
eec4b30a | 68 | @echo " BUILD_TARGET=foo - Override the build target" |
eec4b30a | 69 | @echo " DEBUG=1 - Enable verbose output on host and interactive debugging" |
81c9b06e AB |
70 | @echo ' EXTRA_CONFIGURE_OPTS="..." - Pass to configure step' |
71 | @echo " J=[0..9]* - Override the -jN parameter for make commands" | |
ff14ab0c | 72 | @echo " LOG_CONSOLE=1 - Log console to file in: ~/.cache/qemu-vm " |
ebd654aa | 73 | @echo " USE_TCG=1 - Use TCG for cross-arch images" |
eec4b30a | 74 | @echo " QEMU=/path/to/qemu - Change path to QEMU binary" |
00eb3db0 | 75 | ifeq ($(HAVE_PYTHON_YAML),yes) |
3f1e8137 RF |
76 | @echo " QEMU_CONFIG=/path/conf.yml - Change path to VM configuration .yml file." |
77 | else | |
78 | @echo " (install python3-yaml to enable support for yaml file to configure a VM.)" | |
79 | endif | |
80 | @echo " See conf_example_*.yml for file format details." | |
81c9b06e AB |
81 | @echo " QEMU_IMG=/path/to/qemu-img - Change path to qemu-img tool" |
82 | @echo " QEMU_LOCAL=1 - Use QEMU binary local to this build." | |
83 | @echo " TARGET_LIST=a,b,c - Override target list in builds" | |
96420a30 | 84 | @echo " V=1 - Enable verbose output on host and guest commands" |
b1fb9a63 FZ |
85 | |
86 | vm-build-all: $(addprefix vm-build-, $(IMAGES)) | |
87 | ||
ebe95fa0 FZ |
88 | vm-clean-all: |
89 | rm -f $(IMAGE_FILES) | |
90 | ||
bd1497dc GH |
91 | $(IMAGES_DIR)/%.img: $(SRC_PATH)/tests/vm/% \ |
92 | $(SRC_PATH)/tests/vm/basevm.py \ | |
f4c66f17 | 93 | $(SRC_PATH)/tests/vm/Makefile.include \ |
39735a91 | 94 | $(VM_VENV) |
bd1497dc | 95 | @mkdir -p $(IMAGES_DIR) |
b1fb9a63 | 96 | $(call quiet-command, \ |
39735a91 | 97 | $(VM_PYTHON) $< \ |
b1fb9a63 | 98 | $(if $(V)$(DEBUG), --debug) \ |
92fecad3 | 99 | $(if $(GENISOIMAGE),--genisoimage $(GENISOIMAGE)) \ |
e56c4504 | 100 | $(if $(QEMU_LOCAL),--build-path $(BUILD_DIR)) \ |
13336606 | 101 | $(if $(EFI_AARCH64),--efi-aarch64 $(EFI_AARCH64)) \ |
ff14ab0c | 102 | $(if $(LOG_CONSOLE),--log-console) \ |
7bb17a92 | 103 | --source-path $(SRC_PATH) \ |
b1fb9a63 | 104 | --image "$@" \ |
151b7dba | 105 | $(if $(filter-out check-venv, $?), --force) \ |
b1fb9a63 FZ |
106 | --build-image $@, \ |
107 | " VM-IMAGE $*") | |
108 | ||
b1fb9a63 | 109 | # Build in VM $(IMAGE) |
39735a91 | 110 | vm-build-%: $(IMAGES_DIR)/%.img $(VM_VENV) |
b1fb9a63 | 111 | $(call quiet-command, \ |
39735a91 | 112 | $(VM_PYTHON) $(SRC_PATH)/tests/vm/$* \ |
b1fb9a63 FZ |
113 | $(if $(V)$(DEBUG), --debug) \ |
114 | $(if $(DEBUG), --interactive) \ | |
115 | $(if $(J),--jobs $(J)) \ | |
41e3340a | 116 | $(if $(V),--verbose) \ |
e56c4504 | 117 | $(if $(QEMU_LOCAL),--build-path $(BUILD_DIR)) \ |
13336606 | 118 | $(if $(EFI_AARCH64),--efi-aarch64 $(EFI_AARCH64)) \ |
ff14ab0c | 119 | $(if $(LOG_CONSOLE),--log-console) \ |
b1fb9a63 | 120 | --image "$<" \ |
ddafa31f | 121 | $(if $(BUILD_TARGET),--build-target $(BUILD_TARGET)) \ |
7f71d505 | 122 | --snapshot \ |
ddafa31f AB |
123 | --build-qemu $(SRC_PATH) -- \ |
124 | $(if $(TARGET_LIST),--target-list=$(TARGET_LIST)) \ | |
125 | $(if $(EXTRA_CONFIGURE_OPTS),$(EXTRA_CONFIGURE_OPTS)), \ | |
b1fb9a63 FZ |
126 | " VM-BUILD $*") |
127 | ||
b1210f02 GH |
128 | vm-boot-serial-%: $(IMAGES_DIR)/%.img |
129 | qemu-system-x86_64 -enable-kvm -m 4G -smp 2 -nographic \ | |
130 | -drive if=none,id=vblk,cache=writeback,file="$<" \ | |
131 | -netdev user,id=vnet \ | |
132 | -device virtio-blk-pci,drive=vblk \ | |
133 | -device virtio-net-pci,netdev=vnet \ | |
134 | || true | |
135 | ||
39735a91 | 136 | vm-boot-ssh-%: $(IMAGES_DIR)/%.img $(VM_VENV) |
b1210f02 | 137 | $(call quiet-command, \ |
39735a91 | 138 | $(VM_PYTHON) $(SRC_PATH)/tests/vm/$* \ |
46313326 | 139 | $(if $(J),--jobs $(J)) \ |
d5326a24 | 140 | $(if $(V)$(DEBUG), --debug) \ |
e56c4504 | 141 | $(if $(QEMU_LOCAL),--build-path $(BUILD_DIR)) \ |
13336606 | 142 | $(if $(EFI_AARCH64),--efi-aarch64 $(EFI_AARCH64)) \ |
ff14ab0c | 143 | $(if $(LOG_CONSOLE),--log-console) \ |
b1210f02 GH |
144 | --image "$<" \ |
145 | --interactive \ | |
146 | false, \ | |
147 | " VM-BOOT-SSH $*") || true |