#!/usr/bin/env bash set -e SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" ROOT_DIR="$(dirname "$SCRIPT_DIR")" INSTALL_BASE="${HOME}/wasm-toolchains" mkdir -p "${INSTALL_BASE}" echo "============================================" echo "WASM Compiler Bridge - Toolchain Installer" echo "Install dir: ${INSTALL_BASE}" echo "============================================" echo "" # --- Emscripten --- echo "[1/2] Installing Emscripten..." EMSDK_DIR="${INSTALL_BASE}/emsdk" if [ -d "${EMSDK_DIR}" ]; then echo " Emscripten already exists at ${EMSDK_DIR}" echo " Updating..." cd "${EMSDK_DIR}" git pull || true else echo " Cloning emsdk..." git clone https://github.com/emscripten-core/emsdk.git "${EMSDK_DIR}" cd "${EMSDK_DIR}" fi echo " Installing latest Emscripten (this may take several minutes)..." ./emsdk install latest ./emsdk activate latest echo " Emscripten installed." echo "" # --- SwiftWasm --- echo "[2/2] Installing SwiftWasm..." SWIFTWASM_DIR="${INSTALL_BASE}/swiftwasm" # Detect OS and architecture ARCH=$(uname -m) if [ "$ARCH" = "arm64" ]; then SWIFT_ARCH="arm64" else SWIFT_ARCH="x86_64" fi OS=$(uname -s) if [ "$OS" = "Linux" ]; then SWIFT_OS="ubuntu20.04" else SWIFT_OS="osx" fi # Use a known stable SwiftWasm release SWIFTWASM_VERSION="swift-wasm-5.10-SNAPSHOT-2024-04-18-a" SWIFTWASM_TARBALL="${SWIFTWASM_VERSION}-${SWIFT_OS}-${SWIFT_ARCH}.tar.gz" SWIFTWASM_URL="https://github.com/swiftwasm/swift/releases/download/${SWIFTWASM_VERSION}/${SWIFTWASM_TARBALL}" if [ -d "${SWIFTWASM_DIR}/usr/bin" ]; then echo " SwiftWasm already exists at ${SWIFTWASM_DIR}" else mkdir -p "${SWIFTWASM_DIR}" cd "${INSTALL_BASE}" echo " Downloading ${SWIFTWASM_TARBALL}..." if command -v wget >/dev/null 2>&1; then wget -q --show-progress "${SWIFTWASM_URL}" -O "${SWIFTWASM_TARBALL}" || { echo " wget failed. Trying curl..." curl -L -o "${SWIFTWASM_TARBALL}" "${SWIFTWASM_URL}" } else curl -L -o "${SWIFTWASM_TARBALL}" "${SWIFTWASM_URL}" fi echo " Extracting..." tar xzf "${SWIFTWASM_TARBALL}" -C "${SWIFTWASM_DIR}" --strip-components=1 rm -f "${SWIFTWASM_TARBALL}" echo " SwiftWasm installed." fi echo "" echo "============================================" echo "Installation complete!" echo "============================================" echo "" echo "To activate Emscripten in your current shell:" echo " source ${EMSDK_DIR}/emsdk_env.sh" echo "" echo "The bridge server will auto-detect these paths:" echo " EMSDK_PATH=${EMSDK_DIR}" echo " SWIFTWASM_PATH=${SWIFTWASM_DIR}" echo "" echo "Start the bridge:" echo " cd ${ROOT_DIR}" echo " npm run dev" echo ""