summaryrefslogtreecommitdiff
path: root/test/find_exe.py
diff options
context:
space:
mode:
authorBen Smith <binjimin@gmail.com>2018-01-08 17:35:01 -0800
committerGitHub <noreply@github.com>2018-01-08 17:35:01 -0800
commit6fc756c4f1a5b7c0209c5dad0c0ec51b3b504df7 (patch)
tree80cc03a9efaf5fa05e81f4ad1e0f6c9833f17788 /test/find_exe.py
parent1f735e8f5125f84abba2a91d4f44bc8ee30544a8 (diff)
downloadwabt-6fc756c4f1a5b7c0209c5dad0c0ec51b3b504df7.tar.gz
wabt-6fc756c4f1a5b7c0209c5dad0c0ec51b3b504df7.tar.bz2
wabt-6fc756c4f1a5b7c0209c5dad0c0ec51b3b504df7.zip
Add wasm2c tool (#710)
Add `wasm2c`, a new tool that reads a `.wasm` file and generates a C source file and its accompanying header file. The C output currently only supports gcc/clang compilers, since it uses builtins for some functionality. The resulting C code is not standalone; there are runtime functions that must be provided, as well as pointers to all imports. The C runtime symbols that must be provided are as follows: * `void wasm_rt_trap(wasm_rt_trap_t code)`: Called when the WebAssembly code traps. This function must not return. * `u32 wasm_rt_register_func_type(u32 param_count, u32 result_count, ...)`: Register a function type with the given signature. This function must check whether this signature has already been registered and return the original index. * `void wasm_rt_allocate_memory(wasm_rt_memory_t*, u32 initial, u32 max)`: Allocate the memory buffer for the given memory object, given the number of pages. The memory must be zeroed before returning. * `u32 wasm_rt_grow_memory(wasm_rt_memory_t*, u32 delta)`: Grow memory by the given number of pages. If allocation fails, or the new pages size is larger than the maximum, return -1. Otherwise return the previous number of pages. The newly allocated memory must be zeroed. * `void wasm_rt_allocate_table(wasm_rt_table_t*, u32 initial, u32 max)`: Allocate the buffer for the given table object. The buffer must be zeroed before returning. * `u32 wasm_rt_call_stack_depth`: A symbol that tracks the current call stack depth. If this value exceeds `WASM_RT_MAX_CALL_STACK_DEPTH` then a trap occurs. This value defaults to 500, but can redefined. An example implementation can be found in `spec-wasm2c-prefix.c`. All functionality from the WebAssembly MVP is supported, and the generated code passes all of the core spec tests. There is a new test tool called `run-spec-wasm2c.py` which runs the following: * `wast2json` to convert the spec test to json and wasm files * `wasm2c` to convert the wasm to C source and headers * a C compiler (default `cc`) to compile and link all C source files, including a C test runner (`spec-wasm2c-prefix.c`) * Finally, the resulting executable to produce output
Diffstat (limited to 'test/find_exe.py')
-rw-r--r--test/find_exe.py6
1 files changed, 5 insertions, 1 deletions
diff --git a/test/find_exe.py b/test/find_exe.py
index 5bc919a6..8bc19d41 100644
--- a/test/find_exe.py
+++ b/test/find_exe.py
@@ -26,7 +26,7 @@ REPO_ROOT_DIR = os.path.dirname(SCRIPT_DIR)
EXECUTABLES = [
'wat2wasm', 'wast2json', 'wasm2wat', 'wasm-objdump', 'wasm-interp',
'wasm-opcodecnt', 'wat-desugar', 'wasm-link', 'spectest-interp',
- 'wasm-validate',
+ 'wasm-validate', 'wasm2c',
]
@@ -103,3 +103,7 @@ def GetWatDesugarExecutable(override=None):
def GetWasmValidateExecutable(override=None):
return FindExecutable('wasm-validate', override)
+
+
+def GetWasm2CExecutable(override=None):
+ return FindExecutable('wasm2c', override)