Skip to content

Commit 2e201ab

Browse files
committed
Per-target rust testsuite
As in #112, we reorganize the directory structure and change to a python build script, with the goal of making space for wasip3. Before, it was: - tests/rust/: Root of cargo package - tests/rust/src: Rust source files - tests/rust/testsuite: JSON test files, fs-tests.dir; built .wasm files dumped here Now it is: - tests/rust/wasm32-wasip1: Root of cargo package for wasip1 builds - tests/rust/wasm32-wasip1/src: Rust source, but also JSON and fs-tests.dir - tests/rust/testsuite/: Removed; instead it is a built dir - tests/rust/testsuite/wasm32-wasip1: All wasm and json files copied here
1 parent 694cec5 commit 2e201ab

File tree

99 files changed

+104
-8
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

99 files changed

+104
-8
lines changed

.github/workflows/compile-tests.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ jobs:
6565
- name: Build tests
6666
working-directory: tests/rust
6767
run: |
68-
./build.sh
68+
./build.py
6969
7070
- name: Upload precompiled tests
7171
if: matrix.os == 'ubuntu-latest'

.github/workflows/daily-runtime-validation.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ jobs:
7777
-r ./adapters/${{ matrix.runtime }}.py \
7878
--json-output-location results.json \
7979
-t tests/assemblyscript/testsuite \
80-
tests/rust/testsuite \
80+
tests/rust/testsuite/wasm32-wasip1 \
8181
tests/c/testsuite
8282
8383
- name: Configure git

tests/rust/build.py

Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
#!/usr/bin/env python3
2+
3+
import argparse
4+
import json
5+
import shlex
6+
import shutil
7+
import subprocess
8+
import sys
9+
from pathlib import Path
10+
11+
parser = argparse.ArgumentParser()
12+
parser.add_argument("--dry-run", action="store_true",
13+
help="don't actually do anything; implies --verbose")
14+
parser.add_argument("--verbose", action="store_true",
15+
help="print commands to be executed")
16+
parser.add_argument("--release", action="store_true",
17+
help="build tests in release mode")
18+
19+
args = parser.parse_args()
20+
if args.dry_run:
21+
args.verbose = True
22+
23+
SYSTEMS = ['wasm32']
24+
VERSIONS = ['wasip1'] # + ['wasip2', 'wasip3']
25+
26+
def compute_target(system, version):
27+
return f"{system}-{version}"
28+
29+
def compute_build_target(system, version):
30+
if version == 'wasip3':
31+
# wasm32-wasip3 triple not yet supported.
32+
return compute_target(system, 'wasip2')
33+
return compute_target(system, version)
34+
35+
BASE_DIR = Path(__file__).parent
36+
37+
def run(argv):
38+
command_line = shlex.join([str(x) for x in argv])
39+
if args.verbose:
40+
print(command_line)
41+
if not args.dry_run:
42+
r = subprocess.run(argv)
43+
if r.returncode != 0:
44+
print(f"command exited with status {r.returncode}: {command_line}",
45+
file=sys.stderr)
46+
sys.exit(r.returncode)
47+
48+
def cp(src, dst):
49+
if args.verbose:
50+
print(f"cp {src} {dst}")
51+
if not args.dry_run:
52+
shutil.copy(src, dst)
53+
54+
def cp_R(src, dst):
55+
if args.verbose:
56+
print(f"cp -R {src} {dst}")
57+
if not args.dry_run:
58+
shutil.copytree(src, dst, dirs_exist_ok=True)
59+
60+
def write_manifest(path, manifest):
61+
if args.verbose:
62+
print(f"writing {path}")
63+
if not args.dry_run:
64+
path.write_text(json.dumps(manifest))
65+
66+
def mkdir_p(path):
67+
if args.verbose:
68+
print(f"mkdir -p {path}")
69+
if not args.dry_run:
70+
path.mkdir(parents=True, exist_ok=True)
71+
72+
for system in SYSTEMS:
73+
for version in VERSIONS:
74+
target = compute_target(system, version)
75+
build_target = compute_build_target(system, version)
76+
build_mode = "release" if args.release else "debug"
77+
78+
build_args = ["cargo", "build",
79+
f"--manifest-path={BASE_DIR / target / 'Cargo.toml'}",
80+
f"--target={build_target}"]
81+
if args.release:
82+
build_args.append("--release")
83+
run(build_args)
84+
85+
obj_dir = BASE_DIR / target / "target" / build_target / build_mode
86+
src_dir = BASE_DIR / target / "src" / "bin"
87+
dst_dir = BASE_DIR / "testsuite" / target
88+
mkdir_p(dst_dir)
89+
90+
write_manifest(dst_dir / "manifest.json",
91+
{'name': f"WASI Rust tests [{target}]"})
92+
93+
for src in src_dir.glob("*.rs"):
94+
obj = (obj_dir / src.name).with_suffix(".wasm")
95+
dst = (dst_dir / src.name).with_suffix(".wasm")
96+
cp(obj, dst)
97+
src_json = src.with_suffix(".json")
98+
if src_json.exists():
99+
cp(src_json, dst.with_suffix(".json"))
100+
with src_json.open() as f:
101+
for d in json.load(f).get('dirs', []):
102+
cp_R(src.parent / d, dst.parent / d)

tests/rust/build.sh

Lines changed: 0 additions & 6 deletions
This file was deleted.
File renamed without changes.
File renamed without changes.
File renamed without changes.

0 commit comments

Comments
 (0)