CIRCT 24.0.0git
Loading...
Searching...
No Matches
esiaccel.codegen.generator.CppGenerator Class Reference
Inheritance diagram for esiaccel.codegen.generator.CppGenerator:
Collaboration diagram for esiaccel.codegen.generator.CppGenerator:

Public Member Functions

None __init__ (self, AcceleratorConnection conn)
str get_consts_str (self, ModuleInfo module_info)
None write_modules (self, Path output_dir, str system_name)
None generate (self, Path output_dir, str system_name)
Public Member Functions inherited from esiaccel.codegen.generator.Generator
None __init__ (self, AcceleratorConnection conn)

Public Attributes

 type_planner = CppTypePlanner(self.manifest.type_table)
 type_emitter = CppTypeEmitter(self.type_planner)
Public Attributes inherited from esiaccel.codegen.generator.Generator
 manifest = conn.manifest()

Protected Member Functions

Dict[str, Instance] _build_module_instance_map (self)
List[Tuple[str, str]] _port_using_aliases (self, CppPortKind kind, str alias_prefix, types.BundlePort port)
CppPortGroup _scalar_port_group (self, str member_name, types.BundlePort port, AppID appid)
CppPortGroup _indexed_ports_group (self, str member_name, str appid_name, List[Tuple[AppID, types.BundlePort]] port_list)
CppPortGroup _mixed_struct_group (self, str member_name, str appid_name, List[Tuple[AppID, types.BundlePort]] port_list)
List[CppPortGroup] _collect_port_groups (self, Dict[AppID, types.BundlePort] ports)
None _emit_module_class (self, str name, str system_name, ModuleInfo module_info, List[CppPortGroup] port_groups, TextIO out)

Static Protected Member Functions

str _sanitize_id (str name)
str _appid_expr (AppID appid)

Protected Attributes

 _conn = conn

Additional Inherited Members

Static Public Attributes inherited from esiaccel.codegen.generator.Generator
Optional language = None

Detailed Description

Generate C++ headers from an ESI manifest.

Definition at line 41 of file generator.py.

Constructor & Destructor Documentation

◆ __init__()

None esiaccel.codegen.generator.CppGenerator.__init__ ( self,
AcceleratorConnection conn )

Definition at line 46 of file generator.py.

References __init__().

Referenced by __init__().

Member Function Documentation

◆ _appid_expr()

str esiaccel.codegen.generator.CppGenerator._appid_expr ( AppID appid)
staticprotected
Return `esi::AppID(...)` expression for an AppID.

Definition at line 118 of file generator.py.

Referenced by _mixed_struct_group(), and _scalar_port_group().

◆ _build_module_instance_map()

Dict[str, Instance] esiaccel.codegen.generator.CppGenerator._build_module_instance_map ( self)
protected
Walk the live hierarchy and return {module_name: first Instance}.

Definition at line 77 of file generator.py.

References _conn.

Referenced by write_modules().

◆ _collect_port_groups()

List[CppPortGroup] esiaccel.codegen.generator.CppGenerator._collect_port_groups ( self,
Dict[AppID, types.BundlePort] ports )
protected
Group `ports` (AppID → BundlePort) into CppPortGroup list.

Definition at line 256 of file generator.py.

References _indexed_ports_group(), _mixed_struct_group(), _sanitize_id(), _scalar_port_group(), and append().

Referenced by write_modules().

◆ _emit_module_class()

None esiaccel.codegen.generator.CppGenerator._emit_module_class ( self,
str name,
str system_name,
ModuleInfo module_info,
List[CppPortGroup] port_groups,
TextIO out )
protected
Emit the full module class to `out`.

Definition at line 301 of file generator.py.

References get_consts_str().

Referenced by write_modules().

◆ _indexed_ports_group()

CppPortGroup esiaccel.codegen.generator.CppGenerator._indexed_ports_group ( self,
str member_name,
str appid_name,
List[Tuple[AppID, types.BundlePort]] port_list )
protected
Build a CppPortGroup for a same-name, same-type indexed port array.

Definition at line 155 of file generator.py.

References _port_using_aliases().

Referenced by _collect_port_groups().

◆ _mixed_struct_group()

CppPortGroup esiaccel.codegen.generator.CppGenerator._mixed_struct_group ( self,
str member_name,
str appid_name,
List[Tuple[AppID, types.BundlePort]] port_list )
protected
Build a CppPortGroup for a same-name, mixed-type indexed port group.

Definition at line 201 of file generator.py.

References _appid_expr(), and _port_using_aliases().

Referenced by _collect_port_groups().

◆ _port_using_aliases()

List[Tuple[str, str]] esiaccel.codegen.generator.CppGenerator._port_using_aliases ( self,
CppPortKind kind,
str alias_prefix,
types.BundlePort port )
protected
Return (alias_name, type_id) pairs to emit as `using` declarations at
module-class scope for the typed-port template parameters.

Definition at line 92 of file generator.py.

References type_emitter.

Referenced by _indexed_ports_group(), _mixed_struct_group(), and _scalar_port_group().

◆ _sanitize_id()

str esiaccel.codegen.generator.CppGenerator._sanitize_id ( str name)
staticprotected
Return a C++-safe identifier from an AppID name.

Definition at line 66 of file generator.py.

References isdigit.

Referenced by _collect_port_groups().

◆ _scalar_port_group()

CppPortGroup esiaccel.codegen.generator.CppGenerator._scalar_port_group ( self,
str member_name,
types.BundlePort port,
AppID appid )
protected
Build a CppPortGroup for a single scalar (non-indexed) port.

Definition at line 126 of file generator.py.

References _appid_expr(), and _port_using_aliases().

Referenced by _collect_port_groups().

◆ generate()

None esiaccel.codegen.generator.CppGenerator.generate ( self,
Path output_dir,
str system_name )

Reimplemented from esiaccel.codegen.generator.Generator.

Definition at line 482 of file generator.py.

References type_emitter, and write_modules().

◆ get_consts_str()

str esiaccel.codegen.generator.CppGenerator.get_consts_str ( self,
ModuleInfo module_info )
Get the C++ code for a constant in a module.

Definition at line 52 of file generator.py.

Referenced by _emit_module_class().

◆ write_modules()

None esiaccel.codegen.generator.CppGenerator.write_modules ( self,
Path output_dir,
str system_name )
Write the C++ header. One for each module in the manifest.

Definition at line 457 of file generator.py.

References _build_module_instance_map(), _collect_port_groups(), _emit_module_class(), esi::backends::cosim::RpcClient::Impl.manifest, and esiaccel.codegen.generator.Generator.manifest.

Referenced by generate().

Member Data Documentation

◆ _conn

esiaccel.codegen.generator.CppGenerator._conn = conn
protected

Definition at line 48 of file generator.py.

Referenced by _build_module_instance_map().

◆ type_emitter

esiaccel.codegen.generator.CppGenerator.type_emitter = CppTypeEmitter(self.type_planner)

Definition at line 50 of file generator.py.

Referenced by _port_using_aliases(), and generate().

◆ type_planner

esiaccel.codegen.generator.CppGenerator.type_planner = CppTypePlanner(self.manifest.type_table)

Definition at line 49 of file generator.py.


The documentation for this class was generated from the following file: