UNPKG

itk-wasm

Version:

High-performance spatial analysis in a web browser, Node.js, and reproducible execution across programming languages and hardware architectures.

91 lines (82 loc) 2.25 kB
import fs from 'fs-extra' import { spawnSync } from 'child_process' import processCommonOptions from './process-common-options.js' import program from './program.js' import die from './die.js' function run(wasmBinary, options) { const { buildDir, dockcrossScript } = processCommonOptions(program, true) const hyphenIndex = program.rawArgs.findIndex((arg) => arg === '--') let wasmBinaryArgs = [] if (hyphenIndex !== -1) { wasmBinaryArgs = program.rawArgs.slice(hyphenIndex + 1) } let wasmBinaryRelativePath = `${buildDir}/${wasmBinary}` if (!fs.existsSync(wasmBinaryRelativePath)) { wasmBinaryRelativePath = wasmBinary } let wasmRuntime = 'wasmtime' if (options.runtime) { wasmRuntime = options.runtime } let wasmRuntimeArgs = [] const quotes = process.platform === 'win32' ? "'" : '' switch (wasmRuntime) { case 'wasmtime': wasmRuntimeArgs = [ '--args', `${quotes}-e WASMTIME_BACKTRACE_DETAILS=1${quotes}`, 'wasmtime-pwd.sh', '-W', 'threads', '-S', 'threads,cli' ] break case 'wasmer': wasmRuntimeArgs = ['sudo', 'wasmer-pwd.sh'] break case 'wasm3': wasmRuntimeArgs = ['wasm3'] break case 'wavm': wasmRuntimeArgs = ['wavm', 'run'] break default: throw Error('unexpected wasm runtime') } if (process.platform === 'win32') { var dockerRun = spawnSync( '"C:\\Program Files\\Git\\bin\\sh.exe"', [ '--login', '-i', '-c', `"${buildDir}/itk-wasm-build-env ${wasmRuntimeArgs.join(' ')} ${wasmBinaryRelativePath} ${wasmBinaryArgs.join(' ')}"` ], { env: process.env, stdio: 'inherit', shell: true } ) if (dockerRun.status !== 0) { die(dockerRun.error) } process.exit(dockerRun.status) } else { const dockerRun = spawnSync( 'bash', [dockcrossScript] .concat(wasmRuntimeArgs) .concat(wasmBinaryRelativePath) .concat(wasmBinaryArgs), { env: process.env, stdio: 'inherit' } ) if (dockerRun.status !== 0) { die(dockerRun.error) } process.exit(dockerRun.status) } } export default run