Jonas Maebe wrote:
On 14 Jan 2011, at 15:02, Mark Morgan Lloyd wrote:

Does anybody have an archived copy of FPC 2.x for SPARC Solaris v8 or older? 
The ones available by FTP (2.1.1 and 2.4.2) both appear to be for Solaris 10, 
i.e. expect newer libraries.

I suspect that it was available or at least built and tested at some point 
because the enabled packages appear to be a fairly good match to what's in v8.

I perform nightly regression testing on Solaris 9, and it works fine. I don't 
actually use it though, and I've never tested any of the packages (someone else 
did the Sparc Solaris port and enabled the packages).

It's not that hard to bootstrap everything for another system even without a 
cross-toolchain, only a bit labour-intensive:

a) build a SPARC cross-compiler (prerequisite: a native compiler compiled from 
the same FPC sources, replace ppcarch with ppc386 or equivalent)
cd fpc/compiler
make FPC=/path/to/fpc/with/same/version/ppcarch PPC_TARGET=sparc OPT="-O2" 
clean all
mv ppcsparc somewhereelse

b) compile the RTL into assembler files (note that this step won't work without 
extra preparation for all targets due to RTL assembler startup files; it does 
for Solaris though):
cd fpc/rtl/solaris
make FPC=somewhereelse/ppcsparc OPT="-O2 -a -s" clean all

c) compile the compiler into assembler files
cd fpc/compiler
make FPC=somewhereelse/ppcsparc OPT="-O2 -a -st" OS_TARGET=solaris clean all (ignore the 
error message at the end about the makefile being unable to find "pp")

d) transfer all compiled sources to your target system (make sure to create the 
"units" directories on the target system first)
scp -r fpc/rtl/units/sparc-solaris solarisbox:fpc/rtl/units
scp -r fpc/compiler/sparc/units/solaris-sparc 
solarisbox:fpc/compiler/sparc/units
scp fpc/compiler/pp_* solarisbox:fpc/compiler

e) assemble the RTL
Execute the following command in solarisbox:fpc/rtl/units/sparc-solaris 
directory:
for file in *.s ; do gas -o `basename $file`.o $file ; done

f) assemble and link the compiler
1) edit solarisbox:fpc/compiler/pp_link.res and perform a global search/replace 
to fix the absolute paths pointing to the RTL object files so they match your 
solaris box dir layout
2) change to the solarisbox:fpc/compiler directory and execute "./pp_ppas.sh"
3) rename the generated pp to ppcsparc

Thanks for that, noted for next time :-) The solution turned out to be fairly easy: the Solaris compiler uses dynamic libraries since some (libm) don't exist in static form on 10 and others (libmd5 etc.) don't exist in static form at all. Taking ppcsparc from 10 and running it on 8 failed because it was linked against libm.so which was a symlink to libm.so.2, it was resolving that at link time so required libm.so.2 rather than libm.so. However libm.so.1 is on Solaris 10 and simply changing the symlink before linkage created a binary that would run on both 10 and 8.

So the remaining question is whether it it possible to tell FPC build to always link against libm.so.1 rather than using the symlink, since messing around with the symlink would obviously be undesirable on a system with multiple users.

As noted elsewhere I've got FPC on Solaris 10 to the state where it will compile (but not fully link) Lazarus, fpGUI appears OK so we're probably at a state where lazbuild on simple projects would work.

--
Mark Morgan Lloyd
markMLl .AT. telemetry.co .DOT. uk

[Opinions above are the author's, not those of his employers or colleagues]
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal

Reply via email to