From 6393b6904b6a2ee429e60cf3a107eb7eb8b7e0c3 Mon Sep 17 00:00:00 2001 From: "Yann E. MORIN" Date: Sat, 21 Oct 2017 22:31:02 +0200 Subject: toolchain/wrapper: fake __DATE_ and __TIME__ for older gcc MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Starting with version 7, gcc automatically recognises and enforces the environment variable SOURCE_DATE_EPOCH, and fakes __DATE__ and __TIME__ accordingly, to produce reproducible builds (at least in regards to date and time). However, older gcc versions do not offer this feature. So, we use our toolchain wrapper to force-feed __DATE__ and __TIME__ as macros, which will take precedence over those that gcc may compute itself. We compute them according to the specs: https://reproducible-builds.org/specs/source-date-epoch/ https://gcc.gnu.org/onlinedocs/cpp/Standard-Predefined-Macros.html Since we define macros otherwise internal to gcc, we have to tell it not to warn about that. The -Wno-builtin-macro-redefined flag was introduced in gcc-4.4.0. Therefore, we make BR2_REPRODUCIBLE depend on GCC >= 4.4. gcc-7 will ignore SOURCE_DATE_EPOCH when __DATE__ and __TIME__ are user-defined. Anyway, this is of no consequence: whether __DATE__ and __TIME__ or SOURCE_DATE_EPOCH takes precedence, it would yield the exact same end result since we use the same logic to compute it. Note that we didn't copy the code for it from gcc so using the same logic doesn't imply that we're inheriting GPL-3.0. Signed-off-by: "Yann E. MORIN" Cc: Jérôme Pouiller Cc: Thomas Petazzoni Cc: Arnout Vandecappelle Cc: Peter Korsgaard [Arnout: rewrite commit message] Signed-off-by: Arnout Vandecappelle (Essensium/Mind) Reviewed-by: "Yann E. MORIN" Signed-off-by: Peter Korsgaard --- Config.in | 2 ++ 1 file changed, 2 insertions(+) (limited to 'Config.in') diff --git a/Config.in b/Config.in index 9bdb0b857a..8920b727ce 100644 --- a/Config.in +++ b/Config.in @@ -712,6 +712,8 @@ config BR2_COMPILER_PARANOID_UNSAFE_PATH config BR2_REPRODUCIBLE bool "Make the build reproducible (experimental)" + # SOURCE_DATE_EPOCH support in toolchain-wrapper requires GCC 4.4 + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_4 help This option will remove all sources of non-reproducibility from the build process. For a given Buildroot configuration, -- cgit v1.2.3