Esempio n. 1
0
def main():
    import argparse
    parser = argparse.ArgumentParser(
        description='Exhaustively try project-toolchain combinations')
    parser.add_argument('--project',
                        default=None,
                        nargs="+",
                        help='run given project only (default: all)')
    parser.add_argument('--toolchain',
                        default=None,
                        nargs="+",
                        help='run given toolchain only (default: all)')
    parser.add_argument('--out-prefix',
                        default='build',
                        help='output directory prefix (default: build)')
    parser.add_argument(
        '--build_type',
        default='generic',
        help=
        'Type of build that is performed (e.g. regression test, multiple options, etc.)'
    )
    parser.add_argument('--build', default=None, help='Build number')
    parser.add_argument('--parameters',
                        default=None,
                        help='Tool parameters json file')
    parser.add_argument('--fail', action='store_true', help='fail on error')
    parser.add_argument('--verbose',
                        action='store_true',
                        help='verbose output')

    args = parser.parse_args()

    tasks = Tasks(src_dir)

    args_dict = {"project": args.project, "toolchain": args.toolchain}

    task_list = tasks.get_tasks(args_dict)

    params_file = args.parameters
    params_strings = [None]
    if params_file:
        params_strings = []
        assert len(
            args.toolchain
        ) == 1, "A single toolchain can be selected when running multiple params."

        params_helper = ToolParametersHelper(args.toolchain[0], params_file)
        for params in params_helper.get_all_params_combinations():
            params_strings.append(" ".join(params))

    runner = Runner(task_list, args.verbose, args.out_prefix, root_dir,
                    args.build_type, args.build, params_strings)
    runner.run()
    runner.collect_results()

    result = print_summary_table(args.out_prefix, args.build_type, args.build)

    if not result and args.fail:
        print("ERROR: some tests have failed.")
        exit(1)
Esempio n. 2
0
def main():
    import argparse
    parser = argparse.ArgumentParser(
        description='Exhaustively try project-toolchain-board combinations')
    parser.add_argument('--project',
                        default=None,
                        nargs="+",
                        choices=get_projects(),
                        help='run given project(s) only (default: all)')
    parser.add_argument('--toolchain',
                        default=None,
                        nargs="+",
                        choices=get_toolchains(),
                        help='run given toolchain(s) only (default: all)')
    parser.add_argument('--board',
                        default=None,
                        nargs='+',
                        choices=get_boards(),
                        help='run given board(s) only (default: all)')
    parser.add_argument(
        '--out-prefix',
        default='build/_exhaust-runs',
        help='output directory prefix (default: build/_exhaust-runs)')
    parser.add_argument(
        '--build_type',
        default='generic',
        help=
        'Type of build that is performed (e.g. regression test, multiple options, etc.)'
    )
    parser.add_argument('--build', default=0, help='Build number')
    parser.add_argument('--parameters',
                        default=None,
                        help='Tool parameters json file')
    parser.add_argument('--seed',
                        default=None,
                        help='Seed to assign when running the tools')
    parser.add_argument('--run_config',
                        default=None,
                        help="Run configuration file in JSON format.")
    parser.add_argument('--fail', action='store_true', help='fail on error')
    parser.add_argument('--verbose',
                        action='store_true',
                        help='verbose output')
    parser.add_argument('--overwrite',
                        action='store_true',
                        help='deletes previous exhuast builds before running')

    args = parser.parse_args()

    if args.verbose:
        global logger
        logger = logging.getLogger('MyLogger')
        handler = logging.StreamHandler()
        formatter = logging.Formatter('%(levelname)s: %(message)s')
        handler.setFormatter(formatter)
        logger.addHandler(handler)
        logger.setLevel(logging.DEBUG)
    logger.debug("Parsing Arguments")

    tasks = Tasks(src_dir)

    assert args.run_config is None or args.run_config and not (args.project or
                                                               args.toolchain)

    args_dict = dict()
    seeds = list()
    if args.run_config:
        with open(args.run_config, 'r') as f:
            run_config = json.load(f)
            project = safe_get_dict_value(run_config, "project", None)
            toolchain = safe_get_dict_value(run_config, "toolchain", None)
            seeds = [
                int(i) for i in safe_get_dict_value(run_config, "seeds", [0])
            ]
            build_numbers = [
                int(i)
                for i in safe_get_dict_value(run_config, "build_number", [0])
            ]

            args_dict = {
                "project": project,
                "toolchain": toolchain,
                "board": args.board
            }

    else:
        args_dict = {
            "project": args.project,
            "toolchain": args.toolchain,
            "board": args.board
        }
        seeds = [int(args.seed)] if args.seed else [0]
        build_numbers = [int(args.build)] if args.build else [0]

    params_file = args.parameters
    params_strings = [None]
    if params_file:
        params_strings = []
        assert len(
            args.toolchain
        ) == 1, "A single toolchain can be selected when running multiple params."

        params_helper = ToolParametersHelper(args.toolchain[0], params_file)
        for params in params_helper.get_all_params_combinations():
            params_strings.append(" ".join(params))

    logger.debug("Getting Tasks")
    task_list = tasks.get_tasks(args_dict, seeds, build_numbers,
                                params_strings)

    runner = Runner(task_list, args.verbose, args.out_prefix, root_dir,
                    args.build_type, build_numbers, args.overwrite)

    logger.debug("Running Projects")
    runner.run()

    logger.debug("Collecting Results")
    runner.collect_results()

    logger.debug("Printing Summary Table")
    result = print_summary_table(args.out_prefix, args.project, args.toolchain,
                                 args.board, args.build_type, args.build)

    if not result and args.fail:
        print("ERROR: some tests have failed.")
        exit(1)