.. _app-version-details:

Application version management
******************************

Zephyr supports an application version management system for applications which is built around the
system that Zephyr uses for its own version system management. This allows applications to define a
version file and have application (or module) code include the auto-generated file and be able to
access it, just as they can with the kernel version. This version information is available from
multiple scopes, including:

* Code (C/C++)
* Kconfig
* CMake

which makes it a very versatile system for lifecycle management of applications. In addition, it
can be used when building applications which target supported bootloaders (e.g. MCUboot) allowing
images to be signed with correct version of the application automatically - no manual signing
steps are required.

VERSION file
============

Application version information is set on a per-application basis in a file named :file:`VERSION`,
which must be placed at the base directory of the application, where the CMakeLists.txt file is
located. This is a simple text file which contains the various version information fields, each on
a newline. The basic ``VERSION`` file has the following structure:

.. code-block:: cfg

   VERSION_MAJOR =
   VERSION_MINOR =
   PATCHLEVEL =
   VERSION_TWEAK =
   EXTRAVERSION =

Each field and the values it supports is described below (note that there may be further
restrictions depending upon what the version is used for, e.g. bootloaders might only support some
of these fields or might place limits on the maximum values of fields):

+---------------+----------------------------------------+
| Field         | Data type                              |
+---------------+----------------------------------------+
| VERSION_MAJOR | Numerical                              |
+---------------+----------------------------------------+
| VERSION_MINOR | Numerical                              |
+---------------+----------------------------------------+
| PATCHLEVEL    | Numerical                              |
+---------------+----------------------------------------+
| VERSION_TWEAK | Numerical                              |
+---------------+----------------------------------------+
| EXTRAVERSION  | Alphanumerical (Lowercase a-z and 0-9) |
+---------------+----------------------------------------+

When an application is configured using CMake, the version file will be automatically processed,
and will be checked automatically each time the version is changed, so CMake does not need to be
manually re-ran for changes to this file.

For the sections below, examples are provided for the following :file:`VERSION` file:

.. code-block:: cfg

   VERSION_MAJOR = 1
   VERSION_MINOR = 2
   PATCHLEVEL = 3
   VERSION_TWEAK = 4
   EXTRAVERSION = unstable

Use in code
===========

To use the version information in application code, the version file must be included, then the
fields can be freely used. The include file name is :file:`app_version.h` (no path is needed), the
following defines are available:

+--------------------+-------------------+------------------------------------------------------+-------------------------+
| Define             | Type              | Field(s)                                             | Example                 |
+--------------------+-------------------+------------------------------------------------------+-------------------------+
| APPVERSION         | Numerical         | ``VERSION_MAJOR`` (left shifted by 24 bits), |br|    | 0x1020304               |
|                    |                   | ``VERSION_MINOR`` (left shifted by 16 bits), |br|    |                         |
|                    |                   | ``PATCHLEVEL`` (left shifted by 8 bits), |br|        |                         |
|                    |                   | ``VERSION_TWEAK``                                    |                         |
+--------------------+-------------------+------------------------------------------------------+-------------------------+
| APP_VERSION_NUMBER | Numerical         | ``VERSION_MAJOR`` (left shifted by 16 bits), |br|    | 0x10203                 |
|                    |                   | ``VERSION_MINOR`` (left shifted by 8 bits), |br|     |                         |
|                    |                   | ``PATCHLEVEL``                                       |                         |
+--------------------+-------------------+------------------------------------------------------+-------------------------+
| APP_VERSION_MAJOR  | Numerical         | ``VERSION_MAJOR``                                    | 1                       |
+--------------------+-------------------+------------------------------------------------------+-------------------------+
| APP_VERSION_MINOR  | Numerical         | ``VERSION_MINOR``                                    | 2                       |
+--------------------+-------------------+------------------------------------------------------+-------------------------+
| APP_PATCHLEVEL     | Numerical         | ``PATCHLEVEL``                                       | 3                       |
+--------------------+-------------------+------------------------------------------------------+-------------------------+
| APP_VERSION_STRING | String (quoted)   | ``VERSION_MAJOR``, |br|                              | "1.2.3-unstable"        |
|                    |                   | ``VERSION_MINOR``, |br|                              |                         |
|                    |                   | ``PATCHLEVEL``, |br|                                 |                         |
|                    |                   | ``EXTRAVERSION`` |br|                                |                         |
+--------------------+-------------------+------------------------------------------------------+-------------------------+
| APP_BUILD_VERSION  | String (unquoted) | None (value of ``git describe --abbrev=12 --always`` | v3.3.0-18-g2c85d9224fca |
|                    |                   | from application repository)                         |                         |
+--------------------+-------------------+------------------------------------------------------+-------------------------+

Use in Kconfig
==============

The following variables are available for usage in Kconfig files:

+------------------+-----------+-------------------------+----------------+
| Variable         | Type      | Field(s)                | Example        |
+------------------+-----------+-------------------------+----------------+
| $(VERSION_MAJOR) | Numerical | ``VERSION_MAJOR``       | 1              |
+------------------+-----------+-------------------------+----------------+
| $(VERSION_MINOR) | Numerical | ``VERSION_MINOR``       | 2              |
+------------------+-----------+-------------------------+----------------+
| $(PATCHLEVEL)    | Numerical | ``PATCHLEVEL``          | 3              |
+------------------+-----------+-------------------------+----------------+
| $(VERSION_TWEAK) | Numerical | ``VERSION_TWEAK``       | 4              |
+------------------+-----------+-------------------------+----------------+
| $(APPVERSION)    | String    | ``VERSION_MAJOR``, |br| | 1.2.3-unstable |
|                  |           | ``VERSION_MINOR``, |br| |                |
|                  |           | ``PATCHLEVEL``, |br|    |                |
|                  |           | ``EXTRAVERSION``        |                |
+------------------+-----------+-------------------------+----------------+

Use in CMake
============

The following variable are available for usage in CMake files:

+--------------------+-----------------+---------------------------------------------------+----------------+
| Variable           | Type            | Field(s)                                          | Example        |
+--------------------+-----------------+---------------------------------------------------+----------------+
| APPVERSION         | Numerical (hex) | ``VERSION_MAJOR`` (left shifted by 24 bits), |br| | 0x1020304      |
|                    |                 | ``VERSION_MINOR`` (left shifted by 16 bits), |br| |                |
|                    |                 | ``PATCHLEVEL`` (left shifted by 8 bits), |br|     |                |
|                    |                 | ``VERSION_TWEAK``                                 |                |
+--------------------+-----------------+---------------------------------------------------+----------------+
| APP_VERSION_NUMBER | Numerical (hex) | ``VERSION_MAJOR`` (left shifted by 16 bits), |br| | 0x10203        |
|                    |                 | ``VERSION_MINOR`` (left shifted by 8 bits), |br|  |                |
|                    |                 | ``PATCHLEVEL``                                    |                |
+--------------------+-----------------+---------------------------------------------------+----------------+
| APP_VERSION_MAJOR  | Numerical       | ``VERSION_MAJOR``                                 | 1              |
+--------------------+-----------------+---------------------------------------------------+----------------+
| APP_VERSION_MINOR  | Numerical       | ``VERSION_MINOR``                                 | 2              |
+--------------------+-----------------+---------------------------------------------------+----------------+
| APP_PATCHLEVEL     | Numerical       | ``PATCHLEVEL``                                    | 3              |
+--------------------+-----------------+---------------------------------------------------+----------------+
| APP_VERSION_TWEAK  | Numerical       | ``VERSION_TWEAK``                                 | 4              |
+--------------------+-----------------+---------------------------------------------------+----------------+
| APP_VERSION_STRING | String          | ``VERSION_MAJOR``, |br|                           | 1.2.3-unstable |
|                    |                 | ``VERSION_MINOR``, |br|                           |                |
|                    |                 | ``PATCHLEVEL``, |br|                              |                |
|                    |                 | ``EXTRAVERSION``                                  |                |
+--------------------+-----------------+---------------------------------------------------+----------------+

Use in MCUboot-supported applications
=====================================

No additional configuration needs to be done to the target application so long as it is configured
to support MCUboot and a signed image is generated, the version information will be automatically
included in the image data.

The format used for signing is ``VERSION_MAJOR`` . ``VERSION_MINOR`` . ``PATCHLEVEL``, the tweak
version field is not currently used.
