Modularizes CLI commands for maintainability
Refactors CLI command handlers into separate classes under a new `commands` module for improved organization and scalability. Introduces a `register_commands` function to centralize command registration. Adds version retrieval for better tool identification in CLI descriptions.
This commit is contained in:
@@ -1,55 +1,17 @@
|
|||||||
import argparse
|
import argparse
|
||||||
import sys
|
from importlib.metadata import version, PackageNotFoundError
|
||||||
|
from hdlbuild.commands import register_commands
|
||||||
from hdlbuild.dependencies.resolver import DependencyResolver
|
|
||||||
from hdlbuild.models.config import DIRECTORIES
|
|
||||||
from hdlbuild.tools.xilinx_ise.isim import build_testbench, generate_simulation_project_file, run_testbench
|
|
||||||
from hdlbuild.tools.xilinx_ise.main import xilinx_ise_all, xilinx_ise_synth
|
|
||||||
from hdlbuild.utils.console_utils import ConsoleUtils
|
|
||||||
from hdlbuild.utils.directory_manager import clear_build_directories, clear_directories, ensure_directories_exist
|
|
||||||
from hdlbuild.utils.project_loader import load_project_config
|
|
||||||
|
|
||||||
project = load_project_config()
|
|
||||||
console_utils = ConsoleUtils("hdlbuild")
|
|
||||||
|
|
||||||
def clear(args):
|
|
||||||
"""Clears the build artifacts."""
|
|
||||||
if args.target == "all":
|
|
||||||
console_utils.print("Starting clear all process...")
|
|
||||||
clear_directories()
|
|
||||||
console_utils.print("All cleared.")
|
|
||||||
else:
|
|
||||||
console_utils.print("Clearing build artifacts...")
|
|
||||||
clear_build_directories()
|
|
||||||
console_utils.print("Build artifacts cleared.")
|
|
||||||
|
|
||||||
def build(args):
|
|
||||||
"""Starts the build process."""
|
|
||||||
console_utils.print("Starting build process...")
|
|
||||||
ensure_directories_exist(True)
|
|
||||||
xilinx_ise_all(project)
|
|
||||||
|
|
||||||
def synth(args):
|
|
||||||
"""Starts the build process."""
|
|
||||||
console_utils.print("Starting build process...")
|
|
||||||
ensure_directories_exist()
|
|
||||||
xilinx_ise_synth(project)
|
|
||||||
|
|
||||||
def dep(args):
|
|
||||||
"""Starts the dependencies process."""
|
|
||||||
console_utils.print("Starting dependencies process...")
|
|
||||||
DependencyResolver(project).resolve_all()
|
|
||||||
|
|
||||||
def test(args):
|
|
||||||
"""Starts the test process."""
|
|
||||||
console_utils.print("Starting test process...")
|
|
||||||
build_testbench(project, args.target)
|
|
||||||
run_testbench(project, args.target)
|
|
||||||
|
|
||||||
|
def get_version():
|
||||||
|
try:
|
||||||
|
return version("hdlbuild") # Paketname aus pyproject.toml
|
||||||
|
except PackageNotFoundError:
|
||||||
|
return "unknown"
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
|
version_str = get_version()
|
||||||
parser = argparse.ArgumentParser(
|
parser = argparse.ArgumentParser(
|
||||||
description="hdlbuild - Build management tool for FPGA projects",
|
description=f"hdlbuild v{version_str} - Build management tool for FPGA projects",
|
||||||
formatter_class=argparse.RawTextHelpFormatter
|
formatter_class=argparse.RawTextHelpFormatter
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -60,36 +22,8 @@ def main():
|
|||||||
required=True
|
required=True
|
||||||
)
|
)
|
||||||
|
|
||||||
# Clear command
|
# Register all commands
|
||||||
parser_clear = subparsers.add_parser("clear", help="Clear build artifacts")
|
register_commands(subparsers)
|
||||||
parser_clear.add_argument(
|
|
||||||
"target",
|
|
||||||
nargs="?",
|
|
||||||
choices=["all"],
|
|
||||||
help="Specify 'all' to clear everything (optional)"
|
|
||||||
)
|
|
||||||
parser_clear.set_defaults(func=clear)
|
|
||||||
|
|
||||||
# Build command
|
|
||||||
parser_build = subparsers.add_parser("build", help="Start the build process")
|
|
||||||
parser_build.set_defaults(func=build)
|
|
||||||
|
|
||||||
# Synth command
|
|
||||||
parser_synth = subparsers.add_parser("synth", help="Start the synth process")
|
|
||||||
parser_synth.set_defaults(func=synth)
|
|
||||||
|
|
||||||
# Dependencies command
|
|
||||||
parser_dep = subparsers.add_parser("dep", help="Start the dependencies process")
|
|
||||||
parser_dep.set_defaults(func=dep)
|
|
||||||
|
|
||||||
# Tests command
|
|
||||||
parser_test = subparsers.add_parser("test", help="Start the Tests process")
|
|
||||||
parser_test.set_defaults(func=test)
|
|
||||||
parser_test.add_argument(
|
|
||||||
"target",
|
|
||||||
nargs="?",
|
|
||||||
help="Select the target to test"
|
|
||||||
)
|
|
||||||
|
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
args.func(args)
|
args.func(args)
|
||||||
|
1
src/hdlbuild/commands/__init__.py
Normal file
1
src/hdlbuild/commands/__init__.py
Normal file
@@ -0,0 +1 @@
|
|||||||
|
from .commands import register_commands
|
30
src/hdlbuild/commands/build.py
Normal file
30
src/hdlbuild/commands/build.py
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
from hdlbuild.tools.xilinx_ise.main import xilinx_ise_all, xilinx_ise_synth
|
||||||
|
from hdlbuild.utils.console_utils import ConsoleUtils
|
||||||
|
from hdlbuild.utils.directory_manager import ensure_directories_exist
|
||||||
|
from hdlbuild.utils.project_loader import load_project_config
|
||||||
|
|
||||||
|
class BuildCommand:
|
||||||
|
def __init__(self):
|
||||||
|
self.console_utils = ConsoleUtils("hdlbuild")
|
||||||
|
self.project = load_project_config()
|
||||||
|
|
||||||
|
def register(self, subparsers):
|
||||||
|
parser = subparsers.add_parser("build", help="Start the build process")
|
||||||
|
parser.add_argument(
|
||||||
|
"target",
|
||||||
|
nargs="?",
|
||||||
|
choices=["synth"],
|
||||||
|
help="Specify 'synth' to only synthesize the design (optional)"
|
||||||
|
)
|
||||||
|
parser.set_defaults(func=self.execute)
|
||||||
|
|
||||||
|
def execute(self, args):
|
||||||
|
"""Starts the build process."""
|
||||||
|
if args.target == "synth":
|
||||||
|
self.console_utils.print("Starting synth process...")
|
||||||
|
ensure_directories_exist(True)
|
||||||
|
xilinx_ise_synth(self.project)
|
||||||
|
else:
|
||||||
|
self.console_utils.print("Starting build process...")
|
||||||
|
ensure_directories_exist(True)
|
||||||
|
xilinx_ise_all(self.project)
|
27
src/hdlbuild/commands/clean.py
Normal file
27
src/hdlbuild/commands/clean.py
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
from hdlbuild.utils.console_utils import ConsoleUtils
|
||||||
|
from hdlbuild.utils.directory_manager import clear_build_directories, clear_directories
|
||||||
|
|
||||||
|
class CleanCommand:
|
||||||
|
def __init__(self):
|
||||||
|
self.console_utils = ConsoleUtils("hdlbuild")
|
||||||
|
|
||||||
|
def register(self, subparsers):
|
||||||
|
parser = subparsers.add_parser("clean", help="Clean build artifacts")
|
||||||
|
parser.add_argument(
|
||||||
|
"target",
|
||||||
|
nargs="?",
|
||||||
|
choices=["all"],
|
||||||
|
help="Specify 'all' to clean everything (optional)"
|
||||||
|
)
|
||||||
|
parser.set_defaults(func=self.execute)
|
||||||
|
|
||||||
|
def execute(self, args):
|
||||||
|
"""Cleans the build artifacts."""
|
||||||
|
if args.target == "all":
|
||||||
|
self.console_utils.print("Starting clean all process...")
|
||||||
|
clear_directories()
|
||||||
|
self.console_utils.print("All cleaned.")
|
||||||
|
else:
|
||||||
|
self.console_utils.print("Clearing build artifacts...")
|
||||||
|
clear_build_directories()
|
||||||
|
self.console_utils.print("Build artifacts cleaned.")
|
17
src/hdlbuild/commands/commands.py
Normal file
17
src/hdlbuild/commands/commands.py
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
from hdlbuild.commands.build import BuildCommand
|
||||||
|
from hdlbuild.commands.clean import CleanCommand
|
||||||
|
from hdlbuild.commands.dep import DepCommand
|
||||||
|
from hdlbuild.commands.test import TestCommand
|
||||||
|
|
||||||
|
|
||||||
|
def register_commands(subparsers):
|
||||||
|
"""Registers all available commands."""
|
||||||
|
commands = [
|
||||||
|
CleanCommand(),
|
||||||
|
BuildCommand(),
|
||||||
|
DepCommand(),
|
||||||
|
TestCommand()
|
||||||
|
]
|
||||||
|
|
||||||
|
for command in commands:
|
||||||
|
command.register(subparsers)
|
17
src/hdlbuild/commands/dep.py
Normal file
17
src/hdlbuild/commands/dep.py
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
from hdlbuild.dependencies.resolver import DependencyResolver
|
||||||
|
from hdlbuild.utils.console_utils import ConsoleUtils
|
||||||
|
from hdlbuild.utils.project_loader import load_project_config
|
||||||
|
|
||||||
|
class DepCommand:
|
||||||
|
def __init__(self):
|
||||||
|
self.console_utils = ConsoleUtils("hdlbuild")
|
||||||
|
self.project = load_project_config()
|
||||||
|
|
||||||
|
def register(self, subparsers):
|
||||||
|
parser = subparsers.add_parser("dep", help="Start the dependencies process")
|
||||||
|
parser.set_defaults(func=self.execute)
|
||||||
|
|
||||||
|
def execute(self, args):
|
||||||
|
"""Starts the dependencies process."""
|
||||||
|
self.console_utils.print("Starting dependencies process...")
|
||||||
|
DependencyResolver(self.project).resolve_all()
|
23
src/hdlbuild/commands/test.py
Normal file
23
src/hdlbuild/commands/test.py
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
from hdlbuild.tools.xilinx_ise.isim import build_testbench, run_testbench
|
||||||
|
from hdlbuild.utils.console_utils import ConsoleUtils
|
||||||
|
from hdlbuild.utils.project_loader import load_project_config
|
||||||
|
|
||||||
|
class TestCommand:
|
||||||
|
def __init__(self):
|
||||||
|
self.console_utils = ConsoleUtils("hdlbuild")
|
||||||
|
self.project = load_project_config()
|
||||||
|
|
||||||
|
def register(self, subparsers):
|
||||||
|
parser = subparsers.add_parser("test", help="Start the Tests process")
|
||||||
|
parser.add_argument(
|
||||||
|
"target",
|
||||||
|
nargs="?",
|
||||||
|
help="Select the target to test"
|
||||||
|
)
|
||||||
|
parser.set_defaults(func=self.execute)
|
||||||
|
|
||||||
|
def execute(self, args):
|
||||||
|
"""Starts the test process."""
|
||||||
|
self.console_utils.print("Starting test process...")
|
||||||
|
build_testbench(self.project, args.target)
|
||||||
|
run_testbench(self.project, args.target)
|
Reference in New Issue
Block a user