| # IREE Compiler C API |
| |
| IREE exports three levels of APIs for integrating IREE (and uses these APIs |
| itself for building language bindings and binary tools): |
| |
| * Low-level MLIR API: This API builds on top of the MLIR C-API in order to |
| enable low level access to IR building, transformations and combined |
| pipelines. It provides no defined ABI or API stability guarantees, although |
| best effort is taken to not break the API unnecessarily (similar to how the |
| upstream MLIR C-API is considered). |
| * Tool Entry Points: Entry points for standalone tools (i.e. `iree-compile` |
| and `iree-lld`) are provided as exported C functions to enable the |
| construction of busy-box binaries and other non-library use cases. |
| * Embedding API: The high level compiler API provides programmatic access to |
| the facilities of `iree-compile` and is intended for embedding into an online |
| system which needs to invoke the compiler as a library and is interopping |
| via input and output artifacts (vs direct construction of IR against |
| in-memory data structures). This API is versioned and both API/ABI compatible |
| within a major version. |
| |
| Depending on build configuration, the API is built in the following ways: |
| |
| * Shared library: In this scenario, all of the APIs above are exported into |
| a versioned shared library. |
| * Static library: Used for building a static tool (not enabled by default |
| since it adds build overhead). |
| * Re-export Stub library: A static library which re-exports the Embedding API |
| and provides additional entry-points for binding to a runtime-loaded |
| shared library for the implementation. This is used as a convenience for |
| consumers which need to decouple the interface from the implementation, which |
| can happen in a variety of cases (i.e. avoiding symbol conflicts, integrating |
| across build systems, etc). |
| |
| See the implementation under `compiler/src/iree/compiler/API` (TODO: rename |
| to `ApiImpl`). |