quickjs-tart

quickjs-based runtime for wallet-core logic
Log | Files | Refs | README | LICENSE

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