Support linking onnxruntime statically for Android (#1619)
This commit is contained in:
@@ -1,7 +1,26 @@
|
||||
#!/usr/bin/env bash
|
||||
set -ex
|
||||
|
||||
dir=$PWD/build-android-arm64-v8a
|
||||
# If BUILD_SHARED_LIBS is ON, we use libonnxruntime.so
|
||||
# If BUILD_SHARED_LIBS is OFF, we use libonnxruntime.a
|
||||
#
|
||||
# In any case, we will have libsherpa-onnx-jni.so
|
||||
#
|
||||
# If BUILD_SHARED_LIBS is OFF, then libonnxruntime.a is linked into libsherpa-onnx-jni.so
|
||||
# and you only need to copy libsherpa-onnx-jni.so to your Android projects.
|
||||
#
|
||||
# If BUILD_SHARED_LIBS is ON, then you need to copy both libsherpa-onnx-jni.so
|
||||
# and libonnxruntime.so to your Android projects
|
||||
#
|
||||
if [ -z $BUILD_SHARED_LIBS ]; then
|
||||
BUILD_SHARED_LIBS=ON
|
||||
fi
|
||||
|
||||
if [ $BUILD_SHARED_LIBS == ON ]; then
|
||||
dir=$PWD/build-android-arm64-v8a
|
||||
else
|
||||
dir=$PWD/build-android-arm64-v8a-static
|
||||
fi
|
||||
|
||||
mkdir -p $dir
|
||||
cd $dir
|
||||
@@ -21,6 +40,9 @@ cd $dir
|
||||
|
||||
if [ -z $ANDROID_NDK ]; then
|
||||
ANDROID_NDK=/star-fj/fangjun/software/android-sdk/ndk/22.1.7171670
|
||||
if [ $BUILD_SHARED_LIBS == OFF ]; then
|
||||
ANDROID_NDK=/star-fj/fangjun/software/android-sdk/ndk/27.0.11718014
|
||||
fi
|
||||
# or use
|
||||
# ANDROID_NDK=/star-fj/fangjun/software/android-ndk
|
||||
#
|
||||
@@ -32,6 +54,10 @@ if [ -z $ANDROID_NDK ]; then
|
||||
# Tools -> SDK manager -> Android SDK
|
||||
# and set "Android SDK location" to /Users/fangjun/software/my-android
|
||||
ANDROID_NDK=/Users/fangjun/software/my-android/ndk/22.1.7171670
|
||||
|
||||
if [ $BUILD_SHARED_LIBS == OFF ]; then
|
||||
ANDROID_NDK=/Users/fangjun/software/my-android/ndk/27.0.11718014
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
@@ -44,17 +70,29 @@ echo "ANDROID_NDK: $ANDROID_NDK"
|
||||
sleep 1
|
||||
onnxruntime_version=1.17.1
|
||||
|
||||
if [ ! -f $onnxruntime_version/jni/arm64-v8a/libonnxruntime.so ]; then
|
||||
mkdir -p $onnxruntime_version
|
||||
pushd $onnxruntime_version
|
||||
wget -c -q https://github.com/csukuangfj/onnxruntime-libs/releases/download/v${onnxruntime_version}/onnxruntime-android-${onnxruntime_version}.zip
|
||||
unzip onnxruntime-android-${onnxruntime_version}.zip
|
||||
rm onnxruntime-android-${onnxruntime_version}.zip
|
||||
popd
|
||||
fi
|
||||
if [ $BUILD_SHARED_LIBS == ON ]; then
|
||||
if [ ! -f $onnxruntime_version/jni/arm64-v8a/libonnxruntime.so ]; then
|
||||
mkdir -p $onnxruntime_version
|
||||
pushd $onnxruntime_version
|
||||
wget -c -q https://github.com/csukuangfj/onnxruntime-libs/releases/download/v${onnxruntime_version}/onnxruntime-android-${onnxruntime_version}.zip
|
||||
unzip onnxruntime-android-${onnxruntime_version}.zip
|
||||
rm onnxruntime-android-${onnxruntime_version}.zip
|
||||
popd
|
||||
fi
|
||||
|
||||
export SHERPA_ONNXRUNTIME_LIB_DIR=$dir/$onnxruntime_version/jni/arm64-v8a/
|
||||
export SHERPA_ONNXRUNTIME_INCLUDE_DIR=$dir/$onnxruntime_version/headers/
|
||||
export SHERPA_ONNXRUNTIME_LIB_DIR=$dir/$onnxruntime_version/jni/arm64-v8a/
|
||||
export SHERPA_ONNXRUNTIME_INCLUDE_DIR=$dir/$onnxruntime_version/headers/
|
||||
else
|
||||
if [ ! -f ${onnxruntime_version}-static/lib/libonnxruntime.a ]; then
|
||||
wget -c -q https://github.com/csukuangfj/onnxruntime-libs/releases/download/v${onnxruntime_version}/onnxruntime-android-arm64-v8a-static_lib-${onnxruntime_version}.zip
|
||||
unzip onnxruntime-android-arm64-v8a-static_lib-${onnxruntime_version}.zip
|
||||
rm onnxruntime-android-arm64-v8a-static_lib-${onnxruntime_version}.zip
|
||||
mv onnxruntime-android-arm64-v8a-static_lib-${onnxruntime_version} ${onnxruntime_version}-static
|
||||
fi
|
||||
|
||||
export SHERPA_ONNXRUNTIME_LIB_DIR=$dir/$onnxruntime_version-static/lib/
|
||||
export SHERPA_ONNXRUNTIME_INCLUDE_DIR=$dir/$onnxruntime_version-static/include/
|
||||
fi
|
||||
|
||||
echo "SHERPA_ONNXRUNTIME_LIB_DIR: $SHERPA_ONNXRUNTIME_LIB_DIR"
|
||||
echo "SHERPA_ONNXRUNTIME_INCLUDE_DIR $SHERPA_ONNXRUNTIME_INCLUDE_DIR"
|
||||
@@ -88,24 +126,30 @@ cmake -DCMAKE_TOOLCHAIN_FILE="$ANDROID_NDK/build/cmake/android.toolchain.cmake"
|
||||
-DBUILD_ESPEAK_NG_EXE=OFF \
|
||||
-DBUILD_ESPEAK_NG_TESTS=OFF \
|
||||
-DCMAKE_BUILD_TYPE=Release \
|
||||
-DBUILD_SHARED_LIBS=ON \
|
||||
-DBUILD_SHARED_LIBS=$BUILD_SHARED_LIBS \
|
||||
-DSHERPA_ONNX_ENABLE_PYTHON=OFF \
|
||||
-DSHERPA_ONNX_ENABLE_TESTS=OFF \
|
||||
-DSHERPA_ONNX_ENABLE_CHECK=OFF \
|
||||
-DSHERPA_ONNX_ENABLE_PORTAUDIO=OFF \
|
||||
-DSHERPA_ONNX_ENABLE_JNI=$SHERPA_ONNX_ENABLE_JNI \
|
||||
-DSHERPA_ONNX_LINK_LIBSTDCPP_STATICALLY=OFF \
|
||||
-DSHERPA_ONNX_ENABLE_C_API=$SHERPA_ONNX_ENABLE_C_API \
|
||||
-DCMAKE_INSTALL_PREFIX=./install \
|
||||
-DANDROID_ABI="arm64-v8a" \
|
||||
-DANDROID_PLATFORM=android-21 ..
|
||||
|
||||
# By default, it links to libc++_static.a
|
||||
# -DANDROID_STL=c++_shared \
|
||||
|
||||
# Please use -DANDROID_PLATFORM=android-27 if you want to use Android NNAPI
|
||||
|
||||
# make VERBOSE=1 -j4
|
||||
make -j4
|
||||
make install/strip
|
||||
cp -fv $onnxruntime_version/jni/arm64-v8a/libonnxruntime.so install/lib
|
||||
cp -fv $onnxruntime_version/jni/arm64-v8a/libonnxruntime.so install/lib 2>/dev/null || true
|
||||
rm -rf install/share
|
||||
rm -rf install/lib/pkgconfig
|
||||
rm -rf install/lib/lib*.a
|
||||
|
||||
# To run the generated binaries on Android, please use the following steps.
|
||||
#
|
||||
|
||||
Reference in New Issue
Block a user