|
|
|
@ -4,15 +4,15 @@
@@ -4,15 +4,15 @@
|
|
|
|
|
# SPDX-License-Identifier: Apache-2.0 |
|
|
|
|
|
|
|
|
|
import argparse |
|
|
|
|
from collections import defaultdict, Counter |
|
|
|
|
from dataclasses import dataclass, field |
|
|
|
|
import itertools |
|
|
|
|
import sys |
|
|
|
|
from collections import Counter, defaultdict |
|
|
|
|
from dataclasses import dataclass, field |
|
|
|
|
from pathlib import Path |
|
|
|
|
|
|
|
|
|
import list_hardware |
|
|
|
|
import pykwalify.core |
|
|
|
|
import sys |
|
|
|
|
from typing import List, Union |
|
|
|
|
import yaml |
|
|
|
|
import list_hardware |
|
|
|
|
from list_hardware import unique_paths |
|
|
|
|
|
|
|
|
|
try: |
|
|
|
@ -21,7 +21,7 @@ except ImportError:
@@ -21,7 +21,7 @@ except ImportError:
|
|
|
|
|
from yaml import SafeLoader |
|
|
|
|
|
|
|
|
|
BOARD_SCHEMA_PATH = str(Path(__file__).parent / 'schemas' / 'board-schema.yml') |
|
|
|
|
with open(BOARD_SCHEMA_PATH, 'r') as f: |
|
|
|
|
with open(BOARD_SCHEMA_PATH) as f: |
|
|
|
|
board_schema = yaml.load(f.read(), Loader=SafeLoader) |
|
|
|
|
|
|
|
|
|
BOARD_VALIDATOR = pykwalify.core.Core(schema_data=board_schema, source_data={}) |
|
|
|
@ -41,7 +41,7 @@ BOARD_YML = 'board.yml'
@@ -41,7 +41,7 @@ BOARD_YML = 'board.yml'
|
|
|
|
|
@dataclass |
|
|
|
|
class Revision: |
|
|
|
|
name: str |
|
|
|
|
variants: List[str] = field(default_factory=list) |
|
|
|
|
variants: list[str] = field(default_factory=list) |
|
|
|
|
|
|
|
|
|
@staticmethod |
|
|
|
|
def from_dict(revision): |
|
|
|
@ -54,7 +54,7 @@ class Revision:
@@ -54,7 +54,7 @@ class Revision:
|
|
|
|
|
@dataclass |
|
|
|
|
class Variant: |
|
|
|
|
name: str |
|
|
|
|
variants: List[str] = field(default_factory=list) |
|
|
|
|
variants: list[str] = field(default_factory=list) |
|
|
|
|
|
|
|
|
|
@staticmethod |
|
|
|
|
def from_dict(variant): |
|
|
|
@ -67,14 +67,14 @@ class Variant:
@@ -67,14 +67,14 @@ class Variant:
|
|
|
|
|
@dataclass |
|
|
|
|
class Cpucluster: |
|
|
|
|
name: str |
|
|
|
|
variants: List[str] = field(default_factory=list) |
|
|
|
|
variants: list[str] = field(default_factory=list) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@dataclass |
|
|
|
|
class Soc: |
|
|
|
|
name: str |
|
|
|
|
cpuclusters: List[str] = field(default_factory=list) |
|
|
|
|
variants: List[str] = field(default_factory=list) |
|
|
|
|
cpuclusters: list[str] = field(default_factory=list) |
|
|
|
|
variants: list[str] = field(default_factory=list) |
|
|
|
|
|
|
|
|
|
@staticmethod |
|
|
|
|
def from_soc(soc, variants): |
|
|
|
@ -94,7 +94,7 @@ class Soc:
@@ -94,7 +94,7 @@ class Soc:
|
|
|
|
|
class Board: |
|
|
|
|
name: str |
|
|
|
|
# HWMv1 only supports a single Path, and requires Board dataclass to be hashable. |
|
|
|
|
directories: Union[Path, List[Path]] |
|
|
|
|
directories: Path | list[Path] |
|
|
|
|
hwm: str |
|
|
|
|
full_name: str = None |
|
|
|
|
arch: str = None |
|
|
|
@ -102,9 +102,9 @@ class Board:
@@ -102,9 +102,9 @@ class Board:
|
|
|
|
|
revision_format: str = None |
|
|
|
|
revision_default: str = None |
|
|
|
|
revision_exact: bool = False |
|
|
|
|
revisions: List[str] = field(default_factory=list, compare=False) |
|
|
|
|
socs: List[Soc] = field(default_factory=list, compare=False) |
|
|
|
|
variants: List[str] = field(default_factory=list, compare=False) |
|
|
|
|
revisions: list[str] = field(default_factory=list, compare=False) |
|
|
|
|
socs: list[Soc] = field(default_factory=list, compare=False) |
|
|
|
|
variants: list[str] = field(default_factory=list, compare=False) |
|
|
|
|
|
|
|
|
|
@property |
|
|
|
|
def dir(self): |
|
|
|
@ -125,8 +125,7 @@ class Board:
@@ -125,8 +125,7 @@ class Board:
|
|
|
|
|
node = s |
|
|
|
|
break |
|
|
|
|
|
|
|
|
|
if n > 1: |
|
|
|
|
if node.cpuclusters: |
|
|
|
|
if n > 1 and node.cpuclusters: |
|
|
|
|
cpu_qualifier = qualifiers_list.pop(0) |
|
|
|
|
for c in node.cpuclusters: |
|
|
|
|
if c.name == cpu_qualifier: |
|
|
|
@ -235,8 +234,7 @@ def load_v2_boards(board_name, board_yml, systems):
@@ -235,8 +234,7 @@ def load_v2_boards(board_name, board_yml, systems):
|
|
|
|
|
BOARD_VALIDATOR.source = b |
|
|
|
|
BOARD_VALIDATOR.validate() |
|
|
|
|
except pykwalify.errors.SchemaError as e: |
|
|
|
|
sys.exit('ERROR: Malformed "build" section in file: {}\n{}' |
|
|
|
|
.format(board_yml.as_posix(), e)) |
|
|
|
|
sys.exit(f'ERROR: Malformed "build" section in file: {board_yml.as_posix()}\n{e}') |
|
|
|
|
|
|
|
|
|
mutual_exclusive = {'board', 'boards'} |
|
|
|
|
if len(mutual_exclusive - b.keys()) < 1: |
|
|
|
@ -257,8 +255,7 @@ def load_v2_boards(board_name, board_yml, systems):
@@ -257,8 +255,7 @@ def load_v2_boards(board_name, board_yml, systems):
|
|
|
|
|
continue |
|
|
|
|
|
|
|
|
|
# Create board |
|
|
|
|
if board_name is not None: |
|
|
|
|
if board['name'] != board_name: |
|
|
|
|
if board_name is not None and board['name'] != board_name: |
|
|
|
|
# Not the board we're looking for, ignore. |
|
|
|
|
continue |
|
|
|
|
|
|
|
|
@ -421,7 +418,8 @@ def dump_v2_boards(args):
@@ -421,7 +418,8 @@ def dump_v2_boards(args):
|
|
|
|
|
for b in boards.values(): |
|
|
|
|
qualifiers_list = board_v2_qualifiers(b) |
|
|
|
|
if args.cmakeformat is not None: |
|
|
|
|
notfound = lambda x: x or 'NOTFOUND' |
|
|
|
|
def notfound(x): |
|
|
|
|
return x or 'NOTFOUND' |
|
|
|
|
info = args.cmakeformat.format( |
|
|
|
|
NAME='NAME;' + b.name, |
|
|
|
|
DIR='DIR;' + ';'.join( |
|
|
|
|