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