Subject: Re: [PATCH v2] gnu: gcc-8: Make static libs reproducible

From: Chris Marusich <[email-masked]>
Date: Fri, 04 Jun 2021 00:23:16 -0700

Hi Carl,

Thank you so much for looking into this!  The patch looks reasonable to
me.  I am definitely curious to try a fixed version of GCC (8 or
otherwise) to see if it helps to solve 41669!

Carl Dong <[email-masked]> writes:

> Here's a v2 of the patch, let me know if this suffices!
>
>> Well done.  Did you observe it in practice?  (On ‘core-updates’ maybe?)
>
> Thanks! Yes, we observed it when switching back from gcc-9 to gcc-8 for
> compiling Bitcoin Core. We use -static-libstdc++, which means that any
> non-reproducibility in libstdc++.a propagates into our produced binaries as
> well.
>
> To be clear, I was only able to identify the problem and fix thanks to your
> patch here:
> https://git.savannah.gnu.org/cgit/guix.git/tree/gnu/packages/patches/dico-libtool-deterministic.patch?h=b6094b1f0a6760b9f5296364cf5edb8a2e64953c
>
>
>> I’m surprised that this is still an issue since this was fixed in
>> Libtool proper long ago, probably before GCC 8 was released.
>
> Right, unfortunately GCC maintains their own version of libtool, which hasn't
> been synced with upstream for a while. I documented the details here:
> https://reproducible-builds.org/docs/archives/#gnu-libtool
>
>> The patch is big, but it looks like using ‘substitute*’ wouldn’t be an
>> easy task, so maybe it’s better this way.  WDYT?
>
> Right, I think it'd be hard to construct a robust substitute* for this that
> doesn't have false negatives/positives.

I agree; a patch seems best.

> ---
>
> This fixes the nonreproducibility in gcc documented here:
> https://reproducible-builds.org/docs/archives/#gnu-libtool
>
> * gnu/packages/patches/gcc-8-sort-libtool-find-output.patch: New patch.
> * gnu/local.mk (dist_patch_DATA): Register it.
> * gnu/packages/gcc.scm (gcc-8)[source]: Apply it.

Can this patch also be applied to earlier versions of GCC, such as
gcc-7, which is currently the default GCC used for basically everything
on Guix's master branch?  Or is it too different?

-- 
Chris