Initial commit for TF-A CI scripts
Signed-off-by: Fathi Boudra <fathi.boudra@linaro.org>
diff --git a/script/gen_run_config_candidates.py b/script/gen_run_config_candidates.py
new file mode 100755
index 0000000..d9e3f9b
--- /dev/null
+++ b/script/gen_run_config_candidates.py
@@ -0,0 +1,67 @@
+#!/usr/bin/env python3
+#
+# Copyright (c) 2019, Arm Limited. All rights reserved.
+#
+# SPDX-License-Identifier: BSD-3-Clause
+#
+
+# Output to stdout the chosen run configuration fragments for a given run
+# configuration. With -p, the script prints all fragments considered without
+# validating whether it exists.
+
+import argparse
+import os
+import sys
+
+parser = argparse.ArgumentParser(description="Choose run configurations")
+parser.add_argument("--print-only", "-p", action="store_true", default=False,
+ help="Print only; don't check for matching run configs.")
+parser.add_argument("args", nargs=argparse.REMAINDER, help="Run configuration")
+opts = parser.parse_args()
+
+if len(opts.args) != 1:
+ raise Exception("Exactly one argument expected")
+
+# Obtain path to run_config directory
+script_root = os.path.dirname(os.path.abspath(sys.argv[0]))
+run_config_dir = os.path.join(script_root, os.pardir, "run_config")
+
+arg = opts.args[0]
+run_config = arg.split(":")[-1]
+if not run_config:
+ raise Exception("Couldn't extract run config from " + arg)
+
+if run_config == "nil":
+ sys.exit(0)
+
+fragments = run_config.split("-")
+exit_code = 0
+
+# Stems are fragments, except with everything after dot removed.
+stems = list(map(lambda f: f.split(".")[0], fragments))
+
+# Consider each fragment in turn
+for frag_idx, chosen_fragment in enumerate(fragments):
+ # Choose all stems upto the current fragment
+ chosen = ["-".join(stems[0:i] + [chosen_fragment])
+ for i in range(frag_idx + 1)]
+
+ for i, fragment in enumerate(reversed(chosen)):
+ if opts.print_only:
+ print(fragment)
+ else:
+ # Output only if a matching run config exists
+ if os.path.isfile(os.path.join(run_config_dir, fragment)):
+ # Stop looking for generic once a specific fragment is found
+ print(fragment)
+ break
+ else:
+ # Ignore if the first fragment doesn't exist, which is usually the
+ # platform name. Otherwise, print a warning for not finding matches for
+ # the fragment.
+ if (not opts.print_only) and (i > 0):
+ print("warning: {}: no matches for fragment '{}'".format(
+ arg, fragment), file=sys.stderr)
+ exit_code = 1
+
+sys.exit(exit_code)