You don’t have a screwdriver?

Let’s face it, we all have our tool kit, be it a basic starter kit, or one you inherited from your grandfather. There are tools we just assume everyone has. I mean, is there a household out there without a screwdriver, a pair of scissors, and a Stanley knife?

A box of screwdrivers, including jewellers and houshold, then a collection of bits including torx and hex.
Some of my screwdrivers

Now, let’s move to the digital age. You’re on a computer, you must have a browser and an email address, right?

Yes, I have all of the above and much more. But today I just want to talk about one tool that I have, and my colleague has, and we use pretty much every day, and forget we have.

> Visual C++ Redistributable

I recently got a brand new development machine at work. It had “nothing” on it, just Windows and the VPN/Networking stuff. I need to bring my version control, compiler for my target, preferred IDE for ease of use and the software to control my AWG (Arbitrary Waveform Generator/Signal Generator) for test stimulus.

This is where it gets fun. I did it incrementally, following our internal wiki pages, getting each step solid before moving on. GitHub installed fine, I cloned the repository for the target and the other repository for lab instrumentation scripts. I then installed the compiler, in this case an AMD toolset for FPGA and SoC (Zynq) work. I also needed to get our latest XSA (wrapped bitstream) for our target, and the appropriate PetaLinux SDK.

Now I had the bare minimum tools I could build.

Actually, I couldn’t even get the IDE to open correctly!

Looking through install logs, re-reading out Wiki how-to page, and re-reading the vendor installation guide I’d done everything right.

Looking at error messages in the install log and the output of the IDE launcher script, it took me about an hour to figure out that I was missing the Visual C++ Redistributable package.

When you make a program that runs on a computer, you can build a binary that does everything, or you can make a light-weight binary that shares a framework. The IDE absolutely relied on this redistributable framework, but I did not find reference to it in the obvious installation guides.

So, a very fast download from Microsoft, and I was in business. But how could such an important dependency be missed? It’s like a screwdriver – such a ubiquitous tool, installed alongside VSCode or Visual Studio, and often stated as a pre-requisite or bundled with other tools. I don’t think any embedded software engineer can go three weeks before it gets installed their machine.

The two older machines I use at work were both “re-assigned” laptops from the pool, they had not been re-imaged. I’ve never done a full inventory of what is on my systems. My new machine was pure, I had to bring everything. If I’d installed VSCode or WindSurf before I installed the Vitis toolset, I probably would never have had this issue.

Since we didn’t know of this dependency, we didn’t specify which version to use for compatibility. Each engineer in the team may have a slightly different vintage; this might make build results differ, if we’re lucky, its a minor performance change, if unlucky, then it’s a bug that breaks something. For a stable release build, we typically create an “isolated” build PC, with a precise requirement of all the tools involved.

Assumptions are dangerous – don’t assume even fundamentals. If there are prerequisites, you should always document them.


Leave a comment