aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Macnak <natsu@google.com>2023-08-03 17:01:36 -0700
committerJason Macnak <natsu@google.com>2023-08-07 10:12:20 -0700
commit749c51d74f4db9b5d62880d6b6416c08d9fd7897 (patch)
tree51e133739081d2b6a897b90a723819efd6ca403c
parentcd97af4f4283d2c386c5e76aeac953118807c8a9 (diff)
downloadcuttlefish_vmm-749c51d74f4db9b5d62880d6b6416c08d9fd7897.tar.gz
Revert "Delete device/google/cuttlefish_vmm"
This reverts commit cd97af4f4283d2c386c5e76aeac953118807c8a9. Bug: b/200592498 Test: see next change Change-Id: Idd8f0a85d2dd294019ca9577ab063c4e6ecde85a
-rw-r--r--Dockerfile87
-rw-r--r--METADATA3
-rw-r--r--OWNERS11
-rw-r--r--aarch64-linux-gnu/Cargo.lock1067
-rw-r--r--aarch64-linux-gnu/builder-packages.txt444
-rw-r--r--aarch64-linux-gnu/cargo_version.txt4
-rw-r--r--aarch64-linux-gnu/rustup_show.txt4
-rwxr-xr-xcheck_links.sh28
-rwxr-xr-xgen_android_bp.sh141
-rwxr-xr-xgenerate-gfxstream-manifest.sh31
-rw-r--r--manifest.xml49
-rwxr-xr-xrebuild-docker.sh149
-rwxr-xr-xrebuild-internal.sh399
-rwxr-xr-xrebuild.sh423
-rwxr-xr-xupdate-manifest-gfxstream.py122
-rw-r--r--x86_64-linux-gnu/Cargo.lock982
-rw-r--r--x86_64-linux-gnu/builder-packages.txt515
-rw-r--r--x86_64-linux-gnu/builder_image.txt1
-rw-r--r--x86_64-linux-gnu/cargo_version.txt4
-rw-r--r--x86_64-linux-gnu/rustup_show.txt14
20 files changed, 4478 insertions, 0 deletions
diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 0000000..dee59ae
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,87 @@
+FROM debian:buster-slim AS docker_vmm
+
+ENV container docker
+ENV LC_ALL C.UTF-8
+ENV DEBIAN_FRONTEND noninteractive
+
+SHELL [ "/bin/bash", "-c" ]
+
+# Set up the user to be the same as the user creating the container. Not
+# strictly necessary, but this way all the permissions of the generated files
+# will match.
+
+ARG USER
+ARG UID
+
+ENV USER $USER
+ENV HOME /home/$USER
+ENV CUSTOM_MANIFEST ""
+
+RUN apt update \
+ && apt install -y sudo
+
+RUN useradd -m -s /bin/bash $USER -u $UID -d $HOME \
+ && passwd -d $USER \
+ && echo "$USER ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
+
+RUN mkdir /source && chown -R $USER /source
+RUN mkdir /output && chown -R $USER /output
+RUN mkdir /working && chown -R $USER /working
+RUN mkdir /static && chown -R $USER /static
+
+USER $USER
+WORKDIR $HOME
+
+COPY --chown=$USER manifest.xml /static/manifest.xml
+COPY --chown=$USER custom.xml /static/custom.xml
+COPY --chown=$USER rebuild-internal.sh /static/rebuild-internal.sh
+
+RUN TOOLS_DIR=/static/tools /static/rebuild-internal.sh install_packages
+
+VOLUME /source
+VOLUME /working
+VOLUME /output
+
+FROM docker_vmm AS docker_vmm_persistent
+
+ENV container docker
+ENV LC_ALL C.UTF-8
+ENV DEBIAN_FRONTEND noninteractive
+
+SHELL [ "/bin/bash", "-c" ]
+
+USER root
+
+# Containers built from this image are meant to persist, once started. A user
+# account is created on them where the work of building crosvm is carried out,
+# persistently.
+
+RUN apt-get update \
+ && apt-get install -y systemd \
+ && apt-get clean \
+ && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* \
+ && rm -f /var/run/nologin
+
+RUN rm -f /lib/systemd/system/multi-user.target.wants/* \
+ /etc/systemd/system/*.wants/* \
+ /lib/systemd/system/local-fs.target.wants/* \
+ /lib/systemd/system/sockets.target.wants/*udev* \
+ /lib/systemd/system/sockets.target.wants/*initctl* \
+ /lib/systemd/system/sysinit.target.wants/systemd-tmpfiles-setup* \
+ /lib/systemd/system/systemd-update-utmp*
+
+VOLUME [ "/sys/fs/cgroup" ]
+
+CMD ["/lib/systemd/systemd"]
+
+RUN apt update \
+ && apt install -y apt-utils sudo dpkg-dev coreutils \
+ openssh-server openssh-client psmisc iptables iproute2 dnsmasq \
+ net-tools rsyslog equivs
+
+RUN apt install -y dialog
+
+RUN sed -i -r -e 's/^#{0,1}\s*PasswordAuthentication\s+(yes|no)/PasswordAuthentication yes/g' /etc/ssh/sshd_config \
+ && sed -i -r -e 's/^#{0,1}\s*PermitEmptyPasswords\s+(yes|no)/PermitEmptyPasswords yes/g' /etc/ssh/sshd_config \
+ && sed -i -r -e 's/^#{0,1}\s*ChallengeResponseAuthentication\s+(yes|no)/ChallengeResponseAuthentication no/g' /etc/ssh/sshd_config \
+ && sed -i -r -e 's/^#{0,1}\s*UsePAM\s+(yes|no)/UsePAM no/g' /etc/ssh/sshd_config
diff --git a/METADATA b/METADATA
new file mode 100644
index 0000000..d97975c
--- /dev/null
+++ b/METADATA
@@ -0,0 +1,3 @@
+third_party {
+ license_type: NOTICE
+}
diff --git a/OWNERS b/OWNERS
new file mode 100644
index 0000000..1944029
--- /dev/null
+++ b/OWNERS
@@ -0,0 +1,11 @@
+# Current team members
+adelva@google.com
+jemoreira@google.com
+malchev@google.com
+muntsinger@google.com
+natsu@google.com
+rammuthiah@google.com
+schuffelen@google.com
+
+# Former team members
+ghartman@google.com
diff --git a/aarch64-linux-gnu/Cargo.lock b/aarch64-linux-gnu/Cargo.lock
new file mode 100644
index 0000000..bc97430
--- /dev/null
+++ b/aarch64-linux-gnu/Cargo.lock
@@ -0,0 +1,1067 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "aarch64"
+version = "0.1.0"
+dependencies = [
+ "arch",
+ "base",
+ "data_model",
+ "devices",
+ "hypervisor",
+ "kernel_cmdline",
+ "kvm",
+ "kvm_sys",
+ "libc",
+ "minijail",
+ "remain",
+ "resources",
+ "sync",
+ "vm_control",
+ "vm_memory",
+]
+
+[[package]]
+name = "acpi_tables"
+version = "0.1.0"
+dependencies = [
+ "data_model",
+]
+
+[[package]]
+name = "android_log-sys"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85965b6739a430150bdd138e2374a98af0c3ee0d030b3bb7fc3bddff58d0102e"
+
+[[package]]
+name = "arch"
+version = "0.1.0"
+dependencies = [
+ "acpi_tables",
+ "base",
+ "devices",
+ "hypervisor",
+ "kernel_cmdline",
+ "libc",
+ "minijail",
+ "resources",
+ "sync",
+ "vm_control",
+ "vm_memory",
+]
+
+[[package]]
+name = "assertions"
+version = "0.1.0"
+
+[[package]]
+name = "async-trait"
+version = "0.1.41"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b246867b8b3b6ae56035f1eb1ed557c1d8eae97f0d53696138a50fa0e3a3b8c0"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "audio_streams"
+version = "0.1.0"
+dependencies = [
+ "sync",
+ "sys_util",
+]
+
+[[package]]
+name = "base"
+version = "0.1.0"
+dependencies = [
+ "sys_util",
+]
+
+[[package]]
+name = "bit_field"
+version = "0.1.0"
+dependencies = [
+ "bit_field_derive",
+]
+
+[[package]]
+name = "bit_field_derive"
+version = "0.1.0"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "bitflags"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693"
+
+[[package]]
+name = "cc"
+version = "1.0.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f159dfd43363c4d08055a07703eb7a3406b0dac4d0584d96965a3262db3c9d16"
+
+[[package]]
+name = "cfg-if"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
+
+[[package]]
+name = "cras-sys"
+version = "0.1.0"
+dependencies = [
+ "audio_streams",
+ "data_model",
+]
+
+[[package]]
+name = "cros_async"
+version = "0.1.0"
+dependencies = [
+ "base",
+ "futures",
+ "io_uring",
+ "libc",
+ "paste",
+ "pin-utils",
+ "slab",
+ "syscall_defines",
+]
+
+[[package]]
+name = "crosvm"
+version = "0.1.0"
+dependencies = [
+ "aarch64",
+ "acpi_tables",
+ "arch",
+ "assertions",
+ "audio_streams",
+ "base",
+ "bit_field",
+ "crosvm_plugin",
+ "data_model",
+ "devices",
+ "disk",
+ "enumn",
+ "gpu_buffer",
+ "gpu_renderer",
+ "hypervisor",
+ "kernel_cmdline",
+ "kernel_loader",
+ "kvm",
+ "kvm_sys",
+ "libc",
+ "libcras",
+ "minijail",
+ "msg_socket",
+ "net_util",
+ "p9",
+ "protobuf",
+ "protos",
+ "rand_ish",
+ "remain",
+ "resources",
+ "sync",
+ "vhost",
+ "vm_control",
+ "vm_memory",
+ "x86_64",
+]
+
+[[package]]
+name = "crosvm_plugin"
+version = "0.17.0"
+dependencies = [
+ "base",
+ "kvm",
+ "kvm_sys",
+ "libc",
+ "protobuf",
+ "protos",
+]
+
+[[package]]
+name = "data_model"
+version = "0.1.0"
+dependencies = [
+ "assertions",
+ "libc",
+]
+
+[[package]]
+name = "devices"
+version = "0.1.0"
+dependencies = [
+ "acpi_tables",
+ "audio_streams",
+ "base",
+ "bit_field",
+ "bitflags",
+ "cros_async",
+ "data_model",
+ "disk",
+ "enumn",
+ "gpu_buffer",
+ "gpu_display",
+ "gpu_renderer",
+ "hypervisor",
+ "kvm_sys",
+ "libc",
+ "libcras",
+ "linux_input_sys",
+ "minijail",
+ "msg_on_socket_derive",
+ "msg_socket",
+ "net_sys",
+ "net_util",
+ "p9",
+ "protos",
+ "rand_ish",
+ "remain",
+ "resources",
+ "sync",
+ "syscall_defines",
+ "tempfile 3.0.7",
+ "tpm2",
+ "usb_util",
+ "vfio_sys",
+ "vhost",
+ "virtio_sys",
+ "vm_control",
+ "vm_memory",
+]
+
+[[package]]
+name = "disk"
+version = "0.1.0"
+dependencies = [
+ "async-trait",
+ "base",
+ "cros_async",
+ "data_model",
+ "futures",
+ "libc",
+ "protobuf",
+ "protos",
+ "remain",
+ "vm_memory",
+]
+
+[[package]]
+name = "enumn"
+version = "0.1.0"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "futures"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5d8e3078b7b2a8a671cb7a3d17b4760e4181ea243227776ba83fd043b4ca034e"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-executor",
+ "futures-io",
+ "futures-sink",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-channel"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a7a4d35f7401e948629c9c3d6638fb9bf94e0b2121e96c3b428cc4e631f3eb74"
+dependencies = [
+ "futures-core",
+ "futures-sink",
+]
+
+[[package]]
+name = "futures-core"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d674eaa0056896d5ada519900dbf97ead2e46a7b6621e8160d79e2f2e1e2784b"
+
+[[package]]
+name = "futures-executor"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cc709ca1da6f66143b8c9bec8e6260181869893714e9b5a490b169b0414144ab"
+dependencies = [
+ "futures-core",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-io"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5fc94b64bb39543b4e432f1790b6bf18e3ee3b74653c5449f63310e9a74b123c"
+
+[[package]]
+name = "futures-macro"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f57ed14da4603b2554682e9f2ff3c65d7567b53188db96cb71538217fc64581b"
+dependencies = [
+ "proc-macro-hack",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "futures-sink"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d8764258ed64ebc5d9ed185cf86a95db5cac810269c5d20ececb32e0088abbd"
+
+[[package]]
+name = "futures-task"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4dd26820a9f3637f1302da8bceba3ff33adbe53464b54ca24d4e2d4f1db30f94"
+dependencies = [
+ "once_cell",
+]
+
+[[package]]
+name = "futures-util"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a894a0acddba51a2d49a6f4263b1e64b8c579ece8af50fa86503d52cd1eea34"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-macro",
+ "futures-sink",
+ "futures-task",
+ "memchr",
+ "pin-project",
+ "pin-utils",
+ "proc-macro-hack",
+ "proc-macro-nested",
+ "slab",
+]
+
+[[package]]
+name = "getopts"
+version = "0.2.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14dbbfd5c71d70241ecf9e6f13737f7b5ce823821063188d7e46c41d371eebd5"
+dependencies = [
+ "unicode-width",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.1.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fc587bc0ec293155d5bfa6b9891ec18a1e330c234f896ea47fbada4cadbe47e6"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi",
+]
+
+[[package]]
+name = "gpu_buffer"
+version = "0.1.0"
+dependencies = [
+ "base",
+ "data_model",
+]
+
+[[package]]
+name = "gpu_display"
+version = "0.1.0"
+dependencies = [
+ "base",
+ "cc",
+ "data_model",
+ "libc",
+ "linux_input_sys",
+]
+
+[[package]]
+name = "gpu_renderer"
+version = "0.1.0"
+dependencies = [
+ "base",
+ "data_model",
+ "libc",
+ "vm_memory",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.1.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5aca5565f760fb5b220e499d72710ed156fdb74e631659e99377d9ebfbd13ae8"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "hypervisor"
+version = "0.1.0"
+dependencies = [
+ "base",
+ "bit_field",
+ "data_model",
+ "enumn",
+ "kvm",
+ "kvm_sys",
+ "libc",
+ "msg_socket",
+ "sync",
+ "vm_memory",
+]
+
+[[package]]
+name = "io_uring"
+version = "0.1.0"
+dependencies = [
+ "base",
+ "libc",
+ "syscall_defines",
+]
+
+[[package]]
+name = "kernel_cmdline"
+version = "0.1.0"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "kernel_loader"
+version = "0.1.0"
+dependencies = [
+ "base",
+ "libc",
+ "vm_memory",
+]
+
+[[package]]
+name = "kvm"
+version = "0.1.0"
+dependencies = [
+ "base",
+ "data_model",
+ "kvm_sys",
+ "libc",
+ "msg_socket",
+ "sync",
+ "vm_memory",
+]
+
+[[package]]
+name = "kvm_sys"
+version = "0.1.0"
+dependencies = [
+ "base",
+ "libc",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.79"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2448f6066e80e3bfc792e9c98bf705b4b0fc6e8ef5b43e5889aff0eaa9c58743"
+
+[[package]]
+name = "libcras"
+version = "0.1.0"
+dependencies = [
+ "audio_streams",
+ "cras-sys",
+ "data_model",
+ "libc",
+ "sys_util",
+]
+
+[[package]]
+name = "linux_input_sys"
+version = "0.1.0"
+dependencies = [
+ "base",
+ "data_model",
+ "libc",
+]
+
+[[package]]
+name = "log"
+version = "0.4.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4fabed175da42fed1fa0746b0ea71f412aa9d35e76e95e59b192c64b9dc2bf8b"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "memchr"
+version = "2.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3728d817d99e5ac407411fa471ff9800a778d88a24685968b36824eaf4bee400"
+
+[[package]]
+name = "minijail"
+version = "0.2.1"
+dependencies = [
+ "libc",
+ "minijail-sys",
+]
+
+[[package]]
+name = "minijail-sys"
+version = "0.0.11"
+dependencies = [
+ "libc",
+ "pkg-config",
+]
+
+[[package]]
+name = "msg_on_socket_derive"
+version = "0.1.0"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "msg_socket"
+version = "0.1.0"
+dependencies = [
+ "base",
+ "cros_async",
+ "data_model",
+ "futures",
+ "libc",
+ "msg_on_socket_derive",
+ "sync",
+]
+
+[[package]]
+name = "net_sys"
+version = "0.1.0"
+dependencies = [
+ "base",
+]
+
+[[package]]
+name = "net_util"
+version = "0.1.0"
+dependencies = [
+ "base",
+ "data_model",
+ "libc",
+ "net_sys",
+]
+
+[[package]]
+name = "num_cpus"
+version = "1.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05499f3756671c15885fee9034446956fff3f243d6077b91e5767df161f766b3"
+dependencies = [
+ "hermit-abi",
+ "libc",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "260e51e7efe62b592207e9e13a68e43692a7a279171d6ba57abd208bf23645ad"
+
+[[package]]
+name = "p9"
+version = "0.1.0"
+dependencies = [
+ "libc",
+ "wire_format_derive",
+]
+
+[[package]]
+name = "paste"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0520af26d4cf99643dbbe093a61507922b57232d9978d8491fdc8f7b44573c8c"
+
+[[package]]
+name = "pin-project"
+version = "0.4.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2ffbc8e94b38ea3d2d8ba92aea2983b503cd75d0888d75b86bb37970b5698e15"
+dependencies = [
+ "pin-project-internal",
+]
+
+[[package]]
+name = "pin-project-internal"
+version = "0.4.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "65ad2ae56b6abe3a1ee25f15ee605bacadb9a764edaba9c2bf4103800d4a1895"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "pin-utils"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
+
+[[package]]
+name = "pkg-config"
+version = "0.3.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3831453b3449ceb48b6d9c7ad7c96d5ea673e9b470a1dc578c2ce6521230884c"
+
+[[package]]
+name = "poll_token_derive"
+version = "0.1.0"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c36fa947111f5c62a733b652544dd0016a43ce89619538a8ef92724a6f501a20"
+
+[[package]]
+name = "proc-macro-hack"
+version = "0.5.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "99c605b9a0adc77b7211c6b1f722dcb613d68d66859a44f3d485a6da332b0598"
+
+[[package]]
+name = "proc-macro-nested"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eba180dafb9038b050a4c280019bbedf9f2467b61e5d892dcad585bb57aadc5a"
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e0704ee1a7e00d7bb417d0770ea303c1bccbabf0ef1667dae92b5967f5f8a71"
+dependencies = [
+ "unicode-xid",
+]
+
+[[package]]
+name = "protobuf"
+version = "2.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d147edb77bcccbfc81fabffdc7bd50c13e103b15ca1e27515fe40de69a5776b"
+
+[[package]]
+name = "protobuf-codegen"
+version = "2.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e81f70c25aab9506f87253c55f7cdcd8917635d5597382958d20025c211bbbd"
+dependencies = [
+ "protobuf",
+]
+
+[[package]]
+name = "protoc"
+version = "2.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57408af2c106a7f08cc61e15be6a31e3ace8ea26f90dd1be1ad19abf1073d36a"
+dependencies = [
+ "log",
+ "which",
+]
+
+[[package]]
+name = "protoc-rust"
+version = "2.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "21c1582ff3efeccef1385b1c2dfaf4a9b5bc7794865624fc2a3ca9dff1145fa1"
+dependencies = [
+ "protobuf",
+ "protobuf-codegen",
+ "protoc",
+ "tempfile 3.1.0",
+]
+
+[[package]]
+name = "protos"
+version = "0.1.0"
+dependencies = [
+ "kvm_sys",
+ "protobuf",
+ "protoc-rust",
+]
+
+[[package]]
+name = "qcow_utils"
+version = "0.1.0"
+dependencies = [
+ "base",
+ "disk",
+ "getopts",
+ "libc",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa563d17ecb180e500da1cfd2b028310ac758de548efdd203e18f283af693f37"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "rand"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03"
+dependencies = [
+ "getrandom",
+ "libc",
+ "rand_chacha",
+ "rand_core",
+ "rand_hc",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402"
+dependencies = [
+ "ppv-lite86",
+ "rand_core",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "rand_hc"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c"
+dependencies = [
+ "rand_core",
+]
+
+[[package]]
+name = "rand_ish"
+version = "0.1.0"
+
+[[package]]
+name = "redox_syscall"
+version = "0.1.57"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "41cc0f7e4d5d4544e8861606a285bb08d3e70712ccc7d2b84d7c0ccfaf4b05ce"
+
+[[package]]
+name = "remain"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "70ba1e78fa68412cb93ef642fd4d20b9a941be49ee9333875ebaf13112673ea7"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "remove_dir_all"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "resources"
+version = "0.1.0"
+dependencies = [
+ "base",
+ "gpu_buffer",
+ "libc",
+ "msg_socket",
+]
+
+[[package]]
+name = "slab"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8"
+
+[[package]]
+name = "syn"
+version = "1.0.45"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ea9c5432ff16d6152371f808fb5a871cd67368171b09bb21b43df8e4a47a3556"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-xid",
+]
+
+[[package]]
+name = "sync"
+version = "0.1.0"
+
+[[package]]
+name = "sys_util"
+version = "0.1.0"
+dependencies = [
+ "android_log-sys",
+ "data_model",
+ "libc",
+ "poll_token_derive",
+ "sync",
+ "syscall_defines",
+ "tempfile 3.0.7",
+]
+
+[[package]]
+name = "syscall_defines"
+version = "0.1.0"
+
+[[package]]
+name = "tempfile"
+version = "3.0.7"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "tempfile"
+version = "3.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a6e24d9338a0a5be79593e2fa15a648add6138caa803e2d5bc782c371732ca9"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "rand",
+ "redox_syscall",
+ "remove_dir_all",
+ "winapi",
+]
+
+[[package]]
+name = "thiserror"
+version = "1.0.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "318234ffa22e0920fe9a40d7b8369b5f649d490980cf7aadcf1eb91594869b42"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cae2447b6282786c3493999f40a9be2a6ad20cb8bd268b0a0dbf5a065535c0ab"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "tpm2"
+version = "0.1.0"
+dependencies = [
+ "tpm2-sys",
+]
+
+[[package]]
+name = "tpm2-sys"
+version = "0.1.0"
+dependencies = [
+ "num_cpus",
+ "pkg-config",
+]
+
+[[package]]
+name = "unicode-width"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9337591893a19b88d8d87f2cec1e73fad5cdfd10e5a6f349f498ad6ea2ffb1e3"
+
+[[package]]
+name = "unicode-xid"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f7fe0bb3479651439c9112f72b6c505038574c9fbb575ed1bf3b797fa39dd564"
+
+[[package]]
+name = "usb_sys"
+version = "0.1.0"
+dependencies = [
+ "base",
+]
+
+[[package]]
+name = "usb_util"
+version = "0.1.0"
+dependencies = [
+ "assertions",
+ "base",
+ "data_model",
+ "libc",
+ "remain",
+ "usb_sys",
+]
+
+[[package]]
+name = "vfio_sys"
+version = "0.1.0"
+dependencies = [
+ "base",
+]
+
+[[package]]
+name = "vhost"
+version = "0.1.0"
+dependencies = [
+ "assertions",
+ "base",
+ "libc",
+ "net_util",
+ "virtio_sys",
+ "vm_memory",
+]
+
+[[package]]
+name = "virtio_sys"
+version = "0.1.0"
+dependencies = [
+ "base",
+]
+
+[[package]]
+name = "vm_control"
+version = "0.1.0"
+dependencies = [
+ "base",
+ "data_model",
+ "hypervisor",
+ "libc",
+ "msg_socket",
+ "resources",
+ "sync",
+ "vm_memory",
+]
+
+[[package]]
+name = "vm_memory"
+version = "0.1.0"
+dependencies = [
+ "base",
+ "cros_async",
+ "data_model",
+ "libc",
+ "syscall_defines",
+]
+
+[[package]]
+name = "wasi"
+version = "0.9.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519"
+
+[[package]]
+name = "which"
+version = "4.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87c14ef7e1b8b8ecfc75d5eca37949410046e66f15d185c01d70824f1f8111ef"
+dependencies = [
+ "libc",
+ "thiserror",
+]
+
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+dependencies = [
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
+]
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
+[[package]]
+name = "wire_format_derive"
+version = "0.1.0"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "x86_64"
+version = "0.1.0"
+dependencies = [
+ "acpi_tables",
+ "arch",
+ "assertions",
+ "base",
+ "data_model",
+ "devices",
+ "hypervisor",
+ "kernel_cmdline",
+ "kernel_loader",
+ "libc",
+ "minijail",
+ "remain",
+ "resources",
+ "sync",
+ "vm_control",
+ "vm_memory",
+]
diff --git a/aarch64-linux-gnu/builder-packages.txt b/aarch64-linux-gnu/builder-packages.txt
new file mode 100644
index 0000000..04b2f71
--- /dev/null
+++ b/aarch64-linux-gnu/builder-packages.txt
@@ -0,0 +1,444 @@
+adduser 3.118
+apt 1.8.2.1
+apt-utils 1.8.2.1
+autoconf 2.69-11
+automake 1:1.16.1-4
+autopoint 0.19.8.1-9
+autotools-dev 20180224.1
+base-files 10.3+deb10u6
+base-passwd 3.5.46
+bash 5.0-4
+binutils 2.31.1-16
+binutils-aarch64-linux-gnu 2.31.1-16
+binutils-common:arm64 2.31.1-16
+bsd-mailx 8.1.2-0.20180807cvs-1
+bsdmainutils 11.1.2+b1
+bsdutils 1:2.33.1-0.1
+build-essential 12.6
+bzip2 1.0.6-9.2~deb10u1
+ca-certificates 20200601~deb10u1
+cmake 3.13.4-1
+cmake-data 3.13.4-1
+coreutils 8.30-3
+cpp 4:8.3.0-1
+cpp-8 8.3.0-6
+cron 3.0pl1-134+deb10u1
+curl 7.64.0-4+deb10u1
+dash 0.5.10.2-5
+dbus 1.12.20-0+deb10u1
+debconf 1.5.71
+debhelper 12.1.1
+debian-archive-keyring 2019.1
+debianutils 4.8.6.1
+dh-autoreconf 19
+dh-python 3.20190308
+dh-strip-nondeterminism 1.1.2-1
+dialog 1.3-20190211-1
+diffutils 1:3.7-3
+dirmngr 2.2.12-1+deb10u1
+dmsetup 2:1.02.155-3
+dns-root-data 2019031302
+dnsmasq 2.80-1
+dnsmasq-base 2.80-1
+dpkg 1.19.7
+dpkg-dev 1.19.7
+dwz 0.12-3
+e2fsprogs 1.44.5-1+deb10u3
+equivs 2.2.0
+exim4-base 4.92-8+deb10u4
+exim4-config 4.92-8+deb10u4
+exim4-daemon-light 4.92-8+deb10u4
+fakeroot 1.23-1
+fdisk 2.33.1-0.1
+file 1:5.35-4+deb10u1
+findutils 4.6.0+git+20190209-2
+g++ 4:8.3.0-1
+g++-8 8.3.0-6
+gcc 4:8.3.0-1
+gcc-8 8.3.0-6
+gcc-8-base:arm64 8.3.0-6
+gettext 0.19.8.1-9
+gettext-base 0.19.8.1-9
+gir1.2-glib-2.0:arm64 1.58.3-2
+git 1:2.20.1-2+deb10u3
+git-man 1:2.20.1-2+deb10u3
+gnupg 2.2.12-1+deb10u1
+gnupg-l10n 2.2.12-1+deb10u1
+gnupg-utils 2.2.12-1+deb10u1
+gpg 2.2.12-1+deb10u1
+gpg-agent 2.2.12-1+deb10u1
+gpg-wks-client 2.2.12-1+deb10u1
+gpg-wks-server 2.2.12-1+deb10u1
+gpgconf 2.2.12-1+deb10u1
+gpgsm 2.2.12-1+deb10u1
+gpgv 2.2.12-1+deb10u1
+grep 3.3-1
+groff-base 1.22.4-3
+gzip 1.9-3
+hostname 3.21
+init-system-helpers 1.56+nmu1
+intltool-debian 0.35.0+20060710.5
+iproute2 4.20.0-2
+iptables 1.8.2-4
+krb5-locales 1.17-3
+less 487-0.1+b1
+libacl1:arm64 2.2.53-4
+libalgorithm-diff-perl 1.19.03-2
+libalgorithm-diff-xs-perl 0.04-5+b1
+libalgorithm-merge-perl 0.08-3
+libapparmor1:arm64 2.13.2-10
+libapt-inst2.0:arm64 1.8.2.1
+libapt-pkg5.0:arm64 1.8.2.1
+libarchive-cpio-perl 0.10-1
+libarchive-zip-perl 1.64-1
+libarchive13:arm64 3.3.3-4+deb10u1
+libargon2-1:arm64 0~20171227-0.2
+libasan5:arm64 8.3.0-6
+libassuan0:arm64 2.5.2-1
+libatm1:arm64 1:2.5.1-2
+libatomic1:arm64 8.3.0-6
+libattr1:arm64 1:2.4.48-4
+libaudit-common 1:2.8.4-3
+libaudit1:arm64 1:2.8.4-3
+libbinutils:arm64 2.31.1-16
+libblkid1:arm64 2.33.1-0.1
+libbsd0:arm64 0.9.1-2
+libbz2-1.0:arm64 1.0.6-9.2~deb10u1
+libc-bin 2.28-10
+libc-dev-bin 2.28-10
+libc6:arm64 2.28-10
+libc6-dev:arm64 2.28-10
+libcap-dev:arm64 1:2.25-2
+libcap-ng0:arm64 0.7.9-2
+libcap2:arm64 1:2.25-2
+libcap2-bin 1:2.25-2
+libcc1-0:arm64 8.3.0-6
+libcom-err2:arm64 1.44.5-1+deb10u3
+libcroco3:arm64 0.6.12-3
+libcryptsetup12:arm64 2:2.1.0-5+deb10u2
+libcurl3-gnutls:arm64 7.64.0-4+deb10u1
+libcurl4:arm64 7.64.0-4+deb10u1
+libdb5.3:arm64 5.3.28+dfsg1-0.5
+libdbus-1-3:arm64 1.12.20-0+deb10u1
+libdebconfclient0:arm64 0.249
+libdevmapper1.02.1:arm64 2:1.02.155-3
+libdpkg-perl 1.19.7
+libdrm-amdgpu1:arm64 2.4.97-1
+libdrm-common 2.4.97-1
+libdrm-dev:arm64 2.4.97-1
+libdrm-etnaviv1:arm64 2.4.97-1
+libdrm-freedreno1:arm64 2.4.97-1
+libdrm-nouveau2:arm64 2.4.97-1
+libdrm-radeon1:arm64 2.4.97-1
+libdrm-tegra0:arm64 2.4.97-1
+libdrm2:arm64 2.4.97-1
+libedit2:arm64 3.1-20181209-1
+libegl-mesa0:arm64 18.3.6-2+deb10u1
+libegl1:arm64 1.1.0-1
+libegl1-mesa-dev:arm64 18.3.6-2+deb10u1
+libelf1:arm64 0.176-1.1
+liberror-perl 0.17027-2
+libestr0:arm64 0.1.10-2.1
+libevent-2.1-6:arm64 2.1.8-stable-4
+libexpat1:arm64 2.2.6-2+deb10u1
+libexpat1-dev:arm64 2.2.6-2+deb10u1
+libext2fs2:arm64 1.44.5-1+deb10u3
+libfakeroot:arm64 1.23-1
+libfastjson4:arm64 0.99.8-2
+libfdisk1:arm64 2.33.1-0.1
+libfdt-dev 1.4.7-3
+libfdt1:arm64 1.4.7-3
+libffi6:arm64 3.2.1-9
+libfile-fcntllock-perl 0.22-3+b5
+libfile-stripnondeterminism-perl 1.1.2-1
+libgbm1:arm64 18.3.6-2+deb10u1
+libgcc-8-dev:arm64 8.3.0-6
+libgcc1:arm64 1:8.3.0-6
+libgcrypt20:arm64 1.8.4-5
+libgdbm-compat4:arm64 1.18.1-4
+libgdbm6:arm64 1.18.1-4
+libgirepository-1.0-1:arm64 1.58.3-2
+libgl1:arm64 1.1.0-1
+libgl1-mesa-dev:arm64 18.3.6-2+deb10u1
+libgl1-mesa-dri:arm64 18.3.6-2+deb10u1
+libglapi-mesa:arm64 18.3.6-2+deb10u1
+libgles1:arm64 1.1.0-1
+libgles2:arm64 1.1.0-1
+libgles2-mesa-dev:arm64 18.3.6-2+deb10u1
+libglib2.0-0:arm64 2.58.3-2+deb10u2
+libglib2.0-data 2.58.3-2+deb10u2
+libglvnd-core-dev:arm64 1.1.0-1
+libglvnd-dev:arm64 1.1.0-1
+libglvnd0:arm64 1.1.0-1
+libglx-mesa0:arm64 18.3.6-2+deb10u1
+libglx0:arm64 1.1.0-1
+libgmp10:arm64 2:6.1.2+dfsg-4
+libgnutls-dane0:arm64 3.6.7-4+deb10u5
+libgnutls30:arm64 3.6.7-4+deb10u5
+libgomp1:arm64 8.3.0-6
+libgpg-error0:arm64 1.35-1
+libgpm2:arm64 1.20.7-5
+libgssapi-krb5-2:arm64 1.17-3
+libhogweed4:arm64 3.4.1-1
+libicu63:arm64 63.1-6+deb10u1
+libidn11:arm64 1.33-2.2
+libidn2-0:arm64 2.0.5-1+deb10u1
+libip4tc0:arm64 1.8.2-4
+libip6tc0:arm64 1.8.2-4
+libiptc0:arm64 1.8.2-4
+libisl19:arm64 0.20-2
+libitm1:arm64 8.3.0-6
+libjansson4:arm64 2.12-1
+libjson-c3:arm64 0.12.1+ds-2+deb10u1
+libjsoncpp1:arm64 1.7.4-3
+libk5crypto3:arm64 1.17-3
+libkeyutils1:arm64 1.6-6
+libkmod2:arm64 26-1
+libkrb5-3:arm64 1.17-3
+libkrb5support0:arm64 1.17-3
+libksba8:arm64 1.3.5-2
+libldap-2.4-2:arm64 2.4.47+dfsg-3+deb10u2
+libldap-common 2.4.47+dfsg-3+deb10u2
+libllvm7:arm64 1:7.0.1-8+deb10u2
+liblocale-gettext-perl 1.07-3+b4
+liblockfile-bin 1.14-1.1
+liblockfile1:arm64 1.14-1.1
+liblognorm5:arm64 2.0.5-1
+liblsan0:arm64 8.3.0-6
+libltdl-dev:arm64 2.4.6-9
+libltdl7:arm64 2.4.6-9
+liblz4-1:arm64 1.8.3-1
+liblzma5:arm64 5.2.4-1
+libmagic-mgc 1:5.35-4+deb10u1
+libmagic1:arm64 1:5.35-4+deb10u1
+libmail-sendmail-perl 0.80-1
+libmnl0:arm64 1.0.4-2
+libmount1:arm64 2.33.1-0.1
+libmpc3:arm64 1.1.0-1
+libmpdec2:arm64 2.4.2-2
+libmpfr6:arm64 4.0.2-1
+libncurses6:arm64 6.1+20181013-2+deb10u2
+libncursesw6:arm64 6.1+20181013-2+deb10u2
+libnetfilter-conntrack3:arm64 1.0.7-1
+libnettle6:arm64 3.4.1-1
+libnfnetlink0:arm64 1.0.1-3+b1
+libnftables0:arm64 0.9.0-2
+libnftnl11:arm64 1.1.2-2
+libnghttp2-14:arm64 1.36.0-2+deb10u1
+libnpth0:arm64 1.6-1
+libnss-systemd:arm64 241-7~deb10u4
+libopengl0:arm64 1.1.0-1
+libp11-kit0:arm64 0.23.15-2
+libpam-cap:arm64 1:2.25-2
+libpam-modules:arm64 1.3.1-5
+libpam-modules-bin 1.3.1-5
+libpam-runtime 1.3.1-5
+libpam-systemd:arm64 241-7~deb10u4
+libpam0g:arm64 1.3.1-5
+libpciaccess-dev:arm64 0.14-1
+libpciaccess0:arm64 0.14-1
+libpcre2-8-0:arm64 10.32-5
+libpcre3:arm64 2:8.39-12
+libperl5.28:arm64 5.28.1-6+deb10u1
+libpipeline1:arm64 1.5.1-2
+libpopt0:arm64 1.16-12
+libprocps7:arm64 2:3.3.15-2
+libprotobuf-dev:arm64 3.6.1.3-2
+libprotobuf-lite17:arm64 3.6.1.3-2
+libprotobuf17:arm64 3.6.1.3-2
+libprotoc17:arm64 3.6.1.3-2
+libpsl5:arm64 0.20.2-2
+libpthread-stubs0-dev:arm64 0.4-1
+libpython-stdlib:arm64 2.7.16-1
+libpython2-stdlib:arm64 2.7.16-1
+libpython2.7-minimal:arm64 2.7.16-2+deb10u1
+libpython2.7-stdlib:arm64 2.7.16-2+deb10u1
+libpython3-dev:arm64 3.7.3-1
+libpython3-stdlib:arm64 3.7.3-1
+libpython3.7:arm64 3.7.3-2+deb10u2
+libpython3.7-dev:arm64 3.7.3-2+deb10u2
+libpython3.7-minimal:arm64 3.7.3-2+deb10u2
+libpython3.7-stdlib:arm64 3.7.3-2+deb10u2
+libreadline7:arm64 7.0-5
+librhash0:arm64 1.3.8-1
+librtmp1:arm64 2.4+20151223.gitfa8646d.1-2
+libsasl2-2:arm64 2.1.27+dfsg-1+deb10u1
+libsasl2-modules:arm64 2.1.27+dfsg-1+deb10u1
+libsasl2-modules-db:arm64 2.1.27+dfsg-1+deb10u1
+libseccomp2:arm64 2.3.3-4
+libselinux1:arm64 2.8-1+b1
+libsemanage-common 2.8-2
+libsemanage1:arm64 2.8-2
+libsensors-config 1:3.5.0-3
+libsensors5:arm64 1:3.5.0-3
+libsepol1:arm64 2.8-1
+libsigsegv2:arm64 2.12-2
+libsmartcols1:arm64 2.33.1-0.1
+libsqlite3-0:arm64 3.27.2-3
+libss2:arm64 1.44.5-1+deb10u3
+libssh2-1:arm64 1.8.0-2.1
+libssl-dev:arm64 1.1.1d-0+deb10u3
+libssl1.1:arm64 1.1.1d-0+deb10u3
+libstdc++-8-dev:arm64 8.3.0-6
+libstdc++6:arm64 8.3.0-6
+libsys-hostname-long-perl 1.5-1
+libsystemd0:arm64 241-7~deb10u4
+libtasn1-6:arm64 4.13-3
+libtinfo6:arm64 6.1+20181013-2+deb10u2
+libtool 2.4.6-9
+libtsan0:arm64 8.3.0-6
+libubsan1:arm64 8.3.0-6
+libuchardet0:arm64 0.0.6-3
+libudev1:arm64 241-7~deb10u4
+libunbound8:arm64 1.9.0-2+deb10u2
+libunistring2:arm64 0.9.10-1
+libusb-1.0-0:arm64 2:1.0.22-2
+libusb-1.0-0-dev:arm64 2:1.0.22-2
+libusb-1.0-doc 2:1.0.22-2
+libuuid1:arm64 2.33.1-0.1
+libuv1:arm64 1.24.1-1
+libwayland-bin 1.16.0-1
+libwayland-client0:arm64 1.16.0-1
+libwayland-cursor0:arm64 1.16.0-1
+libwayland-dev:arm64 1.16.0-1
+libwayland-egl1:arm64 1.16.0-1
+libwayland-server0:arm64 1.16.0-1
+libwrap0:arm64 7.6.q-28
+libx11-6:arm64 2:1.6.7-1+deb10u1
+libx11-data 2:1.6.7-1+deb10u1
+libx11-dev:arm64 2:1.6.7-1+deb10u1
+libx11-xcb-dev:arm64 2:1.6.7-1+deb10u1
+libx11-xcb1:arm64 2:1.6.7-1+deb10u1
+libxau-dev:arm64 1:1.0.8-1+b2
+libxau6:arm64 1:1.0.8-1+b2
+libxcb-dri2-0:arm64 1.13.1-2
+libxcb-dri2-0-dev:arm64 1.13.1-2
+libxcb-dri3-0:arm64 1.13.1-2
+libxcb-dri3-dev:arm64 1.13.1-2
+libxcb-glx0:arm64 1.13.1-2
+libxcb-glx0-dev:arm64 1.13.1-2
+libxcb-present-dev:arm64 1.13.1-2
+libxcb-present0:arm64 1.13.1-2
+libxcb-randr0:arm64 1.13.1-2
+libxcb-randr0-dev:arm64 1.13.1-2
+libxcb-render0:arm64 1.13.1-2
+libxcb-render0-dev:arm64 1.13.1-2
+libxcb-shape0:arm64 1.13.1-2
+libxcb-shape0-dev:arm64 1.13.1-2
+libxcb-sync-dev:arm64 1.13.1-2
+libxcb-sync1:arm64 1.13.1-2
+libxcb-xfixes0:arm64 1.13.1-2
+libxcb-xfixes0-dev:arm64 1.13.1-2
+libxcb1:arm64 1.13.1-2
+libxcb1-dev:arm64 1.13.1-2
+libxdamage-dev:arm64 1:1.1.4-3+b3
+libxdamage1:arm64 1:1.1.4-3+b3
+libxdmcp-dev:arm64 1:1.1.2-3
+libxdmcp6:arm64 1:1.1.2-3
+libxext-dev:arm64 2:1.3.3-1+b2
+libxext6:arm64 2:1.3.3-1+b2
+libxfixes-dev:arm64 1:5.0.3-1
+libxfixes3:arm64 1:5.0.3-1
+libxml2:arm64 2.9.4+dfsg1-7+b3
+libxmuu1:arm64 2:1.1.2-2+b3
+libxshmfence-dev:arm64 1.3-1
+libxshmfence1:arm64 1.3-1
+libxtables12:arm64 1.8.2-4
+libxxf86vm-dev:arm64 1:1.1.4-1+b2
+libxxf86vm1:arm64 1:1.1.4-1+b2
+libzstd1:arm64 1.3.8+dfsg-3
+linux-libc-dev:arm64 4.19.152-1
+login 1:4.5-1.1
+logrotate 3.14.0-4
+lsb-base 10.2019051400
+m4 1.4.18-2
+make 4.2.1-1.2
+man-db 2.8.5-2
+manpages 4.16-2
+manpages-dev 4.16-2
+mawk 1.3.3-17+b3
+mesa-common-dev:arm64 18.3.6-2+deb10u1
+mime-support 3.62
+mount 2.33.1-0.1
+nasm 2.14-1
+ncurses-base 6.1+20181013-2+deb10u2
+ncurses-bin 6.1+20181013-2+deb10u2
+ncurses-term 6.1+20181013-2+deb10u2
+net-tools 1.60+git20180626.aebd88e-1
+netbase 5.6
+nftables 0.9.0-2
+ninja-build 1.8.2-1
+openssh-client 1:7.9p1-10+deb10u2
+openssh-server 1:7.9p1-10+deb10u2
+openssh-sftp-server 1:7.9p1-10+deb10u2
+openssl 1.1.1d-0+deb10u3
+passwd 1:4.5-1.1
+patch 2.7.6-3+deb10u1
+perl 5.28.1-6+deb10u1
+perl-base 5.28.1-6+deb10u1
+perl-modules-5.28 5.28.1-6+deb10u1
+pinentry-curses 1.1.0-2
+pkg-config 0.29-6
+po-debconf 1.0.21
+procps 2:3.3.15-2
+protobuf-compiler 3.6.1.3-2
+psmisc 23.2-1
+publicsuffix 20190415.1030-1
+python 2.7.16-1
+python-minimal 2.7.16-1
+python-pip-whl 18.1-5
+python2 2.7.16-1
+python2-minimal 2.7.16-1
+python2.7 2.7.16-2+deb10u1
+python2.7-minimal 2.7.16-2+deb10u1
+python3 3.7.3-1
+python3-asn1crypto 0.24.0-1
+python3-cffi-backend 1.12.2-1
+python3-crypto 2.6.1-9+b1
+python3-cryptography 2.6.1-3+deb10u2
+python3-dbus 1.2.8-3
+python3-dev 3.7.3-1
+python3-distutils 3.7.3-1
+python3-entrypoints 0.3-1
+python3-gi 3.30.4-1
+python3-keyring 17.1.1-1
+python3-keyrings.alt 3.1.1-1
+python3-lib2to3 3.7.3-1
+python3-minimal 3.7.3-1
+python3-pip 18.1-5
+python3-pkg-resources 40.8.0-1
+python3-secretstorage 2.3.1-2
+python3-setuptools 40.8.0-1
+python3-six 1.12.0-1
+python3-wheel 0.32.3-2
+python3-xdg 0.25-5
+python3.7 3.7.3-2+deb10u2
+python3.7-dev 3.7.3-2+deb10u2
+python3.7-minimal 3.7.3-2+deb10u2
+readline-common 7.0-5
+rsyslog 8.1901.0-1
+sed 4.7-1
+sensible-utils 0.0.12
+shared-mime-info 1.10-1
+sudo 1.8.27-1+deb10u2
+systemd 241-7~deb10u4
+systemd-sysv 241-7~deb10u4
+sysvinit-utils 2.93-8
+tar 1.30+dfsg-6
+tzdata 2020a-0+deb10u1
+ucf 3.0038+nmu1
+util-linux 2.33.1-0.1
+x11proto-core-dev 2018.4-4
+x11proto-damage-dev 1:2018.4-4
+x11proto-dev 2018.4-4
+x11proto-fixes-dev 1:2018.4-4
+x11proto-xext-dev 2018.4-4
+x11proto-xf86vidmode-dev 2018.4-4
+xauth 1:1.0.10-1
+xdg-user-dirs 0.17-2
+xorg-sgml-doctools 1:1.11-1
+xtrans-dev 1.3.5-1
+xutils-dev 1:7.7+5+b1
+xz-utils 5.2.4-1
+zlib1g:arm64 1:1.2.11.dfsg-1
+zlib1g-dev:arm64 1:1.2.11.dfsg-1
diff --git a/aarch64-linux-gnu/cargo_version.txt b/aarch64-linux-gnu/cargo_version.txt
new file mode 100644
index 0000000..65fc209
--- /dev/null
+++ b/aarch64-linux-gnu/cargo_version.txt
@@ -0,0 +1,4 @@
+cargo 1.47.0 (f3c7e066a 2020-08-28)
+release: 1.47.0
+commit-hash: f3c7e066ad66e05439cf8eab165a2de580b41aaf
+commit-date: 2020-08-28
diff --git a/aarch64-linux-gnu/rustup_show.txt b/aarch64-linux-gnu/rustup_show.txt
new file mode 100644
index 0000000..f8e6995
--- /dev/null
+++ b/aarch64-linux-gnu/rustup_show.txt
@@ -0,0 +1,4 @@
+Default host: aarch64-unknown-linux-gnu
+
+stable-aarch64-unknown-linux-gnu (overridden by '/source/platform/crosvm/rust-toolchain')
+rustc 1.47.0 (18bf6b4f0 2020-10-07)
diff --git a/check_links.sh b/check_links.sh
new file mode 100755
index 0000000..cfcb797
--- /dev/null
+++ b/check_links.sh
@@ -0,0 +1,28 @@
+#!/bin/bash
+
+# Checks that, when we define a local library, we use it everywhere
+
+pushd "$(dirname "$0")" >/dev/null 2>&1
+base="$(pwd)"
+popd >/dev/null 2>&1
+
+local_libraries=( \
+ $(find "${base}"/x86_64-linux-gnu/bin \
+ "${base}"/aarch64-linux-gnu/bin \
+ -type f -print)
+)
+
+exit_code=0
+
+for check_links_for in "${local_libraries[@]}"; do
+ library_stub="$(basename "${check_links_for}")"
+ library_stub="${library_stub/.*/}"
+ for library_to_check in "${local_libraries[@]}"; do
+ bad_links="$(ldd "${library_to_check}" | grep "${library_stub}" | grep -v "${base}" )"
+ if [[ -n "${bad_links}" ]]; then
+ echo ${library_to_check} has bad link to ${library_stub}: ${bad_links}
+ exit_code=2
+ fi
+ done
+done
+exit ${exit_code}
diff --git a/gen_android_bp.sh b/gen_android_bp.sh
new file mode 100755
index 0000000..9a43dce
--- /dev/null
+++ b/gen_android_bp.sh
@@ -0,0 +1,141 @@
+#!/bin/bash
+#
+# This script must be run in the location of the script!
+#
+# This script generates Android.bp files for this and all subdirs of this
+#
+DIR="${ANDROID_BUILD_TOP}/device/google/cuttlefish_vmm"
+
+function remove_trailing_slash {
+ if [[ $1 == "/" ]]; then
+ echo $i
+ else
+ echo ${1%/}
+ fi
+}
+
+set -o errexit
+
+function check_location() {
+ local my_loc="$(realpath ${DIR})"
+ my_loc=$(remove_trailing_slash ${my_loc})
+
+ local my_pwd="$(realpath $PWD)"
+ my_pwd="$(remove_trailing_slash ${my_pwd})"
+ if [[ "${my_loc}" != "${my_pwd}" ]]; then
+ echo ${my_loc}
+ echo ${my_pwd}
+ >&2 echo "the script location must be run where the script is located"
+ exit 10
+ fi
+}
+
+my_name=`basename $0`
+
+# take arch, return the path of the output Android.bp file
+function get_output_file() {
+ local blueprint_dir=$1
+ blueprint_dir="$(remove_trailing_slash ${blueprint_dir})"
+ echo "${blueprint_dir}/Android.bp"
+}
+
+# starting from old Android.bp
+function gen_license() {
+ local year=${1:-"2019"}
+cat <<EOF
+// Autogenerated via ${my_name}
+//
+// Copyright (C) ${year} The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+EOF
+}
+
+#
+# first two args are module type (e.g. prebuilt_usr_share_host)
+# and the whitespaces for indentation
+#
+# the rest must be in this form:
+# --name=value
+#
+# then, it simply generates this line repeatedly:
+# <indent>name: value,
+#
+# e.g. --name="\"foo\"" will generate
+# name: "foo",
+#
+function gen_module() {
+ local mod_name=$1 # e.g. prebuilt_usr_share_host
+ local indent="$2"
+ shift 2
+ local long_options=()
+ local long_opt=""
+ local OPTIND=1
+ while getopts ":-:" op; do
+ # a long opt like --srcs="some" is actually:
+ # - + - + "srcs=some"
+ # that's a short option '-' just like h, and
+ # the OPTARGS of the option '-' is srcs=some
+ if [[ "$op" != "-" ]]; then
+ >&2 echo "gen_module does take long options with = only"
+ exit 8
+ fi
+ long_op="${OPTARG%%=*}"
+ OPTARG="${OPTARG#$long_op}"
+ OPTARG="${OPTARG#=}"
+ long_options+=( "$long_op" )
+ declare local ${long_op}="${OPTARG}"
+ done
+
+ echo "$mod_name {"
+ for field in "${long_options[@]}"; do
+ eval local value=\$$field
+ echo "${indent}${field}: ${value},"
+ done
+ echo "}"
+}
+
+function gen_main_android_bp() {
+ gen_license 2019
+
+ cat <<EOF
+// NOTE: Using cc_prebuilt_binary because cc_prebuilt_library can't handle stem on pie
+
+EOF
+
+for i in */bin/*; do
+ if [[ ! -L "$i" ]]; then
+ name="${i//\//_}"
+ name="${name//-/_}"
+ name="${name/_bin_/_}"
+ path="$(dirname $(dirname "$i"))"
+ stem="$(basename "$i")"
+
+ if [[ "crosvm" != "${stem}" ]]; then
+ name="${name}_for_crosvm"
+ fi
+
+ gen_module "cc_prebuilt_binary" ' ' \
+ --name="\"${name}\"" \
+ --srcs="[\"$i\"]" \
+ --stem="\"$stem"\" \
+ --relative_install_path="\"${path}\"" \
+ --defaults="[\"cuttlefish_host_only\"]"
+ fi
+done
+}
+
+# main
+check_location
+gen_main_android_bp > $(get_output_file ${DIR})
diff --git a/generate-gfxstream-manifest.sh b/generate-gfxstream-manifest.sh
new file mode 100755
index 0000000..835f4a9
--- /dev/null
+++ b/generate-gfxstream-manifest.sh
@@ -0,0 +1,31 @@
+#!/bin/bash
+# Copyright 2020 - The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the', help='License');
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an', help='AS IS' BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Modifies an input manifest.xml to point to a particular Android build
+# id of gfxstream
+
+set -e
+
+BUILD_ID=$1
+INPUT_MANIFEST=$2
+
+/google/data/ro/projects/android/fetch_artifact \
+ --bid ${BUILD_ID} \
+ --target gfxstream_sdk_tools_linux "manifest_${BUILD_ID}.xml"
+
+# Check the output and use it to replace the INPUT_MANIFEST
+./update-manifest-gfxstream.py \
+ manifest_${BUILD_ID}.xml \
+ ${INPUT_MANIFEST}
diff --git a/manifest.xml b/manifest.xml
new file mode 100644
index 0000000..e8e750a
--- /dev/null
+++ b/manifest.xml
@@ -0,0 +1,49 @@
+<?xml version='1.0' encoding='utf-8'?>
+<manifest>
+ <remote fetch=".." name="aosp" review="https://android-review.googlesource.com/"/>
+ <default remote="aosp" revision="master" sync-j="4"/>
+ <manifest-server url="http://android-smartsync.corp.google.com/android.googlesource.com/manifestserver"/>
+ <project groups="crosvm" name="platform/external/adhd" path="platform/adhd" revision="3251a51ed88868722f32f8984434f616e195c433"/>
+ <project groups="crosvm" name="platform/external/crosvm" path="platform/crosvm" revision="21d42d32b3d0820456705a066d2c6e2bc9f56337"/>
+ <project groups="crosvm" name="platform/external/libdrm" path="external/libdrm" revision="c149d6c7426e311b72c325e7ecb49e329c3a34fb"/>
+ <project groups="crosvm" name="platform/external/libepoxy" path="third_party/libepoxy" revision="826b368df68f65e11500d73e4c5e51668c11417c"/>
+ <project groups="crosvm" name="platform/external/minigbm" path="third_party/minigbm" revision="1e4aff732191e7b734246ebebde450c394272993"/>
+ <project groups="crosvm" name="platform/external/minijail" path="platform/minijail" revision="5f9e3001c61626d2863dad91248ba8496c3ef511"/>
+ <project groups="crosvm" name="platform/external/virglrenderer" path="third_party/virglrenderer" revision="6e313aa49336f55b599c900054feaebf49d7cbd1"/>
+ <project groups="crosvm" name="platform/tools/repohooks" path="tools/repohooks" revision="3798d7e067b927a16dc9e47bc6af949f9a2f4e20"/>
+ <repo-hooks enabled-list="pre-upload" in-project="platform/tools/repohooks"/>
+ <project groups="gfxstream" name="platform/external/ffmpeg" path="external/ffmpeg" revision="5c6f92dd1b16590153367ce79ed9b098cace354f"/>
+ <project groups="gfxstream" name="platform/external/boringssl" path="external/boringssl" revision="07e050eb7fd8a6c6456bf6ce6cd7c289b2e338ef"/>
+ <project groups="gfxstream" name="platform/prebuilts/ninja/linux-x86" path="prebuilts/ninja/linux-x86" revision="7ef4cb95e1ed4305e99f03a8e8ad28d26134a45b"/>
+ <project groups="gfxstream" name="device/generic/vulkan-cereal" path="device/generic/vulkan-cereal" revision="ea978cef5a41c292dd9bd0ce9bf08648e76ca030"/>
+ <project groups="gfxstream" name="platform/external/protobuf" path="external/protobuf" revision="ca15ad7fb89a626c0d2a98240b11a2523727f9be"/>
+ <project groups="gfxstream" name="platform/external/libusb" path="external/libusb" revision="ad0473413edec14805e59599ff537eba0f5b8d33"/>
+ <project groups="gfxstream" name="platform/external/grpc-grpc" path="external/grpc" revision="0d80ea35ba09d0462ca13f236cc9ddc3fb749c57"/>
+ <project groups="gfxstream" name="platform/external/googletest" path="external/googletest" revision="ee3fca52fa6409aacab73bf519633d21a3a3a738"/>
+ <project groups="gfxstream" name="platform/external/tinyobjloader" path="external/tinyobjloader" revision="d16a940067fbc191364fc1d3e2a2d907209c9320"/>
+ <project groups="gfxstream" name="device/generic/goldfish-opengl" path="device/generic/goldfish-opengl" revision="8d4f39f4a7361d959f0e1f2d019fe210a9f31920"/>
+ <project groups="gfxstream" name="platform/external/libffi" path="external/libffi" revision="30bc66eb2043d8434e94f29beda87001e58c2a34"/>
+ <project groups="gfxstream" name="platform/external/angle" path="external/angle" revision="61ed0a943789204b9cc14074afdfb8587a345ef8"/>
+ <project groups="gfxstream" name="platform/external/libpng" path="external/libpng" revision="5d19b1bb0f5694f2ae47b3cc2ccfeb571764b439"/>
+ <project groups="gfxstream" name="platform/external/lz4" path="external/lz4" revision="1a184fdeb99f4cc11b774ac5b0b824b38105ec6c"/>
+ <project groups="gfxstream" name="platform/external/nasm" path="external/nasm" revision="645e4f02c622ba67eb754000cc00c9db8be31f85"/>
+ <project groups="gfxstream" name="platform/external/curl" path="external/curl" revision="1da4b04273638c8afe6f88bd7a7ccfb693640773"/>
+ <project groups="gfxstream" name="platform/external/libyuv" path="external/libyuv" revision="df6bc4ade7d8a2923269e543b27175eeee26e90b"/>
+ <project groups="gfxstream" name="platform/prebuilts/android-emulator-build/protobuf" path="prebuilts/android-emulator-build/protobuf" revision="8e2a5472dd374e6c971d30eb3d00898a8c1a25c8"/>
+ <project groups="gfxstream" name="platform/prebuilts/clang/host/linux-x86" path="prebuilts/clang/host/linux-x86" revision="8c62cb647097f74de4fef942e39d845ecb476c10"/>
+ <project groups="gfxstream" name="platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.17-4.8" path="prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.17-4.8" revision="70a8d2affe5a31cbb6ae03469a83981b3331c9a4"/>
+ <project groups="gfxstream" name="platform/prebuilts/android-emulator-build/common" path="prebuilts/android-emulator-build/common" revision="46f6c3d021ff6ec4a4d1464fe921d2eb1608c5c9"/>
+ <project groups="gfxstream" name="platform/prebuilts/android-emulator-build/mesa" path="prebuilts/android-emulator-build/mesa" revision="be7c00f399b415511d73308f0af0c0310512aced"/>
+ <project groups="gfxstream" name="platform/external/google-breakpad" path="external/google-breakpad" revision="a1414818b9f9810a3b45f1f55d9c00f5116ec7d9"/>
+ <project groups="gfxstream" name="platform/external/deqp" path="external/deqp" revision="7949c69a10e39ce76e2af700a1c3ee29756ad51e"/>
+ <project groups="gfxstream" name="platform/prebuilts/android-emulator-build/curl" path="prebuilts/android-emulator-build/curl" revision="06f0905068b9ebfdd2d11b4d310c36b68c2fbe2f"/>
+ <project groups="gfxstream" name="platform/external/zlib" path="external/zlib" revision="7656f9eff09cc38244978773777ee64b7b31155d"/>
+ <project groups="gfxstream" name="platform/prebuilts/android-emulator-build/mesa-deps" path="prebuilts/android-emulator-build/mesa-deps" revision="17837fdb1889014fa01cbbbda56afc9b6034815f"/>
+ <project groups="gfxstream" name="platform/external/libvpx" path="external/libvpx" revision="62332cf39b0302e240acb10ed78d61d5ea282a39"/>
+ <project groups="gfxstream" name="platform/external/c-ares" path="external/cares" revision="b88261c9132d21c234dfbf36db3c6c3f5780051a"/>
+ <project groups="gfxstream" name="platform/external/qemu" path="external/qemu" revision="1ff47c5b95b509f124a653e5b50568f63204cda4"/>
+ <project groups="gfxstream" name="platform/external/astc-codec" path="external/astc-codec" revision="17ae36822a8084f45ae51f9031e81f8318254f33"/>
+ <project groups="gfxstream" name="platform/prebuilts/android-emulator-build/qemu-android-deps" path="prebuilts/android-emulator-build/qemu-android-deps" revision="715d3bed0a3dc4f9980528c9bfb81469f2d3cbab"/>
+ <project groups="gfxstream" name="platform/external/google-benchmark" path="external/google-benchmark" revision="db1632fadc79df388a2a7248157c965ee40248a1"/>
+ <project groups="gfxstream" name="platform/prebuilts/cmake/linux-x86" path="prebuilts/cmake/linux-x86" revision="40dcb6f55bd2e8731e3e4f1a1721f7ff0fb83cb1"/>
+</manifest>
diff --git a/rebuild-docker.sh b/rebuild-docker.sh
new file mode 100755
index 0000000..1a5a477
--- /dev/null
+++ b/rebuild-docker.sh
@@ -0,0 +1,149 @@
+#!/bin/bash -r
+
+function container_exists() {
+ [[ $(docker ps -a --filter "name=^/$1$" --format '{{.Names}}') == $1 ]] && echo $1;
+}
+
+declare -A map_uname_to_docker_builder_arch=( [aarch64]=linux/arm64 [x86_64]=linux/amd64 )
+
+# inputs
+# $1 = image name
+# $2 = container name
+# $3 = architecture (x86_64 or aarch64)
+# $4 = user name
+# $5 = user ID
+# $6 = persistent?
+# $7 = path to sources dir
+# $8 = path to working dir
+# $9 = path to output dir
+# $10 = reuse image/container? (0: no reuse; 1: reuse image; 2: reuse container)
+# $11 = build image (when reuse = 0)
+# $12 = path to Dockerfile
+# $13 = path to docker context dir
+# $14 = docker_flags_len
+# $15 = (docker_flags)
+# $16 = _prepare_source_len
+# $17 = (_prepare_source)
+function build_with_docker() {
+ set -o errexit
+ set -x
+
+ local -a _docker_target=( ${1} )
+ local _container_name=${2}
+ local _arch=${3}
+ local _docker_image=${1}_${_arch}
+ local _user=${4}
+ local _uid=${5}
+ local _persistent=${6}
+
+ if [[ ${_persistent} -eq 1 ]]; then
+ _docker_image=${1}_${_arch}_persistent
+ fi
+ local _docker_source=
+ if [ "${7}" != 'x' ]; then
+ _docker_source="-v ${7#x}:/source:rw"
+ fi
+ local _docker_working=
+ if [ "${8}" != 'x' ]; then
+ _docker_working="-v ${8#x}:/working:rw"
+ fi
+ local _docker_output=
+ if [ "${9}" != 'x' ]; then
+ _docker_output="-v ${9#x}:/output:rw"
+ fi
+ local _reuse=${10}
+ local _build_image=${11}
+ local _dockerfile=${12}
+ local _docker_context=${13}
+ shift 13
+ local -a _args=("$@")
+ local -i _docker_flags_len=${_args[0]}
+ local -a _docker_flags=("${_args[@]:1:$_docker_flags_len}")
+ local -i _prepare_source_len=${_args[(_docker_flags_len+1)]}
+ local -a _prepare_source=("${_args[@]:(_docker_flags_len+2):_prepare_source_len}")
+
+ local _build_or_retry=${_arch}_retry
+
+ if [[ ${_reuse} -ne 1 ]]; then
+ _build_or_retry=${_arch}_build
+ if [[ ${_persistent} -eq 1 ]]; then
+ _docker_target+=("${_docker_target[0]}_persistent")
+ fi
+ if [[ ${_build_image} -eq 1 ]]; then
+ if [[ ${_arch} != $(uname -m) ]]; then
+ export DOCKER_CLI_EXPERIMENTAL=enabled
+ # from
+ # https://community.arm.com/developer/tools-software/tools/b/tools-software-ides-blog/posts/getting-started-with-docker-for-arm-on-linux
+ docker run --rm --privileged docker/binfmt:820fdd95a9972a5308930a2bdfb8573dd4447ad3
+ docker buildx create \
+ --name docker_vmm_${_arch}_builder \
+ --platform ${map_uname_to_docker_builder_arch[${_arch}]} \
+ --use
+ docker buildx inspect --bootstrap
+ for _target in ${_docker_target[@]}; do
+ docker buildx build \
+ --platform ${map_uname_to_docker_builder_arch[${_arch}]} \
+ --target ${_target} \
+ -f ${_dockerfile} \
+ -t ${_docker_image}:latest \
+ ${_docker_context} \
+ --build-arg USER=${_user} \
+ --build-arg UID=${_uid} --load
+ done
+ docker buildx rm docker_vmm_${_arch}_builder
+ unset DOCKER_CLI_EXPERIMENTAL
+ else
+ for _target in ${_docker_target[@]}; do
+ docker build \
+ -f ${_dockerfile} \
+ --target ${_target} \
+ -t ${_docker_image}:latest \
+ ${_docker_context} \
+ --build-arg USER=${_user} \
+ --build-arg UID=${_uid}
+ done
+ fi
+ fi
+ if [[ ${_persistent} -eq 1 ]]; then
+ if [[ -n "$(container_exists ${_container_name})" ]]; then
+ docker rm -f ${_container_name}
+ fi
+ docker run -d \
+ --privileged \
+ --name ${_container_name} \
+ -h ${_container_name} \
+ ${_docker_source} \
+ ${_docker_working} \
+ ${_docker_output} \
+ -v /sys/fs/cgroup:/sys/fs/cgroup:ro \
+ ${_docker_image}:latest
+ fi
+# else
+# # If we are reusing the docker image, then we cannot change the target
+# # architecture (though we can change the persistence) of the container.
+# echo TODO
+ fi
+
+ if [[ ${_persistent} -eq 1 ]]; then
+ if [[ "$(docker inspect --format='{{.State.Status}}' ${_container_name})" == "paused" ]]; then
+ docker unpause ${_container_name}
+ fi
+ docker exec -it \
+ --user ${_user} \
+ ${_docker_flags[@]} \
+ ${_container_name} \
+ /static/rebuild-internal.sh ${_prepare_source[@]} ${_build_or_retry}
+ docker pause ${_container_name}
+ else
+ docker run -it --rm \
+ --user ${_user} \
+ ${_docker_flags[@]} \
+ ${_docker_source} \
+ ${_docker_working} \
+ ${_docker_output} \
+ ${_docker_image}:latest \
+ /static/rebuild-internal.sh ${_prepare_source[@]} ${_build_or_retry}
+ fi
+}
+
+build_with_docker $@
diff --git a/rebuild-internal.sh b/rebuild-internal.sh
new file mode 100755
index 0000000..5839af5
--- /dev/null
+++ b/rebuild-internal.sh
@@ -0,0 +1,399 @@
+#!/bin/bash
+
+# Note: not intended to be invoked directly, see rebuild.sh.
+#
+# Rebuilds Crosvm and its dependencies from a clean state.
+
+: ${TOOLS_DIR:="$(pwd)/tools"}
+
+setup_env() {
+ : ${SOURCE_DIR:="$(pwd)/source"}
+ : ${WORKING_DIR:="$(pwd)/working"}
+ : ${CUSTOM_MANIFEST:=""}
+
+ ARCH="$(uname -m)"
+ : ${OUTPUT_DIR:="$(pwd)/${ARCH}-linux-gnu"}
+ OUTPUT_BIN_DIR="${OUTPUT_DIR}/bin"
+ OUTPUT_ETC_DIR="${OUTPUT_DIR}/etc"
+ OUTPUT_LIB_DIR="${OUTPUT_DIR}/bin"
+
+ export PATH="${PATH}:${TOOLS_DIR}:${HOME}/.local/bin"
+ export PKG_CONFIG_PATH="${WORKING_DIR}/usr/lib/pkgconfig"
+}
+
+set -o errexit
+set -x
+
+fatal_echo() {
+ echo "$@"
+ exit 1
+}
+
+prepare_cargo() {
+ echo Setting up cargo...
+ cd
+ rm -rf .cargo
+ # Sometimes curl hangs. When it does, retry
+ retry curl -LO \
+ "https://static.rust-lang.org/rustup/archive/1.14.0/$(uname -m)-unknown-linux-gnu/rustup-init"
+ # echo "0077ff9c19f722e2be202698c037413099e1188c0c233c12a2297bf18e9ff6e7 *rustup-init" | sha256sum -c -
+ chmod +x rustup-init
+ ./rustup-init -y --no-modify-path
+ source $HOME/.cargo/env
+ if [[ -n "$1" ]]; then
+ rustup target add "$1"
+ fi
+ rustup component add rustfmt-preview
+ rm rustup-init
+
+ if [[ -n "$1" ]]; then
+ cat >>~/.cargo/config <<EOF
+[target.$1]
+linker = "${1/-unknown-/-}"
+EOF
+ fi
+}
+
+install_packages() {
+ echo Installing packages...
+ sudo dpkg --add-architecture arm64
+ sudo apt-get update
+ sudo apt-get install -y \
+ autoconf \
+ automake \
+ build-essential \
+ "$@" \
+ cmake \
+ curl \
+ gcc \
+ g++ \
+ git \
+ libcap-dev \
+ libfdt-dev \
+ libegl1-mesa-dev \
+ libgl1-mesa-dev \
+ libgles2-mesa-dev \
+ libpciaccess-dev \
+ libssl-dev \
+ libtool \
+ libusb-1.0-0-dev \
+ libwayland-dev \
+ make \
+ nasm \
+ ninja-build \
+ pkg-config \
+ protobuf-compiler \
+ python \
+ python3 \
+ python3-pip \
+ xutils-dev # Needed to pacify autogen.sh for libepoxy
+ mkdir -p "${TOOLS_DIR}"
+ curl https://storage.googleapis.com/git-repo-downloads/repo > "${TOOLS_DIR}/repo"
+ chmod a+x "${TOOLS_DIR}/repo"
+
+ # Meson getting started guide mentions that the distro version is frequently
+ # outdated and recommends installing via pip.
+ pip3 install meson
+
+ # Tools for building gfxstream
+ pip3 install absl-py
+ pip3 install urlfetch
+
+ case "$(uname -m)" in
+ aarch64)
+ prepare_cargo
+ ;;
+ x86_64)
+ # Cross-compilation is x86_64 specific
+ sudo apt install -y crossbuild-essential-arm64
+ prepare_cargo aarch64-unknown-linux-gnu
+ ;;
+ esac
+}
+
+retry() {
+ for i in $(seq 5); do
+ "$@" && return 0
+ sleep 1
+ done
+ return 1
+}
+
+fetch_source() {
+ echo "Fetching source..."
+
+ mkdir -p "${SOURCE_DIR}"
+ cd "${SOURCE_DIR}"
+
+ if ! git config user.name; then
+ git config --global user.name "AOSP Crosvm Builder"
+ git config --global user.email "nobody@android.com"
+ git config --global color.ui false
+ fi
+
+ if [[ -z "${CUSTOM_MANIFEST}" ]]; then
+ # Building Crosvm currently depends using Chromium's directory scheme for subproject
+ # directories ('third_party' vs 'external').
+ fatal_echo "CUSTOM_MANIFEST must be provided. You most likely want to provide a full path to" \
+ "a copy of device/google/cuttlefish_vmm/manifest.xml."
+ fi
+
+ cp ${CUSTOM_MANIFEST} manifest.xml
+ repo init --depth=1 -q -u https://android.googlesource.com/platform/manifest -m ../../manifest.xml
+ repo sync
+}
+
+prepare_source() {
+ if [ "$(ls -A $SOURCE_DIR)" ]; then
+ echo "${SOURCE_DIR} is non empty. Run this from an empty directory if you wish to fetch the source." 1>&2
+ exit 2
+ fi
+ fetch_source
+}
+
+resync_source() {
+ echo "Deleting source directory..."
+ rm -rf "${SOURCE_DIR}/.*"
+ rm -rf "${SOURCE_DIR}/*"
+ fetch_source
+}
+
+compile_libdrm() {
+ cd "${SOURCE_DIR}/external/libdrm"
+
+ meson build \
+ --libdir="${WORKING_DIR}/usr/lib" \
+ --prefix="${WORKING_DIR}/usr" \
+ -Damdgpu=false \
+ -Dfreedreno=false \
+ -Dintel=false \
+ -Dlibkms=false \
+ -Dnouveau=false \
+ -Dradeon=false \
+ -Dvc4=false \
+ -Dvmwgfx=false
+
+ cd build
+
+ ninja install
+
+ cp "${WORKING_DIR}"/usr/lib/libdrm.so.2 "${OUTPUT_LIB_DIR}"
+}
+
+compile_minijail() {
+ echo "Compiling Minijail..."
+
+ cd "${SOURCE_DIR}/platform/minijail"
+
+ make -j OUT="${WORKING_DIR}"
+
+ cp "${WORKING_DIR}/libminijail.so" "${OUTPUT_LIB_DIR}"
+}
+
+compile_minigbm() {
+ echo "Compiling Minigbm..."
+
+ cd "${SOURCE_DIR}/third_party/minigbm"
+
+ # Minigbm's package config file has a default hard-coded path. Update here so
+ # that dependent packages can find the files.
+ sed -i "s|prefix=/usr\$|prefix=${WORKING_DIR}/usr|" gbm.pc
+
+ # The gbm used by upstream linux distros is not compatible with crosvm, which must use Chrome OS's
+ # minigbm.
+ local cpp_flags=()
+ local make_flags=()
+ local minigbm_drv=(${MINIGBM_DRV})
+ for drv in "${minigbm_drv[@]}"; do
+ cpp_flags+=(-D"DRV_${drv}")
+ make_flags+=("DRV_${drv}"=1)
+ done
+
+ make -j install \
+ "${make_flags[@]}" \
+ CPPFLAGS="${cpp_flags[*]}" \
+ DESTDIR="${WORKING_DIR}" \
+ OUT="${WORKING_DIR}"
+
+ cp ${WORKING_DIR}/usr/lib/libgbm.so.1 "${OUTPUT_LIB_DIR}"
+}
+
+compile_epoxy() {
+ cd "${SOURCE_DIR}/third_party/libepoxy"
+
+ meson build \
+ --libdir="${WORKING_DIR}/usr/lib" \
+ --prefix="${WORKING_DIR}/usr" \
+ -Dglx=no \
+ -Dx11=false \
+ -Degl=yes
+
+ cd build
+
+ ninja install
+
+ cp "${WORKING_DIR}"/usr/lib/libepoxy.so.0 "${OUTPUT_LIB_DIR}"
+}
+
+compile_virglrenderer() {
+ echo "Compiling VirglRenderer..."
+
+ # Note: depends on libepoxy
+ cd "${SOURCE_DIR}/third_party/virglrenderer"
+
+ # Meson doesn't like gbm's version code.
+ sed -i "s|_gbm_ver = '0.0.0'|_gbm_ver = '0'|" meson.build
+
+ # Meson needs to have dependency information for header lookup.
+ sed -i "s|cc.has_header('epoxy/egl.h')|cc.has_header('epoxy/egl.h', dependencies: epoxy_dep)|" meson.build
+
+ # Need to figure out the right way to pass this down...
+ grep "install_rpath" src/meson.build || \
+ sed -i "s|install : true|install : true, install_rpath : '\$ORIGIN',|" src/meson.build
+
+ meson build \
+ --libdir="${WORKING_DIR}/usr/lib" \
+ --prefix="${WORKING_DIR}/usr" \
+ -Dplatforms=egl \
+ -Dminigbm_allocation=false \
+ -Dunstable_apis=true
+
+ cd build
+
+ ninja install
+
+ cp "${WORKING_DIR}/usr/lib/libvirglrenderer.so.1" "${OUTPUT_LIB_DIR}"
+
+ cd "${OUTPUT_LIB_DIR}"
+ ln -s -f "libvirglrenderer.so.1" "libvirglrenderer.so"
+}
+
+compile_gfxstream() {
+ echo "Compiling gfxstream..."
+
+ # Note: depends on libepoxy
+ cd "${SOURCE_DIR}/external/qemu"
+
+ # TODO: Fix or remove network unit tests that are failing in docker,
+ # so we can take out "notests"
+ python3 android/build/python/cmake.py --gfxstream_only --no-tests
+ local dist_dir="${SOURCE_DIR}/external/qemu/objs/distribution/emulator/lib64"
+
+ chmod +x "${dist_dir}/libc++.so.1"
+ chmod +x "${dist_dir}/libandroid-emu-shared.so"
+ chmod +x "${dist_dir}/libemugl_common.so"
+ chmod +x "${dist_dir}/libOpenglRender.so"
+ chmod +x "${dist_dir}/libgfxstream_backend.so"
+
+ cp "${dist_dir}/libc++.so.1" "${OUTPUT_LIB_DIR}"
+ cp "${dist_dir}/libandroid-emu-shared.so" "${OUTPUT_LIB_DIR}"
+ cp "${dist_dir}/libemugl_common.so" "${OUTPUT_LIB_DIR}"
+ cp "${dist_dir}/libOpenglRender.so" "${OUTPUT_LIB_DIR}"
+ cp "${dist_dir}/libgfxstream_backend.so" "${OUTPUT_LIB_DIR}"
+}
+
+compile_crosvm() {
+ echo "Compiling Crosvm..."
+
+ source "${HOME}/.cargo/env"
+ cd "${SOURCE_DIR}/platform/crosvm"
+
+ # Workaround for aosp/1412815
+ cargo install protobuf-codegen
+ cd "${SOURCE_DIR}/platform/crosvm/protos/src"
+ sed -i "s/pub use cdisk_spec_proto::cdisk_spec/pub mod cdisk_spec/" lib.rs
+ PATH="$HOME/.cargo/bin:$PATH" protoc --rust_out . cdisk_spec.proto
+ cd "${SOURCE_DIR}/platform/crosvm"
+
+ local crosvm_features=audio,gpu,composite-disk,virtio-gpu-next
+
+ if [[ $BUILD_GFXSTREAM -eq 1 ]]; then
+ crosvm_features+=,gfxstream
+ fi
+
+ RUSTFLAGS="-C link-arg=-Wl,-rpath,\$ORIGIN -C link-arg=-L${OUTPUT_LIB_DIR}" \
+ cargo build --features ${crosvm_features}
+
+ # Save the outputs
+ cp Cargo.lock "${OUTPUT_DIR}"
+ cp target/debug/crosvm "${OUTPUT_BIN_DIR}"
+
+ cargo --version --verbose > "${OUTPUT_DIR}/cargo_version.txt"
+ rustup show > "${OUTPUT_DIR}/rustup_show.txt"
+}
+
+compile() {
+ echo "Compiling..."
+ mkdir -p \
+ "${WORKING_DIR}" \
+ "${OUTPUT_DIR}" \
+ "${OUTPUT_BIN_DIR}" \
+ "${OUTPUT_ETC_DIR}" \
+ "${OUTPUT_LIB_DIR}"
+
+ if [[ $BUILD_CROSVM -eq 1 ]]; then
+ compile_libdrm
+ compile_minijail
+ compile_minigbm
+ compile_epoxy
+ compile_virglrenderer
+ fi
+
+ # TODO: Finish the aarch64 cross/native gfxstream build
+ if [[ $BUILD_GFXSTREAM -eq 1 ]]; then
+ compile_gfxstream
+ fi
+
+ if [[ $BUILD_CROSVM -eq 1 ]]; then
+ compile_crosvm
+ fi
+
+ dpkg-query -W > "${OUTPUT_DIR}/builder-packages.txt"
+ echo "Results in ${OUTPUT_DIR}"
+}
+
+aarch64_retry() {
+ MINIGBM_DRV="RADEON VC4" BUILD_CROSVM=1 compile
+}
+
+aarch64_build() {
+ rm -rf "${WORKING_DIR}/*"
+ aarch64_retry
+}
+
+x86_64_retry() {
+ MINIGBM_DRV="I915 RADEON VC4" BUILD_GFXSTREAM=1 compile
+}
+
+x86_64_build() {
+ rm -rf "${WORKING_DIR}/*"
+ x86_64_retry
+}
+
+if [[ $# -lt 1 ]]; then
+ echo Choosing default config
+ set setup_env prepare_source x86_64_build
+fi
+
+echo Steps: "$@"
+
+for i in "$@"; do
+ echo $i
+ case "$i" in
+ ARCH=*) ARCH="${i/ARCH=/}" ;;
+ CUSTOM_MANIFEST=*) CUSTOM_MANIFEST="${i/CUSTOM_MANIFEST=/}" ;;
+ aarch64_build) $i ;;
+ aarch64_retry) $i ;;
+ setup_env) $i ;;
+ install_packages) $i ;;
+ fetch_source) $i ;;
+ resync_source) $i ;;
+ prepare_source) $i ;;
+ x86_64_build) $i ;;
+ x86_64_retry) $i ;;
+ *) echo $i unknown 1>&2
+ echo usage: $0 'install_packages|prepare_source|resync_source|fetch_source|$(uname -m)_build|$(uname -m)_retry' 1>&2
+ exit 2
+ ;;
+ esac
+done
diff --git a/rebuild.sh b/rebuild.sh
new file mode 100755
index 0000000..32fc36c
--- /dev/null
+++ b/rebuild.sh
@@ -0,0 +1,423 @@
+#!/bin/bash
+
+set -e
+
+# Common code to build a host image on GCE
+
+# INTERNAL_extra_source may be set to a directory containing the source for
+# extra package to build.
+
+# INTERNAL_IP can be set to --internal-ip run on a GCE instance
+# The instance will need --scope compute-rw
+
+source "${ANDROID_BUILD_TOP}/external/shflags/shflags"
+DIR="${ANDROID_BUILD_TOP}/device/google/cuttlefish_vmm"
+
+# ARM-board options
+
+DEFINE_boolean arm false "Build on an ARM board"
+DEFINE_string arm_instance "" "IP address or DNS name of an ARM system to do the secondary build"
+DEFINE_string arm_user "vsoc-01" "User to invoke on the ARM system"
+
+# Docker options
+
+DEFINE_boolean docker false "Build inside docker"
+DEFINE_boolean docker_persistent true "Build inside a privileged, persistent container (faster for iterative development)"
+DEFINE_string docker_arch "$(uname -m)" "Target architectre"
+DEFINE_boolean docker_build_image true "When --noreuse is specified, this flag controls building the docker image (else we assume it was built and reuse it)"
+DEFINE_string docker_image "docker_vmm" "Name of docker image to build"
+DEFINE_string docker_container "docker_vmm" "Name of docker container to create"
+DEFINE_string docker_source "" "Path to sources checked out using manifest"
+DEFINE_string docker_working "" "Path to working directory"
+DEFINE_string docker_output "" "Output directory (when --docker is specified)"
+DEFINE_string docker_user "${USER}" "Docker-container user"
+DEFINE_string docker_uid "${UID}" "Docker-container user ID"
+
+# GCE options
+
+DEFINE_boolean gce false "Build on a GCE instance"
+DEFINE_string gce_project "$(gcloud config get-value project)" "Project to use" "p"
+DEFINE_string gce_source_image_family debian-10 "Image familty to use as the base" "s"
+DEFINE_string gce_source_image_project debian-cloud "Project holding the base image" "m"
+DEFINE_string gce_instance "${USER}-build" "Instance name to create for the build" "i"
+DEFINE_string gce_user cuttlefish_crosvm_builder "User name to use on GCE when doing the build"
+DEFINE_string gce_zone "$(gcloud config get-value compute/zone)" "Zone to use" "z"
+
+# Common options
+
+DEFINE_string manifest "" "Path to custom manifest to use for the build"
+DEFINE_boolean reuse false "Set to true to reuse a previously-set-up instance."
+DEFINE_boolean reuse_resync false "Reuse a previously-set-up instance, but clean and re-sync the sources. Overrides --reuse if both are specified."
+
+SSH_FLAGS=(${INTERNAL_IP})
+
+wait_for_instance() {
+ alive=""
+ while [[ -z "${alive}" ]]; do
+ sleep 5
+ alive="$(gcloud compute ssh "${SSH_FLAGS[@]}" "$@" -- uptime || true)"
+ done
+}
+
+check_common_docker_options() {
+ if [[ -z "${FLAGS_docker_image}" ]]; then
+ echo Option --docker_image must not be empty 1>&1
+ fail=1
+ fi
+ if [[ -z "${FLAGS_docker_container}" ]]; then
+ echo Options --docker_container must not be empty 1>&2
+ fail=1
+ fi
+ if [[ -z "${FLAGS_docker_user}" ]]; then
+ echo Options --docker_user must not be empty 1>&2
+ fail=1
+ fi
+ if [[ -z "${FLAGS_docker_uid}" ]]; then
+ echo Options --docker_uid must not be empty 1>&2
+ fail=1
+ fi
+ # Volume mapping are specified only when a container is created. With
+ # --reuse, an already-created persistent container is reused, which implies
+ # that we cannot change the volume maps. For non-persistent containers, we
+ # use docker run, which creates and runs the continer in one step; in that
+ # case, we must pass the same values for --docker_source and --docker_output
+ # that we passed when we ran the non-persistent continer the first time.
+ if [[ ${_reuse} -eq 1 && ${FLAGS_docker_persistent} -eq ${FLAGS_TRUE} ]]; then
+ if [ -n "${FLAGS_docker_source}" ]; then
+ echo Option --docker_source may not be specified with --reuse and --docker_persistent 1>&2
+ fail=1
+ fi
+ if [ -n "${FLAGS_docker_working}" ]; then
+ echo Option --docker_working may not be specified with --reuse and --docker_persistent 1>&2
+ fail=1
+ fi
+ if [ -n "${FLAGS_docker_output}" ]; then
+ echo Option --docker_output may not be specified with --reuse and --docker_persistent 1>&2
+ fail=1
+ fi
+ fi
+ if [[ "${fail}" -ne 0 ]]; then
+ exit "${fail}"
+ fi
+}
+
+build_locally_using_docker() {
+ check_common_docker_options
+ case "${FLAGS_docker_arch}" in
+ aarch64) ;;
+ x86_64) ;;
+ *) echo Invalid value ${FLAGS_docker_arch} for --docker_arch 1>&2
+ fail=1
+ ;;
+ esac
+ if [[ "${fail}" -ne 0 ]]; then
+ exit "${fail}"
+ fi
+ local -i _persistent=0
+ if [[ ${FLAGS_docker_persistent} -eq ${FLAGS_TRUE} ]]; then
+ _persistent=1
+ fi
+
+ local -i _build_image=0
+ if [[ ${FLAGS_docker_build_image} -eq ${FLAGS_TRUE} ]]; then
+ _build_image=1
+ fi
+
+ local _docker_output=""
+ if [ -z "${FLAGS_docker_output}" ]; then
+ _docker_output="${ANDROID_BUILD_TOP}/device/google/cuttlefish_vmm/${FLAGS_docker_arch}-linux-gnu"
+ else
+ _docker_output="${FLAGS_docker_output}"
+ fi
+
+ local _temp="$(mktemp -d)"
+ rsync -avR "${relative_source_files[@]/#/${DIR}/./}" "${_temp}"
+ if [ -n "${custom_manifest}" ]; then
+ cp "${custom_manifest}" "${_temp}"/custom.xml
+ else
+ touch "${_temp}"/custom.xml
+ fi
+
+ ${DIR}/rebuild-docker.sh "${FLAGS_docker_image}" \
+ "${FLAGS_docker_container}" \
+ "${FLAGS_docker_arch}" \
+ "${FLAGS_docker_user}" \
+ "${FLAGS_docker_uid}" \
+ "${_persistent}" \
+ "x${FLAGS_docker_source}" \
+ "x${FLAGS_docker_working}" \
+ "x${_docker_output}" \
+ "${_reuse}" \
+ "${_build_image}" \
+ "${_temp}/Dockerfile" \
+ "${_temp}" \
+ "${#docker_flags[@]}" "${docker_flags[@]}" \
+ "${#_prepare_source[@]}" "${_prepare_source[@]}"
+
+ rm -rf "${_temp}"
+}
+
+function build_on_gce() {
+ check_common_docker_options
+ if [[ -z "${FLAGS_gce_instance}" ]]; then
+ echo Must specify instance 1>&2
+ fail=1
+ fi
+ if [[ -z "${FLAGS_gce_project}" ]]; then
+ echo Must specify project 1>&2
+ fail=1
+ fi
+ if [[ -z "${FLAGS_gce_zone}" ]]; then
+ echo Must specify zone 1>&2
+ fail=1
+ fi
+ if [[ "${fail}" -ne 0 ]]; then
+ exit "${fail}"
+ fi
+ project_zone_flags=(--project="${FLAGS_gce_project}" --zone="${FLAGS_gce_zone}")
+ if [ ${_reuse} -eq 0 ]; then
+ delete_instances=("${FLAGS_gce_instance}")
+ gcloud compute instances delete -q \
+ "${delete_instances[@]}" \
+ "${project_zone_flags[@]}" || \
+ echo Instance does not exist
+ gcloud compute images delete -q \
+ "${delete_instances[@]/%/-image}" \
+ --project "${FLAGS_gce_project}" || \
+ echo Image does not exist
+ gcloud compute disks delete -q \
+ "${delete_instances[@]/%/-disk}" \
+ "${project_zone_flags[@]}" || \
+ echo Disk does not exist
+
+ gcloud compute disks create \
+ "${delete_instances[@]/%/-disk}" \
+ "${project_zone_flags[@]}" \
+ --image-project="${FLAGS_gce_source_image_project}" \
+ --image-family="${FLAGS_gce_source_image_family}"
+ gcloud compute images create \
+ "${delete_instances[@]/%/-image}" \
+ --source-disk "${delete_instances[@]/%/-disk}" \
+ --project "${FLAGS_gce_project}" --source-disk-zone "${FLAGS_gce_zone}" \
+ --licenses "https://www.googleapis.com/compute/v1/projects/vm-options/global/licenses/enable-vmx"
+ gcloud compute instances create \
+ "${delete_instances[@]}" \
+ "${project_zone_flags[@]}" \
+ --image "${delete_instances[@]/%/-image}" \
+ --boot-disk-size=200GB \
+ --machine-type=n1-standard-8 \
+ --min-cpu-platform "Intel Skylake"
+
+ wait_for_instance "${FLAGS_gce_instance}" "${project_zone_flags[@]}"
+
+ # install docker
+ gcloud beta compute ssh "${SSH_FLAGS[@]}" \
+ "${project_zone_flags[@]}" \
+ "${FLAGS_gce_user}@${FLAGS_gce_instance}" -- \
+ 'curl -fsSL https://get.docker.com | /bin/bash'
+ gcloud beta compute ssh "${SSH_FLAGS[@]}" \
+ "${project_zone_flags[@]}" \
+ "${FLAGS_gce_user}@${FLAGS_gce_instance}" -- \
+ sudo usermod -aG docker "${FLAGS_gce_user}"
+
+ # beta for the --internal-ip flag that may be passed via SSH_FLAGS
+
+ gcloud beta compute ssh "${SSH_FLAGS[@]}" \
+ "${project_zone_flags[@]}" \
+ "${FLAGS_gce_user}@${FLAGS_gce_instance}" -- \
+ mkdir -p '$PWD/docker $PWD/docker/source $PWD/docker/working $PWD/docker/output'
+
+ tar czv -C "${DIR}" -f - "${relative_source_files[@]}" | \
+ gcloud beta compute ssh "${SSH_FLAGS[@]}" \
+ "${project_zone_flags[@]}" \
+ "${FLAGS_gce_user}@${FLAGS_gce_instance}" -- \
+ 'tar xzv -C ~/docker -f -'
+ if [ -n "${custom_manifest}" ]; then
+ gcloud beta compute scp "${SSH_FLAGS[@]}" \
+ "${project_zone_flags[@]}" \
+ "${custom_manifest}" \
+ "${FLAGS_gce_user}@${FLAGS_gce_instance}:~/docker/custom.xml"
+ else
+ gcloud beta compute ssh "${SSH_FLAGS[@]}" \
+ "${project_zone_flags[@]}" \
+ "${FLAGS_gce_user}@${FLAGS_gce_instance}" -- \
+ "touch ~/docker/custom.xml"
+ fi
+ fi
+
+ local _status=$(gcloud compute instances list \
+ --project="${FLAGS_gce_project}" \
+ --zones="${FLAGS_gce_zone}" \
+ --filter="name=('${FLAGS_gce_instance}')" \
+ --format=flattened | awk '/status:/ {print $2}')
+ if [ "${_status}" != "RUNNING" ] ; then
+ echo "Instance ${FLAGS_gce_instance} is not running."
+ exit 1;
+ fi
+
+ local -i _persistent=0
+ if [[ ${FLAGS_docker_persistent} -eq ${FLAGS_TRUE} ]]; then
+ _persistent=1
+ fi
+ local -i _build_image=0
+ if [[ ${FLAGS_docker_build_image} -eq ${FLAGS_TRUE} ]]; then
+ _build_image=1
+ fi
+ gcloud beta compute ssh "${SSH_FLAGS[@]}" \
+ "${project_zone_flags[@]}" \
+ "${FLAGS_gce_user}@${FLAGS_gce_instance}" -- \
+ ./docker/rebuild-docker.sh "${FLAGS_docker_image}" \
+ "${FLAGS_docker_container}" \
+ "${FLAGS_docker_arch}" \
+ '${USER}' \
+ '${UID}' \
+ "${_persistent}" \
+ 'x$PWD/docker/source' \
+ 'x$PWD/docker/working' \
+ 'x$PWD/docker/output' \
+ "${_reuse}" \
+ "${_build_image}" \
+ '~/docker/Dockerfile' \
+ '~/docker/' \
+ "${#docker_flags[@]}" "${docker_flags[@]}" \
+ "${#_prepare_source[@]}" "${_prepare_source[@]}"
+
+ gcloud beta compute ssh "${SSH_FLAGS[@]}" \
+ "${project_zone_flags[@]}" \
+ "${FLAGS_gce_user}@${FLAGS_gce_instance}" --command \
+ 'tar czv -C $PWD/docker/output -f - $(find $PWD/docker/output -printf "%P\n")' | \
+ tar xzv -C ${DIR}/${FLAGS_docker_arch}-linux-gnu -f -
+
+ gcloud compute disks describe \
+ "${project_zone_flags[@]}" "${FLAGS_gce_instance}" | \
+ grep ^sourceImage: > "${DIR}"/x86_64-linux-gnu/builder_image.txt
+}
+
+function build_on_arm_board() {
+ check_common_docker_options
+ if [[ "${FLAGS_docker_arch}" != "aarch64" ]]; then
+ echo ARM board supports building only aarch64 1>&2
+ fail=1
+ fi
+ if [[ -z "${FLAGS_arm_instance}" ]]; then
+ echo Must specify IP address of ARM board 1>&2
+ fail=1
+ fi
+ if [[ -z "${FLAGS_arm_user}" ]]; then
+ echo Must specify a user account on ARM board 1>&2
+ fail=1
+ fi
+ if [[ "${fail}" -ne 0 ]]; then
+ exit "${fail}"
+ fi
+ if [[ "${_reuse}" -eq 0 ]]; then
+ ssh -t "${FLAGS_arm_user}@${FLAGS_arm_instance}" -- \
+ rm -rf '$PWD/docker'
+ fi
+ rsync -avR -e ssh \
+ "${relative_source_files[@]/#/${DIR}/./}" \
+ "${FLAGS_arm_user}@${FLAGS_arm_instance}:~/docker/"
+
+ if [ -n "${custom_manifest}" ]; then
+ scp "${custom_manifest}" "${FLAGS_arm_user}@${FLAGS_arm_instance}":~/docker/custom.xml
+ else
+ ssh -t "${FLAGS_arm_user}@${FLAGS_arm_instance}" -- \
+ "touch ~/docker/custom.xml"
+ fi
+
+ local -i _persistent=0
+ if [[ ${FLAGS_docker_persistent} -eq ${FLAGS_TRUE} ]]; then
+ _persistent=1
+ fi
+ local -i _build_image=0
+ if [[ ${FLAGS_docker_build_image} -eq ${FLAGS_TRUE} ]]; then
+ _build_image=1
+ fi
+ ssh -t "${FLAGS_arm_user}@${FLAGS_arm_instance}" -- \
+ mkdir -p '$PWD/docker/source' '$PWD/docker/working' '$PWD/docker/output'
+ ssh -t "${FLAGS_arm_user}@${FLAGS_arm_instance}" -- \
+ ./docker/rebuild-docker.sh "${FLAGS_docker_image}" \
+ "${FLAGS_docker_container}" \
+ "${FLAGS_docker_arch}" \
+ '${USER}' \
+ '${UID}' \
+ "${_persistent}" \
+ 'x$PWD/docker/source' \
+ 'x$PWD/docker/working' \
+ 'x$PWD/docker/output' \
+ "${_reuse}" \
+ "${_build_image}" \
+ '~/docker/Dockerfile' \
+ '~/docker/' \
+ "${#docker_flags[@]}" "${docker_flags[@]}" \
+ "${#_prepare_source[@]}" "${_prepare_source[@]}"
+
+ rsync -avR -e ssh "${FLAGS_arm_user}@${FLAGS_arm_instance}":docker/output/./ \
+ "${ANDROID_BUILD_TOP}/device/google/cuttlefish_vmm/${FLAGS_docker_arch}-linux-gnu"
+}
+
+main() {
+ set -o errexit
+ set -x
+ fail=0
+ relative_source_files=("rebuild-docker.sh"
+ "rebuild-internal.sh"
+ "Dockerfile"
+ "manifest.xml"
+ ".dockerignore")
+ # These must match the definitions in the Dockerfile
+ docker_flags=("-eSOURCE_DIR=/source" "-eWORKING_DIR=/working" "-eOUTPUT_DIR=/output" "-eTOOLS_DIR=/static/tools")
+
+ if [[ $(( $((${FLAGS_gce}==${FLAGS_TRUE})) + $((${FLAGS_arm}==${FLAGS_TRUE})) + $((${FLAGS_docker}==${FLAGS_TRUE})) )) > 1 ]]; then
+ echo You may specify only one of --gce, --docker, or --arm 1>&2
+ exit 2
+ fi
+
+ if [[ -n "${FLAGS_manifest}" ]]; then
+ if [[ ! -f "${FLAGS_manifest}" ]]; then
+ echo custom manifest not found: ${FLAGS_manifest} 1>&1
+ exit 2
+ fi
+ custom_manifest="${FLAGS_manifest}"
+ docker_flags+=("-eCUSTOM_MANIFEST=/static/custom.xml")
+ else
+ custom_manifest="${DIR}/manifest.xml"
+ docker_flags+=("-eCUSTOM_MANIFEST=/static/manifest.xml")
+ fi
+ local -a _prepare_source=(setup_env fetch_source);
+ local -i _reuse=0
+ if [[ ${FLAGS_reuse} -eq ${FLAGS_TRUE} ]]; then
+ # neither install packages, nor sync sources; skip to building them
+ _prepare_source=(setup_env)
+ # unless you're setting up a non-persistent container and --docker_source is
+ # the empty string; in this case, --reuse implies --reuse_resync
+ if [[ "${FLAGS_docker_persistent}" -eq ${FLAGS_FALSE} && \
+ -z "${FLAGS_docker_source}" ]]; then
+ _prepare_source+=(resync_source)
+ fi
+ _reuse=1
+ fi
+ if [[ ${FLAGS_reuse_resync} -eq ${FLAGS_TRUE} ]]; then
+ # do not install packages but clean and sync sources afresh
+ _prepare_source=(setup_env resync_source);
+ _reuse=1
+ fi
+ if [[ ${FLAGS_gce} -eq ${FLAGS_TRUE} ]]; then
+ build_on_gce
+ exit 0
+ gcloud compute instances delete -q \
+ "${project_zone_flags[@]}" \
+ "${FLAGS_gce_instance}"
+ fi
+ if [[ ${FLAGS_arm} -eq ${FLAGS_TRUE} ]]; then
+ build_on_arm_board
+ exit 0
+ fi
+ if [[ ${FLAGS_docker} -eq ${FLAGS_TRUE} ]]; then
+ build_locally_using_docker
+ exit 0
+ fi
+}
+
+FLAGS "$@" || exit 1
+main "${FLAGS_ARGV[@]}"
diff --git a/update-manifest-gfxstream.py b/update-manifest-gfxstream.py
new file mode 100755
index 0000000..6d60064
--- /dev/null
+++ b/update-manifest-gfxstream.py
@@ -0,0 +1,122 @@
+#!/usr/bin/python3
+# Copyright 2020 - The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the', help='License');
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an', help='AS IS' BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Script that makes it easy to have the docker build correspond to a particular
+# gfxstream Android build id
+
+import os
+import subprocess
+import sys
+import lxml.etree as etree
+
+gfxstream_manifest_filename = sys.argv[1]
+target_manifest_filename = sys.argv[2]
+
+# Don't need to check out the entire emulator repo to build gfxstream
+gfxstream_projects = set([
+ "device/generic/goldfish-opengl",
+ "device/generic/vulkan-cereal",
+ "platform/external/angle",
+ "platform/external/astc-codec",
+ "platform/external/boringssl",
+ "platform/external/c-ares",
+ "platform/external/curl",
+ "platform/external/deqp",
+ "platform/external/ffmpeg",
+ "platform/external/googletest",
+ "platform/external/google-benchmark",
+ "platform/external/google-breakpad",
+ "platform/external/grpc-grpc",
+ "platform/external/libffi",
+ "platform/external/libvpx",
+ "platform/external/libyuv",
+ "platform/external/libpng",
+ "platform/external/libusb",
+ "platform/external/lz4",
+ "platform/external/protobuf",
+ "platform/external/qemu",
+ "platform/external/tinyobjloader",
+ "platform/external/nasm",
+ "platform/external/zlib",
+ "platform/prebuilts/android-emulator-build/common",
+ "platform/prebuilts/android-emulator-build/curl",
+ "platform/prebuilts/android-emulator-build/mesa",
+ "platform/prebuilts/android-emulator-build/mesa-deps",
+ "platform/prebuilts/android-emulator-build/protobuf",
+ "platform/prebuilts/android-emulator-build/qemu-android-deps",
+ "platform/prebuilts/clang/host/linux-x86",
+ "platform/prebuilts/cmake/linux-x86",
+ "platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.17-4.8",
+ "platform/prebuilts/ninja/linux-x86",
+])
+
+def generate_filtered_gfxstream_projects(filename):
+ outs = []
+
+ out = etree.Element("manifest")
+
+ t = etree.parse(filename)
+ r = t.getroot()
+
+ for e in r.findall("project"):
+ if e.attrib["name"] in gfxstream_projects:
+ outp = etree.SubElement(out, "project")
+ outs.append(outp)
+ outp.set("groups", "gfxstream")
+ outp.set("name", e.attrib["name"])
+ outp.set("path", e.attrib["path"])
+ outp.set("revision", e.attrib["revision"])
+
+ return dict(map(lambda e: (e.attrib["name"], e), outs))
+
+def update_projects(current_gfxstream_projects, target_manifest_filename):
+ target_root = etree.parse( \
+ target_manifest_filename,
+ etree.XMLParser(remove_blank_text=True)).getroot()
+
+ found_projects = []
+
+ for e in target_root.findall("project"):
+ if e.attrib["name"] in gfxstream_projects:
+ e.set("revision", current_gfxstream_projects[e.attrib["name"]].attrib["revision"])
+ found_projects.append(e.attrib["name"])
+
+ projects_to_add = gfxstream_projects - set(found_projects)
+
+ for p in projects_to_add:
+ project_element = current_gfxstream_projects[p]
+ outp = etree.SubElement(target_root, "project")
+ outp.set("groups", project_element.attrib["groups"])
+ outp.set("name", project_element.attrib["name"])
+ outp.set("path", project_element.attrib["path"])
+ outp.set("revision", project_element.attrib["revision"])
+
+ return target_root
+
+print("Generating...")
+output_string = etree.tostring( \
+ update_projects(
+ generate_filtered_gfxstream_projects(gfxstream_manifest_filename),
+ target_manifest_filename),
+ pretty_print=True,
+ xml_declaration=True,encoding="utf-8")
+
+print("Result: ")
+print(output_string.decode())
+print("Writing result to %s" % target_manifest_filename)
+
+fh = open(target_manifest_filename, 'wb')
+fh.write(output_string)
+fh.close()
diff --git a/x86_64-linux-gnu/Cargo.lock b/x86_64-linux-gnu/Cargo.lock
new file mode 100644
index 0000000..fa6fb2f
--- /dev/null
+++ b/x86_64-linux-gnu/Cargo.lock
@@ -0,0 +1,982 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "aarch64"
+version = "0.1.0"
+dependencies = [
+ "arch",
+ "data_model",
+ "devices",
+ "io_jail",
+ "kernel_cmdline",
+ "kvm",
+ "kvm_sys",
+ "libc",
+ "remain",
+ "resources",
+ "sync",
+ "sys_util",
+ "vm_control",
+]
+
+[[package]]
+name = "acpi_tables"
+version = "0.1.0"
+dependencies = [
+ "data_model",
+]
+
+[[package]]
+name = "arch"
+version = "0.1.0"
+dependencies = [
+ "devices",
+ "io_jail",
+ "kernel_cmdline",
+ "kvm",
+ "libc",
+ "resources",
+ "sync",
+ "sys_util",
+ "vm_control",
+]
+
+[[package]]
+name = "assertions"
+version = "0.1.0"
+
+[[package]]
+name = "audio_streams"
+version = "0.1.0"
+dependencies = [
+ "sync",
+ "sys_util",
+]
+
+[[package]]
+name = "bit_field"
+version = "0.1.0"
+dependencies = [
+ "bit_field_derive",
+]
+
+[[package]]
+name = "bit_field_derive"
+version = "0.1.0"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "bitflags"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693"
+
+[[package]]
+name = "cc"
+version = "1.0.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f159dfd43363c4d08055a07703eb7a3406b0dac4d0584d96965a3262db3c9d16"
+
+[[package]]
+name = "cfg-if"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
+
+[[package]]
+name = "cras-sys"
+version = "0.1.0"
+dependencies = [
+ "audio_streams",
+ "data_model",
+]
+
+[[package]]
+name = "cros_async"
+version = "0.1.0"
+dependencies = [
+ "futures",
+ "libc",
+ "paste",
+ "sys_util",
+ "syscall_defines",
+]
+
+[[package]]
+name = "crosvm"
+version = "0.1.0"
+dependencies = [
+ "aarch64",
+ "acpi_tables",
+ "arch",
+ "assertions",
+ "audio_streams",
+ "bit_field",
+ "crosvm_plugin",
+ "data_model",
+ "devices",
+ "disk",
+ "enumn",
+ "gpu_buffer",
+ "gpu_renderer",
+ "io_jail",
+ "kernel_cmdline",
+ "kernel_loader",
+ "kvm",
+ "kvm_sys",
+ "libc",
+ "libcras",
+ "minijail-sys",
+ "msg_socket",
+ "net_util",
+ "p9",
+ "protobuf",
+ "protos",
+ "rand_ish",
+ "remain",
+ "resources",
+ "sync",
+ "sys_util",
+ "vhost",
+ "vm_control",
+ "x86_64",
+]
+
+[[package]]
+name = "crosvm_plugin"
+version = "0.17.0"
+dependencies = [
+ "kvm",
+ "kvm_sys",
+ "libc",
+ "protobuf",
+ "protos",
+ "sys_util",
+]
+
+[[package]]
+name = "data_model"
+version = "0.1.0"
+dependencies = [
+ "assertions",
+]
+
+[[package]]
+name = "devices"
+version = "0.1.0"
+dependencies = [
+ "audio_streams",
+ "bit_field",
+ "bitflags",
+ "data_model",
+ "disk",
+ "enumn",
+ "gpu_buffer",
+ "gpu_display",
+ "gpu_renderer",
+ "io_jail",
+ "kvm",
+ "kvm_sys",
+ "libc",
+ "libcras",
+ "linux_input_sys",
+ "msg_on_socket_derive",
+ "msg_socket",
+ "net_sys",
+ "net_util",
+ "p9",
+ "protos",
+ "remain",
+ "resources",
+ "sync",
+ "sys_util",
+ "syscall_defines",
+ "tempfile 3.0.7",
+ "tpm2",
+ "usb_util",
+ "vfio_sys",
+ "vhost",
+ "virtio_sys",
+ "vm_control",
+]
+
+[[package]]
+name = "disk"
+version = "0.1.0"
+dependencies = [
+ "data_model",
+ "libc",
+ "protobuf",
+ "protos",
+ "remain",
+ "sys_util",
+]
+
+[[package]]
+name = "enumn"
+version = "0.1.0"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "futures"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e05b85ec287aac0dc34db7d4a569323df697f9c55b99b15d6b4ef8cde49f613"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-executor",
+ "futures-io",
+ "futures-sink",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-channel"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f366ad74c28cca6ba456d95e6422883cfb4b252a83bed929c83abfdbbf2967d5"
+dependencies = [
+ "futures-core",
+ "futures-sink",
+]
+
+[[package]]
+name = "futures-core"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "59f5fff90fd5d971f936ad674802482ba441b6f09ba5e15fd8b39145582ca399"
+
+[[package]]
+name = "futures-executor"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "10d6bb888be1153d3abeb9006b11b02cf5e9b209fda28693c31ae1e4e012e314"
+dependencies = [
+ "futures-core",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-io"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "de27142b013a8e869c14957e6d2edeef89e97c289e69d042ee3a49acd8b51789"
+
+[[package]]
+name = "futures-macro"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d0b5a30a4328ab5473878237c447333c093297bded83a4983d10f4deea240d39"
+dependencies = [
+ "proc-macro-hack",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "futures-sink"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f2032893cb734c7a05d85ce0cc8b8c4075278e93b24b66f9de99d6eb0fa8acc"
+
+[[package]]
+name = "futures-task"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bdb66b5f09e22019b1ab0830f7785bcea8e7a42148683f99214f73f8ec21a626"
+dependencies = [
+ "once_cell",
+]
+
+[[package]]
+name = "futures-util"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8764574ff08b701a084482c3c7031349104b07ac897393010494beaa18ce32c6"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-macro",
+ "futures-sink",
+ "futures-task",
+ "memchr",
+ "pin-project",
+ "pin-utils",
+ "proc-macro-hack",
+ "proc-macro-nested",
+ "slab",
+]
+
+[[package]]
+name = "getopts"
+version = "0.2.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14dbbfd5c71d70241ecf9e6f13737f7b5ce823821063188d7e46c41d371eebd5"
+dependencies = [
+ "unicode-width",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.1.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7abc8dd8451921606d809ba32e95b6111925cd2906060d2dcc29c070220503eb"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi",
+]
+
+[[package]]
+name = "gpu_buffer"
+version = "0.1.0"
+dependencies = [
+ "data_model",
+ "sys_util",
+]
+
+[[package]]
+name = "gpu_display"
+version = "0.1.0"
+dependencies = [
+ "cc",
+ "data_model",
+ "libc",
+ "linux_input_sys",
+ "sys_util",
+]
+
+[[package]]
+name = "gpu_renderer"
+version = "0.1.0"
+dependencies = [
+ "data_model",
+ "libc",
+ "sys_util",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.1.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3deed196b6e7f9e44a2ae8d94225d80302d81208b1bb673fd21fe634645c85a9"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "io_jail"
+version = "0.1.0"
+dependencies = [
+ "libc",
+ "minijail-sys",
+]
+
+[[package]]
+name = "kernel_cmdline"
+version = "0.1.0"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "kernel_loader"
+version = "0.1.0"
+dependencies = [
+ "libc",
+ "sys_util",
+]
+
+[[package]]
+name = "kvm"
+version = "0.1.0"
+dependencies = [
+ "data_model",
+ "kvm_sys",
+ "libc",
+ "msg_socket",
+ "sys_util",
+]
+
+[[package]]
+name = "kvm_sys"
+version = "0.1.0"
+dependencies = [
+ "libc",
+ "sys_util",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.74"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2f02823cf78b754822df5f7f268fb59822e7296276d3e069d8e8cb26a14bd10"
+
+[[package]]
+name = "libcras"
+version = "0.1.0"
+dependencies = [
+ "audio_streams",
+ "cras-sys",
+ "data_model",
+ "libc",
+ "sys_util",
+]
+
+[[package]]
+name = "linux_input_sys"
+version = "0.1.0"
+dependencies = [
+ "data_model",
+ "libc",
+ "sys_util",
+]
+
+[[package]]
+name = "log"
+version = "0.4.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4fabed175da42fed1fa0746b0ea71f412aa9d35e76e95e59b192c64b9dc2bf8b"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "memchr"
+version = "2.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3728d817d99e5ac407411fa471ff9800a778d88a24685968b36824eaf4bee400"
+
+[[package]]
+name = "minijail-sys"
+version = "0.0.11"
+dependencies = [
+ "libc",
+ "pkg-config",
+]
+
+[[package]]
+name = "msg_on_socket_derive"
+version = "0.1.0"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "msg_socket"
+version = "0.1.0"
+dependencies = [
+ "cros_async",
+ "data_model",
+ "futures",
+ "libc",
+ "msg_on_socket_derive",
+ "sys_util",
+]
+
+[[package]]
+name = "net_sys"
+version = "0.1.0"
+dependencies = [
+ "sys_util",
+]
+
+[[package]]
+name = "net_util"
+version = "0.1.0"
+dependencies = [
+ "data_model",
+ "libc",
+ "net_sys",
+ "sys_util",
+]
+
+[[package]]
+name = "num_cpus"
+version = "1.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05499f3756671c15885fee9034446956fff3f243d6077b91e5767df161f766b3"
+dependencies = [
+ "hermit-abi",
+ "libc",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b631f7e854af39a1739f401cf34a8a013dfe09eac4fa4dba91e9768bd28168d"
+
+[[package]]
+name = "p9"
+version = "0.1.0"
+dependencies = [
+ "libc",
+ "wire_format_derive",
+]
+
+[[package]]
+name = "paste"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f6ddc8e145de01d9180ac7b78b9676f95a9c2447f6a88b2c2a04702211bc5d71"
+
+[[package]]
+name = "pin-project"
+version = "0.4.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca4433fff2ae79342e497d9f8ee990d174071408f28f726d6d83af93e58e48aa"
+dependencies = [
+ "pin-project-internal",
+]
+
+[[package]]
+name = "pin-project-internal"
+version = "0.4.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c0e815c3ee9a031fdf5af21c10aa17c573c9c6a566328d99e3936c34e36461f"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "pin-utils"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
+
+[[package]]
+name = "pkg-config"
+version = "0.3.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d36492546b6af1463394d46f0c834346f31548646f6ba10849802c9c9a27ac33"
+
+[[package]]
+name = "poll_token_derive"
+version = "0.1.0"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "237a5ed80e274dbc66f86bd59c1e25edc039660be53194b5fe0a482e0f2612ea"
+
+[[package]]
+name = "proc-macro-hack"
+version = "0.5.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "99c605b9a0adc77b7211c6b1f722dcb613d68d66859a44f3d485a6da332b0598"
+
+[[package]]
+name = "proc-macro-nested"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eba180dafb9038b050a4c280019bbedf9f2467b61e5d892dcad585bb57aadc5a"
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "04f5f085b5d71e2188cb8271e5da0161ad52c3f227a661a3c135fdf28e258b12"
+dependencies = [
+ "unicode-xid",
+]
+
+[[package]]
+name = "protobuf"
+version = "2.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cb14183cc7f213ee2410067e1ceeadba2a7478a59432ff0747a335202798b1e2"
+
+[[package]]
+name = "protobuf-codegen"
+version = "2.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3360a1e017386e7d9fc65f7425bef9bcf1e62871f8b5a7b0570ef2ff5073f9a0"
+dependencies = [
+ "protobuf",
+]
+
+[[package]]
+name = "protoc"
+version = "2.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93daf2f02fa5b0fca2798a24c5a77b6e0d262dc9c386335e04ddbd25ca8237e9"
+dependencies = [
+ "log",
+ "which",
+]
+
+[[package]]
+name = "protoc-rust"
+version = "2.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "61d4df67d09fc026da7cdf2d039e0340d4a09775f65d4216762886d2f1a1f245"
+dependencies = [
+ "protobuf",
+ "protobuf-codegen",
+ "protoc",
+ "tempfile 3.1.0",
+]
+
+[[package]]
+name = "protos"
+version = "0.1.0"
+dependencies = [
+ "kvm_sys",
+ "protobuf",
+ "protoc-rust",
+]
+
+[[package]]
+name = "qcow_utils"
+version = "0.1.0"
+dependencies = [
+ "disk",
+ "getopts",
+ "libc",
+ "sys_util",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa563d17ecb180e500da1cfd2b028310ac758de548efdd203e18f283af693f37"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "rand"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03"
+dependencies = [
+ "getrandom",
+ "libc",
+ "rand_chacha",
+ "rand_core",
+ "rand_hc",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402"
+dependencies = [
+ "ppv-lite86",
+ "rand_core",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "rand_hc"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c"
+dependencies = [
+ "rand_core",
+]
+
+[[package]]
+name = "rand_ish"
+version = "0.1.0"
+
+[[package]]
+name = "redox_syscall"
+version = "0.1.57"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "41cc0f7e4d5d4544e8861606a285bb08d3e70712ccc7d2b84d7c0ccfaf4b05ce"
+
+[[package]]
+name = "remain"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "70ba1e78fa68412cb93ef642fd4d20b9a941be49ee9333875ebaf13112673ea7"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "remove_dir_all"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "resources"
+version = "0.1.0"
+dependencies = [
+ "gpu_buffer",
+ "libc",
+ "msg_socket",
+ "sys_util",
+]
+
+[[package]]
+name = "slab"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8"
+
+[[package]]
+name = "syn"
+version = "1.0.38"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e69abc24912995b3038597a7a593be5053eb0fb44f3cc5beec0deb421790c1f4"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-xid",
+]
+
+[[package]]
+name = "sync"
+version = "0.1.0"
+
+[[package]]
+name = "sys_util"
+version = "0.1.0"
+dependencies = [
+ "data_model",
+ "libc",
+ "poll_token_derive",
+ "sync",
+ "syscall_defines",
+ "tempfile 3.0.7",
+]
+
+[[package]]
+name = "syscall_defines"
+version = "0.1.0"
+
+[[package]]
+name = "tempfile"
+version = "3.0.7"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "tempfile"
+version = "3.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a6e24d9338a0a5be79593e2fa15a648add6138caa803e2d5bc782c371732ca9"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "rand",
+ "redox_syscall",
+ "remove_dir_all",
+ "winapi",
+]
+
+[[package]]
+name = "thiserror"
+version = "1.0.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7dfdd070ccd8ccb78f4ad66bf1982dc37f620ef696c6b5028fe2ed83dd3d0d08"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd80fc12f73063ac132ac92aceea36734f04a1d93c1240c6944e23a3b8841793"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "tpm2"
+version = "0.1.0"
+dependencies = [
+ "tpm2-sys",
+]
+
+[[package]]
+name = "tpm2-sys"
+version = "0.1.0"
+dependencies = [
+ "num_cpus",
+ "pkg-config",
+]
+
+[[package]]
+name = "unicode-width"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9337591893a19b88d8d87f2cec1e73fad5cdfd10e5a6f349f498ad6ea2ffb1e3"
+
+[[package]]
+name = "unicode-xid"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f7fe0bb3479651439c9112f72b6c505038574c9fbb575ed1bf3b797fa39dd564"
+
+[[package]]
+name = "usb_sys"
+version = "0.1.0"
+dependencies = [
+ "sys_util",
+]
+
+[[package]]
+name = "usb_util"
+version = "0.1.0"
+dependencies = [
+ "assertions",
+ "data_model",
+ "libc",
+ "remain",
+ "sys_util",
+ "usb_sys",
+]
+
+[[package]]
+name = "vfio_sys"
+version = "0.1.0"
+dependencies = [
+ "sys_util",
+]
+
+[[package]]
+name = "vhost"
+version = "0.1.0"
+dependencies = [
+ "assertions",
+ "libc",
+ "net_util",
+ "sys_util",
+ "virtio_sys",
+]
+
+[[package]]
+name = "virtio_sys"
+version = "0.1.0"
+dependencies = [
+ "sys_util",
+]
+
+[[package]]
+name = "vm_control"
+version = "0.1.0"
+dependencies = [
+ "data_model",
+ "kvm",
+ "libc",
+ "msg_socket",
+ "resources",
+ "sync",
+ "sys_util",
+]
+
+[[package]]
+name = "wasi"
+version = "0.9.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519"
+
+[[package]]
+name = "which"
+version = "4.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87c14ef7e1b8b8ecfc75d5eca37949410046e66f15d185c01d70824f1f8111ef"
+dependencies = [
+ "libc",
+ "thiserror",
+]
+
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+dependencies = [
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
+]
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
+[[package]]
+name = "wire_format_derive"
+version = "0.1.0"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "x86_64"
+version = "0.1.0"
+dependencies = [
+ "acpi_tables",
+ "arch",
+ "assertions",
+ "data_model",
+ "devices",
+ "io_jail",
+ "kernel_cmdline",
+ "kernel_loader",
+ "kvm",
+ "kvm_sys",
+ "libc",
+ "remain",
+ "resources",
+ "sync",
+ "sys_util",
+ "vm_control",
+]
diff --git a/x86_64-linux-gnu/builder-packages.txt b/x86_64-linux-gnu/builder-packages.txt
new file mode 100644
index 0000000..711d630
--- /dev/null
+++ b/x86_64-linux-gnu/builder-packages.txt
@@ -0,0 +1,515 @@
+adduser 3.118
+apt 1.8.2.1
+apt-utils 1.8.2.1
+autoconf 2.69-11
+automake 1:1.16.1-4
+autopoint 0.19.8.1-9
+autotools-dev 20180224.1
+base-files 10.3+deb10u5
+base-passwd 3.5.46
+bash 5.0-4
+binutils 2.31.1-16
+binutils-aarch64-linux-gnu 2.31.1-16
+binutils-common:amd64 2.31.1-16
+binutils-x86-64-linux-gnu 2.31.1-16
+bsd-mailx 8.1.2-0.20180807cvs-1
+bsdmainutils 11.1.2+b1
+bsdutils 1:2.33.1-0.1
+build-essential 12.6
+bzip2 1.0.6-9.2~deb10u1
+ca-certificates 20200601~deb10u1
+cmake 3.13.4-1
+cmake-data 3.13.4-1
+coreutils 8.30-3
+cpp 4:8.3.0-1
+cpp-8 8.3.0-6
+cpp-8-aarch64-linux-gnu 8.3.0-2cross1
+cpp-aarch64-linux-gnu 4:8.3.0-1
+cron 3.0pl1-134+deb10u1
+cross-config 2.6.15-3
+crossbuild-essential-arm64 12.6
+curl 7.64.0-4+deb10u1
+dash 0.5.10.2-5
+dbus 1.12.20-0+deb10u1
+debconf 1.5.71
+debhelper 12.1.1
+debian-archive-keyring 2019.1
+debianutils 4.8.6.1
+dh-autoreconf 19
+dh-python 3.20190308
+dh-strip-nondeterminism 1.1.2-1
+dialog 1.3-20190211-1
+diffutils 1:3.7-3
+dirmngr 2.2.12-1+deb10u1
+dmsetup 2:1.02.155-3
+dns-root-data 2019031302
+dnsmasq 2.80-1
+dnsmasq-base 2.80-1
+dpkg 1.19.7
+dpkg-cross 2.6.15-3
+dpkg-dev 1.19.7
+dwz 0.12-3
+e2fsprogs 1.44.5-1+deb10u3
+equivs 2.2.0
+exim4-base 4.92-8+deb10u4
+exim4-config 4.92-8+deb10u4
+exim4-daemon-light 4.92-8+deb10u4
+fakeroot 1.23-1
+fdisk 2.33.1-0.1
+file 1:5.35-4+deb10u1
+findutils 4.6.0+git+20190209-2
+g++ 4:8.3.0-1
+g++-8 8.3.0-6
+g++-8-aarch64-linux-gnu 8.3.0-2cross1
+g++-aarch64-linux-gnu 4:8.3.0-1
+gcc 4:8.3.0-1
+gcc-8 8.3.0-6
+gcc-8-aarch64-linux-gnu 8.3.0-2cross1
+gcc-8-aarch64-linux-gnu-base:amd64 8.3.0-2cross1
+gcc-8-base:amd64 8.3.0-6
+gcc-8-cross-base 8.3.0-2cross1
+gcc-aarch64-linux-gnu 4:8.3.0-1
+gettext 0.19.8.1-9
+gettext-base 0.19.8.1-9
+gir1.2-glib-2.0:amd64 1.58.3-2
+git 1:2.20.1-2+deb10u3
+git-man 1:2.20.1-2+deb10u3
+gnupg 2.2.12-1+deb10u1
+gnupg-l10n 2.2.12-1+deb10u1
+gnupg-utils 2.2.12-1+deb10u1
+gpg 2.2.12-1+deb10u1
+gpg-agent 2.2.12-1+deb10u1
+gpg-wks-client 2.2.12-1+deb10u1
+gpg-wks-server 2.2.12-1+deb10u1
+gpgconf 2.2.12-1+deb10u1
+gpgsm 2.2.12-1+deb10u1
+gpgv 2.2.12-1+deb10u1
+grep 3.3-1
+groff-base 1.22.4-3
+gzip 1.9-3
+hostname 3.21
+init-system-helpers 1.56+nmu1
+intltool-debian 0.35.0+20060710.5
+iproute2 4.20.0-2
+iptables 1.8.2-4
+krb5-locales 1.17-3
+less 487-0.1+b1
+libacl1:amd64 2.2.53-4
+libalgorithm-diff-perl 1.19.03-2
+libalgorithm-diff-xs-perl 0.04-5+b1
+libalgorithm-merge-perl 0.08-3
+libapparmor1:amd64 2.13.2-10
+libapt-inst2.0:amd64 1.8.2.1
+libapt-pkg5.0:amd64 1.8.2.1
+libarchive-cpio-perl 0.10-1
+libarchive-zip-perl 1.64-1
+libarchive13:amd64 3.3.3-4+deb10u1
+libargon2-1:amd64 0~20171227-0.2
+libasan5:amd64 8.3.0-6
+libasan5-arm64-cross 8.3.0-2cross1
+libassuan0:amd64 2.5.2-1
+libatm1:amd64 1:2.5.1-2
+libatomic1:amd64 8.3.0-6
+libatomic1-arm64-cross 8.3.0-2cross1
+libattr1:amd64 1:2.4.48-4
+libaudit-common 1:2.8.4-3
+libaudit1:amd64 1:2.8.4-3
+libauthen-sasl-perl 2.1600-1
+libbinutils:amd64 2.31.1-16
+libblkid1:amd64 2.33.1-0.1
+libbsd0:amd64 0.9.1-2
+libbz2-1.0:amd64 1.0.6-9.2~deb10u1
+libc-bin 2.28-10
+libc-dev-bin 2.28-10
+libc6:amd64 2.28-10
+libc6-arm64-cross 2.28-7cross1
+libc6-dev:amd64 2.28-10
+libc6-dev-arm64-cross 2.28-7cross1
+libcap-dev:amd64 1:2.25-2
+libcap-ng0:amd64 0.7.9-2
+libcap2:amd64 1:2.25-2
+libcap2-bin 1:2.25-2
+libcc1-0:amd64 8.3.0-6
+libcom-err2:amd64 1.44.5-1+deb10u3
+libconfig-auto-perl 0.44-1
+libconfig-inifiles-perl 3.000001-1
+libcroco3:amd64 0.6.12-3
+libcryptsetup12:amd64 2:2.1.0-5+deb10u2
+libcurl3-gnutls:amd64 7.64.0-4+deb10u1
+libcurl4:amd64 7.64.0-4+deb10u1
+libdata-dump-perl 1.23-1
+libdb5.3:amd64 5.3.28+dfsg1-0.5
+libdbus-1-3:amd64 1.12.20-0+deb10u1
+libdebconfclient0:amd64 0.249
+libdebian-dpkgcross-perl 2.6.15-3
+libdevmapper1.02.1:amd64 2:1.02.155-3
+libdpkg-perl 1.19.7
+libdrm-amdgpu1:amd64 2.4.97-1
+libdrm-common 2.4.97-1
+libdrm-dev:amd64 2.4.97-1
+libdrm-intel1:amd64 2.4.97-1
+libdrm-nouveau2:amd64 2.4.97-1
+libdrm-radeon1:amd64 2.4.97-1
+libdrm2:amd64 2.4.97-1
+libedit2:amd64 3.1-20181209-1
+libegl-mesa0:amd64 18.3.6-2+deb10u1
+libegl1:amd64 1.1.0-1
+libegl1-mesa-dev:amd64 18.3.6-2+deb10u1
+libelf1:amd64 0.176-1.1
+libencode-locale-perl 1.05-1
+liberror-perl 0.17027-2
+libestr0:amd64 0.1.10-2.1
+libevent-2.1-6:amd64 2.1.8-stable-4
+libexpat1:amd64 2.2.6-2+deb10u1
+libexpat1-dev:amd64 2.2.6-2+deb10u1
+libext2fs2:amd64 1.44.5-1+deb10u3
+libfakeroot:amd64 1.23-1
+libfastjson4:amd64 0.99.8-2
+libfdisk1:amd64 2.33.1-0.1
+libfdt-dev 1.4.7-3
+libfdt1:amd64 1.4.7-3
+libffi6:amd64 3.2.1-9
+libfile-fcntllock-perl 0.22-3+b5
+libfile-homedir-perl 1.004-1
+libfile-listing-perl 6.04-1
+libfile-stripnondeterminism-perl 1.1.2-1
+libfile-which-perl 1.23-1
+libfont-afm-perl 1.20-2
+libgbm1:amd64 18.3.6-2+deb10u1
+libgcc-8-dev:amd64 8.3.0-6
+libgcc-8-dev-arm64-cross 8.3.0-2cross1
+libgcc1:amd64 1:8.3.0-6
+libgcc1-arm64-cross 1:8.3.0-2cross1
+libgcrypt20:amd64 1.8.4-5
+libgdbm-compat4:amd64 1.18.1-4
+libgdbm6:amd64 1.18.1-4
+libgirepository-1.0-1:amd64 1.58.3-2
+libgl1:amd64 1.1.0-1
+libgl1-mesa-dev:amd64 18.3.6-2+deb10u1
+libgl1-mesa-dri:amd64 18.3.6-2+deb10u1
+libglapi-mesa:amd64 18.3.6-2+deb10u1
+libgles1:amd64 1.1.0-1
+libgles2:amd64 1.1.0-1
+libgles2-mesa-dev:amd64 18.3.6-2+deb10u1
+libglib2.0-0:amd64 2.58.3-2+deb10u2
+libglib2.0-data 2.58.3-2+deb10u2
+libglvnd-core-dev:amd64 1.1.0-1
+libglvnd-dev:amd64 1.1.0-1
+libglvnd0:amd64 1.1.0-1
+libglx-mesa0:amd64 18.3.6-2+deb10u1
+libglx0:amd64 1.1.0-1
+libgmp10:amd64 2:6.1.2+dfsg-4
+libgnutls-dane0:amd64 3.6.7-4+deb10u5
+libgnutls30:amd64 3.6.7-4+deb10u5
+libgomp1:amd64 8.3.0-6
+libgomp1-arm64-cross 8.3.0-2cross1
+libgpg-error0:amd64 1.35-1
+libgpm2:amd64 1.20.7-5
+libgssapi-krb5-2:amd64 1.17-3
+libhogweed4:amd64 3.4.1-1
+libhtml-form-perl 6.03-1
+libhtml-format-perl 2.12-1
+libhtml-parser-perl 3.72-3+b3
+libhtml-tagset-perl 3.20-3
+libhtml-tree-perl 5.07-2
+libhttp-cookies-perl 6.04-1
+libhttp-daemon-perl 6.01-3
+libhttp-date-perl 6.02-1
+libhttp-message-perl 6.18-1
+libhttp-negotiate-perl 6.01-1
+libicu63:amd64 63.1-6+deb10u1
+libidn11:amd64 1.33-2.2
+libidn2-0:amd64 2.0.5-1+deb10u1
+libio-html-perl 1.001-1
+libio-socket-ssl-perl 2.060-3
+libio-string-perl 1.08-3
+libip4tc0:amd64 1.8.2-4
+libip6tc0:amd64 1.8.2-4
+libiptc0:amd64 1.8.2-4
+libisl19:amd64 0.20-2
+libitm1:amd64 8.3.0-6
+libitm1-arm64-cross 8.3.0-2cross1
+libjansson4:amd64 2.12-1
+libjson-c3:amd64 0.12.1+ds-2+deb10u1
+libjsoncpp1:amd64 1.7.4-3
+libk5crypto3:amd64 1.17-3
+libkeyutils1:amd64 1.6-6
+libkmod2:amd64 26-1
+libkrb5-3:amd64 1.17-3
+libkrb5support0:amd64 1.17-3
+libksba8:amd64 1.3.5-2
+libldap-2.4-2:amd64 2.4.47+dfsg-3+deb10u2
+libldap-common 2.4.47+dfsg-3+deb10u2
+libllvm7:amd64 1:7.0.1-8+deb10u2
+liblocale-gettext-perl 1.07-3+b4
+liblockfile-bin 1.14-1.1
+liblockfile1:amd64 1.14-1.1
+liblognorm5:amd64 2.0.5-1
+liblsan0:amd64 8.3.0-6
+liblsan0-arm64-cross 8.3.0-2cross1
+libltdl-dev:amd64 2.4.6-9
+libltdl7:amd64 2.4.6-9
+liblwp-mediatypes-perl 6.02-1
+liblwp-protocol-https-perl 6.07-2
+liblz4-1:amd64 1.8.3-1
+liblzma5:amd64 5.2.4-1
+libmagic-mgc 1:5.35-4+deb10u1
+libmagic1:amd64 1:5.35-4+deb10u1
+libmail-sendmail-perl 0.80-1
+libmailtools-perl 2.18-1
+libmnl0:amd64 1.0.4-2
+libmount1:amd64 2.33.1-0.1
+libmpc3:amd64 1.1.0-1
+libmpdec2:amd64 2.4.2-2
+libmpfr6:amd64 4.0.2-1
+libmpx2:amd64 8.3.0-6
+libncurses6:amd64 6.1+20181013-2+deb10u2
+libncursesw6:amd64 6.1+20181013-2+deb10u2
+libnet-http-perl 6.18-1
+libnet-smtp-ssl-perl 1.04-1
+libnet-ssleay-perl 1.85-2+b1
+libnetfilter-conntrack3:amd64 1.0.7-1
+libnettle6:amd64 3.4.1-1
+libnfnetlink0:amd64 1.0.1-3+b1
+libnftables0:amd64 0.9.0-2
+libnftnl11:amd64 1.1.2-2
+libnghttp2-14:amd64 1.36.0-2+deb10u1
+libnpth0:amd64 1.6-1
+libnss-systemd:amd64 241-7~deb10u4
+libopengl0:amd64 1.1.0-1
+libp11-kit0:amd64 0.23.15-2
+libpam-cap:amd64 1:2.25-2
+libpam-modules:amd64 1.3.1-5
+libpam-modules-bin 1.3.1-5
+libpam-runtime 1.3.1-5
+libpam-systemd:amd64 241-7~deb10u4
+libpam0g:amd64 1.3.1-5
+libpciaccess-dev:amd64 0.14-1
+libpciaccess0:amd64 0.14-1
+libpcre2-8-0:amd64 10.32-5
+libpcre3:amd64 2:8.39-12
+libperl5.28:amd64 5.28.1-6+deb10u1
+libpipeline1:amd64 1.5.1-2
+libpopt0:amd64 1.16-12
+libprocps7:amd64 2:3.3.15-2
+libprotobuf-dev:amd64 3.6.1.3-2
+libprotobuf-lite17:amd64 3.6.1.3-2
+libprotobuf17:amd64 3.6.1.3-2
+libprotoc17:amd64 3.6.1.3-2
+libpsl5:amd64 0.20.2-2
+libpthread-stubs0-dev:amd64 0.4-1
+libpython-stdlib:amd64 2.7.16-1
+libpython2-stdlib:amd64 2.7.16-1
+libpython2.7-minimal:amd64 2.7.16-2+deb10u1
+libpython2.7-stdlib:amd64 2.7.16-2+deb10u1
+libpython3-dev:amd64 3.7.3-1
+libpython3-stdlib:amd64 3.7.3-1
+libpython3.7:amd64 3.7.3-2+deb10u2
+libpython3.7-dev:amd64 3.7.3-2+deb10u2
+libpython3.7-minimal:amd64 3.7.3-2+deb10u2
+libpython3.7-stdlib:amd64 3.7.3-2+deb10u2
+libquadmath0:amd64 8.3.0-6
+libreadline7:amd64 7.0-5
+librhash0:amd64 1.3.8-1
+librtmp1:amd64 2.4+20151223.gitfa8646d.1-2
+libsasl2-2:amd64 2.1.27+dfsg-1+deb10u1
+libsasl2-modules:amd64 2.1.27+dfsg-1+deb10u1
+libsasl2-modules-db:amd64 2.1.27+dfsg-1+deb10u1
+libseccomp2:amd64 2.3.3-4
+libselinux1:amd64 2.8-1+b1
+libsemanage-common 2.8-2
+libsemanage1:amd64 2.8-2
+libsensors-config 1:3.5.0-3
+libsensors5:amd64 1:3.5.0-3
+libsepol1:amd64 2.8-1
+libsigsegv2:amd64 2.12-2
+libsmartcols1:amd64 2.33.1-0.1
+libsqlite3-0:amd64 3.27.2-3
+libss2:amd64 1.44.5-1+deb10u3
+libssh2-1:amd64 1.8.0-2.1
+libssl-dev:amd64 1.1.1d-0+deb10u3
+libssl1.1:amd64 1.1.1d-0+deb10u3
+libstdc++-8-dev:amd64 8.3.0-6
+libstdc++-8-dev-arm64-cross 8.3.0-2cross1
+libstdc++6:amd64 8.3.0-6
+libstdc++6-arm64-cross 8.3.0-2cross1
+libsys-hostname-long-perl 1.5-1
+libsystemd0:amd64 241-7~deb10u4
+libtasn1-6:amd64 4.13-3
+libtimedate-perl 2.3000-2+deb10u1
+libtinfo6:amd64 6.1+20181013-2+deb10u2
+libtool 2.4.6-9
+libtry-tiny-perl 0.30-1
+libtsan0:amd64 8.3.0-6
+libtsan0-arm64-cross 8.3.0-2cross1
+libubsan1:amd64 8.3.0-6
+libubsan1-arm64-cross 8.3.0-2cross1
+libuchardet0:amd64 0.0.6-3
+libudev1:amd64 241-7~deb10u4
+libunbound8:amd64 1.9.0-2+deb10u2
+libunistring2:amd64 0.9.10-1
+liburi-perl 1.76-1
+libusb-1.0-0:amd64 2:1.0.22-2
+libusb-1.0-0-dev:amd64 2:1.0.22-2
+libusb-1.0-doc 2:1.0.22-2
+libuuid1:amd64 2.33.1-0.1
+libuv1:amd64 1.24.1-1
+libwayland-bin 1.16.0-1
+libwayland-client0:amd64 1.16.0-1
+libwayland-cursor0:amd64 1.16.0-1
+libwayland-dev:amd64 1.16.0-1
+libwayland-egl1:amd64 1.16.0-1
+libwayland-server0:amd64 1.16.0-1
+libwrap0:amd64 7.6.q-28
+libwww-perl 6.36-2
+libwww-robotrules-perl 6.02-1
+libx11-6:amd64 2:1.6.7-1+deb10u1
+libx11-data 2:1.6.7-1+deb10u1
+libx11-dev:amd64 2:1.6.7-1+deb10u1
+libx11-xcb-dev:amd64 2:1.6.7-1+deb10u1
+libx11-xcb1:amd64 2:1.6.7-1+deb10u1
+libxau-dev:amd64 1:1.0.8-1+b2
+libxau6:amd64 1:1.0.8-1+b2
+libxcb-dri2-0:amd64 1.13.1-2
+libxcb-dri2-0-dev:amd64 1.13.1-2
+libxcb-dri3-0:amd64 1.13.1-2
+libxcb-dri3-dev:amd64 1.13.1-2
+libxcb-glx0:amd64 1.13.1-2
+libxcb-glx0-dev:amd64 1.13.1-2
+libxcb-present-dev:amd64 1.13.1-2
+libxcb-present0:amd64 1.13.1-2
+libxcb-randr0:amd64 1.13.1-2
+libxcb-randr0-dev:amd64 1.13.1-2
+libxcb-render0:amd64 1.13.1-2
+libxcb-render0-dev:amd64 1.13.1-2
+libxcb-shape0:amd64 1.13.1-2
+libxcb-shape0-dev:amd64 1.13.1-2
+libxcb-sync-dev:amd64 1.13.1-2
+libxcb-sync1:amd64 1.13.1-2
+libxcb-xfixes0:amd64 1.13.1-2
+libxcb-xfixes0-dev:amd64 1.13.1-2
+libxcb1:amd64 1.13.1-2
+libxcb1-dev:amd64 1.13.1-2
+libxdamage-dev:amd64 1:1.1.4-3+b3
+libxdamage1:amd64 1:1.1.4-3+b3
+libxdmcp-dev:amd64 1:1.1.2-3
+libxdmcp6:amd64 1:1.1.2-3
+libxext-dev:amd64 2:1.3.3-1+b2
+libxext6:amd64 2:1.3.3-1+b2
+libxfixes-dev:amd64 1:5.0.3-1
+libxfixes3:amd64 1:5.0.3-1
+libxml-libxml-perl 2.0134+dfsg-1
+libxml-namespacesupport-perl 1.12-1
+libxml-parser-perl 2.44-4
+libxml-sax-base-perl 1.09-1
+libxml-sax-expat-perl 0.51-1
+libxml-sax-perl 1.00+dfsg-1
+libxml-simple-perl 2.25-1
+libxml2:amd64 2.9.4+dfsg1-7+b3
+libxmuu1:amd64 2:1.1.2-2+b3
+libxshmfence-dev:amd64 1.3-1
+libxshmfence1:amd64 1.3-1
+libxtables12:amd64 1.8.2-4
+libxxf86vm-dev:amd64 1:1.1.4-1+b2
+libxxf86vm1:amd64 1:1.1.4-1+b2
+libyaml-0-2:amd64 0.2.1-1
+libyaml-libyaml-perl 0.76+repack-1
+libyaml-perl 1.27-1
+libzstd1:amd64 1.3.8+dfsg-3
+linux-libc-dev:amd64 4.19.146-1
+linux-libc-dev-arm64-cross 4.19.20-1cross1
+login 1:4.5-1.1
+logrotate 3.14.0-4
+lsb-base 10.2019051400
+m4 1.4.18-2
+make 4.2.1-1.2
+man-db 2.8.5-2
+manpages 4.16-2
+manpages-dev 4.16-2
+mawk 1.3.3-17+b3
+mesa-common-dev:amd64 18.3.6-2+deb10u1
+mime-support 3.62
+mount 2.33.1-0.1
+nasm 2.14-1
+ncurses-base 6.1+20181013-2+deb10u2
+ncurses-bin 6.1+20181013-2+deb10u2
+ncurses-term 6.1+20181013-2+deb10u2
+net-tools 1.60+git20180626.aebd88e-1
+netbase 5.6
+nftables 0.9.0-2
+ninja-build 1.8.2-1
+openssh-client 1:7.9p1-10+deb10u2
+openssh-server 1:7.9p1-10+deb10u2
+openssh-sftp-server 1:7.9p1-10+deb10u2
+openssl 1.1.1d-0+deb10u3
+passwd 1:4.5-1.1
+patch 2.7.6-3+deb10u1
+perl 5.28.1-6+deb10u1
+perl-base 5.28.1-6+deb10u1
+perl-modules-5.28 5.28.1-6+deb10u1
+perl-openssl-defaults:amd64 3
+pinentry-curses 1.1.0-2
+pkg-config 0.29-6
+po-debconf 1.0.21
+procps 2:3.3.15-2
+protobuf-compiler 3.6.1.3-2
+psmisc 23.2-1
+publicsuffix 20190415.1030-1
+python 2.7.16-1
+python-minimal 2.7.16-1
+python-pip-whl 18.1-5
+python2 2.7.16-1
+python2-minimal 2.7.16-1
+python2.7 2.7.16-2+deb10u1
+python2.7-minimal 2.7.16-2+deb10u1
+python3 3.7.3-1
+python3-asn1crypto 0.24.0-1
+python3-cffi-backend 1.12.2-1
+python3-crypto 2.6.1-9+b1
+python3-cryptography 2.6.1-3+deb10u2
+python3-dbus 1.2.8-3
+python3-dev 3.7.3-1
+python3-distutils 3.7.3-1
+python3-entrypoints 0.3-1
+python3-gi 3.30.4-1
+python3-keyring 17.1.1-1
+python3-keyrings.alt 3.1.1-1
+python3-lib2to3 3.7.3-1
+python3-minimal 3.7.3-1
+python3-pip 18.1-5
+python3-pkg-resources 40.8.0-1
+python3-secretstorage 2.3.1-2
+python3-setuptools 40.8.0-1
+python3-six 1.12.0-1
+python3-wheel 0.32.3-2
+python3-xdg 0.25-5
+python3.7 3.7.3-2+deb10u2
+python3.7-dev 3.7.3-2+deb10u2
+python3.7-minimal 3.7.3-2+deb10u2
+readline-common 7.0-5
+rsyslog 8.1901.0-1
+sed 4.7-1
+sensible-utils 0.0.12
+shared-mime-info 1.10-1
+sudo 1.8.27-1+deb10u2
+systemd 241-7~deb10u4
+systemd-sysv 241-7~deb10u4
+sysvinit-utils 2.93-8
+tar 1.30+dfsg-6
+tzdata 2020a-0+deb10u1
+ucf 3.0038+nmu1
+util-linux 2.33.1-0.1
+x11proto-core-dev 2018.4-4
+x11proto-damage-dev 1:2018.4-4
+x11proto-dev 2018.4-4
+x11proto-fixes-dev 1:2018.4-4
+x11proto-xext-dev 2018.4-4
+x11proto-xf86vidmode-dev 2018.4-4
+xauth 1:1.0.10-1
+xdg-user-dirs 0.17-2
+xorg-sgml-doctools 1:1.11-1
+xtrans-dev 1.3.5-1
+xutils-dev 1:7.7+5+b1
+xz-utils 5.2.4-1
+zlib1g:amd64 1:1.2.11.dfsg-1
+zlib1g-dev:amd64 1:1.2.11.dfsg-1
diff --git a/x86_64-linux-gnu/builder_image.txt b/x86_64-linux-gnu/builder_image.txt
new file mode 100644
index 0000000..c14aef9
--- /dev/null
+++ b/x86_64-linux-gnu/builder_image.txt
@@ -0,0 +1 @@
+sourceImage: https://www.googleapis.com/compute/v1/projects/cloud-android-testing/global/images/jemoreira-build-image
diff --git a/x86_64-linux-gnu/cargo_version.txt b/x86_64-linux-gnu/cargo_version.txt
new file mode 100644
index 0000000..08467d7
--- /dev/null
+++ b/x86_64-linux-gnu/cargo_version.txt
@@ -0,0 +1,4 @@
+cargo 1.45.1 (f242df6ed 2020-07-22)
+release: 1.45.1
+commit-hash: f242df6edb897f6f69d393a22bb257f5af0f52d0
+commit-date: 2020-07-22
diff --git a/x86_64-linux-gnu/rustup_show.txt b/x86_64-linux-gnu/rustup_show.txt
new file mode 100644
index 0000000..775cdf2
--- /dev/null
+++ b/x86_64-linux-gnu/rustup_show.txt
@@ -0,0 +1,14 @@
+Default host: x86_64-unknown-linux-gnu
+
+installed targets for active toolchain
+--------------------------------------
+
+aarch64-unknown-linux-gnu
+x86_64-unknown-linux-gnu
+
+active toolchain
+----------------
+
+stable-x86_64-unknown-linux-gnu (overridden by '/source/platform/crosvm/rust-toolchain')
+rustc 1.45.2 (d3fb005a3 2020-07-31)
+