diff mbox series

toolchain/toolchain-wrapper: let recent GCC handle SOURCE_DATE_EPOCH

Message ID 20200626154927.3185266-1-john@metanate.com
State Accepted
Headers show
Series toolchain/toolchain-wrapper: let recent GCC handle SOURCE_DATE_EPOCH | expand

Commit Message

John Keeping June 26, 2020, 3:49 p.m. UTC
When using precompiled headers, changing any macros defined on the
command line will invalidate the precompiled header.  With
toolchain-wrapper adding __DATE__ and __TIME__, any commits to Buildroot
will invalidate incremental builds regardless of whether the precompiled
header actually uses those values (affecting _OVERRIDE_SRCDIR).

GCC-7 and later support SOURCE_DATE_EPOCH and use it to define __DATE__
and __TIME__ internally, avoiding any impact on precompiled headers.

Disable the custom handling in toolchain-wrapper if GCC is version 7 or
newer.

Signed-off-by: John Keeping <john@metanate.com>
---
 toolchain/toolchain-wrapper.c  | 10 ++++++++++
 toolchain/toolchain-wrapper.mk |  3 +++
 2 files changed, 13 insertions(+)

Comments

Thomas Petazzoni June 27, 2020, 3:20 p.m. UTC | #1
On Fri, 26 Jun 2020 16:49:27 +0100
John Keeping <john@metanate.com> wrote:

> When using precompiled headers, changing any macros defined on the
> command line will invalidate the precompiled header.  With
> toolchain-wrapper adding __DATE__ and __TIME__, any commits to Buildroot
> will invalidate incremental builds regardless of whether the precompiled
> header actually uses those values (affecting _OVERRIDE_SRCDIR).
> 
> GCC-7 and later support SOURCE_DATE_EPOCH and use it to define __DATE__
> and __TIME__ internally, avoiding any impact on precompiled headers.
> 
> Disable the custom handling in toolchain-wrapper if GCC is version 7 or
> newer.
> 
> Signed-off-by: John Keeping <john@metanate.com>
> ---
>  toolchain/toolchain-wrapper.c  | 10 ++++++++++
>  toolchain/toolchain-wrapper.mk |  3 +++
>  2 files changed, 13 insertions(+)

Applied to master, thanks.

Thomas
Peter Korsgaard July 16, 2020, 4:32 p.m. UTC | #2
>>>>> "John" == John Keeping <john@metanate.com> writes:

 > When using precompiled headers, changing any macros defined on the
 > command line will invalidate the precompiled header.  With
 > toolchain-wrapper adding __DATE__ and __TIME__, any commits to Buildroot
 > will invalidate incremental builds regardless of whether the precompiled
 > header actually uses those values (affecting _OVERRIDE_SRCDIR).

 > GCC-7 and later support SOURCE_DATE_EPOCH and use it to define __DATE__
 > and __TIME__ internally, avoiding any impact on precompiled headers.

 > Disable the custom handling in toolchain-wrapper if GCC is version 7 or
 > newer.

 > Signed-off-by: John Keeping <john@metanate.com>

Seems pretty safe to add, so:

Committed to 2020.02.x and 2020.05.x, thanks.
diff mbox series

Patch

diff --git a/toolchain/toolchain-wrapper.c b/toolchain/toolchain-wrapper.c
index 39e9f0850f..0fb6064b1c 100644
--- a/toolchain/toolchain-wrapper.c
+++ b/toolchain/toolchain-wrapper.c
@@ -179,6 +179,7 @@  static void check_unsafe_path(const char *arg,
 	}
 }
 
+#ifdef BR_NEED_SOURCE_DATE_EPOCH
 /* Returns false if SOURCE_DATE_EPOCH was not defined in the environment.
  *
  * Returns true if SOURCE_DATE_EPOCH is in the environment and represent
@@ -232,6 +233,15 @@  bool parse_source_date_epoch_from_env(void)
 	}
 	return true;
 }
+#else
+bool parse_source_date_epoch_from_env(void)
+{
+	/* The compiler is recent enough to handle SOURCE_DATE_EPOCH itself
+	 * so we do not need to do anything here.
+	 */
+	return false;
+}
+#endif
 
 int main(int argc, char **argv)
 {
diff --git a/toolchain/toolchain-wrapper.mk b/toolchain/toolchain-wrapper.mk
index 09dda17890..4d45e3d8a2 100644
--- a/toolchain/toolchain-wrapper.mk
+++ b/toolchain/toolchain-wrapper.mk
@@ -28,6 +28,9 @@  TOOLCHAIN_WRAPPER_OPTS += -ffile-prefix-map=$(BASE_DIR)=buildroot
 else
 TOOLCHAIN_WRAPPER_OPTS += -D__FILE__=\"\" -D__BASE_FILE__=\"\" -Wno-builtin-macro-redefined
 endif
+ifneq ($(BR2_TOOLCHAIN_GCC_AT_LEAST_7),y)
+TOOLCHAIN_WRAPPER_OPTS += -DBR_NEED_SOURCE_DATE_EPOCH
+endif
 endif
 
 # We create a list like '"-mfoo", "-mbar", "-mbarfoo"' so that each flag is a