Build sherpa-onnx as a single shared library (#1078)

When `-D BUILD_SHARED_LIBS=ON` is passed to `cmake`, it builds a single shared library.

Specifically, 

- For C APIs, it builds `libsherpa-onnx-c-api.so`
- For Python APIs, it builds `_sherpa_onnx.cpython-xx-xx.so`
- For Kotlin and Java APIs, it builds `libsherpa-onnx-jni.so`

There is no `libsherpa-onnx-core.so` any longer.

Note it affects only shared libraries.
This commit is contained in:
Fangjun Kuang
2024-07-06 16:41:54 +08:00
committed by GitHub
parent 55decb7bee
commit a25075101c
69 changed files with 571 additions and 324 deletions

View File

@@ -44,10 +44,6 @@ function process_linux() {
pushd linux
rm -v libpiper_phonemize.so libpiper_phonemize.so.1.2.0
rm -v libonnxruntime.so
rm -v libcargs.so
popd
}
@@ -69,12 +65,6 @@ function process_macos() {
cp -v sherpa_onnx/lib/*.dylib ../macos
cd ..
rm -rf t
pushd macos
rm -v libcargs.dylib
rm -v libonnxruntime.dylib
rm -v libpiper_phonemize.1.2.0.dylib libpiper_phonemize.dylib
popd
}
process_linux

View File

@@ -36,18 +36,8 @@ def get_dict():
def process_linux(s):
libs = [
"libespeak-ng.so",
"libkaldi-decoder-core.so",
"libkaldi-native-fbank-core.so",
"libonnxruntime.so.1.17.1",
"libssentencepiece_core.so",
"libpiper_phonemize.so.1",
"libsherpa-onnx-c-api.so",
"libsherpa-onnx-core.so",
"libsherpa-onnx-fstfar.so",
"libsherpa-onnx-fst.so",
"libsherpa-onnx-kaldifst-core.so",
"libucd.so",
]
prefix = f"{src_dir}/linux/"
libs = [prefix + lib for lib in libs]
@@ -66,18 +56,8 @@ def process_linux(s):
def process_macos(s, rid):
libs = [
"libespeak-ng.dylib",
"libkaldi-decoder-core.dylib",
"libkaldi-native-fbank-core.dylib",
"libonnxruntime.1.17.1.dylib",
"libssentencepiece_core.dylib",
"libpiper_phonemize.1.dylib",
"libsherpa-onnx-c-api.dylib",
"libsherpa-onnx-core.dylib",
"libsherpa-onnx-fstfar.dylib",
"libsherpa-onnx-fst.dylib",
"libsherpa-onnx-kaldifst-core.dylib",
"libucd.dylib",
]
prefix = f"{src_dir}/macos-{rid}/"
libs = [prefix + lib for lib in libs]
@@ -96,18 +76,8 @@ def process_macos(s, rid):
def process_windows(s, rid):
libs = [
"espeak-ng.dll",
"kaldi-decoder-core.dll",
"kaldi-native-fbank-core.dll",
"onnxruntime.dll",
"ssentencepiece_core.dll",
"piper_phonemize.dll",
"sherpa-onnx-c-api.dll",
"sherpa-onnx-core.dll",
"sherpa-onnx-fstfar.dll",
"sherpa-onnx-fst.dll",
"sherpa-onnx-kaldifst-core.dll",
"ucd.dll",
]
version = get_version()

View File

@@ -44,7 +44,7 @@ windows_x86_wheel=$src_dir/$windows_x86_wheel_filename
windows_arm64_wheel_filename=sherpa-onnx-${SHERPA_ONNX_VERSION}-win-arm64.tar.bz2
windows_arm64_wheel=$src_dir/$windows_arm64_wheel_filename
if [ ! -f $src_dir/linux/libsherpa-onnx-core.so ]; then
if [ ! -f $src_dir/linux/libsherpa-onnx-c-api.so ]; then
echo "---linux x86_64---"
cd linux
mkdir -p wheel
@@ -57,15 +57,12 @@ if [ ! -f $src_dir/linux/libsherpa-onnx-core.so ]; then
unzip $linux_wheel_filename
cp -v sherpa_onnx/lib/*.so* ../
cd ..
rm -fv libpiper_phonemize.so libpiper_phonemize.so.1.2.0
rm -fv libonnxruntime.so
rm -fv libcargs.so
rm -rf wheel
ls -lh
cd ..
fi
if [ ! -f $src_dir/macos-x64/libsherpa-onnx-core.dylib ]; then
if [ ! -f $src_dir/macos-x64/libsherpa-onnx-c-api.dylib ]; then
echo "--- macOS x86_64---"
cd macos-x64
mkdir -p wheel
@@ -80,15 +77,12 @@ if [ ! -f $src_dir/macos-x64/libsherpa-onnx-core.dylib ]; then
cd ..
rm -fv libcargs.dylib
rm -fv libonnxruntime.dylib
rm -fv libpiper_phonemize.1.2.0.dylib libpiper_phonemize.dylib
rm -rf wheel
ls -lh
cd ..
fi
if [ ! -f $src_dir/macos-arm64/libsherpa-onnx-core.dylib ]; then
if [ ! -f $src_dir/macos-arm64/libsherpa-onnx-c-api.dylib ]; then
echo "--- macOS arm64---"
cd macos-arm64
mkdir -p wheel
@@ -103,15 +97,12 @@ if [ ! -f $src_dir/macos-arm64/libsherpa-onnx-core.dylib ]; then
cd ..
rm -fv libcargs.dylib
rm -fv libonnxruntime.dylib
rm -fv libpiper_phonemize.1.2.0.dylib libpiper_phonemize.dylib
rm -rf wheel
ls -lh
cd ..
fi
if [ ! -f $src_dir/windows-x64/sherpa-onnx-core.dll ]; then
if [ ! -f $src_dir/windows-x64/sherpa-onnx-c-api.dll ]; then
echo "---windows x64---"
cd windows-x64
mkdir -p wheel
@@ -130,7 +121,7 @@ if [ ! -f $src_dir/windows-x64/sherpa-onnx-core.dll ]; then
cd ..
fi
if [ ! -f $src_dir/windows-x86/sherpa-onnx-core.dll ]; then
if [ ! -f $src_dir/windows-x86/sherpa-onnx-c-api.dll ]; then
echo "---windows x86---"
cd windows-x86
mkdir -p wheel
@@ -149,7 +140,7 @@ if [ ! -f $src_dir/windows-x86/sherpa-onnx-core.dll ]; then
cd ..
fi
if [ ! -f $src_dir/windows-arm64/sherpa-onnx-core.dll ]; then
if [ ! -f $src_dir/windows-arm64/sherpa-onnx-c-api.dll ]; then
echo "---windows arm64---"
cd windows-arm64
mkdir -p wheel

View File

@@ -2,5 +2,5 @@
package sherpa_onnx
// #cgo LDFLAGS: -L ${SRCDIR}/lib/x86_64-apple-darwin -lsherpa-onnx-c-api -lsherpa-onnx-core -lkaldi-native-fbank-core -lkaldi-decoder-core -lsherpa-onnx-kaldifst-core -lsherpa-onnx-fstfar -lsherpa-onnx-fst -lpiper_phonemize -lespeak-ng -lucd -lonnxruntime -lssentencepiece_core -Wl,-rpath,${SRCDIR}/lib/x86_64-apple-darwin
// #cgo LDFLAGS: -L ${SRCDIR}/lib/x86_64-apple-darwin -lsherpa-onnx-c-api -lonnxruntime -Wl,-rpath,${SRCDIR}/lib/x86_64-apple-darwin
import "C"

View File

@@ -2,5 +2,5 @@
package sherpa_onnx
// #cgo LDFLAGS: -L ${SRCDIR}/lib/aarch64-apple-darwin -lsherpa-onnx-c-api -lsherpa-onnx-core -lkaldi-native-fbank-core -lkaldi-decoder-core -lsherpa-onnx-kaldifst-core -lsherpa-onnx-fstfar -lsherpa-onnx-fst -lpiper_phonemize -lespeak-ng -lucd -lonnxruntime -lssentencepiece_core -Wl,-rpath,${SRCDIR}/lib/aarch64-apple-darwin
// #cgo LDFLAGS: -L ${SRCDIR}/lib/aarch64-apple-darwin -lsherpa-onnx-c-api -lonnxruntime -Wl,-rpath,${SRCDIR}/lib/aarch64-apple-darwin
import "C"

View File

@@ -0,0 +1,6 @@
//go:build !android && linux && amd64 && !musl
package sherpa_onnx
// #cgo LDFLAGS: -L ${SRCDIR}/lib/x86_64-unknown-linux-gnu -lsherpa-onnx-c-api -lonnxruntime -Wl,-rpath,${SRCDIR}/lib/x86_64-unknown-linux-gnu
import "C"

View File

@@ -0,0 +1,6 @@
//go:build linux && arm && !arm7
package sherpa_onnx
// #cgo LDFLAGS: -L ${SRCDIR}/lib/arm-unknown-linux-gnueabihf -lsherpa-onnx-c-api -lonnxruntime -Wl,-rpath,${SRCDIR}/lib/arm-unknown-linux-gnueabihf
import "C"

View File

@@ -0,0 +1,6 @@
//go:build linux && arm64
package sherpa_onnx
// #cgo LDFLAGS: -L ${SRCDIR}/lib/aarch64-unknown-linux-gnu -lsherpa-onnx-c-api -lsherpa-onnx-core -lkaldi-native-fbank-core -lkaldi-decoder-core -lsherpa-onnx-kaldifst-core -lsherpa-onnx-fstfar -lsherpa-onnx-fst -lpiper_phonemize -lespeak-ng -lucd -lonnxruntime -lssentencepiece_core -Wl,-rpath,${SRCDIR}/lib/aarch64-unknown-linux-gnu
import "C"

View File

@@ -0,0 +1,6 @@
//go:build windows && 386
package sherpa_onnx
// #cgo LDFLAGS: -L ${SRCDIR}/lib/i686-pc-windows-gnu -lsherpa-onnx-c-api -lonnxruntime
import "C"

View File

@@ -0,0 +1,6 @@
//go:build windows && amd64
package sherpa_onnx
// #cgo LDFLAGS: -L ${SRCDIR}/lib/x86_64-pc-windows-gnu -lsherpa-onnx-c-api -lonnxruntime
import "C"

View File

@@ -0,0 +1 @@
../../../../build/lib

View File

@@ -17,8 +17,11 @@ echo "SHERPA_ONNX_VERSION $SHERPA_ONNX_VERSION"
function linux() {
echo "Process linux"
git clone git@github.com:k2-fsa/sherpa-onnx-go-linux.git
rm -v ./sherpa-onnx-go-linux/*.go
cp -v ./sherpa_onnx.go ./sherpa-onnx-go-linux/
cp -v ./_internal/c-api.h ./sherpa-onnx-go-linux/
cp -v ./_internal/build_linux_*.go ./sherpa-onnx-go-linux/
rm -rf sherpa-onnx-go-linux/lib/x86_64-unknown-linux-gnu/lib*
dst=$(realpath sherpa-onnx-go-linux/lib/x86_64-unknown-linux-gnu)
@@ -29,6 +32,10 @@ function linux() {
cp -v sherpa_onnx/lib/*.so* $dst
pushd $dst
cp -v libonnxruntime.so.1.17.1 libonnxruntime.so
popd
cd ..
rm -rf t
@@ -41,6 +48,10 @@ function linux() {
cp -v sherpa_onnx/lib/*.so* $dst
pushd $dst
cp -v libonnxruntime.so.1.17.1 libonnxruntime.so
popd
cd ..
rm -rf t
@@ -53,6 +64,10 @@ function linux() {
cp -v sherpa_onnx/lib/*.so* $dst
pushd $dst
cp -v libonnxruntime.so.1.17.1 libonnxruntime.so
popd
cd ..
rm -rf t
@@ -71,8 +86,10 @@ function linux() {
function osx() {
echo "Process osx-x64"
git clone git@github.com:k2-fsa/sherpa-onnx-go-macos.git
rm -v ./sherpa-onnx-go-macos/*.go
cp -v ./sherpa_onnx.go ./sherpa-onnx-go-macos/
cp -v ./_internal/c-api.h ./sherpa-onnx-go-macos/
cp -v ./_internal/build_darwin_*.go ./sherpa-onnx-go-macos/
rm -rf sherpa-onnx-go-macos/lib/x86_64-apple-darwin/lib*
dst=$(realpath sherpa-onnx-go-macos/lib/x86_64-apple-darwin/)
@@ -84,6 +101,10 @@ function osx() {
cp -v sherpa_onnx/lib/*.dylib $dst/
pushd $dst
cp -v libonnxruntime.1.17.1.dylib libonnxruntime.dylib
popd
cd ..
rm -rf t
@@ -98,6 +119,10 @@ function osx() {
cp -v sherpa_onnx/lib/*.dylib $dst/
pushd $dst
cp -v libonnxruntime.1.17.1.dylib libonnxruntime.dylib
popd
cd ..
rm -rf t
echo "------------------------------"
@@ -115,8 +140,10 @@ function osx() {
function windows() {
echo "Process windows"
git clone git@github.com:k2-fsa/sherpa-onnx-go-windows.git
rm -v ./sherpa-onnx-go-windows/*.go
cp -v ./sherpa_onnx.go ./sherpa-onnx-go-windows/
cp -v ./_internal/c-api.h ./sherpa-onnx-go-windows/
cp -v ./_internal/build_windows_*.go ./sherpa-onnx-go-windows/
rm -fv sherpa-onnx-go-windows/lib/x86_64-pc-windows-gnu/*
dst=$(realpath sherpa-onnx-go-windows/lib/x86_64-pc-windows-gnu)

View File

@@ -67,15 +67,6 @@ target_link_libraries(${PROJECT_NAME} ${CMAKE_JS_LIB})
target_link_libraries(${PROJECT_NAME}
sherpa-onnx-c-api
sherpa-onnx-core
kaldi-decoder-core
sherpa-onnx-kaldifst-core
sherpa-onnx-fstfar
sherpa-onnx-fst
kaldi-native-fbank-core
piper_phonemize
espeak-ng
ucd
onnxruntime
-Wl,-rpath,$ENV{SHERPA_ONNX_INSTALL_DIR}/lib
)

View File

@@ -2,11 +2,16 @@
set -ex
if [[ ! -f ../../build/install/lib/libsherpa-onnx-core.dylib && ! -f ../../build/install/lib/libsherpa-onnx-core.so ]]; then
if [[ ! -f ../../build/install/lib/libsherpa-onnx-c-api.dylib && ! -f ../../build/install/lib/libsherpa-c-api.so ]]; then
pushd ../../
mkdir -p build
cd build
cmake -DCMAKE_INSTALL_PREFIX=./install -DBUILD_SHARED_LIBS=ON ..
cmake \
-DCMAKE_INSTALL_PREFIX=./install \
-DBUILD_SHARED_LIBS=ON \
..
make install
popd
fi