#!/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.
ORIG_HOSTS=$1
HOSTS=`echo $ORIG_HOSTS | $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.
for t in $2; do
  if echo $t | grep arm; then
    # Do not include a generic "arm" target in the list of ARM variants.
    if [ "$t" != arm ]; then
      ARM_ARCHS="$ARM_ARCHS $t"
    fi
  else
    ORIG_TARGETS="$ORIG_TARGETS $t"
  fi
done
# If the list of targets included specific ARM variants, e.g., as specified
# by RC_SUPPORTED_ARCHS, then use those as list of ARM multilibs to build.
if [ -n "$ARM_ARCHS" ]; then
  ARM_MULTILIB_ARCHS=$ARM_ARCHS
fi
# Combine all the different ARM variants to a single "arm" target.
if echo $2 | grep arm; then
  ORIG_TARGETS="$ORIG_TARGETS arm"
fi
TARGETS=`echo $ORIG_TARGETS | $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

# Build against the MacOSX10.5 SDK for PowerPC.
PPC_SYSROOT=/Developer/SDKs/MacOSX10.5.sdk
PPC_CONFIGFLAGS="$NON_ARM_CONFIGFLAGS --with-build-sysroot=\"$PPC_SYSROOT\""

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_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
fi
ARM_CONFIGFLAGS="$ARM_CONFIGFLAGS --with-build-sysroot=\"$ARM_SYSROOT\""

# 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_ASSERTIONS" == "x" ]; then
    CHECKING_FLAGS="--disable-checking"
else
    CHECKING_FLAGS="--enable-checking"
fi

CONFIGFLAGS="$CHECKING_FLAGS \
  --enable-werror \
  --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"
  if [ x$LLVM_SUBMIT_SUBVERSION == x ]; then
      MAKEFLAGS="$MAKEFLAGS LLVM_VERSION_INFO=$LLVM_SUBMIT_VERSION"
  else
      MAKEFLAGS="$MAKEFLAGS LLVM_VERSION_INFO=$LLVM_SUBMIT_VERSION.$LLVM_SUBMIT_SUBVERSION"
  fi

fi
# LLVM LOCAL end

# If the user has set CC or CXX, respect their wishes.  If not,
# compile with clang/clang++ if available; if LLVM is not
# available, fall back to usual GCC/G++ default.
XTMPCC=`xcrun -find clang`
if [ x$CC  = x -a x$XTMPCC != x ] ; then export CC=$XTMPCC  forcedCC=1  ; fi
XTMPCC=`xcrun -find clang++`
if [ x$CXX = x -a x$XTMPCC != x ] ; then export CXX=$XTMPCC forcedCXX=1 ; fi
unset XTMPCC

# 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
# ORIG_HOSTS and ORIG_TARGETS so those names can be used as
# the arguments for "-arch" in the scripts.
for t in `echo $ORIG_HOSTS $ORIG_TARGETS | 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
    elif [ $t = 'powerpc' ] ; then
      $SRC_DIR/configure $T_CONFIGFLAGS $PPC_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
  # LLVM LOCAL begin ARM slice-specific kext libraries
  rm -r $D/static || exit 1
  if [ -e $D/kext/libgcc.a ]; then 
    mv $D/kext/libgcc.a $D/libcc_kext.a || exit 1
    rm -r $D/kext || exit 1
  fi
  # LLVM LOCAL end ARM slice-specific kext libraries
  # 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
  # LLVM LOCAL begin ARM slice-specific kext libraries
  if [ $t = 'arm' ]; then
    libtool -static $D/kext*/libgcc.a -o $D/libcc_kext.a 2>&1 | grep -v 'has no symbols'
    rm -rf $D/kext* || exit 1
  fi
  # LLVM LOCAL end ARM slice-specific kext libraries
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"
	elif [ $t = 'powerpc' ] && [ $h != 'powerpc' ] ; then
          T_CONFIGFLAGS="$T_CONFIGFLAGS $PPC_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

# 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
MAN1_DIR=$DEST_DIR$DEST_ROOT/../share/man/man1
mkdir -p ${MAN1_DIR}
for i in gcc.1 g++.1 cpp.1 gcov.1 ; do
    cp $DIR/obj-$BUILD-$BUILD/gcc/doc/$i ${MAN1_DIR}/$i
done
cp $ORIG_SRC_DIR/gcc/doc/llvm-gcc.1 ${MAN1_DIR}/llvm-gcc.1
# llvm-g++ manpage is a dup of llvm-gcc manpage
cp $ORIG_SRC_DIR/gcc/doc/llvm-gcc.1 ${MAN1_DIR}/llvm-g++.1
# Compress manpages
gzip -f $MDIR/* ${MAN1_DIR}/*
# 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

# Backward compatibility: Allow LLVM_BUILT_ROOTS instead of DISABLE_USR_LINKS.
if [ "x$LLVM_BUILT_ROOTS" != "x" ]; then
    DISABLE_USR_LINKS=1
fi
# Set DISABLE_USR_LINKS if DEST_ROOT is not in /Developer.
if [ "x$DEST_ROOT" != "x/Developer/usr/llvm-gcc-4.2" ]; then
    DISABLE_USR_LINKS=1
fi
# Roots built by B&I, need to include sym links in /usr/bin and /usr/lib
# because B&I sets XCODE_DEVELOPER_USR_PATH=/.  Otherwise, we don't want those
# sym links.
if [ "x$DISABLE_USR_LINKS" == "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

# 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
    echo "Error: llvmCore installation is missing libLTO.dylib"
    exit 1
  fi
  mkdir -p $DEST_DIR/Developer/usr/lib
  cp $LTO $DEST_DIR/Developer/usr/lib/libLTO.dylib
  # FIXME: The unstripped libLTO.dylib from llvmCore's SYM_DIR should be
  # copied to the current SYM_DIR.  Clang is currently responsible for
  # installing libLTO.dylib, not llvm-gcc, so it's not worth fixing now.
  
  if [ "x$DISABLE_USR_LINKS" == "x" ]; then
    # 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
fi

# Remove lto.h from the install directory; clang will supply.
# Also remove ppc_intrinsics.h.  Note that this breaks PPC support.
find $DEST_DIR \( -name lto.h -o -name ppc_intrinsics.h \) -delete -print || exit 1

# 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
