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