2013-12-15 19:06:50 +01:00
|
|
|
#!/usr/bin/env bash
|
|
|
|
|
|
|
|
pushd "${0%/*}" &>/dev/null
|
|
|
|
|
2013-12-16 21:53:21 +01:00
|
|
|
DESC=libc++
|
|
|
|
source tools/tools.sh
|
2013-12-15 19:06:50 +01:00
|
|
|
|
|
|
|
if [ `echo "${OSXCROSS_SDK_VERSION}<10.7" | bc -l` -eq 1 ]; then
|
2013-12-16 21:53:21 +01:00
|
|
|
echo "you must use the SDK from 10.7 or newer to get $DESC compiled"
|
2013-12-15 19:06:50 +01:00
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
|
|
|
# libc++ version to build
|
|
|
|
LIBCXX_VERSION=3.3
|
|
|
|
|
|
|
|
set +e
|
|
|
|
require wget
|
|
|
|
require cmake
|
|
|
|
set -e
|
|
|
|
|
2013-12-16 21:53:21 +01:00
|
|
|
pushd $OSXCROSS_BUILD_DIR &>/dev/null
|
|
|
|
|
|
|
|
function remove_locks()
|
|
|
|
{
|
|
|
|
rm -f $OSXCROSS_BUILD_DIR/have_libcxx*
|
|
|
|
}
|
2013-12-15 19:06:50 +01:00
|
|
|
|
2013-12-16 21:53:21 +01:00
|
|
|
source $BASE_DIR/tools/trap_exit.sh
|
2013-12-15 19:06:50 +01:00
|
|
|
|
|
|
|
if [ ! -f "have_libcxx_${LIBCXX_VERSION}_${OSXCROSS_TARGET}" ]; then
|
|
|
|
|
2013-12-16 21:53:21 +01:00
|
|
|
pushd $OSXCROSS_TARBALL_DIR &>/dev/null
|
2013-12-15 19:06:50 +01:00
|
|
|
wget -c "http://llvm.org/releases/3.3/libcxx-${LIBCXX_VERSION}.src.tar.gz"
|
2013-12-16 21:53:21 +01:00
|
|
|
popd &>/dev/null
|
2013-12-15 19:06:50 +01:00
|
|
|
|
|
|
|
tar xzfv "$OSXCROSS_TARBALL_DIR/libcxx-${LIBCXX_VERSION}.src.tar.gz"
|
2013-12-16 21:53:21 +01:00
|
|
|
pushd libcxx-${LIBCXX_VERSION}* &>/dev/null
|
2013-12-15 19:06:50 +01:00
|
|
|
rm -rf build
|
|
|
|
mkdir build
|
|
|
|
|
2013-12-16 21:53:21 +01:00
|
|
|
pushd build &>/dev/null
|
2013-12-15 19:06:50 +01:00
|
|
|
|
|
|
|
# remove conflicting versions
|
|
|
|
rm -rf $OSXCROSS_SDK/usr/include/c++/v1
|
|
|
|
rm -rf $OSXCROSS_SDK/usr/lib/libc++.dylib
|
|
|
|
rm -rf $OSXCROSS_SDK/usr/lib/libc++.*.dylib
|
|
|
|
|
2013-12-16 21:53:21 +01:00
|
|
|
function cmake_error()
|
2013-12-15 19:06:50 +01:00
|
|
|
{
|
|
|
|
echo -e "\e[1m"
|
|
|
|
echo "It looks like CMake failed."
|
|
|
|
echo "If you see something like:"
|
|
|
|
echo -e "\e[31m"
|
|
|
|
echo "CMake Error at /usr/share/cmake-2.8/Modules/Platform/Darwin.cmake:<LINE NUMBER> (list):"
|
|
|
|
echo " list sub-command REMOVE_DUPLICATES requires list to be present."
|
|
|
|
echo -e "\e[0m\e[1m"
|
|
|
|
echo "Then either remove this line (look for the LINE NUMBER) or comment it out (with #) in /usr/share/cmake-.../Modules/Platform/Darwin.cmake"
|
|
|
|
echo "It appears to be a bug in CMake."
|
|
|
|
echo ""
|
|
|
|
echo "Then re-run this script."
|
|
|
|
echo -e "\e[0m"
|
|
|
|
exit 1
|
|
|
|
}
|
|
|
|
|
|
|
|
cmake .. \
|
|
|
|
-DCMAKE_CXX_COMPILER=x86_64-apple-$OSXCROSS_TARGET-clang++ \
|
|
|
|
-DCMAKE_C_COMPILER=x86_64-apple-$OSXCROSS_TARGET-clang \
|
|
|
|
-DCMAKE_SYSTEM_NAME=Darwin \
|
|
|
|
-DCMAKE_OSX_SYSROOT=$OSXCROSS_SDK \
|
|
|
|
-DLIBCXX_ENABLE_SHARED=No \
|
|
|
|
-DCMAKE_BUILD_TYPE=Release \
|
|
|
|
-DCMAKE_INSTALL_PREFIX=$OSXCROSS_SDK/../libcxx_$OSXCROSS_SDK_VERSION \
|
|
|
|
-DCMAKE_AR=$OSXCROSS_CCTOOLS_PATH/x86_64-apple-$OSXCROSS_TARGET-ar \
|
|
|
|
-DCMAKE_RANLIB=$OSXCROSS_CCTOOLS_PATH/x86_64-apple-$OSXCROSS_TARGET-ranlib \
|
2013-12-16 21:53:21 +01:00
|
|
|
-DCMAKE_CXX_FLAGS="-arch i386 -arch x86_64" || cmake_error
|
2013-12-15 19:06:50 +01:00
|
|
|
|
|
|
|
make -j$JOBS
|
|
|
|
make install -j$JOBS
|
|
|
|
|
2013-12-16 21:53:21 +01:00
|
|
|
popd &>/dev/null # build
|
|
|
|
popd &>/dev/null # libcxx
|
2013-12-15 19:06:50 +01:00
|
|
|
|
|
|
|
touch "have_libcxx_${LIBCXX_VERSION}_${OSXCROSS_TARGET}"
|
|
|
|
|
2013-12-16 21:53:21 +01:00
|
|
|
fi # have libcxx
|
2013-12-15 19:06:50 +01:00
|
|
|
|
2013-12-16 21:53:21 +01:00
|
|
|
popd &>/dev/null # build dir
|
2013-12-15 19:06:50 +01:00
|
|
|
|
|
|
|
function test_compiler_clang
|
|
|
|
{
|
|
|
|
echo -ne "testing $2 -stdlib=libc++ ... "
|
|
|
|
$1 $3 -O2 -stdlib=libc++ -std=c++11 -Wall -o test
|
|
|
|
rm test
|
|
|
|
echo "ok"
|
|
|
|
}
|
|
|
|
|
|
|
|
function test_compiler_gcc
|
|
|
|
{
|
|
|
|
echo -ne "testing $2 ... "
|
|
|
|
$1 $3 -O2 -std=c++0x -Wall -o test
|
|
|
|
rm test
|
|
|
|
echo "ok"
|
|
|
|
}
|
|
|
|
|
|
|
|
HAVE_GCC=0
|
|
|
|
|
|
|
|
echo ""
|
|
|
|
echo "testing libc++ (including a lot c++11 headers + linking a small test program)"
|
|
|
|
echo ""
|
|
|
|
|
|
|
|
test_compiler_clang i386-apple-$OSXCROSS_TARGET-clang++ o32-clang++ $BASE_DIR/oclang/test_libcxx.cpp
|
|
|
|
test_compiler_clang x86_64-apple-$OSXCROSS_TARGET-clang++ o64-clang++ $BASE_DIR/oclang/test_libcxx.cpp
|
|
|
|
|
|
|
|
which i386-apple-$OSXCROSS_TARGET-g++-libc++ &>/dev/null && \
|
2014-01-01 16:47:00 +01:00
|
|
|
HAVE_GCC=1 && \
|
2013-12-15 19:06:50 +01:00
|
|
|
test_compiler_gcc i386-apple-$OSXCROSS_TARGET-g++-libc++ o32-g++-libc++ $BASE_DIR/oclang/test_libcxx.cpp
|
|
|
|
|
|
|
|
which x86_64-apple-$OSXCROSS_TARGET-g++-libc++ &>/dev/null && \
|
|
|
|
HAVE_GCC=1 && \
|
|
|
|
test_compiler_gcc x86_64-apple-$OSXCROSS_TARGET-g++-libc++ o64-g++-libc++ $BASE_DIR/oclang/test_libcxx.cpp
|
|
|
|
|
|
|
|
echo ""
|
|
|
|
echo "Done!"
|
|
|
|
echo ""
|
|
|
|
echo "Example usage:"
|
|
|
|
echo ""
|
|
|
|
if [ $HAVE_GCC -eq 1 ]; then
|
|
|
|
echo "Clang:"
|
|
|
|
echo ""
|
|
|
|
fi
|
|
|
|
echo "Example 1: o32-clang++ -stdlib=libc++ -Wall test.cpp -o test"
|
|
|
|
echo "Example 2: o64-clang++ -stdlib=libc++ -std=c++11 -Wall test.cpp"
|
|
|
|
echo "Example 3: o32-clang++-libc++ -Wall test.cpp -o test"
|
|
|
|
echo "Example 4: o64-clang++-libc++ -std=c++11 -Wall test.cpp -o test"
|
|
|
|
echo "Example 5: x86_64-apple-$OSXCROSS_TARGET-clang++-libc++ -Wall test.cpp -o test"
|
|
|
|
echo "Example 6: i386-apple-$OSXCROSS_TARGET-clang++-libc++ -std=c++11 -Wall test.cpp -o test"
|
|
|
|
echo ""
|
|
|
|
if [ $HAVE_GCC -eq 1 ]; then
|
|
|
|
echo "GCC:"
|
|
|
|
echo ""
|
|
|
|
echo "Example 1: o32-g++-libc++ -Wall test.cpp -o test"
|
|
|
|
echo "Example 2: o64-g++-libc++ -std=c++1y -Wall test.cpp -o test"
|
|
|
|
echo "Example 3: x86_64-apple-$OSXCROSS_TARGET-g++-libc++ -Wall test.cpp -o test"
|
|
|
|
echo "Example 4: i386-apple-$OSXCROSS_TARGET-g++-libc++ -std=c++1y -Wall test.cpp -o test"
|
|
|
|
echo ""
|
|
|
|
fi
|