File size: 2,685 Bytes
fc8f83a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
#!/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 ""