Originally posted by Ed Vielmetti on August 10 2020
Open-source developers working with Arm have to go down a lot of rabbit holes, including the intricate (and often unforeseen) dependencies and interdependencies that can pop up during a build.
With build systems, the thing you do first is in almost every system is compute dependency analysis. Then once you have some understanding of all there is to do, you decide what tasks to perform in parallel — especially on multiprocessor systems.
The problem is, what to do first in a complex environment is not always obvious. What you need for success is an evolved approach — one that does not depend on proof of concept (POC), but that focuses on repeatable success and scalability.
Once things work, if you want them to rinse and repeat, then you enter into a world of CI/CD. Here, not only does the project have to work during POC, but it also has to continue to work over time for your architecture.
I have collaborated on more than 100 projects, some of the CI/CD challenges specific to Arm. Others, that I have run into include:
Pulling a rabbit out of your hat can get tricky to say the least.
When I think of rabbits, I think of creatures that are fast and quick to multiply. Fast-growing active projects are similar in nature, and when combined with a finite amount of resources can lead to endless tunneling in deep, dark rabbit holes.
These can be overcome with much diligence and effort (so much digging!) — plus a few juicy carrots (read: tools that help make the journey more enjoyable) to enable fast-path growth and help make solving all those build problems much easier.
Here are five of my favorite carrots for accelerating tricky projects:
There is a lot to learn about build systems, and dozens of examples of good practices and innovative tools that I did not include here. If you have a favorite, please share it with me (firstname.lastname@example.org) to include in a future feature or on social media.