Set up additional `deepspeech_ios` target with static build steps Xcode config: lock swift version at 5.0, bundle framework rather than dynamic lib, never strip swift symbols, add framework search paths, and bring in lstdc++ Runtime schema config: disable the main thread checker as this causes trouble with the static build Update model versions to 0.9.1 Remove libdeepspeech.so from example app bundling steps Swift lib embed settings that are somehow essential Attempt to adjust taskcluster build steps Add a basic podspec Add framework to gitignore Fix podspec version code Attempt to fix taskcluster unzip step Switch deepspeech targets for iOS build Try doing this unzip in one step Remove packaging steps for unneeded stuff because libdeepspeech.so is no longer a thing here. I suppose we could add a step to package the iOS static lib instead. Fix podspec version Set up podspec relative assuming a clone from the repo root Remove space in iOS package step Fix buildfile nit Link stdc++ in explicitly with iOS build only Revert "Remove space in iOS package step" This reverts commit 3e1922ea370c110f9854ae7e97101f2ea00f55c6.
357 lines
9.9 KiB
Bash
Executable File
357 lines
9.9 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
set -xe
|
|
|
|
do_deepspeech_python_build()
|
|
{
|
|
cd ${DS_DSDIR}
|
|
|
|
package_option=$1
|
|
|
|
unset PYTHON_BIN_PATH
|
|
unset PYTHONPATH
|
|
|
|
export PATH="${PYENV_ROOT}/bin:$PATH"
|
|
|
|
mkdir -p wheels
|
|
|
|
SETUP_FLAGS=""
|
|
if [ "${package_option}" = "--cuda" ]; then
|
|
SETUP_FLAGS="--project_name deepspeech-gpu"
|
|
elif [ "${package_option}" = "--tflite" ]; then
|
|
SETUP_FLAGS="--project_name deepspeech-tflite"
|
|
fi
|
|
|
|
for pyver_conf in ${SUPPORTED_PYTHON_VERSIONS}; do
|
|
pyver=$(echo "${pyver_conf}" | cut -d':' -f1)
|
|
pyconf=$(echo "${pyver_conf}" | cut -d':' -f2)
|
|
|
|
pyalias="${pyver}_${pyconf}"
|
|
|
|
maybe_numpy_min_version ${pyver}
|
|
|
|
virtualenv_activate "${pyalias}" "deepspeech"
|
|
|
|
python --version
|
|
pip --version
|
|
pip3 --version
|
|
which pip
|
|
which pip3
|
|
|
|
EXTRA_CFLAGS="${EXTRA_LOCAL_CFLAGS}" \
|
|
EXTRA_LDFLAGS="${EXTRA_LOCAL_LDFLAGS}" \
|
|
EXTRA_LIBS="${EXTRA_LOCAL_LIBS}" \
|
|
make -C native_client/python/ \
|
|
TARGET=${SYSTEM_TARGET} \
|
|
RASPBIAN=${SYSTEM_RASPBIAN} \
|
|
TFDIR=${DS_TFDIR} \
|
|
SETUP_FLAGS="${SETUP_FLAGS}" \
|
|
bindings-clean bindings
|
|
|
|
cp native_client/python/dist/*.whl wheels
|
|
|
|
make -C native_client/python/ bindings-clean
|
|
|
|
virtualenv_deactivate "${pyalias}" "deepspeech"
|
|
done;
|
|
}
|
|
|
|
do_deepspeech_decoder_build()
|
|
{
|
|
cd ${DS_DSDIR}
|
|
|
|
unset PYTHON_BIN_PATH
|
|
unset PYTHONPATH
|
|
|
|
export PATH="${PYENV_ROOT}/bin:$PATH"
|
|
|
|
mkdir -p wheels
|
|
|
|
for pyver_conf in ${SUPPORTED_PYTHON_VERSIONS}; do
|
|
pyver=$(echo "${pyver_conf}" | cut -d':' -f1)
|
|
pyconf=$(echo "${pyver_conf}" | cut -d':' -f2)
|
|
pyalias="${pyver}_${pyconf}"
|
|
|
|
maybe_numpy_min_version ${pyver}
|
|
|
|
virtualenv_activate "${pyalias}" "deepspeech"
|
|
|
|
python --version
|
|
which pip
|
|
which pip3
|
|
|
|
EXTRA_CFLAGS="${EXTRA_LOCAL_CFLAGS}" \
|
|
EXTRA_LDFLAGS="${EXTRA_LOCAL_LDFLAGS}" \
|
|
EXTRA_LIBS="${EXTRA_LOCAL_LIBS}" \
|
|
make -C native_client/ctcdecode/ \
|
|
TARGET=${SYSTEM_TARGET} \
|
|
RASPBIAN=${SYSTEM_RASPBIAN} \
|
|
TFDIR=${DS_TFDIR} \
|
|
NUM_PROCESSES=${DS_CPU_COUNT} \
|
|
bindings
|
|
|
|
cp native_client/ctcdecode/dist/*.whl wheels
|
|
|
|
make -C native_client/ctcdecode clean-keep-third-party
|
|
|
|
virtualenv_deactivate "${pyalias}" "deepspeech"
|
|
done;
|
|
}
|
|
|
|
do_deepspeech_nodejs_build()
|
|
{
|
|
rename_to_gpu=$1
|
|
|
|
npm update
|
|
|
|
# Python 2.7 is required for node-pre-gyp, it is only required to force it on
|
|
# Windows
|
|
if [ "${OS}" = "${TC_MSYS_VERSION}" ]; then
|
|
PYTHON27="/c/Python27"
|
|
fi
|
|
|
|
export PATH="${PYTHON27}:$PATH"
|
|
|
|
devDir=$DS_ROOT_TASK/node-gyp-cache/
|
|
nodejsDevDir=${devDir}/nodejs/
|
|
electronjsDevDir=${devDir}/electronjs/
|
|
|
|
for node in ${SUPPORTED_NODEJS_BUILD_VERSIONS}; do
|
|
EXTRA_CFLAGS="${EXTRA_LOCAL_CFLAGS}" EXTRA_LDFLAGS="${EXTRA_LOCAL_LDFLAGS}" EXTRA_LIBS="${EXTRA_LOCAL_LIBS}" make -C native_client/javascript \
|
|
TARGET=${SYSTEM_TARGET} \
|
|
RASPBIAN=${SYSTEM_RASPBIAN} \
|
|
TFDIR=${DS_TFDIR} \
|
|
NODE_ABI_TARGET=--target=$node \
|
|
NODE_DEVDIR=--devdir=${nodejsDevDir} \
|
|
clean node-wrapper
|
|
done;
|
|
|
|
for electron in ${SUPPORTED_ELECTRONJS_VERSIONS}; do
|
|
EXTRA_CFLAGS="${EXTRA_LOCAL_CFLAGS}" EXTRA_LDFLAGS="${EXTRA_LOCAL_LDFLAGS}" EXTRA_LIBS="${EXTRA_LOCAL_LIBS}" make -C native_client/javascript \
|
|
TARGET=${SYSTEM_TARGET} \
|
|
RASPBIAN=${SYSTEM_RASPBIAN} \
|
|
TFDIR=${DS_TFDIR} \
|
|
NODE_ABI_TARGET=--target=$electron \
|
|
NODE_DIST_URL=--disturl=https://electronjs.org/headers \
|
|
NODE_DEVDIR=--devdir=${electronjsDevDir} \
|
|
NODE_RUNTIME=--runtime=electron \
|
|
clean node-wrapper
|
|
done;
|
|
|
|
if [ "${rename_to_gpu}" = "--cuda" ]; then
|
|
make -C native_client/javascript clean npm-pack PROJECT_NAME=deepspeech-gpu
|
|
else
|
|
make -C native_client/javascript clean npm-pack
|
|
fi
|
|
|
|
tar -czf native_client/javascript/wrapper.tar.gz \
|
|
-C native_client/javascript/ lib/
|
|
}
|
|
|
|
do_deepspeech_npm_package()
|
|
{
|
|
package_option=$1
|
|
|
|
cd ${DS_DSDIR}
|
|
|
|
npm update
|
|
|
|
# Python 2.7 is required for node-pre-gyp, it is only required to force it on
|
|
# Windows
|
|
if [ "${OS}" = "${TC_MSYS_VERSION}" ]; then
|
|
PYTHON27="/c/Python27"
|
|
fi
|
|
|
|
export PATH="${NPM_BIN}${PYTHON27}:$PATH"
|
|
|
|
all_tasks="$(curl -s https://community-tc.services.mozilla.com/api/queue/v1/task/${TASK_ID} | python -c 'import json; import sys; print(" ".join(json.loads(sys.stdin.read())["dependencies"]));')"
|
|
|
|
for dep in ${all_tasks}; do
|
|
curl -L https://community-tc.services.mozilla.com/api/queue/v1/task/${dep}/artifacts/public/wrapper.tar.gz | tar -C native_client/javascript -xzvf -
|
|
done;
|
|
|
|
if [ "${package_option}" = "--cuda" ]; then
|
|
make -C native_client/javascript clean npm-pack PROJECT_NAME=deepspeech-gpu
|
|
elif [ "${package_option}" = "--tflite" ]; then
|
|
make -C native_client/javascript clean npm-pack PROJECT_NAME=deepspeech-tflite
|
|
else
|
|
make -C native_client/javascript clean npm-pack
|
|
fi
|
|
}
|
|
|
|
do_bazel_build()
|
|
{
|
|
local _opt_or_dbg=${1:-"opt"}
|
|
|
|
cd ${DS_TFDIR}
|
|
eval "export ${BAZEL_ENV_FLAGS}"
|
|
|
|
if [ "${_opt_or_dbg}" = "opt" ]; then
|
|
if is_patched_bazel; then
|
|
find ${DS_ROOT_TASK}/DeepSpeech/ds/tensorflow/bazel-out/ -iname "*.ckd" | tar -cf ${DS_ROOT_TASK}/DeepSpeech/bazel-ckd-tf.tar -T -
|
|
fi;
|
|
fi;
|
|
|
|
bazel ${BAZEL_OUTPUT_USER_ROOT} build \
|
|
-s --explain bazel_monolithic.log --verbose_explanations --experimental_strict_action_env --workspace_status_command="bash native_client/bazel_workspace_status_cmd.sh" --config=monolithic -c ${_opt_or_dbg} ${BAZEL_BUILD_FLAGS} ${BAZEL_TARGETS}
|
|
|
|
if [ "${_opt_or_dbg}" = "opt" ]; then
|
|
if is_patched_bazel; then
|
|
find ${DS_ROOT_TASK}/DeepSpeech/ds/tensorflow/bazel-out/ -iname "*.ckd" | tar -cf ${DS_ROOT_TASK}/DeepSpeech/bazel-ckd-ds.tar -T -
|
|
fi;
|
|
verify_bazel_rebuild "${DS_ROOT_TASK}/DeepSpeech/ds/tensorflow/bazel_monolithic.log"
|
|
fi;
|
|
}
|
|
|
|
shutdown_bazel()
|
|
{
|
|
cd ${DS_TFDIR}
|
|
bazel ${BAZEL_OUTPUT_USER_ROOT} shutdown
|
|
}
|
|
|
|
do_deepspeech_binary_build()
|
|
{
|
|
cd ${DS_DSDIR}
|
|
make -C native_client/ \
|
|
TARGET=${SYSTEM_TARGET} \
|
|
TFDIR=${DS_TFDIR} \
|
|
RASPBIAN=${SYSTEM_RASPBIAN} \
|
|
EXTRA_CFLAGS="${EXTRA_LOCAL_CFLAGS}" \
|
|
EXTRA_LDFLAGS="${EXTRA_LOCAL_LDFLAGS}" \
|
|
EXTRA_LIBS="${EXTRA_LOCAL_LIBS}" \
|
|
deepspeech${PLATFORM_EXE_SUFFIX}
|
|
}
|
|
|
|
do_deepspeech_ndk_build()
|
|
{
|
|
arch_abi=$1
|
|
|
|
cd ${DS_DSDIR}/native_client/
|
|
|
|
${ANDROID_NDK_HOME}/ndk-build \
|
|
APP_PLATFORM=android-21 \
|
|
APP_BUILD_SCRIPT=$(pwd)/Android.mk \
|
|
NDK_PROJECT_PATH=$(pwd) \
|
|
APP_STL=c++_shared \
|
|
TFDIR=${DS_TFDIR} \
|
|
TARGET_ARCH_ABI=${arch_abi}
|
|
}
|
|
|
|
do_deepspeech_netframework_build()
|
|
{
|
|
cd ${DS_DSDIR}/native_client/dotnet
|
|
|
|
# Setup dependencies
|
|
nuget restore DeepSpeech.sln
|
|
|
|
MSBUILD="$(cygpath 'C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\MSBuild\Current\Bin\MSBuild.exe')"
|
|
|
|
# We need MSYS2_ARG_CONV_EXCL='/' otherwise the '/' of CLI parameters gets mangled and disappears
|
|
# We build the .NET Client for .NET Framework v4.5,v4.6,v4.7
|
|
|
|
MSYS2_ARG_CONV_EXCL='/' "${MSBUILD}" \
|
|
DeepSpeechClient/DeepSpeechClient.csproj \
|
|
/p:Configuration=Release \
|
|
/p:Platform=x64 \
|
|
/p:TargetFramework="net452" \
|
|
/p:OutputPath=bin/nuget/x64/v4.5
|
|
|
|
MSYS2_ARG_CONV_EXCL='/' "${MSBUILD}" \
|
|
DeepSpeechClient/DeepSpeechClient.csproj \
|
|
/p:Configuration=Release \
|
|
/p:Platform=x64 \
|
|
/p:TargetFramework="net46" \
|
|
/p:OutputPath=bin/nuget/x64/v4.6
|
|
|
|
MSYS2_ARG_CONV_EXCL='/' "${MSBUILD}" \
|
|
DeepSpeechClient/DeepSpeechClient.csproj \
|
|
/p:Configuration=Release \
|
|
/p:Platform=x64 \
|
|
/p:TargetFramework="net47" \
|
|
/p:OutputPath=bin/nuget/x64/v4.7
|
|
|
|
MSYS2_ARG_CONV_EXCL='/' "${MSBUILD}" \
|
|
DeepSpeechClient/DeepSpeechClient.csproj \
|
|
/p:Configuration=Release \
|
|
/p:Platform=x64 \
|
|
/p:TargetFramework="uap10.0" \
|
|
/p:OutputPath=bin/nuget/x64/uap10.0
|
|
|
|
MSYS2_ARG_CONV_EXCL='/' "${MSBUILD}" \
|
|
DeepSpeechConsole/DeepSpeechConsole.csproj \
|
|
/p:Configuration=Release \
|
|
/p:Platform=x64
|
|
}
|
|
|
|
do_deepspeech_netframework_wpf_build()
|
|
{
|
|
cd ${DS_DSDIR}/native_client/dotnet
|
|
|
|
# Setup dependencies
|
|
nuget install DeepSpeechWPF/packages.config -OutputDirectory DeepSpeechWPF/packages/
|
|
|
|
MSBUILD="$(cygpath 'C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\MSBuild\Current\Bin\MSBuild.exe')"
|
|
|
|
# We need MSYS2_ARG_CONV_EXCL='/' otherwise the '/' of CLI parameters gets mangled and disappears
|
|
# Build WPF example
|
|
MSYS2_ARG_CONV_EXCL='/' "${MSBUILD}" \
|
|
DeepSpeechWPF/DeepSpeech.WPF.csproj \
|
|
/p:Configuration=Release \
|
|
/p:Platform=x64 \
|
|
/p:OutputPath=bin/x64
|
|
|
|
}
|
|
|
|
do_nuget_build()
|
|
{
|
|
PROJECT_NAME=$1
|
|
if [ -z "${PROJECT_NAME}" ]; then
|
|
exit "Please call with a valid PROJECT_NAME"
|
|
exit 1
|
|
fi;
|
|
|
|
cd ${DS_DSDIR}/native_client/dotnet
|
|
|
|
cp ${DS_TFDIR}/bazel-bin/native_client/libdeepspeech.so nupkg/build
|
|
|
|
# We copy the generated clients for .NET into the Nuget framework dirs
|
|
|
|
mkdir -p nupkg/lib/net45/
|
|
cp DeepSpeechClient/bin/nuget/x64/v4.5/DeepSpeechClient.dll nupkg/lib/net45/
|
|
|
|
mkdir -p nupkg/lib/net46/
|
|
cp DeepSpeechClient/bin/nuget/x64/v4.6/DeepSpeechClient.dll nupkg/lib/net46/
|
|
|
|
mkdir -p nupkg/lib/net47/
|
|
cp DeepSpeechClient/bin/nuget/x64/v4.7/DeepSpeechClient.dll nupkg/lib/net47/
|
|
|
|
mkdir -p nupkg/lib/uap10.0/
|
|
cp DeepSpeechClient/bin/nuget/x64/uap10.0/DeepSpeechClient.dll nupkg/lib/uap10.0/
|
|
|
|
PROJECT_VERSION=$(strip "${DS_VERSION}")
|
|
sed \
|
|
-e "s/\$NUPKG_ID/${PROJECT_NAME}/" \
|
|
-e "s/\$NUPKG_VERSION/${PROJECT_VERSION}/" \
|
|
nupkg/deepspeech.nuspec.in > nupkg/deepspeech.nuspec && cat nupkg/deepspeech.nuspec
|
|
|
|
nuget pack nupkg/deepspeech.nuspec
|
|
}
|
|
|
|
do_deepspeech_ios_framework_build()
|
|
{
|
|
arch=$1
|
|
unzip ${DS_TFDIR}/bazel-bin/native_client/deepspeech_ios.zip -d ${DS_DSDIR}/native_client/swift
|
|
cd ${DS_DSDIR}/native_client/swift
|
|
case $arch in
|
|
"--x86_64")
|
|
iosSDK="iphonesimulator"
|
|
xcodeArch="x86_64"
|
|
;;
|
|
"--arm64")
|
|
iosSDK="iphoneos"
|
|
xcodeArch="arm64"
|
|
;;
|
|
esac
|
|
xcodebuild -workspace deepspeech_ios.xcworkspace -scheme deepspeech_ios_test -configuration Release -arch "${xcodeArch}" -sdk "${iosSDK}" -derivedDataPath DerivedData CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO CODE_SIGNING_ALLOWED=NO
|
|
}
|