# Copyright (c) 2023 Yonatan Schachter
# SPDX-License-Identifier: Apache-2.0

menuconfig BINDESC_DEFINE_VERSION
	bool "Version binary descriptors"
	help
	  Add the version binary descriptors

if BINDESC_DEFINE_VERSION

config BINDESC_KERNEL_VERSION_STRING
	bool "Kernel version string"
	help
	  The kernel version string, such as "3.4.0"

config BINDESC_KERNEL_VERSION_MAJOR
	bool "Kernel version major"
	help
	  The major version number, such as 3 in 3.4.0

config BINDESC_KERNEL_VERSION_MINOR
	bool "Kernel version minor"
	help
	  The minor version number, such as 4 in 3.4.0

config BINDESC_KERNEL_VERSION_PATCHLEVEL
	bool "Kernel version patchlevel"
	help
	  The patchlevel version number, such as 0 in 3.4.0

config BINDESC_KERNEL_VERSION_NUMBER
	bool "Kernel version number"
	help
	  The kernel version as binary coded decimal, computed as
	  (major << 16 | minor << 8 | patchlevel). For example,
	  3.4.0 would be represented as 0x30400

config BINDESC_KERNEL_BUILD_VERSION
	bool "Kernel git reference"
	help
	  The kernel git reference, such as "v3.3.0-18-g2c85d9224fca",
	  or overridden at build time - see BUILD_VERSION

config BINDESC_APP_VERSION_STRING
	bool "App version string"
	help
	  The app version string, such as "1.0.0"

config BINDESC_APP_VERSION_MAJOR
	bool "App version major"
	help
	  The app major version number, such as 1 in 1.0.0

config BINDESC_APP_VERSION_MINOR
	bool "App version minor"
	help
	  The app minor version number, such as 0 in 1.0.0

config BINDESC_APP_VERSION_PATCHLEVEL
	bool "App version patchlevel"
	help
	  The app patchlevel version number, such as 0 in 1.0.0

config BINDESC_APP_VERSION_NUMBER
	bool "App version number"
	help
	  The app version as binary coded decimal, computed as
	  (major << 16 | minor << 8 | patchlevel). For example,
	  1.0.0 would be represented as 0x10000

config BINDESC_APP_BUILD_VERSION
	bool "App git reference"
	help
	  The application git reference, such as "v3.3.0-18-g2c85d9224fca"

endif # BINDESC_DEFINE_VERSION
