rvsttd: model fetch mode, build from source, ~/.rvsttd convention
This commit is contained in:
@@ -0,0 +1,95 @@
|
||||
#!/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"
|
||||
|
||||
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
|
||||
|
||||
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"
|
||||
Reference in New Issue
Block a user