blob: ea4359dc8969c3cf3a64a08252fb5d952b9bf00e [file] [log] [blame]
#! /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 "$CC" ]
then
CC=clang
fi
if [ -z "$AR" ]
then
AR=ar
fi
if [ -z "$RANLIB" ]
then
RANLIB=ranlib
fi
if [ -z "$AR" ]
then
AR=ar
fi
if [ -z "$RANLIB" ]
then
RANLIB=ranlib
fi
if [ -z $RC_ProjectSourceVersion ]
then
RC_ProjectSourceVersion=1
fi
EXTRA_CC_FLAGS="-std=c11"
EXTRA_CXX_FLAGS="-std=c++11 -stdlib=libc++"
EXTRA_FLAGS="-fstrict-aliasing -Wstrict-aliasing=2 \
-Wsign-conversion -Wshadow -Wconversion -Wunused-variable \
-Wmissing-field-initializers -Wchar-subscripts -Wmismatched-tags \
-Wmissing-braces -Wshorten-64-to-32 -Wsign-compare \
-Wstrict-aliasing=2 -Wstrict-overflow=4 -Wunused-parameter \
-Wnewline-eof"
case $TRIPLE in
*-apple-*)
if [ -z $RC_XBS ]
then
RC_CFLAGS="-arch i386 -arch x86_64"
fi
SOEXT=dylib
if [ -n "$SDKROOT" ]
then
EXTRA_CXX_FLAGS+="-isysroot ${SDKROOT}"
CXX=`xcrun -sdk "${SDKROOT}" -find clang++`
CC=`xcrun -sdk "${SDKROOT}" -find clang`
fi
LDSHARED_FLAGS="-o libc++abi.dylib \
-dynamiclib -nodefaultlibs \
-current_version ${RC_ProjectSourceVersion} \
-compatibility_version 1 \
-install_name /usr/lib/libc++abi.dylib \
-lSystem"
if [ -f "${SDKROOT}/usr/local/lib/libCrashReporterClient.a" ]
then
LDSHARED_FLAGS+=" -lCrashReporterClient"
fi
;;
*-*-mingw*)
# FIXME: removing libgcc and libsupc++ dependencies means porting libcxxrt and LLVM/compiler-rt
SOEXT=dll
LDSHARED_FLAGS="-o libc++abi.dll \
-shared -nodefaultlibs -Wl,--export-all-symbols -Wl,--allow-multiple-definition -Wl,--out-implib,libc++abi.dll.a \
-lsupc++ -lpthread -lmingw32 -lgcc_s -lgcc -lmoldname -lmingwex -lmsvcr100 -ladvapi32 -lshell32 -luser32 -lkernel32 -lmingw32 -lgcc_s -lgcc -lmoldname -lmingwex -lmsvcrt"
;;
*-none-eabi*)
RC_CFLAGS="-fPIC"
SOEXT=so
EXTRA_FLAGS+=" -target $TRIPLE --sysroot=$SYSROOT -no-integrated-as -funwind-tables -DLIBCXXABI_BARE_METAL=1"
;;
*)
RC_CFLAGS="-fPIC"
SOEXT=so
LDSHARED_FLAGS="-o libc++abi.so.1.0 \
-shared -nodefaultlibs -Wl,-soname,libc++abi.so.1 \
-lpthread -lrt -lc -lstdc++"
;;
esac
if [ -z $RC_XBS ]
then
rm -f libc++abi.1.$SOEXT*
fi
set -x
# Build the generic bits
for FILE in ../src/*.cpp; do
$CXX -c -g -O0 $RC_CFLAGS $EXTRA_CXX_FLAGS $EXTRA_FLAGS -I../include $OPTIONS $FILE
done
case $TRIPLE in
*-*-mingw*)
for FILE in ../src/support/win32/*.cpp; do
$CXX -c -g -O0 $RC_CFLAGS $EXTRA_CXX_FLAGS $EXTRA_FLAGS -I../include $OPTIONS $FILE
done
;;
*-apple-*)
for FILE in ../src/support/apple/*.cpp; do
$CXX -c -g -O0 $RC_CFLAGS $EXTRA_CXX_FLAGS $EXTRA_FLAGS -I../include $OPTIONS $FILE
done
;;
*)
;;
esac
# Build the Unwinder
case $TRIPLE in
*-none-eabi*)
for FILE in ../src/Unwind/*.S; do
$CC -c -g -O0 $RC_CFLAGS $EXTRA_CC_FLAGS $EXTRA_FLAGS -I../include $OPTIONS $FILE
done
for FILE in ../src/Unwind/*.c; do
$CC -c -g -O0 $RC_CFLAGS $EXTRA_CC_FLAGS $EXTRA_FLAGS -I../include $OPTIONS $FILE
done
for FILE in ../src/Unwind/*.cpp; do
$CXX -c -g -O0 $RC_CFLAGS $EXTRA_CXX_FLAGS $EXTRA_FLAGS -I../include $OPTIONS $FILE
done
;;
esac
# Package everything up in a library (shared or static)
case $TRIPLE in
*-none-eabi*)
$AR rc libc++abi.a *.o
$RANLIB libc++abi.a
;;
*)
$CC *.o $RC_CFLAGS $LDSHARED_FLAGS $EXTRA_CXX_FLAGS $EXTRA_FLAGS
;;
esac
if [ -z $RC_XBS ]
then
rm *.o
fi