This is how I build fpc trunk cross compiler:
echo "Building fpchf-linux from trunk"
SUBARCH=armv7
CROSSOPT="-dREVINC -dFPC_ARMHF -CX -CpARMV7A -CfVFPV3_D16 -OpARMV7A -O2 -OoFASTMATH -XX -Xs"
//CROSSOPT="-dREVINC -dFPC_ARMHF -CX -CpARMV6 -CfVFPV2 -OpARMV6 -O2
-OoFASTMATH -XX -Xs"
OPT="-dFPC_ARMHF"
make clean buildbase CROSSINSTALL=1 OS_TARGET=linux CPU_TARGET=arm OPT="$OPT" OVERRIDEVERSIONCHECK=1 CROSSOPT="$CROSSOPT" BINUTILSPREFIX=arm-linux-gnueabihf- || exit 1
sudo make installbase CROSSINSTALL=1 OS_TARGET=linux CPU_TARGET=arm OPT="$OPT" OVERRIDEVERSIONCHECK=1 CROSSOPT="$CROSSOPT" BINUTILSPREFIX=arm-linux-gnueabihf- || exit 1
sudo mv /usr/local/lib/fpc/3.1.1/ppcrossarm
/usr/local/lib/fpc/3.1.1/ppcrossarmhf
Please note that the rtl is fine for Raspberry Pi 2 (the new quad core board) as this is a version that uses armv7 commandset.
For old Raspberry Pi you need to use the commented out CROSSOPT, this will create rtl that is suitable for old raspberries.
You should not try to use fpc 2.6.4 as this compiler does not support armhf. Most likely the 3.0 pre-release will compile the same way, but I never tried.
You need to have cross-binutils installed as you need arm-linux-gnueabihf-* tools to be able to successfully compile.
Michael
Chris Moody wrote 107 lines
On 08/15/2015 08:46 PM, Chris Moody wrote:
>
>
> On 08/15/2015 07:40 PM, Karoly Balogh (Charlie/SGR) wrote:
>> Hi,
>>
>> On Sat, 15 Aug 2015, Chris Moody wrote:
>>
>>>>> Is there a better guide on how to do this than:
>>>>>
http://wiki.freepascal.org/fpcup#Linux_ARM_cross_compiler ? specifically
>>>>> as far as this
>>>>> sentence is concerned:
>>>>>
>>>>> * Linux/Unix build or install the relevant crossbinutils (Linux, unix)
>>>> With Ubuntu/Debian:
>>>> - apt-get install binutils-arm-linux-gnueabihf
>>>>
>>>> **snip**
>>> Thanks for that Charlie, I now have that installed. Do I have to do the
>>> compile with fpc? or can I do it via Lazarus?
>> I'm pretty sure it's possible with Lazarus, but I can't give exact
>> instructions, because I rarely use Lazarus, I prefer using the compiler
>> itself directly from the command line.
>>
>> However, this page has some pointers:
>>
http://wiki.lazarus.freepascal.org/Setup_Cross_Compile_For_ARM#Make_your_first_arm-linux_project_in_Lazarus
>>
>> Charlie
>> _______________________________________________
>>
> Looks like I need to recompile FPC (or make a special compile of it)
> to be able to compile to ARM.
>
> That URL you gave me says how to compile it, but not sure about if I
> need to have some special cross compile code for the
> CROSSBINDIR=/home/user/lazarus/fpc/binutils/ portion of it, or do I
> just point it to where Linux installed the items installed with
> apt-get install binutils-arm-linux-gnueabihf ?
>
> Thanks once again!
>
> Chris
So I tried to compile a special version of FPC for arm, I installed:
binutils-2.25
And I got as far as this:
/home/chris/Documents/fp/fpcbuild-2.6.4/binutils/bin/as -o
/home/chris/Documents/fp/fpcbuild-2.6.4/fpcsrc/rtl/units/arm-linux/prt0.o
arm/prt0.as
arm/prt0.as: Assembler messages:
arm/prt0.as:46: Error: unrecognized symbol type ""
arm/prt0.as:49: Error: expecting operand after ','; got nothing
arm/prt0.as:50: Error: no such instruction: `ldmia sp!,{a2}'
arm/prt0.as:53: Error: no such instruction: `ldr
ip,=operatingsystem_parameter_argc'
arm/prt0.as:54: Error: no such instruction: `ldr
a3,=operatingsystem_parameter_argv'
arm/prt0.as:55: Error: invalid char '[' beginning operand 2 `[ip]'
arm/prt0.as:58: Error: too many memory references for `add'
arm/prt0.as:59: Error: too many memory references for `add'
arm/prt0.as:60: Error: no such instruction: `ldr
ip,=operatingsystem_parameter_envp'
arm/prt0.as:62: Error: invalid char '[' beginning operand 2 `[a3]'
arm/prt0.as:63: Error: invalid char '[' beginning operand 2 `[ip]'
arm/prt0.as:66: Error: no such instruction: `ldr ip,=__stkptr'
arm/prt0.as:67: Error: invalid char '[' beginning operand 2 `[ip]'
arm/prt0.as:69: Error: too many memory references for `sub'
arm/prt0.as:72: Error: no such instruction: `bl PASCALMAIN'
arm/prt0.as:75: Error: unrecognized symbol type ""
arm/prt0.as:78: Error: no such instruction: `swi 0x900001'
arm/prt0.as:79: Error: no such instruction: `b _haltproc'
arm/prt0.as:82: Error: unrecognized symbol type ""
arm/prt0.as:84: Error: no such instruction: `ldr
r0,=operatingsystem_result'
arm/prt0.as:85: Error: no such instruction: `ldrb r0,[r0]'
arm/prt0.as:86: Error: expecting operand after ','; got nothing
arm/prt0.as:87: Error: no such instruction: `swi 0x0'
arm/prt0.as:88: Error: no such instruction: `b _haltproc_eabi'
make[6]: *** [prt0.o] Error 1
make[6]: Leaving directory
`/home/chris/Documents/fp/fpcbuild-2.6.4/fpcsrc/rtl/linux'
make[5]: *** [linux_all] Error 2
make[5]: Leaving directory
`/home/chris/Documents/fp/fpcbuild-2.6.4/fpcsrc/rtl'
make[4]: *** [rtl] Error 2
make[4]: Leaving directory
`/home/chris/Documents/fp/fpcbuild-2.6.4/fpcsrc/compiler'
make[3]: *** [cycle] Error 2
make[3]: Leaving directory
`/home/chris/Documents/fp/fpcbuild-2.6.4/fpcsrc/compiler'
make[2]: *** [compiler_cycle] Error 2
make[2]: Leaving directory
`/home/chris/Documents/fp/fpcbuild-2.6.4/fpcsrc'
make[1]: *** [build-stamp.arm-linux] Error 2
make[1]: Leaving directory
`/home/chris/Documents/fp/fpcbuild-2.6.4/fpcsrc'
make: *** [fpcsrc/build-stamp.arm-linux] Error 2
_______________________________________________
fpc-pascal maillist -
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal