[fpc-pascal] Issue with Linking
Jonas Maebe
jonas.maebe at elis.ugent.be
Thu Aug 20 10:01:03 CEST 2015
Martin Schreiber wrote:
> Where can we find a list of the possible and necessary options for building
> the Free Pascal compiler? "compiler/README.txt" looks incomplete.
The most complete documentation is Marco's buildfaq:
> How can we find out the possible make targets and its meanings in "compiler"
> other than analyzing the make file?
There is no such documentation at this time, although in general adding
CPU_TARGET=x OS_TARGET=y is all you need.
The problem Linux/ARM specifically is also that you have to be pretty
much an expert at Linux/ARM and know exactly what the capabilities of
your ARM hardware are before you can know what you have to build,
independent of instructions regarding how to build it (which doesn't
mean that instructions regarding how to build it are superfluous, of
course).
The reason is that there are so many different incompatible versions of
that platform:
* OABI big/little endian
* OABI with AFP big/little endian
* (EABI versions 0 to 5) with softfloat (always little endian)
* ((EABI versions 0 to 5) with softfp) and ((no fpu) or VFPv2 or
(VFPv3/4 with (d16 or d32))) (always little endian)
* ((EABI version 5) with hard-float) and (VFPv2 or (VFPv3/4 with (d16 or
d32))) (always little endian)
And there are probably already more in the mean time...
Now, OABI is basically unused nowadays and with the EABI targets there
are some fairly safe defaults, so even if you don't know the exact VFP
unit or what EABI version you have, the compiler and assembler/linker
will generally use something by default that works (albeit not
necessarily optimal). So it's not as bad as it may seem at first sight
from the above list, but it's far from trivial.
Additionally, the ARM port of FPC was the first one that had to support
multiple ABIs for the same platform, and as a result has not been
implemented in the best way possible, requiring different compiler
binaries to target different ABIs (which is why these extra OPT=
parameters are required). Changing that also requires overhauling the
build system though, as we would have to store units compiled for a
different ABI in different directories. There's an svn branch for this
(http://svn.freepascal.org/svn/fpc/branches/target-subdir/ ), but fpmake
support for this is still missing (the Makefiles already work fine).
Jonas
More information about the fpc-pascal
mailing list