[fpc-pascal] Cross Compiling from Linux to a Mac OS X 10.5 or 10.6 target. How? [SOLVED]

Causal Lists lists at causal.com
Sat Aug 6 15:28:01 CEST 2011


I finally managed to get Intel Mac OS X cross-compilation (from Linux)
working well so I thought I'd document what I did for the benefit of
others because the info in the wiki is wildly out of date.

I'll update the wiki (if I can) to point to this message.

What you'll need:

[1] an Intel Mac running Leopard or Snow Leopard
[2] the original or retail OSX DVD (for the SDK)
[3] a working linux setup (Debian Squeeze in my case)
[4] up to date source for FPC (2.4.x) and Lazarus (0.9.30)
[5] the Open Darwin cctools (odcctools)

Once set up, you won't need the Mac to compile your code.

STEP 1: copy the SDK from your Mac.

You need to install XCode from your OSX DVD if you've not already done
so and copy the SDK to an appropriate location on your Linux box. I'd
recommend MacOSX10.5.sdk but it depends on how far back you want to be
compatible. MacOSX10.5.sdk is located in /Developer/SDKs on the Mac.

I put mine at /opt/MacOSX10.5.sdk on my Debian box.

STEP 2: grab odcctools from SVN (I use mercurial, hence the "hg" stuff)

hg clone http://svn.macosforge.org/repository/odcctools/trunk/ odcctools

and build it as

$ cd ~/hg/odcctools && ./extract.sh && cd odcctools
$ CC=gcc-4.4 ./configure --target=i386-darwin \
  --prefix=/opt/odcctools --with-sysroot=/opt/MacOSX10.5.sdk
$ make && make install

I've specified gcc 4.4 but it should be okay with other versions.

STEP 3: rebuild FPC (my sources are in ~/hg/pascal)

$ cd ~/hg/pascal && hg id -bint
  730fd5ffbeb1 16666 fixes_2_4 release_2_4_2
$ make distclean && FPC=ppc386 make crossall crossinstall \
  CPU_TARGET=i386 OS_TARGET=darwin \
  CROSSBINDIR=/opt/odcctools/bin BINUTILSPREFIX=i386-darwin- \
  INSTALL_PREFIX=/opt/cross \
  OPT="-gl -gw -godwarfsets -XX -CX -Xd -Fl/opt/MacOSX10.5.sdk/usr/lib"

Note that the options (OPT) as shown are vital, especially -gw.

STEP 4: add a darwin (cross-compile) clause to /etc/fpc.cfg

#IFDEF darwin
-Fu/opt/cross/lib/fpc/$fpcversion/units/i386-darwin/
-Fu/opt/cross/lib/fpc/$fpcversion/units/i386-darwin/*
-Fu/opt/cross/lib/fpc/$fpcversion/units/i386-darwin/rtl
-FD/opt/odcctools/bin
#ENDIF

STEP 5: build the Carbon LCL (in Lazarus)

Be sure to specify the Darwin OS target, i386 CPU target and, most
importantly, add the -gw option. Perform a Clean+Build of the LCL and
the Package Registration.

You should now be able to use Lazarus in Linux to build for Mac OS X.

There are two more gotcha's when cross-compiling to OS X:

First, be sure to specify the -gw in your projects to avoid problems
reported in (the unfixable) FPC bug #12001.

Second, be sure to specify the -XR option pointing to your SDK root, in
my case -XR/opt/MacOSX10.5.sdk, or the Darwin linker will try to link to
the wrong startup object (/usr/lib/crt1.o).

I hope this information saves the next person to try to set this up a
lot of time :-)

Cheers, Bruce.



More information about the fpc-pascal mailing list