Running NuttX on ESP32 board

NuttX supports the Expressif ESP32 inclusive with SMP (Symmetric MultiProcessing) support, then I decided to post here the steps I followed to get it working:

Install esptool:

$ sudo pip install esptool

Install to toolchain:

You can download the pre-build toolchain:

https://esp-idf.readthedocs.io/en/latest/get-started/index.html

Or: you can compile it from source code:

$ git clone -b xtensa-1.22.x https://github.com/espressif/crosstool-NG.git
$ cd crosstool-NG
$ ./bootstrap && ./configure --prefix=$PWD && make install
$ ./ct-ng xtensa-esp32-elf
$ unset LD_LIBRARY_PATH
$ ./ct-ng build
$ chmod -R u+w builds/xtensa-esp32-elf
$ sudo cp -a builds/xtensa-esp32-elf/* /usr/local/

Now you can compile the NuttX:

$ mkdir ~/nuttxspace
$ cd ~/nuttxspace
$ git clone https://bitbucket.org/nuttx/nuttx
$ git clone https://bitbucket.org/nuttx/apps
$ cd nuttx
$ make distclean
$ ./tools/configure.sh esp32-core/nsh
$ make

The nuttx.bin generated is too big, you need to generate it from elf file (nuttx) :

$ esptool.py --chip esp32 elf2image --flash_mode dio --flash_size 4MB -o ./nuttx.bin nuttx

You will need the bootloader.bin and the partitions, you can get it from hello word example. You need to clone and update the submodules of esp-idf (read the Get Started from above link), then:

$ cp -a esp-idf/examples/get-started/hello_world .
$ cd hello_world
$ make
$ cp build/bootloader/bootloader.bin ~/nuttxspace/nuttx/
$ cp build/partitions_singleapp.bin ~/nuttxspace/nuttx/partitions.bin

The files nuttx.bin, bootloader.bin and partitions.bin need to be flashed in the board. To do that first put the board in ROM Boot mode:

Press and hold the BOOT button of ESP32 board (IO0 pin will be put in low level) and press and release the RESET button. Now you can release the BOOT button.

This is the command to flash:

$ sudo esptool.py --chip esp32 --port /dev/ttyUSB0 --baud 921600 write_flash 0x1000 bootloader.bin 0x8000 partitions.bin 0x10000 nuttx.bin
esptool.py v2.2
Connecting....
Chip is ESP32D0WDQ6 (revision 0)
Uploading stub...
Running stub...
Stub running...
Changing baud rate to 921600
Changed.
Configuring flash size...
Auto-detected Flash size: 4MB
Flash params set to 0x0220
Compressed 19392 bytes to 11445...
Wrote 19392 bytes (11445 compressed) at 0x00001000 in 0.2 seconds (effective 901.6 kbit/s)...
Hash of data verified.
Compressed 3072 bytes to 82...
Wrote 3072 bytes (82 compressed) at 0x00008000 in 0.0 seconds (effective 10507.6 kbit/s)...
Hash of data verified.
Compressed 185024 bytes to 45527...
Wrote 185024 bytes (45527 compressed) at 0x00010000 in 2.1 seconds (effective 710.2 kbit/s)...
Hash of data verified.

Leaving...
Hard resetting...
$

Finally open minicom and just reset the board, you should get it:

$ minicom


Welcome to minicom 2.7

OPTIONS: I18n 
Compiled on Feb  7 2016, 13:37:27.
Port /dev/ttyUSB0, 15:40:48

Press CTRL-A Z for help on special keys

ets Jun  8 2016 00:22:57

rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
ets Jun  8 2016 00:22:57

rst:0x10 (RTCWDT_RTC_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:2
load:0x3fff0018,len:4
load:0x3fff001c,len:5568
ho 0 tail 12 room 4
load:0x40078000,len:0
load:0x40078000,len:13716
entry 0x40078fb4
I (31) boot: ESP-IDF v3.1-dev-162-geb659e4 2nd stage bootloader
I (31) boot: compile time 15:35:11
I (42) boot: Enabling RNG early entropy source...
I (42) boot: SPI Speed      : 40MHz
I (42) boot: SPI Mode       : DIO
I (45) boot: SPI Flash Size : 4MB
I (49) boot: Partition Table:
I (52) boot: ## Label            Usage          Type ST Offset   Length
I (60) boot:  0 nvs              WiFi data        01 02 00009000 00006000
I (67) boot:  1 phy_init         RF data          01 01 0000f000 00001000
I (75) boot:  2 factory          factory app      00 00 00010000 00100000
I (82) boot: End of partition table
I (86) esp_image: segment 0: paddr=0x00010020 vaddr=0x3ffb0df0 size=0x00054 (    84) load
I (95) esp_image: segment 1: paddr=0x0001007c vaddr=0x40080000 size=0x00400 (  1024) load
I (104) esp_image: segment 2: paddr=0x00010484 vaddr=0x40080400 size=0x00300 (   768) load
I (113) esp_image: segment 3: paddr=0x0001078c vaddr=0x400c0000 size=0x00000 (     0) load
I (122) esp_image: segment 4: paddr=0x00010794 vaddr=0x00000000 size=0x0f874 ( 63604) 
I (153) esp_image: segment 5: paddr=0x00020010 vaddr=0x3f400010 size=0x018e4 (  6372) map
I (155) esp_image: segment 6: paddr=0x000218fc vaddr=0x00000000 size=0x0e714 ( 59156) 
I (179) esp_image: segment 7: paddr=0x00030018 vaddr=0x400d0018 size=0x0d278 ( 53880) map
I (199) boot: Loaded app from partition at offset 0x10000
I (199) boot: Disabling RNG early entropy source...

NuttShell (NSH)
nsh> 
nsh> ?
help usage:  help [-v] []

  [           cmp         false       mkdir       rm          true        
  ?           dirname     free        mh          rmdir       uname       
  basename    dd          help        mount       set         umount      
  break       df          hexdump     mv          sh          unset       
  cat         echo        kill        mw          sleep       usleep      
  cd          exec        ls          ps          test        xd          
  cp          exit        mb          pwd         time        

Builtin Apps:
nsh>

Advertisements

How to get IRC notification on pidgin

I use pidgin as my centralized message application (Google Hangout, Jabber, ICQ, …) and also to get messages from freenode IRC.

But there is an issue with #IRC support on pidgin: I don’t know when someone posted a new message in the channel (#nuttx channel of course).

Then search about it a found a solution here:

https://ubuntuforums.org/showthread.php?t=1415173

There is a program called pidgin-irc-notifications that helps:

https://bitbucket.org/boralyl/pidgin-irc-notifications/overview

Note: I need to install pynotify first:

$ sudo pip install py-notify

Using FAT32 long file names on NuttX

NuttX supports FAT32 with long file names, but there is some details that you need to know to get it working. I will share here the issues that I was facing and how I fixed it.

The original FAT uses 8.3 (8 chars for name and 3 chars for extension), but it can supports files with up to 255 characters (including the extension).

To use it we need to enable long file name support in the menuconfig:

 File Systems  --->
     [*] FAT file system
     [*]   FAT upper/lower names
     [*]   FAT long file names             -------->  (CONFIG_FAT_LFN=y)
     (255)   FAT maximum file name size    -------->  (CONFIG_FAT_MAXFNAME=255)

Initially I will mount an empty SDCard to do my tests:

NuttShell (NSH)

nsh> mount -t vfat /dev/mmcsd0 /mnt

nsh> ls /mnt
/mnt:

nsh>

Let’s to create a small 8.3 file that will be renamed:

nsh> echo "Small file" > /mnt/tinyfile.txt
nsh> ls -l /mnt/tinyfile.txt
 -rw-rw-rw-      12 /mnt/tinyfile.txt
nsh>

Now I will try to rename it to a file with a long name:

nsh> mv /mnt/tinyfile.txt /mnt/this_is_a_file_with_a_long_name_jnsh>

Strange, while I was typing “this_is_a_file_with_a_long_name_just_for_test.txt” the typing was interrupted and the nsh> appeared.

Let see if the file was renamed:

nsh> ls /mnt
/mnt:
 this_is_a_file_with_a_long_name_

Then I remembered that the max line size of NSH was just 60 (CONFIG_NSH_LINELEN=60), I will increase it to 300 characters:

Application Configuration  --->
    NSH Library  --->
          Command Line Configuration  --->
              (300) Max command line length    -------->  (CONFIG_NSH_LINELEN=300)

I will create a tinyfile.txt again and try to rename it:

nsh> mv /mnt/tinyfile.txt /mnt/this_is_a_file_with_a_long_name_just_for_test.txt
nsh> 

Right, now the nsh prompt accept the enter the name, but let see if the file was created correctly:

nsh> ls /mnt
/mnt:
 this_is_a_file_with_a_long_name_
 this_is_a_file_with_a_long_name_

Whoa, it created two files with same name? How it is possible? Don’t worry, these files are different. Opening the SDCard in the Linux I can see:

this_is_a_file_with_a_long_name_j
this_is_a_file_with_a_long_name_just_for_test.txt

So, the LS command is showing only 32 characters. After some investigation I discovered that CONFIG_NAME_MAX=32 was the issue. Let to increase it to 255:

RTOS Features  --->
    Files and I/O  --->
        (255) Maximum size of a file name    -------->  (CONFIG_NAME_MAX=255)

Now I can see the files:

nsh> ls /mnt
/mnt:
 this_is_a_file_with_a_long_name_j
 this_is_a_file_with_a_long_name_just_for_test.txt

My next step is to create a file with 255 characters, like this:

this_file_will_have_a_big_filename_to_verify_how_to_work_with_files_with_long_names_our_test_need_to_have_the_max_filename_size_supported_by_fat32_that_means_it_could_have_up_to_255_characters_including_the_extension_in_the_filename_so_here_we_arrived.txt

nsh> echo "Test" > /mnt/this_file_will_have_a_big_filename_to_verify_how_to_work_with_files_with_long_names_our_test_need_to_have_the_max_filename_size_supported_by_fat32_that_means_it_could_have_up_to_255_characters_including_the_extension_in_the_filename_so_here_we_arrived.txt
nsh> ls /mnt
/mnt:
 this_file_will_have_a_big_filename_to_verify_how_to_work_with_files_with_long_names_our_test_need_to_have_the_max_filename_size_supported_by_fat32_that_means_it_could_have_up_to_255_characters_including_the_extension_in_the_filename_so_here_we_arrived.txt
nsh> 

Very nice! It worked correctly.

As you can see NuttX is similar to Linux kernel, many features depends on other features’ configuration. They are inter-dependent.

Fashing a bad firmware can drive your crazy

I put by XMC4500 in a state where OpenOCD was unable the communicate with it:

$ sudo openocd -f board/xmc4500-relax.cfg -c init -c "reset halt" -c "flash write_image erase nuttx.bin 0x0c000000"
Open On-Chip Debugger 0.10.0+dev-00172-g7719e96 (2017-11-12-09:13)
Licensed under GNU GPL v2
For bug reports, read
	http://openocd.org/doc/doxygen/bugs.html
adapter speed: 4000 kHz
cortex_m reset_config sysresetreq
adapter speed: 1000 kHz
Info : No device selected, using first device.
Info : J-Link Lite-XMC4000 Rev.1 compiled Apr  2 2015 18:25:20
Info : Hardware version: 1.00
Info : VTarget = 3.300 V
Info : clock speed 1000 kHz
Info : SWD DPIDR 0x2ba01477
Info : SWD DPIDR 0x2ba01477
Info : SWD DPIDR 0x2ba01477
Info : SWD DPIDR 0x2ba01477
Info : SWD DPIDR 0x2ba01477
Info : SWD DPIDR 0x2ba01477
Info : SWD DPIDR 0x2ba01477
Info : SWD DPIDR 0x2ba01477
Info : SWD DPIDR 0x2ba01477
Info : SWD DPIDR 0x2ba01477
Info : SWD DPIDR 0x2ba01477
Info : SWD DPIDR 0x2ba01477
Info : SWD DPIDR 0x2ba01477
Info : SWD DPIDR 0x2ba01477
Info : SWD DPIDR 0x2ba01477
Info : SWD DPIDR 0x2ba01477
Info : SWD DPIDR 0x2ba01477
Info : SWD DPIDR 0x2ba01477
Info : SWD DPIDR 0x2ba01477
Info : SWD DPIDR 0x2ba01477
Info : SWD DPIDR 0x2ba01477
Info : SWD DPIDR 0x2ba01477
Info : SWD DPIDR 0x2ba01477
Info : SWD DPIDR 0x2ba01477
Info : SWD DPIDR 0x2ba01477
Info : SWD DPIDR 0x2ba01477
Info : SWD DPIDR 0x2ba01477
Info : SWD DPIDR 0x2ba01477
Info : SWD DPIDR 0x2ba01477
Info : SWD DPIDR 0x2ba01477
Info : SWD DPIDR 0x2ba01477
Error: Could not initialize the debug port
Info : SWD DPIDR 0x2ba01477
Info : SWD DPIDR 0x2ba01477
Info : SWD DPIDR 0x2ba01477
Info : SWD DPIDR 0x2ba01477
Info : SWD DPIDR 0x2ba01477
Info : SWD DPIDR 0x2ba01477
Info : SWD DPIDR 0x2ba01477
Info : SWD DPIDR 0x2ba01477
Info : SWD DPIDR 0x2ba01477
Info : SWD DPIDR 0x2ba01477
Info : SWD DPIDR 0x2ba01477
Info : SWD DPIDR 0x2ba01477
Info : SWD DPIDR 0x2ba01477
Info : SWD DPIDR 0x2ba01477
Info : SWD DPIDR 0x2ba01477
Info : SWD DPIDR 0x2ba01477
Info : SWD DPIDR 0x2ba01477
Info : SWD DPIDR 0x2ba01477
Info : SWD DPIDR 0x2ba01477
Info : SWD DPIDR 0x2ba01477
Info : SWD DPIDR 0x2ba01477
Info : SWD DPIDR 0x2ba01477
Info : SWD DPIDR 0x2ba01477
Info : SWD DPIDR 0x2ba01477
Info : SWD DPIDR 0x2ba01477
Info : SWD DPIDR 0x2ba01477
Info : SWD DPIDR 0x2ba01477
Info : SWD DPIDR 0x2ba01477
Info : SWD DPIDR 0x2ba01477
Info : SWD DPIDR 0x2ba01477
Info : SWD DPIDR 0x2ba01477
Error: Could not initialize the debug port
Error: Target not examined, reset NOT asserted!
in procedure 'reset' 
in procedure 'ocd_bouncer'

What happened?

I just changed BOARD_SYSDIV :

#  define BOARD_SYSDIV              0

But in clockconfig.c it does:

  /* Setup fSYS clock */

  regval  = (BOARD_ENABLE_PLL << SCU_SYSCLKCR_SYSSEL);
  regval |= SCU_SYSCLKCR_SYSDIV(BOARD_SYSDIV);
  putreg32(regval, XMC4_SCU_SYSCLKCR);

SCU_SYSCLKCR_SYSDIV is defined this way:

#  define SCU_SYSCLKCR_SYSDIV(n)    ((uint32_t)((n)-1) << SCU_SYSCLKCR_SYSDIV_SHIFT)

So, it wrote 0xffffffff to SCU_SYSCLKCR register. :-/

Then I tried to flash using JLinkExe from Segger, but it also didn’t work:

$ JLinkExe -if SWD
SEGGER J-Link Commander V6.14h (Compiled May 10 2017 18:39:45)
DLL version V6.14h, compiled May 10 2017 18:39:37

Connecting to J-Link via USB...O.K.
Firmware: J-Link Lite-XMC4000 Rev.1 compiled Apr  2 2015 18:25:20
Hardware version: V1.00
S/N: 551014400
VTref = 3.300V


Type "connect" to establish a target connection, '?' for help
J-Link>connect
Please specify device / core. : XMC4500-1024
Type '?' for selection dialog
Device>
Specify target interface speed [kHz]. : 4000 kHz
Speed>
Device "XMC4500-1024" selected.


Performing XMC4500 connection sequence.
No AP preselected. Assuming that AP[0] is the AHB-AP
AP-IDR: 0x24770011, Type: AHB-AP
AHB-AP ROM: 0xE00FF000 (Base addr. of first ROM table)
Found Cortex-M4 r0p1, Little endian.
FPUnit: 6 code (BP) slots and 2 literal slots
CoreSight components:
ROMTbl[0] @ E00FF000
ROMTbl[0][0]: E000E000, CID: B105E00D, PID: 000BB00C SCS
ROMTbl[0][1]: E0001000, CID: B105E00D, PID: 003BB002 DWT
ROMTbl[0][2]: E0002000, CID: B105E00D, PID: 002BB003 FPB
ROMTbl[0][3]: E0000000, CID: B105E00D, PID: 003BB001 ITM
ROMTbl[0][4]: E0040000, CID: B105900D, PID: 000BB9A1 TPIU
ROMTbl[0][5]: E0041000, CID: B105900D, PID: 000BB925 ETM
Cortex-M4 identified.
J-Link>loadbin ./nuttx.bin 0
Downloading file [./nuttx.bin]...
Writing target memory failed.

Fortunately the “erase” command worked:

J-Link>erase
Erasing device (XMC4500-1024)...
Comparing flash   [100%] Done.
Erasing flash     [100%] Done.
Verifying flash   [100%] Done.
J-Link: Flash download: Total time needed: 22.650s (Prepare: 0.041s, Compare: 0.000s, Erase: 22.604s, Program: 0.000s, Verify: 0.000s, Restore: 0.004s)
Erasing done.

But even after the flash erase the programming is not working:

J-Link>loadbin ./nuttx.bin 0
Downloading file [./nuttx.bin]...
Writing target memory failed.
J-Link>

Then I decided to try OpenOCD again:

$ sudo openocd -f board/xmc4500-relax.cfg
Open On-Chip Debugger 0.10.0+dev-00172-g7719e96 (2017-11-12-09:13)
Licensed under GNU GPL v2
For bug reports, read
	http://openocd.org/doc/doxygen/bugs.html
adapter speed: 4000 kHz
cortex_m reset_config sysresetreq
adapter speed: 1000 kHz
Info : No device selected, using first device.
Info : J-Link Lite-XMC4000 Rev.1 compiled Apr  2 2015 18:25:20
Info : Hardware version: 1.00
Info : VTarget = 3.300 V
Info : clock speed 1000 kHz
Info : SWD DPIDR 0x2ba01477
Info : xmc4500.cpu: hardware has 6 breakpoints, 4 watchpoints
Info : accepting 'telnet' connection on tcp/4444

And using telnet I tried to send the reset command:

$ telnet 127.0.0.1 4444
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
Open On-Chip Debugger
> reset halt
timed out while waiting for target halted
TARGET: xmc4500.cpu - Not halted
in procedure 'reset' 
in procedure 'ocd_bouncer'


Halt timed out, wake up GDB.
> 

At this moment I thought my board could be damaged, but I decided to try to flash it anyway:

> flash write_image erase nuttx.bin 0x0c000000
auto erase enabled
Cannot communicate... target not halted.
auto_probe failed

Hmm, let to test only “halt” instead of “reset halt” :

> halt
target halted due to debug-request, current mode: Thread 
xPSR: 0x41000000 pc: 0x000000e6 msp: 0x2000ff3c

Good, now let to try again:

> flash write_image erase nuttx.bin 0x0c000000
auto erase enabled
Clearing flash status
Clearing flash status
wrote 81920 bytes from file nuttx.bin in 17.523651s (4.565 KiB/s)

Very good, my board is live again!

How to avoid cloning full git repository

I was used to clone the NuttX git repository all the time I need a clean copy. But this is not a good idea, because it waste time and increase the network traffic.

Sebastien Loquert gave a suggestion to improve it:

$ sudo mkdir /opt/nuttx

$ cd /opt/nuttx

$ git clone https://bitbucket.org/nuttx/nuttx

$ git clone https://bitbucket.org/nuttx/apps

$ cd ~/nuttxspace

$ git clone /opt/nuttx/nuttx nuttx

$ git clone /opt/nuttx/apps apps

$ cd nuttx

$ git pull

$ cd ../apps

$ git pull

This simple tips will reduce the time I waste download the full repository and will reduce the network traffic. It is important if you are using 3G/4G and you pay by amount of the downloaded data.

NuttX now supports LVGL

If you follow my blog you know my previous post was about LVGL. Today I want to announce that LVGL was ported to run on NuttX.

Gábor Kiss-Vámosi the author of LVGL ported it to run on top of NuttX, using NuttX’s framebuffer support.

It is in early stage, it needs more integration to support touchscreen, mouse, keyboard and maybe even audio subsystem integration, but it was the first step!

A picture is worth a thousand words:

Littlev Graphics Library for Embedded

Do you know the LVGL? This is a great open-source library developed in C for low-end microcontrollers. This lib has many features from “high-end” graphical libs, but is small enough to fit on microcontrollers.

You can use it on bare-metal, Linux and even on NuttX! If you want to test it there is a simulator developed using SDL2 library (you need to have the lib dev installed), just follow these steps:

Clone the project:

$ git clone https://github.com/littlevgl/proj_pc
Cloning into 'proj_pc'...
remote: Counting objects: 594, done.
remote: Compressing objects: 100% (60/60), done.
remote: Total 594 (delta 49), reused 61 (delta 25), pack-reused 507
Receiving objects: 100% (594/594), 2.61 MiB | 1023.00 KiB/s, done.
Resolving deltas: 100% (290/290), done.
Checking connectivity... done.

Move to dev5 branch:

$ cd proj_pc

$ git checkout -b dev5 origin/dev-5.0

Initialize the needed submodules:

$ git submodule update --init
Submodule 'lv_drivers' (https://github.com/littlevgl/lv_drivers.git) registered for path 'lv_drivers'
Submodule 'lv_examples' (https://github.com/littlevgl/lv_examples.git) registered for path 'lv_examples'
Submodule 'lvgl' (https://github.com/littlevgl/lvgl.git) registered for path 'lvgl'
Cloning into 'lv_drivers'...
remote: Counting objects: 77, done.
remote: Compressing objects: 100% (47/47), done.
remote: Total 77 (delta 42), reused 60 (delta 28), pack-reused 0
Unpacking objects: 100% (77/77), done.
Checking connectivity... done.
Submodule path 'lv_drivers': checked out '1f53b924e902a30476589e34709929d8fd9b3372'
Cloning into 'lv_examples'...
remote: Counting objects: 745, done.
remote: Compressing objects: 100% (305/305), done.
remote: Total 745 (delta 259), reused 407 (delta 192), pack-reused 247
Receiving objects: 100% (745/745), 1.09 MiB | 769.00 KiB/s, done.
Resolving deltas: 100% (378/378), done.
Checking connectivity... done.
Submodule path 'lv_examples': checked out '5ef8c0f0f151e27968d386ba25aa8a5d1ed7d15f'
Cloning into 'lvgl'...
remote: Counting objects: 6213, done.
remote: Total 6213 (delta 0), reused 0 (delta 0), pack-reused 6213
Receiving objects: 100% (6213/6213), 4.13 MiB | 936.00 KiB/s, done.
Resolving deltas: 100% (4931/4931), done.
Checking connectivity... done.
Submodule path 'lvgl': checked out '11c2d5dce403f98dc88d1420b1c773a1ea05ecba'

Type “make” to compile it:

$ make
rm -f demo ./main.o ./lvgl/lv_draw/lv_draw_vbasic.o ./lvgl/lv_draw/lv_draw.o ./lvgl/lv_draw/lv_draw_rbasic.o ./lvgl/lv_misc/lv_font.o ./lvgl/lv_misc/lv_circ.o ./lvgl/lv_misc/lv_area.o ./lvgl/lv_misc/lv_task.o ./lvgl/lv_misc/lv_fs.o ./lvgl/lv_misc/lv_anim.o ./lvgl/lv_misc/lv_fonts/dejavu_80.o ./lvgl/lv_misc/lv_fonts/dejavu_30_latin_ext_a.o ./lvgl/lv_misc/lv_fonts/symbol_20_feedback.o ./lvgl/lv_misc/lv_fonts/dejavu_10_cyrillic.o ./lvgl/lv_misc/lv_fonts/dejavu_60_latin_ext_a.o ./lvgl/lv_misc/lv_fonts/dejavu_80_sup.o ./lvgl/lv_misc/lv_fonts/dejavu_30_latin_ext_b.o ./lvgl/lv_misc/lv_fonts/dejavu_80_cyrillic.o ./lvgl/lv_misc/lv_fonts/dejavu_60_cyrillic.o ./lvgl/lv_misc/lv_fonts/symbol_30_file.o ./lvgl/lv_misc/lv_fonts/symbol_40_file.o ./lvgl/lv_misc/lv_fonts/symbol_30_basic.o ./lvgl/lv_misc/lv_fonts/symbol_10_feedback.o ./lvgl/lv_misc/lv_fonts/symbol_60_file.o ./lvgl/lv_misc/lv_fonts/dejavu_30_sup.o ./lvgl/lv_misc/lv_fonts/dejavu_40_cyrillic.o ./lvgl/lv_misc/lv_fonts/dejavu_40_latin_ext_a.o ./lvgl/lv_misc/lv_fonts/symbol_30_feedback.o ./lvgl/lv_misc/lv_fonts/dejavu_20_latin_ext_a.o ./lvgl/lv_misc/lv_fonts/dejavu_60_latin_ext_b.o ./lvgl/lv_misc/lv_fonts/symbol_80_file.o ./lvgl/lv_misc/lv_fonts/symbol_60_feedback.o ./lvgl/lv_misc/lv_fonts/symbol_40_feedback.o ./lvgl/lv_misc/lv_fonts/dejavu_20_cyrillic.o ./lvgl/lv_misc/lv_fonts/dejavu_60_sup.o ./lvgl/lv_misc/lv_fonts/dejavu_10_sup.o ./lvgl/lv_misc/lv_fonts/dejavu_20_sup.o ./lvgl/lv_misc/lv_fonts/symbol_10_basic.o ./lvgl/lv_misc/lv_fonts/dejavu_30_cyrillic.o ./lvgl/lv_misc/lv_fonts/symbol_60_basic.o ./lvgl/lv_misc/lv_fonts/dejavu_80_latin_ext_a.o ./lvgl/lv_misc/lv_fonts/dejavu_60.o ./lvgl/lv_misc/lv_fonts/dejavu_40_sup.o ./lvgl/lv_misc/lv_fonts/symbol_80_feedback.o ./lvgl/lv_misc/lv_fonts/dejavu_20.o ./lvgl/lv_misc/lv_fonts/dejavu_20_latin_ext_b.o ./lvgl/lv_misc/lv_fonts/dejavu_10.o ./lvgl/lv_misc/lv_fonts/symbol_20_file.o ./lvgl/lv_misc/lv_fonts/dejavu_40.o ./lvgl/lv_misc/lv_fonts/dejavu_30.o ./lvgl/lv_misc/lv_fonts/symbol_20_basic.o ./lvgl/lv_misc/lv_fonts/symbol_40_basic.o ./lvgl/lv_misc/lv_fonts/dejavu_40_latin_ext_b.o ./lvgl/lv_misc/lv_fonts/symbol_80_basic.o ./lvgl/lv_misc/lv_fonts/dejavu_10_latin_ext_b.o ./lvgl/lv_misc/lv_fonts/symbol_10_file.o ./lvgl/lv_misc/lv_fonts/dejavu_80_latin_ext_b.o ./lvgl/lv_misc/lv_fonts/dejavu_10_latin_ext_a.o ./lvgl/lv_misc/lv_mem.o ./lvgl/lv_misc/lv_templ.o ./lvgl/lv_misc/lv_ll.o ./lvgl/lv_misc/lv_color.o ./lvgl/lv_misc/lv_txt.o ./lvgl/lv_misc/lv_ufs.o ./lvgl/lv_misc/lv_trigo.o ./lvgl/lv_objx/lv_roller.o ./lvgl/lv_objx/lv_ddlist.o ./lvgl/lv_objx/lv_page.o ./lvgl/lv_objx/lv_list.o ./lvgl/lv_objx/lv_ta.o ./lvgl/lv_objx/lv_tabview.o ./lvgl/lv_objx/lv_btn.o ./lvgl/lv_objx/lv_kb.o ./lvgl/lv_objx/lv_bar.o ./lvgl/lv_objx/lv_lmeter.o ./lvgl/lv_objx/lv_cb.o ./lvgl/lv_objx/lv_slider.o ./lvgl/lv_objx/lv_win.o ./lvgl/lv_objx/lv_label.o ./lvgl/lv_objx/lv_line.o ./lvgl/lv_objx/lv_mbox.o ./lvgl/lv_objx/lv_sw.o ./lvgl/lv_objx/lv_led.o ./lvgl/lv_objx/lv_chart.o ./lvgl/lv_objx/lv_img.o ./lvgl/lv_objx/lv_gauge.o ./lvgl/lv_objx/lv_objx_templ.o ./lvgl/lv_objx/lv_btnm.o ./lvgl/lv_objx/lv_cont.o ./lvgl/lv_hal/lv_hal_indev.o ./lvgl/lv_hal/lv_hal_tick.o ./lvgl/lv_hal/lv_hal_disp.o ./lvgl/lv_themes/lv_theme_alien.o ./lvgl/lv_themes/lv_theme_templ.o ./lvgl/lv_themes/lv_theme.o ./lvgl/lv_themes/lv_theme_night.o ./lvgl/lv_themes/lv_theme_default.o ./lvgl/lv_obj/lv_group.o ./lvgl/lv_obj/lv_vdb.o ./lvgl/lv_obj/lv_obj.o ./lvgl/lv_obj/lv_style.o ./lvgl/lv_obj/lv_indev.o ./lvgl/lv_obj/lv_refr.o  ./lv_drivers/display/monitor.o ./lv_drivers/display/SSD1963.o ./lv_drivers/display/ST7565.o ./lv_drivers/display/fbdev.o ./lv_drivers/display/R61581.o ./lv_drivers/indev/FT5406EE8.o ./lv_drivers/indev/keyboard.o ./lv_drivers/indev/XPT2046.o ./lv_drivers/indev/mouse.o  ./lv_examples/lv_tests/lv_test_group/lv_test_group.o ./lv_examples/lv_tests/lv_test_objx/lv_test_kb/lv_test_kb.o ./lv_examples/lv_tests/lv_test_objx/lv_test_bar/lv_test_bar.o ./lv_examples/lv_tests/lv_test_objx/lv_test_gauge/lv_test_gauge.o ./lv_examples/lv_tests/lv_test_objx/lv_test_btn/lv_test_btn.o ./lv_examples/lv_tests/lv_test_objx/lv_test_sw/lv_test_sw.o ./lv_examples/lv_tests/lv_test_objx/lv_test_chart/lv_test_chart.o ./lv_examples/lv_tests/lv_test_objx/lv_test_mbox/lv_test_mbox.o ./lv_examples/lv_tests/lv_test_objx/lv_test_img/lv_test_img.o ./lv_examples/lv_tests/lv_test_objx/lv_test_img/img_flower_icon.o ./lv_examples/lv_tests/lv_test_objx/lv_test_ta/lv_test_ta.o ./lv_examples/lv_tests/lv_test_objx/lv_test_btnm/lv_test_btnm.o ./lv_examples/lv_tests/lv_test_objx/lv_test_line/lv_test_line.o ./lv_examples/lv_tests/lv_test_objx/lv_test_tabview/lv_test_tabview.o ./lv_examples/lv_tests/lv_test_objx/lv_test_list/lv_test_list.o ./lv_examples/lv_tests/lv_test_objx/lv_test_win/lv_test_win.o ./lv_examples/lv_tests/lv_test_objx/lv_test_led/lv_test_led.o ./lv_examples/lv_tests/lv_test_objx/lv_test_cont/lv_test_cont.o ./lv_examples/lv_tests/lv_test_objx/lv_test_cb/lv_test_cb.o ./lv_examples/lv_tests/lv_test_objx/lv_test_slider/lv_test_slider.o ./lv_examples/lv_tests/lv_test_objx/lv_test_page/lv_test_page.o ./lv_examples/lv_tests/lv_test_objx/lv_test_label/lv_test_label.o ./lv_examples/lv_tests/lv_test_objx/lv_test_roller/lv_test_roller.o ./lv_examples/lv_tests/lv_test_objx/lv_test_ddlist/lv_test_ddlist.o ./lv_examples/lv_tests/lv_test_objx/lv_test_lmeter/lv_test_lmeter.o ./lv_examples/lv_tests/lv_test_theme/lv_test_theme.o ./lv_examples/lv_tests/lv_test_obj/lv_test_obj.o ./lv_examples/lv_apps/terminal/terminal.o ./lv_examples/lv_apps/benchmark/benchmark.o ./lv_examples/lv_apps/sysmon/sysmon.o ./lv_examples/lv_apps/files/files.o ./lv_examples/lv_apps/demo/demo.o ./lv_examples/lv_apps/demo/img_bubble_pattern.o ./lv_examples/lv_tutorial/7_button_ctrl/lv_ex_button_ctrl.o ./lv_examples/lv_tutorial/6_anti_aliasing/lv_ex_anti_aliasing.o ./lv_examples/lv_tutorial/8_encoder_ctrl/lv_ex_encoder_ctrl.o ./lv_examples/lv_tutorial/9_keyboard_ctrl/lv_ex_keyboard_ctrl.o ./lv_examples/lv_tutorial/5_animations/lv_ex_animations.o ./lv_examples/lv_tutorial/3_styles/lv_ex_styles.o ./lv_examples/lv_tutorial/2_objects/lv_ex_objects.o ./lv_examples/lv_tutorial/10_mouse_ctrl/lv_ex_mouse_ctrl.o ./lv_examples/lv_tutorial/1_hello_world/lv_ex_hello_world.o ./lv_examples/lv_tutorial/4_responsive/lv_ex_responsive.o 
gcc  -Wall -O3 -I./ -c main.c -o main.o
gcc  -Wall -O3 -I./ -c lvgl/lv_draw/lv_draw_vbasic.c -o lvgl/lv_draw/lv_draw_vbasic.o
gcc  -Wall -O3 -I./ -c lvgl/lv_draw/lv_draw.c -o lvgl/lv_draw/lv_draw.o
gcc  -Wall -O3 -I./ -c lvgl/lv_draw/lv_draw_rbasic.c -o lvgl/lv_draw/lv_draw_rbasic.o
gcc  -Wall -O3 -I./ -c lvgl/lv_misc/lv_font.c -o lvgl/lv_misc/lv_font.o
gcc  -Wall -O3 -I./ -c lvgl/lv_misc/lv_circ.c -o lvgl/lv_misc/lv_circ.o
gcc  -Wall -O3 -I./ -c lvgl/lv_misc/lv_area.c -o lvgl/lv_misc/lv_area.o
gcc  -Wall -O3 -I./ -c lvgl/lv_misc/lv_task.c -o lvgl/lv_misc/lv_task.o
gcc  -Wall -O3 -I./ -c lvgl/lv_misc/lv_fs.c -o lvgl/lv_misc/lv_fs.o
gcc  -Wall -O3 -I./ -c lvgl/lv_misc/lv_anim.c -o lvgl/lv_misc/lv_anim.o
gcc  -Wall -O3 -I./ -c lvgl/lv_misc/lv_fonts/dejavu_80.c -o lvgl/lv_misc/lv_fonts/dejavu_80.o
gcc  -Wall -O3 -I./ -c lvgl/lv_misc/lv_fonts/dejavu_30_latin_ext_a.c -o lvgl/lv_misc/lv_fonts/dejavu_30_latin_ext_a.o
gcc  -Wall -O3 -I./ -c lvgl/lv_misc/lv_fonts/symbol_20_feedback.c -o lvgl/lv_misc/lv_fonts/symbol_20_feedback.o
gcc  -Wall -O3 -I./ -c lvgl/lv_misc/lv_fonts/dejavu_10_cyrillic.c -o lvgl/lv_misc/lv_fonts/dejavu_10_cyrillic.o
gcc  -Wall -O3 -I./ -c lvgl/lv_misc/lv_fonts/dejavu_60_latin_ext_a.c -o lvgl/lv_misc/lv_fonts/dejavu_60_latin_ext_a.o
gcc  -Wall -O3 -I./ -c lvgl/lv_misc/lv_fonts/dejavu_80_sup.c -o lvgl/lv_misc/lv_fonts/dejavu_80_sup.o
gcc  -Wall -O3 -I./ -c lvgl/lv_misc/lv_fonts/dejavu_30_latin_ext_b.c -o lvgl/lv_misc/lv_fonts/dejavu_30_latin_ext_b.o
gcc  -Wall -O3 -I./ -c lvgl/lv_misc/lv_fonts/dejavu_80_cyrillic.c -o lvgl/lv_misc/lv_fonts/dejavu_80_cyrillic.o
gcc  -Wall -O3 -I./ -c lvgl/lv_misc/lv_fonts/dejavu_60_cyrillic.c -o lvgl/lv_misc/lv_fonts/dejavu_60_cyrillic.o
gcc  -Wall -O3 -I./ -c lvgl/lv_misc/lv_fonts/symbol_30_file.c -o lvgl/lv_misc/lv_fonts/symbol_30_file.o
gcc  -Wall -O3 -I./ -c lvgl/lv_misc/lv_fonts/symbol_40_file.c -o lvgl/lv_misc/lv_fonts/symbol_40_file.o
gcc  -Wall -O3 -I./ -c lvgl/lv_misc/lv_fonts/symbol_30_basic.c -o lvgl/lv_misc/lv_fonts/symbol_30_basic.o
gcc  -Wall -O3 -I./ -c lvgl/lv_misc/lv_fonts/symbol_10_feedback.c -o lvgl/lv_misc/lv_fonts/symbol_10_feedback.o
gcc  -Wall -O3 -I./ -c lvgl/lv_misc/lv_fonts/symbol_60_file.c -o lvgl/lv_misc/lv_fonts/symbol_60_file.o
gcc  -Wall -O3 -I./ -c lvgl/lv_misc/lv_fonts/dejavu_30_sup.c -o lvgl/lv_misc/lv_fonts/dejavu_30_sup.o
gcc  -Wall -O3 -I./ -c lvgl/lv_misc/lv_fonts/dejavu_40_cyrillic.c -o lvgl/lv_misc/lv_fonts/dejavu_40_cyrillic.o
gcc  -Wall -O3 -I./ -c lvgl/lv_misc/lv_fonts/dejavu_40_latin_ext_a.c -o lvgl/lv_misc/lv_fonts/dejavu_40_latin_ext_a.o
gcc  -Wall -O3 -I./ -c lvgl/lv_misc/lv_fonts/symbol_30_feedback.c -o lvgl/lv_misc/lv_fonts/symbol_30_feedback.o
gcc  -Wall -O3 -I./ -c lvgl/lv_misc/lv_fonts/dejavu_20_latin_ext_a.c -o lvgl/lv_misc/lv_fonts/dejavu_20_latin_ext_a.o
gcc  -Wall -O3 -I./ -c lvgl/lv_misc/lv_fonts/dejavu_60_latin_ext_b.c -o lvgl/lv_misc/lv_fonts/dejavu_60_latin_ext_b.o
gcc  -Wall -O3 -I./ -c lvgl/lv_misc/lv_fonts/symbol_80_file.c -o lvgl/lv_misc/lv_fonts/symbol_80_file.o
gcc  -Wall -O3 -I./ -c lvgl/lv_misc/lv_fonts/symbol_60_feedback.c -o lvgl/lv_misc/lv_fonts/symbol_60_feedback.o
gcc  -Wall -O3 -I./ -c lvgl/lv_misc/lv_fonts/symbol_40_feedback.c -o lvgl/lv_misc/lv_fonts/symbol_40_feedback.o
gcc  -Wall -O3 -I./ -c lvgl/lv_misc/lv_fonts/dejavu_20_cyrillic.c -o lvgl/lv_misc/lv_fonts/dejavu_20_cyrillic.o
gcc  -Wall -O3 -I./ -c lvgl/lv_misc/lv_fonts/dejavu_60_sup.c -o lvgl/lv_misc/lv_fonts/dejavu_60_sup.o
gcc  -Wall -O3 -I./ -c lvgl/lv_misc/lv_fonts/dejavu_10_sup.c -o lvgl/lv_misc/lv_fonts/dejavu_10_sup.o
gcc  -Wall -O3 -I./ -c lvgl/lv_misc/lv_fonts/dejavu_20_sup.c -o lvgl/lv_misc/lv_fonts/dejavu_20_sup.o
gcc  -Wall -O3 -I./ -c lvgl/lv_misc/lv_fonts/symbol_10_basic.c -o lvgl/lv_misc/lv_fonts/symbol_10_basic.o
gcc  -Wall -O3 -I./ -c lvgl/lv_misc/lv_fonts/dejavu_30_cyrillic.c -o lvgl/lv_misc/lv_fonts/dejavu_30_cyrillic.o
gcc  -Wall -O3 -I./ -c lvgl/lv_misc/lv_fonts/symbol_60_basic.c -o lvgl/lv_misc/lv_fonts/symbol_60_basic.o
gcc  -Wall -O3 -I./ -c lvgl/lv_misc/lv_fonts/dejavu_80_latin_ext_a.c -o lvgl/lv_misc/lv_fonts/dejavu_80_latin_ext_a.o
gcc  -Wall -O3 -I./ -c lvgl/lv_misc/lv_fonts/dejavu_60.c -o lvgl/lv_misc/lv_fonts/dejavu_60.o
gcc  -Wall -O3 -I./ -c lvgl/lv_misc/lv_fonts/dejavu_40_sup.c -o lvgl/lv_misc/lv_fonts/dejavu_40_sup.o
gcc  -Wall -O3 -I./ -c lvgl/lv_misc/lv_fonts/symbol_80_feedback.c -o lvgl/lv_misc/lv_fonts/symbol_80_feedback.o
gcc  -Wall -O3 -I./ -c lvgl/lv_misc/lv_fonts/dejavu_20.c -o lvgl/lv_misc/lv_fonts/dejavu_20.o
gcc  -Wall -O3 -I./ -c lvgl/lv_misc/lv_fonts/dejavu_20_latin_ext_b.c -o lvgl/lv_misc/lv_fonts/dejavu_20_latin_ext_b.o
gcc  -Wall -O3 -I./ -c lvgl/lv_misc/lv_fonts/dejavu_10.c -o lvgl/lv_misc/lv_fonts/dejavu_10.o
gcc  -Wall -O3 -I./ -c lvgl/lv_misc/lv_fonts/symbol_20_file.c -o lvgl/lv_misc/lv_fonts/symbol_20_file.o
gcc  -Wall -O3 -I./ -c lvgl/lv_misc/lv_fonts/dejavu_40.c -o lvgl/lv_misc/lv_fonts/dejavu_40.o
gcc  -Wall -O3 -I./ -c lvgl/lv_misc/lv_fonts/dejavu_30.c -o lvgl/lv_misc/lv_fonts/dejavu_30.o
gcc  -Wall -O3 -I./ -c lvgl/lv_misc/lv_fonts/symbol_20_basic.c -o lvgl/lv_misc/lv_fonts/symbol_20_basic.o
gcc  -Wall -O3 -I./ -c lvgl/lv_misc/lv_fonts/symbol_40_basic.c -o lvgl/lv_misc/lv_fonts/symbol_40_basic.o
gcc  -Wall -O3 -I./ -c lvgl/lv_misc/lv_fonts/dejavu_40_latin_ext_b.c -o lvgl/lv_misc/lv_fonts/dejavu_40_latin_ext_b.o
gcc  -Wall -O3 -I./ -c lvgl/lv_misc/lv_fonts/symbol_80_basic.c -o lvgl/lv_misc/lv_fonts/symbol_80_basic.o
gcc  -Wall -O3 -I./ -c lvgl/lv_misc/lv_fonts/dejavu_10_latin_ext_b.c -o lvgl/lv_misc/lv_fonts/dejavu_10_latin_ext_b.o
gcc  -Wall -O3 -I./ -c lvgl/lv_misc/lv_fonts/symbol_10_file.c -o lvgl/lv_misc/lv_fonts/symbol_10_file.o
gcc  -Wall -O3 -I./ -c lvgl/lv_misc/lv_fonts/dejavu_80_latin_ext_b.c -o lvgl/lv_misc/lv_fonts/dejavu_80_latin_ext_b.o
gcc  -Wall -O3 -I./ -c lvgl/lv_misc/lv_fonts/dejavu_10_latin_ext_a.c -o lvgl/lv_misc/lv_fonts/dejavu_10_latin_ext_a.o
gcc  -Wall -O3 -I./ -c lvgl/lv_misc/lv_mem.c -o lvgl/lv_misc/lv_mem.o
gcc  -Wall -O3 -I./ -c lvgl/lv_misc/lv_templ.c -o lvgl/lv_misc/lv_templ.o
gcc  -Wall -O3 -I./ -c lvgl/lv_misc/lv_ll.c -o lvgl/lv_misc/lv_ll.o
gcc  -Wall -O3 -I./ -c lvgl/lv_misc/lv_color.c -o lvgl/lv_misc/lv_color.o
gcc  -Wall -O3 -I./ -c lvgl/lv_misc/lv_txt.c -o lvgl/lv_misc/lv_txt.o
gcc  -Wall -O3 -I./ -c lvgl/lv_misc/lv_ufs.c -o lvgl/lv_misc/lv_ufs.o
gcc  -Wall -O3 -I./ -c lvgl/lv_misc/lv_trigo.c -o lvgl/lv_misc/lv_trigo.o
gcc  -Wall -O3 -I./ -c lvgl/lv_objx/lv_roller.c -o lvgl/lv_objx/lv_roller.o
gcc  -Wall -O3 -I./ -c lvgl/lv_objx/lv_ddlist.c -o lvgl/lv_objx/lv_ddlist.o
gcc  -Wall -O3 -I./ -c lvgl/lv_objx/lv_page.c -o lvgl/lv_objx/lv_page.o
gcc  -Wall -O3 -I./ -c lvgl/lv_objx/lv_list.c -o lvgl/lv_objx/lv_list.o
gcc  -Wall -O3 -I./ -c lvgl/lv_objx/lv_ta.c -o lvgl/lv_objx/lv_ta.o
gcc  -Wall -O3 -I./ -c lvgl/lv_objx/lv_tabview.c -o lvgl/lv_objx/lv_tabview.o
gcc  -Wall -O3 -I./ -c lvgl/lv_objx/lv_btn.c -o lvgl/lv_objx/lv_btn.o
gcc  -Wall -O3 -I./ -c lvgl/lv_objx/lv_kb.c -o lvgl/lv_objx/lv_kb.o
gcc  -Wall -O3 -I./ -c lvgl/lv_objx/lv_bar.c -o lvgl/lv_objx/lv_bar.o
gcc  -Wall -O3 -I./ -c lvgl/lv_objx/lv_lmeter.c -o lvgl/lv_objx/lv_lmeter.o
gcc  -Wall -O3 -I./ -c lvgl/lv_objx/lv_cb.c -o lvgl/lv_objx/lv_cb.o
gcc  -Wall -O3 -I./ -c lvgl/lv_objx/lv_slider.c -o lvgl/lv_objx/lv_slider.o
gcc  -Wall -O3 -I./ -c lvgl/lv_objx/lv_win.c -o lvgl/lv_objx/lv_win.o
gcc  -Wall -O3 -I./ -c lvgl/lv_objx/lv_label.c -o lvgl/lv_objx/lv_label.o
gcc  -Wall -O3 -I./ -c lvgl/lv_objx/lv_line.c -o lvgl/lv_objx/lv_line.o
gcc  -Wall -O3 -I./ -c lvgl/lv_objx/lv_mbox.c -o lvgl/lv_objx/lv_mbox.o
gcc  -Wall -O3 -I./ -c lvgl/lv_objx/lv_sw.c -o lvgl/lv_objx/lv_sw.o
gcc  -Wall -O3 -I./ -c lvgl/lv_objx/lv_led.c -o lvgl/lv_objx/lv_led.o
gcc  -Wall -O3 -I./ -c lvgl/lv_objx/lv_chart.c -o lvgl/lv_objx/lv_chart.o
gcc  -Wall -O3 -I./ -c lvgl/lv_objx/lv_img.c -o lvgl/lv_objx/lv_img.o
gcc  -Wall -O3 -I./ -c lvgl/lv_objx/lv_gauge.c -o lvgl/lv_objx/lv_gauge.o
gcc  -Wall -O3 -I./ -c lvgl/lv_objx/lv_objx_templ.c -o lvgl/lv_objx/lv_objx_templ.o
gcc  -Wall -O3 -I./ -c lvgl/lv_objx/lv_btnm.c -o lvgl/lv_objx/lv_btnm.o
gcc  -Wall -O3 -I./ -c lvgl/lv_objx/lv_cont.c -o lvgl/lv_objx/lv_cont.o
gcc  -Wall -O3 -I./ -c lvgl/lv_hal/lv_hal_indev.c -o lvgl/lv_hal/lv_hal_indev.o
gcc  -Wall -O3 -I./ -c lvgl/lv_hal/lv_hal_tick.c -o lvgl/lv_hal/lv_hal_tick.o
gcc  -Wall -O3 -I./ -c lvgl/lv_hal/lv_hal_disp.c -o lvgl/lv_hal/lv_hal_disp.o
gcc  -Wall -O3 -I./ -c lvgl/lv_themes/lv_theme_alien.c -o lvgl/lv_themes/lv_theme_alien.o
gcc  -Wall -O3 -I./ -c lvgl/lv_themes/lv_theme_templ.c -o lvgl/lv_themes/lv_theme_templ.o
gcc  -Wall -O3 -I./ -c lvgl/lv_themes/lv_theme.c -o lvgl/lv_themes/lv_theme.o
gcc  -Wall -O3 -I./ -c lvgl/lv_themes/lv_theme_night.c -o lvgl/lv_themes/lv_theme_night.o
gcc  -Wall -O3 -I./ -c lvgl/lv_themes/lv_theme_default.c -o lvgl/lv_themes/lv_theme_default.o
gcc  -Wall -O3 -I./ -c lvgl/lv_obj/lv_group.c -o lvgl/lv_obj/lv_group.o
gcc  -Wall -O3 -I./ -c lvgl/lv_obj/lv_vdb.c -o lvgl/lv_obj/lv_vdb.o
gcc  -Wall -O3 -I./ -c lvgl/lv_obj/lv_obj.c -o lvgl/lv_obj/lv_obj.o
gcc  -Wall -O3 -I./ -c lvgl/lv_obj/lv_style.c -o lvgl/lv_obj/lv_style.o
gcc  -Wall -O3 -I./ -c lvgl/lv_obj/lv_indev.c -o lvgl/lv_obj/lv_indev.o
gcc  -Wall -O3 -I./ -c lvgl/lv_obj/lv_refr.c -o lvgl/lv_obj/lv_refr.o
gcc  -Wall -O3 -I./ -c lv_drivers/display/monitor.c -o lv_drivers/display/monitor.o
gcc  -Wall -O3 -I./ -c lv_drivers/display/SSD1963.c -o lv_drivers/display/SSD1963.o
gcc  -Wall -O3 -I./ -c lv_drivers/display/ST7565.c -o lv_drivers/display/ST7565.o
gcc  -Wall -O3 -I./ -c lv_drivers/display/fbdev.c -o lv_drivers/display/fbdev.o
gcc  -Wall -O3 -I./ -c lv_drivers/display/R61581.c -o lv_drivers/display/R61581.o
gcc  -Wall -O3 -I./ -c lv_drivers/indev/FT5406EE8.c -o lv_drivers/indev/FT5406EE8.o
gcc  -Wall -O3 -I./ -c lv_drivers/indev/keyboard.c -o lv_drivers/indev/keyboard.o
gcc  -Wall -O3 -I./ -c lv_drivers/indev/XPT2046.c -o lv_drivers/indev/XPT2046.o
gcc  -Wall -O3 -I./ -c lv_drivers/indev/mouse.c -o lv_drivers/indev/mouse.o
gcc  -Wall -O3 -I./ -c lv_examples/lv_tests/lv_test_group/lv_test_group.c -o lv_examples/lv_tests/lv_test_group/lv_test_group.o
gcc  -Wall -O3 -I./ -c lv_examples/lv_tests/lv_test_objx/lv_test_kb/lv_test_kb.c -o lv_examples/lv_tests/lv_test_objx/lv_test_kb/lv_test_kb.o
gcc  -Wall -O3 -I./ -c lv_examples/lv_tests/lv_test_objx/lv_test_bar/lv_test_bar.c -o lv_examples/lv_tests/lv_test_objx/lv_test_bar/lv_test_bar.o
gcc  -Wall -O3 -I./ -c lv_examples/lv_tests/lv_test_objx/lv_test_gauge/lv_test_gauge.c -o lv_examples/lv_tests/lv_test_objx/lv_test_gauge/lv_test_gauge.o
gcc  -Wall -O3 -I./ -c lv_examples/lv_tests/lv_test_objx/lv_test_btn/lv_test_btn.c -o lv_examples/lv_tests/lv_test_objx/lv_test_btn/lv_test_btn.o
gcc  -Wall -O3 -I./ -c lv_examples/lv_tests/lv_test_objx/lv_test_sw/lv_test_sw.c -o lv_examples/lv_tests/lv_test_objx/lv_test_sw/lv_test_sw.o
gcc  -Wall -O3 -I./ -c lv_examples/lv_tests/lv_test_objx/lv_test_chart/lv_test_chart.c -o lv_examples/lv_tests/lv_test_objx/lv_test_chart/lv_test_chart.o
gcc  -Wall -O3 -I./ -c lv_examples/lv_tests/lv_test_objx/lv_test_mbox/lv_test_mbox.c -o lv_examples/lv_tests/lv_test_objx/lv_test_mbox/lv_test_mbox.o
gcc  -Wall -O3 -I./ -c lv_examples/lv_tests/lv_test_objx/lv_test_img/lv_test_img.c -o lv_examples/lv_tests/lv_test_objx/lv_test_img/lv_test_img.o
gcc  -Wall -O3 -I./ -c lv_examples/lv_tests/lv_test_objx/lv_test_img/img_flower_icon.c -o lv_examples/lv_tests/lv_test_objx/lv_test_img/img_flower_icon.o
gcc  -Wall -O3 -I./ -c lv_examples/lv_tests/lv_test_objx/lv_test_ta/lv_test_ta.c -o lv_examples/lv_tests/lv_test_objx/lv_test_ta/lv_test_ta.o
gcc  -Wall -O3 -I./ -c lv_examples/lv_tests/lv_test_objx/lv_test_btnm/lv_test_btnm.c -o lv_examples/lv_tests/lv_test_objx/lv_test_btnm/lv_test_btnm.o
gcc  -Wall -O3 -I./ -c lv_examples/lv_tests/lv_test_objx/lv_test_line/lv_test_line.c -o lv_examples/lv_tests/lv_test_objx/lv_test_line/lv_test_line.o
gcc  -Wall -O3 -I./ -c lv_examples/lv_tests/lv_test_objx/lv_test_tabview/lv_test_tabview.c -o lv_examples/lv_tests/lv_test_objx/lv_test_tabview/lv_test_tabview.o
gcc  -Wall -O3 -I./ -c lv_examples/lv_tests/lv_test_objx/lv_test_list/lv_test_list.c -o lv_examples/lv_tests/lv_test_objx/lv_test_list/lv_test_list.o
gcc  -Wall -O3 -I./ -c lv_examples/lv_tests/lv_test_objx/lv_test_win/lv_test_win.c -o lv_examples/lv_tests/lv_test_objx/lv_test_win/lv_test_win.o
gcc  -Wall -O3 -I./ -c lv_examples/lv_tests/lv_test_objx/lv_test_led/lv_test_led.c -o lv_examples/lv_tests/lv_test_objx/lv_test_led/lv_test_led.o
gcc  -Wall -O3 -I./ -c lv_examples/lv_tests/lv_test_objx/lv_test_cont/lv_test_cont.c -o lv_examples/lv_tests/lv_test_objx/lv_test_cont/lv_test_cont.o
gcc  -Wall -O3 -I./ -c lv_examples/lv_tests/lv_test_objx/lv_test_cb/lv_test_cb.c -o lv_examples/lv_tests/lv_test_objx/lv_test_cb/lv_test_cb.o
gcc  -Wall -O3 -I./ -c lv_examples/lv_tests/lv_test_objx/lv_test_slider/lv_test_slider.c -o lv_examples/lv_tests/lv_test_objx/lv_test_slider/lv_test_slider.o
gcc  -Wall -O3 -I./ -c lv_examples/lv_tests/lv_test_objx/lv_test_page/lv_test_page.c -o lv_examples/lv_tests/lv_test_objx/lv_test_page/lv_test_page.o
gcc  -Wall -O3 -I./ -c lv_examples/lv_tests/lv_test_objx/lv_test_label/lv_test_label.c -o lv_examples/lv_tests/lv_test_objx/lv_test_label/lv_test_label.o
gcc  -Wall -O3 -I./ -c lv_examples/lv_tests/lv_test_objx/lv_test_roller/lv_test_roller.c -o lv_examples/lv_tests/lv_test_objx/lv_test_roller/lv_test_roller.o
gcc  -Wall -O3 -I./ -c lv_examples/lv_tests/lv_test_objx/lv_test_ddlist/lv_test_ddlist.c -o lv_examples/lv_tests/lv_test_objx/lv_test_ddlist/lv_test_ddlist.o
gcc  -Wall -O3 -I./ -c lv_examples/lv_tests/lv_test_objx/lv_test_lmeter/lv_test_lmeter.c -o lv_examples/lv_tests/lv_test_objx/lv_test_lmeter/lv_test_lmeter.o
gcc  -Wall -O3 -I./ -c lv_examples/lv_tests/lv_test_theme/lv_test_theme.c -o lv_examples/lv_tests/lv_test_theme/lv_test_theme.o
gcc  -Wall -O3 -I./ -c lv_examples/lv_tests/lv_test_obj/lv_test_obj.c -o lv_examples/lv_tests/lv_test_obj/lv_test_obj.o
gcc  -Wall -O3 -I./ -c lv_examples/lv_apps/terminal/terminal.c -o lv_examples/lv_apps/terminal/terminal.o
gcc  -Wall -O3 -I./ -c lv_examples/lv_apps/benchmark/benchmark.c -o lv_examples/lv_apps/benchmark/benchmark.o
gcc  -Wall -O3 -I./ -c lv_examples/lv_apps/sysmon/sysmon.c -o lv_examples/lv_apps/sysmon/sysmon.o
gcc  -Wall -O3 -I./ -c lv_examples/lv_apps/files/files.c -o lv_examples/lv_apps/files/files.o
gcc  -Wall -O3 -I./ -c lv_examples/lv_apps/demo/demo.c -o lv_examples/lv_apps/demo/demo.o
gcc  -Wall -O3 -I./ -c lv_examples/lv_apps/demo/img_bubble_pattern.c -o lv_examples/lv_apps/demo/img_bubble_pattern.o
gcc  -Wall -O3 -I./ -c lv_examples/lv_tutorial/7_button_ctrl/lv_ex_button_ctrl.c -o lv_examples/lv_tutorial/7_button_ctrl/lv_ex_button_ctrl.o
gcc  -Wall -O3 -I./ -c lv_examples/lv_tutorial/6_anti_aliasing/lv_ex_anti_aliasing.c -o lv_examples/lv_tutorial/6_anti_aliasing/lv_ex_anti_aliasing.o
gcc  -Wall -O3 -I./ -c lv_examples/lv_tutorial/8_encoder_ctrl/lv_ex_encoder_ctrl.c -o lv_examples/lv_tutorial/8_encoder_ctrl/lv_ex_encoder_ctrl.o
gcc  -Wall -O3 -I./ -c lv_examples/lv_tutorial/9_keyboard_ctrl/lv_ex_keyboard_ctrl.c -o lv_examples/lv_tutorial/9_keyboard_ctrl/lv_ex_keyboard_ctrl.o
gcc  -Wall -O3 -I./ -c lv_examples/lv_tutorial/5_animations/lv_ex_animations.c -o lv_examples/lv_tutorial/5_animations/lv_ex_animations.o
gcc  -Wall -O3 -I./ -c lv_examples/lv_tutorial/3_styles/lv_ex_styles.c -o lv_examples/lv_tutorial/3_styles/lv_ex_styles.o
gcc  -Wall -O3 -I./ -c lv_examples/lv_tutorial/2_objects/lv_ex_objects.c -o lv_examples/lv_tutorial/2_objects/lv_ex_objects.o
gcc  -Wall -O3 -I./ -c lv_examples/lv_tutorial/10_mouse_ctrl/lv_ex_mouse_ctrl.c -o lv_examples/lv_tutorial/10_mouse_ctrl/lv_ex_mouse_ctrl.o
gcc  -Wall -O3 -I./ -c lv_examples/lv_tutorial/1_hello_world/lv_ex_hello_world.c -o lv_examples/lv_tutorial/1_hello_world/lv_ex_hello_world.o
gcc  -Wall -O3 -I./ -c lv_examples/lv_tutorial/4_responsive/lv_ex_responsive.c -o lv_examples/lv_tutorial/4_responsive/lv_ex_responsive.o
gcc -o demo ./main.o ./lvgl/lv_draw/lv_draw_vbasic.o ./lvgl/lv_draw/lv_draw.o ./lvgl/lv_draw/lv_draw_rbasic.o ./lvgl/lv_misc/lv_font.o ./lvgl/lv_misc/lv_circ.o ./lvgl/lv_misc/lv_area.o ./lvgl/lv_misc/lv_task.o ./lvgl/lv_misc/lv_fs.o ./lvgl/lv_misc/lv_anim.o ./lvgl/lv_misc/lv_fonts/dejavu_80.o ./lvgl/lv_misc/lv_fonts/dejavu_30_latin_ext_a.o ./lvgl/lv_misc/lv_fonts/symbol_20_feedback.o ./lvgl/lv_misc/lv_fonts/dejavu_10_cyrillic.o ./lvgl/lv_misc/lv_fonts/dejavu_60_latin_ext_a.o ./lvgl/lv_misc/lv_fonts/dejavu_80_sup.o ./lvgl/lv_misc/lv_fonts/dejavu_30_latin_ext_b.o ./lvgl/lv_misc/lv_fonts/dejavu_80_cyrillic.o ./lvgl/lv_misc/lv_fonts/dejavu_60_cyrillic.o ./lvgl/lv_misc/lv_fonts/symbol_30_file.o ./lvgl/lv_misc/lv_fonts/symbol_40_file.o ./lvgl/lv_misc/lv_fonts/symbol_30_basic.o ./lvgl/lv_misc/lv_fonts/symbol_10_feedback.o ./lvgl/lv_misc/lv_fonts/symbol_60_file.o ./lvgl/lv_misc/lv_fonts/dejavu_30_sup.o ./lvgl/lv_misc/lv_fonts/dejavu_40_cyrillic.o ./lvgl/lv_misc/lv_fonts/dejavu_40_latin_ext_a.o ./lvgl/lv_misc/lv_fonts/symbol_30_feedback.o ./lvgl/lv_misc/lv_fonts/dejavu_20_latin_ext_a.o ./lvgl/lv_misc/lv_fonts/dejavu_60_latin_ext_b.o ./lvgl/lv_misc/lv_fonts/symbol_80_file.o ./lvgl/lv_misc/lv_fonts/symbol_60_feedback.o ./lvgl/lv_misc/lv_fonts/symbol_40_feedback.o ./lvgl/lv_misc/lv_fonts/dejavu_20_cyrillic.o ./lvgl/lv_misc/lv_fonts/dejavu_60_sup.o ./lvgl/lv_misc/lv_fonts/dejavu_10_sup.o ./lvgl/lv_misc/lv_fonts/dejavu_20_sup.o ./lvgl/lv_misc/lv_fonts/symbol_10_basic.o ./lvgl/lv_misc/lv_fonts/dejavu_30_cyrillic.o ./lvgl/lv_misc/lv_fonts/symbol_60_basic.o ./lvgl/lv_misc/lv_fonts/dejavu_80_latin_ext_a.o ./lvgl/lv_misc/lv_fonts/dejavu_60.o ./lvgl/lv_misc/lv_fonts/dejavu_40_sup.o ./lvgl/lv_misc/lv_fonts/symbol_80_feedback.o ./lvgl/lv_misc/lv_fonts/dejavu_20.o ./lvgl/lv_misc/lv_fonts/dejavu_20_latin_ext_b.o ./lvgl/lv_misc/lv_fonts/dejavu_10.o ./lvgl/lv_misc/lv_fonts/symbol_20_file.o ./lvgl/lv_misc/lv_fonts/dejavu_40.o ./lvgl/lv_misc/lv_fonts/dejavu_30.o ./lvgl/lv_misc/lv_fonts/symbol_20_basic.o ./lvgl/lv_misc/lv_fonts/symbol_40_basic.o ./lvgl/lv_misc/lv_fonts/dejavu_40_latin_ext_b.o ./lvgl/lv_misc/lv_fonts/symbol_80_basic.o ./lvgl/lv_misc/lv_fonts/dejavu_10_latin_ext_b.o ./lvgl/lv_misc/lv_fonts/symbol_10_file.o ./lvgl/lv_misc/lv_fonts/dejavu_80_latin_ext_b.o ./lvgl/lv_misc/lv_fonts/dejavu_10_latin_ext_a.o ./lvgl/lv_misc/lv_mem.o ./lvgl/lv_misc/lv_templ.o ./lvgl/lv_misc/lv_ll.o ./lvgl/lv_misc/lv_color.o ./lvgl/lv_misc/lv_txt.o ./lvgl/lv_misc/lv_ufs.o ./lvgl/lv_misc/lv_trigo.o ./lvgl/lv_objx/lv_roller.o ./lvgl/lv_objx/lv_ddlist.o ./lvgl/lv_objx/lv_page.o ./lvgl/lv_objx/lv_list.o ./lvgl/lv_objx/lv_ta.o ./lvgl/lv_objx/lv_tabview.o ./lvgl/lv_objx/lv_btn.o ./lvgl/lv_objx/lv_kb.o ./lvgl/lv_objx/lv_bar.o ./lvgl/lv_objx/lv_lmeter.o ./lvgl/lv_objx/lv_cb.o ./lvgl/lv_objx/lv_slider.o ./lvgl/lv_objx/lv_win.o ./lvgl/lv_objx/lv_label.o ./lvgl/lv_objx/lv_line.o ./lvgl/lv_objx/lv_mbox.o ./lvgl/lv_objx/lv_sw.o ./lvgl/lv_objx/lv_led.o ./lvgl/lv_objx/lv_chart.o ./lvgl/lv_objx/lv_img.o ./lvgl/lv_objx/lv_gauge.o ./lvgl/lv_objx/lv_objx_templ.o ./lvgl/lv_objx/lv_btnm.o ./lvgl/lv_objx/lv_cont.o ./lvgl/lv_hal/lv_hal_indev.o ./lvgl/lv_hal/lv_hal_tick.o ./lvgl/lv_hal/lv_hal_disp.o ./lvgl/lv_themes/lv_theme_alien.o ./lvgl/lv_themes/lv_theme_templ.o ./lvgl/lv_themes/lv_theme.o ./lvgl/lv_themes/lv_theme_night.o ./lvgl/lv_themes/lv_theme_default.o ./lvgl/lv_obj/lv_group.o ./lvgl/lv_obj/lv_vdb.o ./lvgl/lv_obj/lv_obj.o ./lvgl/lv_obj/lv_style.o ./lvgl/lv_obj/lv_indev.o ./lvgl/lv_obj/lv_refr.o  ./lv_drivers/display/monitor.o ./lv_drivers/display/SSD1963.o ./lv_drivers/display/ST7565.o ./lv_drivers/display/fbdev.o ./lv_drivers/display/R61581.o ./lv_drivers/indev/FT5406EE8.o ./lv_drivers/indev/keyboard.o ./lv_drivers/indev/XPT2046.o ./lv_drivers/indev/mouse.o  ./lv_examples/lv_tests/lv_test_group/lv_test_group.o ./lv_examples/lv_tests/lv_test_objx/lv_test_kb/lv_test_kb.o ./lv_examples/lv_tests/lv_test_objx/lv_test_bar/lv_test_bar.o ./lv_examples/lv_tests/lv_test_objx/lv_test_gauge/lv_test_gauge.o ./lv_examples/lv_tests/lv_test_objx/lv_test_btn/lv_test_btn.o ./lv_examples/lv_tests/lv_test_objx/lv_test_sw/lv_test_sw.o ./lv_examples/lv_tests/lv_test_objx/lv_test_chart/lv_test_chart.o ./lv_examples/lv_tests/lv_test_objx/lv_test_mbox/lv_test_mbox.o ./lv_examples/lv_tests/lv_test_objx/lv_test_img/lv_test_img.o ./lv_examples/lv_tests/lv_test_objx/lv_test_img/img_flower_icon.o ./lv_examples/lv_tests/lv_test_objx/lv_test_ta/lv_test_ta.o ./lv_examples/lv_tests/lv_test_objx/lv_test_btnm/lv_test_btnm.o ./lv_examples/lv_tests/lv_test_objx/lv_test_line/lv_test_line.o ./lv_examples/lv_tests/lv_test_objx/lv_test_tabview/lv_test_tabview.o ./lv_examples/lv_tests/lv_test_objx/lv_test_list/lv_test_list.o ./lv_examples/lv_tests/lv_test_objx/lv_test_win/lv_test_win.o ./lv_examples/lv_tests/lv_test_objx/lv_test_led/lv_test_led.o ./lv_examples/lv_tests/lv_test_objx/lv_test_cont/lv_test_cont.o ./lv_examples/lv_tests/lv_test_objx/lv_test_cb/lv_test_cb.o ./lv_examples/lv_tests/lv_test_objx/lv_test_slider/lv_test_slider.o ./lv_examples/lv_tests/lv_test_objx/lv_test_page/lv_test_page.o ./lv_examples/lv_tests/lv_test_objx/lv_test_label/lv_test_label.o ./lv_examples/lv_tests/lv_test_objx/lv_test_roller/lv_test_roller.o ./lv_examples/lv_tests/lv_test_objx/lv_test_ddlist/lv_test_ddlist.o ./lv_examples/lv_tests/lv_test_objx/lv_test_lmeter/lv_test_lmeter.o ./lv_examples/lv_tests/lv_test_theme/lv_test_theme.o ./lv_examples/lv_tests/lv_test_obj/lv_test_obj.o ./lv_examples/lv_apps/terminal/terminal.o ./lv_examples/lv_apps/benchmark/benchmark.o ./lv_examples/lv_apps/sysmon/sysmon.o ./lv_examples/lv_apps/files/files.o ./lv_examples/lv_apps/demo/demo.o ./lv_examples/lv_apps/demo/img_bubble_pattern.o ./lv_examples/lv_tutorial/7_button_ctrl/lv_ex_button_ctrl.o ./lv_examples/lv_tutorial/6_anti_aliasing/lv_ex_anti_aliasing.o ./lv_examples/lv_tutorial/8_encoder_ctrl/lv_ex_encoder_ctrl.o ./lv_examples/lv_tutorial/9_keyboard_ctrl/lv_ex_keyboard_ctrl.o ./lv_examples/lv_tutorial/5_animations/lv_ex_animations.o ./lv_examples/lv_tutorial/3_styles/lv_ex_styles.o ./lv_examples/lv_tutorial/2_objects/lv_ex_objects.o ./lv_examples/lv_tutorial/10_mouse_ctrl/lv_ex_mouse_ctrl.o ./lv_examples/lv_tutorial/1_hello_world/lv_ex_hello_world.o ./lv_examples/lv_tutorial/4_responsive/lv_ex_responsive.o  -lSDL2 -lm

Run the demo on simulator:

$ ./demo