From 71d690145474554eb3310fa57db3a335bad6c242 Mon Sep 17 00:00:00 2001 From: Atharva Lele Date: Sat, 31 Aug 2019 23:31:13 +0530 Subject: [PATCH] toolchain/toolchain-wrapper: handle __{BASE_,}FILE__ macro for reproducibility Many tools use __FILE__ or __BASE_FILE__ for debugging and both capture the build path. This results in non-reproducible images when building in different directories. If the config uses GCC 8 or above, we use -ffile-prefix-map=old=new and let gcc take care of the path remapping in __FILE__. Since GCC versions before v8 did not have this feature, we use an empty string in that case, and disable the builtin-macro-redefined warning which would otherwise trigger and cause build issues with -Werror. Signed-off-by: Atharva Lele [Thomas: - as suggested by Arnout, use the empty string for the __FILE__ and __BASE_FILE__ value - as suggested by Romain, also handle __BASE_FILE__ in addition to __FILE__ - pass -Wno-builtin-macro-redefined to avoid build errors when -Werror is passed] Signed-off-by: Thomas Petazzoni --- toolchain/toolchain-wrapper.mk | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/toolchain/toolchain-wrapper.mk b/toolchain/toolchain-wrapper.mk index 88695a5b2d..09dda17890 100644 --- a/toolchain/toolchain-wrapper.mk +++ b/toolchain/toolchain-wrapper.mk @@ -23,6 +23,11 @@ TOOLCHAIN_WRAPPER_OPTS = \ ifeq ($(BR2_REPRODUCIBLE),y) TOOLCHAIN_WRAPPER_OPTS += -Wl,--build-id=none +ifeq ($(BR2_TOOLCHAIN_GCC_AT_LEAST_8),y) +TOOLCHAIN_WRAPPER_OPTS += -ffile-prefix-map=$(BASE_DIR)=buildroot +else +TOOLCHAIN_WRAPPER_OPTS += -D__FILE__=\"\" -D__BASE_FILE__=\"\" -Wno-builtin-macro-redefined +endif endif # We create a list like '"-mfoo", "-mbar", "-mbarfoo"' so that each flag is a -- 2.30.2