import os
import subprocess
import sys
+from types import SimpleNamespace
from onelib.CfgRunner import CfgRunner
from onelib.WorkflowRunner import WorkflowRunner
def _get_parser():
- onecc_usage = 'onecc [-h] [-v] [-C CONFIG] [-W WORKFLOW] [-O OPTIMIZATION] [COMMAND <args>]'
+ onecc_usage = 'onecc [-h] [-v] [-C CONFIG] [-b BACKEND] [-W WORKFLOW] [-O OPTIMIZATION] [COMMAND <args>]'
onecc_desc = 'Run ONE driver via several commands or configuration file'
parser = argparse.ArgumentParser(description=onecc_desc, usage=onecc_usage)
parser.add_argument(
'-W', '--workflow', type=str, metavar='WORKFLOW', help='run with workflow file')
+ parser.add_argument(
+ '-b', '--backend', type=str, help='generate code for given backend')
+
# just for help message
compile_group = parser.add_argument_group('compile to circle model')
for tool, desc in subtool_list['compile'].items():
return args
+def _verify_backend_args(parser, args):
+ """
+ verify one-profile, one-codegen arguments
+
+ This verification logic comes from each drivers' codes.
+ """
+ cfgparser = configparser.ConfigParser()
+ cfgparser.optionxform = str
+ cfgparser.read(args.config)
+
+ for driver in ['one-profile', 'one-codegen']:
+ if not driver in cfgparser:
+ continue
+
+ cfg_args = SimpleNamespace()
+ oneutils.parse_cfg(args.config, driver, cfg_args)
+ cmd_backend_exist = oneutils.is_valid_attr(args, 'backend')
+ cfg_backend_exist = oneutils.is_valid_attr(cfg_args, 'backend')
+ cfg_backends_exist = oneutils.is_valid_attr(cfg_args, 'backends')
+
+ if cfg_backend_exist and cfg_backends_exist:
+ parser.error(
+ "'backend' option and 'backends' option cannot be used simultaneously.")
+
+ # Check if given backend from command line exists in the configuration file
+ if cmd_backend_exist and cfg_backend_exist:
+ if args.backend != cfg_args.backend:
+ parser.error('Not found the command of given backend')
+
+ if cfg_backends_exist:
+ cfg_backends = getattr(cfg_args, 'backends').split(',')
+ # check if commands of given backends exist
+ for b in cfg_backends:
+ if not oneutils.is_valid_attr(cfg_args, b):
+ parser.error('Not found the command for ' + b)
+
+ # Check if given backend from command line exists in the configuration file
+ if cmd_backend_exist:
+ if args.backend not in cfg_backends:
+ parser.error('Not found the command of given backend')
+
+
def _verify_arg(parser, args):
"""verify given arguments"""
# check if required arguments is given
if not getattr(args, 'O') in opt_name_list:
parser.error('Invalid optimization option')
+ if oneutils.is_valid_attr(args, 'backend') and oneutils.is_valid_attr(
+ args, 'workflow'):
+ parser.error('\'backend\' option can be used only with \'config\' option')
+
+ if oneutils.is_valid_attr(args, 'backend'):
+ _verify_backend_args(parser, args)
+
def main():
# check if there is subtool argument
runner.detect_import_drivers(bin_dir)
if oneutils.is_valid_attr(args, 'O'):
runner.add_opt(getattr(args, 'O'))
+ if oneutils.is_valid_attr(args, 'backend'):
+ runner.set_backend(args.backend)
runner.run(bin_dir)
elif oneutils.is_valid_attr(args, 'workflow'):
runner = WorkflowRunner(args.workflow)