| # Copyright 2021 The ChromiumOS Authors |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| # |
| # Builds the base image for test VMs used by ./tools/x86vm and |
| # ./tools/aarch64vm. |
| # |
| # To build and upload a new base image, uprev the version in the `version` file |
| # and run: |
| # |
| # make ARCH=x86_64 upload |
| # make ARCH=aarch64 upload |
| # |
| # You need write access to the crosvm-testvm storage bucket which is part of the |
| # crosvm-packages cloud project. |
| # |
| # Note: The locally built image is stored in the same place that testvm.py |
| # expects. So the image can be tested directly: |
| # |
| # make -C tools/impl/testvm ARCH=x86_64 |
| # ./tools/x86vm run |
| |
| CARGO_TARGET=$(shell cargo metadata --no-deps --format-version 1 | \ |
| jq -r ".target_directory") |
| TARGET=/tmp/crosvm_tools/$(ARCH) |
| $(shell mkdir -p $(TARGET)) |
| |
| ifeq ($(ARCH), x86_64) |
| DEBIAN_ARCH=amd64 |
| QEMU_CMD=qemu-system-x86_64 \ |
| -cpu host \ |
| -enable-kvm |
| else ifeq ($(ARCH), aarch64) |
| DEBIAN_ARCH=arm64 |
| QEMU_CMD=qemu-system-aarch64 \ |
| -cpu cortex-a57 \ |
| -M virt \ |
| -bios /usr/share/qemu-efi-aarch64/QEMU_EFI.fd |
| else |
| $(error Only x86_64 or aarch64 are supported) |
| endif |
| |
| GS_PREFIX=gs://crosvm/testvm |
| DEBIAN_URL=https://cloud.debian.org/images/cloud/trixie/daily/latest/ |
| |
| BASE_IMG_NAME=base-$(ARCH)-$(shell cat version).qcow2 |
| GS_URL=$(GS_PREFIX)/$(BASE_IMG_NAME) |
| LOCAL_IMAGE=$(TARGET)/$(BASE_IMG_NAME) |
| |
| all: $(LOCAL_IMAGE) |
| |
| clean: |
| rm -rf $(TARGET) |
| |
| # Upload images to cloud storage. Do not overwrite existing images, uprev |
| # `image_version` instead. |
| upload: $(LOCAL_IMAGE) |
| gsutil cp -n $(LOCAL_IMAGE) $(GS_URL) |
| |
| # Download debian bullseye as base image for the testvm. |
| $(TARGET)/debian.qcow2: |
| wget $(DEBIAN_URL)/debian-13-generic-$(DEBIAN_ARCH)-daily.qcow2 -O $@.tmp |
| qemu-img resize $@.tmp 8G |
| mv $@.tmp $@ |
| |
| # The cloud init file contains instructions for how to set up the VM when it's |
| # first booted. |
| $(TARGET)/clould_init.img: cloud_init.yaml |
| cloud-localds -v $@ $< |
| |
| # Boot image to run through clould-init process. |
| # cloud-init will shut down the VM after initialization. Compress the image |
| # afterwards for distribution. |
| $(LOCAL_IMAGE): $(TARGET)/clould_init.img $(TARGET)/debian.qcow2 |
| cp -f $(TARGET)/debian.qcow2 $@ |
| $(QEMU_CMD) \ |
| -m 4G -smp 8 \ |
| -display none \ |
| -serial stdio \ |
| -drive file=$@,format=qcow2,index=0,media=disk \ |
| -drive file=$(TARGET)/clould_init.img,format=raw,index=1,media=disk |
| qemu-img convert -O qcow2 -c $@ $@-compressed |
| mv -f $@-compressed $@ |