blob: e6c4e25ae8b6bdeb6d016e783bad7b1527cb3fc3 [file] [log] [blame]
Fathi Boudra422bf772019-12-02 11:10:16 +02001#!/usr/bin/env python3
2#
Leonardo Sandoval579c7372020-10-23 15:23:32 -05003# Copyright (c) 2019-2020 Arm Limited. All rights reserved.
Fathi Boudra422bf772019-12-02 11:10:16 +02004#
5# SPDX-License-Identifier: BSD-3-Clause
6#
7
8# Output to stdout the chosen run configuration fragments for a given run
9# configuration. With -p, the script prints all fragments considered without
10# validating whether it exists.
11
12import argparse
13import os
14import sys
15
16parser = argparse.ArgumentParser(description="Choose run configurations")
17parser.add_argument("--print-only", "-p", action="store_true", default=False,
18 help="Print only; don't check for matching run configs.")
Juan Pablo Conde2ecf1862024-01-16 20:12:43 -060019parser.add_argument("--unit-testing", action="store_true", default=False,
20 help="Use to indicate if it is a unit testing config or not")
Fathi Boudra422bf772019-12-02 11:10:16 +020021parser.add_argument("args", nargs=argparse.REMAINDER, help="Run configuration")
22opts = parser.parse_args()
23
24if len(opts.args) != 1:
25 raise Exception("Exactly one argument expected")
26
27# Obtain path to run_config directory
28script_root = os.path.dirname(os.path.abspath(sys.argv[0]))
Juan Pablo Conde2ecf1862024-01-16 20:12:43 -060029if (not opts.unit_testing):
30 run_config_dir = os.path.join(script_root, os.pardir, "run_config")
31else:
32 run_config_dir = os.path.join(script_root, os.pardir, "run_config_tfut")
Fathi Boudra422bf772019-12-02 11:10:16 +020033
34arg = opts.args[0]
35run_config = arg.split(":")[-1]
36if not run_config:
37 raise Exception("Couldn't extract run config from " + arg)
38
39if run_config == "nil":
Leonardo Sandoval72d4f432020-10-26 14:52:24 -060040 sys.exit(0)
Fathi Boudra422bf772019-12-02 11:10:16 +020041
42fragments = run_config.split("-")
Leonardo Sandoval72d4f432020-10-26 14:52:24 -060043if 'bmcov' in fragments:
44 fragments.remove('bmcov')
45exit_code = 0
Fathi Boudra422bf772019-12-02 11:10:16 +020046
Leonardo Sandoval72d4f432020-10-26 14:52:24 -060047# Stems are fragments, except with everything after dot removed.
48stems = list(map(lambda f: f.split(".")[0], fragments))
Fathi Boudra422bf772019-12-02 11:10:16 +020049
Leonardo Sandoval72d4f432020-10-26 14:52:24 -060050# Consider each fragment in turn
51for frag_idx, chosen_fragment in enumerate(fragments):
52 # Choose all stems upto the current fragment
53 chosen = ["-".join(stems[0:i] + [chosen_fragment])
54 for i in range(frag_idx + 1)]
Fathi Boudra422bf772019-12-02 11:10:16 +020055
Leonardo Sandoval72d4f432020-10-26 14:52:24 -060056 for i, fragment in enumerate(reversed(chosen)):
57 if opts.print_only:
Fathi Boudra422bf772019-12-02 11:10:16 +020058 print(fragment)
59 else:
Leonardo Sandoval72d4f432020-10-26 14:52:24 -060060 # Output only if a matching run config exists
61 if os.path.isfile(os.path.join(run_config_dir, fragment)):
62 # Stop looking for generic once a specific fragment is found
63 print(fragment)
64 break
65 else:
66 # Ignore if the first fragment doesn't exist, which is usually the
67 # platform name. Otherwise, print a warning for not finding matches for
68 # the fragment.
69 if (not opts.print_only) and (i > 0):
Fathi Boudra422bf772019-12-02 11:10:16 +020070 print("warning: {}: no matches for fragment '{}'".format(
71 arg, fragment), file=sys.stderr)
72 exit_code = 1
Fathi Boudra422bf772019-12-02 11:10:16 +020073sys.exit(exit_code)