This is the mail archive of the
mailing list for the GCC project.
Reproducible gcc builds, gfortran, and -grecord-gcc-switches
- From: Simon Baldwin <simonb at google dot com>
- To: gcc at gcc dot gnu dot org
- Date: Wed, 15 Aug 2012 18:46:31 +0200
- Subject: Reproducible gcc builds, gfortran, and -grecord-gcc-switches
The default setting of -grecord-gcc-switches recently changed from 0 to 1:
2012-04-25 Jakub Jelinek <email@example.com>
* common.opt (flag_debug_types_section): Default to 0.
(dwarf_record_gcc_switches): Default to 1.
Because of this, by default all objects in libraries built as part of
gcc now have driver command line options stored in their debug_str
section. For C and C++ that's not an issue. However, Fortran has a
special undocumented extra option created by its specs, "-cpp=%g.f90".
As a result all the object files in libgfortran.a now have a
temporary filename baked into their debug_str section.
This creates a problem for build and packaging systems that are
fanatical about binary reproducibility and checksums. Temporary file
names differ on each compilation, so that two different builds of
libgfortran.a, and by extension all of gcc, will not be bit-identical.
Anyone else encountered this? Bug or feature? There are several
possible and relatively easy fixes -- any thoughts or feedback on
which fixes might be better, or worse? Something for mainline or for
only google-specific branches?
Google UK Limited | Registered Office: Belgrave House, 76 Buckingham
Palace Road, London SW1W 9TQ | Registered in England Number: 3977902