Martí Bolívar | 8bd6d08 | 2020-12-09 12:03:19 -0800 | [diff] [blame] | 1 | #!/usr/bin/env python3 |
| 2 | |
| 3 | # Copyright (c) 2020 Nordic Semiconductor ASA |
| 4 | # SPDX-License-Identifier: Apache-2.0 |
| 5 | |
| 6 | import argparse |
| 7 | from collections import defaultdict |
Torsten Rasmussen | 8dc3f85 | 2022-09-14 22:23:15 +0200 | [diff] [blame] | 8 | from dataclasses import dataclass, field |
Martí Bolívar | 8bd6d08 | 2020-12-09 12:03:19 -0800 | [diff] [blame] | 9 | import itertools |
| 10 | from pathlib import Path |
Torsten Rasmussen | 8dc3f85 | 2022-09-14 22:23:15 +0200 | [diff] [blame] | 11 | import pykwalify.core |
| 12 | import sys |
| 13 | from typing import List |
| 14 | import yaml |
| 15 | import list_hardware |
Grzegorz Swiderski | 9dabce4 | 2024-03-22 20:17:03 +0100 | [diff] [blame] | 16 | from list_hardware import unique_paths |
Torsten Rasmussen | 8dc3f85 | 2022-09-14 22:23:15 +0200 | [diff] [blame] | 17 | |
| 18 | BOARD_SCHEMA_PATH = str(Path(__file__).parent / 'schemas' / 'board-schema.yml') |
| 19 | with open(BOARD_SCHEMA_PATH, 'r') as f: |
| 20 | board_schema = yaml.safe_load(f.read()) |
| 21 | |
| 22 | BOARD_YML = 'board.yml' |
Martí Bolívar | 8bd6d08 | 2020-12-09 12:03:19 -0800 | [diff] [blame] | 23 | |
Martí Bolívar | 8bd6d08 | 2020-12-09 12:03:19 -0800 | [diff] [blame] | 24 | # |
| 25 | # This is shared code between the build system's 'boards' target |
| 26 | # and the 'west boards' extension command. If you change it, make |
| 27 | # sure to test both ways it can be used. |
| 28 | # |
| 29 | # (It's done this way to keep west optional, making it possible to run |
| 30 | # 'ninja boards' in a build directory without west installed.) |
| 31 | # |
| 32 | |
Torsten Rasmussen | 732c504 | 2024-03-19 15:26:59 +0100 | [diff] [blame] | 33 | |
Torsten Rasmussen | 8dc3f85 | 2022-09-14 22:23:15 +0200 | [diff] [blame] | 34 | @dataclass |
| 35 | class Revision: |
Martí Bolívar | 8bd6d08 | 2020-12-09 12:03:19 -0800 | [diff] [blame] | 36 | name: str |
Torsten Rasmussen | 8dc3f85 | 2022-09-14 22:23:15 +0200 | [diff] [blame] | 37 | variants: List[str] = field(default_factory=list) |
| 38 | |
| 39 | @staticmethod |
| 40 | def from_dict(revision): |
| 41 | revisions = [] |
| 42 | for r in revision.get('revisions', []): |
| 43 | revisions.append(Revision.from_dict(r)) |
| 44 | return Revision(revision['name'], revisions) |
| 45 | |
| 46 | |
Torsten Rasmussen | 8dc3f85 | 2022-09-14 22:23:15 +0200 | [diff] [blame] | 47 | @dataclass |
| 48 | class Variant: |
| 49 | name: str |
| 50 | variants: List[str] = field(default_factory=list) |
| 51 | |
| 52 | @staticmethod |
| 53 | def from_dict(variant): |
| 54 | variants = [] |
| 55 | for v in variant.get('variants', []): |
| 56 | variants.append(Variant.from_dict(v)) |
| 57 | return Variant(variant['name'], variants) |
| 58 | |
| 59 | |
| 60 | @dataclass |
| 61 | class Cpucluster: |
| 62 | name: str |
| 63 | variants: List[str] = field(default_factory=list) |
| 64 | |
| 65 | |
| 66 | @dataclass |
| 67 | class Soc: |
| 68 | name: str |
| 69 | cpuclusters: List[str] = field(default_factory=list) |
| 70 | variants: List[str] = field(default_factory=list) |
| 71 | |
| 72 | @staticmethod |
| 73 | def from_soc(soc, variants): |
| 74 | if soc is None: |
| 75 | return None |
| 76 | if soc.cpuclusters: |
| 77 | cpus = [] |
| 78 | for c in soc.cpuclusters: |
| 79 | cpus.append(Cpucluster(c, |
| 80 | [Variant.from_dict(v) for v in variants if c == v['cpucluster']] |
| 81 | )) |
| 82 | return Soc(soc.name, cpuclusters=cpus) |
| 83 | return Soc(soc.name, variants=[Variant.from_dict(v) for v in variants]) |
| 84 | |
| 85 | |
| 86 | @dataclass(frozen=True) |
| 87 | class Board: |
| 88 | name: str |
Martí Bolívar | 8bd6d08 | 2020-12-09 12:03:19 -0800 | [diff] [blame] | 89 | dir: Path |
Torsten Rasmussen | 8dc3f85 | 2022-09-14 22:23:15 +0200 | [diff] [blame] | 90 | hwm: str |
| 91 | arch: str = None |
| 92 | vendor: str = None |
| 93 | revision_format: str = None |
| 94 | revision_default: str = None |
| 95 | revision_exact: bool = False |
| 96 | revisions: List[str] = field(default_factory=list, compare=False) |
| 97 | socs: List[Soc] = field(default_factory=list, compare=False) |
| 98 | variants: List[str] = field(default_factory=list, compare=False) |
| 99 | |
Martí Bolívar | 8bd6d08 | 2020-12-09 12:03:19 -0800 | [diff] [blame] | 100 | |
| 101 | def board_key(board): |
| 102 | return board.name |
| 103 | |
Torsten Rasmussen | 732c504 | 2024-03-19 15:26:59 +0100 | [diff] [blame] | 104 | |
Martí Bolívar | 8bd6d08 | 2020-12-09 12:03:19 -0800 | [diff] [blame] | 105 | def find_arch2boards(args): |
| 106 | arch2board_set = find_arch2board_set(args) |
| 107 | return {arch: sorted(arch2board_set[arch], key=board_key) |
| 108 | for arch in arch2board_set} |
| 109 | |
Torsten Rasmussen | 732c504 | 2024-03-19 15:26:59 +0100 | [diff] [blame] | 110 | |
Martí Bolívar | 8bd6d08 | 2020-12-09 12:03:19 -0800 | [diff] [blame] | 111 | def find_boards(args): |
| 112 | return sorted(itertools.chain(*find_arch2board_set(args).values()), |
| 113 | key=board_key) |
| 114 | |
Torsten Rasmussen | 732c504 | 2024-03-19 15:26:59 +0100 | [diff] [blame] | 115 | |
Martí Bolívar | 8bd6d08 | 2020-12-09 12:03:19 -0800 | [diff] [blame] | 116 | def find_arch2board_set(args): |
| 117 | arches = sorted(find_arches(args)) |
| 118 | ret = defaultdict(set) |
| 119 | |
Grzegorz Swiderski | 9dabce4 | 2024-03-22 20:17:03 +0100 | [diff] [blame] | 120 | for root in unique_paths(args.board_roots): |
Torsten Rasmussen | 8dc3f85 | 2022-09-14 22:23:15 +0200 | [diff] [blame] | 121 | for arch, boards in find_arch2board_set_in(root, arches, args.board_dir).items(): |
| 122 | if args.board is not None: |
| 123 | ret[arch] |= {b for b in boards if b.name == args.board} |
| 124 | else: |
| 125 | ret[arch] |= boards |
Martí Bolívar | 8bd6d08 | 2020-12-09 12:03:19 -0800 | [diff] [blame] | 126 | |
| 127 | return ret |
| 128 | |
Torsten Rasmussen | 732c504 | 2024-03-19 15:26:59 +0100 | [diff] [blame] | 129 | |
Martí Bolívar | 8bd6d08 | 2020-12-09 12:03:19 -0800 | [diff] [blame] | 130 | def find_arches(args): |
Torsten Rasmussen | c3620c8 | 2022-08-05 09:54:47 +0200 | [diff] [blame] | 131 | arch_set = set() |
Martí Bolívar | 8bd6d08 | 2020-12-09 12:03:19 -0800 | [diff] [blame] | 132 | |
Grzegorz Swiderski | 9dabce4 | 2024-03-22 20:17:03 +0100 | [diff] [blame] | 133 | for root in unique_paths(args.arch_roots): |
Martí Bolívar | 8bd6d08 | 2020-12-09 12:03:19 -0800 | [diff] [blame] | 134 | arch_set |= find_arches_in(root) |
| 135 | |
| 136 | return arch_set |
| 137 | |
Torsten Rasmussen | 732c504 | 2024-03-19 15:26:59 +0100 | [diff] [blame] | 138 | |
Martí Bolívar | 8bd6d08 | 2020-12-09 12:03:19 -0800 | [diff] [blame] | 139 | def find_arches_in(root): |
| 140 | ret = set() |
| 141 | arch = root / 'arch' |
| 142 | common = arch / 'common' |
| 143 | |
| 144 | if not arch.is_dir(): |
| 145 | return ret |
| 146 | |
| 147 | for maybe_arch in arch.iterdir(): |
| 148 | if not maybe_arch.is_dir() or maybe_arch == common: |
| 149 | continue |
| 150 | ret.add(maybe_arch.name) |
| 151 | |
| 152 | return ret |
| 153 | |
Torsten Rasmussen | 732c504 | 2024-03-19 15:26:59 +0100 | [diff] [blame] | 154 | |
Torsten Rasmussen | 8dc3f85 | 2022-09-14 22:23:15 +0200 | [diff] [blame] | 155 | def find_arch2board_set_in(root, arches, board_dir): |
Martí Bolívar | 8bd6d08 | 2020-12-09 12:03:19 -0800 | [diff] [blame] | 156 | ret = defaultdict(set) |
| 157 | boards = root / 'boards' |
| 158 | |
| 159 | for arch in arches: |
Torsten Rasmussen | fd772f8 | 2024-03-05 09:29:48 +0100 | [diff] [blame] | 160 | if not (boards / arch).is_dir(): |
Marcin Niestroj | 35c882d | 2021-05-08 15:36:19 +0200 | [diff] [blame] | 161 | continue |
| 162 | |
Torsten Rasmussen | fd772f8 | 2024-03-05 09:29:48 +0100 | [diff] [blame] | 163 | for maybe_board in (boards / arch).iterdir(): |
Martí Bolívar | 8bd6d08 | 2020-12-09 12:03:19 -0800 | [diff] [blame] | 164 | if not maybe_board.is_dir(): |
| 165 | continue |
Torsten Rasmussen | 8dc3f85 | 2022-09-14 22:23:15 +0200 | [diff] [blame] | 166 | if board_dir is not None and board_dir != maybe_board: |
| 167 | continue |
Martí Bolívar | 8bd6d08 | 2020-12-09 12:03:19 -0800 | [diff] [blame] | 168 | for maybe_defconfig in maybe_board.iterdir(): |
| 169 | file_name = maybe_defconfig.name |
Torsten Rasmussen | fd772f8 | 2024-03-05 09:29:48 +0100 | [diff] [blame] | 170 | if file_name.endswith('_defconfig') and not (maybe_board / BOARD_YML).is_file(): |
Martí Bolívar | 8bd6d08 | 2020-12-09 12:03:19 -0800 | [diff] [blame] | 171 | board_name = file_name[:-len('_defconfig')] |
Torsten Rasmussen | 8dc3f85 | 2022-09-14 22:23:15 +0200 | [diff] [blame] | 172 | ret[arch].add(Board(board_name, maybe_board, 'v1', arch=arch)) |
Martí Bolívar | 8bd6d08 | 2020-12-09 12:03:19 -0800 | [diff] [blame] | 173 | |
| 174 | return ret |
| 175 | |
Torsten Rasmussen | 8dc3f85 | 2022-09-14 22:23:15 +0200 | [diff] [blame] | 176 | |
| 177 | def load_v2_boards(board_name, board_yml, systems): |
| 178 | boards = [] |
| 179 | if board_yml.is_file(): |
| 180 | with board_yml.open('r') as f: |
| 181 | b = yaml.safe_load(f.read()) |
| 182 | |
| 183 | try: |
| 184 | pykwalify.core.Core(source_data=b, schema_data=board_schema).validate() |
| 185 | except pykwalify.errors.SchemaError as e: |
| 186 | sys.exit('ERROR: Malformed "build" section in file: {}\n{}' |
| 187 | .format(board_yml.as_posix(), e)) |
| 188 | |
| 189 | mutual_exclusive = {'board', 'boards'} |
| 190 | if len(mutual_exclusive - b.keys()) < 1: |
| 191 | sys.exit(f'ERROR: Malformed content in file: {board_yml.as_posix()}\n' |
| 192 | f'{mutual_exclusive} are mutual exclusive at this level.') |
| 193 | |
Torsten Rasmussen | 732c504 | 2024-03-19 15:26:59 +0100 | [diff] [blame] | 194 | board_array = b.get('boards', [b.get('board', None)]) |
Torsten Rasmussen | 8dc3f85 | 2022-09-14 22:23:15 +0200 | [diff] [blame] | 195 | for board in board_array: |
| 196 | if board_name is not None: |
| 197 | if board['name'] != board_name: |
| 198 | # Not the board we're looking for, ignore. |
| 199 | continue |
| 200 | |
| 201 | board_revision = board.get('revision') |
| 202 | if board_revision is not None and board_revision.get('format') != 'custom': |
| 203 | if board_revision.get('default') is None: |
| 204 | sys.exit(f'ERROR: Malformed "board" section in file: {board_yml.as_posix()}\n' |
| 205 | "Cannot find required key 'default'. Path: '/board/revision.'") |
| 206 | if board_revision.get('revisions') is None: |
| 207 | sys.exit(f'ERROR: Malformed "board" section in file: {board_yml.as_posix()}\n' |
| 208 | "Cannot find required key 'revisions'. Path: '/board/revision.'") |
| 209 | |
| 210 | mutual_exclusive = {'socs', 'variants'} |
| 211 | if len(mutual_exclusive - board.keys()) < 1: |
| 212 | sys.exit(f'ERROR: Malformed "board" section in file: {board_yml.as_posix()}\n' |
| 213 | f'{mutual_exclusive} are mutual exclusive at this level.') |
| 214 | socs = [Soc.from_soc(systems.get_soc(s['name']), s.get('variants', [])) |
| 215 | for s in board.get('socs', {})] |
| 216 | |
| 217 | board = Board( |
| 218 | name=board['name'], |
| 219 | dir=board_yml.parent, |
| 220 | vendor=board.get('vendor'), |
| 221 | revision_format=board.get('revision', {}).get('format'), |
| 222 | revision_default=board.get('revision', {}).get('default'), |
| 223 | revision_exact=board.get('revision', {}).get('exact', False), |
| 224 | revisions=[Revision.from_dict(v) for v in |
| 225 | board.get('revision', {}).get('revisions', [])], |
| 226 | socs=socs, |
| 227 | variants=[Variant.from_dict(v) for v in board.get('variants', [])], |
| 228 | hwm='v2', |
| 229 | ) |
| 230 | boards.append(board) |
| 231 | return boards |
| 232 | |
| 233 | |
| 234 | def find_v2_boards(args): |
| 235 | root_args = argparse.Namespace(**{'soc_roots': args.soc_roots}) |
| 236 | systems = list_hardware.find_v2_systems(root_args) |
| 237 | |
| 238 | boards = [] |
| 239 | board_files = [] |
Grzegorz Swiderski | 9dabce4 | 2024-03-22 20:17:03 +0100 | [diff] [blame] | 240 | for root in unique_paths(args.board_roots): |
Torsten Rasmussen | 8dc3f85 | 2022-09-14 22:23:15 +0200 | [diff] [blame] | 241 | board_files.extend((root / 'boards').rglob(BOARD_YML)) |
| 242 | |
| 243 | for board_yml in board_files: |
| 244 | b = load_v2_boards(args.board, board_yml, systems) |
| 245 | boards.extend(b) |
| 246 | return boards |
| 247 | |
| 248 | |
Martí Bolívar | 8bd6d08 | 2020-12-09 12:03:19 -0800 | [diff] [blame] | 249 | def parse_args(): |
Jamie McCrae | ec70444 | 2023-01-04 16:08:36 +0000 | [diff] [blame] | 250 | parser = argparse.ArgumentParser(allow_abbrev=False) |
Martí Bolívar | 8bd6d08 | 2020-12-09 12:03:19 -0800 | [diff] [blame] | 251 | add_args(parser) |
Torsten Rasmussen | 8dc3f85 | 2022-09-14 22:23:15 +0200 | [diff] [blame] | 252 | add_args_formatting(parser) |
Martí Bolívar | 8bd6d08 | 2020-12-09 12:03:19 -0800 | [diff] [blame] | 253 | return parser.parse_args() |
| 254 | |
Torsten Rasmussen | 8dc3f85 | 2022-09-14 22:23:15 +0200 | [diff] [blame] | 255 | |
Martí Bolívar | 8bd6d08 | 2020-12-09 12:03:19 -0800 | [diff] [blame] | 256 | def add_args(parser): |
| 257 | # Remember to update west-completion.bash if you add or remove |
| 258 | # flags |
| 259 | parser.add_argument("--arch-root", dest='arch_roots', default=[], |
| 260 | type=Path, action='append', |
Torsten Rasmussen | c3620c8 | 2022-08-05 09:54:47 +0200 | [diff] [blame] | 261 | help='add an architecture root, may be given more than once') |
Martí Bolívar | 8bd6d08 | 2020-12-09 12:03:19 -0800 | [diff] [blame] | 262 | parser.add_argument("--board-root", dest='board_roots', default=[], |
| 263 | type=Path, action='append', |
Torsten Rasmussen | c3620c8 | 2022-08-05 09:54:47 +0200 | [diff] [blame] | 264 | help='add a board root, may be given more than once') |
Torsten Rasmussen | 8dc3f85 | 2022-09-14 22:23:15 +0200 | [diff] [blame] | 265 | parser.add_argument("--soc-root", dest='soc_roots', default=[], |
| 266 | type=Path, action='append', |
| 267 | help='add a soc root, may be given more than once') |
| 268 | parser.add_argument("--board", dest='board', default=None, |
| 269 | help='lookup the specific board, fail if not found') |
| 270 | parser.add_argument("--board-dir", default=None, type=Path, |
| 271 | help='Only look for boards at the specific location') |
Martí Bolívar | 8bd6d08 | 2020-12-09 12:03:19 -0800 | [diff] [blame] | 272 | |
Torsten Rasmussen | 8dc3f85 | 2022-09-14 22:23:15 +0200 | [diff] [blame] | 273 | |
| 274 | def add_args_formatting(parser): |
| 275 | parser.add_argument("--cmakeformat", default=None, |
| 276 | help='''CMake Format string to use to list each board''') |
| 277 | |
| 278 | |
Torsten Rasmussen | 88d8b23 | 2024-03-07 10:06:34 +0100 | [diff] [blame] | 279 | def variant_v2_qualifiers(variant, qualifiers = None): |
| 280 | qualifiers_list = [variant.name] if qualifiers is None else [qualifiers + '/' + variant.name] |
Torsten Rasmussen | 8dc3f85 | 2022-09-14 22:23:15 +0200 | [diff] [blame] | 281 | for v in variant.variants: |
Torsten Rasmussen | 88d8b23 | 2024-03-07 10:06:34 +0100 | [diff] [blame] | 282 | qualifiers_list.extend(variant_v2_qualifiers(v, qualifiers_list[0])) |
Torsten Rasmussen | 732c504 | 2024-03-19 15:26:59 +0100 | [diff] [blame] | 283 | return qualifiers_list |
Torsten Rasmussen | 8dc3f85 | 2022-09-14 22:23:15 +0200 | [diff] [blame] | 284 | |
| 285 | |
Torsten Rasmussen | 732c504 | 2024-03-19 15:26:59 +0100 | [diff] [blame] | 286 | def board_v2_qualifiers(board): |
| 287 | qualifiers_list = [] |
Torsten Rasmussen | 8dc3f85 | 2022-09-14 22:23:15 +0200 | [diff] [blame] | 288 | |
| 289 | for s in board.socs: |
| 290 | if s.cpuclusters: |
| 291 | for c in s.cpuclusters: |
Torsten Rasmussen | 88d8b23 | 2024-03-07 10:06:34 +0100 | [diff] [blame] | 292 | id_str = s.name + '/' + c.name |
Torsten Rasmussen | 732c504 | 2024-03-19 15:26:59 +0100 | [diff] [blame] | 293 | qualifiers_list.append(id_str) |
Torsten Rasmussen | 8dc3f85 | 2022-09-14 22:23:15 +0200 | [diff] [blame] | 294 | for v in c.variants: |
Torsten Rasmussen | 732c504 | 2024-03-19 15:26:59 +0100 | [diff] [blame] | 295 | qualifiers_list.extend(variant_v2_qualifiers(v, id_str)) |
Torsten Rasmussen | 8dc3f85 | 2022-09-14 22:23:15 +0200 | [diff] [blame] | 296 | else: |
Torsten Rasmussen | 88d8b23 | 2024-03-07 10:06:34 +0100 | [diff] [blame] | 297 | qualifiers_list.append(s.name) |
Torsten Rasmussen | 8dc3f85 | 2022-09-14 22:23:15 +0200 | [diff] [blame] | 298 | for v in s.variants: |
Torsten Rasmussen | 88d8b23 | 2024-03-07 10:06:34 +0100 | [diff] [blame] | 299 | qualifiers_list.extend(variant_v2_qualifiers(v, s.name)) |
Torsten Rasmussen | 8dc3f85 | 2022-09-14 22:23:15 +0200 | [diff] [blame] | 300 | |
| 301 | for v in board.variants: |
Torsten Rasmussen | 88d8b23 | 2024-03-07 10:06:34 +0100 | [diff] [blame] | 302 | qualifiers_list.extend(variant_v2_qualifiers(v)) |
Torsten Rasmussen | 732c504 | 2024-03-19 15:26:59 +0100 | [diff] [blame] | 303 | return qualifiers_list |
Torsten Rasmussen | 8dc3f85 | 2022-09-14 22:23:15 +0200 | [diff] [blame] | 304 | |
| 305 | |
Torsten Rasmussen | 732c504 | 2024-03-19 15:26:59 +0100 | [diff] [blame] | 306 | def board_v2_qualifiers_csv(board): |
Torsten Rasmussen | 8dc3f85 | 2022-09-14 22:23:15 +0200 | [diff] [blame] | 307 | # Return in csv (comma separated value) format |
Torsten Rasmussen | 732c504 | 2024-03-19 15:26:59 +0100 | [diff] [blame] | 308 | return ",".join(board_v2_qualifiers(board)) |
Torsten Rasmussen | 8dc3f85 | 2022-09-14 22:23:15 +0200 | [diff] [blame] | 309 | |
| 310 | |
| 311 | def dump_v2_boards(args): |
| 312 | if args.board_dir: |
| 313 | root_args = argparse.Namespace(**{'soc_roots': args.soc_roots}) |
| 314 | systems = list_hardware.find_v2_systems(root_args) |
| 315 | boards = load_v2_boards(args.board, args.board_dir / BOARD_YML, systems) |
| 316 | else: |
| 317 | boards = find_v2_boards(args) |
| 318 | |
| 319 | for b in boards: |
Torsten Rasmussen | 732c504 | 2024-03-19 15:26:59 +0100 | [diff] [blame] | 320 | qualifiers_list = board_v2_qualifiers(b) |
Torsten Rasmussen | 8dc3f85 | 2022-09-14 22:23:15 +0200 | [diff] [blame] | 321 | if args.cmakeformat is not None: |
| 322 | notfound = lambda x: x or 'NOTFOUND' |
| 323 | info = args.cmakeformat.format( |
| 324 | NAME='NAME;' + b.name, |
| 325 | DIR='DIR;' + str(b.dir.as_posix()), |
| 326 | VENDOR='VENDOR;' + notfound(b.vendor), |
| 327 | HWM='HWM;' + b.hwm, |
| 328 | REVISION_DEFAULT='REVISION_DEFAULT;' + notfound(b.revision_default), |
| 329 | REVISION_FORMAT='REVISION_FORMAT;' + notfound(b.revision_format), |
| 330 | REVISION_EXACT='REVISION_EXACT;' + str(b.revision_exact), |
| 331 | REVISIONS='REVISIONS;' + ';'.join( |
| 332 | [x.name for x in b.revisions]), |
| 333 | SOCS='SOCS;' + ';'.join([s.name for s in b.socs]), |
Torsten Rasmussen | 732c504 | 2024-03-19 15:26:59 +0100 | [diff] [blame] | 334 | QUALIFIERS='QUALIFIERS;' + ';'.join(qualifiers_list) |
Torsten Rasmussen | 8dc3f85 | 2022-09-14 22:23:15 +0200 | [diff] [blame] | 335 | ) |
| 336 | print(info) |
| 337 | else: |
| 338 | print(f'{b.name}') |
| 339 | |
| 340 | |
| 341 | def dump_boards(args): |
| 342 | arch2boards = find_arch2boards(args) |
Martí Bolívar | 8bd6d08 | 2020-12-09 12:03:19 -0800 | [diff] [blame] | 343 | for arch, boards in arch2boards.items(): |
Torsten Rasmussen | 8dc3f85 | 2022-09-14 22:23:15 +0200 | [diff] [blame] | 344 | if args.cmakeformat is None: |
| 345 | print(f'{arch}:') |
Martí Bolívar | 8bd6d08 | 2020-12-09 12:03:19 -0800 | [diff] [blame] | 346 | for board in boards: |
Torsten Rasmussen | 8dc3f85 | 2022-09-14 22:23:15 +0200 | [diff] [blame] | 347 | if args.cmakeformat is not None: |
| 348 | info = args.cmakeformat.format( |
| 349 | NAME='NAME;' + board.name, |
| 350 | DIR='DIR;' + str(board.dir.as_posix()), |
| 351 | HWM='HWM;' + board.hwm, |
| 352 | VENDOR='VENDOR;NOTFOUND', |
| 353 | REVISION_DEFAULT='REVISION_DEFAULT;NOTFOUND', |
| 354 | REVISION_FORMAT='REVISION_FORMAT;NOTFOUND', |
| 355 | REVISION_EXACT='REVISION_EXACT;NOTFOUND', |
| 356 | REVISIONS='REVISIONS;NOTFOUND', |
| 357 | VARIANT_DEFAULT='VARIANT_DEFAULT;NOTFOUND', |
| 358 | SOCS='SOCS;', |
Torsten Rasmussen | 732c504 | 2024-03-19 15:26:59 +0100 | [diff] [blame] | 359 | QUALIFIERS='QUALIFIERS;' |
Torsten Rasmussen | 8dc3f85 | 2022-09-14 22:23:15 +0200 | [diff] [blame] | 360 | ) |
| 361 | print(info) |
| 362 | else: |
| 363 | print(f' {board.name}') |
| 364 | |
Martí Bolívar | 8bd6d08 | 2020-12-09 12:03:19 -0800 | [diff] [blame] | 365 | |
| 366 | if __name__ == '__main__': |
Torsten Rasmussen | 8dc3f85 | 2022-09-14 22:23:15 +0200 | [diff] [blame] | 367 | args = parse_args() |
| 368 | dump_boards(args) |
| 369 | dump_v2_boards(args) |