#!/bin/sh # APPLE LOCAL file B&I set -x # -arch arguments are different than configure arguments. We need to # translate them. TRANSLATE_ARCH="sed -e s/ppc/powerpc/ -e s/i386/i686/ -e s/ppc64/powerpc64/" TRANSLATE_TARGETS="sed -e s/ppc/powerpc/ -e s/i386/i686/ -e s/x86_64// \ -e s/powerpc64// -e s/ppc64//" # Build GCC the "Apple way". # Parameters: # The first parameter is a space-separated list of the architectures # the compilers will run on. For instance, "ppc i386". If the # current machine isn't in the list, it will (effectively) be added. HOSTS=`echo $1 | $TRANSLATE_ARCH ` # The second parameter is a space-separated list of the architectures the # compilers will generate code for. If the current machine isn't in # the list, a compiler for it will get built anyway, but won't be # installed. TARGETS=`echo $2 | $TRANSLATE_TARGETS` #APPLE LOCAL begin LLVM # LLVM does not require host name translation. LLVM_HOSTS=$1 # LLVM target list is comma separated list. #LLVM_TARGETS=`echo $2 | sed -e s/\ /\,/ -e s/ppc/powerpc/ -e s/i386/x86/ \ # -e s/x86_64// -e s/powerpc64// -e s/ppc64//` #FIXME : Hard code targets. See LLVMTARGETOBJ comment in gcc/Makefile.in LLVM_TARGETS="x86,powerpc" #APPLE LOCAL end LLVM # The GNU makefile target ('bootstrap' by default). BOOTSTRAP=${BOOTSTRAP-bootstrap} # The B&I build srcript (~rc/bin/buildit) accepts an '-othercflags' # command-line flag, and captures the argument to that flag in # $RC_NONARCH_CFLAGS (and mysteriously prepends '-pipe' thereto). # We will allow this to override the default $CFLAGS and $CXXFLAGS. CFLAGS="-g -O2 ${RC_NONARCH_CFLAGS/-pipe/}" # This isn't a parameter; it is the architecture of the current machine. BUILD=`arch | $TRANSLATE_ARCH` # The third parameter is the path to the compiler sources. There should # be a shell script named 'configure' in this directory. This script # makes a copy... ORIG_SRC_DIR="$3" # The fourth parameter is the location where the compiler will be installed, # normally "/usr". You can move it once it's built, so this mostly controls # the layout of $DEST_DIR. DEST_ROOT="$4" # The fifth parameter is the place where the compiler will be copied once # it's built. DEST_DIR="$5" # The sixth parameter is a directory in which to place information (like # unstripped executables and generated source files) helpful in debugging # the resulting compiler. SYM_DIR="$6" # APPLE LOCAL begin LLVM # The seventh parameter is true/false indicating whether LLVM should be enabled # or not. ENABLE_LLVM="$7" # The eighth parameter is the version number of the submission, e.g. 1007. LLVM_SUBMIT_VERSION="$8" # The nineth parameter is the subversion number of the submission, e.g. 03. LLVM_SUBMIT_SUBVERSION="$9" # The tenth parameter is a yes/no that indicates whether assertions should be # enabled in the LLVM libs/tools. LLVM_ASSERTIONS="${10}" # LLVM_INSTALL_PREFIX - This is the prefix where LLVM tools/headers/libraries # and the llvm-gcc/llvm-g++ symlinks get installed. LLVM_INSTALL_PREFIX=/usr/local # LLVM_ARCHS - This tells us which architectures we'd like the libraries to be # build for. The default is 4-way. if [ "x$LLVM_ARCHS" == "x" ]; then LLVM_ARCHS="ppc i386 ppc64 x86_64" fi # APPLE LOCAL end LLVM # The current working directory is where the build will happen. # It may already contain a partial result of an interrupted build, # in which case this script will continue where it left off. DIR=`pwd` # This isn't a parameter; it's the version of the compiler that we're # about to build. It's included in the names of various files and # directories in the installed image. VERS=`sed -n -e '/version_string/s/.*\"\([^ \"]*\)[ \"].*/\1/p' \ < $ORIG_SRC_DIR/gcc/version.c || exit 1` # This isn't a parameter either, it's the major version of the compiler # to be built. It's VERS but only up to the second '.' (if there is one). MAJ_VERS=`echo $VERS | sed 's/\([0-9]*\.[0-9]*\)[.-].*/\1/'` # APPLE LOCAL begin LLVM if [ "$ENABLE_LLVM" == true ]; then # Add suffix. MAJ_VERS="${MAJ_VERS}-llvm" fi # APPLE LOCAL end LLVM # This is the default architecture for i386 configurations. I386_CPU="--with-arch=apple --with-tune=generic" # This is the libstdc++ version to use. LIBSTDCXX_VERSION=4.0.0 # Sniff to see if we can do ppc64 building. # APPLE LOCAL llvm DARWIN_VERS=`echo $UNAME_RELEASE | sed -e s/.[0-9]//g` if [ x"`file /usr/lib/crt1.o | grep 'architecture ppc64'`" == x ]; then DARWIN_VERS=7 fi echo DARWIN_VERS = $DARWIN_VERS # If the user has CC set in their environment unset it now unset CC ######################################## # Run the build. # Create the source tree we'll actually use to build, deleting # tcl since it doesn't actually build properly in a cross environment # and we don't really need it. SRC_DIR=$DIR/src rm -rf $SRC_DIR || exit 1 mkdir $SRC_DIR || exit 1 ln -s $ORIG_SRC_DIR/* $SRC_DIR/ || exit 1 rm -rf $SRC_DIR/tcl $SRC_DIR/expect $SRC_DIR/dejagnu || exit 1 # APPLE LOCAL begin LLVM Must build libstdc++ to install in /usr/local. LIBSTDCXX_CONFIG_OPTION= # Also remove libstdc++ since it is built from a separate project. rm -rf $SRC_DIR/libstdc++-v3 || exit 1 LIBSTDCXX_CONFIG_OPTION="--with-gxx-include-dir=/usr/include/c++/$LIBSTDCXX_VERSION" if [ "$ENABLE_LLVM" == false ]; then # Clean out old specs files rm -f /usr/lib/gcc/*/4.0.0/specs fi # APPLE LOCAL end LLVM # These are the configure and build flags that are used. # APPLE LOCAL begin LLVM Support for non /usr $DEST_ROOT, use libstdc++ CONFIGFLAGS="--disable-checking --enable-werror \ --prefix=$DEST_ROOT \ --mandir=$LLVM_INSTALL_PREFIX/share/man \ --enable-languages=c,objc,c++,obj-c++ \ --program-transform-name=/^[cg][^.-]*$/s/$/-$MAJ_VERS/ \ $LIBSTDCXX_CONFIG_OPTION \ --with-slibdir=/usr/lib \ --build=$BUILD-apple-darwin$DARWIN_VERS" # APPLE LOCAL end LLVM # APPLE LOCAL begin LLVM if [ "$ENABLE_LLVM" == true ]; then CONFIGFLAGS="$CONFIGFLAGS --enable-llvm=$DIR/obj-llvm" # Build the LLVM tree universal. LLVMCONFIGFLAGS="--prefix=$DEST_DIR$LLVM_INSTALL_PREFIX \ --enable-targets=$LLVM_TARGETS \ --enable-assertions=$LLVM_ASSERTIONS" mkdir -p $DIR/obj-llvm || exit 1 cd $DIR/obj-llvm || exit 1 if [ \! -f Makefile.config ]; then $SRC_DIR/llvm/configure $LLVMCONFIGFLAGS || exit 1 fi if [ "x$LLVM_SUBMIT_SUBVERSION" = "x00" -o "x$LLVM_SUBMIT_SUBVERSION" = "x0" ]; then LLVM_VERSION="$LLVM_SUBMIT_VERSION" else LLVM_VERSION="$LLVM_SUBMIT_VERSION-$LLVM_SUBMIT_SUBVERSION" fi # Note: Don't pass -jN here. Building universal already has parallelism and # we don't want to make the builders hit swap by firing off too many gcc's at # the same time. ## FIXME: Remove -O2 when rdar://4560645 is fixed. make ENABLE_OPTIMIZED=1 UNIVERSAL=1 UNIVERSAL_ARCH="$LLVM_ARCHS" \ OPTIMIZE_OPTION='-O2' \ CXXFLAGS="-DLLVM_VERSION_INFO='\" Apple Build #$LLVM_VERSION\"'" if ! test $? == 0 ; then echo "error: LLVM 'make' failed!" exit 1 fi fi # APPLE LOCAL LLVM end # Figure out how many make processes to run. SYSCTL=`sysctl -n hw.activecpu` # hw.activecpu only available in 10.2.6 and later if [ -z "$SYSCTL" ]; then SYSCTL=`sysctl -n hw.ncpu` fi # sysctl -n hw.* does not work when invoked via B&I chroot /BuildRoot. # Builders can default to 2, since even if they are single processor, # nothing else is running on the machine. if [ -z "$SYSCTL" ]; then SYSCTL=2 fi # The $LOCAL_MAKEFLAGS variable can be used to override $MAKEFLAGS. MAKEFLAGS=${LOCAL_MAKEFLAGS-"-j $SYSCTL"} # APPLE LOCAL begin LLVM if [ "$ENABLE_LLVM" == true ]; then # Build llvm-gcc in 'dylib mode'. MAKEFLAGS="$MAKEFLAGS BUILD_LLVM_INTO_A_DYLIB=1" MAKEFLAGS="$MAKEFLAGS LLVM_VERSION_INFO=$LLVM_SUBMIT_VERSION" if [ "$LLVM_ASSERTIONS" == no ]; then MAKEFLAGS="$MAKEFLAGS DISABLE_LLVMASSERTIONS=1" fi fi # APPLE LOCAL LLVM end # Build the native GCC. Do this even if the user didn't ask for it # because it'll be needed for the bootstrap. mkdir -p $DIR/obj-$BUILD-$BUILD $DIR/dst-$BUILD-$BUILD || exit 1 cd $DIR/obj-$BUILD-$BUILD || exit 1 if [ \! -f Makefile ]; then $SRC_DIR/configure $CONFIGFLAGS \ `if [ $BUILD = i686 ] ; then echo $I386_CPU ; fi` \ --host=$BUILD-apple-darwin$DARWIN_VERS --target=$BUILD-apple-darwin$DARWIN_VERS || exit 1 fi # Unset RC_DEBUG_OPTIONS because it causes the bootstrap to fail. RC_DEBUG_OPTIONS= \ make $MAKEFLAGS $BOOTSTRAP CFLAGS="$CFLAGS" CXXFLAGS="$CFLAGS" || exit 1 make $MAKEFLAGS html CFLAGS="$CFLAGS" CXXFLAGS="$CFLAGS" || exit 1 make $MAKEFLAGS DESTDIR=$DIR/dst-$BUILD-$BUILD install-gcc install-target \ CFLAGS="$CFLAGS" CXXFLAGS="$CFLAGS" || exit 1 # Add the compiler we just built to the path, giving it appropriate names. # APPLE LOCAL LLVM Support for non /usr $DEST_ROOT D=$DIR/dst-$BUILD-$BUILD$DEST_ROOT/bin ln -f $D/gcc-$MAJ_VERS $D/gcc || exit 1 ln -f $D/gcc $D/$BUILD-apple-darwin$DARWIN_VERS-gcc || exit 1 # APPLE LOCAL LLVM Support for non /usr $DEST_ROOT PATH=$DIR/dst-$BUILD-$BUILD$DEST_ROOT/bin:$PATH # The cross-tools' build process expects to find certain programs # under names like 'i386-apple-darwin$DARWIN_VERS-ar'; so make them. # Annoyingly, ranlib changes behaviour depending on what you call it, # so we have to use a shell script for indirection, grrr. rm -rf $DIR/bin || exit 1 mkdir $DIR/bin || exit 1 for prog in ar nm ranlib strip lipo ; do for t in `echo $TARGETS $HOSTS | sort -u`; do P=$DIR/bin/${t}-apple-darwin$DARWIN_VERS-${prog} echo '#!/bin/sh' > $P || exit 1 echo 'exec /usr/bin/'${prog}' $*' >> $P || exit 1 chmod a+x $P || exit 1 done done for t in `echo $1 $2 | sort -u`; do gt=`echo $t | $TRANSLATE_ARCH` P=$DIR/bin/${gt}-apple-darwin$DARWIN_VERS-as echo '#!/bin/sh' > $P || exit 1 echo 'exec /usr/bin/as -arch '${t}' $*' >> $P || exit 1 chmod a+x $P || exit 1 done PATH=$DIR/bin:$PATH # Build the cross-compilers, using the compiler we just built. for t in `echo $TARGETS $HOSTS | sort -u`; do if [ $t != $BUILD ] ; then mkdir -p $DIR/obj-$BUILD-$t $DIR/dst-$BUILD-$t || exit 1 cd $DIR/obj-$BUILD-$t || exit 1 if [ \! -f Makefile ]; then $SRC_DIR/configure $CONFIGFLAGS --enable-werror-always \ `if [ $t = i686 ] ; then echo $I386_CPU ; fi` \ --program-prefix=$t-apple-darwin$DARWIN_VERS- \ --host=$BUILD-apple-darwin$DARWIN_VERS --target=$t-apple-darwin$DARWIN_VERS || exit 1 fi make $MAKEFLAGS all CFLAGS="$CFLAGS" CXXFLAGS="$CFLAGS" || exit 1 make $MAKEFLAGS DESTDIR=$DIR/dst-$BUILD-$t install-gcc install-target \ CFLAGS="$CFLAGS" CXXFLAGS="$CFLAGS" || exit 1 # Add the compiler we just built to the path. # APPLE LOCAL LLVM Support for non /usr $DEST_ROOT PATH=$DIR/dst-$BUILD-$t/$DEST_ROOT/bin:$PATH fi done # Rearrange various libraries, for no really good reason. for t in $TARGETS ; do DT=$DIR/dst-$BUILD-$t # APPLE LOCAL begin LLVM Support for non /usr $DEST_ROOT D=`echo $DT/$DEST_ROOT/lib/gcc/$t-apple-darwin$DARWIN_VERS/$VERS` mv $D/static/libgcc.a $D/libgcc_static.a || exit 1 mv $D/kext/libgcc.a $D/libcc_kext.a || exit 1 rm -r $D/static $D/kext || exit 1 done # Build the cross-hosted compilers. for h in $HOSTS ; do if [ $h != $BUILD ] ; then for t in $TARGETS ; do mkdir -p $DIR/obj-$h-$t $DIR/dst-$h-$t || exit 1 cd $DIR/obj-$h-$t || exit 1 if [ $h = $t ] ; then pp= else pp=$t-apple-darwin$DARWIN_VERS- fi if [ \! -f Makefile ]; then $SRC_DIR/configure $CONFIGFLAGS \ `if [ $t = i686 ] ; then echo $I386_CPU ; fi` \ --program-prefix=$pp \ --host=$h-apple-darwin$DARWIN_VERS --target=$t-apple-darwin$DARWIN_VERS || exit 1 fi make $MAKEFLAGS all-gcc CFLAGS="$CFLAGS" CXXFLAGS="$CFLAGS" || exit 1 make $MAKEFLAGS DESTDIR=$DIR/dst-$h-$t install-gcc \ CFLAGS="$CFLAGS" CXXFLAGS="$CFLAGS" || exit 1 done fi done ######################################## # Construct the actual destination root, by copying stuff from # $DIR/dst-* to $DEST_DIR, with occasional 'lipo' commands. cd $DEST_DIR || exit 1 # Clean out DEST_DIR in case -noclean was passed to buildit. rm -rf * || exit 1 # APPLE LOCAL LLVM Don't install HTML docs. if [ "$ENABLE_LLVM" == false ]; then # HTML documentation HTMLDIR="/Developer/Documentation/DocSets/com.apple.ADC_Reference_Library.DeveloperTools.docset/Contents/Resources/Documents/documentation/DeveloperTools" mkdir -p ".$HTMLDIR" || exit 1 cp -Rp $DIR/obj-$BUILD-$BUILD/gcc/HTML/* ".$HTMLDIR/" || exit 1 # APPLE LOCAL LLVM Don't install docs. fi # Manual pages mkdir -p .$LLVM_INSTALL_PREFIX/share || exit 1 # APPLE LOCAL LLVM build_gcc bug with non-/usr $DEST_ROOT cp -Rp $DIR/dst-$BUILD-$BUILD$LLVM_INSTALL_PREFIX/share/man .$LLVM_INSTALL_PREFIX/share/ \ || exit 1 # libexec # APPLE LOCAL LLVM build_gcc bug with non-/usr $DEST_ROOT cd $DIR/dst-$BUILD-$BUILD/$DEST_ROOT/libexec/gcc/$BUILD-apple-darwin$DARWIN_VERS/$VERS \ || exit 1 LIBEXEC_FILES=`find . -type f -print || exit 1` LIBEXEC_DIRS=`find . -type d -print || exit 1` cd $DEST_DIR || exit 1 for t in $TARGETS ; do DL=$DEST_ROOT/libexec/gcc/$t-apple-darwin$DARWIN_VERS/$VERS # APPLE LOCAL LLVM build_gcc bug with non-/usr $DEST_ROOT SL=/$DEST_ROOT/libexec/gcc/$t-apple-darwin$DARWIN_VERS/$VERS for d in $LIBEXEC_DIRS ; do mkdir -p .$DL/$d || exit 1 done for f in $LIBEXEC_FILES ; do # APPLE LOCAL LLVM build_gcc bug with non-/usr $DEST_ROOT, allow dynamically linked shared libs. if file $DIR/dst-*-$t$SL/$f | grep -q -E 'Mach-O (executable|dynamically linked shared library)' ; then # APPLE LOCAL LLVM build_gcc bug with non-/usr $DEST_ROOT lipo -output .$DL/$f -create $DIR/dst-*-$t$SL/$f || exit 1 else # APPLE LOCAL LLVM build_gcc bug with non-/usr $DEST_ROOT cp -p $DIR/dst-$BUILD-$t$SL/$f .$DL/$f || exit 1 fi done ln -s ../../../../bin/as .$DL/as ln -s ../../../../bin/ld .$DL/ld done # bin # The native drivers ('native' is different in different architectures). BIN_FILES=`ls $DIR/dst-$BUILD-$BUILD$DEST_ROOT/bin | grep '^[^-]*-[0-9.]*$' \ | grep -v gccbug | grep -v gcov || exit 1` mkdir .$DEST_ROOT/bin for f in $BIN_FILES ; do # APPLE LOCAL LLVM build_gcc bug with non-/usr $DEST_ROOT lipo -output .$DEST_ROOT/bin/$f -create $DIR/dst-*/$DEST_ROOT/bin/$f || exit 1 done # gcov, which is special only because it gets built multiple times and lipo # will complain if we try to add two architectures into the same output. TARG0=`echo $TARGETS | cut -d ' ' -f 1` # APPLE LOCAL LLVM build_gcc bug with non-/usr $DEST_ROOT lipo -output .$DEST_ROOT/bin/gcov-$MAJ_VERS -create \ $DIR/dst-*-$TARG0/$DEST_ROOT/bin/*gcov* || exit 1 # The fully-named drivers, which have the same target on every host. for t in $TARGETS ; do # APPLE LOCAL LLVM build_gcc bug with non-/usr $DEST_ROOT lipo -output .$DEST_ROOT/bin/$t-apple-darwin$DARWIN_VERS-gcc-$VERS -create \ $DIR/dst-*-$t/$DEST_ROOT/bin/$t-apple-darwin$DARWIN_VERS-gcc-$VERS || exit 1 # APPLE LOCAL LLVM build_gcc bug with non-/usr $DEST_ROOT lipo -output .$DEST_ROOT/bin/$t-apple-darwin$DARWIN_VERS-g++-$VERS -create \ $DIR/dst-*-$t/$DEST_ROOT/bin/$t-apple-darwin$DARWIN_VERS-g++* || exit 1 done # lib mkdir -p .$DEST_ROOT/lib/gcc || exit 1 for t in $TARGETS ; do # APPLE LOCAL LLVM build_gcc bug with non-/usr $DEST_ROOT cp -Rp $DIR/dst-$BUILD-$t/$DEST_ROOT/lib/gcc/$t-apple-darwin$DARWIN_VERS \ .$DEST_ROOT/lib/gcc || exit 1 done for t in $TARGETS ; do cp -p /usr/lib/libstdc++.6.dylib \ .$DEST_ROOT/lib/gcc/$t-apple-darwin$DARWIN_VERS/$VERS/libstdc++.dylib \ || exit 1 # APPLE LOCAL LLVM # strip -x -c .$DEST_ROOT/lib/gcc/$t-apple-darwin$DARWIN_VERS/$VERS/libstdc++.dylib || exit 1 done # include HEADERPATH=$DEST_ROOT/include/gcc/darwin/$MAJ_VERS mkdir -p .$HEADERPATH || exit 1 # Some headers are installed from more-hdrs/. They all share # one common feature: they shouldn't be installed here. Sometimes, # they should be part of FSF GCC and installed from there; sometimes, # they should be installed by some completely different package; sometimes, # they only exist for codewarrior compatibility and codewarrior should provide # its own. We take care not to install the headers if Libc is already # providing them. cd $SRC_DIR/more-hdrs for h in `echo *.h` ; do if [ ! -f /usr/include/$h -o -L /usr/include/$h ] ; then cp -R $h $DEST_DIR$HEADERPATH/$h || exit 1 for t in $TARGETS ; do THEADERPATH=$DEST_DIR$DEST_ROOT/lib/gcc/${t}-apple-darwin$DARWIN_VERS/$VERS/include [ -f $THEADERPATH/$h ] || \ ln -s ../../../../../include/gcc/darwin/$MAJ_VERS/$h $THEADERPATH/$h || \ exit 1 done fi done # Add extra man page symlinks for 'c++' and for arch-specific names. MDIR=$DEST_DIR$LLVM_INSTALL_PREFIX/share/man/man1 ln -f $MDIR/g++-$MAJ_VERS.1 $MDIR/c++-$MAJ_VERS.1 || exit 1 for t in $TARGETS ; do ln -f $MDIR/gcc-$MAJ_VERS.1 $MDIR/$t-apple-darwin$DARWIN_VERS-gcc-$VERS.1 \ || exit 1 ln -f $MDIR/g++-$MAJ_VERS.1 $MDIR/$t-apple-darwin$DARWIN_VERS-g++-$VERS.1 \ || exit 1 done # Build driver-driver using fully-named drivers for h in $HOSTS ; do $h-apple-darwin$DARWIN_VERS-gcc-$VERS \ $ORIG_SRC_DIR/driverdriver.c \ -DPDN="\"-apple-darwin$DARWIN_VERS-gcc-$VERS\"" \ -DIL="\"$DEST_ROOT/bin/\"" -I $ORIG_SRC_DIR/include \ -I $ORIG_SRC_DIR/gcc -I $ORIG_SRC_DIR/gcc/config \ -liberty -L$DIR/dst-$BUILD-$h$DEST_ROOT/lib/ \ -L$DIR/dst-$BUILD-$h$DEST_ROOT/$h-apple-darwin$DARWIN_VERS/lib/ \ -L$DIR/obj-$h-$BUILD/libiberty/ \ -o $DEST_DIR/$DEST_ROOT/bin/tmp-$h-gcc-$MAJ_VERS || exit 1 $h-apple-darwin$DARWIN_VERS-gcc-$VERS \ $ORIG_SRC_DIR/driverdriver.c \ -DPDN="\"-apple-darwin$DARWIN_VERS-g++-$VERS\"" \ -DIL="\"$DEST_ROOT/bin/\"" -I $ORIG_SRC_DIR/include \ -I $ORIG_SRC_DIR/gcc -I $ORIG_SRC_DIR/gcc/config \ -liberty -L$DIR/dst-$BUILD-$h$DEST_ROOT/lib/ \ -L$DIR/dst-$BUILD-$h$DEST_ROOT/$h-apple-darwin$DARWIN_VERS/lib/ \ -L$DIR/obj-$h-$BUILD/libiberty/ \ -o $DEST_DIR/$DEST_ROOT/bin/tmp-$h-g++-$MAJ_VERS || exit 1 done lipo -output $DEST_DIR/$DEST_ROOT/bin/gcc-$MAJ_VERS -create \ $DEST_DIR/$DEST_ROOT/bin/tmp-*-gcc-$MAJ_VERS || exit 1 lipo -output $DEST_DIR/$DEST_ROOT/bin/g++-$MAJ_VERS -create \ $DEST_DIR/$DEST_ROOT/bin/tmp-*-g++-$MAJ_VERS || exit 1 ln -f $DEST_DIR/$DEST_ROOT/bin/g++-$MAJ_VERS $DEST_DIR/$DEST_ROOT/bin/c++-$MAJ_VERS || exit 1 rm $DEST_DIR/$DEST_ROOT/bin/tmp-*-gcc-$MAJ_VERS || exit 1 rm $DEST_DIR/$DEST_ROOT/bin/tmp-*-g++-$MAJ_VERS || exit 1 ######################################## # Create SYM_DIR with information required for debugging. cd $SYM_DIR || exit 1 # Clean out SYM_DIR in case -noclean was passed to buildit. rm -rf * || exit 1 # Generate .dSYM files find $DEST_DIR -perm -0111 \! -name fixinc.sh \ \! -name mkheaders -type f -print | xargs -n 1 -P ${SYSCTL} dsymutil # Save .dSYM files and .a archives cd $DEST_DIR || exit 1 find . \( -path \*.dSYM/\* -or -name \*.a \) -print \ | cpio -pdml $SYM_DIR || exit 1 # Save source files. mkdir $SYM_DIR/src || exit 1 cd $DIR || exit 1 find obj-* -name \*.\[chy\] -print | cpio -pdml $SYM_DIR/src || exit 1 ######################################## # Remove debugging information from DEST_DIR. find $DEST_DIR -perm -0111 \! -name \*.dylib \! -name fixinc.sh \ \! -name mkheaders \! -name libstdc++.dylib -type f -print \ | xargs strip || exit 1 # APPLE LOCAL begin LLVM - Strip with -Sx instead of -SX find $DEST_DIR \( -name \*.a -or -name \*.dylib \) \ \! -name libgcc_s.10.*.dylib -type f -print \ | xargs strip -SX || exit 1 # APPLE LOCAL end LLVM - Strip with -Sx instead of -SX find $DEST_DIR -name \*.a -type f -print \ | xargs ranlib || exit 1 # APPLE LOCAL begin LLVM # Install LLVM libraries/headers/tools. if [ "$ENABLE_LLVM" == true ]; then cd $DIR/obj-llvm || exit 1 ## Install the tree into the destination directory. make $MAKEFLAGS ENABLE_OPTIMIZED=1 UNIVERSAL=1 OPTIMIZE_OPTION='-O2' install if ! test $? == 0 ; then echo "error: LLVM 'make install' failed!" exit 1 fi ## Install Version.h if [ "x$LLVM_SUBMIT_SUBVERSION" = "x00" -o "x$LLVM_SUBMIT_SUBVERSION" = "x0" ]; then RC_ProjectSourceSubversion=0 else case "$LLVM_SUBMIT_SUBVERSION" in 01) RC_ProjectSourceSubversion=1 ;; 02) RC_ProjectSourceSubversion=2 ;; 03) RC_ProjectSourceSubversion=3 ;; 04) RC_ProjectSourceSubversion=4 ;; 05) RC_ProjectSourceSubversion=5 ;; 06) RC_ProjectSourceSubversion=6 ;; 07) RC_ProjectSourceSubversion=7 ;; 08) RC_ProjectSourceSubversion=8 ;; 09) RC_ProjectSourceSubversion=9 ;; *) RC_ProjectSourceSubversion=$LLVM_SUBMIT_SUBVERSION ;; esac fi echo "#define LLVM_VERSION ${RC_ProjectSourceVersion}" > $DEST_DIR$LLVM_INSTALL_PREFIX/include/llvm/Version.h echo "#define LLVM_MINOR_VERSION ${RC_ProjectSourceSubversion}" >> $DEST_DIR$LLVM_INSTALL_PREFIX/include/llvm/Version.h ## Strip local symbols from llvm libraries. strip -S $DEST_DIR$LLVM_INSTALL_PREFIX/lib/*.[oa] strip -Sx $DEST_DIR$LLVM_INSTALL_PREFIX/lib/*.so # Remove .dir files cd $DEST_DIR$LLVM_INSTALL_PREFIX/ rm bin/.dir etc/llvm/.dir lib/.dir # Remove PPC64 fat slices. cd $DEST_DIR$LLVM_INSTALL_PREFIX/bin if [ $MACOSX_DEPLOYMENT_TARGET = "10.4" ]; then find . -perm 755 -type f -exec lipo -extract ppc -extract i386 {} -output {} \; else find . -perm 755 -type f -exec lipo -extract ppc7400 -extract i386 {} -output {} \; fi cd $DEST_DIR$LLVM_INSTALL_PREFIX lipo -extract ppc -extract i386 lib/LLVMlto.0.0.0.so -output lib/LLVMlto.0.0.0.so # Set up the llvm-gcc/llvm-g++ symlinks. cd $DEST_DIR$LLVM_INSTALL_PREFIX/bin ln -s -f ../../../$DEST_ROOT/bin/gcc-$MAJ_VERS llvm-gcc || exit 1 ln -s -f ../../../$DEST_ROOT/bin/g++-$MAJ_VERS llvm-g++ || exit 1 # Copy one of the libllvmgcc.dylib's up to libexec/gcc. cp $DEST_DIR/$DEST_ROOT/libexec/gcc/$BUILD-apple-darwin$DARWIN_VERS/$VERS/libllvmgcc.dylib \ $DEST_DIR/$DEST_ROOT/libexec/gcc/ # Replace the installed ones with symlinks to the common one. for t in $TARGETS ; do cd $DEST_DIR/$DEST_ROOT/libexec/gcc/$t-apple-darwin$DARWIN_VERS/$VERS/ rm libllvmgcc.dylib ln -s ../../libllvmgcc.dylib done fi # APPLE LOCAL end LLVM find $DEST_DIR -name \*.dSYM -print | xargs rm -r || exit 1 chgrp -h -R wheel $DEST_DIR chgrp -R wheel $DEST_DIR # Done! exit 0