Question about LV_USE_STDLIB_* and LV_STDLIB_MICROPYTHON

Trying to build Micropython with LVGL 9.3. (ESP32, IDF5.4)

In default lv_conf.h:

/*=========================
   STDLIB WRAPPER SETTINGS
 *=========================*/
/** Possible values
 * - LV_STDLIB_BUILTIN:     LVGL's built in implementation
 * - LV_STDLIB_CLIB:        Standard C functions, like malloc, strlen, etc
 * - LV_STDLIB_MICROPYTHON: MicroPython implementation
 * - LV_STDLIB_RTTHREAD:    RT-Thread implementation
 * - LV_STDLIB_CUSTOM:      Implement the functions externally
 */
#define LV_USE_STDLIB_MALLOC    LV_STDLIB_MICROPYTHON
#define LV_USE_STDLIB_STRING    LV_STDLIB_BUILTIN
#define LV_USE_STDLIB_SPRINTF   LV_STDLIB_BUILTIN

If I change to

#define LV_USE_STDLIB_MALLOC    LV_STDLIB_MICROPYTHON
#define LV_USE_STDLIB_STRING    LV_STDLIB_MICROPYTHON
#define LV_USE_STDLIB_SPRINTF   LV_STDLIB_MICROPYTHON

got error:

undefined reference to `lv_memcpy'
undefined reference to `lv_strlen'
undefined reference to `lv_strcpy'
undefined reference to `lv_strncmp'
...
...

Which is one is better? What’s difference ? :

  • LV_STDLIB_BUILTIN
  • LV_STDLIB_CLIB
  • LV_STDLIB_MICROPYTHON

My feeling said LV_STDLIB_MICROPYTHON would be better. But failed to build using it.

How to solve those build error, if we want to use LV_STDLIB_MICROPYTHON for all?