xref: /aosp_15_r20/external/crosvm/tools/install-deps (revision bb4ee6a4ae7042d18b07a98463b9c8b875e44b39)
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