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