Link: https://lore.kernel.org/r/20260217200002.683975158@linuxfoundation.org Tested-by: Florian Fainelli <florian.fainelli@broadcom.com> Tested-by: Takeshi Ogasawara <takeshi.ogasawara@futuring-girl.com> Tested-by: Peter Schneider <pschneider1968@googlemail.com> Tested-by: Jon Hunter <jonathanh@nvidia.com> Tested-by: Salvatore Bonaccorso <carnil@debian.org> Tested-by: Brett A C Sheffield <bacs@librecast.net> Tested-by: Mark Brown <broonie@kernel.org> Tested-by: Luna Jernberg <droidbittin@gmail.com> Tested-by: Ronald Warsow <rwarsow@gmx.de> Tested-by: Justin M. Forbes <jforbes@fedoraproject.org> Tested-by: Ron Economos <re@w6rz.net> Tested-by: Miguel Ojeda <ojeda@kernel.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
140 lines
4.0 KiB
Python
Executable File
140 lines
4.0 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
# ex: set filetype=python:
|
|
|
|
"""Translate an XDR specification into executable code that
|
|
can be compiled for the Linux kernel."""
|
|
|
|
__author__ = "Chuck Lever"
|
|
__copyright__ = "Copyright (c) 2024 Oracle and/or its affiliates."
|
|
__license__ = "GPL-2.0 only"
|
|
__version__ = "0.2"
|
|
|
|
import sys
|
|
from pathlib import Path
|
|
import argparse
|
|
|
|
_XDRGEN_DIR = Path(__file__).resolve().parent
|
|
if str(_XDRGEN_DIR) not in sys.path:
|
|
sys.path.insert(0, str(_XDRGEN_DIR))
|
|
|
|
from subcmds import definitions
|
|
from subcmds import declarations
|
|
from subcmds import lint
|
|
from subcmds import source
|
|
|
|
|
|
sys.path.insert(1, "@pythondir@")
|
|
|
|
|
|
def main() -> int:
|
|
"""Parse command-line options"""
|
|
parser = argparse.ArgumentParser(
|
|
formatter_class=argparse.RawDescriptionHelpFormatter,
|
|
description="Convert an XDR specification to Linux kernel source code",
|
|
epilog="""\
|
|
Copyright (c) 2024 Oracle and/or its affiliates.
|
|
|
|
License GPLv2: <http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt>
|
|
This is free software. You are free to change and redistribute it.
|
|
There is NO WARRANTY, to the extent permitted by law.""",
|
|
)
|
|
parser.add_argument(
|
|
"--version",
|
|
help="Display the version of this tool",
|
|
action="version",
|
|
version=__version__,
|
|
)
|
|
|
|
subcommands = parser.add_subparsers(title="Subcommands", required=True)
|
|
|
|
definitions_parser = subcommands.add_parser(
|
|
"definitions", help="Generate XDR definitions"
|
|
)
|
|
definitions_parser.add_argument(
|
|
"--annotate",
|
|
action="store_true",
|
|
default=False,
|
|
help="Add annotation comments",
|
|
)
|
|
definitions_parser.add_argument(
|
|
"--language",
|
|
action="store_true",
|
|
default="C",
|
|
help="Output language",
|
|
)
|
|
definitions_parser.add_argument(
|
|
"--peer",
|
|
choices=["server", "client",],
|
|
default="server",
|
|
help="Generate header code for client or server side",
|
|
type=str,
|
|
)
|
|
definitions_parser.add_argument("filename", help="File containing an XDR specification")
|
|
definitions_parser.set_defaults(func=definitions.subcmd)
|
|
|
|
declarations_parser = subcommands.add_parser(
|
|
"declarations", help="Generate function declarations"
|
|
)
|
|
declarations_parser.add_argument(
|
|
"--annotate",
|
|
action="store_true",
|
|
default=False,
|
|
help="Add annotation comments",
|
|
)
|
|
declarations_parser.add_argument(
|
|
"--language",
|
|
action="store_true",
|
|
default="C",
|
|
help="Output language",
|
|
)
|
|
declarations_parser.add_argument(
|
|
"--peer",
|
|
choices=["server", "client",],
|
|
default="server",
|
|
help="Generate code for client or server side",
|
|
type=str,
|
|
)
|
|
declarations_parser.add_argument("filename", help="File containing an XDR specification")
|
|
declarations_parser.set_defaults(func=declarations.subcmd)
|
|
|
|
linter_parser = subcommands.add_parser("lint", help="Check an XDR specification")
|
|
linter_parser.add_argument("filename", help="File containing an XDR specification")
|
|
linter_parser.set_defaults(func=lint.subcmd)
|
|
|
|
source_parser = subcommands.add_parser(
|
|
"source", help="Generate XDR encoder and decoder source code"
|
|
)
|
|
source_parser.add_argument(
|
|
"--annotate",
|
|
action="store_true",
|
|
default=False,
|
|
help="Add annotation comments",
|
|
)
|
|
source_parser.add_argument(
|
|
"--language",
|
|
action="store_true",
|
|
default="C",
|
|
help="Output language",
|
|
)
|
|
source_parser.add_argument(
|
|
"--peer",
|
|
choices=["server", "client",],
|
|
default="server",
|
|
help="Generate code for client or server side",
|
|
type=str,
|
|
)
|
|
source_parser.add_argument("filename", help="File containing an XDR specification")
|
|
source_parser.set_defaults(func=source.subcmd)
|
|
|
|
args = parser.parse_args()
|
|
return args.func(args)
|
|
|
|
|
|
try:
|
|
if __name__ == "__main__":
|
|
sys.exit(main())
|
|
except SystemExit:
|
|
sys.exit(0)
|
|
except (KeyboardInterrupt, BrokenPipeError):
|
|
sys.exit(1)
|