#!/usr/bin/env bash # Copyright 2021 The ChromiumOS Authors # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. set -ex sudo apt-get install --yes --no-install-recommends \ black \ ca-certificates \ clang \ cloud-image-utils \ curl \ dpkg-dev \ expect \ g++ \ gcc \ git \ jq \ libasound2-dev \ libavcodec-dev \ libavutil-dev \ libcap-dev \ libclang-dev \ libdbus-1-dev \ libdrm-dev \ libepoxy-dev \ libglib2.0-dev \ libguestfs-tools \ libslirp-dev \ libssl-dev \ libswscale-dev \ libva-dev \ libwayland-dev \ libxext-dev \ make \ meson \ mypy \ nasm \ ncat \ ninja-build \ openssh-client \ pipx \ pkg-config \ protobuf-compiler \ python3 \ python3-argh \ python3-pip \ python3-rich \ qemu-system-x86 \ rsync \ screen \ strace \ tmux \ wayland-protocols \ wget # mdformat is not available as a debian package. Install via pipx instead. pipx install mdformat pipx inject mdformat mdformat-gfm mdformat-footnote pipx ensurepath # Install rustup if not available yet if ! command -v rustup &>/dev/null; then wget "https://static.rust-lang.org/rustup/archive/1.25.1/x86_64-unknown-linux-gnu/rustup-init" echo "5cc9ffd1026e82e7fb2eec2121ad71f4b0f044e88bca39207b3f6b769aaa799c *rustup-init" | sha256sum -c - chmod +x rustup-init ./rustup-init -y --no-modify-path --profile minimal --default-toolchain none source ${CARGO_HOME:-~/.cargo}/env rm rustup-init fi # Install required rust components. # This will also ensure the toolchain required by ./rust-toolchain is installed. rustup component add cargo clippy rustfmt # LLVM tools are used to generate and process coverage files rustup component add llvm-tools-preview # Allow cross-compilation via mingw64 rustup target add x86_64-pc-windows-gnu # Cargo extension to install binary packages from github curl -L https://github.com/cargo-bins/cargo-binstall/releases/download/v0.19.3/cargo-binstall-x86_64-unknown-linux-gnu.tgz | tar -xzvvf - -C ${CARGO_HOME:-~/.cargo}/bin # Note: Using crate-meta-data will make too many requests to github to discover which release # to download. This will get throttled quickly and slow down massively. # This should be fixed by: https://github.com/cargo-bins/cargo-binstall/issues/776 # The bindgen tool is required to build a crosvm dependency. cargo binstall --no-confirm --disable-strategies crate-meta-data bindgen-cli --version "0.64.0" # binutils are wrappers to call the rustup bundled versions of llvm tools. cargo binstall --no-confirm --disable-strategies crate-meta-data cargo-binutils # The mdbook and mdbook-mermaid tools are used to build the crosvm book. cargo binstall --no-confirm --disable-strategies crate-meta-data mdbook --version "0.4.25" cargo binstall --no-confirm --disable-strategies crate-meta-data mdbook-mermaid --version "0.12.6" cargo binstall --no-confirm --disable-strategies crate-meta-data mdbook-linkcheck --version "0.7.7" # Nextest is an improved test runner for cargo cargo binstall --no-confirm --disable-strategies crate-meta-data cargo-nextest --version "0.9.49"