Runtime Platform Abstraction Layer (PAL)¶
The ExecuTorch Platform Abstraction Layer (PAL) provides a way for execution environments to override operations like:
Getting the current time.
Printing a log statement.
Panicking the process/system.
The PAL function declarations are in
executorch/runtime/platform/platform.h
.
Overriding the default PAL¶
The default PAL implementation is in
executorch/runtime/platform/target/Posix.cpp
.
It uses std::chrono::steady_clock
for the time, prints log messages to
stderr
, and makes other default assumptions.
But, if they don’t work for your system, you can override the default PAL by:
Including
executorch/runtime/platform/platform.h
in one of your application’s.c
or.cpp
files.Defining an implementation of one or more of the
et_pal_*()
functions.
The default PAL functions are weak symbols, so providing your own strong-symbol definition can override them at link time. To ensure that your definitions take precedence, you may need to ensure that the strong definitions precede the weak definitions in the link order.
Minimal PAL¶
If you run into build problems because your system doesn’t support the functions
called by Posix.cpp
, you can instead use the no-op minimal PAL at
executorch/runtime/platform/target/Minimal.cpp
by building with the buck2
flag -c executorch.pal_default=minimal
. This will
avoid calling fprintf()
, std::chrono::steady_clock
, and anything else that
Posix.cpp
uses. But since the Minimal.cpp
et_pal_*()
functions are no-ops,
you will need to override all of them.