1#! /bin/sh 2# 3# Set the $TRIPLE environment variable to your system's triple before 4# running this script. If you set $CXX, that will be used to compile 5# the library. Otherwise we'll use clang++. 6 7set -e 8 9if [ `basename $(pwd)` != "lib" ] 10then 11 echo "current directory must be lib" 12 exit 1 13fi 14 15if [ -z "$CXX" ] 16then 17 CXX=clang++ 18fi 19 20if [ -z "$CXX_LANG" ] 21then 22 CXX_LANG=c++11 23fi 24 25if [ -z "$CC" ] 26then 27 CC=clang 28fi 29 30if [ -z "$MACOSX_DEPLOYMENT_TARGET" ] 31then 32 if [ -z "$IPHONEOS_DEPLOYMENT_TARGET" ] 33 then 34 MACOSX_DEPLOYMENT_TARGET=10.7 35 fi 36fi 37 38if [ -z "$RC_ProjectSourceVersion" ] 39then 40 RC_ProjectSourceVersion=1 41fi 42 43EXTRA_FLAGS="-nostdinc++ -std=${CXX_LANG} -fstrict-aliasing -Wall -Wextra -Wshadow -Wconversion \ 44 -Wpadded -Wstrict-aliasing=2 -Wstrict-overflow=4 " 45 46case $TRIPLE in 47 *-apple-*) 48 if [ -z $RC_XBS ] 49 then 50 RC_CFLAGS="-arch i386 -arch x86_64" 51 fi 52 SOEXT=dylib 53 if [ "$MACOSX_DEPLOYMENT_TARGET" = "10.6" ] 54 then 55 EXTRA_FLAGS="-nostdinc++ -std=c++11 -U__STRICT_ANSI__" 56 LDSHARED_FLAGS="-o libc++.1.dylib \ 57 -dynamiclib -nodefaultlibs -current_version 1 \ 58 -compatibility_version 1 \ 59 -install_name /usr/lib/libc++.1.dylib \ 60 -Wl,-reexport_library,/usr/lib/libc++abi.dylib \ 61 -Wl,-unexported_symbols_list,libc++unexp.exp \ 62 /usr/lib/libSystem.B.dylib" 63 else 64 if [ -n "$SDKROOT" ] 65 then 66 EXTRA_FLAGS+="-isysroot ${SDKROOT} " 67 if echo "${RC_ARCHS}" | grep -q "armv7" 68 then 69 RE_EXPORT_LINE="${SDKROOT}/usr/lib/libc++abi.dylib -Wl,-reexported_symbols_list,libc++sjlj-abi.exp" 70 else 71 RE_EXPORT_LINE="-Wl,-reexport_library,${SDKROOT}/usr/lib/libc++abi.dylib" 72 fi 73 CXX=`xcrun -sdk "${SDKROOT}" -find clang++` 74 CC=`xcrun -sdk "${SDKROOT}" -find clang` 75 else 76 # Check if we have _LIBCPPABI_VERSION, to determine the reexport list to use. 77 if (echo "#include <cxxabi.h>" | $CXX -E -dM -x c++ - | \ 78 grep _LIBCPPABI_VERSION > /dev/null) 79 then 80 RE_EXPORT_LINE="/usr/lib/libc++abi.dylib -Wl,-reexported_symbols_list,libc++abi2.exp" 81 else 82 RE_EXPORT_LINE="/usr/lib/libc++abi.dylib -Wl,-reexported_symbols_list,libc++abi.exp" 83 fi 84 fi 85 LDSHARED_FLAGS="-o libc++.1.dylib \ 86 -dynamiclib -nodefaultlibs \ 87 -current_version ${RC_ProjectSourceVersion} \ 88 -compatibility_version 1 \ 89 -install_name /usr/lib/libc++.1.dylib \ 90 -lSystem \ 91 -Wl,-unexported_symbols_list,libc++unexp.exp \ 92 ${RE_EXPORT_LINE} \ 93 -Wl,-force_symbols_not_weak_list,notweak.exp \ 94 -Wl,-force_symbols_weak_list,weak.exp" 95 fi 96 ;; 97 *-*-mingw*) 98 # FIXME: removing libgcc and libsupc++ dependencies means porting libcxxrt and LLVM/compiler-rt 99 SOEXT=dll 100 LDSHARED_FLAGS="-o libc++.dll \ 101 -shared -nodefaultlibs -Wl,--export-all-symbols -Wl,--allow-multiple-definition -Wl,--out-implib,libc++.dll.a \ 102 -lsupc++ -lpthread -lmingw32 -lgcc_s -lgcc -lmoldname -lmingwex -lmsvcr100 -ladvapi32 -lshell32 -luser32 -lkernel32 -lmingw32 -lgcc_s -lgcc -lmoldname -lmingwex -lmsvcrt" 103 ;; 104 *-ibm-*) 105 hostOS=`uname` 106 hostOS=`echo $hostOS | sed -e "s/\s+$//"` 107 hostOS=`echo $hostOS | tr '[A-Z]' '[a-z]'` 108 109 if [ $hostOS = "linux" ] 110 then 111 LDSHARED_FLAGS="-o libc++.so.1 \ 112 -qmkshrobj -Wl,-soname,libc++.so.1 \ 113 -lpthread -lrt -lc -lstdc++" 114 EXTRA_FLAGS="-qlanglvl=extended0x -D__GLIBCXX__=1" 115 else 116 LDSHARED_FLAGS="-o shr.o -qmkshrobj -lpthread -bnoquiet" 117 EXTRA_FLAGS="-qlanglvl=extended0x" 118 fi 119 RC_CFLAGS="-qpic=large" 120 ;; 121 *) 122 RC_CFLAGS="-fPIC" 123 SOEXT=so 124 LDSHARED_FLAGS="-o libc++.so.1.0 \ 125 -shared -nodefaultlibs -Wl,-soname,libc++.so.1 \ 126 -lpthread -lrt -lc -lstdc++" 127 ;; 128esac 129 130if [ -z "$RC_XBS" ] 131then 132 rm -f libc++.1.$SOEXT* 133fi 134 135set -x 136 137for FILE in ../src/*.cpp; do 138 $CXX -c -g -Os $RC_CFLAGS $EXTRA_FLAGS -I../include $FILE 139done 140case $TRIPLE in 141 *-*-mingw*) 142 for FILE in ../src/support/win32/*.cpp; do 143 $CXX -c -g -Os $RC_CFLAGS $EXTRA_FLAGS -I../include $FILE 144 done 145 ;; 146esac 147$CC *.o $RC_CFLAGS $LDSHARED_FLAGS $EXTRA_FLAGS 148 149#libtool -static -o libc++.a *.o 150 151# Create the link for the final library name, so that we can use this directory 152# as a link target for the tests. 153case $TRIPLE in 154 *-apple-*) 155 rm -f libc++.dylib 156 ln -s libc++.1.dylib libc++.dylib 157 ;; 158 *-*-mingw*) 159 ;; 160 *-ibm-*) 161 if [ $hostOS = "linux" ] 162 then 163 rm -f libc++.so 164 ln -s libc++.so.1 libc++.so 165 else #AIX 166 rm -f libc++.a 167 ar r libc++.a shr.o 168 fi 169 ;; 170 *) 171 rm -f libc++.so 172 ln -s libc++.so.1 libc++.so 173 ;; 174esac 175 176if [ -z "$RC_XBS" ] 177then 178 rm *.o 179fi 180