Create helper script to output build configs

Instead of being able to export in json format for use with CI scripts,
export into a property format. This lists *single* build configurations,
and the environment variables to set for a single build of this format.

Change-Id: Ideabcdbefe6677401a4b9d60b2b623ba43b71bf8
Signed-off-by: Dean Birch <dean.birch@arm.com>
diff --git a/configs.py b/configs.py
new file mode 100755
index 0000000..3b5bc7d
--- /dev/null
+++ b/configs.py
@@ -0,0 +1,76 @@
+#!/usr/bin/env python
+"""
+Script for querying specific build configurations of TF-M.
+Can list available build configurations, and can give environment
+variables to build a specific build configuration using run-build.sh
+"""
+
+import argparse
+import os
+import sys
+
+from tfm_ci_pylib.tfm_build_manager import TFM_Build_Manager
+from build_helper.build_helper_configs import config_full
+from build_helper.build_helper_configs import _builtin_configs
+
+
+__copyright__ = """
+/*
+ * Copyright (c) 2020, Arm Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ *
+ */
+ """
+
+
+def get_build_manager(group=None):
+    """Get a TFM_Build_Manager instance, silencing stdout"""
+    config = config_full
+    if group:
+        config = _builtin_configs[group]
+    _dir = os.getcwd()
+    # Block default stdout from __init__
+    sys.stdout = open(os.devnull, "w")
+    build_manager = TFM_Build_Manager(_dir, _dir, config)
+    # Allow stdout again
+    sys.stdout = sys.__stdout__
+    return build_manager
+
+
+def list_configs(group):
+    """Lists available configurations"""
+    build_manager = get_build_manager(group)
+    build_manager.print_config()
+
+
+def print_config_environment(config, group=None):
+    """Prints particular configuration environment variables"""
+    build_manager = get_build_manager(group)
+    build_manager.print_config_environment(config)
+
+
+if __name__ == "__main__":
+    PARSER = argparse.ArgumentParser(description="Extract build configurations.")
+    PARSER.add_argument(
+        "config",
+        default=None,
+        nargs="?",
+        help="Configuration to print environment variables for. "
+        "Then run-build.sh can be run directly with these set. "
+        "If not specified, the available configurations are printed",
+    )
+    PARSER.add_argument(
+        "-g",
+        "--group",
+        default=None,
+        help="Only list configurations under a certain group. ",
+        choices=list(_builtin_configs.keys()),
+    )
+    ARGS = PARSER.parse_args()
+
+    # By default print available configs
+    if not ARGS.config:
+        list_configs(ARGS.group)
+    else:
+        print_config_environment(ARGS.config, group=ARGS.group)