git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@206118 91177308-0d34-0410-b5e6-96231b3b80d8
		
			
				
	
	
		
			180 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			180 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
#! /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
 |