xref: /aosp_15_r20/external/pytorch/android/common.sh (revision da0073e96a02ea20f0ac840b70461e3646d07c45)
1*da0073e9SAndroid Build Coastguard Worker#!/bin/bash
2*da0073e9SAndroid Build Coastguard Workerset -eux
3*da0073e9SAndroid Build Coastguard Worker
4*da0073e9SAndroid Build Coastguard Worker##############################################################################
5*da0073e9SAndroid Build Coastguard Worker# Common util functions for Android build scripts.
6*da0073e9SAndroid Build Coastguard Worker##############################################################################
7*da0073e9SAndroid Build Coastguard Worker
8*da0073e9SAndroid Build Coastguard Workerif [ -z "$PYTORCH_DIR" ]; then
9*da0073e9SAndroid Build Coastguard Worker  echo "PYTORCH_DIR not set!"
10*da0073e9SAndroid Build Coastguard Worker  exit 1
11*da0073e9SAndroid Build Coastguard Workerfi
12*da0073e9SAndroid Build Coastguard Worker
13*da0073e9SAndroid Build Coastguard Workerretry () {
14*da0073e9SAndroid Build Coastguard Worker    "$@" || (sleep 10 && "$@") || (sleep 20 && "$@") || (sleep 40 && "$@")
15*da0073e9SAndroid Build Coastguard Worker}
16*da0073e9SAndroid Build Coastguard Worker
17*da0073e9SAndroid Build Coastguard Workercheck_android_sdk() {
18*da0073e9SAndroid Build Coastguard Worker  if [ -z "$ANDROID_HOME" ]; then
19*da0073e9SAndroid Build Coastguard Worker    echo "ANDROID_HOME not set; please set it to Android sdk directory"
20*da0073e9SAndroid Build Coastguard Worker    exit 1
21*da0073e9SAndroid Build Coastguard Worker  fi
22*da0073e9SAndroid Build Coastguard Worker
23*da0073e9SAndroid Build Coastguard Worker  if [ ! -d "$ANDROID_HOME" ]; then
24*da0073e9SAndroid Build Coastguard Worker    echo "ANDROID_HOME not a directory; did you install it under $ANDROID_HOME?"
25*da0073e9SAndroid Build Coastguard Worker    exit 1
26*da0073e9SAndroid Build Coastguard Worker  fi
27*da0073e9SAndroid Build Coastguard Worker  echo "ANDROID_HOME:$ANDROID_HOME"
28*da0073e9SAndroid Build Coastguard Worker}
29*da0073e9SAndroid Build Coastguard Worker
30*da0073e9SAndroid Build Coastguard Workercheck_gradle() {
31*da0073e9SAndroid Build Coastguard Worker  GRADLE_PATH=$PYTORCH_DIR/android/gradlew
32*da0073e9SAndroid Build Coastguard Worker  echo "GRADLE_PATH:$GRADLE_PATH"
33*da0073e9SAndroid Build Coastguard Worker}
34*da0073e9SAndroid Build Coastguard Worker
35*da0073e9SAndroid Build Coastguard Workerparse_abis_list() {
36*da0073e9SAndroid Build Coastguard Worker  # sync with https://github.com/pytorch/pytorch/blob/0ca0e02685a9d033ac4f04e2fa5c8ba6dbc5ae50/android/gradle.properties#L1
37*da0073e9SAndroid Build Coastguard Worker  ABIS_LIST="armeabi-v7a,arm64-v8a,x86,x86_64"
38*da0073e9SAndroid Build Coastguard Worker  CUSTOM_ABIS_LIST=false
39*da0073e9SAndroid Build Coastguard Worker  if [ $# -gt 0 ]; then
40*da0073e9SAndroid Build Coastguard Worker    ABIS_LIST=$1
41*da0073e9SAndroid Build Coastguard Worker    CUSTOM_ABIS_LIST=true
42*da0073e9SAndroid Build Coastguard Worker  fi
43*da0073e9SAndroid Build Coastguard Worker
44*da0073e9SAndroid Build Coastguard Worker  echo "ABIS_LIST:$ABIS_LIST"
45*da0073e9SAndroid Build Coastguard Worker  echo "CUSTOM_ABIS_LIST:$CUSTOM_ABIS_LIST"
46*da0073e9SAndroid Build Coastguard Worker}
47*da0073e9SAndroid Build Coastguard Worker
48*da0073e9SAndroid Build Coastguard Workerbuild_android() {
49*da0073e9SAndroid Build Coastguard Worker  PYTORCH_ANDROID_DIR="$PYTORCH_DIR/android"
50*da0073e9SAndroid Build Coastguard Worker  BUILD_ROOT="${BUILD_ROOT:-$PYTORCH_DIR}"
51*da0073e9SAndroid Build Coastguard Worker  echo "BUILD_ROOT:$BUILD_ROOT"
52*da0073e9SAndroid Build Coastguard Worker
53*da0073e9SAndroid Build Coastguard Worker  LIB_DIR="$PYTORCH_ANDROID_DIR/pytorch_android/src/main/jniLibs"
54*da0073e9SAndroid Build Coastguard Worker  INCLUDE_DIR="$PYTORCH_ANDROID_DIR/pytorch_android/src/main/cpp/libtorch_include"
55*da0073e9SAndroid Build Coastguard Worker
56*da0073e9SAndroid Build Coastguard Worker  # These directories only contain symbolic links.
57*da0073e9SAndroid Build Coastguard Worker  rm -rf "$LIB_DIR" && mkdir -p "$LIB_DIR"
58*da0073e9SAndroid Build Coastguard Worker  rm -rf "$INCLUDE_DIR" && mkdir -p "$INCLUDE_DIR"
59*da0073e9SAndroid Build Coastguard Worker
60*da0073e9SAndroid Build Coastguard Worker  for abi in $(echo "$ABIS_LIST" | tr ',' '\n')
61*da0073e9SAndroid Build Coastguard Worker  do
62*da0073e9SAndroid Build Coastguard Worker    echo "abi:$abi"
63*da0073e9SAndroid Build Coastguard Worker    ANDROID_BUILD_ROOT="$BUILD_ROOT/build_android_$abi"
64*da0073e9SAndroid Build Coastguard Worker    ANDROID_ABI="$abi" \
65*da0073e9SAndroid Build Coastguard Worker      BUILD_ROOT="$ANDROID_BUILD_ROOT" \
66*da0073e9SAndroid Build Coastguard Worker      "$PYTORCH_DIR/scripts/build_android.sh" \
67*da0073e9SAndroid Build Coastguard Worker      -DANDROID_CCACHE="$(which ccache)" \
68*da0073e9SAndroid Build Coastguard Worker      -DUSE_LITE_INTERPRETER_PROFILER="OFF"
69*da0073e9SAndroid Build Coastguard Worker
70*da0073e9SAndroid Build Coastguard Worker    echo "$abi build output lib,include at $ANDROID_BUILD_ROOT/install"
71*da0073e9SAndroid Build Coastguard Worker    ln -s "$ANDROID_BUILD_ROOT/install/lib" "$LIB_DIR/$abi"
72*da0073e9SAndroid Build Coastguard Worker    ln -s "$ANDROID_BUILD_ROOT/install/include" "$INCLUDE_DIR/$abi"
73*da0073e9SAndroid Build Coastguard Worker  done
74*da0073e9SAndroid Build Coastguard Worker}
75