41 lines
1.4 KiB
Python
41 lines
1.4 KiB
Python
#!/usr/bin/env python3
|
|
from __future__ import annotations
|
|
|
|
import pathlib
|
|
import subprocess
|
|
import tempfile
|
|
|
|
ROOT = pathlib.Path(__file__).resolve().parents[1]
|
|
|
|
|
|
def run(command: list[str]) -> None:
|
|
result = subprocess.run(command, cwd=ROOT, text=True, capture_output=True)
|
|
if result.returncode != 0:
|
|
raise SystemExit(result.stdout + result.stderr)
|
|
print(result.stdout.strip())
|
|
|
|
|
|
def main() -> int:
|
|
with tempfile.TemporaryDirectory(prefix="versevdi-protocol-conformance-") as directory:
|
|
temp = pathlib.Path(directory)
|
|
rust_bin = temp / "rust-conformance"
|
|
swift_bin = temp / "swift-conformance"
|
|
rust_source = temp / "main.rs"
|
|
rust_source.write_text(
|
|
(ROOT / "gen/rust/protocol.rs").read_text(encoding="utf-8")
|
|
+ "\n"
|
|
+ (ROOT / "tools/native_conformance.rs").read_text(encoding="utf-8"),
|
|
encoding="utf-8",
|
|
)
|
|
run(["rustc", str(rust_source), "-O", "-o", str(rust_bin)])
|
|
run([str(rust_bin)])
|
|
main_source = temp / "main.swift"
|
|
main_source.write_text((ROOT / "tools/native_conformance.swift").read_text(encoding="utf-8"), encoding="utf-8")
|
|
run(["swiftc", "-parse-as-library", "gen/swift/Protocol.swift", str(main_source), "-o", str(swift_bin)])
|
|
run([str(swift_bin)])
|
|
return 0
|
|
|
|
|
|
if __name__ == "__main__":
|
|
raise SystemExit(main())
|