-
-
Notifications
You must be signed in to change notification settings - Fork 45
Description
Description
Introduction
Bindings are currently generated using tools/
based on bindgen. This works okay but have the following cons:
- any updates to original flipper headers require manual regeneration of the sources:
- this also requires some maintainer (i.e. @dcoles) aware of the right generation process (including correct file and environment setup);
- this is hardly reproducible due to non-trivial build order;
- this process is not transparent.
The suggestion
The idea is to replace this approach with a build.rs
-based generation.
I expect this to be in a form of a cross-platform build.rs
in crates/sys
capable of running codegeneration by itself.
Unanswered questions
Original definitions location
It's hard for me to decide what is the best way to store files with original header-definitions. I guess that it is worth looking on other projects utilizing build.rs
for FFI code generation.
One way may be using git submodules, although I look at this as not the best mechanism which is hard to maintain sometimes so looking at alternative approaches is something expected.
We may also be able to utilize api_symbols.csv
provided in firmware repository as it seems to list available functions, but it seems to lack any struct
definitions and type aliases which is a serious limitation.
Version updates
It is also worth discussing the mechanism for performing version updates.
I would suggest following dependabot's approach of performing scheduled update checks. We could theoretically configure GitHub Actions to run on schedule checking for fresh firmware releases and, in case of them being present, run automation to create a PR with header updates.