From 95f27877c886c7ef263e90ad494748733744fce8 Mon Sep 17 00:00:00 2001 From: Nicolas Schodet Date: Tue, 28 Sep 2021 22:24:47 +0200 Subject: Change the versioning scheme to use a third number NXT Improved firmware will now use a x.y.z version numbering scheme. The current version is 1.29.0 and the next one will be 1.29.1. Previously, the commit hash was included in the custom version. This is replaced with a build date corresponding to the newest git commit, unless the SOURCE_DATE_EPOCH environment variable is defined, in which case it will be used as build date. When out of git, if no SOURCE_DATE_EPOCH is defined, it will fall back to the current date. The weird date parsing code in BtTest is gone. --- AT91SAM7S256/SAM7S256/gcc/Makefile | 17 +++++---- AT91SAM7S256/Source/BtTest.inc | 70 ++++++-------------------------------- AT91SAM7S256/Source/c_loader.iom | 3 +- 3 files changed, 24 insertions(+), 66 deletions(-) (limited to 'AT91SAM7S256') diff --git a/AT91SAM7S256/SAM7S256/gcc/Makefile b/AT91SAM7S256/SAM7S256/gcc/Makefile index ed52112..2562b54 100644 --- a/AT91SAM7S256/SAM7S256/gcc/Makefile +++ b/AT91SAM7S256/SAM7S256/gcc/Makefile @@ -3,8 +3,13 @@ SRCDIR = $(BASE)/Source DBGDIR = $(BASE)/armdebug/Debugger CPUINCDIR = $(BASE)/SAM7S256/Include -GIT_VERSION := $(shell git rev-parse --short=7 HEAD) -CUSTOM_FIRMWAREVERSION = $(GIT_VERSION) +DATE_FMT = +%Y-%m-%dT%H:%M +ifndef SOURCE_DATE_EPOCH + SOURCE_DATE_EPOCH = $(shell git log -1 --pretty=%ct) +endif +BUILD_DATE ?= $(shell LC_ALL=C date -u -d "@$(SOURCE_DATE_EPOCH)" "$(DATE_FMT)" 2>/dev/null \ + || LC_ALL=C date -u -r "$(SOURCE_DATE_EPOCH)" "$(DATE_FMT)" 2>/dev/null \ + || LC_ALL=C date -u "$(DATE_FMT)") TARGET = nxt_firmware @@ -33,7 +38,7 @@ INCLUDES = MCU = arm7tdmi STARTOFUSERFLASH_DEFINES = -DSTARTOFUSERFLASH_FROM_LINKER=1 -VERSION_DEFINES = -DCUSTOM_FIRMWAREVERSION=\"$(CUSTOM_FIRMWAREVERSION)\" +VERSION_DEFINES = -D'BUILD_DATE="$(BUILD_DATE)"' DEFINES = -DPROTOTYPE_PCB_4 -DNEW_MENU -DROM_RUN -DVECTORS_IN_RAM \ $(STARTOFUSERFLASH_DEFINES) $(VERSION_DEFINES) OPTIMIZE = -Os -fno-strict-aliasing \ @@ -91,12 +96,12 @@ $(THUMB_OBJECTS): THUMB = -mthumb -include $(OBJECTS:%.o=%.d) -LAST_CUSTOM_FIRMWAREVERSION=none +LAST_BUILD_DATE=none -include version.mak -ifneq ($(LAST_CUSTOM_FIRMWAREVERSION),$(CUSTOM_FIRMWAREVERSION)) +ifneq ($(LAST_BUILD_DATE),$(BUILD_DATE)) .PHONY: version.mak version.mak: - echo "LAST_CUSTOM_FIRMWAREVERSION = $(CUSTOM_FIRMWAREVERSION)" > $@ + echo "LAST_BUILD_DATE = $(BUILD_DATE)" > $@ endif c_ui.o: version.mak diff --git a/AT91SAM7S256/Source/BtTest.inc b/AT91SAM7S256/Source/BtTest.inc index f879e20..65575af 100644 --- a/AT91SAM7S256/Source/BtTest.inc +++ b/AT91SAM7S256/Source/BtTest.inc @@ -2,6 +2,10 @@ //#define TESTPRG // If defined the test program will be included +#ifndef BUILD_DATE +# define BUILD_DATE "" +#endif + #ifdef TESTPRG #include "Test1.txt" #include "Test2.txt" @@ -9,69 +13,17 @@ extern void BtIo(void); -const char BUILD_DATE[] = __DATE__; -const char BUILD_TIME[] = __TIME__; - -const char MONTH[] = "JanFebMarAprMayJunJulAugSepOctNovDec"; - void GetProtocolVersion(UBYTE *String) { - UWORD Tmp; - - Tmp = FIRMWAREVERSION & 0x00FF; - - if (Tmp < 100) - { -#ifdef CUSTOM_FIRMWAREVERSION - int pad = (sizeof (CUSTOM_FIRMWAREVERSION) - 1) > 7 ? 1 : 1 + 7 - (sizeof (CUSTOM_FIRMWAREVERSION) - 1); - sprintf((char*)String,"FW %*u.%02ui-%.7s", pad, (FIRMWAREVERSION >> 8) & 0x00FF,Tmp & 0x00FF, CUSTOM_FIRMWAREVERSION); -#else - sprintf((char*)String,"FW %3u.%02u",(FIRMWAREVERSION >> 8) & 0x00FF,Tmp & 0x00FF); -#endif - } - else - { - sprintf((char*)String,"FW Hex %2X.%02X",(FIRMWAREVERSION >> 8) & 0x00FF,Tmp & 0x00FF); - } + char Tmp[DISPLAYLINE_LENGTH + 1]; + snprintf(Tmp, sizeof(Tmp), "%d.%d.%d", (FIRMWAREVERSION >> 8) & 0xFF, FIRMWAREVERSION & 0xFF, FIRMWAREPATCH); + snprintf((char*)String, DISPLAYLINE_LENGTH + 1, "FWi %*s", DISPLAYLINE_LENGTH - 4, Tmp); } void GetARMBuild(UBYTE *String) { - UWORD Tmp; - UWORD Lng; - char String1[4]; - char String2[4]; - - String1[0] = BUILD_DATE[4]; - String1[1] = BUILD_DATE[5]; - String1[2] = 0; - - Tmp = (UWORD)atoi(String1); - Lng = 0; - Lng += sprintf((char*)&String[Lng],"BUILD "); - Lng += sprintf((char*)&String[Lng],"%02u",Tmp); - - String1[0] = BUILD_DATE[0]; - String1[1] = BUILD_DATE[1]; - String1[2] = BUILD_DATE[2]; - String1[3] = 0; - String2[3] = 0; - - Tmp = 0; - do - { - String2[0] = MONTH[0 + 3 * Tmp]; - String2[1] = MONTH[1 + 3 * Tmp]; - String2[2] = MONTH[2 + 3 * Tmp]; - Tmp++; - } - while ((Tmp < 12) && (strcmp(String1,String2) != 0)); - - Lng += sprintf((char*)&String[Lng],"%02u",Tmp); - Lng += sprintf((char*)&String[Lng],"%c%c",BUILD_DATE[9],BUILD_DATE[10]); - Lng += sprintf((char*)&String[Lng],"%c%c",BUILD_TIME[0],BUILD_TIME[1]); - Lng += sprintf((char*)&String[Lng],"%c%c",BUILD_TIME[3],BUILD_TIME[4]); + snprintf((char*)String, DISPLAYLINE_LENGTH + 1, "%s", BUILD_DATE); } @@ -261,9 +213,9 @@ UBYTE TestPrg(UBYTE Dummy) case SYSTEM_INIT : { GetProtocolVersion(TxtBuffer[0]); - GetAVRBuild(TxtBuffer[1]); - GetBC4Build(TxtBuffer[2]); - GetARMBuild(TxtBuffer[3]); + GetARMBuild(TxtBuffer[1]); + GetAVRBuild(TxtBuffer[2]); + GetBC4Build(TxtBuffer[3]); GetBC4Address(TxtBuffer[4]); pMapDisplay->pTextLines[TEXTLINE_3] = (UBYTE*)TxtBuffer[0]; diff --git a/AT91SAM7S256/Source/c_loader.iom b/AT91SAM7S256/Source/c_loader.iom index dde8b6a..588db1c 100644 --- a/AT91SAM7S256/Source/c_loader.iom +++ b/AT91SAM7S256/Source/c_loader.iom @@ -21,7 +21,8 @@ //For example, version 1.5 would be 0x0105 //If these switch to little-endian, be sure to update //definition and usages of VM_OLDEST_COMPATIBLE_VERSION, too! -#define FIRMWAREVERSION 0x011D //1.28 +#define FIRMWAREVERSION 0x011D // x.y +#define FIRMWAREPATCH 0 // .z, the third number #define PROTOCOLVERSION 0x017C //1.124 enum -- cgit v1.2.3