1
0
mirror of https://github.com/vlang/v.git synced 2023-08-10 21:13:21 +03:00
v/vlib/wasm/tests/common.v

39 lines
1.4 KiB
V

module main
import os
const pid = os.getpid()
const wasm_validate_exe = find_wasm_validate() or {
println('>>> Skipping test, since wasm-validate could not be found, error: ${err}')
exit(0)
}
fn find_wasm_validate() !string {
// Prefer to find our own version first, if it was installed already
// through install_wabt.vsh, since it is more likely to be known, recent, and stable:
thirdpart_wasm_validate_folder := os.join_path(@VROOT, 'thirdparty', 'wabt', 'bin')
extension := $if windows { '.exe' } $else { '' }
wasm_validate_executable := os.join_path(thirdpart_wasm_validate_folder, 'wasm-validate${extension}')
if os.exists(wasm_validate_executable) {
return wasm_validate_executable
}
if path := os.find_abs_path_of_executable('wasm-validate') {
return path
}
return error('could not find wasm-validate executable in thirdparty/ as well, try first `v run cmd/tools/install_wabt.vsh`')
}
pub fn validate(code []u8) ! {
println('validating using: ${wasm_validate_exe}')
outfile := os.join_path(os.temp_dir(), 'code_${pid}.wasm')
os.write_file(outfile, code.bytestr())!
validation_cmd := '${os.quoted_path(wasm_validate_exe)} ${os.quoted_path(outfile)}'
res := os.execute(validation_cmd)
if res.exit_code != 0 {
eprintln('failed exit code: ${res.exit_code} | command:\n${validation_cmd}')
return error('wasm-validate exited with a non zero exit code: ${res.exit_code}')
}
os.rm(outfile)!
}