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++.
9 if [ `basename $(pwd)` != "lib" ]
11 echo "current directory must be lib"
30 if [ -z "$MACOSX_DEPLOYMENT_TARGET" ]
32 if [ -z "$IPHONEOS_DEPLOYMENT_TARGET" ]
34 MACOSX_DEPLOYMENT_TARGET=10.7
38 if [ -z "$RC_ProjectSourceVersion" ]
40 RC_ProjectSourceVersion=1
43 EXTRA_FLAGS="-nostdinc++ -std=${CXX_LANG} -fstrict-aliasing -Wall -Wextra -Wshadow -Wconversion \
44 -Wpadded -Wstrict-aliasing=2 -Wstrict-overflow=4 "
50 RC_CFLAGS="-arch i386 -arch x86_64"
53 if [ "$MACOSX_DEPLOYMENT_TARGET" == "10.6" ]
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"
66 EXTRA_FLAGS+="-isysroot ${SDKROOT} "
67 if echo "${RC_ARCHS}" | grep -q "armv7"
69 RE_EXPORT_LINE="${SDKROOT}/usr/lib/libc++abi.dylib -Wl,-reexported_symbols_list,libc++sjlj-abi.exp"
71 RE_EXPORT_LINE="-Wl,-reexport_library,${SDKROOT}/usr/lib/libc++abi.dylib"
73 CXX=`xcrun -sdk "${SDKROOT}" -find clang++`
74 CC=`xcrun -sdk "${SDKROOT}" -find clang`
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)
80 RE_EXPORT_LINE="/usr/lib/libc++abi.dylib -Wl,-reexported_symbols_list,libc++abi2.exp"
82 RE_EXPORT_LINE="/usr/lib/libc++abi.dylib -Wl,-reexported_symbols_list,libc++abi.exp"
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 \
91 -Wl,-unexported_symbols_list,libc++unexp.exp \
93 -Wl,-force_symbols_not_weak_list,notweak.exp \
94 -Wl,-force_symbols_weak_list,weak.exp"
98 # FIXME: removing libgcc and libsupc++ dependencies means porting libcxxrt and LLVM/compiler-rt
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"
106 hostOS=`echo $hostOS | sed -e "s/\s+$//"`
107 hostOS=`echo $hostOS | tr '[A-Z]' '[a-z]'`
109 if [ $hostOS == "linux" ]
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"
116 LDSHARED_FLAGS="-o shr.o -qmkshrobj -lpthread -bnoquiet"
117 EXTRA_FLAGS="-qlanglvl=extended0x"
119 RC_CFLAGS="-qpic=large"
124 LDSHARED_FLAGS="-o libc++.so.1.0 \
125 -shared -nodefaultlibs -Wl,-soname,libc++.so.1 \
126 -lpthread -lrt -lc -lstdc++"
132 rm -f libc++.1.$SOEXT*
137 for FILE in ../src/*.cpp; do
138 $CXX -c -g -Os $RC_CFLAGS $EXTRA_FLAGS -I../include $FILE
142 for FILE in ../src/support/win32/*.cpp; do
143 $CXX -c -g -Os $RC_CFLAGS $EXTRA_FLAGS -I../include $FILE
147 $CC *.o $RC_CFLAGS $LDSHARED_FLAGS $EXTRA_FLAGS
149 #libtool -static -o libc++.a *.o
151 # Create the link for the final library name, so that we can use this directory
152 # as a link target for the tests.
156 ln -s libc++.1.dylib libc++.dylib
161 if [ $hostOS == "linux" ]
164 ln -s libc++.so.1 libc++.so
172 ln -s libc++.so.1 libc++.so