Hello

The problem I'm currently facing is the removal (unset) of the LDFLAGS variable 
within the glibc compile step.

A bit of background information:
I'm working on reproducible builds and found one major problem which occurs by 
many of the packages. By default, the debug information is extracted from the 
build output and stored in a separate *-dbg package. GDB wants to do a matching 
before using a debug file for debugging. This matching is currently done by 
adding a debuglink to the binary. This link contains the filename and a CRC 
checksum of the corresponding debug file. Since the debug information is very 
specific, it's almost impossible to get them reproducible. In conclusion, the 
debuglink breaks reproducibility.
A short look into the gdb documentation 
(https://sourceware.org/gdb/onlinedocs/gdb/Separate-Debug-Files.html) reveals 
another possibility to link a binary with its  debug information - the 
build-id. This build-id can either be generated by the linker or can be set to 
a fixed value. To ensure reproducibility, I hashed ${PF} in an anonymous-python 
function and passed the result to the build. In this case, I can guarantee a 
reproducible output as well as splitting debug information.

Long story short:
After first successful tests I decided to make my changes upstream, by 
introducing a new variable to specify the link style for debug files. Possible 
setting would be 'debuglink', 'build-id' and 'both'.
When using the debuglink option the flag "-build-id" must be passed to the 
linker. To have a reproducible glibc, it is not possible to set this flag in 
LDFLAGS, since this variable gets removed (unset) before compilation. The next 
idea was to pass it to TARGET_CC_ARCH. According to the documentation this is 
the way to deal with such an issue. But the next problem lured right there: 
libtool usese the "compiler call" to infer the build configuration. Since the 
build-id is now inside the "compiler call", it's not possible anymore for 
libtool to infer the configuration (the build id is different for every 
package).

Before the unset-command in the glibc recipe, there's the following comment:
"-Wl,-rpath-link <staging>/lib in LDFLAGS can cause breakage if another glibc 
is in staging"
Is this still required or is it a leftover from previous version where there 
weren't recipe specific sysrots?
If not, does anybody of you know, how I could set the flag without breaking 
libtool?

Thanks in advance

Michael
-- 
_______________________________________________
yocto mailing list
yocto@yoctoproject.org
https://lists.yoctoproject.org/listinfo/yocto

Reply via email to