#!/usr/bin/env bash set -e dir=build-ios mkdir -p $dir cd $dir onnxruntime_version=1.15.1 if [ ! -f ios-onnxruntime/$onnxruntime_version/onnxruntime.xcframework/ios-arm64/onnxruntime.a ]; then GIT_LFS_SKIP_SMUDGE=1 git clone https://huggingface.co/csukuangfj/ios-onnxruntime pushd ios-onnxruntime ln -s $onnxruntime_version/onnxruntime.xcframework . git lfs pull --include $onnxruntime_version/onnxruntime.xcframework/ios-arm64/onnxruntime.a git lfs pull --include $onnxruntime_version/onnxruntime.xcframework/ios-arm64_x86_64-simulator/onnxruntime.a popd fi # check filesize filesize=$(ls -l ./ios-onnxruntime/$onnxruntime_version/onnxruntime.xcframework/ios-arm64/onnxruntime.a | tr -s " " " " | cut -d " " -f 5) if (( $filesize < 1000 )); then ls -lh ./ios-onnxruntime/onnxruntime.xcframework/ios-arm64/onnxruntime.a echo "Please use: git lfs pull to download ./ios-onnxruntime/$onnxruntime_version/onnxruntime.xcframework/ios-arm64/onnxruntime.a" exit 1 fi filesize=$(ls -l ./ios-onnxruntime/$onnxruntime_version/onnxruntime.xcframework/ios-arm64_x86_64-simulator/onnxruntime.a | tr -s " " " " | cut -d " " -f 5) if (( $filesize < 1000 )); then ls -lh ./ios-onnxruntime/$onnxruntime_version/onnxruntime.xcframework/ios-arm64_x86_64-simulator/onnxruntime.a echo "Please use: git lfs pull to download ./ios-onnxruntime/$onnxruntime_version/onnxruntime.xcframework/ios-arm64_x86_64-simulator/onnxruntime.a" exit 1 fi # First, for simulator echo "Building for simulator (x86_64)" export SHERPA_ONNXRUNTIME_LIB_DIR=$PWD/ios-onnxruntime/onnxruntime.xcframework/ios-arm64_x86_64-simulator export SHERPA_ONNXRUNTIME_INCLUDE_DIR=$PWD/ios-onnxruntime/onnxruntime.xcframework/Headers echo "SHERPA_ONNXRUNTIME_LIB_DIR: $SHERPA_ONNXRUNTIME_LIB_DIR" echo "SHERPA_ONNXRUNTIME_INCLUDE_DIR $SHERPA_ONNXRUNTIME_INCLUDE_DIR" # Note: We use -DENABLE_ARC=1 here to fix the linking error: # # The symbol _NSLog is not defined # cmake \ -S .. \ -DCMAKE_TOOLCHAIN_FILE=./toolchains/ios.toolchain.cmake \ -DPLATFORM=SIMULATOR64 \ -DENABLE_BITCODE=0 \ -DENABLE_ARC=1 \ -DENABLE_VISIBILITY=0 \ -DCMAKE_BUILD_TYPE=Release \ -DBUILD_SHARED_LIBS=OFF \ -DSHERPA_ONNX_ENABLE_PYTHON=OFF \ -DSHERPA_ONNX_ENABLE_TESTS=OFF \ -DSHERPA_ONNX_ENABLE_CHECK=OFF \ -DSHERPA_ONNX_ENABLE_PORTAUDIO=OFF \ -DSHERPA_ONNX_ENABLE_JNI=OFF \ -DSHERPA_ONNX_ENABLE_C_API=ON \ -DSHERPA_ONNX_ENABLE_WEBSOCKET=OFF \ -DDEPLOYMENT_TARGET=13.0 \ -B build/simulator_x86_64 cmake --build build/simulator_x86_64 -j 4 --verbose echo "Building for simulator (arm64)" cmake \ -S .. \ -DCMAKE_TOOLCHAIN_FILE=./toolchains/ios.toolchain.cmake \ -DPLATFORM=SIMULATORARM64 \ -DENABLE_BITCODE=0 \ -DENABLE_ARC=1 \ -DENABLE_VISIBILITY=0 \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INSTALL_PREFIX=./install \ -DBUILD_SHARED_LIBS=OFF \ -DSHERPA_ONNX_ENABLE_PYTHON=OFF \ -DSHERPA_ONNX_ENABLE_TESTS=OFF \ -DSHERPA_ONNX_ENABLE_CHECK=OFF \ -DSHERPA_ONNX_ENABLE_PORTAUDIO=OFF \ -DSHERPA_ONNX_ENABLE_JNI=OFF \ -DSHERPA_ONNX_ENABLE_C_API=ON \ -DSHERPA_ONNX_ENABLE_WEBSOCKET=OFF \ -DDEPLOYMENT_TARGET=13.0 \ -B build/simulator_arm64 cmake --build build/simulator_arm64 -j 4 --verbose echo "Building for arm64" export SHERPA_ONNXRUNTIME_LIB_DIR=$PWD/ios-onnxruntime/onnxruntime.xcframework/ios-arm64 cmake \ -S .. \ -DCMAKE_TOOLCHAIN_FILE=./toolchains/ios.toolchain.cmake \ -DPLATFORM=OS64 \ -DENABLE_BITCODE=0 \ -DENABLE_ARC=1 \ -DENABLE_VISIBILITY=0 \ -DCMAKE_INSTALL_PREFIX=./install \ -DCMAKE_BUILD_TYPE=Release \ -DBUILD_SHARED_LIBS=OFF \ -DSHERPA_ONNX_ENABLE_PYTHON=OFF \ -DSHERPA_ONNX_ENABLE_TESTS=OFF \ -DSHERPA_ONNX_ENABLE_CHECK=OFF \ -DSHERPA_ONNX_ENABLE_PORTAUDIO=OFF \ -DSHERPA_ONNX_ENABLE_JNI=OFF \ -DSHERPA_ONNX_ENABLE_C_API=ON \ -DSHERPA_ONNX_ENABLE_WEBSOCKET=OFF \ -DDEPLOYMENT_TARGET=13.0 \ -B build/os64 cmake --build build/os64 -j 4 # Generate headers for sherpa-onnx.xcframework cmake --build build/os64 --target install echo "Generate xcframework" mkdir -p "build/simulator/lib" for f in libkaldi-native-fbank-core.a libsherpa-onnx-c-api.a libsherpa-onnx-core.a; do lipo -create build/simulator_arm64/lib/${f} \ build/simulator_x86_64/lib/${f} \ -output build/simulator/lib/${f} done # Merge archive first, because the following xcodebuild create xcframework # cannot accept multi archive with the same architecture. libtool -static -o build/simulator/sherpa-onnx.a \ build/simulator/lib/libkaldi-native-fbank-core.a \ build/simulator/lib/libsherpa-onnx-c-api.a \ build/simulator/lib/libsherpa-onnx-core.a libtool -static -o build/os64/sherpa-onnx.a \ build/os64/lib/libkaldi-native-fbank-core.a \ build/os64/lib/libsherpa-onnx-c-api.a \ build/os64/lib/libsherpa-onnx-core.a rm -rf sherpa-onnx.xcframework xcodebuild -create-xcframework \ -library "build/os64/sherpa-onnx.a" \ -library "build/simulator/sherpa-onnx.a" \ -output sherpa-onnx.xcframework # Copy Headers mkdir -p sherpa-onnx.xcframework/Headers cp -av install/include/* sherpa-onnx.xcframework/Headers pushd sherpa-onnx.xcframework/ios-arm64_x86_64-simulator ln -s sherpa-onnx.a libsherpa-onnx.a popd pushd sherpa-onnx.xcframework/ios-arm64 ln -s sherpa-onnx.a libsherpa-onnx.a