Skip to content

Commit 80a8a56

Browse files
fix: add local/remote build modes for iOS builds
- BUILD_MODE=local uses monorepo paths (../../../runanywhere-core) - BUILD_MODE=remote uses downloaded paths (third_party/runanywhere-core) - Auto-detects mode if not specified - Fixed sherpa-onnx.xcframework path for remote mode - Added verification step to download script - Better logging for debugging
1 parent 776da1b commit 80a8a56

File tree

4 files changed

+162
-59
lines changed

4 files changed

+162
-59
lines changed

.github/workflows/commons-release.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ jobs:
114114
working-directory: ${{ env.COMMONS_DIR }}
115115
run: |
116116
chmod +x scripts/build-ios.sh
117-
./scripts/build-ios.sh
117+
BUILD_MODE=remote ./scripts/build-ios.sh
118118
119119
- name: Package Release
120120
working-directory: ${{ env.COMMONS_DIR }}

Tests/Test Files

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Subproject commit 83a2bcadb7efb27c1835a2b1324b1a0617bcf901

sdk/runanywhere-commons/scripts/build-ios.sh

Lines changed: 87 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,14 @@
66
# - RABackendLlamaCPP.xcframework (LlamaCpp backend)
77
# - RABackendONNX.xcframework (ONNX backend)
88
# - RABackendWhisperCPP.xcframework (WhisperCpp backend)
9+
#
10+
# MODES:
11+
# BUILD_MODE=local - Use local monorepo (../../../runanywhere-core)
12+
# BUILD_MODE=remote - Use downloaded core (third_party/runanywhere-core)
13+
#
14+
# Usage:
15+
# BUILD_MODE=local ./scripts/build-ios.sh # Local development
16+
# BUILD_MODE=remote ./scripts/build-ios.sh # CI/standalone builds
917

1018
set -e
1119

@@ -17,6 +25,52 @@ DIST_DIR="${PROJECT_ROOT}/dist"
1725
# Load versions from VERSIONS file (single source of truth)
1826
source "${SCRIPT_DIR}/load-versions.sh"
1927

28+
# Colors
29+
RED='\033[0;31m'
30+
GREEN='\033[0;32m'
31+
YELLOW='\033[1;33m'
32+
NC='\033[0m'
33+
34+
# =============================================================================
35+
# BUILD MODE DETECTION
36+
# =============================================================================
37+
# Auto-detect mode if not specified
38+
if [ -z "${BUILD_MODE}" ]; then
39+
if [ -d "${PROJECT_ROOT}/third_party/runanywhere-core" ]; then
40+
BUILD_MODE="remote"
41+
elif [ -d "${PROJECT_ROOT}/../../../runanywhere-core" ]; then
42+
BUILD_MODE="local"
43+
else
44+
echo -e "${RED}ERROR: Cannot detect build mode${NC}"
45+
echo "Please set BUILD_MODE=local or BUILD_MODE=remote"
46+
echo "Or run ./scripts/download-core.sh first for remote mode"
47+
exit 1
48+
fi
49+
fi
50+
51+
# Set paths based on mode
52+
if [ "${BUILD_MODE}" = "local" ]; then
53+
RUNANYWHERE_CORE_DIR="${PROJECT_ROOT}/../../../runanywhere-core"
54+
SHERPA_ONNX_XCFW="${RUNANYWHERE_CORE_DIR}/third_party/sherpa-onnx-ios/sherpa-onnx.xcframework"
55+
elif [ "${BUILD_MODE}" = "remote" ]; then
56+
RUNANYWHERE_CORE_DIR="${PROJECT_ROOT}/third_party/runanywhere-core"
57+
# In remote mode, sherpa-onnx is extracted directly (no subdirectory)
58+
SHERPA_ONNX_XCFW="${RUNANYWHERE_CORE_DIR}/third_party/sherpa-onnx.xcframework"
59+
else
60+
echo -e "${RED}ERROR: Invalid BUILD_MODE '${BUILD_MODE}'${NC}"
61+
echo "Use BUILD_MODE=local or BUILD_MODE=remote"
62+
exit 1
63+
fi
64+
65+
# Validate paths
66+
if [ ! -d "${RUNANYWHERE_CORE_DIR}" ]; then
67+
echo -e "${RED}ERROR: runanywhere-core not found at ${RUNANYWHERE_CORE_DIR}${NC}"
68+
if [ "${BUILD_MODE}" = "remote" ]; then
69+
echo "Run: ./scripts/download-core.sh"
70+
fi
71+
exit 1
72+
fi
73+
2074
# Configuration
2175
IOS_DEPLOYMENT_TARGET="${IOS_DEPLOYMENT_TARGET:-13.0}"
2276
BUILD_TYPE="${BUILD_TYPE:-Release}"
@@ -26,15 +80,13 @@ BUILD_LLAMACPP="${BUILD_LLAMACPP:-ON}"
2680
BUILD_ONNX="${BUILD_ONNX:-ON}"
2781
BUILD_WHISPERCPP="${BUILD_WHISPERCPP:-OFF}"
2882

29-
# Colors
30-
RED='\033[0;31m'
31-
GREEN='\033[0;32m'
32-
YELLOW='\033[1;33m'
33-
NC='\033[0m'
34-
3583
echo -e "${GREEN}========================================${NC}"
3684
echo -e "${GREEN}RunAnywhere Commons - iOS Build${NC}"
3785
echo -e "${GREEN}========================================${NC}"
86+
echo "Build mode: ${BUILD_MODE}"
87+
echo "Core directory: ${RUNANYWHERE_CORE_DIR}"
88+
echo "Sherpa-ONNX: ${SHERPA_ONNX_XCFW}"
89+
echo ""
3890
echo "Deployment target: iOS ${IOS_DEPLOYMENT_TARGET}"
3991
echo "Build type: ${BUILD_TYPE}"
4092
echo "LlamaCpp: ${BUILD_LLAMACPP}"
@@ -324,9 +376,6 @@ combine_onnx_libs() {
324376

325377
echo "Combining ONNX libraries for ${PLATFORM}..."
326378

327-
# Sherpa-ONNX xcframework path
328-
local SHERPA_ONNX_XCFW="${PROJECT_ROOT}/../../../runanywhere-core/third_party/sherpa-onnx-ios/sherpa-onnx.xcframework"
329-
330379
# Collect all needed libraries (excluding ONNX Runtime itself)
331380
local LIBS=""
332381

@@ -337,34 +386,39 @@ combine_onnx_libs() {
337386
[ -f "${PLATFORM_DIR}/runanywhere-core/src/backends/onnx/librunanywhere_onnx.a" ] && LIBS="$LIBS ${PLATFORM_DIR}/runanywhere-core/src/backends/onnx/librunanywhere_onnx.a"
338387

339388
# Sherpa-ONNX static library (provides STT/TTS/VAD implementations)
389+
# Uses global SHERPA_ONNX_XCFW set at script start based on BUILD_MODE
340390
local SHERPA_LIB=""
341-
if [ "${PLATFORM}" = "OS" ]; then
342-
SHERPA_LIB="${SHERPA_ONNX_XCFW}/ios-arm64/libsherpa-onnx.a"
343-
elif [ "${PLATFORM}" = "SIMULATORARM64" ]; then
344-
# Extract arm64 slice from fat simulator binary
345-
local SHERPA_SIM_LIB="${SHERPA_ONNX_XCFW}/ios-arm64_x86_64-simulator/libsherpa-onnx.a"
346-
if [ -f "${SHERPA_SIM_LIB}" ]; then
347-
SHERPA_LIB="${PLATFORM_DIR}/libsherpa-onnx-arm64.a"
348-
lipo -extract arm64 "${SHERPA_SIM_LIB}" -output "${SHERPA_LIB}" 2>/dev/null || \
349-
lipo -thin arm64 "${SHERPA_SIM_LIB}" -output "${SHERPA_LIB}" 2>/dev/null || \
350-
cp "${SHERPA_SIM_LIB}" "${SHERPA_LIB}"
351-
fi
352-
elif [ "${PLATFORM}" = "SIMULATOR" ]; then
353-
# Extract x86_64 slice from fat simulator binary
354-
local SHERPA_SIM_LIB="${SHERPA_ONNX_XCFW}/ios-arm64_x86_64-simulator/libsherpa-onnx.a"
355-
if [ -f "${SHERPA_SIM_LIB}" ]; then
356-
SHERPA_LIB="${PLATFORM_DIR}/libsherpa-onnx-x86_64.a"
357-
lipo -extract x86_64 "${SHERPA_SIM_LIB}" -output "${SHERPA_LIB}" 2>/dev/null || \
358-
lipo -thin x86_64 "${SHERPA_SIM_LIB}" -output "${SHERPA_LIB}" 2>/dev/null || \
359-
cp "${SHERPA_SIM_LIB}" "${SHERPA_LIB}"
391+
if [ -d "${SHERPA_ONNX_XCFW}" ]; then
392+
if [ "${PLATFORM}" = "OS" ]; then
393+
SHERPA_LIB="${SHERPA_ONNX_XCFW}/ios-arm64/libsherpa-onnx.a"
394+
elif [ "${PLATFORM}" = "SIMULATORARM64" ]; then
395+
# Extract arm64 slice from fat simulator binary
396+
local SHERPA_SIM_LIB="${SHERPA_ONNX_XCFW}/ios-arm64_x86_64-simulator/libsherpa-onnx.a"
397+
if [ -f "${SHERPA_SIM_LIB}" ]; then
398+
SHERPA_LIB="${PLATFORM_DIR}/libsherpa-onnx-arm64.a"
399+
lipo -extract arm64 "${SHERPA_SIM_LIB}" -output "${SHERPA_LIB}" 2>/dev/null || \
400+
lipo -thin arm64 "${SHERPA_SIM_LIB}" -output "${SHERPA_LIB}" 2>/dev/null || \
401+
cp "${SHERPA_SIM_LIB}" "${SHERPA_LIB}"
402+
fi
403+
elif [ "${PLATFORM}" = "SIMULATOR" ]; then
404+
# Extract x86_64 slice from fat simulator binary
405+
local SHERPA_SIM_LIB="${SHERPA_ONNX_XCFW}/ios-arm64_x86_64-simulator/libsherpa-onnx.a"
406+
if [ -f "${SHERPA_SIM_LIB}" ]; then
407+
SHERPA_LIB="${PLATFORM_DIR}/libsherpa-onnx-x86_64.a"
408+
lipo -extract x86_64 "${SHERPA_SIM_LIB}" -output "${SHERPA_LIB}" 2>/dev/null || \
409+
lipo -thin x86_64 "${SHERPA_SIM_LIB}" -output "${SHERPA_LIB}" 2>/dev/null || \
410+
cp "${SHERPA_SIM_LIB}" "${SHERPA_LIB}"
411+
fi
360412
fi
361-
fi
362413

363-
if [ -f "${SHERPA_LIB}" ]; then
364-
LIBS="$LIBS ${SHERPA_LIB}"
365-
echo " Including Sherpa-ONNX: ${SHERPA_LIB}"
414+
if [ -f "${SHERPA_LIB}" ]; then
415+
LIBS="$LIBS ${SHERPA_LIB}"
416+
echo " Including Sherpa-ONNX: ${SHERPA_LIB}"
417+
else
418+
echo -e "${YELLOW}Warning: Sherpa-ONNX library not found at ${SHERPA_LIB}${NC}"
419+
fi
366420
else
367-
echo -e "${YELLOW}Warning: Sherpa-ONNX library not found for ${PLATFORM}${NC}"
421+
echo -e "${YELLOW}Warning: Sherpa-ONNX xcframework not found at ${SHERPA_ONNX_XCFW}${NC}"
368422
fi
369423

370424
# NOTE: ONNX Runtime xcframework is NOT bundled here.

sdk/runanywhere-commons/scripts/download-core.sh

Lines changed: 73 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,18 @@
33
# download-core.sh - Download runanywhere-core source from runanywhere-binaries
44
#
55
# This script downloads the runanywhere-core source tarball and iOS/macOS dependencies
6-
# from the public runanywhere-binaries repository.
6+
# from the public runanywhere-binaries repository for REMOTE build mode.
77
#
88
# Usage:
99
# ./scripts/download-core.sh [version]
10-
# ./scripts/download-core.sh # Uses LATEST_CORE_VERSION
11-
# ./scripts/download-core.sh 1.0.0 # Specific version
10+
# ./scripts/download-core.sh # Uses LATEST_CORE_VERSION
11+
# ./scripts/download-core.sh 0.1.0 # Specific version
1212
#
1313
# Environment variables:
14-
# RUNANYWHERE_CORE_VERSION - Override version to download
15-
# SKIP_DEPS - Set to "true" to skip downloading dependencies (onnxruntime, sherpa-onnx)
14+
# RUNANYWHERE_CORE_VERSION - Override core version to download
15+
# SKIP_DEPS - Set to "true" to skip downloading dependencies
16+
#
17+
# After running this script, use BUILD_MODE=remote ./scripts/build-ios.sh
1618
#
1719

1820
set -e
@@ -21,6 +23,7 @@ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
2123
PROJECT_ROOT="$(cd "${SCRIPT_DIR}/.." && pwd)"
2224
THIRD_PARTY_DIR="${PROJECT_ROOT}/third_party"
2325
CORE_DIR="${THIRD_PARTY_DIR}/runanywhere-core"
26+
DEPS_DIR="${CORE_DIR}/third_party"
2427

2528
# GitHub repository for published binaries
2629
BINARIES_REPO="RunanywhereAI/runanywhere-binaries"
@@ -36,6 +39,8 @@ NC='\033[0m'
3639
echo -e "${GREEN}========================================${NC}"
3740
echo -e "${GREEN}RunAnywhere Core Download Script${NC}"
3841
echo -e "${GREEN}========================================${NC}"
42+
echo "This script prepares REMOTE build mode."
43+
echo ""
3944

4045
# Determine version to download
4146
get_version() {
@@ -45,19 +50,19 @@ get_version() {
4550
echo "$1"
4651
else
4752
# Fetch latest version from runanywhere-binaries
48-
echo -e "${YELLOW}Fetching latest core version...${NC}"
53+
echo -e "${YELLOW}Fetching latest core version...${NC}" >&2
4954
LATEST=$(curl -sL "${RAW_URL}/LATEST_CORE_VERSION" 2>/dev/null || echo "")
5055
if [[ -z "${LATEST}" ]]; then
51-
echo -e "${RED}Failed to fetch LATEST_CORE_VERSION${NC}"
52-
echo -e "${YELLOW}Please specify a version: ./scripts/download-core.sh 1.0.0${NC}"
56+
echo -e "${RED}Failed to fetch LATEST_CORE_VERSION${NC}" >&2
57+
echo -e "${YELLOW}Please specify a version: ./scripts/download-core.sh 0.1.0${NC}" >&2
5358
exit 1
5459
fi
5560
echo "${LATEST}"
5661
fi
5762
}
5863

5964
VERSION=$(get_version "$1")
60-
echo "Version: ${VERSION}"
65+
echo "Core Version: ${VERSION}"
6166
echo ""
6267

6368
# Create directories
@@ -106,35 +111,40 @@ download_ios_deps() {
106111
return
107112
fi
108113

109-
local IOS_DEPS_DIR="${CORE_DIR}/third_party"
110-
mkdir -p "${IOS_DEPS_DIR}"
114+
mkdir -p "${DEPS_DIR}"
111115

112116
# ONNX Runtime for iOS
113117
echo -e "${GREEN}Downloading ONNX Runtime for iOS...${NC}"
114118
local ONNX_ZIP="onnxruntime-ios-v${VERSION}.zip"
115119
local ONNX_URL="${BINARIES_URL}/releases/download/core-v${VERSION}/${ONNX_ZIP}"
120+
echo " URL: ${ONNX_URL}"
116121

117-
if curl -L --fail -o "${IOS_DEPS_DIR}/${ONNX_ZIP}" "${ONNX_URL}" 2>/dev/null; then
118-
cd "${IOS_DEPS_DIR}"
122+
if curl -L --fail -o "${DEPS_DIR}/${ONNX_ZIP}" "${ONNX_URL}" 2>/dev/null; then
123+
cd "${DEPS_DIR}"
119124
unzip -q -o "${ONNX_ZIP}"
120125
rm "${ONNX_ZIP}"
121126
echo -e "${GREEN}✓ ONNX Runtime for iOS downloaded${NC}"
127+
# List what was extracted
128+
ls -la *.xcframework 2>/dev/null || true
122129
else
123-
echo -e "${YELLOW}⚠ ONNX Runtime for iOS not found in release (may need separate download)${NC}"
130+
echo -e "${YELLOW}⚠ ONNX Runtime for iOS not found in release${NC}"
124131
fi
125132

126133
# Sherpa-ONNX for iOS
127134
echo -e "${GREEN}Downloading Sherpa-ONNX for iOS...${NC}"
128135
local SHERPA_ZIP="sherpa-onnx-ios-v${VERSION}.zip"
129136
local SHERPA_URL="${BINARIES_URL}/releases/download/core-v${VERSION}/${SHERPA_ZIP}"
137+
echo " URL: ${SHERPA_URL}"
130138

131-
if curl -L --fail -o "${IOS_DEPS_DIR}/${SHERPA_ZIP}" "${SHERPA_URL}" 2>/dev/null; then
132-
cd "${IOS_DEPS_DIR}"
139+
if curl -L --fail -o "${DEPS_DIR}/${SHERPA_ZIP}" "${SHERPA_URL}" 2>/dev/null; then
140+
cd "${DEPS_DIR}"
133141
unzip -q -o "${SHERPA_ZIP}"
134142
rm "${SHERPA_ZIP}"
135143
echo -e "${GREEN}✓ Sherpa-ONNX for iOS downloaded${NC}"
144+
# List what was extracted
145+
ls -la *.xcframework 2>/dev/null || true
136146
else
137-
echo -e "${YELLOW}⚠ Sherpa-ONNX for iOS not found in release (may need separate download)${NC}"
147+
echo -e "${YELLOW}⚠ Sherpa-ONNX for iOS not found in release${NC}"
138148
fi
139149

140150
cd "${PROJECT_ROOT}"
@@ -149,21 +159,21 @@ download_macos_deps() {
149159
return
150160
fi
151161

152-
local MACOS_DEPS_DIR="${CORE_DIR}/third_party"
153-
mkdir -p "${MACOS_DEPS_DIR}"
162+
mkdir -p "${DEPS_DIR}"
154163

155164
# ONNX Runtime for macOS
156165
echo -e "${GREEN}Downloading ONNX Runtime for macOS...${NC}"
157166
local ONNX_ZIP="onnxruntime-macos-v${VERSION}.zip"
158167
local ONNX_URL="${BINARIES_URL}/releases/download/core-v${VERSION}/${ONNX_ZIP}"
168+
echo " URL: ${ONNX_URL}"
159169

160-
if curl -L --fail -o "${MACOS_DEPS_DIR}/${ONNX_ZIP}" "${ONNX_URL}" 2>/dev/null; then
161-
cd "${MACOS_DEPS_DIR}"
170+
if curl -L --fail -o "${DEPS_DIR}/${ONNX_ZIP}" "${ONNX_URL}" 2>/dev/null; then
171+
cd "${DEPS_DIR}"
162172
unzip -q -o "${ONNX_ZIP}"
163173
rm "${ONNX_ZIP}"
164174
echo -e "${GREEN}✓ ONNX Runtime for macOS downloaded${NC}"
165175
else
166-
echo -e "${YELLOW}⚠ ONNX Runtime for macOS not found in release (may need separate download)${NC}"
176+
echo -e "${YELLOW}⚠ ONNX Runtime for macOS not found in release${NC}"
167177
fi
168178

169179
cd "${PROJECT_ROOT}"
@@ -177,6 +187,35 @@ save_version_info() {
177187
echo -e "${GREEN}Version ${VERSION} saved to DOWNLOADED_VERSION${NC}"
178188
}
179189

190+
# =============================================================================
191+
# Verify downloads
192+
# =============================================================================
193+
verify_downloads() {
194+
echo ""
195+
echo -e "${GREEN}Verifying downloads...${NC}"
196+
197+
# Check core source
198+
if [ -f "${CORE_DIR}/CMakeLists.txt" ]; then
199+
echo -e "${GREEN}✓ Core source${NC}"
200+
else
201+
echo -e "${RED}✗ Core source NOT found${NC}"
202+
fi
203+
204+
# Check sherpa-onnx
205+
if [ -d "${DEPS_DIR}/sherpa-onnx.xcframework" ]; then
206+
echo -e "${GREEN}✓ sherpa-onnx.xcframework${NC}"
207+
else
208+
echo -e "${YELLOW}⚠ sherpa-onnx.xcframework not found${NC}"
209+
fi
210+
211+
# Check onnxruntime
212+
if [ -d "${DEPS_DIR}/onnxruntime.xcframework" ]; then
213+
echo -e "${GREEN}✓ onnxruntime.xcframework${NC}"
214+
else
215+
echo -e "${YELLOW}⚠ onnxruntime.xcframework not found${NC}"
216+
fi
217+
}
218+
180219
# =============================================================================
181220
# Main
182221
# =============================================================================
@@ -185,14 +224,23 @@ download_core_source
185224
download_ios_deps
186225
download_macos_deps
187226
save_version_info
227+
verify_downloads
188228

189229
echo ""
190230
echo -e "${GREEN}========================================${NC}"
191231
echo -e "${GREEN}Download Complete!${NC}"
192232
echo -e "${GREEN}========================================${NC}"
193-
echo "Core source: ${CORE_DIR}"
233+
echo ""
234+
echo "Downloaded to: ${CORE_DIR}"
194235
echo "Version: ${VERSION}"
195236
echo ""
196-
echo "To use in CMake, set:"
197-
echo " -DRUNANYWHERE_CORE_DIR=${CORE_DIR}"
237+
echo "Directory structure:"
238+
echo " third_party/"
239+
echo " runanywhere-core/ # Core source"
240+
echo " third_party/"
241+
echo " sherpa-onnx.xcframework # STT/TTS/VAD"
242+
echo " onnxruntime.xcframework # ONNX Runtime"
243+
echo ""
244+
echo "To build iOS XCFrameworks:"
245+
echo " BUILD_MODE=remote ./scripts/build-ios.sh"
198246
echo ""

0 commit comments

Comments
 (0)