#!/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/armv6/arm/"
OMIT_X86_64="sed -e s/x86_64//"

# 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_ARCH | $OMIT_X86_64 | sed -e s,\\',,g`

# The GNU makefile target ('bootstrap' by default).
BOOTSTRAP=${BOOTSTRAP-bootstrap}
if [ "$BOOTSTRAP" != bootstrap ]; then
    bootstrap=--disable-bootstrap
fi

# Language front-ends to build. This also affects
# whether the C++ driver and driver-driver are installed
LANGUAGES=${LANGUAGES-c,objc,c++,obj-c++}

# The B&I build script (~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.

# LLVM LOCAL begin
if [ "x$LLVM_DEBUG" == "x" ]; then
    CFLAGS="-g -O2 ${RC_NONARCH_CFLAGS/-pipe/}"
else
    CFLAGS="-g"
fi
# LLVM LOCAL end

# 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"

# LLVM LOCAL begin
# The seventh parameter is a yes/no that indicates whether libLTO.dylib
# should be installed from LLVMCORE_PATH.
INSTALL_LIBLTO="$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}"

ENABLE_LLVM=true

# LLVM LOCAL end

# 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=`cat $ORIG_SRC_DIR/gcc/BASE-VER`
if [ -z "$VERS" ]; then
    exit 1
fi

# 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 libstdc++ version to use.
LIBSTDCXX_VERSION=4.2.1
# LLVM LOCAL begin
# DO NOT USE $DEST_ROOT to check LIBSTDCXX_VERSION here. Directly use /usr here.
# $DEST_ROOT is /Developer for llvm-gcc
if [ ! -d "/usr/include/c++/$LIBSTDCXX_VERSION" ]; then
  LIBSTDCXX_VERSION=4.0.0
fi
NON_ARM_CONFIGFLAGS="--with-gxx-include-dir=/usr/include/c++/$LIBSTDCXX_VERSION"
# LLVM LOCAL end

DARWIN_VERS=`uname -r | sed 's/\..*//'`
echo DARWIN_VERS = $DARWIN_VERS

# APPLE LOCAL begin ARM
ARM_LIBSTDCXX_VERSION=4.2.1
ARM_CONFIGFLAGS="--with-gxx-include-dir=/usr/include/c++/$ARM_LIBSTDCXX_VERSION"

# When building for a non-embedded train, ARM defaults to MacOSX, just like
# x86 and ppc.
if [ "x$RC_TARGET_CONFIG" = "xiPhone" ]; then
  ARM_DARWIN_TARGET_IPHONEOS="YES"
fi

if [ -n "$ARM_SDK" ]; then
  ARM_PLATFORM=`xcodebuild -version -sdk $ARM_SDK PlatformPath`
  ARM_SYSROOT=`xcodebuild -version -sdk $ARM_SDK Path`
else
  # Use bootstrap SDK if it is available.
  # FIXME: This can be removed once all builds set ARM_SDK.
  if [ -d /Developer/SDKs/Extra ]; then
    ARM_SYSROOT=/Developer/SDKs/Extra
  else
    ARM_SYSROOT=/
  fi
  ARM_PLATFORM=/
fi
ARM_CONFIGFLAGS="$ARM_CONFIGFLAGS --with-build-sysroot=\"$ARM_SYSROOT\""

# If it's being built for iPhoneOS, assume the llvmCore bits are under
# iPhoneOS platform directory.
if [ "x$RC_ProjectName" = "xllvmgcc42_Embedded" ]; then
  LLVMCORE_PATH="${ARM_PLATFORM}${LLVMCORE_PATH}"
  DEST_ROOT="${ARM_PLATFORM}${DEST_ROOT}"
fi

# If building an ARM target, check that the required directories exist
# and query the libSystem arm slices to determine which multilibs we should
# build.
if echo $TARGETS | grep arm; then
  if [ ! -d $ARM_SYSROOT ]; then
    echo "Error: cannot find ARM SDK to build ARM target"
    exit 1
  fi
  if [ "x$ARM_MULTILIB_ARCHS" = "x" ] ; then
    ARM_MULTILIB_ARCHS=`/usr/bin/lipo -info $ARM_SYSROOT/usr/lib/libSystem.dylib | cut -d':' -f 3 | sed -e 's/x86_64//' -e 's/i386//' -e 's/ppc7400//' -e 's/ppc64//' -e 's/^ *//' -e 's/ $//'`
  fi;
  if [ "x$ARM_MULTILIB_ARCHS" == "x" ] ; then
    echo "Error: missing ARM slices in $ARM_SYSROOT"
    exit 1
  else
    export ARM_MULTILIB_ARCHS
  fi
fi
# APPLE LOCAL end ARM

# LLVM LOCAL begin
# If the user has CC set in their environment unset it now
unset CC
# LLVM LOCAL end

########################################
# 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.
# LLVM LOCAL: The following line was commented out; uncomment it.
rm -rf $SRC_DIR/libstdc++-v3 || exit 1
# Clean out old specs files
rm -f /usr/lib/gcc/*/4.0.0/specs

# These are the configure and build flags that are used.
# LLVM LOCAL begin
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=\${prefix}/share/man \
  --enable-languages=$LANGUAGES \
  --program-prefix=llvm- \
  --program-transform-name=/^[cg][^.-]*$/s/$/-$MAJ_VERS/ \
  --with-slibdir=/usr/lib \
  --build=$BUILD-apple-darwin$DARWIN_VERS"

if [ "$ENABLE_LLVM" == true ]; then
  CONFIGFLAGS="$CONFIGFLAGS --enable-llvm=$LLVMCORE_PATH"
fi
# LLVM LOCAL 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"}

BUILD_CXX=0
for lang in `echo $LANGUAGES | sed 's/,/ /g'`; do
  if [ $lang = "c++" -o $lang = "obj-c++" ]; then
    BUILD_CXX=1
    break
  fi
done

# Unset this, because GCC uses this variable in its makefiles
unset LANGUAGES

# LLVM LOCAL begin
if [ "$ENABLE_LLVM" == true ]; then
  # Indicate the llvm-gcc is being built "Apple style".
  MAKEFLAGS="$MAKEFLAGS BUILD_LLVM_APPLE_STYLE=1"
  # Build llvm-gcc in 'dylib mode'.
  MAKEFLAGS="$MAKEFLAGS BUILD_LLVM_INTO_A_DYLIB=1"
  MAKEFLAGS="$MAKEFLAGS LLVM_VERSION_INFO=$LLVM_SUBMIT_VERSION"
fi
# LLVM LOCAL end

# If the user has set CC or CXX, respect their wishes.  If not,
# compile with LLVM-GCC/LLVM-G++ if available; if LLVM is not
# available, fall back to usual GCC/G++ default.
savedPATH=$PATH ; PATH="/Developer/usr/bin:$PATH"
XTMPCC=$(which llvm-gcc)
if [ x$CC  = x -a x$XTMPCC != x ] ; then export CC=$XTMPCC  forcedCC=1  ; fi
XTMPCC=$(which llvm-g++)
if [ x$CXX = x -a x$XTMPCC != x ] ; then export CXX=$XTMPCC forcedCXX=1 ; fi
PATH=$savedPATH
unset XTMPCC savedPATH

# 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 $bootstrap $CONFIGFLAGS $NON_ARM_CONFIGFLAGS \
   --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 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

# Now that we've built a native compiler, un-kludge these so that
# subsequent cross-hosted compilers can be found normally.
if [ x$forcedCC  != x ] ; then unset CC  forcedCC  ; fi
if [ x$forcedCXX != x ] ; then unset CXX forcedCXX ; fi

# Add the compiler we just built to the path, giving it appropriate names.
# LLVM LOCAL begin 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
PATH=$DIR/dst-$BUILD-$BUILD$DEST_ROOT/bin:$PATH
# LLVM LOCAL end Support for non /usr $DEST_ROOT

# 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 ld ; do
  for t in `echo $TARGETS $HOSTS | tr ' ' '\n' | sort -u`; do
    P=$DIR/bin/${t}-apple-darwin$DARWIN_VERS-${prog}
    # Use the specified ARM_SDK for arm, but otherwise force the SDK to / for
    # now, since SDKROOT may be set to an SDK that does not include support
    # for all the targets being built (i.e., ppc).
    if [ "$t" = "arm" -a -n "$ARM_SDK" ]; then
      sdkoption="-sdk $ARM_SDK"
    else
      sdkoption="-sdk /"
    fi
    progpath=`xcrun $sdkoption -find $prog`
    echo '#!/bin/sh' > $P || exit 1
    echo 'exec '${progpath}' "$@"' >> $P || exit 1
    chmod a+x $P || exit 1
  done
done
# The "as" script adds a default "-arch" option.  Iterate over the lists of
# untranslated HOSTS and TARGETS in $1 and $2 so those names can be used as
# the arguments for "-arch" in the scripts.
for t in `echo $1 $2 | tr ' ' '\n' | sort -u`; do
  gt=`echo $t | $TRANSLATE_ARCH`
  P=$DIR/bin/${gt}-apple-darwin$DARWIN_VERS-as
  if [ "$gt" = "arm" -a -n "$ARM_SDK" ]; then
    sdkoption="-sdk $ARM_SDK"
  else
    sdkoption="-sdk /"
  fi
  progpath=`xcrun $sdkoption -find as`
  echo '#!/bin/sh' > $P || exit 1
  echo 'for a; do case $a in -arch) exec '${progpath}' "$@";;  esac; done' >> $P || exit 1
  echo 'exec '${progpath}' -arch '${t}' "$@"' >> $P || exit 1
  chmod a+x $P || exit 1
done
PATH=$DIR/bin:$PATH

# Determine which cross-compilers we should build.  If our build architecture is
# one of our hosts, add all of the targets to the list.
if echo $HOSTS | grep $BUILD
then
  CROSS_TARGETS=`echo $TARGETS $HOSTS | tr ' ' '\n' | sort -u`
else
  CROSS_TARGETS="$HOSTS"
fi

# Build the cross-compilers, using the compiler we just built.
for t in $CROSS_TARGETS ; 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
    # APPLE LOCAL begin ARM ARM_CONFIGFLAGS
    T_CONFIGFLAGS="$CONFIGFLAGS --enable-werror-always \
      --program-prefix=$t-apple-darwin$DARWIN_VERS- \
      --host=$BUILD-apple-darwin$DARWIN_VERS \
      --target=$t-apple-darwin$DARWIN_VERS"
    if [ $t = 'arm' ] ; then
      # Explicitly set AS_FOR_TARGET and LD_FOR_TARGET to avoid picking up
      # older versions from the gcc installed in /usr.  Radar 7230843.
      AS_FOR_TARGET=$DIR/bin/${t}-apple-darwin$DARWIN_VERS-as \
      LD_FOR_TARGET=$DIR/bin/${t}-apple-darwin$DARWIN_VERS-ld \
      $SRC_DIR/configure $T_CONFIGFLAGS $ARM_CONFIGFLAGS || exit 1
    else
      $SRC_DIR/configure $T_CONFIGFLAGS $NON_ARM_CONFIGFLAGS || exit 1
    fi
    # APPLE LOCAL end ARM ARM_CONFIGFLAGS
   fi
   if [ $t = 'arm' ] ; then
     if [ $ARM_DARWIN_TARGET_IPHONEOS = 'YES' ] ; then
       DEFAULT_TARGET="-DDEFAULT_TARGET_OS=DARWIN_VERSION_IPHONEOS"
     else
        DEFAULT_TARGET="-DDEFAULT_TARGET_OS=DARWIN_VERSION_MACOSX"
     fi
   else
     DEFAULT_TARGET=""
   fi
   make $MAKEFLAGS all CFLAGS="$CFLAGS $DEFAULT_TARGET" \
     CXXFLAGS="$CFLAGS $DEFAULT_TARGET" || exit 1
   make $MAKEFLAGS DESTDIR=$DIR/dst-$BUILD-$t install-gcc install-target \
     CFLAGS="$CFLAGS $DEFAULT_TARGET" \
     CXXFLAGS="$CFLAGS $DEFAULT_TARGET" || exit 1

   # Add the compiler we just built to the path.
   # LLVM LOCAL 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 $CROSS_TARGETS ; do
  DT=$DIR/dst-$BUILD-$t
  # LLVM LOCAL 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
  # glue together kext64 stuff
  if [ -e $D/kext64/libgcc.a ]; then
    libtool -static $D/{kext64/libgcc.a,libcc_kext.a} -o $D/libcc_kext1.a 2>&1 | grep -v 'has no symbols'
    mv $D/libcc_kext1.a $D/libcc_kext.a
    rm -rf $D/kext64
  fi
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
	# APPLE LOCAL begin ARM ARM_CONFIGFLAGS
        T_CONFIGFLAGS="$CONFIGFLAGS --program-prefix=$pp \
          --host=$h-apple-darwin$DARWIN_VERS \
          --target=$t-apple-darwin$DARWIN_VERS"
	if [ $t = 'arm' ] && [ $h != 'arm' ] ; then
          T_CONFIGFLAGS="$T_CONFIGFLAGS $ARM_CONFIGFLAGS"
        else
          T_CONFIGFLAGS="$T_CONFIGFLAGS $NON_ARM_CONFIGFLAGS"
        fi
        $SRC_DIR/configure $T_CONFIGFLAGS || exit 1
	# APPLE LOCAL end ARM ARM_CONFIGFLAGS
      fi

      # For ARM, we need to make sure it picks up the correct versions
      # of the linker and cctools.
      if [ $t = 'arm' ] ; then
        if [ -n "$ARM_SDK" ]; then
          sdkoption="-sdk $ARM_SDK"
        else
          sdkoption="-sdk /"
        fi
        progpath=`xcrun $sdkoption -find ld`
        comppath=`dirname $progpath`
        ORIG_COMPILER_PATH=$COMPILER_PATH
        export COMPILER_PATH=$comppath:$COMPILER_PATH
      fi

      if [ $h = $t ] ; then
	  make $MAKEFLAGS all CFLAGS="$CFLAGS" CXXFLAGS="$CFLAGS" || exit 1
	  make $MAKEFLAGS DESTDIR=$DIR/dst-$h-$t install-gcc install-target \
	      CFLAGS="$CFLAGS" CXXFLAGS="$CFLAGS" || exit 1
      else
	  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
      fi

      if [ $t = 'arm' ] ; then
        export COMPILER_PATH=$ORIG_COMPILER_PATH
        unset ORIG_COMPILER_PATH
      fi
    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

# LLVM LOCAL begin 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
fi
# LLVM LOCAL end Don't install docs.

# Manual pages
mkdir -p .$DEST_ROOT/share || exit 1
cp -Rp $DIR/dst-$BUILD-$BUILD$DEST_ROOT/share/man .$DEST_ROOT/share/ \
  || exit 1
# exclude fsf-funding.7 gfdl.7 gpl.7 as they are currently built in
# the gcc project
rm -rf .$DEST_ROOT/share/man/man7

# libexec
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
  for d in $LIBEXEC_DIRS ; do
    mkdir -p .$DL/$d || exit 1
  done
  for f in $LIBEXEC_FILES ; do
    # LLVM LOCAL
    if file $DIR/dst-*-$t$DL/$f | grep -q -E 'Mach-O (executable|dynamically linked shared library)' ; then
      lipo -output .$DL/$f -create $DIR/dst-*-$t$DL/$f || exit 1
    else
      cp -p $DIR/dst-$BUILD-$t$DL/$f .$DL/$f || exit 1
    fi
  done
  # LLVM LOCAL begin fix broken link
  ln -s ../../../../../bin/as .$DL/as
  ln -s ../../../../../bin/ld .$DL/ld
  # LLVM LOCAL end fix broken link
done

# bin
# The native drivers ('native' is different in different architectures).
# LLVM LOCAL begin
mkdir .$DEST_ROOT/bin
cpp_files=`ls $DIR/dst-*$DEST_ROOT/bin/{llvm-cpp,cpp-$MAJ_VERS} 2>/dev/null`
lipo -output .$DEST_ROOT/bin/llvm-cpp-$MAJ_VERS -create $cpp_files || exit 1
# LLVM LOCAL end

# 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`
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
# LLVM LOCAL 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-$VERS || exit 1
# LLVM LOCAL 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
  # LLVM LOCAL 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

# APPLE LOCAL begin native compiler support
# libgomp is not built for ARM
LIBGOMP_TARGETS=`echo $TARGETS | sed -E -e 's/(^|[[:space:]])arm($|[[:space:]])/ /'`
LIBGOMP_HOSTS=`echo $HOSTS | $OMIT_X86_64 | sed -E -e 's/(^|[[:space:]])arm($|[[:space:]])/ /'`

# And copy libgomp stuff by hand...
for t in $LIBGOMP_TARGETS ; do
    for h in $LIBGOMP_HOSTS ; do
	if [ $h = $t ] ; then
	    cp -p $DIR/dst-$h-$t$DEST_ROOT/lib/libgomp.a \
		.$DEST_ROOT/lib/gcc/$t-apple-darwin$DARWIN_VERS/$VERS/ || exit 1
	    cp -p $DIR/dst-$h-$t$DEST_ROOT/lib/libgomp.spec \
		.$DEST_ROOT/lib/gcc/$t-apple-darwin$DARWIN_VERS/$VERS/ || exit 1
	    if [ $h = 'powerpc' ] ; then
		cp -p $DIR/dst-$h-$t$DEST_ROOT/lib/ppc64/libgomp.a \
		    .$DEST_ROOT/lib/gcc/$t-apple-darwin$DARWIN_VERS/$VERS/ppc64/
		cp -p $DIR/dst-$h-$t$DEST_ROOT/lib/ppc64/libgomp.spec \
		    .$DEST_ROOT/lib/gcc/$t-apple-darwin$DARWIN_VERS/$VERS/ppc64/
	    elif [ $h = 'i686' ] ; then
		cp -p $DIR/dst-$h-$t$DEST_ROOT/lib/x86_64/libgomp.a \
		    .$DEST_ROOT/lib/gcc/$t-apple-darwin$DARWIN_VERS/$VERS/x86_64/ || exit 1
		cp -p $DIR/dst-$h-$t$DEST_ROOT/lib/x86_64/libgomp.spec \
		    .$DEST_ROOT/lib/gcc/$t-apple-darwin$DARWIN_VERS/$VERS/x86_64/ || exit 1
	    fi
	fi
    done
done
# APPLE LOCAL end native compiler support

# LLVM LOCAL remove libstdc++ copying


# 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
if [ $BUILD_CXX -eq 1 ]; then
  # LLVM LOCAL
  ln -f $MDIR/llvm-g++.1 $MDIR/llvm-c++.1 || exit 1
fi
for t in $TARGETS ; do
  # LLVM LOCAL begin
  ln -f $MDIR/llvm-gcc.1 $MDIR/$t-apple-darwin$DARWIN_VERS-llvm-gcc.1 \
      || exit 1
  if [ $BUILD_CXX -eq 1 ]; then
    ln -f $MDIR/llvm-g++.1 $MDIR/$t-apple-darwin$DARWIN_VERS-llvm-g++.1 \
        || exit 1
  fi
  # LLVM LOCAL end
done

# LLVM LOCAL begin
# Compress manpages
gzip -f $MDIR/*

if [ "x$RC_ProjectName" = "xllvmgcc42_Embedded" ]; then
MAN1_DIR=${DEST_DIR}${ARM_PLATFORM}/Developer/usr/share/man/man1
else
MAN1_DIR=$DEST_DIR/Developer/usr/share/man/man1
fi
mkdir -p ${MAN1_DIR}
cp $ORIG_SRC_DIR/gcc/doc/llvm-gcc.1 ${MAN1_DIR}/llvm-gcc.1
cp $ORIG_SRC_DIR/gcc/doc/llvm-gcc.1 ${MAN1_DIR}/llvm-g++.1
gzip -f ${MAN1_DIR}/llvm-gcc.1
gzip -f ${MAN1_DIR}/llvm-g++.1
# LLVM LOCAL end

# Build driver-driver using fully-named drivers
for h in $HOSTS ; do
    # LLVM LOCAL begin
    $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

    if [ $BUILD_CXX -eq 1 ]; then
        $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
    fi
    # LLVM LOCAL end
done

# LLVM LOCAL begin
lipo -output $DEST_DIR/$DEST_ROOT/bin/llvm-gcc-$MAJ_VERS -create \
  $DEST_DIR/$DEST_ROOT/bin/tmp-*-llvm-gcc-$MAJ_VERS || exit 1
rm $DEST_DIR/$DEST_ROOT/bin/tmp-*-llvm-gcc-$MAJ_VERS || exit 1

if [ $BUILD_CXX -eq 1 ]; then
    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-g++-$MAJ_VERS || exit 1
fi
# LLVM LOCAL end

########################################
# 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.

if [ "x$LLVM_DEBUG" != "x1" ]; then
    # LLVM LOCAL begin - don't strip dSYM objects
    find $DEST_DIR -perm -0111 \! -path '*DWARF*' \! -name \*.dylib \
        \! -name fixinc.sh \! -name mkheaders \! -name libstdc++.dylib \
        -type f -print \
        | xargs strip || exit 1
    # LLVM LOCAL begin - Strip with -Sx instead of -SX
    find $DEST_DIR \! -path '*DWARF*' \( -name \*.a -or -name \*.dylib \) \
        \! -name libgcc_s.10.*.dylib \! -name libstdc++.dylib -type f \
	-print \
       	| xargs strip -SX || exit 1
    # LLVM LOCAL end - Strip with -Sx instead of -SX
    find $DEST_DIR \! -path '*DWARF*' -name \*.a -type f -print \
        | xargs ranlib || exit 1
    # LLVM LOCAL end - don't strip dSYM objects
fi

# LLVM LOCAL begin
# Set up the llvm-gcc/llvm-g++ symlinks.

# LLVM_BIN_DIR - This is the place where llvm-gcc/llvm-g++ symlinks get installed.
LLVM_BIN_DIR=$DEST_ROOT/../bin

mkdir -p $DEST_DIR$LLVM_BIN_DIR
cd $DEST_DIR$LLVM_BIN_DIR
ln -s -f ../llvm-gcc-$MAJ_VERS/bin/llvm-gcc-$MAJ_VERS llvm-gcc-$MAJ_VERS || exit 1
ln -s -f ../llvm-gcc-$MAJ_VERS/bin/llvm-g++-$MAJ_VERS llvm-g++-$MAJ_VERS || exit 1
ln -s -f ../llvm-gcc-$MAJ_VERS/bin/llvm-cpp-$MAJ_VERS llvm-cpp-$MAJ_VERS || exit 1
ln -s -f ../llvm-gcc-$MAJ_VERS/bin/llvm-gcc-$MAJ_VERS llvm-gcc || exit 1
ln -s -f ../llvm-gcc-$MAJ_VERS/bin/llvm-g++-$MAJ_VERS llvm-g++ || exit 1

# FIXME: This is a hack to get things working.
for t in $TARGETS ; do
    ln -s -f ../llvm-gcc-$MAJ_VERS/bin/$t-apple-darwin$DARWIN_VERS-llvm-gcc-$MAJ_VERS $t-apple-darwin$DARWIN_VERS-llvm-gcc-$MAJ_VERS || exit 1
    ln -s -f ../llvm-gcc-$MAJ_VERS/bin/$t-apple-darwin$DARWIN_VERS-llvm-g++-$MAJ_VERS $t-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

if [ "x$RC_ProjectName" == "xllvmgcc42_Embedded" ]; then
    if [ "x$LLVM_BUILT_ROOTS" == "x" ]; then
        mkdir -p $DEST_DIR${ARM_PLATFORM}/usr/bin
        cd $DEST_DIR${ARM_PLATFORM}/usr/bin
        ln -s ${ARM_PLATFORM}/Developer/usr/bin/llvm-gcc-4.2 llvm-gcc-4.2
        ln -s ${ARM_PLATFORM}/Developer/usr/bin/llvm-g++-4.2 llvm-g++-4.2
    fi
else
    if [ "x$LLVM_BUILT_ROOTS" == "x" ]; then
        mkdir -p $DEST_DIR/usr/bin
        cd $DEST_DIR/usr/bin
        ln -s /Developer/usr/bin/llvm-gcc-4.2 llvm-gcc-4.2
        ln -s /Developer/usr/bin/llvm-g++-4.2 llvm-g++-4.2
    fi
fi

# Remove unwind.h from the install directory for > 10.6
if [ $DARWIN_VERS -gt 10 ]; then
    find $DEST_DIR -name "unwind.h" -print | xargs rm || exit 1
fi

# Install libLTO.dylib
if [ "$INSTALL_LIBLTO" == yes ]; then
  LTO=$LLVMCORE_PATH/lib/libLTO.dylib
  if [ ! -r $LTO  ]; then
    LTO=$LLVMCORE_PATH/../lib/libLTO.dylib
    if [ ! -r $LTO ]; then
      echo "Error: llvmCore installation is missing libLTO.dylib"
      exit 1
    fi
  fi
  mkdir -p $DEST_DIR/Developer/usr/lib
  cp $LTO $DEST_DIR/Developer/usr/lib/libLTO.dylib
  strip -S $DEST_DIR/Developer/usr/lib/libLTO.dylib

  # Add a symlink in /usr/lib for B&I.
  mkdir -p $DEST_DIR/usr/lib/
  cd $DEST_DIR/usr/lib && \
    ln -s ../../Developer/usr/lib/libLTO.dylib ./libLTO.dylib
fi

# LLVM LOCAL end

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
