import os
import subprocess
import sys
what_to_bench = sys.argv[1]
print("what_to_bench: " + what_to_bench)
for simd, wasm in [(False, False), (True, False), (False, True), (True, True)]:
total_time = 0
new_env = os.environ.copy()
new_env['CARGO_TARGET_WASM32_WASI_RUNNER'] = 'wasm-run'
if wasm:
new_env['RUSTFLAGS'] = '-C target-feature=+bulk-memory,+mutable-globals,+nontrapping-fptoint,+sign-ext,+reference-types,+simd128'
else:
new_env['RUSTFLAGS'] = '-C target-cpu=native'
process_args = ['cargo', '+nightly']
if wasm:
process_args.append('wasi')
process_args += ['bench', '--bench', 'benchmark']
if simd:
process_args += ['--features', 'simd']
process_args += ['--', '--output-format=bencher', what_to_bench]
p = subprocess.Popen(process_args,
text=True,
stdout=subprocess.PIPE,
env=new_env)
for line in p.stdout:
line = line.strip()
if not line: continue
parts = [x for x in line.split(" ") if x]
day = int(parts[1][5:7])
time = int(parts[4]) / 1_000_000
total_time += time
native_or = "wasm" if wasm else "native"
simd_or = "simd" if simd else "non-simd"
print(f"{native_or},{simd_or}: {total_time:>5.2f} ms")