1*bb4ee6a4SAndroid Build Coastguard Worker#!/usr/bin/env bash 2*bb4ee6a4SAndroid Build Coastguard Worker# Copyright 2021 The ChromiumOS Authors 3*bb4ee6a4SAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be 4*bb4ee6a4SAndroid Build Coastguard Worker# found in the LICENSE file. 5*bb4ee6a4SAndroid Build Coastguard Workerset -ex 6*bb4ee6a4SAndroid Build Coastguard Worker 7*bb4ee6a4SAndroid Build Coastguard Workersudo apt-get install --yes --no-install-recommends \ 8*bb4ee6a4SAndroid Build Coastguard Worker black \ 9*bb4ee6a4SAndroid Build Coastguard Worker ca-certificates \ 10*bb4ee6a4SAndroid Build Coastguard Worker clang \ 11*bb4ee6a4SAndroid Build Coastguard Worker cloud-image-utils \ 12*bb4ee6a4SAndroid Build Coastguard Worker curl \ 13*bb4ee6a4SAndroid Build Coastguard Worker dpkg-dev \ 14*bb4ee6a4SAndroid Build Coastguard Worker expect \ 15*bb4ee6a4SAndroid Build Coastguard Worker g++ \ 16*bb4ee6a4SAndroid Build Coastguard Worker gcc \ 17*bb4ee6a4SAndroid Build Coastguard Worker git \ 18*bb4ee6a4SAndroid Build Coastguard Worker jq \ 19*bb4ee6a4SAndroid Build Coastguard Worker libavcodec-dev \ 20*bb4ee6a4SAndroid Build Coastguard Worker libavutil-dev \ 21*bb4ee6a4SAndroid Build Coastguard Worker libcap-dev \ 22*bb4ee6a4SAndroid Build Coastguard Worker libclang-dev \ 23*bb4ee6a4SAndroid Build Coastguard Worker libdbus-1-dev \ 24*bb4ee6a4SAndroid Build Coastguard Worker libdrm-dev \ 25*bb4ee6a4SAndroid Build Coastguard Worker libepoxy-dev \ 26*bb4ee6a4SAndroid Build Coastguard Worker libglib2.0-dev \ 27*bb4ee6a4SAndroid Build Coastguard Worker libguestfs-tools \ 28*bb4ee6a4SAndroid Build Coastguard Worker libslirp-dev \ 29*bb4ee6a4SAndroid Build Coastguard Worker libssl-dev \ 30*bb4ee6a4SAndroid Build Coastguard Worker libswscale-dev \ 31*bb4ee6a4SAndroid Build Coastguard Worker libva-dev \ 32*bb4ee6a4SAndroid Build Coastguard Worker libwayland-dev \ 33*bb4ee6a4SAndroid Build Coastguard Worker libxext-dev \ 34*bb4ee6a4SAndroid Build Coastguard Worker lld \ 35*bb4ee6a4SAndroid Build Coastguard Worker make \ 36*bb4ee6a4SAndroid Build Coastguard Worker meson \ 37*bb4ee6a4SAndroid Build Coastguard Worker mypy \ 38*bb4ee6a4SAndroid Build Coastguard Worker nasm \ 39*bb4ee6a4SAndroid Build Coastguard Worker ncat \ 40*bb4ee6a4SAndroid Build Coastguard Worker ninja-build \ 41*bb4ee6a4SAndroid Build Coastguard Worker openssh-client \ 42*bb4ee6a4SAndroid Build Coastguard Worker pipx \ 43*bb4ee6a4SAndroid Build Coastguard Worker pkg-config \ 44*bb4ee6a4SAndroid Build Coastguard Worker protobuf-compiler \ 45*bb4ee6a4SAndroid Build Coastguard Worker python3 \ 46*bb4ee6a4SAndroid Build Coastguard Worker python3-argh \ 47*bb4ee6a4SAndroid Build Coastguard Worker python3-pip \ 48*bb4ee6a4SAndroid Build Coastguard Worker python3-rich \ 49*bb4ee6a4SAndroid Build Coastguard Worker qemu-system-x86 \ 50*bb4ee6a4SAndroid Build Coastguard Worker rsync \ 51*bb4ee6a4SAndroid Build Coastguard Worker screen \ 52*bb4ee6a4SAndroid Build Coastguard Worker strace \ 53*bb4ee6a4SAndroid Build Coastguard Worker tmux \ 54*bb4ee6a4SAndroid Build Coastguard Worker wayland-protocols \ 55*bb4ee6a4SAndroid Build Coastguard Worker wget 56*bb4ee6a4SAndroid Build Coastguard Worker 57*bb4ee6a4SAndroid Build Coastguard Worker# mdformat is not available as a debian package. Install via pipx instead. 58*bb4ee6a4SAndroid Build Coastguard Workerpipx install mdformat 59*bb4ee6a4SAndroid Build Coastguard Workerpipx inject mdformat mdformat-gfm mdformat-footnote 60*bb4ee6a4SAndroid Build Coastguard Workerpipx ensurepath 61*bb4ee6a4SAndroid Build Coastguard Worker 62*bb4ee6a4SAndroid Build Coastguard Worker# Install rustup if not available yet 63*bb4ee6a4SAndroid Build Coastguard Workerif ! command -v rustup &>/dev/null; then 64*bb4ee6a4SAndroid Build Coastguard Worker wget "https://static.rust-lang.org/rustup/archive/1.25.1/x86_64-unknown-linux-gnu/rustup-init" 65*bb4ee6a4SAndroid Build Coastguard Worker echo "5cc9ffd1026e82e7fb2eec2121ad71f4b0f044e88bca39207b3f6b769aaa799c *rustup-init" | sha256sum -c - 66*bb4ee6a4SAndroid Build Coastguard Worker chmod +x rustup-init 67*bb4ee6a4SAndroid Build Coastguard Worker ./rustup-init -y --no-modify-path --profile minimal --default-toolchain none 68*bb4ee6a4SAndroid Build Coastguard Worker source ${CARGO_HOME:-~/.cargo}/env 69*bb4ee6a4SAndroid Build Coastguard Worker rm rustup-init 70*bb4ee6a4SAndroid Build Coastguard Workerfi 71*bb4ee6a4SAndroid Build Coastguard Worker 72*bb4ee6a4SAndroid Build Coastguard Worker# Install required rust components. 73*bb4ee6a4SAndroid Build Coastguard Worker# This will also ensure the toolchain required by ./rust-toolchain is installed. 74*bb4ee6a4SAndroid Build Coastguard Workerrustup component add cargo clippy rustfmt 75*bb4ee6a4SAndroid Build Coastguard Worker 76*bb4ee6a4SAndroid Build Coastguard Worker# LLVM tools are used to generate and process coverage files 77*bb4ee6a4SAndroid Build Coastguard Workerrustup component add llvm-tools-preview 78*bb4ee6a4SAndroid Build Coastguard Worker 79*bb4ee6a4SAndroid Build Coastguard Worker# Allow cross-compilation via mingw64 80*bb4ee6a4SAndroid Build Coastguard Workerrustup target add x86_64-pc-windows-gnu 81*bb4ee6a4SAndroid Build Coastguard Worker 82*bb4ee6a4SAndroid Build Coastguard Worker# Allow cross-compilation for android 83*bb4ee6a4SAndroid Build Coastguard Workerrustup target add aarch64-linux-android 84*bb4ee6a4SAndroid Build Coastguard Worker 85*bb4ee6a4SAndroid Build Coastguard Worker# Install nightly toolchain. Only used for rustfmt 86*bb4ee6a4SAndroid Build Coastguard Workerrustup toolchain install nightly --profile minimal --component rustfmt 87*bb4ee6a4SAndroid Build Coastguard Worker 88*bb4ee6a4SAndroid Build Coastguard Worker# Cargo extension to install binary packages from github 89*bb4ee6a4SAndroid Build Coastguard Workercurl -L https://github.com/cargo-bins/cargo-binstall/releases/download/v1.4.4/cargo-binstall-x86_64-unknown-linux-gnu.tgz | tar -xzvvf - -C ${CARGO_HOME:-~/.cargo}/bin 90*bb4ee6a4SAndroid Build Coastguard Worker 91*bb4ee6a4SAndroid Build Coastguard Worker# The bindgen tool is required to build a crosvm dependency. 92*bb4ee6a4SAndroid Build Coastguard Workercargo binstall --no-confirm bindgen-cli --version "0.68.1" 93*bb4ee6a4SAndroid Build Coastguard Worker 94*bb4ee6a4SAndroid Build Coastguard Worker# binutils are wrappers to call the rustup bundled versions of llvm tools. 95*bb4ee6a4SAndroid Build Coastguard Workercargo binstall --no-confirm cargo-binutils 96*bb4ee6a4SAndroid Build Coastguard Worker 97*bb4ee6a4SAndroid Build Coastguard Worker# The mdbook and mdbook-mermaid tools are used to build the crosvm book. 98*bb4ee6a4SAndroid Build Coastguard Workercargo binstall --no-confirm mdbook --version "0.4.25" 99*bb4ee6a4SAndroid Build Coastguard Workercargo binstall --no-confirm mdbook-mermaid --version "0.12.6" 100*bb4ee6a4SAndroid Build Coastguard Workercargo binstall --no-confirm mdbook-linkcheck --version "0.7.7" 101*bb4ee6a4SAndroid Build Coastguard Worker 102*bb4ee6a4SAndroid Build Coastguard Worker# Nextest is an improved test runner for cargo 103*bb4ee6a4SAndroid Build Coastguard Workercargo binstall --no-confirm cargo-nextest --version "0.9.49" 104*bb4ee6a4SAndroid Build Coastguard Worker 105*bb4ee6a4SAndroid Build Coastguard WorkerRed='\033[0;31m' 106*bb4ee6a4SAndroid Build Coastguard WorkerReset='\033[0m' 107*bb4ee6a4SAndroid Build Coastguard Worker# Check if submodules were initialized. If a submodule is not initialized, git 108*bb4ee6a4SAndroid Build Coastguard Worker# submodule status will be prefixed with `-` 109*bb4ee6a4SAndroid Build Coastguard Workerif git submodule status | grep '^-'; then 110*bb4ee6a4SAndroid Build Coastguard Worker >&2 echo -e "${Red}ERROR${Reset}: Git modules were not initialized. Run 'git submodule update --init' to initialize them." 111*bb4ee6a4SAndroid Build Coastguard Workerfi 112