Exemplo n.º 1
0
def _main():
    import loader

    config.configure()

    models = loader.load_models()
    return generate(models)
Exemplo n.º 2
0
def _main():
    parser = argparse.ArgumentParser()
    parser.add_argument('-output-dirpath',
                        dest='output_dirpath',
                        type=str,
                        help='Output path')
    parser.add_argument('--parallel',
                        dest='parallel',
                        action='store_true',
                        default=True)
    parser.add_argument('--source-dirpath',
                        dest='source_dirpath',
                        type=str,
                        help='Path to UHDM source')
    args = parser.parse_args()
    config.configure(args)

    print('Generating UHDM models ...')
    print('   Loading models ...')
    models = loader.load_models()
    print(f'   ... found {len(models)} models.')

    print('   Validating ordering ...')
    # Check validity
    index = 0
    order = {}
    for name in models.keys():
        order[name] = index
        index += 1

    for name, model in models.items():
        baseclass = model['extends']
        if baseclass:
            thisIndex = order[name]
            baseIndex = order[baseclass]
            if baseIndex >= thisIndex:
                raise Exception(
                    f'Model {name} should follow {baseclass} in listing.')
    print('   ... all good.')

    params = [
        ('capnp', [models]),
        ('class_hierarchy', [models]),
        ('classes', [models]),
        ('clone_tree_cpp', [models]),
        ('containers_h', [models]),
        ('ElaboratorListener_cpp', [models]),
        ('Copier', [{
            config.get_template_filepath('BaseClass.h'):
            config.get_output_header_filepath('BaseClass.h'),
            config.get_template_filepath('clone_tree.h'):
            config.get_output_header_filepath('clone_tree.h'),
            config.get_template_filepath('ElaboratorListener.h'):
            config.get_output_header_filepath('ElaboratorListener.h'),
            config.get_template_filepath('ExprEval.h'):
            config.get_output_header_filepath('ExprEval.h'),
            config.get_template_filepath('ExprEval.cpp'):
            config.get_output_source_filepath('ExprEval.cpp'),
            config.get_template_filepath('RTTI.h'):
            config.get_output_header_filepath('RTTI.h'),
            config.get_template_filepath('SymbolFactory.h'):
            config.get_output_header_filepath('SymbolFactory.h'),
            config.get_template_filepath('SymbolFactory.cpp'):
            config.get_output_source_filepath('SymbolFactory.cpp'),
            config.get_template_filepath('uhdm_vpi_user.h'):
            config.get_output_header_filepath('uhdm_vpi_user.h'),
            config.get_template_filepath('vpi_uhdm.h'):
            config.get_output_header_filepath('vpi_uhdm.h'),
            config.get_template_filepath('vpi_visitor.h'):
            config.get_output_header_filepath('vpi_visitor.h'),
            config.get_include_filepath('sv_vpi_user.h'):
            config.get_output_header_filepath('sv_vpi_user.h'),
            config.get_include_filepath('vhpi_user.h'):
            config.get_output_header_filepath('vhpi_user.h'),
            config.get_include_filepath('vpi_user.h'):
            config.get_output_header_filepath('vpi_user.h'),
        }]),
        ('serializer', [models]),
        ('uhdm_forward_decl_h', [models]),
        ('uhdm_h', [models]),
        ('uhdm_types_h', [models]),
        ('vpi_listener', [models]),
        ('vpi_user_cpp', [models]),
        ('vpi_visitor_cpp', [models]),
        ('VpiListener_h', [models]),
        ('VpiListenerTracer_h', [models]),
    ]

    if args.parallel:
        with concurrent.futures.ThreadPoolExecutor(max_workers=8) as executor:
            results = list(executor.map(_worker, params))
    else:
        results = [_worker(args) for args in params]
    print('... all done!')

    result = sum([0 if r else 1 for r in results])
    if result:
        print('ERROR: UHDM model generation FAILED!')
    else:
        print('UHDM Models generated successfully!.')

    return result