111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#! /bin/sh
211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#
311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# Set the $TRIPLE environment variable to your system's triple before
411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# running this script.  If you set $CXX, that will be used to compile
511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# the library.  Otherwise we'll use clang++.
611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
711cd02dfb91661c65134cac258cf5924270e9d2Dan Albertset -e
811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
911cd02dfb91661c65134cac258cf5924270e9d2Dan Albertif [ `basename $(pwd)` != "lib" ]
1011cd02dfb91661c65134cac258cf5924270e9d2Dan Albertthen
1111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert	echo "current directory must be lib"
1211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert	exit 1
1311cd02dfb91661c65134cac258cf5924270e9d2Dan Albertfi
1411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
1511cd02dfb91661c65134cac258cf5924270e9d2Dan Albertif [ -z "$CXX" ]
1611cd02dfb91661c65134cac258cf5924270e9d2Dan Albertthen
1711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert	CXX=clang++
1811cd02dfb91661c65134cac258cf5924270e9d2Dan Albertfi
1911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
2011cd02dfb91661c65134cac258cf5924270e9d2Dan Albertif [ -z "$CC" ]
2111cd02dfb91661c65134cac258cf5924270e9d2Dan Albertthen
2211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    CC=clang
2311cd02dfb91661c65134cac258cf5924270e9d2Dan Albertfi
2411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
2511cd02dfb91661c65134cac258cf5924270e9d2Dan Albertif [ -z $RC_ProjectSourceVersion ]
2611cd02dfb91661c65134cac258cf5924270e9d2Dan Albertthen
2711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  RC_ProjectSourceVersion=1
2811cd02dfb91661c65134cac258cf5924270e9d2Dan Albertfi
2911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
3011cd02dfb91661c65134cac258cf5924270e9d2Dan AlbertEXTRA_FLAGS="-std=c++11 -stdlib=libc++ -fstrict-aliasing -Wstrict-aliasing=2 \
3111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert             -Wsign-conversion -Wshadow -Wconversion -Wunused-variable \
3211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert             -Wmissing-field-initializers -Wchar-subscripts -Wmismatched-tags \
3311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert             -Wmissing-braces -Wshorten-64-to-32 -Wsign-compare \
3411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert             -Wstrict-aliasing=2 -Wstrict-overflow=4 -Wunused-parameter \
3511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert             -Wnewline-eof"
3611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
3711cd02dfb91661c65134cac258cf5924270e9d2Dan Albertcase $TRIPLE in
3811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  *-apple-*)
3911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    if [ -z $RC_XBS ]
4011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    then
4111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert      RC_CFLAGS="-arch i386 -arch x86_64"
4211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    fi
4311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    SOEXT=dylib
4411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    if [ -n "$SDKROOT" ]
4511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    then
4611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        EXTRA_FLAGS+="-isysroot ${SDKROOT}"
4711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        CXX=`xcrun -sdk "${SDKROOT}"  -find clang++`
4811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        CC=`xcrun -sdk "${SDKROOT}"  -find clang`
4911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    fi
5011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    LDSHARED_FLAGS="-o libc++abi.dylib \
5111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        -dynamiclib -nodefaultlibs  \
5211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        -current_version ${RC_ProjectSourceVersion} \
5311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        -compatibility_version 1 \
5411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        -install_name /usr/lib/libc++abi.dylib \
5511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        -lSystem"
5611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert	if [ -f "${SDKROOT}/usr/local/lib/libCrashReporterClient.a" ]
5711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert	then
5811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert		LDSHARED_FLAGS+=" -lCrashReporterClient"
5911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert	fi
6011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    ;;
6111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  *-*-mingw*)
6211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    # FIXME: removing libgcc and libsupc++ dependencies means porting libcxxrt and LLVM/compiler-rt
6311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    SOEXT=dll
6411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    LDSHARED_FLAGS="-o libc++abi.dll \
6511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        -shared -nodefaultlibs -Wl,--export-all-symbols -Wl,--allow-multiple-definition -Wl,--out-implib,libc++abi.dll.a \
6611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        -lsupc++ -lpthread -lmingw32 -lgcc_s -lgcc -lmoldname -lmingwex -lmsvcr100 -ladvapi32 -lshell32 -luser32 -lkernel32 -lmingw32 -lgcc_s -lgcc -lmoldname -lmingwex -lmsvcrt"
6711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert	;;
6811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  *)
6911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    RC_CFLAGS="-fPIC"
7011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    SOEXT=so
7111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    LDSHARED_FLAGS="-o libc++abi.so.1.0 \
7211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        -shared -nodefaultlibs -Wl,-soname,libc++abi.so.1 \
7311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        -lpthread -lrt -lc -lstdc++"
7411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    ;;
7511cd02dfb91661c65134cac258cf5924270e9d2Dan Albertesac
7611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
7711cd02dfb91661c65134cac258cf5924270e9d2Dan Albertif [ -z $RC_XBS ]
7811cd02dfb91661c65134cac258cf5924270e9d2Dan Albertthen
7911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    rm -f libc++abi.1.$SOEXT*
8011cd02dfb91661c65134cac258cf5924270e9d2Dan Albertfi
8111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
8211cd02dfb91661c65134cac258cf5924270e9d2Dan Albertset -x
8311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
8411cd02dfb91661c65134cac258cf5924270e9d2Dan Albertfor FILE in ../src/*.cpp; do
8511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert	$CXX -c -g -O3 $RC_CFLAGS $EXTRA_FLAGS -I../include $OPTIONS $FILE
8611cd02dfb91661c65134cac258cf5924270e9d2Dan Albertdone
8711cd02dfb91661c65134cac258cf5924270e9d2Dan Albertcase $TRIPLE in
8811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  *-*-mingw*)
8911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  for FILE in ../src/support/win32/*.cpp; do
9011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    $CXX -c -g -Os $RC_CFLAGS $EXTRA_FLAGS -I../include $OPTIONS $FILE
9111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  done
9211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  ;;
9311cd02dfb91661c65134cac258cf5924270e9d2Dan Albertesac
9411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert$CC *.o $RC_CFLAGS $LDSHARED_FLAGS $EXTRA_FLAGS
9511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
9611cd02dfb91661c65134cac258cf5924270e9d2Dan Albertif [ -z $RC_XBS ]
9711cd02dfb91661c65134cac258cf5924270e9d2Dan Albertthen
9811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    rm *.o
9911cd02dfb91661c65134cac258cf5924270e9d2Dan Albertfi
100