I discovered last night that my RTK_Everywhere firmware builds using the compile_with_docker.bat script fail. All of my builds, even the V2.3, v3.0, and the current github repository.
If you have built RTK_Everywhere firmware, in the past, could you see if your builds still work?
I’m getting compiler errors, such as:
/RTK_Everywhere/GNSS_Mosaic.ino:2924:50: error: 'sempSbfPreamble' was not declared in this scope
105.4 2924 | SEMP_PARSE_ROUTINE const sbfParserTable[] = {sempSbfPreamble};
I suspect that some recent change in the Arduino-CLI software has broken the build.
Hi @LenS - Thanks for compiling from the source! You are one of a special few!
Which branch are you trying to compile? Main should always compile, whereas release-candidate is highly volatile.
From your error, it looks SEMP related. On the RC, we recently updated to SEMP v2.0.0. As a rule of thumb, if you’re compiling RC you should update your local libraries to match the versions listed in the RC dockerfile.
Let us know what problems you hit, and we would love any and all feedback. The issues section of the repo is the best place for technical reports. The forum is a good place for general discussions.
Hi @sparky - Thanks for the response. I am trying to build the current Main branch. I even went to another PC, installed Docker, and tried a completely fresh build, but the build fails there also. And, I have uncommented docker builder prune -f in the bat file so that I download all libraries each time.
So, it appears that I am the only one having this issue. However, the fact that it fails the same on two different PCs puzzles me. I will investigate further.
So, it appears that the version number specified is being ignored and that v2.0.0 is being installed, even for my custom V2.3 build. Are the earlier versions no longer available? It not, then I’m doomed as I can no longer build my version (based on V2.3 of the Firmware).
RUN arduino-cli lib install “SparkFun Extensible Message Parser”@1.0.8
Is that expected?
Yes, for the main branch. Once the RC settles, and we do a formal release, the main branch will update with new library version numbers.
The current LG290P and UM980 libraries now rely on SEMP v2.0 so if you have those loaded, I suspect there are dependencies driving the SEMP version forward. Review your local library versions and, if you’re trying to compile v2.3, be sure those versions match the versions from the docker file from v2.3.
Firmware v3.1 is out with binaries. If possible, please move to this version. Work is actively on release candidate v3.2 (with binaries also available).
I am very confused. The Dockerfile for V2.3 specifies SEMP 1.0.4. However, V2.0.0 gets installed. The dockerfile for the current Main branch specifies V1.0.8. However, V2.0.0 gets installed and the build fails. How can I ensure that the correct version gets installed if the arduino-cli lib install command ignores the version specification?
I suspect we’ve got a strange inter-dependency in here somewhere. If you have a look at the library.properties for the LG290P it depends=SparkFun Extensible Message Parser (>=2.0.0) , so arduino-cli will make sure an appropriate version of SEMP gets installed.
I don’t see the same issue here. But I spend most of my time working with release_candidate, not main. And I never go back to previous versions…
Please work your way through your Dockerfile:
Check the GNSS library versions (LG290P, UM980, etc.)
Check the library.properties in each library, looking for depends
The solution will be finding the thing that is depending on the latest SEMP.
I’ll start doing the same thing here and will let you know if I find anything.
To get my V2.3-based firmware to finally build, I needed to move…
RUN arduino-cli lib install ArduinoJson@7.0.4
RUN arduino-cli lib install “SparkFun Extensible Message Parser”@1.0.4
…to the end of the list in the Dockerfile.
However, I view this as only a temporary fix that will work until some other dependant library gets updated.
My guess that this all occurs because the libs that depend on SEMP, do not specify the exact version of SEMP to use. You can see that if you have a local install of the Arduino IDE and look in the \Users\\AppData\Local\Arduino15\library_index.json file.
The only library that I found that specifies the version of SEMP is:
So, strictly, we should have been specifying versions / version ranges all along…
The depends=SparkFun Extensible Message Parser causes the latest version to be installed - and that is not backward-compatible with your version of 2.3…
Sorry about that… At least you’ve got a workaround!
Almost certainly not… Sorry! It compiled correctly on the day, using the library versions that were required at the time. We use the exact same Dockerfile in the GitHub Action to compile each release binary. There are no hidden tricks. Backward temporal compatibility is not something we take into consideration… (Sorry - that sounds like something Dr. Who would say…!)
That’s unfortunate. It’s sad that you have this wonderful Docker-based build system that is only guaranteed to work on the day of release. The fix, obviously, is to correctly specify the versions of all of the dependancies. However, since it is only me and perhaps a very small number of other people who are affected by this, I can understand the unwillingness to expend that effort. [Personally, I am such a perfectionist that it would forever bother me that none of the previous releases will actually build. But, that’s me ]
Please, though, as you go forward, take the steps needed to ensure that all future releases will continue to build. Your build system is so good, even with its “temporal” limitations.
Thanks for all the help!
The arduino-cli will always install whatever the latest version of SEMP is, because, that version will always be “>=2.0.0”. Today’s version is v2.0.1. So that will be installed.
If I understand correctly, we would need to retrospectively re-release each version of each library that depends on SEMP with very well defined version ranges for the dependency…?
I can’t help feeling I’m missing something obvious. But I don’t know what that is…
I understand, re-releasing all previous Firmware is probably not appropriate. You will just need to be aware that if anyone attempts to download a previous release, it will not build for them.
In my previous life as a SW Engineer, we viewed each release as a complete snapshot. We would never have any ambiguous dependancies such as “>=2.0.0” since there is no guarantee that V2.0.1 would be compatible. The dependency for the release would be “=2.0.0”.
I do not know the mechanics of maintaining Arduino libs. If it is not possible to correct the dependency version in existing libs used by Arduino CLI then, going forward, I would suggest just re-releasing those libs that depend on SEMP (UM980 & LG290P ?) so that they call out only one specific version of SEMP.
And, of course, this should apply to any other dependencies.