blob: 6e6bedfaba29df5b14eb448baaf6786c89f43870 [file] [log] [blame]
# 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:])