Files
Robovoice/rvsttd/setup.sh
T

103 lines
3.7 KiB
Bash
Raw Normal View History

#!/usr/bin/env bash
set -euo pipefail
RVSTTD_DIR="${HOME}/.rvsttd"
LIB_DIR="${RVSTTD_DIR}/lib"
INCLUDE_DIR="${RVSTTD_DIR}/include"
BUILD_DIR="${RVSTTD_DIR}/build"
ARCH="linux-x86_64"
# Fetch latest release tag from GitHub API
VERSION=$(curl -s https://api.github.com/repos/moonshine-ai/moonshine/releases/latest | grep '"tag_name"' | sed -E 's/.*"([^"]+)".*/\1/')
if [ -z "${VERSION}" ]; then
echo "ERROR: could not fetch latest release tag from GitHub API"
exit 1
fi
PREBUILT_URL="https://github.com/moonshine-ai/moonshine/releases/download/${VERSION}/moonshine-voice-${ARCH}.tar.gz"
SOURCE_URL="https://github.com/moonshine-ai/moonshine/archive/refs/tags/${VERSION}.tar.gz"
echo "=== rvsttd setup ==="
echo "Latest Moonshine release: ${VERSION}"
echo "Target: ${RVSTTD_DIR}"
echo ""
mkdir -p "${LIB_DIR}" "${INCLUDE_DIR}" "${BUILD_DIR}"
# Step 1: Download prebuilt package (for libonnxruntime.so.1 + header)
PREBUILT_TGZ="${BUILD_DIR}/moonshine-voice-${ARCH}.tar.gz"
PREBUILT_EXTRACTED="${BUILD_DIR}/moonshine-voice-${ARCH}"
if [ ! -f "${LIB_DIR}/libonnxruntime.so.1" ]; then
echo ">>> Downloading prebuilt package (for libonnxruntime.so.1)..."
curl -L -o "${PREBUILT_TGZ}" "${PREBUILT_URL}"
mkdir -p "${PREBUILT_EXTRACTED}"
tar xzf "${PREBUILT_TGZ}" -C "${PREBUILT_EXTRACTED}" --strip-components=1
# Copy ONNX Runtime (prebuilt is fine — it has no glibc issue)
cp "${PREBUILT_EXTRACTED}/lib/libonnxruntime.so.1" "${LIB_DIR}/"
echo " Installed libonnxruntime.so.1"
# Copy the header (it's the same in source and prebuilt)
cp "${PREBUILT_EXTRACTED}/include/moonshine-c-api.h" "${INCLUDE_DIR}/"
echo " Installed moonshine-c-api.h"
else
echo ">>> libonnxruntime.so.1 already present, skipping prebuilt download"
fi
# Step 2: Download source
SOURCE_TGZ="${BUILD_DIR}/moonshine-source.tar.gz"
SOURCE_DIR="${BUILD_DIR}/moonshine-source"
if [ ! -d "${SOURCE_DIR}" ]; then
echo ">>> Downloading Moonshine source ${VERSION}..."
curl -L -o "${SOURCE_TGZ}" "${SOURCE_URL}"
mkdir -p "${SOURCE_DIR}"
tar xzf "${SOURCE_TGZ}" -C "${SOURCE_DIR}" --strip-components=1
fi
# Step 3: Build libmoonshine.so from source
CMAKE_BUILD="${BUILD_DIR}/cmake-build"
if [ ! -f "${LIB_DIR}/libmoonshine.so" ]; then
echo ">>> Building libmoonshine.so from source..."
# Point CMake at the prebuilt ONNX Runtime
ORT_LIB_DIR="${LIB_DIR}"
ORT_INCLUDE_DIR="${SOURCE_DIR}/core/third-party/onnxruntime/include"
# Patch CMake minimum version for older distros (Debian 11 ships 3.18)
find "${SOURCE_DIR}" -name CMakeLists.txt -exec sed -i 's/cmake_minimum_required(VERSION 3\.22\.1)/cmake_minimum_required(VERSION 3.18.4)/' {} +
# Remove -Werror (fails on third-party headers with older compilers)
sed -i 's/-Werror//' "${SOURCE_DIR}/core/CMakeLists.txt"
mkdir -p "${CMAKE_BUILD}"
cd "${CMAKE_BUILD}"
cmake "${SOURCE_DIR}/core" \
-DCMAKE_BUILD_TYPE=Release \
-DONNXRUNTIME_LIB_PATH="${ORT_LIB_DIR}/libonnxruntime.so.1" \
-DMOONSHINE_TTS_BUILD_ONNX=OFF \
-DCMAKE_CXX_FLAGS="-I${SOURCE_DIR}/core/moonshine-tts/src"
make -j"$(nproc)" moonshine
cp "${CMAKE_BUILD}/libmoonshine.so" "${LIB_DIR}/"
cp "${SOURCE_DIR}/core/moonshine-c-api.h" "${INCLUDE_DIR}/"
echo " Installed libmoonshine.so (built from source)"
else
echo ">>> libmoonshine.so already present, skipping build"
fi
echo ""
echo "=== Setup complete ==="
echo "Library: ${LIB_DIR}/libmoonshine.so"
echo "Library: ${LIB_DIR}/libonnxruntime.so.1"
echo "Header: ${INCLUDE_DIR}/moonshine-c-api.h"
echo ""
echo "Next: cd rvsttd && cargo build --release"
echo "Then: ./target/release/rvsttd fetch # downloads the model"
echo "Then: ./target/release/rvsttd # starts the server"