1#!/usr/bin/env bash 2set -eux -o pipefail 3 4env 5echo "BUILD_ENVIRONMENT:$BUILD_ENVIRONMENT" 6 7export ANDROID_NDK_HOME=/opt/ndk 8export ANDROID_NDK=/opt/ndk 9export ANDROID_HOME=/opt/android/sdk 10 11# Must be in sync with GRADLE_VERSION in docker image for android 12# https://github.com/pietern/pytorch-dockerfiles/blob/master/build.sh#L155 13export GRADLE_VERSION=6.8.3 14export GRADLE_HOME=/opt/gradle/gradle-$GRADLE_VERSION 15export GRADLE_PATH=$GRADLE_HOME/bin/gradle 16 17# touch gradle cache files to prevent expiration 18while IFS= read -r -d '' file 19do 20 touch "$file" || true 21done < <(find /var/lib/jenkins/.gradle -type f -print0) 22 23# Patch pocketfft (as Android does not have aligned_alloc even if compiled with c++17 24if [ -f ~/workspace/third_party/pocketfft/pocketfft_hdronly.h ]; then 25 sed -i -e "s/__cplusplus >= 201703L/0/" ~/workspace/third_party/pocketfft/pocketfft_hdronly.h 26fi 27 28export GRADLE_LOCAL_PROPERTIES=~/workspace/android/local.properties 29rm -f $GRADLE_LOCAL_PROPERTIES 30echo "sdk.dir=/opt/android/sdk" >> $GRADLE_LOCAL_PROPERTIES 31echo "ndk.dir=/opt/ndk" >> $GRADLE_LOCAL_PROPERTIES 32echo "cmake.dir=/usr/local" >> $GRADLE_LOCAL_PROPERTIES 33 34retry () { 35 $* || (sleep 1 && $*) || (sleep 2 && $*) || (sleep 4 && $*) || (sleep 8 && $*) 36} 37 38# Run custom build script 39if [[ "${BUILD_ENVIRONMENT}" == *-gradle-custom-build* ]]; then 40 # Install torch & torchvision - used to download & dump used ops from test model. 41 retry pip install torch torchvision --progress-bar off 42 43 exec "$(dirname "${BASH_SOURCE[0]}")/../android/build_test_app_custom.sh" armeabi-v7a 44fi 45 46# Run default build 47BUILD_ANDROID_INCLUDE_DIR_x86=~/workspace/build_android/install/include 48BUILD_ANDROID_LIB_DIR_x86=~/workspace/build_android/install/lib 49 50BUILD_ANDROID_INCLUDE_DIR_x86_64=~/workspace/build_android_install_x86_64/install/include 51BUILD_ANDROID_LIB_DIR_x86_64=~/workspace/build_android_install_x86_64/install/lib 52 53BUILD_ANDROID_INCLUDE_DIR_arm_v7a=~/workspace/build_android_install_arm_v7a/install/include 54BUILD_ANDROID_LIB_DIR_arm_v7a=~/workspace/build_android_install_arm_v7a/install/lib 55 56BUILD_ANDROID_INCLUDE_DIR_arm_v8a=~/workspace/build_android_install_arm_v8a/install/include 57BUILD_ANDROID_LIB_DIR_arm_v8a=~/workspace/build_android_install_arm_v8a/install/lib 58 59PYTORCH_ANDROID_SRC_MAIN_DIR=~/workspace/android/pytorch_android/src/main 60 61JNI_INCLUDE_DIR=${PYTORCH_ANDROID_SRC_MAIN_DIR}/cpp/libtorch_include 62mkdir -p $JNI_INCLUDE_DIR 63 64JNI_LIBS_DIR=${PYTORCH_ANDROID_SRC_MAIN_DIR}/jniLibs 65mkdir -p $JNI_LIBS_DIR 66 67ln -s ${BUILD_ANDROID_INCLUDE_DIR_x86} ${JNI_INCLUDE_DIR}/x86 68ln -s ${BUILD_ANDROID_LIB_DIR_x86} ${JNI_LIBS_DIR}/x86 69 70if [[ "${BUILD_ENVIRONMENT}" != *-gradle-build-only-x86_32* ]]; then 71ln -s ${BUILD_ANDROID_INCLUDE_DIR_x86_64} ${JNI_INCLUDE_DIR}/x86_64 72ln -s ${BUILD_ANDROID_LIB_DIR_x86_64} ${JNI_LIBS_DIR}/x86_64 73 74ln -s ${BUILD_ANDROID_INCLUDE_DIR_arm_v7a} ${JNI_INCLUDE_DIR}/armeabi-v7a 75ln -s ${BUILD_ANDROID_LIB_DIR_arm_v7a} ${JNI_LIBS_DIR}/armeabi-v7a 76 77ln -s ${BUILD_ANDROID_INCLUDE_DIR_arm_v8a} ${JNI_INCLUDE_DIR}/arm64-v8a 78ln -s ${BUILD_ANDROID_LIB_DIR_arm_v8a} ${JNI_LIBS_DIR}/arm64-v8a 79fi 80 81GRADLE_PARAMS="-p android assembleRelease --debug --stacktrace" 82if [[ "${BUILD_ENVIRONMENT}" == *-gradle-build-only-x86_32* ]]; then 83 GRADLE_PARAMS+=" -PABI_FILTERS=x86" 84fi 85 86if [ -n "${GRADLE_OFFLINE:-}" ]; then 87 GRADLE_PARAMS+=" --offline" 88fi 89 90$GRADLE_PATH $GRADLE_PARAMS 91 92find . -type f -name "*.a" -exec ls -lh {} \; 93 94while IFS= read -r -d '' file 95do 96 echo 97 echo "$file" 98 ls -lah "$file" 99 zipinfo -l "$file" 100done < <(find . -type f -name '*.aar' -print0) 101 102find . -type f -name *aar -print | xargs tar cfvz ~/workspace/android/artifacts.tgz 103