| .. _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. Zephyr limits the value of each numeric |
| field to a single byte (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 (0-255) | |
| +---------------+----------------------------------------+ |
| | VERSION_MINOR | Numerical (0-255) | |
| +---------------+----------------------------------------+ |
| | PATCHLEVEL | Numerical (0-255) | |
| +---------------+----------------------------------------+ |
| | VERSION_TWEAK | Numerical (0-255) | |
| +---------------+----------------------------------------+ |
| | 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_TWEAK | Numerical | ``VERSION_TWEAK`` | 4 | |
| +-----------------------------+-------------------+------------------------------------------------------+-------------------------+ |
| | APP_VERSION_STRING | String (quoted) | ``VERSION_MAJOR``, |br| | "1.2.3-unstable" | |
| | | | ``VERSION_MINOR``, |br| | | |
| | | | ``PATCHLEVEL``, |br| | | |
| | | | ``EXTRAVERSION`` |br| | | |
| +-----------------------------+-------------------+------------------------------------------------------+-------------------------+ |
| | APP_VERSION_EXTENDED_STRING | String (quoted) | ``VERSION_MAJOR``, |br| | "1.2.3-unstable+4" | |
| | | | ``VERSION_MINOR``, |br| | | |
| | | | ``PATCHLEVEL``, |br| | | |
| | | | ``EXTRAVERSION`` |br| | | |
| | | | ``VERSION_TWEAK`` |br| | | |
| +-----------------------------+-------------------+------------------------------------------------------+-------------------------+ |
| | APP_VERSION_TWEAK_STRING | String (quoted) | ``VERSION_MAJOR``, |br| | "1.2.3+4" | |
| | | | ``VERSION_MINOR``, |br| | | |
| | | | ``PATCHLEVEL``, |br| | | |
| | | | ``VERSION_TWEAK`` |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`` | | |
| +--------------------------------+-----------+--------------------------+------------------+ |
| | $(APP_VERSION_EXTENDED_STRING) | String | ``VERSION_MAJOR``, |br| | 1.2.3-unstable+4 | |
| | | | ``VERSION_MINOR``, |br| | | |
| | | | ``PATCHLEVEL``, |br| | | |
| | | | ``EXTRAVERSION``, |br| | | |
| | | | ``VERSION_TWEAK`` | | |
| +--------------------------------+-----------+--------------------------+------------------+ |
| | $(APP_VERSION_TWEAK_STRING) | String | ``VERSION_MAJOR``, |br| | 1.2.3+4 | |
| | | | ``VERSION_MINOR``, |br| | | |
| | | | ``PATCHLEVEL``, |br| | | |
| | | | ``VERSION_TWEAK`` | | |
| +--------------------------------+-----------+--------------------------+------------------+ |
| |
| 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`` | | |
| +-----------------------------+-----------------+---------------------------------------------------+------------------+ |
| | APP_VERSION_EXTENDED_STRING | String | ``VERSION_MAJOR``, |br| | 1.2.3-unstable+4 | |
| | | | ``VERSION_MINOR``, |br| | | |
| | | | ``PATCHLEVEL``, |br| | | |
| | | | ``EXTRAVERSION``, |br| | | |
| | | | ``VERSION_TWEAK`` | | |
| +-----------------------------+-----------------+---------------------------------------------------+------------------+ |
| | APP_VERSION_TWEAK_STRING | String | ``VERSION_MAJOR``, |br| | 1.2.3+4 | |
| | | | ``VERSION_MINOR``, |br| | | |
| | | | ``PATCHLEVEL``, |br| | | |
| | | | ``VERSION_TWEAK`` | | |
| +-----------------------------+-----------------+---------------------------------------------------+------------------+ |
| |
| 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. |