25 #include "mlir-c/Bindings/Python/Interop.h"
26 #include "mlir-c/IR.h"
27 #include "mlir-c/Transforms.h"
28 #include "mlir/Bindings/Python/PybindAdaptors.h"
30 #include "llvm-c/ErrorHandling.h"
31 #include "llvm/Support/Signals.h"
34 #include <pybind11/pybind11.h>
43 mlirRegisterConversionPasses();
44 mlirRegisterTransformsPasses();
48 m.doc() =
"CIRCT Python Native Extension";
50 llvm::sys::PrintStackTraceOnErrorSignal(
"");
51 LLVMEnablePrettyStackTrace();
55 [](py::object capsule) {
57 auto wrappedCapsule = capsule.attr(MLIR_PYTHON_CAPI_PTR_ATTR);
58 MlirContext context = mlirPythonCapsuleToContext(wrappedCapsule.ptr());
61 MlirDialectHandle
comb = mlirGetDialectHandle__comb__();
62 mlirDialectHandleRegisterDialect(
comb, context);
63 mlirDialectHandleLoadDialect(
comb, context);
65 MlirDialectHandle
esi = mlirGetDialectHandle__esi__();
66 mlirDialectHandleRegisterDialect(
esi, context);
67 mlirDialectHandleLoadDialect(
esi, context);
69 MlirDialectHandle
msft = mlirGetDialectHandle__msft__();
70 mlirDialectHandleRegisterDialect(
msft, context);
71 mlirDialectHandleLoadDialect(
msft, context);
73 MlirDialectHandle
hw = mlirGetDialectHandle__hw__();
74 mlirDialectHandleRegisterDialect(
hw, context);
75 mlirDialectHandleLoadDialect(
hw, context);
77 MlirDialectHandle
hwarith = mlirGetDialectHandle__hwarith__();
78 mlirDialectHandleRegisterDialect(
hwarith, context);
79 mlirDialectHandleLoadDialect(
hwarith, context);
81 MlirDialectHandle
om = mlirGetDialectHandle__om__();
82 mlirDialectHandleRegisterDialect(
om, context);
83 mlirDialectHandleLoadDialect(
om, context);
85 MlirDialectHandle
seq = mlirGetDialectHandle__seq__();
86 mlirDialectHandleRegisterDialect(
seq, context);
87 mlirDialectHandleLoadDialect(
seq, context);
89 MlirDialectHandle
sv = mlirGetDialectHandle__sv__();
90 mlirDialectHandleRegisterDialect(
sv, context);
91 mlirDialectHandleLoadDialect(
sv, context);
93 MlirDialectHandle
fsm = mlirGetDialectHandle__fsm__();
94 mlirDialectHandleRegisterDialect(
fsm, context);
95 mlirDialectHandleLoadDialect(
fsm, context);
97 MlirDialectHandle handshake = mlirGetDialectHandle__handshake__();
98 mlirDialectHandleRegisterDialect(handshake, context);
99 mlirDialectHandleLoadDialect(handshake, context);
101 MlirDialectHandle
ltl = mlirGetDialectHandle__ltl__();
102 mlirDialectHandleRegisterDialect(
ltl, context);
103 mlirDialectHandleLoadDialect(
ltl, context);
105 MlirDialectHandle
verif = mlirGetDialectHandle__verif__();
106 mlirDialectHandleRegisterDialect(
verif, context);
107 mlirDialectHandleLoadDialect(
verif, context);
109 "Register CIRCT dialects on a PyMlirContext.");
111 m.def(
"export_verilog", [](MlirModule mod, py::object fileObject) {
113 py::gil_scoped_release();
117 m.def(
"export_split_verilog", [](MlirModule mod, std::string directory) {
118 auto cDirectory = mlirStringRefCreateFromCString(directory.c_str());
122 py::module
esi = m.def_submodule(
"_esi",
"ESI API");
124 py::module
msft = m.def_submodule(
"_msft",
"MSFT API");
126 py::module
hw = m.def_submodule(
"_hw",
"HW API");
128 py::module
seq = m.def_submodule(
"_seq",
"Seq API");
130 py::module
om = m.def_submodule(
"_om",
"OM API");
132 py::module
sv = m.def_submodule(
"_sv",
"SV API");
static void registerPasses()
PYBIND11_MODULE(_circt, m)
MLIR_CAPI_EXPORTED void registerFSMPasses(void)
MLIR_CAPI_EXPORTED void registerHWArithPasses(void)
MLIR_CAPI_EXPORTED void registerHandshakePasses(void)
MLIR_CAPI_EXPORTED void registerSVPasses(void)
MLIR_CAPI_EXPORTED void registerSeqPasses(void)
MLIR_CAPI_EXPORTED MlirLogicalResult mlirExportSplitVerilog(MlirModule, MlirStringRef)
Emits split Verilog files for the specified module into the given directory.
MLIR_CAPI_EXPORTED MlirLogicalResult mlirExportVerilog(MlirModule, MlirStringCallback, void *userData)
Emits verilog for the specified module using the provided callback and user data.
Taken from PybindUtils.h in MLIR.
MlirStringCallback getCallback()
void populateDialectMSFTSubmodule(pybind11::module &m)
void populateDialectOMSubmodule(pybind11::module &m)
void populateDialectHWSubmodule(pybind11::module &m)
void populateDialectESISubmodule(pybind11::module &m)
void populateDialectSeqSubmodule(pybind11::module &m)
void populateDialectSVSubmodule(pybind11::module &m)