xref: /aosp_15_r20/external/crosvm/tools/impl/testvm/Makefile (revision bb4ee6a4ae7042d18b07a98463b9c8b875e44b39)
1*bb4ee6a4SAndroid Build Coastguard Worker# Copyright 2021 The ChromiumOS Authors
2*bb4ee6a4SAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be
3*bb4ee6a4SAndroid Build Coastguard Worker# found in the LICENSE file.
4*bb4ee6a4SAndroid Build Coastguard Worker#
5*bb4ee6a4SAndroid Build Coastguard Worker# Builds the base image for test VMs used by ./tools/x86vm and
6*bb4ee6a4SAndroid Build Coastguard Worker# ./tools/aarch64vm.
7*bb4ee6a4SAndroid Build Coastguard Worker#
8*bb4ee6a4SAndroid Build Coastguard Worker# To build and upload a new base image, uprev the version in the `version` file
9*bb4ee6a4SAndroid Build Coastguard Worker# and run:
10*bb4ee6a4SAndroid Build Coastguard Worker#
11*bb4ee6a4SAndroid Build Coastguard Worker#   make ARCH=x86_64 upload
12*bb4ee6a4SAndroid Build Coastguard Worker#   make ARCH=aarch64 upload
13*bb4ee6a4SAndroid Build Coastguard Worker#
14*bb4ee6a4SAndroid Build Coastguard Worker# You need write access to the crosvm-testvm storage bucket which is part of the
15*bb4ee6a4SAndroid Build Coastguard Worker# crosvm-packages cloud project.
16*bb4ee6a4SAndroid Build Coastguard Worker#
17*bb4ee6a4SAndroid Build Coastguard Worker# Note: The locally built image is stored in the same place that testvm.py
18*bb4ee6a4SAndroid Build Coastguard Worker# expects. So the image can be tested directly:
19*bb4ee6a4SAndroid Build Coastguard Worker#
20*bb4ee6a4SAndroid Build Coastguard Worker#   make -C tools/impl/testvm ARCH=x86_64
21*bb4ee6a4SAndroid Build Coastguard Worker#   ./tools/x86vm run
22*bb4ee6a4SAndroid Build Coastguard Worker
23*bb4ee6a4SAndroid Build Coastguard WorkerCARGO_TARGET=$(shell cargo metadata --no-deps --format-version 1 | \
24*bb4ee6a4SAndroid Build Coastguard Worker	jq -r ".target_directory")
25*bb4ee6a4SAndroid Build Coastguard WorkerTARGET=/tmp/crosvm_tools/$(ARCH)
26*bb4ee6a4SAndroid Build Coastguard Worker$(shell mkdir -p $(TARGET))
27*bb4ee6a4SAndroid Build Coastguard Worker
28*bb4ee6a4SAndroid Build Coastguard Workerifeq ($(ARCH), x86_64)
29*bb4ee6a4SAndroid Build Coastguard Worker  DEBIAN_ARCH=amd64
30*bb4ee6a4SAndroid Build Coastguard Worker  QEMU_CMD=qemu-system-x86_64 \
31*bb4ee6a4SAndroid Build Coastguard Worker		-cpu host \
32*bb4ee6a4SAndroid Build Coastguard Worker		-enable-kvm
33*bb4ee6a4SAndroid Build Coastguard Workerelse ifeq ($(ARCH), aarch64)
34*bb4ee6a4SAndroid Build Coastguard Worker  DEBIAN_ARCH=arm64
35*bb4ee6a4SAndroid Build Coastguard Worker  QEMU_CMD=qemu-system-aarch64 \
36*bb4ee6a4SAndroid Build Coastguard Worker		-cpu cortex-a57 \
37*bb4ee6a4SAndroid Build Coastguard Worker		-M virt \
38*bb4ee6a4SAndroid Build Coastguard Worker		-bios /usr/share/qemu-efi-aarch64/QEMU_EFI.fd
39*bb4ee6a4SAndroid Build Coastguard Workerelse
40*bb4ee6a4SAndroid Build Coastguard Worker  $(error Only x86_64 or aarch64 are supported)
41*bb4ee6a4SAndroid Build Coastguard Workerendif
42*bb4ee6a4SAndroid Build Coastguard Worker
43*bb4ee6a4SAndroid Build Coastguard WorkerGS_PREFIX=gs://crosvm/testvm
44*bb4ee6a4SAndroid Build Coastguard WorkerDEBIAN_URL=https://cloud.debian.org/images/cloud/trixie/daily/latest/
45*bb4ee6a4SAndroid Build Coastguard Worker
46*bb4ee6a4SAndroid Build Coastguard WorkerBASE_IMG_NAME=base-$(ARCH)-$(shell cat version).qcow2
47*bb4ee6a4SAndroid Build Coastguard WorkerGS_URL=$(GS_PREFIX)/$(BASE_IMG_NAME)
48*bb4ee6a4SAndroid Build Coastguard WorkerLOCAL_IMAGE=$(TARGET)/$(BASE_IMG_NAME)
49*bb4ee6a4SAndroid Build Coastguard Worker
50*bb4ee6a4SAndroid Build Coastguard Workerall: $(LOCAL_IMAGE)
51*bb4ee6a4SAndroid Build Coastguard Worker
52*bb4ee6a4SAndroid Build Coastguard Workerclean:
53*bb4ee6a4SAndroid Build Coastguard Worker	rm -rf $(TARGET)
54*bb4ee6a4SAndroid Build Coastguard Worker
55*bb4ee6a4SAndroid Build Coastguard Worker# Upload images to cloud storage. Do not overwrite existing images, uprev
56*bb4ee6a4SAndroid Build Coastguard Worker# `image_version` instead.
57*bb4ee6a4SAndroid Build Coastguard Workerupload: $(LOCAL_IMAGE)
58*bb4ee6a4SAndroid Build Coastguard Worker	gsutil cp -n $(LOCAL_IMAGE) $(GS_URL)
59*bb4ee6a4SAndroid Build Coastguard Worker
60*bb4ee6a4SAndroid Build Coastguard Worker# Download debian bullseye as base image for the testvm.
61*bb4ee6a4SAndroid Build Coastguard Worker$(TARGET)/debian.qcow2:
62*bb4ee6a4SAndroid Build Coastguard Worker	wget $(DEBIAN_URL)/debian-13-generic-$(DEBIAN_ARCH)-daily.qcow2 -O $@.tmp
63*bb4ee6a4SAndroid Build Coastguard Worker	qemu-img resize $@.tmp 8G
64*bb4ee6a4SAndroid Build Coastguard Worker	mv $@.tmp $@
65*bb4ee6a4SAndroid Build Coastguard Worker
66*bb4ee6a4SAndroid Build Coastguard Worker# The cloud init file contains instructions for how to set up the VM when it's
67*bb4ee6a4SAndroid Build Coastguard Worker# first booted.
68*bb4ee6a4SAndroid Build Coastguard Worker$(TARGET)/clould_init.img: cloud_init.yaml
69*bb4ee6a4SAndroid Build Coastguard Worker	cloud-localds -v $@ $<
70*bb4ee6a4SAndroid Build Coastguard Worker
71*bb4ee6a4SAndroid Build Coastguard Worker# Boot image to run through clould-init process.
72*bb4ee6a4SAndroid Build Coastguard Worker# cloud-init will shut down the VM after initialization. Compress the image
73*bb4ee6a4SAndroid Build Coastguard Worker# afterwards for distribution.
74*bb4ee6a4SAndroid Build Coastguard Worker$(LOCAL_IMAGE): $(TARGET)/clould_init.img $(TARGET)/debian.qcow2
75*bb4ee6a4SAndroid Build Coastguard Worker	cp -f $(TARGET)/debian.qcow2 $@
76*bb4ee6a4SAndroid Build Coastguard Worker	$(QEMU_CMD) \
77*bb4ee6a4SAndroid Build Coastguard Worker		-m 4G -smp 8 \
78*bb4ee6a4SAndroid Build Coastguard Worker		-display none \
79*bb4ee6a4SAndroid Build Coastguard Worker		-serial stdio \
80*bb4ee6a4SAndroid Build Coastguard Worker		-drive file=$@,format=qcow2,index=0,media=disk \
81*bb4ee6a4SAndroid Build Coastguard Worker		-drive file=$(TARGET)/clould_init.img,format=raw,index=1,media=disk
82*bb4ee6a4SAndroid Build Coastguard Worker	qemu-img convert -O qcow2 -c $@ $@-compressed
83*bb4ee6a4SAndroid Build Coastguard Worker	mv -f $@-compressed $@
84