On 21/11/2021 20:51, Sergey Organov via fpc-devel wrote:
Then, in the /etc/fpc.cfg file, among a lot of statements inappropriate
for cross-compilation (that happen to do no harm in my case), that is
only expected for the file that belongs to installed native compiler,
there is unconditional
-Fl/usr/lib/$fpctarget-*
directive that causes all this noise due to another bug, see below.
This one needs to become -Fl=/usr/lib/$fpctarget-* (see
https://wiki.freepascal.org/User_Changes_3.2.0#Library_search_directories_and_custom_sysroots
)
1. Globbing bug in TSearchPathList.AddLibraryPath() could likely affect
even native (as opposed to cross) compilations. The bug is that it
effectively silently translates /<path>/<anything>*<suffix> to
/<path>/*<suffix> for the purposes of globbing, while fpc.cfg definitely
assumes more reasonable behavior for globbing of /usr/lib/$fpctarget-*
specification.
That indeed seems like a bug.
2. When -XR is provided, the fpc.cfg should likely be searched for
relative to the sysroot, and /etc/fpc.cfg should never be implicitly
used by cross-compiler.
The sysroot parameter only tells the compiler/linker where to look for
system libraries and system object files. It is unrelated to the
compiler's own configuration. The searched locations for configuration
files is always the same (current directory, ~/.fpc.cfg, /etc/fpc.cfg).
Further, even for a native compiler being installed, say, in /usr/local,
the fpc.cfg should probably be searched for in /usr/local/etc rather
than in /etc,so the policy of searching for fpc.cfg should probably be
revised in general.
It is indeed possible to argue for this, but that would be a significant
backward compatibility breakage and I'm not sure it would be worth it.
3. This is unrelated to the issue, but worth to be mentioned anyway. For
whatever reason, -XR causes FPC to alter its strategy with respect to
creation of the link.res file, and instead of augmenting of what is
already there in GNU ld for given target, it entirely replaces GNU ld
idea of suitable linker script with some outdated version of one being
built-in into FPC. I failed to guess what's the reason for it, so I tend
to think it's a design mistake.
This has been fixed in trunk already. It was originally done that way
because older versions of GNU LD did not support augmentation of
built-in linker scripts, only replacing them wholesale. When we
initially added support for GNU LD versions that did support
augmentation, it was only implemented for native targets. Only more
recently someone checked that it indeed also works correctly for
cross-compiling and it was changed there as well.
Jonas
_______________________________________________
fpc-devel maillist - fpc-devel@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel