CIRCT
22.0.0git
Loading...
Searching...
No Matches
lib
Dialect
ESI
runtime
cpp
include
esi
backends
RpcServer.h
Go to the documentation of this file.
1
//===- RpcServer.h - Run a cosim server -------------------------*- C++ -*-===//
2
//
3
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4
// See https://llvm.org/LICENSE.txt for license information.
5
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6
//
7
//===----------------------------------------------------------------------===//
8
//
9
// Setup and run a server accepting connections via the 'cosim' RPC protocol.
10
// Then, one can request ports to and from the clients.
11
//
12
// Abstract this out to support multi-party communication in the future.
13
//
14
//===----------------------------------------------------------------------===//
15
16
#ifndef ESI_COSIM_RPCSERVER_H
17
#define ESI_COSIM_RPCSERVER_H
18
19
#include "
esi/Context.h
"
20
#include "
esi/Ports.h
"
21
22
namespace
esi
{
23
namespace
cosim {
24
25
/// TODO: make this a proper backend (as much as possible).
26
class
RpcServer
{
27
public
:
28
RpcServer
(
Context
&
ctxt
);
29
~RpcServer
();
30
31
/// Get the context.
32
Context
&
getContext
() {
return
ctxt
; }
33
34
/// Set the manifest and version. There is a race condition here in that the
35
/// RPC server can be started and a connection from the client could happen
36
/// before the manifest is set. TODO: rework the DPI API to require that the
37
/// manifest gets set first.
38
void
setManifest
(
int
esiVersion,
39
const
std::vector<uint8_t> &compressedManifest);
40
41
/// Register a read or write port which communicates over RPC.
42
ReadChannelPort
&
registerReadPort
(
const
std::string &name,
43
const
std::string &type);
44
WriteChannelPort
&
registerWritePort
(
const
std::string &name,
45
const
std::string &type);
46
47
void
stop
();
48
49
// Start the RPC server. If no port is provided, the RPC server will let the
50
// OS pick a port.
51
void
run
(
int
port = -1);
52
53
// Return which port the RPC server is executing on.
54
int
getPort
();
55
56
/// Hide the implementation details from this header file.
57
class
Impl
;
58
59
private
:
60
Context
&
ctxt
;
61
std::unique_ptr<Impl>
impl
;
62
};
63
64
}
// namespace cosim
65
}
// namespace esi
66
67
#endif
// ESI_COSIM_RPCSERVER_H
Context.h
Ports.h
esi::Context
AcceleratorConnections, Accelerators, and Manifests must all share a context.
Definition
Context.h:34
esi::ReadChannelPort
A ChannelPort which reads data from the accelerator.
Definition
Ports.h:318
esi::WriteChannelPort
A ChannelPort which sends data to the accelerator.
Definition
Ports.h:206
esi::cosim::RpcServer::Impl
Definition
RpcServer.cpp:51
esi::cosim::RpcServer
TODO: make this a proper backend (as much as possible).
Definition
RpcServer.h:26
esi::cosim::RpcServer::getPort
int getPort()
Definition
RpcServer.cpp:395
esi::cosim::RpcServer::ctxt
Context & ctxt
Definition
RpcServer.h:60
esi::cosim::RpcServer::registerReadPort
ReadChannelPort & registerReadPort(const std::string &name, const std::string &type)
Register a read or write port which communicates over RPC.
Definition
RpcServer.cpp:373
esi::cosim::RpcServer::run
void run(int port=-1)
Definition
RpcServer.cpp:384
esi::cosim::RpcServer::~RpcServer
~RpcServer()
esi::cosim::RpcServer::stop
void stop()
Definition
RpcServer.cpp:389
esi::cosim::RpcServer::getContext
Context & getContext()
Get the context.
Definition
RpcServer.h:32
esi::cosim::RpcServer::setManifest
void setManifest(int esiVersion, const std::vector< uint8_t > &compressedManifest)
Set the manifest and version.
Definition
RpcServer.cpp:365
esi::cosim::RpcServer::impl
std::unique_ptr< Impl > impl
Definition
RpcServer.h:61
esi::cosim::RpcServer::registerWritePort
WriteChannelPort & registerWritePort(const std::string &name, const std::string &type)
Definition
RpcServer.cpp:380
esi
Definition
esi.py:1
Generated on Wed Dec 17 2025 00:08:54 for CIRCT by
1.9.8