blob: ee370afc4bc8f92504957042891c0efff8e1ff58 [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
Dean Birch5cb5a882020-01-24 11:37:13 +000013from build_helper.build_helper_configs import _builtin_configs
14
15
16__copyright__ = """
17/*
Xinyu Zhang0aebb3d2022-04-11 18:27:12 +080018 * Copyright (c) 2020-2022, Arm Limited. All rights reserved.
Dean Birch5cb5a882020-01-24 11:37:13 +000019 *
20 * SPDX-License-Identifier: BSD-3-Clause
21 *
22 */
23 """
24
25
26def get_build_manager(group=None):
27 """Get a TFM_Build_Manager instance, silencing stdout"""
Xinyu Zhang0aebb3d2022-04-11 18:27:12 +080028 if not group:
29 print("No config group selected!")
30 return
31 config = _builtin_configs[group]
Dean Birch5cb5a882020-01-24 11:37:13 +000032 _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
Dean Birchd0f9f8c2020-03-26 11:10:33 +000053def print_build_commands(config, group=None):
54 """Prints particular configuration environment variables"""
55 build_manager = get_build_manager(group)
56 build_manager.print_build_commands(config, silence_stderr=True)
57
58
Dean Birch5cb5a882020-01-24 11:37:13 +000059if __name__ == "__main__":
60 PARSER = argparse.ArgumentParser(description="Extract build configurations.")
61 PARSER.add_argument(
62 "config",
63 default=None,
64 nargs="?",
65 help="Configuration to print environment variables for. "
66 "Then run-build.sh can be run directly with these set. "
67 "If not specified, the available configurations are printed",
68 )
69 PARSER.add_argument(
Dean Birchd0f9f8c2020-03-26 11:10:33 +000070 "-b",
71 "--build_commands",
72 default=None,
73 action='store_true',
74 help="Instead of printing environment variables, print raw "
75 "build commands to be run."
76 )
77 PARSER.add_argument(
Dean Birch5cb5a882020-01-24 11:37:13 +000078 "-g",
79 "--group",
Dean Bircha6ede7e2020-03-13 14:00:33 +000080 default=[],
81 action="append",
Dean Birchd0f9f8c2020-03-26 11:10:33 +000082 help="Only list configurations under a certain group. "
83 "'all' will look through all configurations. "
Xinyu Zhang0aebb3d2022-04-11 18:27:12 +080084 "Leaving blank will just look at config 'all'.",
Dean Birchd0f9f8c2020-03-26 11:10:33 +000085 choices=list(_builtin_configs.keys())+['all'],
Dean Birch5cb5a882020-01-24 11:37:13 +000086 )
87 ARGS = PARSER.parse_args()
Xinyu Zhang0aebb3d2022-04-11 18:27:12 +080088 if not ARGS.group or ARGS.group == ['all']:
Dean Birchd0f9f8c2020-03-26 11:10:33 +000089 ARGS.group = list(_builtin_configs.keys())
Dean Birch5cb5a882020-01-24 11:37:13 +000090
Dean Bircha6ede7e2020-03-13 14:00:33 +000091 all_configs = set()
92 for group in ARGS.group:
93 # By default print available configs
94 if not ARGS.config:
95 all_configs.update(list_configs(group))
96 else:
97 try:
Dean Birchd0f9f8c2020-03-26 11:10:33 +000098 if not ARGS.build_commands:
99 print_config_environment(ARGS.config, group=group, silence_stderr=True)
100 else:
101 print_build_commands(ARGS.config, group=group)
Dean Bircha6ede7e2020-03-13 14:00:33 +0000102 break
Dean Birchd0f9f8c2020-03-26 11:10:33 +0000103 except (SystemExit, KeyError):
104 if group == ARGS.group[-1] or ARGS.group == []:
Dean Bircha6ede7e2020-03-13 14:00:33 +0000105 print(
106 "Could not find configuration {} in groups {}".format(
107 ARGS.config, ARGS.group
108 )
109 )
110
111 for config in all_configs:
112 print(config)