ModusToolbox™ products include tools and firmware that can be used individually, or as a group, to develop connected applications for our devices. We understand that you want to pick and choose the ModusToolbox™ products you use, merge them into your own flows, and develop applications in ways we cannot predict. However, it is important to understand that every tool and library may have more than one version. The tools package that provides the set of tools also has its own version. This section describes how ModusToolbox™ products are versioned.

General philosophy

ModusToolbox™ software is not a monolithic entity. Libraries and tools in the context of ModusToolbox™ are effectively "mini-products" with their own release schedules, upstream dependencies, and downstream dependent assets and applications. We deliver libraries via GitHub, and we deliver tools though the ModusToolbox™ tools package and the ModusToolbox™ Setup program.

All ModusToolbox™ products developed by us follow the standard versioning scheme:

  • If there are known backward compatibility breaks, the major version is incremented.

  • Minor version changes may introduce new features and functionality, but are "drop-in" compatible.

  • Patch version changes address minor defects. They are very low-risk (fix the essential defect without unnecessary complexity).

Code Examples include various libraries automatically. Prior to the ModusToolbox™ 2.3 release, these libraries were typically the latest versions. From the 2.3 release and newer, when you create a new application from a code example, any of the included libraries specified with a "latest-style" tag are converted to the "release-vX.Y.Z" style tag.

If you use the Library Manager to add a library to your project, the tool automatically finds and adds any required dependent libraries. From the 2.3 release and newer using the MTB flow, these dependencies are created using "release-vX.Y.Z" style tags. The tool also creates and updates a file named

assetlocks.json

in the

deps

subdirectory inside your application directory. This file maintains a history of all latest to release conversions made to ensure consistency with any libraries added in the future.

Tools package versioning

The ModusToolbox™ tools installation package is versioned as MAJOR.MINOR.PATCH. The file located at

<install_path>/ModusToolbox/tools_<version>/version-x.y.z.xml

also indicates the build number.

Every MAJOR.MINOR version of a ModusToolbox™ product is installed by default into

<install_path>/ModusToolbox

. So, if you have multiple versions of ModusToolbox™ software installed, they are all installed in parallel in the same "

ModusToolbox

" directory.

Multiple tools versions installed

When you run make commands from the command line, a message displays if you have multiple versions of the "tools" directory installed and if you have not specified a version to use.

INFO: Multiple tools versions were found in 
"/cygdrive/c/Users/XYZ/ModusToolbox/tools_a.b
/cygdrive/c/Users/XYZ/ModusToolbox/tools_x.y
C:/Users/XYZ/ModusToolbox/tools_x.y C:/Users/XYZ/ModusToolbox/tools_x.y".
This build is currently using "C:/Users/XYZ/ModusToolbox/tools_x.y".
Check that this is the correct version that should be used in this build.
To stop seeing this message, set the CY_TOOLS_PATHS environment variable
to the location of the tools directory. This can be done either as an
environment variable or set in the application Makefile.

Specifying alternate tools version

By default, the ModusToolbox™ software uses the most current version of the

tools_<version>

directory installed. That is, if you have ModusToolbox™ versions 3.6 and 3.5 installed, and if you launch the Eclipse IDE, the IDE will use the tools from the

tools_3.6

directory to launch configurators and build an application. This section describes how to specify the path to the desired version.

Environment variable

The overall way to specify a path other than the default "tools" directory, is to use a system variable named

CY_TOOLS_PATHS

. On Windows, open the Environment Variables dialog, and create a new System/User Variable, for example:

CY_TOOLS_PATHS=[ModusToolbox-install-path]/tools_[version]

Note:

Use a Windows style path, (that is, not like /cygdrive/c/). Also, use forward slashes. For example: C:/Users/XYZ/ModusToolbox/tools_3.x/

Use the appropriate method for setting variables in macOS and Linux for your system.

Specific project Makefile

If you want to use a specific "tools" path for your current project, edit that project's

Makefile

, as follows:

# If you install the IDE in a custom location, add the path to its
# "tools_X.Y" folder (where X and Y are the version number of the tools
# folder).
CY_TOOLS_PATHS+=C:/Users/XYZ/ModusToolbox/tools_3.x

This setting in the

Makefile

takes precedence over the environment variable .

Tools and configurators versioning

Every tool and configurator follow the standard versioning scheme and include a version.xml file that also contains a build number.

Configurator messages

Configurators indicate if you are about to modify the configuration file (for example, design.modus) with a newer version of the configurator, as well as if there is a risk that you will no longer be able to open it with the previous version of the configurator:


../figures/image11.png

Configurators will also indicate if you are trying to open the existing configuration with a different, backward and forward compatible version of the Configurator.


../figures/image12.png

Note:

If using the command line, the build system will notify you with the same message.


GitHub libraries versioning

GitHub libraries follow the same versioning scheme: MAJOR.MINOR.PATCH. The GitHub libraries, besides the code itself, also provide two files in MD format: README and RELEASE. The latter includes the version and the change history.

The versioning for GitHub libraries is implemented using GitHub tags. These tags are captured in the manifest files (see the

Manifest files

chapter for more details). The Project Creator tool parses the manifests to determine which BSPs and applications are available to select. The Library Manager tool parses the manifests and allow you to see and select between various tags of these libraries. When selecting a particular library of a particular version, the .

mtb

file gets created in your project. These .

mtb

files are a link to the specific tag. Refer to the

Library Manager user guide

for more details about tags.

Once complete with initial development for your project, if using the

git clone

method to create the application instead of the Project Creator tool, we recommend you switch to specific "release" tags. Otherwise, running the

make getlibs

command will update the libraries referenced by the .

mtb

files, and will deliver the latest code changes for the major version.

Dependencies between libraries

The following diagram shows the dependencies between libraries.


../figures/image13.png

There are dependencies between the libraries. There are two types of dependencies:

Git repo dependencies via .mtb files

Dependencies for various libraries are specified in the manifest file. Only the top-level application will have .

mtb

files for the libraries it directly includes.

Regular C dependencies via #include

Our libraries only call the documented public interface of other Libraries. Every library declares its version in the header. The consumer of the library including the header checks if the version is supported, and will notify via

#error

if the newer version is required. Examples of the dependencies:

  • The Device Support library (PDL) driver is used by the Middleware.

  • The configuration generated by the Configurator depends on the versions of the device support library (PDL) or on the Middleware headers.

Similarly, if the configuration generated by the configurator of the newer version than you have installed, the notification via the build system will trigger asking you to install the newer version of the ModusToolbox™ software, which has a fragmented distribution model. You are allowed and empowered to update libraries individually.