Source code for ifgen.commands.svd

"""
An entry-point for the 'svd' command.
"""

# built-in
from argparse import ArgumentParser as _ArgumentParser
from argparse import Namespace as _Namespace
from logging import getLogger
from pathlib import Path

# third-party
from vcorelib.args import CommandFunction as _CommandFunction
from vcorelib.paths import find_file

# internal
from ifgen import PKG_NAME
from ifgen.config.svd import SvdConfig
from ifgen.svd import register_processors
from ifgen.svd.group import base, enums
from ifgen.svd.task import SvdProcessingTask


[docs] def svd_cmd(args: _Namespace) -> int: """Execute the svd command.""" register_processors() logger = getLogger(__name__) path = find_file( args.svd_file, package=PKG_NAME, logger=logger, include_cwd=True ) assert path is not None, args.svd_file config = SvdConfig.decode( find_file(args.config, logger=logger, include_cwd=True) ) # Only enable certain pruning strategies for certain processors. enable_pruning = path.with_suffix("").name in config.data.setdefault( "enable_pruning", [] ) enums.PRUNE_ENUMS = enable_pruning base.PRUNE_STRUCTS = enable_pruning SvdProcessingTask.svd(path, args.min_enum_width).generate_configs( args.output, config ) return 0
DEFAULT_MIN_ENUM_WIDTH = 2
[docs] def add_svd_cmd(parser: _ArgumentParser) -> _CommandFunction: """Add svd-command arguments to its parser.""" parser.add_argument( "-o", "--output", type=Path, default=f"{PKG_NAME}-out", help=( "output directory for configuration " "files (default '%(default)s')" ), ) parser.add_argument( "-c", "--config", default=f"package://{PKG_NAME}/svd.yaml", help="configuration rules to use (default: '%(default)s')", ) parser.add_argument( "-m", "--min-enum-width", type=int, default=DEFAULT_MIN_ENUM_WIDTH, help=( "minimum number of enumeration elements to warrant " "generating an enumeration definition (default: %(default)s)" ), ) parser.add_argument( "svd_file", type=str, help="path/uri to a CMSIS-SVD file" ) return svd_cmd