| #!/bin/sh |
| # APPLE LOCAL file B&I |
| # LLVM LOCAL file |
| # LLVM install location changes touches many lines in this file. |
| 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` |
| |
| # 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. |
| |
| if [ "x$LLVM_DEBUG" == "x" ]; then |
| CFLAGS="-g -O2 ${RC_NONARCH_CFLAGS/-pipe/}" |
| else |
| CFLAGS="-g" |
| fi |
| |
| # 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 a yes/no that indicates whether assertions should be |
| # enabled in the LLVM libs/tools. |
| LLVM_ASSERTIONS="$8" |
| |
| # The nineth parameter indicates llvmCore location. |
| LLVMCORE_PATH="$9" |
| |
| # The tenth parameter is the version number of the submission, e.g. 1007. |
| LLVM_SUBMIT_VERSION="${10}" |
| |
| # The eleventh parameter is the subversion number of the submission, e.g. 03. |
| LLVM_SUBMIT_SUBVERSION="${11}" |
| |
| # LLVM_BIN_DIR - This is the place where llvm-gcc/llvm-g++ symlinks get installed. |
| LLVM_BIN_DIR=$DEST_ROOT/../bin |
| |
| # 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/'` |
| |
| # 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 |
| |
| # 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. |
| |
| if [ "x$LLVM_DEBUG" == "x" ]; then |
| CHECKING_FLAGS="--disable-checking --enable-werror" |
| else |
| CHECKING_FLAGS="--enable-checking" |
| fi |
| |
| CONFIGFLAGS="$CHECKING_FLAGS \ |
| --prefix=$DEST_ROOT \ |
| --mandir=$DEST_ROOT/share/man \ |
| --enable-languages=c,objc,c++,obj-c++ \ |
| --program-prefix=llvm- \ |
| --program-transform-name=/^[cg][^.-]*$/s/$/-$MAJ_VERS/ \ |
| $LIBSTDCXX_CONFIG_OPTION \ |
| --with-slibdir=/usr/lib \ |
| --enable-llvm=$LLVMCORE_PATH \ |
| --build=$BUILD-apple-darwin$DARWIN_VERS" |
| |
| # 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. |
| # Also keep unset for cross compilers so that the cross built libraries are |
| # comparable to the native built libraries. |
| unset 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/llvm-gcc $D/gcc || exit 1 |
| ln -f $D/gcc $D/$BUILD-apple-darwin$DARWIN_VERS-gcc || exit 1 |
| # FIXME Why do we need this. Stop this madness somehow. |
| ln -f $D/llvm-g++ $D/g++ || exit 1 |
| ln -f $D/g++ $D/$BUILD-apple-darwin$DARWIN_VERS-g++ || 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 |
| if [ "x$LLVM_DEBUG" == "x" ]; then |
| WERROR_FLAGS="--enable-werror-always" |
| else |
| WERROR_FLAGS="" |
| fi |
| $SRC_DIR/configure $CONFIGFLAGS $WERROR_FLAGS \ |
| `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 .$DEST_ROOT/share || exit 1 |
| # APPLE LOCAL LLVM build_gcc bug with non-/usr $DEST_ROOT |
| cp -Rp $DIR/dst-$BUILD-$BUILD$DEST_ROOT/share/man .$DEST_ROOT/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-llvm-gcc-$MAJ_VERS -create \ |
| $DIR/dst-*-$t/$DEST_ROOT/bin/$t-apple-darwin$DARWIN_VERS-gcc || exit 1 |
| # APPLE LOCAL LLVM build_gcc bug with non-/usr $DEST_ROOT |
| lipo -output .$DEST_ROOT/bin/$t-apple-darwin$DARWIN_VERS-llvm-g++-$MAJ_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$DEST_ROOT/share/man/man1 |
| ln -f $MDIR/llvm-g++.1 $MDIR/llvm-c++.1 || exit 1 |
| for t in $TARGETS ; do |
| ln -f $MDIR/llvm-gcc.1 $MDIR/$t-apple-darwin$DARWIN_VERS-llvm-gcc.1 \ |
| || exit 1 |
| ln -f $MDIR/llvm-g++.1 $MDIR/$t-apple-darwin$DARWIN_VERS-llvm-g++.1 \ |
| || exit 1 |
| done |
| |
| # Build driver-driver using fully-named drivers |
| for h in $HOSTS ; do |
| $h-apple-darwin$DARWIN_VERS-gcc \ |
| $ORIG_SRC_DIR/driverdriver.c \ |
| -DPDN="\"-apple-darwin$DARWIN_VERS-llvm-gcc-$MAJ_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-llvm-gcc-$MAJ_VERS || exit 1 |
| |
| $h-apple-darwin$DARWIN_VERS-gcc \ |
| $ORIG_SRC_DIR/driverdriver.c \ |
| -DPDN="\"-apple-darwin$DARWIN_VERS-llvm-g++-$MAJ_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-llvm-g++-$MAJ_VERS || exit 1 |
| done |
| |
| lipo -output $DEST_DIR/$DEST_ROOT/bin/llvm-gcc-$MAJ_VERS -create \ |
| $DEST_DIR/$DEST_ROOT/bin/tmp-*-llvm-gcc-$MAJ_VERS || exit 1 |
| |
| lipo -output $DEST_DIR/$DEST_ROOT/bin/llvm-g++-$MAJ_VERS -create \ |
| $DEST_DIR/$DEST_ROOT/bin/tmp-*-llvm-g++-$MAJ_VERS || exit 1 |
| |
| ln -f $DEST_DIR/$DEST_ROOT/bin/llvm-g++-$MAJ_VERS $DEST_DIR/$DEST_ROOT/bin/llvm-c++-$MAJ_VERS || exit 1 |
| |
| rm $DEST_DIR/$DEST_ROOT/bin/tmp-*-llvm-gcc-$MAJ_VERS || exit 1 |
| rm $DEST_DIR/$DEST_ROOT/bin/tmp-*-llvm-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 |
| # Set up the llvm-gcc/llvm-g++ symlinks. |
| mkdir -p $DEST_DIR$LLVM_BIN_DIR |
| cd $DEST_DIR$LLVM_BIN_DIR |
| ln -s -f ../../../$DEST_ROOT/bin/llvm-gcc-$MAJ_VERS llvm-gcc-$MAJ_VERS || exit 1 |
| ln -s -f ../../../$DEST_ROOT/bin/llvm-g++-$MAJ_VERS llvm-g++-$MAJ_VERS || exit 1 |
| |
| # FIXME: This is a hack to get things working. |
| for h in $HOSTS ; do |
| ln -s -f ../../../$DEST_ROOT/bin/$h-apple-darwin$DARWIN_VERS-llvm-gcc-$MAJ_VERS $h-apple-darwin$DARWIN_VERS-llvm-gcc-$MAJ_VERS || exit 1 |
| ln -s -f ../../../$DEST_ROOT/bin/$h-apple-darwin$DARWIN_VERS-llvm-g++-$MAJ_VERS $h-apple-darwin$DARWIN_VERS-llvm-g++-$MAJ_VERS || exit 1 |
| done |
| |
| # 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 |
| # 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 |