| # Copyright 2026 WebAssembly Community Group participants |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| |
| import pathlib |
| |
| from . import shared, support |
| from .shared import print_heading |
| |
| spec_tests = [ |
| ] |
| |
| |
| def test_wasm2c_spec_output(): |
| for t in shared.options.spec_tests: |
| test_path = pathlib.Path(t) |
| if test_path.name not in spec_tests: |
| continue |
| |
| print('..', test_path.name) |
| |
| is_fail_test = '.fail' in test_path.name |
| |
| test_subdir = f'wasm2c_spec_{test_path.stem}' |
| test_subdir_path = pathlib.Path(test_subdir) |
| test_subdir_path.mkdir(exist_ok=True) |
| |
| wasm2c_cmd = [shared.WASM2C[0], t, '-o', f'{test_subdir}/{test_path.stem}.c', '--allow-asserts'] |
| support.run_command(wasm2c_cmd, expected_status=(1 if is_fail_test else 0)) |
| |
| c_sources = sorted(test_subdir_path.glob('*.c')) |
| |
| wasm_rt_dir = pathlib.Path(shared.options.binaryen_root) / 'src' / 'tools' / 'wasm2c' / 'wasm-rt' |
| c_sources.append(wasm_rt_dir / 'wasm-rt-impl.c') |
| c_sources.append(wasm_rt_dir / 'wasm-rt-mem-impl.c') |
| c_sources.append(wasm_rt_dir / 'wasm-rt-exceptions-impl.c') |
| |
| compile_cmd = [shared.NATIVECC, '-O2', '-std=c11', '-D_GNU_SOURCE', '-D_DEFAULT_SOURCE', '-I.', f"-I{wasm_rt_dir}"] + [str(s) for s in c_sources] + ['-o', f'{test_subdir}/spec_test_runner'] |
| |
| compile_cmd += ['-fno-optimize-sibling-calls', '-frounding-math'] |
| if 'gcc' in shared.NATIVECC.lower(): |
| compile_cmd.append('-fsignaling-nans') |
| |
| compile_cmd.append('-lm') |
| compile_cmd.append('-lpthread') |
| |
| support.run_command(compile_cmd) |
| |
| # Run spec test runner binary and assert success |
| support.run_command([f'{test_subdir}/spec_test_runner']) |
| |
| |
| def test_wasm2c_spec(): |
| print_heading('checking wasm2c spec testcases...') |
| if shared.skip_if_on_windows('wasm2c-spec'): |
| return |
| test_wasm2c_spec_output() |