#! /bin/sh # # Set the $TRIPLE environment variable to your system's triple before # running this script. If you set $CXX, that will be used to compile # the library. Otherwise we'll use clang++. set -e if [ `basename $(pwd)` != "lib" ] then echo "current directory must be lib" exit 1 fi if [ -z "$CXX" ] then CXX=clang++ fi if [ -z "$CXX_LANG" ] then CXX_LANG=c++11 fi if [ -z "$CC" ] then CC=clang fi if [ -z "$MACOSX_DEPLOYMENT_TARGET" ] then if [ -z "$IPHONEOS_DEPLOYMENT_TARGET" ] then MACOSX_DEPLOYMENT_TARGET=10.7 fi fi if [ -z "$RC_ProjectSourceVersion" ] then RC_ProjectSourceVersion=1 fi EXTRA_FLAGS="-nostdinc++ -std=${CXX_LANG} -fstrict-aliasing -Wall -Wextra -Wshadow -Wconversion \ -Wpadded -Wstrict-aliasing=2 -Wstrict-overflow=4 " case $TRIPLE in *-apple-*) if [ -z $RC_XBS ] then RC_CFLAGS="-arch i386 -arch x86_64" fi SOEXT=dylib if [ "$MACOSX_DEPLOYMENT_TARGET" == "10.6" ] then EXTRA_FLAGS="-nostdinc++ -std=c++11 -U__STRICT_ANSI__" LDSHARED_FLAGS="-o libc++.1.dylib \ -dynamiclib -nodefaultlibs -current_version 1 \ -compatibility_version 1 \ -install_name /usr/lib/libc++.1.dylib \ -Wl,-reexport_library,/usr/lib/libc++abi.dylib \ -Wl,-unexported_symbols_list,libc++unexp.exp \ /usr/lib/libSystem.B.dylib" else if [ -n "$SDKROOT" ] then EXTRA_FLAGS+="-isysroot ${SDKROOT} " if echo "${RC_ARCHS}" | grep -q "armv7" then RE_EXPORT_LINE="${SDKROOT}/usr/lib/libc++abi.dylib -Wl,-reexported_symbols_list,libc++sjlj-abi.exp" else RE_EXPORT_LINE="-Wl,-reexport_library,${SDKROOT}/usr/lib/libc++abi.dylib" fi CXX=`xcrun -sdk "${SDKROOT}" -find clang++` CC=`xcrun -sdk "${SDKROOT}" -find clang` else # Check if we have _LIBCPPABI_VERSION, to determine the reexport list to use. if (echo "#include <cxxabi.h>" | $CXX -E -dM -x c++ - | \ grep _LIBCPPABI_VERSION > /dev/null) then RE_EXPORT_LINE="/usr/lib/libc++abi.dylib -Wl,-reexported_symbols_list,libc++abi2.exp" else RE_EXPORT_LINE="/usr/lib/libc++abi.dylib -Wl,-reexported_symbols_list,libc++abi.exp" fi fi LDSHARED_FLAGS="-o libc++.1.dylib \ -dynamiclib -nodefaultlibs \ -current_version ${RC_ProjectSourceVersion} \ -compatibility_version 1 \ -install_name /usr/lib/libc++.1.dylib \ -lSystem \ -Wl,-unexported_symbols_list,libc++unexp.exp \ ${RE_EXPORT_LINE} \ -Wl,-force_symbols_not_weak_list,notweak.exp \ -Wl,-force_symbols_weak_list,weak.exp" fi ;; *-*-mingw*) # FIXME: removing libgcc and libsupc++ dependencies means porting libcxxrt and LLVM/compiler-rt SOEXT=dll LDSHARED_FLAGS="-o libc++.dll \ -shared -nodefaultlibs -Wl,--export-all-symbols -Wl,--allow-multiple-definition -Wl,--out-implib,libc++.dll.a \ -lsupc++ -lpthread -lmingw32 -lgcc_s -lgcc -lmoldname -lmingwex -lmsvcr100 -ladvapi32 -lshell32 -luser32 -lkernel32 -lmingw32 -lgcc_s -lgcc -lmoldname -lmingwex -lmsvcrt" ;; *-ibm-*) hostOS=`uname` hostOS=`echo $hostOS | sed -e "s/\s+$//"` hostOS=`echo $hostOS | tr '[A-Z]' '[a-z]'` if [ $hostOS == "linux" ] then LDSHARED_FLAGS="-o libc++.so.1 \ -qmkshrobj -Wl,-soname,libc++.so.1 \ -lpthread -lrt -lc -lstdc++" EXTRA_FLAGS="-qlanglvl=extended0x -D__GLIBCXX__=1" else LDSHARED_FLAGS="-o shr.o -qmkshrobj -lpthread -bnoquiet" EXTRA_FLAGS="-qlanglvl=extended0x" fi RC_CFLAGS="-qpic=large" ;; *) RC_CFLAGS="-fPIC" SOEXT=so LDSHARED_FLAGS="-o libc++.so.1.0 \ -shared -nodefaultlibs -Wl,-soname,libc++.so.1 \ -lpthread -lrt -lc -lstdc++" ;; esac if [ -z "$RC_XBS" ] then rm -f libc++.1.$SOEXT* fi set -x for FILE in ../src/*.cpp; do $CXX -c -g -Os $RC_CFLAGS $EXTRA_FLAGS -I../include $FILE done case $TRIPLE in *-*-mingw*) for FILE in ../src/support/win32/*.cpp; do $CXX -c -g -Os $RC_CFLAGS $EXTRA_FLAGS -I../include $FILE done ;; esac $CC *.o $RC_CFLAGS $LDSHARED_FLAGS $EXTRA_FLAGS #libtool -static -o libc++.a *.o # Create the link for the final library name, so that we can use this directory # as a link target for the tests. case $TRIPLE in *-apple-*) rm -f libc++.dylib ln -s libc++.1.dylib libc++.dylib ;; *-*-mingw*) ;; *-ibm-*) if [ $hostOS == "linux" ] then rm -f libc++.so ln -s libc++.so.1 libc++.so else #AIX rm -f libc++.a ar r libc++.a shr.o fi ;; *) rm -f libc++.so ln -s libc++.so.1 libc++.so ;; esac if [ -z "$RC_XBS" ] then rm *.o fi