xref: /llvm-project/mlir/examples/standalone/python/StandaloneExtensionNanobind.cpp (revision 5cd427477218d8bdb659c6c53a7758f741c3990a)
1 //===- StandaloneExtension.cpp - Extension module -------------------------===//
2 //
3 // This is the nanobind version of the example module. There is also a pybind11
4 // example in StandaloneExtensionPybind11.cpp.
5 //
6 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
7 // See https://llvm.org/LICENSE.txt for license information.
8 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
9 //
10 //===----------------------------------------------------------------------===//
11 
12 #include "Standalone-c/Dialects.h"
13 #include "mlir/Bindings/Python/Nanobind.h"
14 #include "mlir/Bindings/Python/NanobindAdaptors.h"
15 
16 namespace nb = nanobind;
17 
18 NB_MODULE(_standaloneDialectsNanobind, m) {
19   //===--------------------------------------------------------------------===//
20   // standalone dialect
21   //===--------------------------------------------------------------------===//
22   auto standaloneM = m.def_submodule("standalone");
23 
24   standaloneM.def(
25       "register_dialect",
26       [](MlirContext context, bool load) {
27         MlirDialectHandle handle = mlirGetDialectHandle__standalone__();
28         mlirDialectHandleRegisterDialect(handle, context);
29         if (load) {
30           mlirDialectHandleLoadDialect(handle, context);
31         }
32       },
33       nb::arg("context").none() = nb::none(), nb::arg("load") = true);
34 }
35