Skip to content
OS X cross toolchain for Linux, FreeBSD and NetBSD
C++ Shell C Makefile
Find file
Latest commit c5ffd32 Apr 16, 2016 @tpoechtrager GCC 6 build fix
Failed to load latest commit information.
images/cygwin add windows/cygwin readme Jul 20, 2015
oclang misc freebsd fixes: Feb 8, 2015
patches GCC 6 build fix Apr 16, 2016
tarballs Update cctools to 877.5 and ld64 to 253.3 Oct 24, 2015
tools gen_sdk_package_darling_dmg.sh: Fix libdmg.so issue Apr 13, 2016
wrapper Wrapper: Remove unneeded '-fcolor-diagnostics' Mar 29, 2016
.gitignore new compiler wrapper written in C++ Apr 6, 2014
AUTHORS add osxcross-macports - a minimalistic macports packet manager for 16… Dec 24, 2014
CHANGELOG Update cctools to 877.5 and ld64 to 253.3 Oct 24, 2015
COPYING xcrun: Jun 27, 2015
KNOWN_BUGS.md Update KNOWN_BUGS.md Aug 29, 2015
README.COMPILER-RT.md Add llvm-dsymutil build script + re-add 7e9f85 Aug 31, 2015
README.CYGWIN.md Update the Cygwin README Oct 4, 2015
README.DEBUGGING.md Add llvm-dsymutil build script + re-add 7e9f85 Aug 31, 2015
README.MACPORTS.md osxcross-macports: Let the user choose between 4 mirrors Jan 11, 2016
README.PKG-CONFIG.md Misc pkg-config adjustments (closes #69) Mar 29, 2016
README.md Add back accidentally removed line break Feb 27, 2016
TODO Update TODO Feb 27, 2016
build.sh GCC 6 build fix Apr 16, 2016
build_binutils.sh Update Binutils & GDB version Aug 29, 2015
build_clang.sh build_clang.sh: Change default Clang version to 3.8.0 Mar 29, 2016
build_compiler_rt.sh Clang 3.8 adjustments Feb 27, 2016
build_gcc.sh build_gcc.sh: change default gcc version to 5.3.0 Jan 11, 2016
build_llvm_dsymutil.sh Add llvm-dsymutil build script + re-add 7e9f85 Aug 31, 2015
cleanup.sh xcrun: Jun 27, 2015
package.sh update package.sh Apr 14, 2014

README.md

OS X Cross toolchain for Linux, *BSD and Cygwin

WHAT IS THE GOAL OF OSXCROSS?

The goal of OSXCross is to provide a well working OS X cross toolchain for Linux, *BSD and Cygwin.

HOW DOES IT WORK?

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

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

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.

PACKET MANAGERS

OSXCross comes with a minimalistic MacPorts Packet Manager.
Please see README.MACPORTS for more.

INSTALLATION:

Windows/Cygwin users should follow README.CYGWIN.

Move your packaged SDK to the tarballs/ directory.

Then ensure you have the following installed on your system:

Clang 3.2+, patch, libxml2-devel (<=10.6 only) and the bash shell.

Optional:

llvm-devel: For Link Time Optimization support
uuid-devel: For ld64 -random_uuid support
llvm-devel + xar-devel: For ld64 -bitcode_bundle support

You can find xar here.
Do not install libxar-dev on Ubuntu, it's a different package.

--
You can run 'sudo tools/get_dependencies.sh' to get these automatically.

'[INSTALLPREFIX=...] ./build_clang.sh' can be used to build a recent clang version
from source (requires gcc and g++).

On debian like systems you can also use llvm.org/apt to get a newer version of clang.
But be careful, that repository is known to cause troubles.
--

Then run [UNATTENDED=1] ./build.sh to build the cross toolchain.
(It will search 'tarballs' for your SDK and then build in its own directory.)

Do not forget to add <path>/target/bin to your PATH variable.

That's it. See usage examples below.

Building GCC:

If you want to build GCC as well, then you can do this by running:
[GCC_VERSION=5.2.0] [ENABLE_FORTRAN=1] ./build_gcc.sh.

[A gfortran usage example can be found here]

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:

[sudo] apt-get install gcc g++ zlib1g-dev libmpc-dev libmpfr-dev libgmp-dev

to install them.

ATTENTION:

OSXCross links libgcc and libstdc++ statically by default (this affects -foc-use-gcc-libstdc++ too).
You can turn this behavior off with OSXCROSS_GCC_NO_STATIC_RUNTIME=1 (env).

PACKAGING THE SDK:

Please ensure you have read and understood the Xcode license terms before continuing.

Packaging the SDK on Mac OS X:
  1. [Download Xcode **]
  2. [Mount Xcode.dmg (Open With -> DiskImageMounter) ***]
  3. Run: ./tools/gen_sdk_package.sh (from the OSXCross package)
  4. Copy the packaged SDK (*.tar.* or *.pkg) on a USB Stick
  5. (On Linux/BSD) Copy or move the SDK into the tarballs/ directory of OSXCross

** Xcode up to 7.2.x is known to work.
*** If you get a dialog with a crossed circle, ignore it, you don't need to install Xcode.

Step 1. and 2. can be skipped if you have Xcode installed.

Packing the SDK on Linux, Cygwin (and others), Method 1 (works with Xcode >= 4.3):
  1. Download Xcode like described in 'Packaging the SDK on Mac OS X'
  2. Ensure you have clang and make installed
  3. Run ./gen_sdk_package_p7zip.sh <xcode>.dmg
  4. Copy or move the SDK into the tarballs/ directory
Packing the SDK on Linux, Method 2 (works with Xcode >= 4.3):
  1. Download Xcode like described in 'Packaging the SDK on Mac OS X'
  2. Install cmake, libxml2-dev and fuse
  3. Run ./gen_sdk_package_darling_dmg.sh <xcode>.dmg
  4. Copy or move the SDK into the tarballs/ directory
Packing the SDK on Linux, Method 3 (does NOT work with Xcode 4.3 or later!):
  1. Download Xcode 4.2 for Snow Leopard
  2. Ensure you are downloading the "Snow Leopard" version
  3. Install dmg2img
  4. Run (as root): ./tools/mount_xcode_image.sh /path/to/xcode.dmg
  5. Follow the instructions printed by ./tools/mount_xcode_image.sh
  6. Copy or move the SDK into the tarballs/ directory

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
Building test.cpp with libc++:

Note: libc++ requires Mac OS X 10.7 or newer! If you really need C++11 for
an older OS X version, then you can do the following:

  1. Build GCC so you have an up-to-date libstdc++
  2. Build your source code with GCC or clang++-gstdc++ / clang++ -foc-use-gcc-libstdc++

Usage Examples:

  • Clang:

    • C++98: o32-clang++ -stdlib=libc++ test.cpp -o test
    • C++11: o32-clang++ -stdlib=libc++ -std=c++11 test1.cpp -o test
    • C++14: o32-clang++ -stdlib=libc++ -std=c++14 test1.cpp -o test
    • C++1z: o32-clang++ -stdlib=libc++ -std=c++1z test1.cpp -o test
  • Clang (shortcut):

    • C++98: o32-clang++-libc++ test.cpp -o test
    • C++11: o32-clang++-libc++ -std=c++11 test.cpp -o test
    • C++14: o32-clang++-libc++ -std=c++14 test.cpp -o test
    • C++1z: o32-clang++-libc++ -std=c++1z test.cpp -o test
  • GCC

    • C++11: o32-g++-libc++ -std=c++11 test.cpp
    • C++14: o32-g++-libc++ -std=c++14 test.cpp -o test
    • C++1z: o32-g++-libc++ -std=c++1z test.cpp -o test
Building test1.cpp and test2.cpp with LTO (Link Time Optimization):
  • 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

DEPLOYMENT TARGET:

The default deployment target is Mac OS X 10.5.

However, there are several ways to override the default value:

  1. by passing OSX_VERSION_MIN=10.x to ./build.sh
  2. by passing -mmacosx-version-min=10.x to the compiler
  3. by setting the MACOSX_DEPLOYMENT_TARGET environment variable

>= 10.9 also defaults to libc++ instead of libstdc++, this behavior
can be overriden by explicitly passing -stdlib=libstdc++ to clang.

x86_64h defaults to Mac OS X 10.8 and requires clang 3.5+.
x86_64h = x86_64 with optimizations for the Intel Haswell Architecture.

BUILDING OSXCROSS WITH GCC:

You can build OSXCross with GCC this way:

CC=gcc CXX=g++ ./build.sh

You will need gcc/g++/gcc-objc 4.7+.

PROJECTS USING OSXCROSS:

  • multiarch/crossbuild, various cross-compilers (Systems: Linux, OS X, Windows, Archs: x86_64, i386, arm, ppc, mips) in Docker. OSXCross powers the Darwin builds.

LICENSE:

  • scripts/wrapper: GPLv2
  • cctools/ld64: APSL 2.0
  • xar: New BSD

CREDITS:

Something went wrong with that request. Please try again.