mirror of
https://github.com/RIOT-OS/RIOT.git
synced 2024-12-29 04:50:03 +01:00
Merge pull request #16765 from benpicco/RIOT_VERSION_CODE
build system: add machine-readable RIOT_VERSION_CODE macro
This commit is contained in:
commit
ea8e632eda
@ -476,6 +476,8 @@ endif
|
|||||||
# set some settings useful for continuous integration builds
|
# set some settings useful for continuous integration builds
|
||||||
ifeq ($(RIOT_CI_BUILD),1)
|
ifeq ($(RIOT_CI_BUILD),1)
|
||||||
RIOT_VERSION ?= buildtest
|
RIOT_VERSION ?= buildtest
|
||||||
|
# set a dummy version number
|
||||||
|
RIOT_VERSION_CODE ?= RIOT_VERSION_NUM\(2042,5,23,0\)
|
||||||
ifneq ($(filter $(BOARD_INSUFFICIENT_MEMORY), $(BOARD)),)
|
ifneq ($(filter $(BOARD_INSUFFICIENT_MEMORY), $(BOARD)),)
|
||||||
$(info CI-build: skipping link step)
|
$(info CI-build: skipping link step)
|
||||||
RIOTNOLINK:=1
|
RIOTNOLINK:=1
|
||||||
@ -504,9 +506,11 @@ include $(RIOTMAKE)/cflags.inc.mk
|
|||||||
|
|
||||||
# Include VERSION for releases
|
# Include VERSION for releases
|
||||||
-include $(RIOTBASE)/VERSION
|
-include $(RIOTBASE)/VERSION
|
||||||
|
-include $(RIOTBASE)/EXTRAVERSION
|
||||||
|
|
||||||
include $(RIOTMAKE)/git_version.inc.mk
|
include $(RIOTMAKE)/git_version.inc.mk
|
||||||
RIOT_VERSION ?= $(or $(GIT_VERSION),'UNKNOWN (builddir: $(RIOTBASE))')
|
RIOT_VERSION ?= $(or $(GIT_VERSION),'UNKNOWN (builddir: $(RIOTBASE))')
|
||||||
|
RIOT_EXTRAVERSION ?= 0
|
||||||
|
|
||||||
# Deprecate using RIOT_VERSION_OVERRIDE but currently keep the behavior
|
# Deprecate using RIOT_VERSION_OVERRIDE but currently keep the behavior
|
||||||
ifneq (,$(RIOT_VERSION_OVERRIDE))
|
ifneq (,$(RIOT_VERSION_OVERRIDE))
|
||||||
@ -514,6 +518,10 @@ ifneq (,$(RIOT_VERSION_OVERRIDE))
|
|||||||
RIOT_VERSION = $(RIOT_VERSION_OVERRIDE)
|
RIOT_VERSION = $(RIOT_VERSION_OVERRIDE)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
# Generate machine readable RIOT VERSION macro
|
||||||
|
RIOT_VERSION_CODE ?= $(shell echo ${RIOT_VERSION} | \
|
||||||
|
sed -E 's/([0-9]+).([0-9]+).?([0-9]+)?.*/RIOT_VERSION_NUM\\\(\1,\2,0\3,${RIOT_EXTRAVERSION}\\\)/')
|
||||||
|
|
||||||
# Set module by prepending APPLICATION name with 'application_'.
|
# Set module by prepending APPLICATION name with 'application_'.
|
||||||
# It prevents conflict with application and modules with the same name.
|
# It prevents conflict with application and modules with the same name.
|
||||||
APPLICATION_MODULE ?= application_$(APPLICATION)
|
APPLICATION_MODULE ?= application_$(APPLICATION)
|
||||||
@ -980,6 +988,7 @@ $(RIOTBUILD_CONFIG_HEADER_C).in: FORCE | $(CLEAN)
|
|||||||
|
|
||||||
CFLAGS_WITH_MACROS += $(CFLAGS)
|
CFLAGS_WITH_MACROS += $(CFLAGS)
|
||||||
CFLAGS_WITH_MACROS += -DRIOT_VERSION=\"$(RIOT_VERSION)\"
|
CFLAGS_WITH_MACROS += -DRIOT_VERSION=\"$(RIOT_VERSION)\"
|
||||||
|
CFLAGS_WITH_MACROS += -DRIOT_VERSION_CODE=$(RIOT_VERSION_CODE)
|
||||||
# MODULE_NAME defines. Declared in 'makefiles/modules.inc.mk'
|
# MODULE_NAME defines. Declared in 'makefiles/modules.inc.mk'
|
||||||
CFLAGS_WITH_MACROS += $(EXTDEFINES)
|
CFLAGS_WITH_MACROS += $(EXTDEFINES)
|
||||||
|
|
||||||
|
@ -187,6 +187,34 @@ extern "C" {
|
|||||||
*/
|
*/
|
||||||
#define IS_USED(module) IS_ACTIVE(module)
|
#define IS_USED(module) IS_ACTIVE(module)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @def RIOT_VERSION_NUM(major, minor, patch, extra)
|
||||||
|
* @brief Generates a 64 bit variable of a release version.
|
||||||
|
* Comparisons to this only apply to released branches
|
||||||
|
*
|
||||||
|
* To define @p extra add a file `EXTRAVERSION` to the RIOT root
|
||||||
|
* with the content
|
||||||
|
*
|
||||||
|
* RIOT_EXTRAVERSION = <extra>
|
||||||
|
*
|
||||||
|
* with `<extra>` being the number of your local version.
|
||||||
|
* This can be useful if you are maintaining a downstream
|
||||||
|
* release to base further work on.
|
||||||
|
*
|
||||||
|
* @warning This is only intended to be used with external boards or
|
||||||
|
* modules.
|
||||||
|
* In-tree code must not make use of this macro.
|
||||||
|
*
|
||||||
|
* @param[in] major Mayor version of the release
|
||||||
|
* @param[in] minor Minor version of the release
|
||||||
|
* @param[in] patch Patch level of the release
|
||||||
|
* @param[in] extra Extra version, user defined
|
||||||
|
*
|
||||||
|
* @returns A machine readable version variable
|
||||||
|
*/
|
||||||
|
#define RIOT_VERSION_NUM(major, minor, patch, extra) \
|
||||||
|
(((0ULL + major) << 48) + ((0ULL + minor) << 32) + \
|
||||||
|
((0ULL + patch) << 16) + (extra))
|
||||||
/**
|
/**
|
||||||
* @cond INTERNAL
|
* @cond INTERNAL
|
||||||
*/
|
*/
|
||||||
|
@ -60,6 +60,7 @@ export DOCKER_ENV_VARS += \
|
|||||||
PROGRAMMER \
|
PROGRAMMER \
|
||||||
RIOT_CI_BUILD \
|
RIOT_CI_BUILD \
|
||||||
RIOT_VERSION \
|
RIOT_VERSION \
|
||||||
|
RIOT_VERSION_CODE \
|
||||||
SCANBUILD_ARGS \
|
SCANBUILD_ARGS \
|
||||||
SCANBUILD_OUTPUTDIR \
|
SCANBUILD_OUTPUTDIR \
|
||||||
SIZE \
|
SIZE \
|
||||||
|
1
tests/unittests/tests-kernel_defines/Makefile
Normal file
1
tests/unittests/tests-kernel_defines/Makefile
Normal file
@ -0,0 +1 @@
|
|||||||
|
include $(RIOTBASE)/Makefile.base
|
64
tests/unittests/tests-kernel_defines/tests-kernel_defines.c
Normal file
64
tests/unittests/tests-kernel_defines/tests-kernel_defines.c
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2021 ML!PA Consulting GmbH
|
||||||
|
*
|
||||||
|
* This file is subject to the terms and conditions of the GNU Lesser
|
||||||
|
* General Public License v2.1. See the file LICENSE in the top level
|
||||||
|
* directory for more details.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @{
|
||||||
|
*
|
||||||
|
* @file
|
||||||
|
*/
|
||||||
|
#include "embUnit.h"
|
||||||
|
#include "kernel_defines.h"
|
||||||
|
|
||||||
|
static void kernel_version_parse(uint64_t version, uint16_t *mayor,
|
||||||
|
uint16_t *minor, uint16_t *patch, uint16_t *extra)
|
||||||
|
{
|
||||||
|
*mayor = version >> 48;
|
||||||
|
*minor = (version >> 32) & 0xFFFF;
|
||||||
|
*patch = (version >> 16) & 0xFFFF;
|
||||||
|
*extra = (version >> 0) & 0xFFFF;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void test_kernel_version(void)
|
||||||
|
{
|
||||||
|
uint16_t mayor, minor, patch, extra;
|
||||||
|
|
||||||
|
TEST_ASSERT(RIOT_VERSION_CODE);
|
||||||
|
TEST_ASSERT(RIOT_VERSION_CODE > RIOT_VERSION_NUM(2017, 1, 3, 0));
|
||||||
|
TEST_ASSERT(RIOT_VERSION_CODE < RIOT_VERSION_NUM(2080, 10, 2, 0));
|
||||||
|
|
||||||
|
kernel_version_parse(RIOT_VERSION_NUM(2020, 7, 1, 0),
|
||||||
|
&mayor, &minor, &patch, &extra);
|
||||||
|
|
||||||
|
TEST_ASSERT_EQUAL_INT(2020, mayor);
|
||||||
|
TEST_ASSERT_EQUAL_INT(7, minor);
|
||||||
|
TEST_ASSERT_EQUAL_INT(1, patch);
|
||||||
|
TEST_ASSERT_EQUAL_INT(0, extra);
|
||||||
|
#if RIOT_VERSION_CODE < RIOT_VERSION_NUM(2000, 1, 1, 0)
|
||||||
|
TEST_ASSERT(0);
|
||||||
|
#endif
|
||||||
|
#if RIOT_VERSION_CODE > RIOT_VERSION_NUM(2100, 1, 1, 1)
|
||||||
|
TEST_ASSERT(0);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
Test *tests_kernel_defines_tests(void)
|
||||||
|
{
|
||||||
|
EMB_UNIT_TESTFIXTURES(fixtures) {
|
||||||
|
new_TestFixture(test_kernel_version),
|
||||||
|
};
|
||||||
|
|
||||||
|
EMB_UNIT_TESTCALLER(kernel_defines_tests, NULL, NULL, fixtures);
|
||||||
|
|
||||||
|
return (Test *)&kernel_defines_tests;
|
||||||
|
}
|
||||||
|
|
||||||
|
void tests_kernel_defines(void)
|
||||||
|
{
|
||||||
|
TESTS_RUN(tests_kernel_defines_tests());
|
||||||
|
}
|
||||||
|
/** @} */
|
37
tests/unittests/tests-kernel_defines/tests-kernel_defines.h
Normal file
37
tests/unittests/tests-kernel_defines/tests-kernel_defines.h
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2021 ML!PA Consulting GmbH
|
||||||
|
*
|
||||||
|
* This file is subject to the terms and conditions of the GNU Lesser
|
||||||
|
* General Public License v2.1. See the file LICENSE in the top level
|
||||||
|
* directory for more details.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @addtogroup unittests
|
||||||
|
* @{
|
||||||
|
*
|
||||||
|
* @file
|
||||||
|
* @brief Unittests for the ``kernel_defines`` module
|
||||||
|
*
|
||||||
|
* @author Benjamin Valentin <benjamin.valentin@ml-pa.com>
|
||||||
|
*/
|
||||||
|
#ifndef TESTS_KERNEL_DEFINES_H
|
||||||
|
#define TESTS_KERNEL_DEFINES_H
|
||||||
|
|
||||||
|
#include "embUnit.h"
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief The entry point of this test suite.
|
||||||
|
*/
|
||||||
|
void tests_kernel_defines(void);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* TESTS_KERNEL_DEFINES_H */
|
||||||
|
/** @} */
|
Loading…
Reference in New Issue
Block a user