#!/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

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

if [ $BUILD_CXX -eq 1 ]; then
for t in $TARGETS ; do
    if [ "$t" == 'arm' ] ; then
        cp -p $ARM_SYSROOT/usr/lib/libstdc++.6.dylib \
            .$DEST_ROOT/lib/gcc/$t-apple-darwin$DARWIN_VERS/$VERS/libstdc++.dylib \
            || exit 1
        # LLVM LOCAL remove libstdc++ copying for non-ARM targets
    fi
# LLVM LOCAL
#  strip -x -c .$DEST_ROOT/lib/gcc/$t-apple-darwin$DARWIN_VERS/$VERS/libstdc++.dylib || exit 1
done
fi

# 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/*

MAN1_DIR=$DEST_DIR/Developer/usr/share/man/man1
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

# Backward compatibility: Allow LLVM_BUILT_ROOTS instead of DISABLE_USR_LINKS.
if [ "x$LLVM_BUILT_ROOTS" != "x" ]; 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

# 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
