9 #define BUILD_MONTH_IS_JAN (__DATE__[0] == 'J' && __DATE__[1] == 'a' && __DATE__[2] == 'n')
10 #define BUILD_MONTH_IS_FEB (__DATE__[0] == 'F')
11 #define BUILD_MONTH_IS_MAR (__DATE__[0] == 'M' && __DATE__[1] == 'a' && __DATE__[2] == 'r')
12 #define BUILD_MONTH_IS_APR (__DATE__[0] == 'A' && __DATE__[1] == 'p')
13 #define BUILD_MONTH_IS_MAY (__DATE__[0] == 'M' && __DATE__[1] == 'a' && __DATE__[2] == 'y')
14 #define BUILD_MONTH_IS_JUN (__DATE__[0] == 'J' && __DATE__[1] == 'u' && __DATE__[2] == 'n')
15 #define BUILD_MONTH_IS_JUL (__DATE__[0] == 'J' && __DATE__[1] == 'u' && __DATE__[2] == 'l')
16 #define BUILD_MONTH_IS_AUG (__DATE__[0] == 'A' && __DATE__[1] == 'u')
17 #define BUILD_MONTH_IS_SEP (__DATE__[0] == 'S')
18 #define BUILD_MONTH_IS_OCT (__DATE__[0] == 'O')
19 #define BUILD_MONTH_IS_NOV (__DATE__[0] == 'N')
20 #define BUILD_MONTH_IS_DEC (__DATE__[0] == 'D')
22 static constexpr
unsigned BUILD_MONTH_IDX =
23 (BUILD_MONTH_IS_JAN) ? 0x01 :
24 (BUILD_MONTH_IS_FEB) ? 0x02 :
25 (BUILD_MONTH_IS_MAR) ? 0x03 :
26 (BUILD_MONTH_IS_APR) ? 0x04 :
27 (BUILD_MONTH_IS_MAY) ? 0x05 :
28 (BUILD_MONTH_IS_JUN) ? 0x06 :
29 (BUILD_MONTH_IS_JUL) ? 0x07 :
30 (BUILD_MONTH_IS_AUG) ? 0x08 :
31 (BUILD_MONTH_IS_SEP) ? 0x09 :
32 (BUILD_MONTH_IS_OCT) ? 0x0A :
33 (BUILD_MONTH_IS_NOV) ? 0x0B :
34 (BUILD_MONTH_IS_DEC) ? 0x0C : 0xFF;
36 static constexpr
char space2zero(
char c) {
37 return (c ==
' ') ?
'0' : c;
40 static constexpr u32 char2int(
char c) {
41 return (u32)(space2zero(c) -
'0');
47 constexpr u32 yy = 10 * char2int(__DATE__[9]) + char2int(__DATE__[10]);
48 constexpr u32 mm = BUILD_MONTH_IDX;
49 constexpr u32 dd = 10 * char2int(__DATE__[4]) + char2int(__DATE__[5]);
50 constexpr u32 hh = 10 * char2int(__TIME__[0]) + char2int(__TIME__[1]);
51 return (yy << 24) | (mm << 16) | (dd << 8) | hh;
56 static constexpr
char iso8601[] = {
62 (BUILD_MONTH_IDX / 10) +
'0',
63 (BUILD_MONTH_IDX % 10) +
'0',
65 space2zero(__DATE__[4]),
u32 get_sw_build_code()
Calculate software build date as a 32-bit integer, 0xYYMMDDHH.
const char * get_sw_build_string()
Return a pointer to the ISO8601 date and time constructed at build time.