#!/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())