xref: /aosp_15_r20/tools/netsim/scripts/bindings_update.sh (revision cf78ab8cffb8fc9207af348f23af247fb04370a6)
1*cf78ab8cSAndroid Build Coastguard Worker#!/usr/bin/env bash
2*cf78ab8cSAndroid Build Coastguard Worker
3*cf78ab8cSAndroid Build Coastguard Worker# Copyright 2024 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# Build and update Rust bindings for libslirp-rs & hostapd-rs on netsim-dev branch
18*cf78ab8cSAndroid Build Coastguard Worker
19*cf78ab8cSAndroid Build Coastguard Worker# To update an individual library only, pass in "libslirp-rs" or "hostapd-rs" as argument.
20*cf78ab8cSAndroid Build Coastguard Worker
21*cf78ab8cSAndroid Build Coastguard Worker# The script is necessary because Clang binary, used for creating bindings,
22*cf78ab8cSAndroid Build Coastguard Worker# isn't included in prebuilts for all platforms.
23*cf78ab8cSAndroid Build Coastguard Worker
24*cf78ab8cSAndroid Build Coastguard Worker# Prerequisites (Linux/macOS):
25*cf78ab8cSAndroid Build Coastguard Worker# Install Clang to use bindgen: https://rust-lang.github.io/rust-bindgen/requirements.html
26*cf78ab8cSAndroid Build Coastguard Worker
27*cf78ab8cSAndroid Build Coastguard Worker# Instructions (Linux/macOS):
28*cf78ab8cSAndroid Build Coastguard Worker# Run this script manually to regenerate all bindings.rs files.
29*cf78ab8cSAndroid Build Coastguard Worker
30*cf78ab8cSAndroid Build Coastguard Worker# Windows instructions:
31*cf78ab8cSAndroid Build Coastguard Worker# 1. Install official pre-built LLVM binary:
32*cf78ab8cSAndroid Build Coastguard Worker#    https://rust-lang.github.io/rust-bindgen/requirements.html
33*cf78ab8cSAndroid Build Coastguard Worker# 2. Set the `LIBCLANG_PATH` environment variable to point to the 'bin'
34*cf78ab8cSAndroid Build Coastguard Worker#    directory within your LLVM installation:
35*cf78ab8cSAndroid Build Coastguard Worker#    `set LIBCLANG_PATH=C:\Program Files\LLVM\bin`
36*cf78ab8cSAndroid Build Coastguard Worker# 3. Uncomment the lines starting with `##` in Cargo.toml.
37*cf78ab8cSAndroid Build Coastguard Worker# 4. Navigate to the rust/hostapd-rs directory and run `cargo build`.
38*cf78ab8cSAndroid Build Coastguard Worker# 5. Revert the change in Cargo.toml: `git checkout rust/hostapd-rs/Cargo.toml`
39*cf78ab8cSAndroid Build Coastguard Worker
40*cf78ab8cSAndroid Build Coastguard Workerif [ $# -ne 1 ] || ([ "$1" != "libslirp-rs" ] && [ "$1" != "hostapd-rs" ]); then
41*cf78ab8cSAndroid Build Coastguard Worker    echo "Must provide library name to update bindings i.e. libslirp-rs or hostapd-rs"
42*cf78ab8cSAndroid Build Coastguard Worker    exit 1
43*cf78ab8cSAndroid Build Coastguard Workerfi
44*cf78ab8cSAndroid Build Coastguard Worker
45*cf78ab8cSAndroid Build Coastguard Worker# Absolute path to tools/netsim using this scripts directory
46*cf78ab8cSAndroid Build Coastguard WorkerREPO_NETSIM=$(dirname $(readlink -f "$0"))/..
47*cf78ab8cSAndroid Build Coastguard Workerecho "REPO_NETSIM: ${REPO_NETSIM}"
48*cf78ab8cSAndroid Build Coastguard WorkerCARGO_MANIFEST=$REPO_NETSIM/rust/$1/Cargo.toml
49*cf78ab8cSAndroid Build Coastguard Worker
50*cf78ab8cSAndroid Build Coastguard Worker# Uncomment lines starting with `##`
51*cf78ab8cSAndroid Build Coastguard WorkerOS=$(uname | tr '[:upper:]' '[:lower:]')
52*cf78ab8cSAndroid Build Coastguard Workerif [[ "$OS" == "linux" ]]; then
53*cf78ab8cSAndroid Build Coastguard Worker    sed -i 's/^##//g' $CARGO_MANIFEST
54*cf78ab8cSAndroid Build Coastguard Workerfi
55*cf78ab8cSAndroid Build Coastguard Workerif [[ "$OS" == "darwin" ]]; then
56*cf78ab8cSAndroid Build Coastguard Worker    sed -i '' 's/^##//g' $CARGO_MANIFEST
57*cf78ab8cSAndroid Build Coastguard Workerfi
58*cf78ab8cSAndroid Build Coastguard Worker
59*cf78ab8cSAndroid Build Coastguard Workerif [ ! -d "$REPO_NETSIM/objs/rust/.cargo" ]; then
60*cf78ab8cSAndroid Build Coastguard Worker    python3 $REPO_NETSIM/scripts/build_tools.py
61*cf78ab8cSAndroid Build Coastguard Workerfi
62*cf78ab8cSAndroid Build Coastguard Worker
63*cf78ab8cSAndroid Build Coastguard Worker# Use Rust dependency crates available on netsim-dev branch
64*cf78ab8cSAndroid Build Coastguard Workerexport CARGO_HOME=$REPO_NETSIM/objs/rust/.cargo
65*cf78ab8cSAndroid Build Coastguard Worker
66*cf78ab8cSAndroid Build Coastguard Workercd $REPO_NETSIM
67*cf78ab8cSAndroid Build Coastguard Workercargo build --manifest-path $CARGO_MANIFEST
68*cf78ab8cSAndroid Build Coastguard Worker
69*cf78ab8cSAndroid Build Coastguard Worker# Undo changed to Cargo.toml
70*cf78ab8cSAndroid Build Coastguard Workergit checkout $CARGO_MANIFEST
71*cf78ab8cSAndroid Build Coastguard Worker
72*cf78ab8cSAndroid Build Coastguard Workerrm $REPO_NETSIM/rust/Cargo.lock
73