Home | History | Annotate | Download | only in lib
      1 #! /bin/sh
      2 #
      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++.
      6 
      7 set -e
      8 
      9 if [ `basename $(pwd)` != "lib" ]
     10 then
     11 	echo "current directory must be lib"
     12 	exit 1
     13 fi
     14 
     15 if [ -z "$CXX" ]
     16 then
     17 	CXX=clang++
     18 fi
     19 
     20 if [ -z "$CC" ]
     21 then
     22     CC=clang
     23 fi
     24 
     25 if [ -z $MACOSX_DEPLOYMENT_TARGET ]
     26 then
     27 	if [ -z $IPHONEOS_DEPLOYMENT_TARGET ]
     28 	then
     29 		MACOSX_DEPLOYMENT_TARGET=10.7
     30 	fi
     31 fi
     32 
     33 if [ -z $RC_ProjectSourceVersion ]
     34 then
     35   RC_ProjectSourceVersion=1
     36 fi
     37 
     38 EXTRA_FLAGS="-std=c++0x -fstrict-aliasing -Wall -Wextra -Wshadow -Wconversion \
     39              -Wnewline-eof -Wpadded -Wmissing-prototypes -Wstrict-aliasing=2 \
     40              -Wstrict-overflow=4"
     41 
     42 case $TRIPLE in
     43   *-apple-*)
     44     if [ -z $RC_XBS ]
     45     then
     46       RC_CFLAGS="-arch i386 -arch x86_64"
     47     fi
     48     SOEXT=dylib
     49 	if [ "$MACOSX_DEPLOYMENT_TARGET" == "10.6" ]
     50 	then
     51 	    EXTRA_FLAGS="-std=c++0x -U__STRICT_ANSI__"
     52 		LDSHARED_FLAGS="-o libc++.1.dylib \
     53 			-dynamiclib -nodefaultlibs -current_version 1 \
     54 			-compatibility_version 1 \
     55 			-install_name /usr/lib/libc++.1.dylib \
     56 			-Wl,-reexport_library,/usr/lib/libc++abi.dylib \
     57 			-Wl,-unexported_symbols_list,libc++unexp.exp  \
     58 			/usr/lib/libSystem.B.dylib"
     59 	else
     60 		RE_EXPORT_LINE="/usr/lib/libc++abi.dylib -Wl,-reexported_symbols_list,libc++abi.exp"
     61 		if [ -n "$SDKROOT" ]
     62 		then
     63 			EXTRA_FLAGS+="-isysroot ${SDKROOT}"
     64 			if echo "${RC_ARCHS}" | grep -q "armv7"  
     65 			then
     66 				RE_EXPORT_LINE="${SDKROOT}/usr/lib/libc++abi.dylib -Wl,-reexported_symbols_list,libc++sjlj-abi.exp"
     67 			else
     68 				RE_EXPORT_LINE="-Wl,-reexport_library,${SDKROOT}/usr/lib/libc++abi.dylib"
     69 			fi
     70 			CXX=`xcrun -sdk "${SDKROOT}"  -find clang++`
     71 			CC=`xcrun -sdk "${SDKROOT}"  -find clang`
     72 		fi
     73 	    LDSHARED_FLAGS="-o libc++.1.dylib \
     74 			-dynamiclib -nodefaultlibs  \
     75 			-current_version ${RC_ProjectSourceVersion} \
     76 			-compatibility_version 1 \
     77 			-install_name /usr/lib/libc++.1.dylib \
     78 			-lSystem  \
     79 			-Wl,-unexported_symbols_list,libc++unexp.exp  \
     80 			${RE_EXPORT_LINE}  \
     81 			-Wl,-force_symbols_not_weak_list,notweak.exp \
     82 			-Wl,-force_symbols_weak_list,weak.exp"
     83 	fi
     84     ;;
     85   *-*-mingw*)
     86     # FIXME: removing libgcc and libsupc++ dependencies means porting libcxxrt and LLVM/compiler-rt
     87     SOEXT=dll
     88     LDSHARED_FLAGS="-o libc++.dll \
     89         -shared -nodefaultlibs -Wl,--export-all-symbols -Wl,--allow-multiple-definition -Wl,--out-implib,libc++.dll.a \
     90         -lsupc++ -lpthread -lmingw32 -lgcc_s -lgcc -lmoldname -lmingwex -lmsvcr100 -ladvapi32 -lshell32 -luser32 -lkernel32 -lmingw32 -lgcc_s -lgcc -lmoldname -lmingwex -lmsvcrt"
     91 	;;
     92   *)
     93     RC_CFLAGS="-fPIC"
     94     SOEXT=so
     95     LDSHARED_FLAGS="-o libc++.so.1.0 \
     96         -shared -nodefaultlibs -Wl,-soname,libc++.so.1 \
     97         -lpthread -lrt -lc -lstdc++"
     98     ;;
     99 esac
    100 
    101 if [ -z $RC_XBS ]
    102 then
    103     rm -f libc++.1.$SOEXT*
    104 fi
    105 
    106 set -x
    107 
    108 for FILE in ../src/*.cpp; do
    109 	$CXX -c -g -Os $RC_CFLAGS $EXTRA_FLAGS -nostdinc++ -I../include $FILE
    110 done
    111 case $TRIPLE in
    112   *-*-mingw*)
    113   for FILE in ../src/support/win32/*.cpp; do
    114     $CXX -c -g -Os $RC_CFLAGS $EXTRA_FLAGS -nostdinc++ -I../include $FILE
    115   done
    116   ;;
    117 esac
    118 $CC *.o $RC_CFLAGS $LDSHARED_FLAGS $EXTRA_FLAGS
    119 
    120 #libtool -static -o libc++.a *.o
    121 
    122 if [ -z $RC_XBS ]
    123 then
    124     rm *.o
    125 fi
    126