def _main(): import loader config.configure() models = loader.load_models() return generate(models)
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