By default, GCC targeting embedded platform enables the -fshort-enums
flag which dynamically sizes enums based on the greatest value the enum contains. This results in enums being represented by 1/2/3 bytes rather than the platforms default of 4 bytes.
However, bindgen uses clang which doesn't use -fshort-enums
by default and so always generates bindings to enums with a size of 4 bytes.
As a result, when structures containing enums are passed between Rust and C they are miss aligned as Rust expects 4 bytes for each enum but it could be represented in a smaller number of bytes from the C side of things.
There are a couple of solutions:
cfg.flag("-fno-short-enums");
to cc Build in lvgl-sys/build.rs
script when using GCC which stops the default behaviour of shrinking enums when lvgl-sys is built.clang_arg("-fshort-enums")
to bindings Builder also in lvgl-sys/build.rs
to make Clang in the bindgen to shrink enums in the same wayI'm not sure if any actions need to be taken off these findings, but I just wanted to put this here in case anyone else has a similar prolem.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4