@@ -6,161 +6,104 @@ echo "🌐 Building and Testing Matft for WebAssembly"
66echo " 🌐 =========================================="
77echo " "
88
9- # SDK checksums for different Swift versions
10- # The SDK version must match the Swift compiler version
11- get_sdk_checksum () {
12- local VERSION=" $1 "
13- case " $VERSION " in
14- " 6.0.3-RELEASE" ) echo " 31d3585b06dd92de390bacc18527801480163188cd7473f492956b5e213a8618" ;;
15- " 6.1-RELEASE" ) echo " 7550b4c77a55f4b637c376f5d192f297fe185607003a6212ad608276928db992" ;;
16- * ) echo " " ;;
17- esac
18- }
9+ # Pinned SDK version for reproducible builds (same on CI and local)
10+ PINNED_SDK_VERSION=" 6.0.3-RELEASE"
11+ PINNED_SDK_NAME=" 6.0.3-RELEASE-wasm32-unknown-wasi"
12+ PINNED_SDK_CHECKSUM=" 31d3585b06dd92de390bacc18527801480163188cd7473f492956b5e213a8618"
13+ PINNED_SDK_URL=" https://github.com/swiftwasm/swift/releases/download/swift-wasm-${PINNED_SDK_VERSION} /swift-wasm-${PINNED_SDK_VERSION} -wasm32-unknown-wasi.artifactbundle.zip"
1914
20- # Swift command to use (may be overridden if toolchain detected)
21- SWIFT_CMD=" swift"
22- USING_DEV_TOOLCHAIN=false
23- DEV_TOOLCHAIN_DATE=" "
24- SWIFT_VERSION=" "
15+ SWIFT_CMD=" "
16+ SWIFT_SDK_NAME=" "
2517
26- # Detect development snapshot toolchain with WASM support
27- detect_toolchain () {
28- echo " 🔍 Detecting Swift toolchain ..."
18+ # Setup Swift command
19+ setup_swift () {
20+ echo " 📦 Setting up Swift ..."
2921
30- # Check for development snapshot toolchains in the standard location
22+ # Check for local SwiftWasm toolchain first (macOS development with newer SDK)
3123 TOOLCHAIN_DIR=" $HOME /Library/Developer/Toolchains"
32-
3324 if [ -d " $TOOLCHAIN_DIR " ]; then
34- # Find the most recent development snapshot toolchain
35- TOOLCHAIN =$( ls -1 " $TOOLCHAIN_DIR " 2> /dev/null | grep -E " swift-DEVELOPMENT-SNAPSHOT.*\.xctoolchain" | sort -r | head -1)
25+ # Look for development snapshot toolchain (needed for newer macOS SDKs)
26+ local WASM_TOOLCHAIN =$( ls -1 " $TOOLCHAIN_DIR " 2> /dev/null | grep -E " swift-DEVELOPMENT-SNAPSHOT.*\.xctoolchain" | sort -r | head -1)
3627
37- if [ -n " $TOOLCHAIN " ]; then
38- TOOLCHAIN_SWIFT=" $TOOLCHAIN_DIR /$TOOLCHAIN /usr/bin/swift"
28+ if [ -n " $WASM_TOOLCHAIN " ]; then
29+ local TOOLCHAIN_SWIFT=" $TOOLCHAIN_DIR /$WASM_TOOLCHAIN /usr/bin/swift"
3930 if [ -x " $TOOLCHAIN_SWIFT " ]; then
4031 SWIFT_CMD=" $TOOLCHAIN_SWIFT "
41- USING_DEV_TOOLCHAIN=true
42- # Extract date from toolchain name (e.g., 2025-11-03 )
43- DEV_TOOLCHAIN_DATE= $( echo " $TOOLCHAIN " | grep -oE " [0-9]{4}-[0-9]{2}-[0-9]{2} " )
44- echo " ✅ Found development toolchain: $TOOLCHAIN "
32+ echo " ✅ Using local development toolchain: $WASM_TOOLCHAIN "
33+ local VERSION= $( $SWIFT_CMD --version 2> /dev/null | head -1 )
34+ echo " Version: $VERSION "
35+ echo " "
4536 return 0
4637 fi
4738 fi
4839 fi
4940
50- echo " ℹ️ Using system Swift"
51- return 0
52- }
53-
54- # Find matching SDK for development toolchain
55- find_dev_sdk () {
56- local INSTALLED_SDKS=$( $SWIFT_CMD sdk list 2> /dev/null || echo " " )
57-
58- # First, try to find SDK matching the exact toolchain date
59- if [ -n " $DEV_TOOLCHAIN_DATE " ]; then
60- local SDK_MATCH=$( echo " $INSTALLED_SDKS " | grep " DEVELOPMENT-SNAPSHOT-${DEV_TOOLCHAIN_DATE} " | grep -E " wasm32-unknown-wasi(p1-threads)?$" | grep -v " embedded" | head -1)
61- if [ -n " $SDK_MATCH " ]; then
62- echo " $SDK_MATCH "
63- return 0
64- fi
65- fi
66-
67- # Fall back to any development snapshot SDK (prefer threads variant)
68- local SDK_MATCH=$( echo " $INSTALLED_SDKS " | grep " DEVELOPMENT-SNAPSHOT" | grep " wasm32-unknown-wasip1-threads$" | grep -v " embedded" | sort -r | head -1)
69- if [ -n " $SDK_MATCH " ]; then
70- echo " $SDK_MATCH "
71- return 0
72- fi
73-
74- # Try non-threads variant
75- SDK_MATCH=$( echo " $INSTALLED_SDKS " | grep " DEVELOPMENT-SNAPSHOT" | grep -E " wasm32-unknown-wasi$" | grep -v " embedded" | sort -r | head -1)
76- if [ -n " $SDK_MATCH " ]; then
77- echo " $SDK_MATCH "
41+ # Use system Swift (CI environment)
42+ if command -v swift & > /dev/null; then
43+ SWIFT_CMD=" swift"
44+ local VERSION=$( $SWIFT_CMD --version 2> /dev/null | head -1)
45+ echo " ✅ Using system Swift"
46+ echo " Version: $VERSION "
47+ echo " "
7848 return 0
7949 fi
8050
81- return 1
51+ echo " ❌ No Swift installation found"
52+ exit 1
8253}
8354
84- # Detect Swift version and determine matching SDK
85- detect_swift_version () {
86- # Get Swift version (e.g., "6.0.3" or "6.1")
87- local VERSION_OUTPUT=$( $SWIFT_CMD --version 2> /dev/null)
88- SWIFT_VERSION=$( echo " $VERSION_OUTPUT " | grep -oE " Swift version [0-9]+\.[0-9]+(\.[0-9]+)?" | head -1 | sed ' s/Swift version //' )
89-
90- if [ -z " $SWIFT_VERSION " ]; then
91- echo " ⚠️ Could not detect Swift version, defaulting to 6.0.3"
92- SWIFT_VERSION=" 6.0.3"
93- fi
94-
95- echo " Swift version: $SWIFT_VERSION "
96- }
97-
98- # Check and configure the appropriate SDK
99- ensure_swift_wasm_sdk () {
100- echo " 📦 Checking for Swift WASM SDK..."
55+ # Find or install the WASM SDK
56+ setup_wasm_sdk () {
57+ echo " 📦 Setting up WASM SDK..."
10158
10259 local INSTALLED_SDKS=$( $SWIFT_CMD sdk list 2> /dev/null || echo " " )
10360
104- if [ " $USING_DEV_TOOLCHAIN " = true ]; then
105- # For development toolchains, we need a matching development snapshot SDK
106- echo " Using development toolchain - looking for compatible development SDK..."
61+ # For development toolchain, try to find matching development SDK first
62+ if echo " $SWIFT_CMD " | grep -q " DEVELOPMENT-SNAPSHOT" ; then
63+ local TOOLCHAIN_DATE=$( echo " $SWIFT_CMD " | grep -oE " [0-9]{4}-[0-9]{2}-[0-9]{2}" )
64+ if [ -n " $TOOLCHAIN_DATE " ]; then
65+ SWIFT_SDK_NAME=$( echo " $INSTALLED_SDKS " | grep " DEVELOPMENT-SNAPSHOT-${TOOLCHAIN_DATE} " | grep -E " wasm32-unknown-wasi" | grep -v " embedded" | head -1)
66+ if [ -n " $SWIFT_SDK_NAME " ]; then
67+ echo " ✅ Found matching development SDK: $SWIFT_SDK_NAME "
68+ echo " "
69+ return 0
70+ fi
71+ fi
10772
108- SWIFT_SDK_NAME=$( find_dev_sdk)
73+ # Fallback to any development snapshot SDK
74+ SWIFT_SDK_NAME=$( echo " $INSTALLED_SDKS " | grep " DEVELOPMENT-SNAPSHOT" | grep " wasm32-unknown-wasip1-threads$" | grep -v " embedded" | sort -r | head -1)
10975 if [ -n " $SWIFT_SDK_NAME " ]; then
110- echo " ✅ Found compatible SDK: $SWIFT_SDK_NAME "
76+ echo " ✅ Found development SDK: $SWIFT_SDK_NAME "
11177 echo " "
11278 return 0
11379 fi
80+ fi
11481
115- echo " ❌ No compatible development SDK found for toolchain date: $DEV_TOOLCHAIN_DATE "
116- echo " Development toolchains require matching development snapshot SDKs."
117- echo " Available SDKs:"
118- echo " $INSTALLED_SDKS " | grep -E " DEVELOPMENT-SNAPSHOT.*wasm" | sed ' s/^/ /'
119- echo " "
120- echo " Install a matching SDK from: https://github.com/swiftwasm/swift/releases"
121- exit 1
122- else
123- # For stable Swift, detect version and use matching SDK
124- detect_swift_version
125-
126- # Determine SDK version based on Swift version
127- local SDK_VERSION=" ${SWIFT_VERSION} -RELEASE"
128- local SDK_CHECKSUM=$( get_sdk_checksum " $SDK_VERSION " )
129-
130- if [ -z " $SDK_CHECKSUM " ]; then
131- echo " ❌ No SDK checksum found for Swift version $SWIFT_VERSION "
132- echo " Supported versions: 6.0.3, 6.1"
133- exit 1
134- fi
135-
136- local SDK_URL=" https://github.com/swiftwasm/swift/releases/download/swift-wasm-${SDK_VERSION} /swift-wasm-${SDK_VERSION} -wasm32-unknown-wasi.artifactbundle.zip"
137-
138- echo " Required SDK: swift-wasm-${SDK_VERSION} "
82+ # Use pinned stable SDK (CI and local fallback)
83+ echo " Looking for pinned SDK: $PINNED_SDK_NAME "
13984
140- # Check for the required stable SDK version
141- if echo " $INSTALLED_SDKS " | grep -qE " (^|swift-wasm-)${SDK_VERSION} [_-]wasm32-unknown-wasi" ; then
142- SWIFT_SDK_NAME=$( echo " $INSTALLED_SDKS " | grep -E " (^|swift-wasm-)${SDK_VERSION} [_-]wasm32-unknown-wasi" | head -1)
143- echo " ✅ Found required SDK: $SWIFT_SDK_NAME "
144- echo " "
145- return 0
146- fi
147-
148- # SDK not found, install it
149- echo " ⬇️ Installing Swift WASM SDK ${SDK_VERSION} ..."
150- $SWIFT_CMD sdk install " $SDK_URL " --checksum " $SDK_CHECKSUM "
85+ if echo " $INSTALLED_SDKS " | grep -qE " (^|swift-wasm-)${PINNED_SDK_VERSION} [_-]wasm32-unknown-wasi" ; then
86+ SWIFT_SDK_NAME=$( echo " $INSTALLED_SDKS " | grep -E " (^|swift-wasm-)${PINNED_SDK_VERSION} [_-]wasm32-unknown-wasi" | head -1)
87+ echo " ✅ Found pinned SDK: $SWIFT_SDK_NAME "
88+ echo " "
89+ return 0
90+ fi
15191
152- # Verify installation
153- INSTALLED_SDKS= $( $SWIFT_CMD sdk list 2> /dev/null || echo " " )
154- SWIFT_SDK_NAME= $( echo " $INSTALLED_SDKS " | grep -E " (^|swift-wasm-) ${SDK_VERSION} [_-]wasm32-unknown-wasi " | head -1 )
92+ # Install the pinned SDK
93+ echo " ⬇️ Installing WASM SDK ${PINNED_SDK_VERSION} ... "
94+ $SWIFT_CMD sdk install " $PINNED_SDK_URL " --checksum " $PINNED_SDK_CHECKSUM "
15595
156- if [ -z " $SWIFT_SDK_NAME " ]; then
157- echo " ❌ Failed to verify SDK installation"
158- exit 1
159- fi
96+ # Verify installation
97+ INSTALLED_SDKS=$( $SWIFT_CMD sdk list 2> /dev/null || echo " " )
98+ SWIFT_SDK_NAME=$( echo " $INSTALLED_SDKS " | grep -E " (^|swift-wasm-)${PINNED_SDK_VERSION} [_-]wasm32-unknown-wasi" | head -1)
16099
161- echo " ✅ Swift WASM SDK ${SDK_VERSION} installed successfully"
162- echo " "
100+ if [ -z " $SWIFT_SDK_NAME " ]; then
101+ echo " ❌ Failed to install SDK"
102+ exit 1
163103 fi
104+
105+ echo " ✅ SDK installed: $SWIFT_SDK_NAME "
106+ echo " "
164107}
165108
166109# Check if wasmtime is installed
@@ -222,8 +165,8 @@ run_tests() {
222165}
223166
224167# Main execution
225- detect_toolchain
226- ensure_swift_wasm_sdk
168+ setup_swift
169+ setup_wasm_sdk
227170install_wasmtime
228171build_project
229172run_tests
0 commit comments