For many years now on and off I’ve played in the programming contest associated with the International Conference on Function Programming. Each time it has been fun, exhilarating, and definitely humbling! www.icfpcontest.org
This year, the competition runs from Friday June 21st through Monday June 24th. Once again we’ll be competing as “Side Effects May Include…”. Look for us on the leaderboard and cheer on!
While updating the mjmech code-base to interoperate with the moteus servos, I simultaneously was updating it to use C++17. C++ rarely removes or deprecates features, but one of those which actually was removed in C++17, after being deprecated in C++11, was auto_ptr. unique_ptr is strictly superior in all regards, and so there is no real reason not to switch.
However, mjmech depends upon a large amount of third party software. Amazingly, only one package actually was broken by this removal of auto_ptr, log4cpp. It actually saw some updates for C++17 compliance back in 2017, but otherwise hasn’t been updated since then. I went ahead and forked it, and got it compiling with clang in C++17 mode at least:
After doing that, I discovered that someone had already posted a similar patch 2 years ago to the sourceforge page, but which was never applied. Oh well, it wasn’t that much duplicated effort.
When I initially created rpi_bazel, I set it up to use a host provided clang. I decided to update that so that the rpi_bazel rules themselves download a binary version of an arbitrary clang. This lets you decouple the version of clang from what is available in any given Linux distribution and improves the reproducibility of builds, since you are no longer dependent on whatever PPA you used to grab clang from.
To make that work in a cross compilation environment, the rules also cross compile libcxx and libcxxapi. However, since bazel’s support for C++ toolchains is still in flux, for now binaries must explicitly depend upon the C++ standard library if they want it. On the plus side, that now makes it trivial to fully support C++17 on the raspberry pi. It should also be easy to update this to clang 8, although I haven’t gotten around to doing so yet.