Skip to content

Commit

Permalink
Publish pre-compiled libs for Android. (#217)
Browse files Browse the repository at this point in the history
  • Loading branch information
csukuangfj authored Jul 15, 2023
1 parent de26736 commit 5d820b8
Show file tree
Hide file tree
Showing 7 changed files with 260 additions and 64 deletions.
144 changes: 144 additions & 0 deletions .github/workflows/android.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,144 @@
name: android

on:
push:
branches:
- master
paths:
- '.github/workflows/android.yaml'
- 'CMakeLists.txt'
- 'cmake/**'
- 'sherpa-onnx/csrc/*'
- 'sherpa-onnx/jni/*'
- 'build-android*.sh'
pull_request:
branches:
- master
paths:
- '.github/workflows/android.yaml'
- 'CMakeLists.txt'
- 'cmake/**'
- 'sherpa-onnx/csrc/*'
- 'sherpa-onnx/jni/*'
- 'build-android*.sh'

release:
types:
- published

workflow_dispatch:
inputs:
release:
description: "Whether to release"
type: boolean

env:
RELEASE:
|- # Release if there is a release tag name or a release flag in workflow_dispatch
${{ github.event.release.tag_name != '' || github.event.inputs.release == 'true' }}

concurrency:
group: android-${{ github.ref }}
cancel-in-progress: true

jobs:
build-android-libs:
name: Android for ${{ matrix.os }}
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest]

steps:
- uses: actions/checkout@v2
with:
fetch-depth: 0

- name: Display NDK HOME
shell: bash
run: |
echo "ANDROID_NDK_LATEST_HOME: ${ANDROID_NDK_LATEST_HOME}"
ls -lh ${ANDROID_NDK_LATEST_HOME}
- name: build android arm64-v8a
shell: bash
run: |
export ANDROID_NDK=$ANDROID_NDK_LATEST_HOME
./build-android-arm64-v8a.sh
mkdir -p jniLibs/arm64-v8a/
cp -v ./build-android-arm64-v8a/install/lib/*.so ./jniLibs/arm64-v8a/
- name: build android armv7-eabi
shell: bash
run: |
export ANDROID_NDK=$ANDROID_NDK_LATEST_HOME
./build-android-armv7-eabi.sh
mkdir -p ./jniLibs/armeabi-v7a/
cp -v ./build-android-armv7-eabi/install/lib/*.so ./jniLibs/armeabi-v7a/
- name: build android x86_64
shell: bash
run: |
export ANDROID_NDK=$ANDROID_NDK_LATEST_HOME
./build-android-x86-64.sh
mkdir -p ./jniLibs/x86_64
cp -v ./build-android-x86-64/install/lib/*.so ./jniLibs/x86_64
- name: build android x86
shell: bash
run: |
export ANDROID_NDK=$ANDROID_NDK_LATEST_HOME
./build-android-x86.sh
mkdir -p ./jniLibs/x86
cp -v ./build-android-x86/install/lib/*.so ./jniLibs/x86
- name: Copy files
shell: bash
run: |
SHERPA_ONNX_VERSION=v$(grep "SHERPA_ONNX_VERSION" ./CMakeLists.txt | cut -d " " -f 2 | cut -d '"' -f 2)
echo "SHERPA_ONNX_VERSION=$SHERPA_ONNX_VERSION" >> "$GITHUB_ENV"
filename=sherpa-onnx-${SHERPA_ONNX_VERSION}-android.tar.bz2
tar cjvf $filename ./jniLibs
ls -lh
- uses: actions/upload-artifact@v2
with:
name: sherpa-onnx-android-libs
path: ./jniLibs

# https://huggingface.co/docs/hub/spaces-github-actions
- name: Publish to huggingface
if: github.repository_owner == 'csukuangfj' || github.repository_owner == 'k2-fsa' && env.RELEASE == 'true'
env:
HF_TOKEN: ${{ secrets.HF_TOKEN }}
run: |
git config --global user.email "[email protected]"
git config --global user.name "Fangjun Kuang"
GIT_LFS_SKIP_SMUDGE=1 git clone https://huggingface.co/csukuangfj/sherpa-onnx-libs huggingface
cd huggingface
git lfs pull
cp -v ../sherpa-onnx-*-android.tar.bz2 ./
git status
git lfs track "*.bz2"
git add .
git commit -m "upload sherpa-onnx-${SHERPA_ONNX_VERSION}-android.tar.bz2"
git push https://csukuangfj:[email protected]/csukuangfj/sherpa-onnx-libs main
- name: Release android libs
if: env.RELEASE == 'true'
uses: svenstaro/upload-release-action@v2
with:
file_glob: true
overwrite: true
file: sherpa-onnx-*-android.tar.bz2
2 changes: 1 addition & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
cmake_minimum_required(VERSION 3.13 FATAL_ERROR)
project(sherpa-onnx)

set(SHERPA_ONNX_VERSION "1.5.2")
set(SHERPA_ONNX_VERSION "1.5.3")

# Disable warning about
#
Expand Down
9 changes: 6 additions & 3 deletions build-android-arm64-v8a.sh
Original file line number Diff line number Diff line change
Expand Up @@ -42,15 +42,18 @@ fi

echo "ANDROID_NDK: $ANDROID_NDK"
sleep 1
onnxruntime_version=v1.15.1

if [ ! -f ./android-onnxruntime-libs/jni/arm64-v8a/libonnxruntime.so ]; then
if [ ! -f ./android-onnxruntime-libs/$onnxruntime_version/jni/arm64-v8a/libonnxruntime.so ]; then
GIT_LFS_SKIP_SMUDGE=1 git clone https://huggingface.co/csukuangfj/android-onnxruntime-libs
pushd android-onnxruntime-libs
git lfs pull --include "jni/arm64-v8a/libonnxruntime.so"
git lfs pull --include "$onnxruntime_version/jni/arm64-v8a/libonnxruntime.so"
ln -s $onnxruntime_version/jni .
ln -s $onnxruntime_version/headers .
popd
fi

ls -l ./android-onnxruntime-libs/jni/arm64-v8a/libonnxruntime.so
ls -lh ./android-onnxruntime-libs/jni/arm64-v8a/libonnxruntime.so

# check filesize
filesize=$(ls -l ./android-onnxruntime-libs/jni/arm64-v8a/libonnxruntime.so | tr -s " " " " | cut -d " " -f 5)
Expand Down
8 changes: 6 additions & 2 deletions build-android-armv7-eabi.sh
Original file line number Diff line number Diff line change
Expand Up @@ -43,10 +43,14 @@ fi
echo "ANDROID_NDK: $ANDROID_NDK"
sleep 1

if [ ! -f ./android-onnxruntime-libs/jni/armeabi-v7a/libonnxruntime.so ]; then
onnxruntime_version=v1.15.1

if [ ! -f ./android-onnxruntime-libs/$onnxruntime_version/jni/armeabi-v7a/libonnxruntime.so ]; then
GIT_LFS_SKIP_SMUDGE=1 git clone https://huggingface.co/csukuangfj/android-onnxruntime-libs
pushd android-onnxruntime-libs
git lfs pull --include "jni/armeabi-v7a/libonnxruntime.so"
git lfs pull --include "$onnxruntime_version/jni/armeabi-v7a/libonnxruntime.so"
ln -s $onnxruntime_version/jni .
ln -s $onnxruntime_version/headers .
popd
fi

Expand Down
8 changes: 6 additions & 2 deletions build-android-x86-64.sh
Original file line number Diff line number Diff line change
Expand Up @@ -43,10 +43,14 @@ fi
echo "ANDROID_NDK: $ANDROID_NDK"
sleep 1

if [ ! -f ./android-onnxruntime-libs/jni/x86_64/libonnxruntime.so ]; then
onnxruntime_version=v1.15.1

if [ ! -f ./android-onnxruntime-libs/$onnxruntime_version/jni/x86_64/libonnxruntime.so ]; then
GIT_LFS_SKIP_SMUDGE=1 git clone https://huggingface.co/csukuangfj/android-onnxruntime-libs
pushd android-onnxruntime-libs
git lfs pull --include "jni/x86_64/libonnxruntime.so"
git lfs pull --include "$onnxruntime_version/jni/x86_64/libonnxruntime.so"
ln -s $onnxruntime_version/jni .
ln -s $onnxruntime_version/headers .
popd
fi

Expand Down
90 changes: 90 additions & 0 deletions build-android-x86.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
#!/usr/bin/env bash
set -ex

dir=$PWD/build-android-x86

mkdir -p $dir
cd $dir

# Note from https://github.com/Tencent/ncnn/wiki/how-to-build#build-for-android
# (optional) remove the hardcoded debug flag in Android NDK android-ndk
# issue: https://github.com/android/ndk/issues/243
#
# open $ANDROID_NDK/build/cmake/android.toolchain.cmake for ndk < r23
# or $ANDROID_NDK/build/cmake/android-legacy.toolchain.cmake for ndk >= r23
#
# delete "-g" line
#
# list(APPEND ANDROID_COMPILER_FLAGS
# -g
# -DANDROID

if [ -z $ANDROID_NDK ]; then
ANDROID_NDK=/ceph-fj/fangjun/software/android-sdk/ndk/21.0.6113669
# or use
# ANDROID_NDK=/ceph-fj/fangjun/software/android-ndk
#
# Inside the $ANDROID_NDK directory, you can find a binary ndk-build
# and some other files like the file "build/cmake/android.toolchain.cmake"

if [ ! -d $ANDROID_NDK ]; then
# For macOS, I have installed Android Studio, select the menu
# 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
fi
fi

if [ ! -d $ANDROID_NDK ]; then
echo Please set the environment variable ANDROID_NDK before you run this script
exit 1
fi

echo "ANDROID_NDK: $ANDROID_NDK"
sleep 1

onnxruntime_version=v1.15.1

if [ ! -f ./android-onnxruntime-libs/$onnxruntime_version/jni/x86/libonnxruntime.so ]; then
GIT_LFS_SKIP_SMUDGE=1 git clone https://huggingface.co/csukuangfj/android-onnxruntime-libs
pushd android-onnxruntime-libs
git lfs pull --include "$onnxruntime_version/jni/x86/libonnxruntime.so"
ln -s $onnxruntime_version/jni .
ln -s $onnxruntime_version/headers .
popd
fi

ls -l ./android-onnxruntime-libs/jni/x86/libonnxruntime.so

# check filesize
filesize=$(ls -l ./android-onnxruntime-libs/jni/x86/libonnxruntime.so | tr -s " " " " | cut -d " " -f 5)
if (( $filesize < 1000 )); then
ls -lh ./android-onnxruntime-libs/jni/x86/libonnxruntime.so
echo "Please use: git lfs pull to download libonnxruntime.so"
exit 1
fi

export SHERPA_ONNXRUNTIME_LIB_DIR=$dir/android-onnxruntime-libs/jni/x86/
export SHERPA_ONNXRUNTIME_INCLUDE_DIR=$dir/android-onnxruntime-libs/headers/

echo "SHERPA_ONNXRUNTIME_LIB_DIR: $SHERPA_ONNXRUNTIME_LIB_DIR"
echo "SHERPA_ONNXRUNTIME_INCLUDE_DIR $SHERPA_ONNXRUNTIME_INCLUDE_DIR"

cmake -DCMAKE_TOOLCHAIN_FILE="$ANDROID_NDK/build/cmake/android.toolchain.cmake" \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_SHARED_LIBS=ON \
-DSHERPA_ONNX_ENABLE_PYTHON=OFF \
-DSHERPA_ONNX_ENABLE_TESTS=OFF \
-DSHERPA_ONNX_ENABLE_CHECK=OFF \
-DSHERPA_ONNX_ENABLE_PORTAUDIO=OFF \
-DSHERPA_ONNX_ENABLE_JNI=ON \
-DCMAKE_INSTALL_PREFIX=./install \
-DANDROID_ABI="x86" \
-DSHERPA_ONNX_ENABLE_C_API=OFF \
-DSHERPA_ONNX_ENABLE_WEBSOCKET=OFF \
-DANDROID_PLATFORM=android-21 ..

# make VERBOSE=1 -j4
make -j4
make install/strip
cp -fv android-onnxruntime-libs/jni/x86/libonnxruntime.so install/lib
63 changes: 7 additions & 56 deletions release.sh
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,10 @@ if [ -d $dst ]; then
exit 0
fi

./build-android-x86-64.sh
./build-android-arm64-v8a.sh
./build-android-armv7-eabi.sh
./build-android-x86-64.sh
./build-android-x86.sh
./build-ios.sh

mkdir -p $dst/jniLibs/arm64-v8a
Expand All @@ -28,6 +29,9 @@ cp -v ./build-android-armv7-eabi/install/lib/*.so $dst/jniLibs/armeabi-v7a/
mkdir -p $dst/jniLibs/x86_64
cp -v ./build-android-x86-64/install/lib/*.so $dst/jniLibs/x86_64

mkdir -p $dst/jniLibs/x86
cp -v ./build-android-x86/install/lib/*.so $dst/jniLibs/x86

mkdir -p $dst/build-ios/
cp -av ./build-ios/sherpa-onnx.xcframework $dst/build-ios/

Expand All @@ -36,59 +40,6 @@ cp -av ./build-ios/ios-onnxruntime/onnxruntime.xcframework $dst/build-ios/ios-on

cd $dst

tar cjvf sherpa-onnx-v${SHERPA_ONNX_VERSION}-pre-compiled-android-libs.tar.bz2 ./jniLibs

tar cjvf sherpa-onnx-v${SHERPA_ONNX_VERSION}-pre-compiled-ios-libs.tar.bz2 ./build-ios
tar cjvf sherpa-onnx-v${SHERPA_ONNX_VERSION}-android.tar.bz2 ./jniLibs

# .
# ├── build-ios
# │   ├── ios-onnxruntime
# │   │   └── onnxruntime.xcframework
# │   │   ├── Headers
# │   │   │   ├── cpu_provider_factory.h
# │   │   │   ├── onnxruntime_c_api.h
# │   │   │   ├── onnxruntime_cxx_api.h
# │   │   │   └── onnxruntime_cxx_inline.h
# │   │   ├── Info.plist
# │   │   ├── ios-arm64
# │   │   │   ├── libonnxruntime.a -> onnxruntime.a
# │   │   │   └── onnxruntime.a
# │   │   └── ios-arm64_x86_64-simulator
# │   │   ├── libonnxruntime.a -> onnxruntime.a
# │   │   └── onnxruntime.a
# │   └── sherpa-onnx.xcframework
# │   ├── Headers
# │   │   └── sherpa-onnx
# │   │   └── c-api
# │   │   └── c-api.h
# │   ├── Info.plist
# │   ├── ios-arm64
# │   │   ├── libsherpa-onnx.a -> sherpa-onnx.a
# │   │   └── sherpa-onnx.a
# │   └── ios-arm64_x86_64-simulator
# │   ├── libsherpa-onnx.a -> sherpa-onnx.a
# │   └── sherpa-onnx.a
# ├── jniLibs
# │   ├── arm64-v8a
# │   │   ├── libkaldi-native-fbank-core.so
# │   │   ├── libonnxruntime.so
# │   │   ├── libsherpa-onnx-c-api.so
# │   │   ├── libsherpa-onnx-core.so
# │   │   └── libsherpa-onnx-jni.so
# │   ├── armeabi-v7a
# │   │   ├── libkaldi-native-fbank-core.so
# │   │   ├── libonnxruntime.so
# │   │   ├── libsherpa-onnx-c-api.so
# │   │   ├── libsherpa-onnx-core.so
# │   │   └── libsherpa-onnx-jni.so
# │   └── x86_64
# │   ├── libkaldi-native-fbank-core.so
# │   ├── libonnxruntime.so
# │   ├── libsherpa-onnx-core.so
# │   └── libsherpa-onnx-jni.so
# ├── sherpa-onnx-v1.4.1-pre-compiled-android-libs.tar.bz2
# └── sherpa-onnx-v1.4.1-pre-compiled-ios-libs.tar.bz2
#
# 16 directories, 31 files
#
# 1.4.1 is the current version listed in ./CMakeLists.txt
tar cjvf sherpa-onnx-v${SHERPA_ONNX_VERSION}-ios.tar.bz2 ./build-ios

0 comments on commit 5d820b8

Please sign in to comment.