What is the best way to create, maintain, and distribute software development tool chains?
I am trying to develop a workflow / process to create an isolated environment in install and deploy software tool chains for embedded targets. Each tool chain typically would contain an IDE, compiler, and a small set of common tools. I have looked into two solutions but the both have their limitations and I hope to find a solution that has the best of both implementations.
The rational behind a stand alone tool chain is so that all developers would be able to build the exact same code (matching CRC etc..). As well as be able to rebuild the same code after X number of years to support legacy code. A third option would be to use a central build server, which we plan on doing for nightly builds, but we still need to be able to build 'on the fly' when working on a test bench or remotely. So only using a build server will not suffice.
Ideal Goals for Deployed tool chain
- Work on Windows XP, Vista, and 7 (excluding drivers)
- Contain all required information to run use the tool chain (excluding drivers)
------------------ Possible Options ------------------
Option 1: Full Stand alone Virtual Machine
- Open Source packaging via Virtual Box
- 100% isolation
- Guarantees the tools can interact with one another
- Licensing multiple copies of windows
- At best only one developer could legally use a Windows VM at a time.
- Running the same VM on physically different lap tops (Macbook Pro, Dell 830, Dell E6500, etc...). Typically when Windows see's a new CPU or motherboard it will force a re-activation.
- Very large files to maintain
Option 2: Virtualized Application
- Through packagers like Cameyo, applications can run on nearly all versions of Windows. (Note that Cameyo is also free)
- Little to no licensing issues for most tools / IDEs. Purchased compilers might have additional restrictions, all of our current compilers do support this type of usage.
- Smaller files to maintain via a SCM, such as SVN or GIT.
- Difficult, if even possible, to get a single file that contains the entire tool chain
- Difficult, if even possible, to get the tools to see / work with one another. I have seen this very issue with Cameyo.
There may not be a solution that meets all of my design goals, but I would like to find out if anyone else been successful in this type of deployment.