diff options
Diffstat (limited to 'lib/buildit')
-rwxr-xr-x | lib/buildit | 179 |
1 files changed, 179 insertions, 0 deletions
diff --git a/lib/buildit b/lib/buildit new file mode 100755 index 000000000000..7e3bc2ed2a96 --- /dev/null +++ b/lib/buildit @@ -0,0 +1,179 @@ +#! /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 |