| # Copyright 2022 The IREE Authors | |
| # | |
| # Licensed under the Apache License v2.0 with LLVM Exceptions. | |
| # See https://llvm.org/LICENSE.txt for license information. | |
| # SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | |
| """Creates a venv and installs the runtime package, doing some smoke tests. | |
| This is not a perfect approximation of how the runtime package is built | |
| for real since it is run from the build dir and does not do a recursive | |
| invocation of CMake. However, it can detect gross errors in the installation | |
| process, including missing modules, scripts, etc. | |
| """ | |
| import os | |
| import subprocess | |
| import sys | |
| import tempfile | |
| from typing import List | |
| SETUP_PY_DIR = sys.argv[1] | |
| if not os.path.exists(os.path.join(SETUP_PY_DIR, "setup.py")): | |
| print("ERROR: Expected directory containing setup.py as argument") | |
| print(f"Using setup.py directory: {SETUP_PY_DIR}") | |
| # Figure out where to stage output. | |
| TEMP_DIR = os.getenv("TEST_TMPDIR") | |
| if not TEMP_DIR: | |
| TEMP_DIR = tempfile.gettempdir() | |
| # Create the venv. | |
| VENV_DIR = os.path.join(TEMP_DIR, "iree_runtime_venv") | |
| print(f"Using venv directory: {VENV_DIR}") | |
| subprocess.check_call([sys.executable, "-m", "venv", VENV_DIR]) | |
| venv_python = None | |
| for venv_bin in [ | |
| os.path.join(VENV_DIR, "bin"), # Posix. | |
| os.path.join(VENV_DIR, "Scripts"), # Windows. | |
| ]: | |
| if os.path.exists(os.path.join(venv_bin, "activate")): | |
| venv_python = os.path.join(venv_bin, "python") | |
| if not venv_python: | |
| print("ERROR: Could not find venv python") | |
| venv_bin = os.path.dirname(venv_python) | |
| print(f"Running with python: {venv_python}") | |
| # Install the package. | |
| subprocess.check_call( | |
| [venv_python, "-m", "pip", "install", "--force-reinstall", SETUP_PY_DIR + "/"] | |
| ) | |
| # Run some sanity checks. | |
| if "PYTHONPATH" in os.environ: | |
| del os.environ["PYTHONPATH"] | |
| print("***** Sanity checking that module loads...") | |
| subprocess.check_call( | |
| [venv_python, "-c", "import iree.runtime; print('Runtime loaded')"], cwd=venv_bin | |
| ) | |
| # Check tools. | |
| def check_tool(tool_name: str, args: List[str]): | |
| print(f"**** Checking tool {tool_name} with args {args}") | |
| subprocess.check_call([os.path.join(venv_bin, tool_name)] + args, cwd=venv_bin) | |
| check_tool("iree-benchmark-module", ["--help"]) | |
| check_tool("iree-benchmark-trace", ["--help"]) | |
| check_tool("iree-run-module", ["--help"]) | |
| check_tool("iree-run-trace", ["--help"]) | |
| print("***** All done *****") |