xref: /aosp_15_r20/external/crosvm/android-merge-2-cargo-embargo.sh (revision bb4ee6a4ae7042d18b07a98463b9c8b875e44b39)
1*bb4ee6a4SAndroid Build Coastguard Worker#!/bin/bash
2*bb4ee6a4SAndroid Build Coastguard Worker
3*bb4ee6a4SAndroid Build Coastguard Worker# Run cargo_embargo with the appropriate arguments.
4*bb4ee6a4SAndroid Build Coastguard Worker
5*bb4ee6a4SAndroid Build Coastguard Workerset -e -u
6*bb4ee6a4SAndroid Build Coastguard Worker
7*bb4ee6a4SAndroid Build Coastguard Workerfunction usage() { echo "$0 [-r]" && exit 1; }
8*bb4ee6a4SAndroid Build Coastguard WorkerCROSVM_DIR="$ANDROID_BUILD_TOP/external/crosvm"
9*bb4ee6a4SAndroid Build Coastguard WorkerREUSE=""
10*bb4ee6a4SAndroid Build Coastguard Workerwhile getopts 'r' FLAG; do
11*bb4ee6a4SAndroid Build Coastguard Worker  case ${FLAG} in
12*bb4ee6a4SAndroid Build Coastguard Worker    r)
13*bb4ee6a4SAndroid Build Coastguard Worker      REUSE="--reuse-cargo-out --cargo-out-dir $CROSVM_DIR"
14*bb4ee6a4SAndroid Build Coastguard Worker      ;;
15*bb4ee6a4SAndroid Build Coastguard Worker    ?)
16*bb4ee6a4SAndroid Build Coastguard Worker      echo "unknown flag."
17*bb4ee6a4SAndroid Build Coastguard Worker      usage
18*bb4ee6a4SAndroid Build Coastguard Worker      ;;
19*bb4ee6a4SAndroid Build Coastguard Worker  esac
20*bb4ee6a4SAndroid Build Coastguard Workerdone
21*bb4ee6a4SAndroid Build Coastguard Worker
22*bb4ee6a4SAndroid Build Coastguard Workerif ! [ -x "$(command -v bpfmt)" ]; then
23*bb4ee6a4SAndroid Build Coastguard Worker  echo 'Error: bpfmt not found.' >&2
24*bb4ee6a4SAndroid Build Coastguard Worker  exit 1
25*bb4ee6a4SAndroid Build Coastguard Workerfi
26*bb4ee6a4SAndroid Build Coastguard Worker
27*bb4ee6a4SAndroid Build Coastguard Worker# If there is need to verify installation of some packages, add them here in pkges.
28*bb4ee6a4SAndroid Build Coastguard Workerpkges='
29*bb4ee6a4SAndroid Build Coastguard Workerlibdrm-dev
30*bb4ee6a4SAndroid Build Coastguard Workerlibcap-dev
31*bb4ee6a4SAndroid Build Coastguard Workerlibepoxy-dev
32*bb4ee6a4SAndroid Build Coastguard Workerlibwayland-dev
33*bb4ee6a4SAndroid Build Coastguard Workermeson
34*bb4ee6a4SAndroid Build Coastguard Workerpkg-config
35*bb4ee6a4SAndroid Build Coastguard Workerprotobuf-compiler
36*bb4ee6a4SAndroid Build Coastguard Workerwayland-protocols
37*bb4ee6a4SAndroid Build Coastguard Worker'
38*bb4ee6a4SAndroid Build Coastguard Workerfor pkg in $pkges; do
39*bb4ee6a4SAndroid Build Coastguard Worker  set +e; result="$(dpkg-query -W --showformat='${db:Status-Status}' "$pkg" 2>&1)"; set -e
40*bb4ee6a4SAndroid Build Coastguard Worker  if [ ! $? = 0 ] || [ ! "$result" = installed ]; then
41*bb4ee6a4SAndroid Build Coastguard Worker    echo $pkg' not found. Please install.' >&2
42*bb4ee6a4SAndroid Build Coastguard Worker    exit 1
43*bb4ee6a4SAndroid Build Coastguard Worker  fi
44*bb4ee6a4SAndroid Build Coastguard Workerdone
45*bb4ee6a4SAndroid Build Coastguard Worker
46*bb4ee6a4SAndroid Build Coastguard Worker# Use the specific rust version that crosvm upstream expects.
47*bb4ee6a4SAndroid Build Coastguard Worker#
48*bb4ee6a4SAndroid Build Coastguard Worker# TODO: Consider reading the toolchain from external/crosvm/rust-toolchain
49*bb4ee6a4SAndroid Build Coastguard Worker#
50*bb4ee6a4SAndroid Build Coastguard Worker# TODO: Consider using android's prebuilt rust binaries. Currently doesn't work
51*bb4ee6a4SAndroid Build Coastguard Worker# because they try to incorrectly use system clang and llvm.
52*bb4ee6a4SAndroid Build Coastguard WorkerRUST_TOOLCHAIN="1.77.2"
53*bb4ee6a4SAndroid Build Coastguard Workerrustup which --toolchain $RUST_TOOLCHAIN cargo || \
54*bb4ee6a4SAndroid Build Coastguard Worker  rustup toolchain install $RUST_TOOLCHAIN
55*bb4ee6a4SAndroid Build Coastguard WorkerCARGO_BIN="$(dirname $(rustup which --toolchain $RUST_TOOLCHAIN cargo))"
56*bb4ee6a4SAndroid Build Coastguard Worker
57*bb4ee6a4SAndroid Build Coastguard Workercd "$CROSVM_DIR"
58*bb4ee6a4SAndroid Build Coastguard Worker
59*bb4ee6a4SAndroid Build Coastguard Workerif [ ! "$REUSE" ]; then
60*bb4ee6a4SAndroid Build Coastguard Worker  rm -f cargo.out cargo.metadata
61*bb4ee6a4SAndroid Build Coastguard Worker  rm -rf target.tmp || /bin/true
62*bb4ee6a4SAndroid Build Coastguard Workerfi
63*bb4ee6a4SAndroid Build Coastguard Worker
64*bb4ee6a4SAndroid Build Coastguard Workerset -x
65*bb4ee6a4SAndroid Build Coastguard Workercargo_embargo $REUSE --cargo-bin "$CARGO_BIN" generate cargo_embargo.json
66*bb4ee6a4SAndroid Build Coastguard Workerset +x
67*bb4ee6a4SAndroid Build Coastguard Worker
68*bb4ee6a4SAndroid Build Coastguard Workerif [ ! "$REUSE" ]; then
69*bb4ee6a4SAndroid Build Coastguard Worker  rm -f cargo.out cargo.metadata
70*bb4ee6a4SAndroid Build Coastguard Worker  rm -rf target.tmp || /bin/true
71*bb4ee6a4SAndroid Build Coastguard Workerfi
72*bb4ee6a4SAndroid Build Coastguard Worker
73*bb4ee6a4SAndroid Build Coastguard Worker# Revert changes to Cargo.lock caused by cargo_embargo.
74*bb4ee6a4SAndroid Build Coastguard Worker#
75*bb4ee6a4SAndroid Build Coastguard Worker# Android diffs in Cargo.toml files can cause diffs in the Cargo.lock when
76*bb4ee6a4SAndroid Build Coastguard Worker# cargo_embargo runs. This didn't happen with cargo2android.py because it
77*bb4ee6a4SAndroid Build Coastguard Worker# ignored the lock file.
78*bb4ee6a4SAndroid Build Coastguard Workergit restore Cargo.lock
79