blob: 8f9f274b9b5c9c42c2fc0c3b2ab8f6503f4d1298 [file] [log] [blame]
"""Conversion utility from flatbuffer JSON files to binary and the reverse."""
# Copyright (c) 2021-2022, ARM Limited.
# SPDX-License-Identifier: Apache-2.0
from pathlib import Path
from typing import Optional
from runner.run_command import run_sh_command
from runner.run_command import RunShCommandError
def fbbin_to_json(flatc: Path, fbs: Path, t_path: Path, o_path: Optional[Path] = None):
"""Convert the binary flatbuffer to JSON.
flatc: the Path to the flatc compiler program
fbs: the Path to the fbs (flatbuffer schema) file
t_path: the Path to the binary flatbuffer file
o_path: the output Path where JSON file will be put, if None, it is same as t_path
"""
if o_path is None:
o_path = t_path.parent
cmd = [
str(flatc.absolute()),
"-o",
str(o_path.absolute()),
"--json",
"--defaults-json",
"--raw-binary",
str(fbs.absolute()),
"--",
str(t_path.absolute()),
]
run_sh_command(verbose=False, full_cmd=cmd)
def json_to_fbbin(flatc: Path, fbs: Path, j_path: Path, o_path: Optional[Path] = None):
"""Convert JSON flatbuffer to binary.
flatc: the Path to the flatc compiler program
fbs: the Path to the fbs (flatbuffer schema) file
j_path: the Path to the JSON flatbuffer file
o_path: the output Path where JSON file will be put, if None, it is same as j_path
"""
if o_path is None:
o_path = j_path.parent
cmd = [
str(flatc.absolute()),
"-o",
str(o_path.absolute()),
"--binary",
str(fbs.absolute()),
str(j_path.absolute()),
]
run_sh_command(verbose=False, full_cmd=cmd)
# ------------------------------------------------------------------------------
def main(argv=None):
"""Load and convert supplied file based on file suffix."""
import argparse
parser = argparse.ArgumentParser()
parser.add_argument(
"--flatc",
type=Path,
default=(
"reference_model/build/thirdparty/serialization_lib/"
"third_party/flatbuffers/flatc"
),
help="the path to the flatc compiler program",
)
parser.add_argument(
"--fbs",
type=Path,
default="conformance_tests/third_party/serialization_lib/schema/tosa.fbs",
help="the path to the flatbuffer schema",
)
parser.add_argument("path", type=Path, help="the path to the file to convert")
args = parser.parse_args(argv)
path = args.path
if not path.is_file():
print(f"Invalid file to convert - {path}")
return 2
if not args.flatc.is_file():
print(f"Invalid flatc compiler - {args.flatc}")
return 2
if not args.fbs.is_file():
print(f"Invalid flatbuffer schema - {args.fbs}")
return 2
try:
if path.suffix == ".json":
json_to_fbbin(args.flatc, args.fbs, path)
else:
# Have to assume this is a binary flatbuffer file as could have any suffix
fbbin_to_json(args.flatc, args.fbs, path)
except RunShCommandError as e:
print(e)
return 1
return 0
if __name__ == "__main__":
exit(main())