Building ESP32-S3 Firmware VS Code Mac Terminal
Closed this issue · 5 comments
The following commands were run on macOS Monterey - version 12.1 Terminal on VS Code
git clone https://github.com/mocleiri/tensorflow-micropython-examples.git
Then Following the build_esp32s3.yml in the .github/workflows folder.
cd /tensorflow-micropython-examples
git submodule init
git submodule update --recursive
cd micropython
git submodule update --init lib/axtls
git submodule update --init lib/berkeley-db-1.xx
cd ..
IDF_COMMIT=142bb32c50fa9875b8b69fa539a2d59559460d72
echo "esp-idf-commit=$IDF_COMMIT" >> $GITHUB_ENV
TFLM_COMMIT=$(git submodule status tensorflow | awk '{print ($1)}')
echo "tflm-commit=$TFLM_COMMIT" >> $GITHUB_ENV
source ./micropython/tools/ci.sh && ci_esp32_idf44_setup
source ./esp-idf/export.sh
pip3 install Pillow
pip3 install Wave
echo "Regenerating microlite/tfm directory"
rm -rf ./micropython-modules/microlite/tflm
cd ./tensorflow
../micropython-modules/microlite/prepare-tflm-esp.sh
cd ..
source ./esp-idf/export.sh
cd ./micropython
echo "make -C mpy-cross V=1 clean all"
make -C mpy-cross V=1 clean all
cd ..
echo "cd ./boards/esp32/MICROLITE_S3"
cd ./boards/esp32/MICROLITE_S3
echo "Building MICROLITE_S3"
rm -rf build
idf.py clean build
FAILED:
/tensorflow-micropython-examples/micropython/ports/esp32/main.c:38:10: fatal error: soc/cpu.h: No such file or directory
#include "soc/cpu.h"
^~~~~~~~~~~
compilation terminated.
/tensorflow-micropython-examples/micropython/ports/esp32/gccollect.c:37:10: fatal error: soc/cpu.h: No such file or directory
#include "soc/cpu.h"
^~~~~~~~~~~
compilation terminated.
/tensorflow-micropython-examples/micropython/ports/esp32/modmachine.c:46:10: fatal error: esp32s3/clk.h: No such file or directory
#include "esp32s3/clk.h"
^~~~~~~~~~~~~~~
compilation terminated.
returned non-zero exit status 1.
ninja: build stopped: subcommand failed.
ninja failed with exit code 1
I can find all of these files by hand in the downloaded ESP-IDF in the repository but the compiler just can't seem to pick them up. any suggestions would be fantastic thank you!
Copying and pasting the missing individual folder and files into the board root folder does seem to partially solve it but then produces further errors:
[1116/1606] Building C object esp-idf/main/CMakeFiles/__idf_main.dir/...ensorflow-micropython-examples/micropython/extmod/moduwebsocket.c.ob
cc1: warning: command line option '-fno-rtti' is valid for C++/ObjC++ but not for C
[1118/1606] Building C object esp-idf/main/CMakeFiles/__idf_main.dir/.../tensorflow-micropython-examples/micropython/extmod/uos_dupterm.c.ob
cc1: warning: command line option '-fno-rtti' is valid for C++/ObjC++ but not for C
[1120/1606] Building C object esp-idf/main/CMakeFiles/__idf_main.dir/...1/tensorflow-micropython-examples/micropython/extmod/modwebrepl.c.ob
cc1: warning: command line option '-fno-rtti' is valid for C++/ObjC++ but not for C
[1121/1606] Building C object esp-idf/main/CMakeFiles/__idf_main.dir/.../tensorflow-micropython-examples/micropython/extmod/utime_mphal.c.ob
cc1: warning: command line option '-fno-rtti' is valid for C++/ObjC++ but not for C
...
etc for all of the remaining build lines
My development environment is windows but I'm doing most work in visual studio code running in windows subsystem for linux so I'm unable to help directly.
However if you are able to figure out the steps to build on MacOS please feel free to contribute the steps and we can improve the manual build instructions to include for mac os.
The -fno-rtti error is not an error per-se. I need to improve the microlite cmake file to seperate the C++ build from the C build.
CMake is passing that option to gcc which is complaining that its not a C option. But I added for the C++ code where it is needed.
That line is emitted right now for all esp32 builds in linux.
If you get a firmware generated at the end of the build then I think you have a working build.
Thank you for your reply! I will focus on the mac build and reply back to the thread so it can be added. Thanks again!
Solved: Ive solved it using latest IDF-4.4 and making sure all of the toolchain had been properly added to the bash Profile. Ive added a pull request with a .md document detailing the process.
The Process is as pasted below:
Build Tensorflow Micropython on MAC OS using Bash Terminal
Tested on: macOS Monterey Version 12.1
Prerequisites
Properly Installing ESP-IDF (Taken from: https://docs.espressif.com/projects/esp-idf/en/v3.3/get-started-cmake/macos-setup.html)
sudo easy_install pip
pip install --user pyserial
brew install cmake ninja
brew install ccache
Download: https://dl.espressif.com/dl/xtensa-esp32-elf-osx-1.22.0-80-g6c4433a-5.2.0.tar.gz
mkdir -p ~/esp
cd ~/esp
tar -xzf ~/Downloads/xtensa-esp32-elf-osx-1.22.0-80-g6c4433a-5.2.0.tar.gz
Make Toolchain Accessible from Bash Terminal
Open your /bash.profile file by navigating to usr directory and pressing down the keys "Command, Shift, FullStop" it shoudl appear.
Add to your profile:
export PATH=$HOME/esp/xtensa-esp32-elf/bin:$PATH
alias get_esp32="export PATH=$HOME/esp/xtensa-esp32-elf/bin:$PATH"
Git Clone ESP-IDF Version 4.4
cd ~/esp
git clone -b v4.4 --recursive https://github.com/espressif/esp-idf.git esp-idf
Update the Submodules
cd esp-idf
git submodule update --init
Reopen your /bash.profile and add the following:
export IDF_PATH=~/esp/esp-idf
export PATH="$IDF_PATH/tools:$PATH"
Install the required python packages
python3 -m pip install --user -r $IDF_PATH/requirements.txt
Download the Tensorflow Micropython Examples Repo
git clone https://github.com/mocleiri/tensorflow-micropython-examples.git
Building ESP32S3
Building the TensorFlow Firmware
cd /tensorflow-micropython-examples
git submodule init
git submodule update --recursive
cd micropython
git submodule update --init lib/axtls
git submodule update --init lib/berkeley-db-1.xx
cd ..
Get Cache Keys
IDF_COMMIT=142bb32c50fa9875b8b69fa539a2d59559460d72
TFLM_COMMIT=$(git submodule status tensorflow | awk '{print ($1)}')
Setup IDF within Repo (Another Option)
source ./micropython/tools/ci.sh && ci_esp32_idf44_setup
source ./esp-idf/export.sh
pip3 install Pillow
pip3 install Wave
rm -rf ./micropython-modules/microlite/tflm
cd ./tensorflow
../micropython-modules/microlite/prepare-tflm-esp.sh
cd ..
Build Micropython Cross-Compiler
source ./esp-idf/export.sh
cd ./micropython
make -C mpy-cross V=1 clean all
cd ..
Build Generic ESP32S3 8MB FLASH
source ./esp-idf/export.sh
(OR: get_esp32
get_idf)
cd ./boards/esp32/MICROLITE_S3
rm -rf build
idf.py clean build
To build other boards e.g. GENERIC_SPIRAM replace with Board definition
cd ./boards/esp32/MICROLITE_S3_SPIRAM
If succesful you should see a reult similar to this:
/micropython.bin
or run 'idf.py -p (PORT) flash'
bootloader @0x000000 18640 ( 14128 remaining)
partitions @0x008000 3072 ( 1024 remaining)
application @0x010000 1191120 ( 840496 remaining)
total 1256656