#!/usr/bin/env bash pushd "${0%/*}" &>/dev/null eval `./osxcross-env` eval `./osxcross-conf` popd &>/dev/null type=`basename $0` if [[ $type == *o64* ]] || [[ $type == *x86_64* ]]; then ARCH1="x86_64" ARCH2=$ARCH1 else if [[ $type == *o32* ]] || [[ $type == *i386* ]]; then ARCH1="i386" ARCH2="i686" else echo "unknown arch" exit 1 fi fi if [[ $type == *++* ]]; then COMPILER="clang++" else COMPILER="clang" fi if [ $COMPILER == "clang++" ] && [[ $type == *libc++* ]]; then USE_LIBCXX=1 else USE_LIBCXX=0 fi TARGET=$ARCH1-apple-$OSXCROSS_TARGET OSX_VERSION_MIN=$OSXCROSS_OSX_VERSION_MIN if [ $# -gt 0 ]; then for p in "$@" do if [[ "$p" == -mmacosx-version-min=* ]]; then OSXCROSS_OSX_VERSION_MIN="default" OSX_VERSION_MIN=`echo "$p" | tr '=' ' ' | awk '{print $2}'` continue fi if [ "$p" == "-stdlib=libc++" ]; then USE_LIBCXX=2 continue fi if [ "$p" == "-v" ] || [ "$p" == "--version" ]; then if [ $# -eq 1 ]; then $COMPILER $OSXCROSS_TARGET_OPTION $TARGET $p exit $? fi fi done else $COMPILER $OSXCROSS_TARGET_OPTION $TARGET exit $? fi if [ $OSXCROSS_OSX_VERSION_MIN != "default" ]; then OSX_VERSION_MIN_OPT="-mmacosx-version-min=$OSXCROSS_OSX_VERSION_MIN" else OSX_VERSION_MIN_OPT="" fi export COMPILER_PATH="$OSXCROSS_CCTOOLS_PATH:$COMPILER_PATH" STDINC=$OSXCROSS_SDK/usr/include if [ -n "$BUILD_LIBCXX" ]; then if [ $BUILD_LIBCXX -eq 1 ]; then # TODO: Write a fake libc++ library (without any symbols) # once libstdc++ disappears from the SDK. # Newer versions of clang default to libc++ for >= 10.9, # so configuring libc++ fails because of the hardcoded # -lc++ ... (at least with cmake). OSXCROSS_OPT_ARGS="$OSXCROSS_OPT_ARGS -stdlib=libstdc++" fi USE_LIBCXX=0 else if [ $USE_LIBCXX -eq 0 ]; then MIN_TARGET_VERSION=`echo "$OSX_VERSION_MIN" | tr '.' ' ' | awk '{printf "%d %d", $1, $2}'` MIN_TARGET_VERSION_MAJOR=`echo $MIN_TARGET_VERSION | awk '{print $1}'` MIN_TARGET_VERSION_MINOR=`echo $MIN_TARGET_VERSION | awk '{print $2}'` if [ $MIN_TARGET_VERSION_MAJOR -ge 10 ] && [ $MIN_TARGET_VERSION_MINOR -ge 9 ]; then # default to libc++ on >= 10.9 USE_LIBCXX=1 fi fi fi if [ $USE_LIBCXX -ne 0 ]; then if [ ! -f "$OSXCROSS_SDK/../libcxx_$OSXCROSS_SDK_VERSION/lib/libc++.a" ]; then echo -e "\e[1mosxcross \e[31merror:\e[0m\e[1m you must build libc++ before you can use it (./build_libcxx.sh)\e[0m" 1>&2 exit 1 fi CXXINC="-nostdinc++ -cxx-isystem $OSXCROSS_SDK/../libcxx_$OSXCROSS_SDK_VERSION/include/c++/v1" if [ $USE_LIBCXX -eq 1 ]; then CXXINC="$CXXINC -stdlib=libc++" fi REGEX="\-o\s*[^ ]+\.gch" if [[ ! "$@" =~ $REGEX ]]; then if [[ $COMPILER == *clang++* ]]; then CXXINC="$CXXINC -Qunused-arguments -lc++abi" fi CXXINC="$CXXINC -L$OSXCROSS_SDK/../libcxx_$OSXCROSS_SDK_VERSION/lib" fi else CXXINC="-cxx-isystem $OSXCROSS_SDK/usr/lib/gcc/i686-apple-$OSXCROSS_TARGET/4.2.1/include" CXXINC="$CXXINC -cxx-isystem $OSXCROSS_SDK/usr/include/c++/4.0.0 " CXXINC="$CXXINC -cxx-isystem $OSXCROSS_SDK/usr/include/c++/4.0.0/$ARCH2-apple-darwin9 " fi XMMINTRIN=`readlink "$STDINC/xmmintrin.h"` if [ $? -eq 0 ] && [ ! -f "$XMMINTRIN" ]; then pushd "${0%/*}" &>/dev/null if [ -f "osxcross-fix-intrinsic-headers" ]; then echo -e "\e[1mosxcross:\e[0m\e[35m fixing intrinsic symlinks...\e[0m" 1>&2 ./osxcross-fix-intrinsic-headers $OSXCROSS_SDK || { echo -e "\e[31mfailed.\e[0m" 1>&2 && exit 1; } echo -e "\e[1mdone.\e[0m" 1>&2 else echo -e "\e[1mosxcross \e[31merror:\e[0m\e[1m dead intrinsic link found - please re-run ./build.sh\e[0m" 1>&2 exit 1 fi fi $COMPILER \ $OSXCROSS_TARGET_OPTION $TARGET -isysroot $OSXCROSS_SDK \ $CXXINC $OSX_VERSION_MIN_OPT -mlinker-version=$OSXCROSS_LINKER_VERSION \ $OSXCROSS_OPT_ARGS ${1+"$@"} exit $?