#include #define STRINGIFY(x) #x #define MACRO_STRINGIFY(x) STRINGIFY(x) namespace py = pybind11; void py_init_module_espp(py::module &m); // Hand-written bindings for the `rtps` component (see rtps_bindings.cpp for why they are not // generated). Must run after py_init_module_espp so shared types (e.g. Logger::Verbosity) and the // module's classes are already registered. The cdr component has no python bindings: its C++ API // is template-based, and the python side of a message is a plain pycdr2 dataclass instead (see // the cdr component README). void py_init_rtps(py::module &m); // Hand-written bindings for espp::SocketReactor (litgen cannot parse it; see // socket_reactor_bindings.cpp). Runs after py_init_module_espp so UdpSocket / Socket::Info / // Logger::Verbosity are already registered. void py_init_socket_reactor(py::module &m); // Hand-written bindings for espp::OdriveNative + the fibre stream framing helpers (std::function // accessors with std::error_code& and std::span wire APIs; see odrive_native_bindings.cpp). Runs // after py_init_module_espp so Logger::Verbosity is already registered. void py_init_odrive_native(py::module &m); // This builds the native python extension module `espp._espp`, which the // `espp` python package (python_bindings/espp/__init__.py) re-exports. PYBIND11_MODULE(_espp, m) { #ifdef VERSION_INFO m.attr("__version__") = MACRO_STRINGIFY(VERSION_INFO); #else m.attr("__version__") = "dev"; #endif py_init_module_espp(m); py_init_rtps(m); py_init_socket_reactor(m); py_init_odrive_native(m); }