34 lines
1.2 KiB
Python
34 lines
1.2 KiB
Python
#!/usr/bin/env python3
|
|
"""Run one MPI test without baking a particular MPI launcher into the meson build tree."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import argparse
|
|
import os
|
|
import sys
|
|
import subprocess
|
|
|
|
|
|
def main() -> int:
|
|
parser = argparse.ArgumentParser()
|
|
parser.add_argument("--launcher", required=True)
|
|
parser.add_argument("--processes", type=int, default=2)
|
|
parser.add_argument("executable")
|
|
parser.add_argument("arguments", nargs="*")
|
|
args = parser.parse_args()
|
|
command = [args.launcher, "-n", str(args.processes), args.executable, *args.arguments]
|
|
environment = dict(os.environ)
|
|
environment.setdefault("OMPI_ALLOW_RUN_AS_ROOT", "1")
|
|
environment.setdefault("OMPI_ALLOW_RUN_AS_ROOT_CONFIRM", "1")
|
|
loopback = "lo0" if sys.platform == "darwin" else "lo"
|
|
environment.setdefault("FI_PROVIDER", "sockets")
|
|
environment.setdefault("FI_SOCKETS_IFACE", loopback)
|
|
environment.setdefault("HYDRA_IFACE", loopback)
|
|
if sys.platform == "darwin":
|
|
environment.setdefault("MPICH_INTERFACE_HOSTNAME", "127.0.0.1")
|
|
return subprocess.run(command, env=environment, check=False).returncode
|
|
|
|
|
|
if __name__ == "__main__":
|
|
raise SystemExit(main())
|