| # Copyright 2021 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 | |
| # Generates a ".run" file in the corresponding test tree for a file under | |
| # this directory. This is a convenience for bootstrapping new test files. | |
| # Usage: | |
| # python generate_runner.py llvmcpu "--target_backends=iree_llvmcpu" \ | |
| # iree_tf_tests/uncategorized/batch_norm_test.py[:batch_norm_alias] | |
| # | |
| # The first argument is the lit feature that this test is gated on and will | |
| # be prepended to the test name as "{variant}__testfile". | |
| # The second argument is the flag string to include when running the test. | |
| # All remaining arguments are relative paths to python files under this | |
| # directory that should have a .run file created for them. | |
| import os | |
| import sys | |
| def main(args): | |
| variant = args[0] | |
| flags = args[1] | |
| src_file_specs = args[2:] | |
| src_files = [transform_src_file_spec_to_src_file(spec) for spec in src_file_specs] | |
| module_names = [transform_src_file_to_module(f) for f in src_files] | |
| run_files = [ | |
| transform_src_file_spec_to_run_file(spec, variant) for spec in src_file_specs | |
| ] | |
| for module, run_file in zip(module_names, run_files): | |
| if os.path.exists(run_file): | |
| print(f"SKIPPING (exists): {run_file}") | |
| continue | |
| print(f"CREATE RUN FILE: {module} -> {run_file}") | |
| os.makedirs(os.path.dirname(run_file), exist_ok=True) | |
| with open(run_file, "wt") as f: | |
| print(f"# REQUIRES: {variant}", file=f) | |
| print(f"# RUN: %PYTHON -m {module} {flags}", file=f) | |
| def transform_src_file_spec_to_src_file(spec: str): | |
| try: | |
| colon_pos = spec.index(":") | |
| except ValueError: | |
| return spec | |
| return spec[0:colon_pos] | |
| def transform_src_file_to_module(file_name): | |
| module_name = file_name.replace("/", ".") | |
| if module_name.endswith(".py"): | |
| module_name = module_name[0:-3] | |
| return module_name | |
| def transform_src_file_spec_to_run_file(spec, variant): | |
| # Transform path:alias, defaulting to the basename if the alias is not | |
| # specified. | |
| file_path = spec | |
| file_name = os.path.basename(file_path) | |
| colon_pos = -1 | |
| try: | |
| colon_pos = spec.index(":") | |
| except ValueError: | |
| pass | |
| if colon_pos > -1: | |
| # Explicit alias. | |
| file_path = spec[0:colon_pos] | |
| file_name = spec[colon_pos + 1 :] | |
| print(f"FILE PATH = {file_path}") | |
| else: | |
| # Auto detect the alias from the basename. | |
| file_name = os.path.basename(file_path) | |
| if file_name.endswith(".py"): | |
| file_name = file_name[0:-3] | |
| if file_name.endswith("_test"): | |
| file_name = file_name[0:-5] | |
| main_test_dir = os.path.join(os.path.dirname(__file__), "..") | |
| parent_path = os.path.dirname(file_path) | |
| file_name = f"{variant}__{file_name}.run" | |
| run_file = os.path.join(main_test_dir, parent_path, file_name) | |
| return run_file | |
| if __name__ == "__main__": | |
| main(sys.argv[1:]) |