Fangjun Kuang
Committed by GitHub

Publish pre-compiled libs for Android. (#217)

  1 +name: android
  2 +
  3 +on:
  4 + push:
  5 + branches:
  6 + - master
  7 + paths:
  8 + - '.github/workflows/android.yaml'
  9 + - 'CMakeLists.txt'
  10 + - 'cmake/**'
  11 + - 'sherpa-onnx/csrc/*'
  12 + - 'sherpa-onnx/jni/*'
  13 + - 'build-android*.sh'
  14 + pull_request:
  15 + branches:
  16 + - master
  17 + paths:
  18 + - '.github/workflows/android.yaml'
  19 + - 'CMakeLists.txt'
  20 + - 'cmake/**'
  21 + - 'sherpa-onnx/csrc/*'
  22 + - 'sherpa-onnx/jni/*'
  23 + - 'build-android*.sh'
  24 +
  25 + release:
  26 + types:
  27 + - published
  28 +
  29 + workflow_dispatch:
  30 + inputs:
  31 + release:
  32 + description: "Whether to release"
  33 + type: boolean
  34 +
  35 +env:
  36 + RELEASE:
  37 + |- # Release if there is a release tag name or a release flag in workflow_dispatch
  38 + ${{ github.event.release.tag_name != '' || github.event.inputs.release == 'true' }}
  39 +
  40 +concurrency:
  41 + group: android-${{ github.ref }}
  42 + cancel-in-progress: true
  43 +
  44 +jobs:
  45 + build-android-libs:
  46 + name: Android for ${{ matrix.os }}
  47 + runs-on: ${{ matrix.os }}
  48 + strategy:
  49 + fail-fast: false
  50 + matrix:
  51 + os: [ubuntu-latest]
  52 +
  53 + steps:
  54 + - uses: actions/checkout@v2
  55 + with:
  56 + fetch-depth: 0
  57 +
  58 + - name: Display NDK HOME
  59 + shell: bash
  60 + run: |
  61 + echo "ANDROID_NDK_LATEST_HOME: ${ANDROID_NDK_LATEST_HOME}"
  62 + ls -lh ${ANDROID_NDK_LATEST_HOME}
  63 +
  64 + - name: build android arm64-v8a
  65 + shell: bash
  66 + run: |
  67 + export ANDROID_NDK=$ANDROID_NDK_LATEST_HOME
  68 + ./build-android-arm64-v8a.sh
  69 + mkdir -p jniLibs/arm64-v8a/
  70 + cp -v ./build-android-arm64-v8a/install/lib/*.so ./jniLibs/arm64-v8a/
  71 +
  72 + - name: build android armv7-eabi
  73 + shell: bash
  74 + run: |
  75 + export ANDROID_NDK=$ANDROID_NDK_LATEST_HOME
  76 + ./build-android-armv7-eabi.sh
  77 + mkdir -p ./jniLibs/armeabi-v7a/
  78 + cp -v ./build-android-armv7-eabi/install/lib/*.so ./jniLibs/armeabi-v7a/
  79 +
  80 + - name: build android x86_64
  81 + shell: bash
  82 + run: |
  83 + export ANDROID_NDK=$ANDROID_NDK_LATEST_HOME
  84 + ./build-android-x86-64.sh
  85 + mkdir -p ./jniLibs/x86_64
  86 + cp -v ./build-android-x86-64/install/lib/*.so ./jniLibs/x86_64
  87 +
  88 + - name: build android x86
  89 + shell: bash
  90 + run: |
  91 + export ANDROID_NDK=$ANDROID_NDK_LATEST_HOME
  92 + ./build-android-x86.sh
  93 + mkdir -p ./jniLibs/x86
  94 + cp -v ./build-android-x86/install/lib/*.so ./jniLibs/x86
  95 +
  96 + - name: Copy files
  97 + shell: bash
  98 + run: |
  99 + SHERPA_ONNX_VERSION=v$(grep "SHERPA_ONNX_VERSION" ./CMakeLists.txt | cut -d " " -f 2 | cut -d '"' -f 2)
  100 + echo "SHERPA_ONNX_VERSION=$SHERPA_ONNX_VERSION" >> "$GITHUB_ENV"
  101 +
  102 + filename=sherpa-onnx-${SHERPA_ONNX_VERSION}-android.tar.bz2
  103 +
  104 + tar cjvf $filename ./jniLibs
  105 +
  106 + ls -lh
  107 +
  108 + - uses: actions/upload-artifact@v2
  109 + with:
  110 + name: sherpa-onnx-android-libs
  111 + path: ./jniLibs
  112 +
  113 + # https://huggingface.co/docs/hub/spaces-github-actions
  114 + - name: Publish to huggingface
  115 + if: github.repository_owner == 'csukuangfj' || github.repository_owner == 'k2-fsa' && env.RELEASE == 'true'
  116 + env:
  117 + HF_TOKEN: ${{ secrets.HF_TOKEN }}
  118 + run: |
  119 + git config --global user.email "csukuangfj@gmail.com"
  120 + git config --global user.name "Fangjun Kuang"
  121 +
  122 + GIT_LFS_SKIP_SMUDGE=1 git clone https://huggingface.co/csukuangfj/sherpa-onnx-libs huggingface
  123 +
  124 + cd huggingface
  125 + git lfs pull
  126 +
  127 + cp -v ../sherpa-onnx-*-android.tar.bz2 ./
  128 +
  129 + git status
  130 + git lfs track "*.bz2"
  131 +
  132 + git add .
  133 +
  134 + git commit -m "upload sherpa-onnx-${SHERPA_ONNX_VERSION}-android.tar.bz2"
  135 +
  136 + git push https://csukuangfj:$HF_TOKEN@huggingface.co/csukuangfj/sherpa-onnx-libs main
  137 +
  138 + - name: Release android libs
  139 + if: env.RELEASE == 'true'
  140 + uses: svenstaro/upload-release-action@v2
  141 + with:
  142 + file_glob: true
  143 + overwrite: true
  144 + file: sherpa-onnx-*-android.tar.bz2
1 cmake_minimum_required(VERSION 3.13 FATAL_ERROR) 1 cmake_minimum_required(VERSION 3.13 FATAL_ERROR)
2 project(sherpa-onnx) 2 project(sherpa-onnx)
3 3
4 -set(SHERPA_ONNX_VERSION "1.5.2") 4 +set(SHERPA_ONNX_VERSION "1.5.3")
5 5
6 # Disable warning about 6 # Disable warning about
7 # 7 #
@@ -42,15 +42,18 @@ fi @@ -42,15 +42,18 @@ fi
42 42
43 echo "ANDROID_NDK: $ANDROID_NDK" 43 echo "ANDROID_NDK: $ANDROID_NDK"
44 sleep 1 44 sleep 1
  45 +onnxruntime_version=v1.15.1
45 46
46 -if [ ! -f ./android-onnxruntime-libs/jni/arm64-v8a/libonnxruntime.so ]; then 47 +if [ ! -f ./android-onnxruntime-libs/$onnxruntime_version/jni/arm64-v8a/libonnxruntime.so ]; then
47 GIT_LFS_SKIP_SMUDGE=1 git clone https://huggingface.co/csukuangfj/android-onnxruntime-libs 48 GIT_LFS_SKIP_SMUDGE=1 git clone https://huggingface.co/csukuangfj/android-onnxruntime-libs
48 pushd android-onnxruntime-libs 49 pushd android-onnxruntime-libs
49 - git lfs pull --include "jni/arm64-v8a/libonnxruntime.so" 50 + git lfs pull --include "$onnxruntime_version/jni/arm64-v8a/libonnxruntime.so"
  51 + ln -s $onnxruntime_version/jni .
  52 + ln -s $onnxruntime_version/headers .
50 popd 53 popd
51 fi 54 fi
52 55
53 -ls -l ./android-onnxruntime-libs/jni/arm64-v8a/libonnxruntime.so 56 +ls -lh ./android-onnxruntime-libs/jni/arm64-v8a/libonnxruntime.so
54 57
55 # check filesize 58 # check filesize
56 filesize=$(ls -l ./android-onnxruntime-libs/jni/arm64-v8a/libonnxruntime.so | tr -s " " " " | cut -d " " -f 5) 59 filesize=$(ls -l ./android-onnxruntime-libs/jni/arm64-v8a/libonnxruntime.so | tr -s " " " " | cut -d " " -f 5)
@@ -43,10 +43,14 @@ fi @@ -43,10 +43,14 @@ fi
43 echo "ANDROID_NDK: $ANDROID_NDK" 43 echo "ANDROID_NDK: $ANDROID_NDK"
44 sleep 1 44 sleep 1
45 45
46 -if [ ! -f ./android-onnxruntime-libs/jni/armeabi-v7a/libonnxruntime.so ]; then 46 +onnxruntime_version=v1.15.1
  47 +
  48 +if [ ! -f ./android-onnxruntime-libs/$onnxruntime_version/jni/armeabi-v7a/libonnxruntime.so ]; then
47 GIT_LFS_SKIP_SMUDGE=1 git clone https://huggingface.co/csukuangfj/android-onnxruntime-libs 49 GIT_LFS_SKIP_SMUDGE=1 git clone https://huggingface.co/csukuangfj/android-onnxruntime-libs
48 pushd android-onnxruntime-libs 50 pushd android-onnxruntime-libs
49 - git lfs pull --include "jni/armeabi-v7a/libonnxruntime.so" 51 + git lfs pull --include "$onnxruntime_version/jni/armeabi-v7a/libonnxruntime.so"
  52 + ln -s $onnxruntime_version/jni .
  53 + ln -s $onnxruntime_version/headers .
50 popd 54 popd
51 fi 55 fi
52 56
@@ -43,10 +43,14 @@ fi @@ -43,10 +43,14 @@ fi
43 echo "ANDROID_NDK: $ANDROID_NDK" 43 echo "ANDROID_NDK: $ANDROID_NDK"
44 sleep 1 44 sleep 1
45 45
46 -if [ ! -f ./android-onnxruntime-libs/jni/x86_64/libonnxruntime.so ]; then 46 +onnxruntime_version=v1.15.1
  47 +
  48 +if [ ! -f ./android-onnxruntime-libs/$onnxruntime_version/jni/x86_64/libonnxruntime.so ]; then
47 GIT_LFS_SKIP_SMUDGE=1 git clone https://huggingface.co/csukuangfj/android-onnxruntime-libs 49 GIT_LFS_SKIP_SMUDGE=1 git clone https://huggingface.co/csukuangfj/android-onnxruntime-libs
48 pushd android-onnxruntime-libs 50 pushd android-onnxruntime-libs
49 - git lfs pull --include "jni/x86_64/libonnxruntime.so" 51 + git lfs pull --include "$onnxruntime_version/jni/x86_64/libonnxruntime.so"
  52 + ln -s $onnxruntime_version/jni .
  53 + ln -s $onnxruntime_version/headers .
50 popd 54 popd
51 fi 55 fi
52 56
  1 +#!/usr/bin/env bash
  2 +set -ex
  3 +
  4 +dir=$PWD/build-android-x86
  5 +
  6 +mkdir -p $dir
  7 +cd $dir
  8 +
  9 +# Note from https://github.com/Tencent/ncnn/wiki/how-to-build#build-for-android
  10 +# (optional) remove the hardcoded debug flag in Android NDK android-ndk
  11 +# issue: https://github.com/android/ndk/issues/243
  12 +#
  13 +# open $ANDROID_NDK/build/cmake/android.toolchain.cmake for ndk < r23
  14 +# or $ANDROID_NDK/build/cmake/android-legacy.toolchain.cmake for ndk >= r23
  15 +#
  16 +# delete "-g" line
  17 +#
  18 +# list(APPEND ANDROID_COMPILER_FLAGS
  19 +# -g
  20 +# -DANDROID
  21 +
  22 +if [ -z $ANDROID_NDK ]; then
  23 + ANDROID_NDK=/ceph-fj/fangjun/software/android-sdk/ndk/21.0.6113669
  24 + # or use
  25 + # ANDROID_NDK=/ceph-fj/fangjun/software/android-ndk
  26 + #
  27 + # Inside the $ANDROID_NDK directory, you can find a binary ndk-build
  28 + # and some other files like the file "build/cmake/android.toolchain.cmake"
  29 +
  30 + if [ ! -d $ANDROID_NDK ]; then
  31 + # For macOS, I have installed Android Studio, select the menu
  32 + # Tools -> SDK manager -> Android SDK
  33 + # and set "Android SDK location" to /Users/fangjun/software/my-android
  34 + ANDROID_NDK=/Users/fangjun/software/my-android/ndk/22.1.7171670
  35 + fi
  36 +fi
  37 +
  38 +if [ ! -d $ANDROID_NDK ]; then
  39 + echo Please set the environment variable ANDROID_NDK before you run this script
  40 + exit 1
  41 +fi
  42 +
  43 +echo "ANDROID_NDK: $ANDROID_NDK"
  44 +sleep 1
  45 +
  46 +onnxruntime_version=v1.15.1
  47 +
  48 +if [ ! -f ./android-onnxruntime-libs/$onnxruntime_version/jni/x86/libonnxruntime.so ]; then
  49 + GIT_LFS_SKIP_SMUDGE=1 git clone https://huggingface.co/csukuangfj/android-onnxruntime-libs
  50 + pushd android-onnxruntime-libs
  51 + git lfs pull --include "$onnxruntime_version/jni/x86/libonnxruntime.so"
  52 + ln -s $onnxruntime_version/jni .
  53 + ln -s $onnxruntime_version/headers .
  54 + popd
  55 +fi
  56 +
  57 +ls -l ./android-onnxruntime-libs/jni/x86/libonnxruntime.so
  58 +
  59 +# check filesize
  60 +filesize=$(ls -l ./android-onnxruntime-libs/jni/x86/libonnxruntime.so | tr -s " " " " | cut -d " " -f 5)
  61 +if (( $filesize < 1000 )); then
  62 + ls -lh ./android-onnxruntime-libs/jni/x86/libonnxruntime.so
  63 + echo "Please use: git lfs pull to download libonnxruntime.so"
  64 + exit 1
  65 +fi
  66 +
  67 +export SHERPA_ONNXRUNTIME_LIB_DIR=$dir/android-onnxruntime-libs/jni/x86/
  68 +export SHERPA_ONNXRUNTIME_INCLUDE_DIR=$dir/android-onnxruntime-libs/headers/
  69 +
  70 +echo "SHERPA_ONNXRUNTIME_LIB_DIR: $SHERPA_ONNXRUNTIME_LIB_DIR"
  71 +echo "SHERPA_ONNXRUNTIME_INCLUDE_DIR $SHERPA_ONNXRUNTIME_INCLUDE_DIR"
  72 +
  73 +cmake -DCMAKE_TOOLCHAIN_FILE="$ANDROID_NDK/build/cmake/android.toolchain.cmake" \
  74 + -DCMAKE_BUILD_TYPE=Release \
  75 + -DBUILD_SHARED_LIBS=ON \
  76 + -DSHERPA_ONNX_ENABLE_PYTHON=OFF \
  77 + -DSHERPA_ONNX_ENABLE_TESTS=OFF \
  78 + -DSHERPA_ONNX_ENABLE_CHECK=OFF \
  79 + -DSHERPA_ONNX_ENABLE_PORTAUDIO=OFF \
  80 + -DSHERPA_ONNX_ENABLE_JNI=ON \
  81 + -DCMAKE_INSTALL_PREFIX=./install \
  82 + -DANDROID_ABI="x86" \
  83 + -DSHERPA_ONNX_ENABLE_C_API=OFF \
  84 + -DSHERPA_ONNX_ENABLE_WEBSOCKET=OFF \
  85 + -DANDROID_PLATFORM=android-21 ..
  86 +
  87 +# make VERBOSE=1 -j4
  88 +make -j4
  89 +make install/strip
  90 +cp -fv android-onnxruntime-libs/jni/x86/libonnxruntime.so install/lib
@@ -14,9 +14,10 @@ if [ -d $dst ]; then @@ -14,9 +14,10 @@ if [ -d $dst ]; then
14 exit 0 14 exit 0
15 fi 15 fi
16 16
17 -./build-android-x86-64.sh 17 +./build-android-arm64-v8a.sh
18 ./build-android-armv7-eabi.sh 18 ./build-android-armv7-eabi.sh
19 ./build-android-x86-64.sh 19 ./build-android-x86-64.sh
  20 +./build-android-x86.sh
20 ./build-ios.sh 21 ./build-ios.sh
21 22
22 mkdir -p $dst/jniLibs/arm64-v8a 23 mkdir -p $dst/jniLibs/arm64-v8a
@@ -28,6 +29,9 @@ cp -v ./build-android-armv7-eabi/install/lib/*.so $dst/jniLibs/armeabi-v7a/ @@ -28,6 +29,9 @@ cp -v ./build-android-armv7-eabi/install/lib/*.so $dst/jniLibs/armeabi-v7a/
28 mkdir -p $dst/jniLibs/x86_64 29 mkdir -p $dst/jniLibs/x86_64
29 cp -v ./build-android-x86-64/install/lib/*.so $dst/jniLibs/x86_64 30 cp -v ./build-android-x86-64/install/lib/*.so $dst/jniLibs/x86_64
30 31
  32 +mkdir -p $dst/jniLibs/x86
  33 +cp -v ./build-android-x86/install/lib/*.so $dst/jniLibs/x86
  34 +
31 mkdir -p $dst/build-ios/ 35 mkdir -p $dst/build-ios/
32 cp -av ./build-ios/sherpa-onnx.xcframework $dst/build-ios/ 36 cp -av ./build-ios/sherpa-onnx.xcframework $dst/build-ios/
33 37
@@ -36,59 +40,6 @@ cp -av ./build-ios/ios-onnxruntime/onnxruntime.xcframework $dst/build-ios/ios-on @@ -36,59 +40,6 @@ cp -av ./build-ios/ios-onnxruntime/onnxruntime.xcframework $dst/build-ios/ios-on
36 40
37 cd $dst 41 cd $dst
38 42
39 -tar cjvf sherpa-onnx-v${SHERPA_ONNX_VERSION}-pre-compiled-android-libs.tar.bz2 ./jniLibs  
40 -  
41 -tar cjvf sherpa-onnx-v${SHERPA_ONNX_VERSION}-pre-compiled-ios-libs.tar.bz2 ./build-ios 43 +tar cjvf sherpa-onnx-v${SHERPA_ONNX_VERSION}-android.tar.bz2 ./jniLibs
42 44
43 -# .  
44 -# ├── build-ios  
45 -# │   ├── ios-onnxruntime  
46 -# │   │   └── onnxruntime.xcframework  
47 -# │   │   ├── Headers  
48 -# │   │   │   ├── cpu_provider_factory.h  
49 -# │   │   │   ├── onnxruntime_c_api.h  
50 -# │   │   │   ├── onnxruntime_cxx_api.h  
51 -# │   │   │   └── onnxruntime_cxx_inline.h  
52 -# │   │   ├── Info.plist  
53 -# │   │   ├── ios-arm64  
54 -# │   │   │   ├── libonnxruntime.a -> onnxruntime.a  
55 -# │   │   │   └── onnxruntime.a  
56 -# │   │   └── ios-arm64_x86_64-simulator  
57 -# │   │   ├── libonnxruntime.a -> onnxruntime.a  
58 -# │   │   └── onnxruntime.a  
59 -# │   └── sherpa-onnx.xcframework  
60 -# │   ├── Headers  
61 -# │   │   └── sherpa-onnx  
62 -# │   │   └── c-api  
63 -# │   │   └── c-api.h  
64 -# │   ├── Info.plist  
65 -# │   ├── ios-arm64  
66 -# │   │   ├── libsherpa-onnx.a -> sherpa-onnx.a  
67 -# │   │   └── sherpa-onnx.a  
68 -# │   └── ios-arm64_x86_64-simulator  
69 -# │   ├── libsherpa-onnx.a -> sherpa-onnx.a  
70 -# │   └── sherpa-onnx.a  
71 -# ├── jniLibs  
72 -# │   ├── arm64-v8a  
73 -# │   │   ├── libkaldi-native-fbank-core.so  
74 -# │   │   ├── libonnxruntime.so  
75 -# │   │   ├── libsherpa-onnx-c-api.so  
76 -# │   │   ├── libsherpa-onnx-core.so  
77 -# │   │   └── libsherpa-onnx-jni.so  
78 -# │   ├── armeabi-v7a  
79 -# │   │   ├── libkaldi-native-fbank-core.so  
80 -# │   │   ├── libonnxruntime.so  
81 -# │   │   ├── libsherpa-onnx-c-api.so  
82 -# │   │   ├── libsherpa-onnx-core.so  
83 -# │   │   └── libsherpa-onnx-jni.so  
84 -# │   └── x86_64  
85 -# │   ├── libkaldi-native-fbank-core.so  
86 -# │   ├── libonnxruntime.so  
87 -# │   ├── libsherpa-onnx-core.so  
88 -# │   └── libsherpa-onnx-jni.so  
89 -# ├── sherpa-onnx-v1.4.1-pre-compiled-android-libs.tar.bz2  
90 -# └── sherpa-onnx-v1.4.1-pre-compiled-ios-libs.tar.bz2  
91 -#  
92 -# 16 directories, 31 files  
93 -#  
94 -# 1.4.1 is the current version listed in ./CMakeLists.txt 45 +tar cjvf sherpa-onnx-v${SHERPA_ONNX_VERSION}-ios.tar.bz2 ./build-ios