==================================================================================== THIS FILE IS OBSOLETE, BUT IS STILL RETAINED AS AN ORIGINAL SOURCE ABOUT CROSSCOMPILING WITH FPC AND DUE TO NUMEROUS LINKS. THE INFORMATION HAS BEEN UPDATED AND INTEGRATED INTO THE BUILDFAQ (most notably paragraph 3.3 and 3.4) at HTML: http://www.stack.nl/~marcov/buildfaq PDF : http://www.stack.nl/~marcov/buildfaq.pdf ==================================================================================== To compile linux lazarus on windows: (the procedure from freebsd will not differ much, the cprt0 copying is not needed for FreeBSD) Requirements: - FPC 1.9.6 or higher. 1.9.4 migh work, but untested. - ftp://freepascal.stack.nl/pub/fpc/contrib/cross/mingw/binutils-2.15-win32-i386-linux.zip - A FPC CVS repository. (anything 1.9.6+ that is buildable will do) - a lazarus tree. (anything buildable from the same period will do) - Lots of libraries from the target linux system. One of the FPC servers is some SUSE, that's where I got the list below. 1) Download ftp://freepascal.stack.nl/pub/fpc/contrib/cross/mingw/binutils-2.15-win32-i386-linux.zip 2) extract it and move the i386* files to \bin\i386-win32 (e.g. c:\pp\bin\i386\win32) 3) enter FPC source dir 4) make clean 5) make OS_TARGET=linux all 6) make OS_TARGET=linux install INSTALL_PREFIX= 7) prepare the lib directory as in below instructions, I used d:\fpc\linuxlib to store them. 8) go to \units\i386-linux\rtl and copy cprt21.o over cprt0.o 9) enter lazarus dir 10) edit lazarus.pp and add {$linklib dl} and {$linklib gmodule} somewhere in the source. 11) make OS_TARGET=linux all OPT="-gl -Fld:\fpc\linuxlib -Xr/usr/lib -FL/usr/lib/ld-linux.so.2 " If some linker error (most specifically linker can't find -l) then 12) manually edit link.res if needed (see below for gtk remarks) and adapt the -l names at the bottom of the files. I had to add -1.2 to all gtk libs, to keep them apart from gtk2 13) run ppas.bat to restart the linker ----------- Libraries These are the libraries I collected for both lazarus and the textmode IDE (lazarus doesn't need pthread). I gathered these from the target system, and renamed all from lib.so.x.y to lib.so. libgcc.a and a few others are easiest found by doing gcc -v and look for a line like "Reading specs from /usr/lib/gcc-lib/i486-linux/3.3.5/specs" then some of the libs are in /usr/lib/gcc-lib/i486-linux/3.3.5/ Some other good locations are /lib /usr/lib /usr/local/lib /usr/x11R6/lib and /opt/gnome/lib libpthread.so.0 libdl.so libc.so ld-linux.so.2 crtbegin.o crtbeginS.o crtbeginT.o crtend.o crtendS.o crtn.o crti.o libgcc.a libX11.so libXi.so libglib-1.2.so libgmodule-1.2.so.0 libgdk_pixbuf.so libgdk-1.2.so libgtk-1.2.so libXext.so libm.so libdl.so.2 libgmodule-1.2.so Note that some directories are duplicate, with a suffix and not. These are required because some other lib has a dependancy on that exact name (so the form lib.so.x) we can't symlink on windows, so I simply copy it. Making mistakes with renaming is not that bad, there will be chances to fix it. Make sure all crt* and a file "libc.so" are available, otherwise generating link.res will go wrong. (Yes, Peter, that was my mistake :-) In my case compilation for step 11 will go ok, but the linker will complain it can't find libgtk.so and the other libraries marked with -1.2 This is because on the target system, libgtk is gtk 2.0, while we want gtk1.2 for lazarus. To fix this I manually added -1.2 to the corresponding -l lines in the bottom of the link.res file that was generated by step 11 P.s. a lot of linker editing _can_ be resolved with the beta linker control switches (-XLA and friends) in 2.0.4 and 2.1.1 . However these are beta, undocumented and not necessary available in future versions. They were mostly added to give package builders ( for linux distro's) and crosscompilers a chance to evaluate possible option.