Please check the build logs for more information.
See Builds for ideas on how to fix a failed build, or Metadata for how to configure docs.rs builds.
If you believe this is docs.rs' fault, open an issue.


System Build Dependencies
In order to build the lvgl project you will need the following system dependencies to be installed:
$ sudo apt install build-essential llvm clang
If you want to build the examples, then you will need to install SDL2 as well.
$ sudo apt install libsdl2-dev
Usage
Edit your Cargo.toml file dependencies with:
$ cargo add lvgl
The build requires the environment variable bellow to be set:
DEP_LV_CONFIG_PATH: Path to the directory containing thelv_conf.hheader file used for configuration of LVGL library.- (Optional)
LVGL_FONTS_DIR: Directory for custom fonts generated for use in LVGL. See the documentation for usage. - (Optional)
LVGL_INCLUDE: C headers to include during the build if using thedriversfeature, comma-separated. The default is/usr/include,/usr/local/include. - (Optional)
LVGL_LINK: C libraries to link in during the build if using thedriversfeature, comma-separated. The default isSDL2.
We recommend the lv_conf.h file to be in your project's root directory. If so, the command to build your project would be:
$ DEP_LV_CONFIG_PATH=`pwd` cargo build
Building for embedded environments
We make use of bindgen for generating the bindings to LittlevGL at build time. There is a problem in cargo when building
for no_std, so we need to use a workaround to build "lvgl-rs". The mainstrem issue in cargo is being tracked at
rust-lang/cargo#7915.
$ DEP_LV_CONFIG_PATH=`pwd` cargo build -Zfeatures=build_dep
The unsafe_no_autoinit feature must also be enabled when building for baremetal targets. See its documentation in Cargo.toml for notes on usage.
LVGL Global Allocator
A global allocator for Rust leveraging the
LVGL memory allocator is provided, but not enabled
by default. Can be enabled by the feature lvgl_alloc. This will make all dynamic memory to be allocated by LVGL
internal memory manager.
Running the demo
Hint for macOS users: Before you run the demos you need to make sure you have libsdl installed on your machine. To install it, use HomeBrew:
$ brew install sdl2
This project contains examples that can run in a desktop simulator.
First, make sure to pull lvgl-rs submodules:
$ git submodule init
$ git submodule update
Then run the demo example:
$ DEP_LV_CONFIG_PATH=`pwd`/examples/include cargo run --example demo --features="alloc"
Feature Support
The bindings are still in development. There are many features of LVGL that needs to be exposed by lvgl-rs. In
this section you can check what is implemented at the moment.
Features
List of LVGL features that impacts the library usage in general.
- Displays: We use
embedded_graphicslibrary to draw to the display, along withlv_drivers. You can uselvgl-rswith any of theembedded_graphicssupported displays, and those supported bylv_drivers. Note:lv_driverssupport is currently experimental. - Events: You can listen and trigger events in widget objects.
- Styles: You can set styles in any exposed object. We are still missing the possibility of defining global base styles.
- Input Devices: Input devices supported by
lv_driverscan be used, and custom handlers can be specified forembedded_graphics. Currently, only pointer input devices are supported. Note:lv_driverssupport is currently experimental. - Fonts: All fonts built-in to LVGL can be used on nightly Rust if the
nightlyfeature is enabled. Custom fonts can also be encoded into a C file (see the documentation on thefontmodule). - Images
- File system
- Animations
- Tasks
Widgets
Widgets currently implemented might have some missing features. If the widget you want to use is not exposed or is missing a feature you want to make use, please send a Pull Request or open an issue.