[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH] build: avoid absolute paths in executables
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 <jbeulich@xxxxxxxx> >> --- >> 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
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |