Merge pull request #91 from henrygab/improve_repeatable_builds
Allow overriding the compilation date/time
This commit is contained in:
commit
e65fcc2b18
2 changed files with 56 additions and 44 deletions
|
|
@ -26,54 +26,66 @@
|
|||
#ifndef COMPILE_DATE_H
|
||||
#define COMPILE_DATE_H
|
||||
|
||||
#define __YEAR_INT__ ((( \
|
||||
(__DATE__ [ 7u] - '0') * 10u + \
|
||||
(__DATE__ [ 8u] - '0')) * 10u + \
|
||||
(__DATE__ [ 9u] - '0')) * 10u + \
|
||||
(__DATE__ [10u] - '0'))
|
||||
// Help enable build to be deterministic.
|
||||
// Allows Ghostfat to generate 100% reproducible images across compilations.
|
||||
// Reproducible builds are also important for other reasons.
|
||||
// See generally, https://reproducible-builds.org/
|
||||
#ifndef COMPILE_DATE
|
||||
#define COMPILE_DATE __DATE__
|
||||
#endif
|
||||
#ifndef COMPILE_TIME
|
||||
#define COMPILE_TIME __TIME__
|
||||
#endif
|
||||
|
||||
#define __MONTH_INT__ ( \
|
||||
(__DATE__ [2u] == 'n' && __DATE__ [1u] == 'a') ? 1u /*Jan*/ \
|
||||
: (__DATE__ [2u] == 'b' ) ? 2u /*Feb*/ \
|
||||
: (__DATE__ [2u] == 'r' && __DATE__ [1u] == 'a') ? 3u /*Mar*/ \
|
||||
: (__DATE__ [2u] == 'r' ) ? 4u /*Apr*/ \
|
||||
: (__DATE__ [2u] == 'y' ) ? 5u /*May*/ \
|
||||
: (__DATE__ [2u] == 'n' ) ? 6u /*Jun*/ \
|
||||
: (__DATE__ [2u] == 'l' ) ? 7u /*Jul*/ \
|
||||
: (__DATE__ [2u] == 'g' ) ? 8u /*Aug*/ \
|
||||
: (__DATE__ [2u] == 'p' ) ? 9u /*Sep*/ \
|
||||
: (__DATE__ [2u] == 't' ) ? 10u /*Oct*/ \
|
||||
: (__DATE__ [2u] == 'v' ) ? 11u /*Nov*/ \
|
||||
#define COMPILE_YEAR_INT ((( \
|
||||
(COMPILE_DATE [ 7u] - '0') * 10u + \
|
||||
(COMPILE_DATE [ 8u] - '0')) * 10u + \
|
||||
(COMPILE_DATE [ 9u] - '0')) * 10u + \
|
||||
(COMPILE_DATE [10u] - '0'))
|
||||
|
||||
#define COMPILE_MONTH_INT ( \
|
||||
(COMPILE_DATE [2u] == 'n' && COMPILE_DATE [1u] == 'a') ? 1u /*Jan*/ \
|
||||
: (COMPILE_DATE [2u] == 'b' ) ? 2u /*Feb*/ \
|
||||
: (COMPILE_DATE [2u] == 'r' && COMPILE_DATE [1u] == 'a') ? 3u /*Mar*/ \
|
||||
: (COMPILE_DATE [2u] == 'r' ) ? 4u /*Apr*/ \
|
||||
: (COMPILE_DATE [2u] == 'y' ) ? 5u /*May*/ \
|
||||
: (COMPILE_DATE [2u] == 'n' ) ? 6u /*Jun*/ \
|
||||
: (COMPILE_DATE [2u] == 'l' ) ? 7u /*Jul*/ \
|
||||
: (COMPILE_DATE [2u] == 'g' ) ? 8u /*Aug*/ \
|
||||
: (COMPILE_DATE [2u] == 'p' ) ? 9u /*Sep*/ \
|
||||
: (COMPILE_DATE [2u] == 't' ) ? 10u /*Oct*/ \
|
||||
: (COMPILE_DATE [2u] == 'v' ) ? 11u /*Nov*/ \
|
||||
: 12u /*Dec*/ )
|
||||
|
||||
#define __DAY_INT__ ( \
|
||||
(__DATE__ [4u] == ' ' ? 0 : __DATE__ [4u] - '0') * 10u \
|
||||
+ (__DATE__ [5u] - '0') )
|
||||
#define COMPILE_DAY_INT ( \
|
||||
(COMPILE_DATE [4u] == ' ' ? 0 : COMPILE_DATE [4u] - '0') * 10u + \
|
||||
(COMPILE_DATE [5u] - '0') \
|
||||
)
|
||||
|
||||
// __TIME__ expands to an eight-character string constant
|
||||
// "23:59:01", or (if cannot determine time) "??:??:??"
|
||||
#define __HOUR_INT__ ( \
|
||||
(__TIME__ [0u] == '?' ? 0 : __TIME__ [0u] - '0') * 10u \
|
||||
+ (__TIME__ [1u] == '?' ? 0 : __TIME__ [1u] - '0') )
|
||||
#define COMPILE_HOUR_INT ( \
|
||||
(COMPILE_TIME [0u] == '?' ? 0 : COMPILE_TIME [0u] - '0') * 10u \
|
||||
+ (COMPILE_TIME [1u] == '?' ? 0 : COMPILE_TIME [1u] - '0') )
|
||||
|
||||
#define __MINUTE_INT__ ( \
|
||||
(__TIME__ [3u] == '?' ? 0 : __TIME__ [3u] - '0') * 10u \
|
||||
+ (__TIME__ [4u] == '?' ? 0 : __TIME__ [4u] - '0') )
|
||||
#define COMPILE_MINUTE_INT ( \
|
||||
(COMPILE_TIME [3u] == '?' ? 0 : COMPILE_TIME [3u] - '0') * 10u \
|
||||
+ (COMPILE_TIME [4u] == '?' ? 0 : COMPILE_TIME [4u] - '0') )
|
||||
|
||||
#define __SECONDS_INT__ ( \
|
||||
(__TIME__ [6u] == '?' ? 0 : __TIME__ [6u] - '0') * 10u \
|
||||
+ (__TIME__ [7u] == '?' ? 0 : __TIME__ [7u] - '0') )
|
||||
#define COMPILE_SECONDS_INT ( \
|
||||
(COMPILE_TIME [6u] == '?' ? 0 : COMPILE_TIME [6u] - '0') * 10u \
|
||||
+ (COMPILE_TIME [7u] == '?' ? 0 : COMPILE_TIME [7u] - '0') )
|
||||
|
||||
|
||||
#define __DOSDATE__ ( \
|
||||
((__YEAR_INT__ - 1980u) << 9u) | \
|
||||
( __MONTH_INT__ << 5u) | \
|
||||
( __DAY_INT__ << 0u) )
|
||||
#define COMPILE_DOS_DATE ( \
|
||||
((COMPILE_YEAR_INT - 1980u) << 9u) | \
|
||||
( COMPILE_MONTH_INT << 5u) | \
|
||||
( COMPILE_DAY_INT << 0u) )
|
||||
|
||||
#define __DOSTIME__ ( \
|
||||
( __HOUR_INT__ << 11u) | \
|
||||
( __MINUTE_INT__ << 5u) | \
|
||||
( __SECONDS_INT__ << 0u) )
|
||||
#define COMPILE_DOS_TIME ( \
|
||||
( COMPILE_HOUR_INT << 11u) | \
|
||||
( COMPILE_MINUTE_INT << 5u) | \
|
||||
( COMPILE_SECONDS_INT << 0u) )
|
||||
|
||||
#endif // COMPILE_DATE_H
|
||||
|
||||
|
|
|
|||
|
|
@ -329,13 +329,13 @@ void uf2_read_block (uint32_t block_no, uint8_t *data)
|
|||
|
||||
struct TextFile const *inf = &info[fileIndex];
|
||||
padded_memcpy(d->name, inf->name, 11);
|
||||
d->createTimeFine = __SECONDS_INT__ % 2 * 100;
|
||||
d->createTime = __DOSTIME__;
|
||||
d->createDate = __DOSDATE__;
|
||||
d->lastAccessDate = __DOSDATE__;
|
||||
d->createTimeFine = COMPILE_SECONDS_INT % 2 * 100;
|
||||
d->createTime = COMPILE_DOS_TIME;
|
||||
d->createDate = COMPILE_DOS_DATE;
|
||||
d->lastAccessDate = COMPILE_DOS_DATE;
|
||||
d->highStartCluster = startCluster >> 16;
|
||||
d->updateTime = __DOSTIME__;
|
||||
d->updateDate = __DOSDATE__;
|
||||
d->updateTime = COMPILE_DOS_TIME;
|
||||
d->updateDate = COMPILE_DOS_DATE;
|
||||
d->startCluster = startCluster & 0xFFFF;
|
||||
d->size = (inf->content ? strlen(inf->content) : UF2_BYTE_COUNT);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue