On 03.09.2025 17:26, Andrew Cooper wrote:
> On 03/09/2025 4:13 pm, Jan Beulich wrote:
>> For in-tree builds relative paths are used, whereas for out-of-tree builds
>> in various situations absolute ones come into play. The extra paths can be
>> long, wasting space and e.g. serial line bandwidth. They would also get in
>> the way of location-independent reproducible builds. Leverage newer gcc's
>> (and Clang's) ability to "remap" file names. For older gcc fall back to
>> using the option affecting debug info only.
>>
>> Signed-off-by: Jan Beulich <[email protected]>
>> ---
>> Of course we may want to consider putting this in the top-level Config.mk,
>> to also affect other sub-trees (presently mainly/only affecting debug
>> info, for which even gcc5 already supports -fdebug-prefix-remap=).
>>
>> As to a Fixes: tag, I wasn't quite sure whether to "blame" the
>> introduction of out-of-tree builds.
>>
>> --- a/xen/Makefile
>> +++ b/xen/Makefile
>> @@ -448,6 +448,8 @@ LDFLAGS-$(CONFIG_CC_IS_CLANG) += -plugin
>>  endif
>>  
>>  ifdef building_out_of_srctree
>> +    CFLAGS += $(call cc-option,$(CC),-ffile-prefix-map=$(srctree)/=, \
>> +                                     -fdebug-prefix-map=$(srctree)/=)
>>      CFLAGS += -I$(objtree)/include
>>      CFLAGS += -I$(objtree)/arch/$(SRCARCH)/include
>>  endif
> 
> We do want to be taking a change like this, but it's also definitely not
> limited to out-of-tree builds.  I have full paths embedded even for
> in-tree builds.

In xen-syms I see only two full paths - in debug info, supplying the base
path to the tree. That's okay to stay imo.

In xen.efi I see a few hundred, but they're all the same as above. As I
learned earlier today, SHF_MERGE processing isn't invoked when linking
ELF objects into a PE binary.

> To be useful, it wants to apply to everything, not just the hypervisor,
> so does want to be in the top level Config.mk.

As per my first remark then. But no, I meanwhile realized that this can't
go in Config.mk: For the hypervisor we want to use $(srctree), i.e.
including the leaf /xen referencing the xen/ subtree. I expect that for
e.g. tools/libs/ we'd want something similar - eliminate the entire path
up to the base of the component's source dir. So it will need to be
piecemeal.

> https://reproducible-builds.org/docs/build-path/ has a full list of
> compiler versions. It looks like we need to use both options here until
> we can increase the minimum GCC version to 8.

Not quite, -ffile-prefix-map= is documented to imply all other
-f*-prefix-map=, matching my observations.

Bottom line - at least for now I think the patch wants to remain as is,
and further patches for other parts of the tree will need making.

Jan

Reply via email to