A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://github.com/lvgl/lv_binding_rust/issues/163 below:

Compiling with GCC causes enum alignment issues · Issue #163 · lvgl/lv_binding_rust · GitHub

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:

  1. Don't use GCC as your default compiler and use the ARM Clang compiler instead
  2. Add 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
  3. Add .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 way

I'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