blob: 32283d99a1d12c424600f37878f9b4b7c9370d8f [file] [log] [blame]
Dean Birch5cb5a882020-01-24 11:37:13 +00001#!/usr/bin/env python
2"""
3Script for querying specific build configurations of TF-M.
4Can list available build configurations, and can give environment
5variables to build a specific build configuration using run-build.sh
6"""
7
8import argparse
9import os
10import sys
11
12from tfm_ci_pylib.tfm_build_manager import TFM_Build_Manager
13from build_helper.build_helper_configs import config_full
14from build_helper.build_helper_configs import _builtin_configs
15
16
17__copyright__ = """
18/*
19 * Copyright (c) 2020, Arm Limited. All rights reserved.
20 *
21 * SPDX-License-Identifier: BSD-3-Clause
22 *
23 */
24 """
25
26
27def get_build_manager(group=None):
28 """Get a TFM_Build_Manager instance, silencing stdout"""
29 config = config_full
30 if group:
31 config = _builtin_configs[group]
32 _dir = os.getcwd()
33 # Block default stdout from __init__
34 sys.stdout = open(os.devnull, "w")
35 build_manager = TFM_Build_Manager(_dir, _dir, config)
36 # Allow stdout again
37 sys.stdout = sys.__stdout__
38 return build_manager
39
40
41def list_configs(group):
42 """Lists available configurations"""
43 build_manager = get_build_manager(group)
Dean Bircha6ede7e2020-03-13 14:00:33 +000044 return build_manager.get_config()
Dean Birch5cb5a882020-01-24 11:37:13 +000045
46
Dean Bircha6ede7e2020-03-13 14:00:33 +000047def print_config_environment(config, group=None, silence_stderr=False):
Dean Birch5cb5a882020-01-24 11:37:13 +000048 """Prints particular configuration environment variables"""
49 build_manager = get_build_manager(group)
Dean Bircha6ede7e2020-03-13 14:00:33 +000050 build_manager.print_config_environment(config, silence_stderr=silence_stderr)
Dean Birch5cb5a882020-01-24 11:37:13 +000051
52
53if __name__ == "__main__":
54 PARSER = argparse.ArgumentParser(description="Extract build configurations.")
55 PARSER.add_argument(
56 "config",
57 default=None,
58 nargs="?",
59 help="Configuration to print environment variables for. "
60 "Then run-build.sh can be run directly with these set. "
61 "If not specified, the available configurations are printed",
62 )
63 PARSER.add_argument(
64 "-g",
65 "--group",
Dean Bircha6ede7e2020-03-13 14:00:33 +000066 default=[],
67 action="append",
Dean Birch5cb5a882020-01-24 11:37:13 +000068 help="Only list configurations under a certain group. ",
69 choices=list(_builtin_configs.keys()),
70 )
71 ARGS = PARSER.parse_args()
72
Dean Bircha6ede7e2020-03-13 14:00:33 +000073 all_configs = set()
74 for group in ARGS.group:
75 # By default print available configs
76 if not ARGS.config:
77 all_configs.update(list_configs(group))
78 else:
79 try:
80 print_config_environment(ARGS.config, group=group, silence_stderr=True)
81 break
82 except SystemExit:
83 if group == ARGS.group[-1]:
84 print(
85 "Could not find configuration {} in groups {}".format(
86 ARGS.config, ARGS.group
87 )
88 )
89
90 for config in all_configs:
91 print(config)