xref: /aosp_15_r20/external/pytorch/scripts/build_android_gradle.sh (revision da0073e96a02ea20f0ac840b70461e3646d07c45)
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