From Free Pascal wiki
Revision as of 22:46, 7 April 2020 by FPK (talk | contribs) (Preparations)

Warning: The ESP32 support is highly experimental and prone to be broken. This description is work in progress.

Building FPC


So far Linux and Mac only

Install esp-idf based on the instructions given here:

Get Started (for Stable Release)

Follow the instructions to a least step 8 where you build the hello_word demo project.

copy all the freshly compiled .a files from the current project directory to a directory of your choice:

 mkdir ~/esp/xtensa-esp32-elf-libs
 find . -name "*.a" -exec cp {} ~/esp/xtensa-esp32-elf-libs \; 

Now you are ready to compile fpc and rtl.


export IDF_PATH=~/esp/esp-idf
source ~/esp/esp-idf/export.sh

to get the path and environment set (namely tools path and $IDF_PATH are needed)

Change into the fpc directory and run

 cd compiler
 lazbuild ppcxtensa.lpi

to get pp .

now compile the rtl:

 cd ../rtl/freertos
 make FPC=../../compiler/xtensa/pp  OS_TARGET=freertos "OPT=-Cplx6 -Cawindowed -XPxtensa-esp32-elf- -Cfhard" clean all

Create a hello world program in the fpc dir and compile it with

 compiler/xtensa/pp -Furtl/units/xtensa-freertos/ -Tfreertos -Cawindowed -XPxtensa-esp32-elf- -O3 -Wpesp32 -Fl~/esp/xtensa-esp32-elf-libs  -Fl~/.espressif/tools/xtensa-esp32-elf/esp-2019r2-8.2.0/xtensa-esp32-elf/xtensa-esp32-elf/lib/ hello

Get partition-table.bin and bootloader.bin from the hello_world example compiled above and copy them into the same dir as the compiled hello.bin

Flash with

 esptool.py -p /dev/ttyUSB0 -b 460800 --before default_reset --after hard_reset --chip esp32  write_flash --flash_mode dio --flash_size detect --flash_freq 40m 0x1000 bootloader.bin 0x8000 partition-table.bin 0x10000 hello.bin

Monitor the output with:

 idf_monitor.py  --port /dev/ttyUSB0 hello.elf