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.
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.
Adding buck2 support is optional, but will make the delegate available to more ExecuTorch users.
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 annn.Module
)Runtime C++ tests, using gtest, that test delegate
init()
orexecute()
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