osxcross/README.md
2014-03-26 20:32:30 +01:00

4.4 KiB

OSXCross: OS X cross toolchain for Linux

WHAT IS THE GOAL OF OSXCROSS?

The goal of OSXCross is to deliver you a high quality cross toolchain targeting OS X on Linux.

HOW DOES IT WORK?

Clang/LLVM is a cross compiler by default and is now available on nearly every Linux distribution.
Therefore we "just" need a proper port of the cctools (ld, lipo, ...) for Linux, and the OS X SDK.

If you want, then you can build an up-to-date vanilla GCC as well.

WHAT IS NOT WORKING (YET)?

  • Clang:
    • using libc++ (-stdlib=libc++) doesn't work yet (missing headers, besides that it should work)
  • GCC:

Everything else besides that should work.

WHAT CAN I BUILD WITH IT?

Basically everything you can build on OS X with clang/gcc should build with this cross toolchain as well.

INSTALLATION:

Download the SDK version (links below) you want to the tarball/ (important!) directory.

Then assure you have the following installed on your Linux box:

Clang 3.2+, llvm-devel, automake, autogen, libtool,
libxml2-devel, libuuid-devel, openssl-devel and the bash shell.

Now edit the SDK_VERSION in build.sh, so it matches the version you have downloaded before.

Then run ./build.sh to build the cross toolchain (It will build in it's own directory).

Don't forget to add the printed export PATH=... to your ~/.profile or ~/.bashrc.
Then either run source ~/.profile or restart your shell session.

That's it. See Usage Examples below.

Building GCC:

If you want to build GCC as well, then you can do this by running ./build_gcc.sh.
But before you do this, make sure you have got the gcc build depedencies installed on your system,
on debian like systems you can run apt-get build-dep gcc to install them.

USAGE EXAMPLES:

Let's say you want to compile a file called test.cpp, then you can do this by running:
  • Clang:

    • 32 bit: o32-clang++ test.cpp -O3 -o test OR i386-apple-darwinXX-clang++ test.cpp -O3 -o test
    • 64 bit: o64-clang++ test.cpp -O3 -o test OR x86_64-apple-darwinXX-clang++ test.cpp -O3 -o test
  • GCC:

    • 32 bit: o32-g++ test.cpp -O3 -o test OR i386-apple-darwinXX-g++ test.cpp -O3 -o test
    • 64 bit: o64-g++ test.cpp -O3 -o test OR x86_64-apple-darwinXX-g++ test.cpp -O3 -o test

XX= the target version, you can find it out by running osxcross-conf and then see TARGET.

You can use the shortcut o32-... or i386-apple-darwin... what ever you like more.

I'll continue from now on with o32-clang, but remember you can simply replace it with o32-gcc or i386-apple-darwin....

Building Makefile based projects:
  • make CC=o32-clang CXX=o32-clang++
Building automake based projects:
  • CC=o32-clang CXX=o32-clang++ ./configure --host=i386-apple-darwinXX
  • build the first object file: o32-clang++ test1.cpp -O3 -flto -c
  • build the second object file: o32-clang++ test2.cpp -O3 -flto -c
  • link them with LTO: o32-clang++ -O3 -flto test1.o test2.o -o test
Building a universal binary:
  • clang:
    • o64-clang++ test.cpp -O3 -arch i386 -arch x86_64 -o test
  • GCC:
    • build the 32 bit binary: o32-g++ test.cpp -O3 -o test.i386
    • build the 64 bit binary: o64-g++ test.cpp -O3 -o test.x86_64
    • use lipo to generate the universal binary: x86_64-apple darwinXX-lipo -create test.i386 test.x86_64 -output test

LICENSE:

  • bash scripts: GPLv2
  • cctools: APSL 2.0
  • xar: New BSD

CREDITS: