1*cf78ab8cSAndroid Build Coastguard Worker#!/usr/bin/env bash 2*cf78ab8cSAndroid Build Coastguard Worker 3*cf78ab8cSAndroid Build Coastguard Worker# Copyright 2022 The Android Open Source Project 4*cf78ab8cSAndroid Build Coastguard Worker# 5*cf78ab8cSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License"); 6*cf78ab8cSAndroid Build Coastguard Worker# you may not use this file except in compliance with the License. 7*cf78ab8cSAndroid Build Coastguard Worker# You may obtain a copy of the License at 8*cf78ab8cSAndroid Build Coastguard Worker# 9*cf78ab8cSAndroid Build Coastguard Worker# http://www.apache.org/licenses/LICENSE-2.0 10*cf78ab8cSAndroid Build Coastguard Worker# 11*cf78ab8cSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software 12*cf78ab8cSAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS, 13*cf78ab8cSAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14*cf78ab8cSAndroid Build Coastguard Worker# See the License for the specific language governing permissions and 15*cf78ab8cSAndroid Build Coastguard Worker# limitations under the License. 16*cf78ab8cSAndroid Build Coastguard Worker 17*cf78ab8cSAndroid Build Coastguard Worker# Update the Rust protobuf files on netsim-dev branch 18*cf78ab8cSAndroid Build Coastguard Worker 19*cf78ab8cSAndroid Build Coastguard Worker# Prerequisites: 20*cf78ab8cSAndroid Build Coastguard Worker# - protobuf-compiler 21*cf78ab8cSAndroid Build Coastguard Worker# Linux: sudo apt-get install protobuf-compiler 22*cf78ab8cSAndroid Build Coastguard Worker# Mac: brew install protobuf 23*cf78ab8cSAndroid Build Coastguard Worker 24*cf78ab8cSAndroid Build Coastguard Worker# Absolute path to tools/netsim using this scripts directory 25*cf78ab8cSAndroid Build Coastguard WorkerREPO_NETSIM=$(dirname $(readlink -f "$0"))/.. 26*cf78ab8cSAndroid Build Coastguard WorkerCARGO_MANIFEST=$REPO_NETSIM/rust/proto/Cargo.toml 27*cf78ab8cSAndroid Build Coastguard Worker 28*cf78ab8cSAndroid Build Coastguard Worker# -- Step 1. Generate gRPC protobuf files 29*cf78ab8cSAndroid Build Coastguard Worker# NOTE: the files can not be generated by proto/build.rs because protoc-grpcio doesn't support protobuf v3 yet. 30*cf78ab8cSAndroid Build Coastguard Worker# https://github.com/mtp401/protoc-grpcio/issues/41 31*cf78ab8cSAndroid Build Coastguard Worker 32*cf78ab8cSAndroid Build Coastguard Worker# Install compilers since the crates are not in AOSP 33*cf78ab8cSAndroid Build Coastguard Worker# TODO: Add required crate mappings to work in netsim-dev 34*cf78ab8cSAndroid Build Coastguard Workerexport CARGO_HOME="" 35*cf78ab8cSAndroid Build Coastguard Worker# Specify versions to use the correct protobuf version. 36*cf78ab8cSAndroid Build Coastguard Workercargo install protobuf-codegen --version 3.2.0 37*cf78ab8cSAndroid Build Coastguard Workercargo install grpcio-compiler --version 0.13.0 38*cf78ab8cSAndroid Build Coastguard Worker 39*cf78ab8cSAndroid Build Coastguard WorkerPROTOC_CMD="protoc --rust_out=./rust/proto/src --grpc_out=./rust/proto/src\ 40*cf78ab8cSAndroid Build Coastguard Worker --plugin=protoc-gen-grpc=$(which grpc_rust_plugin)\ 41*cf78ab8cSAndroid Build Coastguard Worker -I./proto -I../../external/protobuf/src\ 42*cf78ab8cSAndroid Build Coastguard Worker -I../../packages/modules/Bluetooth/tools/rootcanal/proto" 43*cf78ab8cSAndroid Build Coastguard Worker$PROTOC_CMD ./proto/netsim/frontend.proto 44*cf78ab8cSAndroid Build Coastguard Worker$PROTOC_CMD ./proto/netsim/packet_streamer.proto 45*cf78ab8cSAndroid Build Coastguard Worker 46*cf78ab8cSAndroid Build Coastguard Worker# Revert the generate proto files to ensure they are re-generated by proto/build.rs. 47*cf78ab8cSAndroid Build Coastguard Workergit checkout $REPO_NETSIM/rust/proto/src/packet_streamer.rs 48*cf78ab8cSAndroid Build Coastguard Workergit checkout $REPO_NETSIM/rust/proto/src/frontend.rs 49*cf78ab8cSAndroid Build Coastguard Workerrm $REPO_NETSIM/rust/proto/src/mod.rs 50*cf78ab8cSAndroid Build Coastguard Worker 51*cf78ab8cSAndroid Build Coastguard Worker# --- Step 2. Generate protobuf files using proto/build.rs 52*cf78ab8cSAndroid Build Coastguard Worker# Uncomment lines starting with `##` 53*cf78ab8cSAndroid Build Coastguard WorkerOS=$(uname | tr '[:upper:]' '[:lower:]') 54*cf78ab8cSAndroid Build Coastguard Workerif [[ "$OS" == "linux" ]]; then 55*cf78ab8cSAndroid Build Coastguard Worker sed -i 's/^##//g' $CARGO_MANIFEST 56*cf78ab8cSAndroid Build Coastguard Workerfi 57*cf78ab8cSAndroid Build Coastguard Workerif [[ "$OS" == "darwin" ]]; then 58*cf78ab8cSAndroid Build Coastguard Worker sed -i '' 's/^##//g' $CARGO_MANIFEST 59*cf78ab8cSAndroid Build Coastguard Workerfi 60*cf78ab8cSAndroid Build Coastguard Worker 61*cf78ab8cSAndroid Build Coastguard Workerif [ ! -d "$REPO_NETSIM/objs/rust/.cargo" ]; then 62*cf78ab8cSAndroid Build Coastguard Worker python3 $REPO_NETSIM/scripts/build_tools.py 63*cf78ab8cSAndroid Build Coastguard Workerfi 64*cf78ab8cSAndroid Build Coastguard Worker 65*cf78ab8cSAndroid Build Coastguard Worker# Use Rust dependency crates available on netsim-dev branch 66*cf78ab8cSAndroid Build Coastguard Workerexport CARGO_HOME=$REPO_NETSIM/objs/rust/.cargo 67*cf78ab8cSAndroid Build Coastguard Worker 68*cf78ab8cSAndroid Build Coastguard Worker# For grpcio-sys 69*cf78ab8cSAndroid Build Coastguard Workerexport GRPCIO_SYS_GRPC_INCLUDE_PATH="$REPO_NETSIM/../../external/grpc/include" 70*cf78ab8cSAndroid Build Coastguard Worker 71*cf78ab8cSAndroid Build Coastguard Workercd $REPO_NETSIM 72*cf78ab8cSAndroid Build Coastguard Workercargo build --manifest-path $CARGO_MANIFEST 73*cf78ab8cSAndroid Build Coastguard Worker 74*cf78ab8cSAndroid Build Coastguard Worker# Restore original Cargo.toml 75*cf78ab8cSAndroid Build Coastguard Workergit checkout $CARGO_MANIFEST 76*cf78ab8cSAndroid Build Coastguard Worker 77*cf78ab8cSAndroid Build Coastguard Worker# Find the most recent rustfmt installed 78*cf78ab8cSAndroid Build Coastguard WorkerRUSTFMT=$(ls -d ../../prebuilts/rust/$OS-x86/*/bin/rustfmt | tail -1) 79*cf78ab8cSAndroid Build Coastguard Worker 80*cf78ab8cSAndroid Build Coastguard Worker# Format Rust code 81*cf78ab8cSAndroid Build Coastguard Worker# Need to format manually because it's not supported in build.rs 82*cf78ab8cSAndroid Build Coastguard Workerfind $REPO_NETSIM/rust/proto -name '*.rs' -exec $RUSTFMT --files-with-diff {} \; 83*cf78ab8cSAndroid Build Coastguard Worker 84*cf78ab8cSAndroid Build Coastguard Workerrm rust/Cargo.lock 85