mirror of
https://github.com/Relintai/osxcross.git
synced 2025-03-09 07:46:59 +01:00
141 lines
4.1 KiB
Bash
Executable File
141 lines
4.1 KiB
Bash
Executable File
#!/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 $?
|