[RFC PATCH] gcc: Improve reproducability when building cc1/cc1plus
Andrew Pinski
pinskia@gmail.com
Sat Nov 20 08:24:21 GMT 2021
On Sat, Nov 20, 2021 at 12:18 AM Jacob Kroon via Gcc-patches
<gcc-patches@gcc.gnu.org> wrote:
>
> cc1/cc1plus both include a checksum of the object files, archives and
> options used during linking. Unless the host binutils has been built
> with --enable-deterministic-archives, the archives will have different
> checksums each build due to changes in timestamps of the containing
> object files, and thus the checksum that is embedded in cc1/cc1plus will
> also change.
>
> Fix this by passing "D" to ar/ranlib when creating the archives.
How portable is the D option? That does it work with Mac OS X's ar;
what about AIX's ar; what about Solaris's ar, etc?
GNU binutils is not the only ar which is supported for the host.
Thanks,
Andrew Pinski
>
> Signed-off-by: Jacob Kroon <jacob.kroon@gmail.com>
> ---
> Makefile.in | 4 ++--
> gcc/Makefile.in | 2 +-
> libbacktrace/configure | 2 +-
> libcody/Makefile.in | 4 ++--
> libcpp/Makefile.in | 4 ++--
> libdecnumber/Makefile.in | 4 ++--
> libiberty/Makefile.in | 6 +++---
> 7 files changed, 13 insertions(+), 13 deletions(-)
>
> diff --git a/Makefile.in b/Makefile.in
> index 860cf8f067b..8c451ed2121 100644
> --- a/Makefile.in
> +++ b/Makefile.in
> @@ -416,7 +416,7 @@ MAKEINFOFLAGS = --split-size=5000000
>
> AS = @AS@
> AR = @AR@
> -AR_FLAGS = rc
> +AR_FLAGS = rcD
> CC = @CC@
> CXX = @CXX@
> DLLTOOL = @DLLTOOL@
> @@ -23571,7 +23571,7 @@ configure-libbacktrace:
> $$s/$$module_srcdir/configure \
> --srcdir=$${topdir}/$$module_srcdir \
> $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
> - --target=${target_alias} \
> + --target=${target_alias} RANLIB="ranlib -D" \
> || exit 1
> @endif libbacktrace
>
> diff --git a/gcc/Makefile.in b/gcc/Makefile.in
> index 571e9c28e29..828b13d9b54 100644
> --- a/gcc/Makefile.in
> +++ b/gcc/Makefile.in
> @@ -243,7 +243,7 @@ AR = @AR@
> AR_FLAGS = rc
> NM = @NM@
> RANLIB = @RANLIB@
> -RANLIB_FLAGS = @ranlib_flags@
> +RANLIB_FLAGS = @ranlib_flags@ -D
>
> # Libraries to use on the host.
> HOST_LIBS = @HOST_LIBS@
> diff --git a/libbacktrace/configure b/libbacktrace/configure
> index a2f33c0f35d..5b18966ea80 100755
> --- a/libbacktrace/configure
> +++ b/libbacktrace/configure
> @@ -6669,7 +6669,7 @@ else
> fi
>
> test -z "$AR" && AR=ar
> -test -z "$AR_FLAGS" && AR_FLAGS=cru
> +test -z "$AR_FLAGS" && AR_FLAGS=crD
>
>
>
> diff --git a/libcody/Makefile.in b/libcody/Makefile.in
> index 7eaf8ace8ce..f1e8be352b5 100644
> --- a/libcody/Makefile.in
> +++ b/libcody/Makefile.in
> @@ -126,8 +126,8 @@ LIBCODY.O := buffer.o client.o fatal.o netclient.o netserver.o \
> all:: libcody.a
>
> libcody.a: $(LIBCODY.O)
> - $(AR) -cr $@ $^
> - $(RANLIB) $@
> + $(AR) -crD $@ $^
> + $(RANLIB) -D $@
>
> mostlyclean::
>
> diff --git a/libcpp/Makefile.in b/libcpp/Makefile.in
> index 34e4206957d..53d220c4e0b 100644
> --- a/libcpp/Makefile.in
> +++ b/libcpp/Makefile.in
> @@ -26,7 +26,7 @@ top_builddir = .
> VPATH = @srcdir@
> INSTALL = @INSTALL@
> AR = @AR@
> -ARFLAGS = cru
> +ARFLAGS = crD
> ACLOCAL = @ACLOCAL@
> AUTOCONF = @AUTOCONF@
> AUTOHEADER = @AUTOHEADER@
> @@ -101,7 +101,7 @@ all: libcpp.a $(USED_CATALOGS)
> libcpp.a: $(libcpp_a_OBJS)
> -rm -f libcpp.a
> $(AR) $(ARFLAGS) libcpp.a $(libcpp_a_OBJS)
> - $(RANLIB) libcpp.a
> + $(RANLIB) -D libcpp.a
>
> # Rules to rebuild the configuration
>
> diff --git a/libdecnumber/Makefile.in b/libdecnumber/Makefile.in
> index 7e086fccafa..3b03064fc4d 100644
> --- a/libdecnumber/Makefile.in
> +++ b/libdecnumber/Makefile.in
> @@ -26,7 +26,7 @@ top_builddir = .
> VPATH = @srcdir@
> INSTALL = @INSTALL@
> AR = @AR@
> -ARFLAGS = cru
> +ARFLAGS = crD
> ACLOCAL = @ACLOCAL@
> AUTOCONF = @AUTOCONF@
> AUTOHEADER = @AUTOHEADER@
> @@ -88,7 +88,7 @@ all: libdecnumber.a
> libdecnumber.a: $(libdecnumber_a_OBJS)
> -rm -f $@
> $(AR) $(ARFLAGS) $@ $(libdecnumber_a_OBJS)
> - $(RANLIB) $@
> + $(RANLIB) -D $@
>
> # Rules to rebuild the configuration
>
> diff --git a/libiberty/Makefile.in b/libiberty/Makefile.in
> index 884cc6c4af2..9f507a54657 100644
> --- a/libiberty/Makefile.in
> +++ b/libiberty/Makefile.in
> @@ -252,19 +252,19 @@ $(TARGETLIB): $(REQUIRED_OFILES) $(EXTRA_OFILES) $(LIBOBJS)
> -rm -f $(TARGETLIB) pic/$(TARGETLIB) noasan/$(TARGETLIB)
> $(AR) $(AR_FLAGS) $(TARGETLIB) \
> $(REQUIRED_OFILES) $(EXTRA_OFILES) $(LIBOBJS)
> - $(RANLIB) $(TARGETLIB)
> + $(RANLIB) -D $(TARGETLIB)
> if [ x"$(PICFLAG)" != x ]; then \
> cd pic; \
> $(AR) $(AR_FLAGS) $(TARGETLIB) \
> $(REQUIRED_OFILES) $(EXTRA_OFILES) $(LIBOBJS); \
> - $(RANLIB) $(TARGETLIB); \
> + $(RANLIB) -D $(TARGETLIB); \
> cd ..; \
> else true; fi; \
> if [ x"$(NOASANFLAG)" != x ]; then \
> cd noasan; \
> $(AR) $(AR_FLAGS) $(TARGETLIB) \
> $(REQUIRED_OFILES) $(EXTRA_OFILES) $(LIBOBJS); \
> - $(RANLIB) $(TARGETLIB); \
> + $(RANLIB) -D $(TARGETLIB); \
> cd ..; \
> else true; fi
>
More information about the Gcc-patches
mailing list