# Copyright (c) 2019 Nordic Semiconductor ASA # # SPDX-License-Identifier: Apache-2.0 import argparse import os from pathlib import Path import re import sys import textwrap from west import log from west.commands import WestCommand from zephyr_ext_common import ZEPHYR_BASE sys.path.append(os.fspath(Path(__file__).parent.parent)) import list_boards import zephyr_module class Boards(WestCommand): def __init__(self): super().__init__( 'boards', # Keep this in sync with the string in west-commands.yml. 'display information about supported boards', 'Display information about boards', accepts_unknown_args=False) def do_add_parser(self, parser_adder): default_fmt = '{name}' parser = parser_adder.add_parser( self.name, help=self.help, formatter_class=argparse.RawDescriptionHelpFormatter, description=self.description, epilog=textwrap.dedent(f'''\ FORMAT STRINGS -------------- Boards are listed using a Python 3 format string. Arguments to the format string are accessed by name. The default format string is: "{default_fmt}" The following arguments are available: - name: board name - arch: board architecture - dir: directory that contains the board definition ''')) # Remember to update west-completion.bash if you add or remove # flags parser.add_argument('-f', '--format', default=default_fmt, help='''Format string to use to list each board; see FORMAT STRINGS below.''') parser.add_argument('-n', '--name', dest='name_re', help='''a regular expression; only boards whose names match NAME_RE will be listed''') list_boards.add_args(parser) return parser def do_run(self, args, _): if args.name_re is not None: name_re = re.compile(args.name_re) else: name_re = None modules_board_roots = [] for module in zephyr_module.parse_modules(ZEPHYR_BASE): board_root = module.meta.get('build', {}).get('settings', {}).get('board_root') if board_root is not None: modules_board_roots.append(Path(module.project) / board_root) args.board_roots += modules_board_roots for board in list_boards.find_boards(args): if name_re is not None and not name_re.search(board.name): continue log.inf(args.format.format(name=board.name, arch=board.arch, dir=board.dir))