blob: f03cde9801020ba96d89ab72600cc00a4aca4f7d [file] [log] [blame] [view]
# Integrating a Backend Delegate into ExecuTorch
Disclaimer: We are planning to restructure the repository around delegates.
With that some of these guidelines will change in the future.
This is a high level guideline when integrating a backend delegate with ExecuTorch.
## Directory Structure
Delegate files should be under this directory:
`executorch/backends/<delegate_name>/`. The delegate name should be unique.
## Python Source Files
Delegate Python files such as those implementing `preprocess()` or `partition()`
functions for ExecuTorch AOT flow, excluding any external third-party
dependencies and their files, should be installed and available with
the top level ExecuTorch package. For third-party dependencies, please refer to
[this](./backend-delegates-dependencies.md).
## C++ Source Files
At a minimum, a delegate must provide CMake support for building its C++
sources.
For the CMake setup, the delegate dir should be included by the
top level `CMakeLists.txt` file using `add_subdirectory` CMake command, and
should be built conditionally with an ExecuTorch build flag like
`EXECUTORCH_BUILD_<DELEGATE_NAME>`, see `EXECUTORCH_BUILD_XNNPACK` for example.
For third-party dependencies, please refer to
[this](./backend-delegates-dependencies.md).
Adding buck2 support is optional, but will make the delegate available to more
ExecuTorch users.
<!---
TODO: Add more details. Need to insert a CMake layer in `executorch/backends` to
provide some uniform abstraction across delegates.
--->
## Tests
Tests should be added under `executorch/backends/<delegate_name>/test`. Tests
can be either python or C++ tests. For adding more complex end-to-end (e2e)
tests, please reach out to us.
Common test types:
* Simple python unit tests that test AOT logic such as `partitioner()` or AOT
export flow (generating a `.pte` file from an `nn.Module`)
* Runtime C++ tests, using gtest, that test delegate `init()` or `execute()`
runtime logic.
## Documentation
A delegate must contain a `executorch/backends/<delegate_name>/README.md`
explaining the basics of the delegate, directory structure, features, and known
issues if any.
Any extra setup steps beyond the ones listed above should be documented in
`executorch/backends/<delegate_name>/setup.md`