[bootstrappable] Re: diverse double compilation: using $ORIGIN?

  • From: Jan Nieuwenhuizen <janneke@xxxxxxx>
  • To: ludo@xxxxxxx (Ludovic Courtès)
  • Date: Fri, 10 Nov 2017 20:19:17 +0100

Jan Nieuwenhuizen writes:

Usage: guix build gcc-dcc

Building gcc-dcc tests the diverse double compilation property
of the gcc that Guix is using.

* gnu/packages/bootstrappable.scm: New file.
* gnu/local.mk (GNU_SYSTEM_MODULES): Add it.

Awesome!  Does it build fine out-of-the-box?  I didn’t expect it to be
“this easy.”  :-)

I got very positive feedback from a slightly guix-sceptic person saying
something like: you lisp guys can do quite a lot with very little code.

However, all this patch adds is a test that fails: gcc built with gcc is
not bit-for-bit the same as gcc built with clang.

Since then I have included the build-path-prefix-map patch, use -rpath
$ORIGIN instead of -rpath "-lib", switched to gcc-7.2.0.  Still, no
bit-reproducibility.

I'll be sending updated patches soon.

Well, that took more time than I expected.

I switched from 7.2.0 to 4.7.4 as the first target for diverse double
compilation as it seems that 7.2 uses some non-reproducible hash map
that I cannot track down _and_ 4.7.x is the latest bootstrappable gcc.

Finally, I succeeded in building repro-gcc@4.7.4 using $ORIGIN for
rpath.  However, gcc-ddc@4.7.4 still shows that some absolute file names
are embedded in bin/gcc (yes, I know cpp, cc1 and ../lib* hold most of
the functionality):

    /gnu/store/zw672zcmykdwzm4x7l098hb94c34ak85-repro-gcc-4.7.4/bin/
    /gnu/store/zw672zcmykdwzm4x7l098hb94c34ak85-repro-gcc-4.7.4/lib/gcc/
    /gnu/store/zw672zcmykdwzm4x7l098hb94c34ak85repro-gcc-4.7.4._ROOT

the first one most probably comes from

    static const char *const standard_bindir_prefix = STANDARD_BINDIR_PREFIX;

I haven't looked a the other two yet.  I'm attaching the diffoscope diff
and the new patch.  Could do with some help here.

Thanks,
janneke

Other related posts: