Hello,
I'm hoping to get a sense of what the best practices the community has found for source controlling and sharing the various TI supplied tools within their organization.
Our company is just starting to use TI DSPs & SYS/BIOS, so we have a lot of levity to try to organize things “the right way”. The DSP chips will be used across multiple programs that have independent purposes / release schedules / developers. As much as possible, we’d like to share and maintain compatibility across the programs (ie: if a bug is fixed one place, everyone gets the fix with minimal effort).
Our current plan is to create a common repository where code will be shared across all programs, with program specific code being in separate branches. The common repository will hold all custom drivers, platforms, shared message structures, interfaces, utilities and functions. Logically, the common repository will be divided into sub-branches "dev", "main", "rel". Main will be the standard branch to which programs link. If a change has to be made to the repository, it will be developed under dev and then pushed up to main. Program specific code will be held in a separate repository and be a client to the shared repository. When a project has to release, a release branch will be made (using the standard RTSC M_S_R_P nomenclature). If a released project needs to make updates to the common repo, it must follow the standard dev-main-release cycle, thus picking up all other changes made.
The big question now is how we should control the TI supplied tools such as BIOS6, XDCTools, IPC, and compiler versions. I'd like to have everyone keep as up to date as possible, but it would be unrealistic to expect each developer to keep their local versions updated to whatever the latest common repository build is using.
Option 1 would be to source control all the TI libraries as they are released. Each time updates are downloaded, they would be integrated to source control. Instead of using the top level name (for example bios_6_30_03_46), the new code would be integrated to a generic folder (bios_6). The changelist description would annotate the full release path name (bios_6_31_4_27). The build scripts for the common repository would have to use environment variables that point to the source controlled versions of the tools rather than the standard XDCPATH and XDCROOT. Individual programs could update tools as they see fit, or merely use the same tools as what the common repository is using (most likely). I’m not sure if there are any issues I’m neglecting by sidestepping the standard XDCPATH/ROOT variables in this case.
Option 2 might be to coordinate an “update day”. Say on the first of the month every developer grabs the latest updates in CCS4 (perhaps with a reminder via our mailing list). I don’t like this because it is not automated, but could be a less invasive way of handling updates.
Option 3 would be to force a version of the tools (say what is included on the Code Composer DVD), and forbid developers from upgrading tools. This sidesteps the problem completely, but causes us to miss out on bug and performance improvements).
I'm tending to lean towards option 1 at the moment.
Any insights or examples on how this issue has been handled by your organization are much appreciated.