Hi list,
I am interested in upgrading our codebase to a latest ESP-IDF
version (preferentially v5 which has just happened end of 2022 -
Happy New Year ! :-)) - mostly to be able to use some components
for which a backport seems difficult (for example :
https://github.com/openvehicles/Open-Vehicle-Monitoring-System-3/issues/752
), and as a matter of balance between stability vs latest
bugfixes, security fixes, new features etc...
In the past it seems that some endeavours already set the basis
to make this happen
(https://github.com/openvehicles/Open-Vehicle-Monitoring-System-3/issues/263,
https://github.com/openvehicles/Open-Vehicle-Monitoring-System-3/issues/360
).
I'm now trying to revive this effort, and after some work managed
to have:
- OVMS codebase building under v4.x using Makefile
- OVMS codebase building under v4.x using cmake / idf.py (not
100% finished, multiple vehicle_* components are missing)
(WARNING: some important features of OVMS have been
deactivated for the moment, see end of post)
The produced binaries seem to "work on my machine
board", as they end with a "OVMS#" prompt and a few (very) basic
tests look OK (to be honest, unfortunately no real tests have been
done except to check that the binary does not crash during boot
and a few seconds of run, checking that WiFi / web Interface is
OK, sdcard is OK - but very basic)
You'll find the changes here :
https://github.com/llange/Open-Vehicle-Monitoring-System-3/tree/experimental-esp-idf-v4-rework-network
(In the README.md, there is a short notice at the top with a few
useful informations)
I'm now reaching out here mostly for :
- gathering feedback both around the effort (is it worth
pursuing this goal ?) and the implementation (do my
CMakeLists.txt look weird ? yes they do.)
- having volunteers using those builds on real-world workload
(which I cannot do at the moment) and finding bugs
- guidance and fixes regarding the CMakeLists.txt files
My next steps could be (of course, subject to feedback) :
- Have 100% of the cmake implementation finished (all the
missing vehicle_* components) -> easy (only missing time)
- Work on the warnings (currently disabled in the builds) and
try to fix as much as possible
- Iron out all the bugs, improve the dev documentation ->
need help on finding them with real-world use
- 1st goal is to propose this result as a merge request (either
as a whole, or split depending on feedback - ideally I would
like to have a first (big) MR accepted quickly so that people
can play with it, and deliver incremental updates as expected)
- then work on the v5 and do the same.
(Please note that my cmake skills are inexistent - so be careful
when opening those files to not hurt yourself.)
# The guidelines I tried to follow:
# Missing features:
In the course of this work I had to make some decisions to speed
up the work - that will need to be acted upon:
- I disabled the crash handler (`xt_set_error_handler_callback`
and `esp_task_wdt_get_trigger_tasknames`) for the moment, we
need to decide whether we "fork" ESP-IDF again to port it ; or
if the new APIs are enough to (partially ?) reimplement it
- There is a crash in `OvmsConsole::Poll` which I did not analyse
(yet) and which I worked around by declaring a variable
static.
- I decided to
transform our local copies of `wolfssh` and `wolfssl` in
submodules (and move them one level below in terms of
directories) - mainly to be able to have a CMakeLists.txt
different from the upstream one.
In the process, I "lost" one of our patches :
https://github.com/openvehicles/Open-Vehicle-Monitoring-System-3/commit/51444539047daef7bd2accb23ef40d1bc14fdb20
and we need to decide how to handle this.
- A lot of
dependencies are now explicitly (hard-)coded in the
CMakeLists.txt - which may, or may not be a good thing.
Let's discuss it.
- I had to change a
set of defines into a header generation (in ovms_webserver)
because I was unable to implement those in a satisfying
manner in cmake. If you manage to do it, it's a win !
- Build warnings were
disabled to keep the output clean and focus on the build
issues - but now they need to be re-activated.
- etc...
- Even if there is
experimental support for cmake / idf.py in ESP-IDF 3.3.x, I
did not make any effort to be compatible with it:
- Our
own fork does not seem to include this build system
- It
was experimental, the component API changed and I did not
want to have edge case for something not used at the
moment.
Let me know your comments and questions.
Best regards,