wasi-test-wrapper.sh (3149B)
1 #! /bin/sh 2 3 unset LDFLAGS 4 unset CFLAGS 5 6 if command -v wasm-opt >/dev/null; then 7 wasm-opt -O4 -o "${1}.tmp" "$1" && mv -f "${1}.tmp" "$1" 8 fi 9 10 if [ -z "$WASI_RUNTIME" ] || [ "$WASI_RUNTIME" = "wasmedge" ]; then 11 if command -v wasmedgec >/dev/null && command -v wasmedge >/dev/null; then 12 wasmedgec "$1" "${1}.so" >/dev/null && 13 wasmedge --dir=.:. "${1}.so" && 14 rm -f "${1}.so" && 15 exit 0 16 fi 17 fi 18 19 if [ -z "$WASI_RUNTIME" ] || [ "$WASI_RUNTIME" = "wasmer" ]; then 20 if command -v wasmer >/dev/null; then 21 wasmer run "$1" "--${WASMER_BACKEND:-cranelift}" --dir=. && exit 0 22 fi 23 fi 24 25 if [ -z "$WASI_RUNTIME" ] || [ "$WASI_RUNTIME" = "wasmtime" ]; then 26 if command -v wasmtime >/dev/null; then 27 wasmtime run --dir=. "$1" && exit 0 28 fi 29 fi 30 31 if [ -z "$WASI_RUNTIME" ] || [ "$WASI_RUNTIME" = "bun" ]; then 32 if echo | bun help >/dev/null 2>&1; then 33 { 34 echo "import fs from 'fs'; import { init, WASI } from '@wasmer/wasi';" 35 echo "await init();" 36 echo "const wasi = new WASI({args: process.argv, env: process.env, preopens: {'.':'/'}});" 37 echo "await (async function() {" 38 echo " const wasm = await WebAssembly.compile(fs.readFileSync('${1}'));" 39 echo " await wasi.instantiate(wasm, {});" 40 echo " wasi.start();" 41 echo " console.log(wasi.getStdoutString());" 42 echo "})().catch(e => { console.error(e); process.exit(1); });" 43 } >"${1}.mjs" 44 bun run "${1}.mjs" 2>/tmp/err && 45 rm -f "${1}.mjs" && exit 0 46 fi 47 fi 48 49 if [ -z "$WASI_RUNTIME" ] || [ "$WASI_RUNTIME" = "node" ]; then 50 if echo | node --experimental-wasi-unstable-preview1 >/dev/null 2>&1; then 51 { 52 echo "import fs from 'fs'; import { WASI } from 'wasi';" 53 echo "const wasi = new WASI({args: process.argv, env: process.env, preopens: {'.':'.'}});" 54 echo "const importObject = { wasi_snapshot_preview1: wasi.wasiImport };" 55 echo "await (async function() {" 56 echo " const wasm = await WebAssembly.compile(fs.readFileSync('${1}'));" 57 echo " const instance = await WebAssembly.instantiate(wasm, importObject);" 58 echo " wasi.start(instance);" 59 echo "})().catch(e => { console.error(e); process.exit(1); });" 60 } >"${1}.mjs" 61 node --experimental-wasi-unstable-preview1 "${1}.mjs" 2>/tmp/err && 62 rm -f "${1}.mjs" && exit 0 63 fi 64 fi 65 66 if [ -z "$WASI_RUNTIME" ] || [ "$WASI_RUNTIME" = "wasm3" ]; then 67 if command -v wasm3 >/dev/null; then 68 wasm3 "$1" && exit 0 69 fi 70 fi 71 72 if [ -z "$WASI_RUNTIME" ] || [ "$WASI_RUNTIME" = "iwasm" ]; then 73 if command -v iwasm >/dev/null; then 74 if iwasm | grep -qi wasi >/dev/null 2>&1; then 75 if wamrc --version; then 76 wamrc -o "${1}.o" "$1" >/dev/null && 77 iwasm --dir=. "${1}.o" && exit 0 78 else 79 iwasm --dir=. "$1" && exit 0 80 fi 81 fi 82 fi 83 fi 84 85 if [ -z "$WASI_RUNTIME" ] || [ "$WASI_RUNTIME" = "wazero" ]; then 86 if command -v wazero >/dev/null; then 87 wazero run -mount .:/ "$1" && exit 0 88 fi 89 fi 90 91 if [ -z "$WASI_RUNTIME" ] || [ "$WASI_RUNTIME" = "wasmer-js" ]; then 92 if command -v wasmer-js >/dev/null; then 93 wasmer-js run "$1" --dir=. && exit 0 94 fi 95 fi 96 97 echo "WebAssembly runtime failed" >&2 98 exit 1