Forum > Linux

Crosscompiling to i386 - fcllaz ?

(1/3) > >>

dbannon:
Hi Folks, setting up a 64bit Ubuntu box to do cross compiling. Have successfully set it up to build 32bit and 64bit Windows but rather ironically cannot get the 32bit linux target to work.

Initially followed http://wiki.lazarus.freepascal.org/Cross_compiling#From_Linux_x64_to_Linux_i386 but was bitten by the bug mentioned here - http://forum.lazarus.freepascal.org/index.php?topic=32388.0 so followed ykot's recipe and then it all compiled.

But now, in lazarus, if I try and use that build mode, it fails during an attempt to compile fcllaz.pas, looks like a file created to install the FCL - do I need to install a separate 32bit FCL ? 

I am using Lazarus 1.8RC3.

Thanks, David

Handoko:
I'm a Ubuntu 64-bit user. I rarely target to i386, but I ever managed to make it works.

# Cross Compile From Linux-x64 to Linux-i386
01. Need libc6-dev-i386
02. Save i386-linux-as to /usr/bin folder
03. Save i386-linux-ld to /usr/bin folder
04. sudo chmod +x /usr/bin/i386-linux-as
05. sudo chmod +x /usr/bin/i386-linux-ld
06. cd /usr/share/fpcsrc/3.0.4
07. sudo make clean all CPU_TARGET=i386
08. sudo make crossinstall OS_TARGET=linux CPU_TARGET=i386  INSTALL_PREFIX=/usr
09. sudo ln -sf /usr/lib/fpc/3.0.4/ppcross386 /usr/bin/ppc386

Note:
- 01. You can use Synaptic Package Manager to install libc6-dev-i386 package.
- 02. & 03. They can be found at the attachment below.
- 06. & 09. You have to change the red texts to the version of your FPC.

dbannon:
Thanks Handoko

I do have libc6-dev-i386, the script I ran created i386-linux-as and i386-linux-ld, they appear almost identical to yours, both are executable. So I ran your versions of the three command.

And, Lazarus was a heap happier, compiled but it did not link.

--- Code: ---MyProj Warning: "crtn.o" not found, this will probably cause a linking failure
/usr/bin/ld: cannot find -lpangocairo-1.0_NG.lpr(24,1)
Tomboy_NG.lpr(24,1) Error: Error while linking
--- End code ---

Now, obviously, pangocairo (64 and 32) is installed and crtn has to be.

So, quick look in /etc/fpc.cfg -  it shows -

--- Code: ---#ifdef cpui386
-Fl/usr/lib/gcc/x86_64-linux-gnu/6   
#endif
--- End code ---

The 32bit files are in /usr/lib/gcc/x86_64-linux-gnu/6/32 but altering the setting made no difference.   

And libpangocairo ?  Its in /usr/lib/i386-linux-gnu so I added that in as a -Fl in project options, made no difference !
Handoko, would you mind showing me what your fpc.cfg looks like ?  Around "# path to the gcclib" please ?

Sigh ....

David


 
 

molly:

--- Quote from: dbannon on November 27, 2017, 08:57:59 am ---do I need to install a separate 32bit FCL ? 

--- End quote ---
Yes. You can either download them and copy manually to the required (sub)directories or you can compile them from source (make sure to select the correct target cpu/platform) . Compiling from source is more convenient in the end as it allows to compile for any other supported target (in case you have binutils, startup files/libraries present for the target you wish to support).

Make sure you have something like the following located in your fpc.cfg (windows based):

--- Quote ----FuDrive:Path_to_FPC\$FPCVERSION\units\$FPCTARGET\*

--- End quote ---
You could omit the $FPCVERSION macro if you only have one FPC version installed. Make sure the directories match your setup.

Note that using lazarus acts in a similar fashion and also requires (re)compilation on a widgetset change.


--- Quote from: dbannon on November 27, 2017, 11:38:13 am ---And, Lazarus was a heap happier, compiled but it did not link.

--- Code: ---MyProj Warning: "crtn.o" not found, this will probably cause a linking failure
/usr/bin/ld: cannot find -lpangocairo-1.0_NG.lpr(24,1)
Tomboy_NG.lpr(24,1) Error: Error while linking
--- End code ---

Now, obviously, pangocairo (64 and 32) is installed and crtn has to be.

--- End quote ---
Are you sure ? e.g. are you able to locate crtn.o ?

I don't know if installing build-essentials is still required ? at least libc6-dev-i386 seems to contain crtn.o as indicated by Handoko (/usr/lib/i386-linux-gnu/crtn.o)

--- Quote ---Sigh ....

--- End quote ---
If it would be easy then everyone would be able to do it  :D

Handoko:

--- Quote from: dbannon on November 27, 2017, 11:38:13 am ---o, would you mind showing me what your fpc.cfg looks like ?

--- End quote ---


--- Code: ---#
# Config file generated by fpcmkcfg on 31-10-17 - 20:03:18
# Example fpc.cfg for Free Pascal Compiler
#

# ----------------------
# Defines (preprocessor)
# ----------------------

#
# nested #IFNDEF, #IFDEF, #ENDIF, #ELSE, #DEFINE, #UNDEF are allowed
#
# -d is the same as #DEFINE
# -u is the same as #UNDEF
#

#
# Some examples (for switches see below, and the -? helppages)
#
# Try compiling with the -dRELEASE or -dDEBUG on the commandline
#

# For a release compile with optimizes and strip debuginfo
#IFDEF RELEASE
  -O2
  -Xs
  #WRITE Compiling Release Version
#ENDIF

# For a debug version compile with debuginfo and all codegeneration checks on
#IFDEF DEBUG
  -gl
  -Crtoi
  #WRITE Compiling Debug Version
#ENDIF

# assembling
#ifdef darwin
# use pipes instead of temporary files for assembling
-ap
# path to Xcode 4.3+ utilities (no problem if it doesn't exist)
-FD/Applications/Xcode.app/Contents/Developer/usr/bin
#endif

# ----------------
# Parsing switches
# ----------------

# Pascal language mode
#      -Mfpc      free pascal dialect (default)
#      -Mobjfpc   switch some Delphi 2 extensions on
#      -Mdelphi   tries to be Delphi compatible
#      -Mtp       tries to be TP/BP 7.0 compatible
#      -Mgpc      tries to be gpc compatible
#      -Mmacpas   tries to be compatible to the macintosh pascal dialects
#
# Turn on Object Pascal extensions by default
#-Mobjfpc

# Assembler reader mode
#      -Rdefault  use default assembler
#      -Ratt      read AT&T style assembler
#      -Rintel    read Intel style assembler
#
# All assembler blocks are AT&T styled by default
#-Ratt

# Semantic checking
#      -S2        same as -Mobjfpc
#      -Sc        supports operators like C (*=,+=,/= and -=)
#      -Sa        include assertion code.
#      -Sd        same as -Mdelphi
#      -Se<x>     error options. <x> is a combination of the following:
#         <n> : compiler stops after <n> errors (default is 1)
#         w   : compiler stops also after warnings
#         n   : compiler stops also after notes
#         h   : compiler stops also after hints
#      -Sg        allow LABEL and GOTO
#      -Sh        Use ansistrings
#      -Si        support C++ styled INLINE
#      -Sk        load fpcylix unit
#      -SI<x>     set interface style to <x>
#         -SIcom    COM compatible interface (default)
#         -SIcorba  CORBA compatible interface
#      -Sm        support macros like C (global)
#      -So        same as -Mtp
#      -Sp        same as -Mgpc
#      -Ss        constructor name must be init (destructor must be done)
#      -Sx        enable exception keywords (default in Delphi/ObjFPC modes)
#
# Allow goto, inline, C-operators, C-vars
-Sgic

# ---------------
# Code generation
# ---------------

# Uncomment the next line if you always want static/dynamic units by default
# (can be overruled with -CD, -CS at the commandline)
#-CS
#-CD

# Set the default heapsize to 8Mb
#-Ch8000000

# Set default codegeneration checks (iocheck, overflow, range, stack)
#-Ci
#-Co
#-Cr
#-Ct

# Optimizer switches
# -Os        generate smaller code
# -Oa=N      set alignment to N
# -O1        level 1 optimizations (quick optimizations, debuggable)
# -O2        level 2 optimizations (-O1 + optimizations which make debugging more difficult)
# -O3        level 3 optimizations (-O2 + optimizations which also may make the program slower rather than faster)
# -Oo<x>     switch on optimalization x. See fpc -i for possible values
# -OoNO<x>   switch off optimalization x. See fpc -i for possible values
# -Op<x>     set target cpu for optimizing, see fpc -i for possible values

#ifdef darwin
#ifdef cpui386
-Cppentiumm
-Oppentiumm
#endif
#endif

# -----------------------
# Set Filenames and Paths
# -----------------------

# Both slashes and backslashes are allowed in paths

# path to the messagefile, not necessary anymore but can be used to override
# the default language
#-Fr/usr/lib/fpc/$fpcversion/msg/errore.msg
#-Fr/usr/lib/fpc/$fpcversion/msg/errorn.msg
#-Fr/usr/lib/fpc/$fpcversion/msg/errores.msg
#-Fr/usr/lib/fpc/$fpcversion/msg/errord.msg
#-Fr/usr/lib/fpc/$fpcversion/msg/errorr.msg

# search path for unicode binary files (FPC 2.x does not know this switch)
#ifndef VER2
-FM/usr/lib/fpc/../../share/fpc/$fpcversion/unicode/
#endif

# searchpath for units and other system dependent things
-Fu/usr/lib/fpc/$fpcversion/units/$fpctarget
-Fu/usr/lib/fpc/$fpcversion/units/$fpctarget/*
-Fu/usr/lib/fpc/$fpcversion/units/$fpctarget/rtl

#ifdef cpui8086
-Fu/usr/lib/fpc/$fpcversion/units/$fpctarget/$fpcsubarch-$fpcmemorymodel
-Fu/usr/lib/fpc/$fpcversion/units/$fpctarget/$fpcsubarch-$fpcmemorymodel/*
-Fu/usr/lib/fpc/$fpcversion/units/$fpctarget/$fpcsubarch-$fpcmemorymodel/rtl
#endif

#IFDEF FPCAPACHE_1_3
-Fu/usr/lib/fpc/$fpcversion/units/$fpctarget/httpd13/
#ELSE
#IFDEF FPCAPACHE_2_0
-Fu/usr/lib/fpc/$fpcversion/units/$fpctarget/httpd20
#ELSE
-Fu/usr/lib/fpc/$fpcversion/units/$fpctarget/httpd22
#ENDIF
#ENDIF

#IFDEF ANDROID
#IFDEF CPUARM
-Fu/usr/lib/fpc/$fpcversion/units/$fpctarget
-Fu/usr/lib/fpc/$fpcversion/units/$fpctarget/*
-Fu/usr/lib/fpc/$fpcversion/units/$fpctarget/rtl
#ENDIF
#ENDIF   

# searchpath for fppkg user-specific packages
-Fu~/.fppkg/lib/fpc/$fpcversion/units/$FPCTARGET/*

# path to the gcclib
#ifdef cpui386
-Fl/usr/lib/gcc/x86_64-linux-gnu/7
#endif
#ifdef cpux86_64
-Fl/usr/lib/gcc/x86_64-linux-gnu/7
#endif

# searchpath for libraries
#-Fl/usr/lib/fpc/$fpcversion/lib
#-Fl/lib;/usr/lib
-Fl/usr/lib/fpc/$fpcversion/lib/$FPCTARGET

# searchpath for tools
-FD/usr/lib/fpc/$fpcversion/bin/$FPCTARGET

#IFNDEF CPUI386
#IFNDEF CPUAMD64
#DEFINE NEEDCROSSBINUTILS
#ENDIF
#ENDIF

#IFNDEF Linux
#DEFINE NEEDCROSSBINUTILS
#ENDIF

# never need cross-prefix when targeting the JVM
# (no native compiler, always cross-compiling)
#ifdef cpujvm
#undef NEEDCROSSBINUTILS
#endif

# for android cross-prefix is set by compiler
#ifdef android
#undef NEEDCROSSBINUTILS
#endif

# never need cross-prefix when targeting the i8086
# (no native compiler, always cross-compiling)
#ifdef cpui8086
#undef NEEDCROSSBINUTILS
#endif

# never need cross-prefix when targeting the i8086
# (no native compiler, always cross-compiling)
#ifdef cpujvm
#undef NEEDCROSSBINUTILS
#endif

# binutils prefix for cross compiling
#IFDEF FPC_CROSSCOMPILING
#IFDEF NEEDCROSSBINUTILS
  -XP$FPCTARGET-
#ENDIF
#ENDIF


# -------------
# Linking
# -------------

# generate always debugging information for GDB (slows down the compiling
# process)
#      -gc        generate checks for pointers
#      -gd        use dbx
#      -gg        use gsym
#      -gh        use heap trace unit (for memory leak debugging)
#      -gl        use line info unit to show more info for backtraces
#      -gv        generates programs tracable with valgrind
#      -gw        generate dwarf debugging info
#
# Enable debuginfo and use the line info unit by default
#-gl

# always pass an option to the linker
#-k-s

# Always strip debuginfo from the executable
-Xs

# Always use smartlinking on i8086, because the system unit exceeds the 64kb
# code limit
#ifdef cpui8086
-CX
-XX
#endif


# -------------
# Miscellaneous
# -------------

# Write always a nice FPC logo ;)
-l

# Verbosity
#      e : Show errors (default)       d : Show debug info
#      w : Show warnings               u : Show unit info
#      n : Show notes                  t : Show tried/used files
#      h : Show hints                  s : Show time stamps
#      i : Show general info           q : Show message numbers
#      l : Show linenumbers            c : Show conditionals
#      a : Show everything             0 : Show nothing (except errors)
#      b : Write file names messages   r : Rhide/GCC compatibility mode
#          with full path              x : Executable info (Win32 only)
#      v : write fpcdebug.txt with     p : Write tree.log with parse tree
#          lots of debugging info
#
# Display Info, Warnings and Notes
-viwn
# If you don't want so much verbosity use
#-vw
--- End code ---

Navigation

[0] Message Index

[#] Next page

Go to full version