#!/bin/sh
# LLVM LOCAL file B&I

set -x

# Build LLVM 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="$1"

# 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.
# FIXME: The list of targets is currently hard-coded and TARGETS is not used.
TARGETS="$2"

# 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 LLVM will be installed. 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"

# The seventh parameter is a yes/no that indicates whether assertions should be
# enabled in the LLVM libs/tools.
LLVM_ASSERTIONS="$7"

# The eighth parameter is a yes/no that indicates whether this is an optimized
# build.
LLVM_OPTIMIZED="$8"

# A yes/no parameter that controls whether to cross-build for an ARM host.
ARM_HOSTED_BUILD="$9"

# A yes/no parameter that controls whether to cross-build for the iOS simulator
IOS_SIM_BUILD="${10}"

# The version number of the submission, e.g. 1007.
LLVM_SUBMIT_VERSION="${11}"

# The subversion number of the submission, e.g. 03.
LLVM_SUBMIT_SUBVERSION="${12}"

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

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

################################################################################
# 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
# We can't use the top-level Makefile as-is.  Remove the soft link:
rm $SRC_DIR/Makefile || exit 1
# Now create our own by editing the top-level Makefile, deleting every line marked "Apple-style":
sed -e '/[Aa]pple-style/d' -e '/include.*GNUmakefile/d' $ORIG_SRC_DIR/Makefile > $SRC_DIR/Makefile || exit 1

SUBVERSION=`echo $RC_ProjectSourceVersion | sed -e 's/.*\.\([0-9]*\).*/\1/'`
if [ "x$SUBVERSION" != "x$RC_ProjectSourceVersion" ]; then
    LLVM_SUBMIT_SUBVERSION=`printf "%02d" $SUBVERSION`
    RC_ProjectSourceVersion=`echo $RC_ProjectSourceVersion | sed -e 's/\..*//'`
    LLVM_SUBMIT_VERSION=$RC_ProjectSourceVersion
fi
if [ "x$LLVM_SUBMIT_SUBVERSION" = "x00" -o "x$LLVM_SUBMIT_SUBVERSION" = "x0" ]; then
    LLVM_VERSION="$LLVM_SUBMIT_VERSION"
else
    LLVM_VERSION="$LLVM_SUBMIT_VERSION-$LLVM_SUBMIT_SUBVERSION"
fi

# Figure out how many make processes to run.
SYSCTL=`sysctl -n hw.activecpu`
# 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
JOBS_FLAG="-j $SYSCTL"

COMMON_CONFIGURE_OPTS="\
  --prefix=$DEST_DIR$DEST_ROOT \
  --enable-assertions=$LLVM_ASSERTIONS \
  --enable-optimized=$LLVM_OPTIMIZED \
  --disable-bindings"

COMMON_MAKEFLAGS="\
  UNIVERSAL=1 \
  UNIVERSAL_SDK_PATH=$SDKROOT \
  NO_RUNTIME_LIBS=1 \
  DISABLE_EDIS=1 \
  REQUIRES_RTTI=1 \
  DEBUG_SYMBOLS=1 \
  LLVM_SUBMIT_VERSION=$LLVM_SUBMIT_VERSION \
  LLVM_SUBMIT_SUBVERSION=$LLVM_SUBMIT_SUBVERSION \
  VERBOSE=1"

# Build the LLVM tree universal.
mkdir -p $DIR/obj-llvm || exit 1
cd $DIR/obj-llvm || exit 1

if [ "$ARM_HOSTED_BUILD" = yes ]; then
  # The cross-tools' build process expects to find an existing cross toolchain
  # under names like 'arm-apple-darwin$DARWIN_VERS-as'; so make them.
  rm -rf $DIR/bin || exit 1
  mkdir $DIR/bin || exit 1
  for prog in ar nm ranlib strip lipo ld as ; do
    P=$DIR/bin/arm-apple-darwin$DARWIN_VERS-${prog}
    T=`xcrun -sdk $SDKROOT -find ${prog}`
    ln -s $T $DIR/bin/$prog
    echo '#!/bin/sh' > $P || exit 1
    echo 'exec '$T' "$@"' >> $P || exit 1
    chmod a+x $P || exit 1
  done
  # Set up the links for clang.
  for prog in clang clang++ ; do
    P=$DIR/bin/arm-apple-darwin$DARWIN_VERS-${prog}
    T=`xcrun -sdk $SDKROOT -find ${prog}`
    ln -s $T $DIR/bin/$prog
    echo '#!/bin/sh' > $P || exit 1
    echo 'exec '$T' -arch armv7 -isysroot '${SDKROOT}' "$@"' >> $P || exit 1
    chmod a+x $P || exit 1
  done

  PATH=$DIR/bin:$PATH

  unset SDKROOT && \
  $SRC_DIR/configure $COMMON_CONFIGURE_OPTS \
    --enable-targets=arm \
    --host=arm-apple-darwin10 \
    --target=arm-apple-darwin10 \
    --build=i686-apple-darwin10 \
    --program-prefix="" \
    || exit 1

  if [ -n "$IPHONEOS_DEPLOYMENT_TARGET" ]; then
    COMMON_MAKEFLAGS="$COMMON_MAKEFLAGS \
      DEPLOYMENT_TARGET=-mios-version-min=$IPHONEOS_DEPLOYMENT_TARGET"
  fi

  make $JOBS_FLAG $COMMON_MAKEFLAGS SDKROOT= UNIVERSAL_ARCH="$HOSTS" \
    CXXFLAGS="-DLLVM_VERSION_INFO='\" Apple Build #$LLVM_VERSION\"'"
  if [ $? != 0 ] ; then
    echo "error: LLVM 'make' failed!"
    exit 1
  fi 

else
# not $ARM_HOSTED_BUILD

  export CC=`xcrun -find clang`
  export CXX=`xcrun -find clang++`

  if [ "$IOS_SIM_BUILD" = yes ]; then
    # Use a non-standard "darwin_sim" host triple to trigger a cross-build.
    configure_opts="--enable-targets=x86 --host=i686-apple-darwin_sim \
                    --build=i686-apple-darwin10"
    if [ -n "$IPHONEOS_DEPLOYMENT_TARGET" ]; then
      COMMON_MAKEFLAGS="$COMMON_MAKEFLAGS \
        DEPLOYMENT_TARGET=-mios-simulator-version-min=$IPHONEOS_DEPLOYMENT_TARGET"
    fi
  else
    configure_opts="--enable-targets=arm,x86"
    if [ -n "$MACOSX_DEPLOYMENT_TARGET" ]; then
      COMMON_MAKEFLAGS="$COMMON_MAKEFLAGS \
        DEPLOYMENT_TARGET=-mmacosx-version-min=$MACOSX_DEPLOYMENT_TARGET"
    fi
  fi

  if [ $SDKROOT ]; then
    CPPFLAGS="$CPPFLAGS -isysroot $SDKROOT"
  fi
  for host in $HOSTS; do :; done
  CPPFLAGS="$CPPFLAGS -arch $host"

  $SRC_DIR/configure $COMMON_CONFIGURE_OPTS $configure_opts \
    --program-prefix="" \
    CPPFLAGS="$CPPFLAGS" \
    || exit 1

  make $JOBS_FLAG $COMMON_MAKEFLAGS UNIVERSAL_ARCH="$HOSTS" \
    CXXFLAGS="-DLLVM_VERSION_INFO='\" Apple Build #$LLVM_VERSION\"'"
  if [ $? != 0 ] ; then
    echo "error: LLVM 'make' failed!"
    exit 1
  fi 
fi 

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

cd $DIR/obj-llvm || exit 1

# Install the tree into the destination directory.
make $JOBS_FLAG $COMMON_MAKEFLAGS UNIVERSAL_ARCH="$HOSTS" install
if ! test $? == 0 ; then
    echo "error: LLVM 'make install' failed!"
    exit 1
fi 

# Install Version.h
LLVM_MINOR_VERSION=`echo $LLVM_SUBMIT_SUBVERSION | sed -e 's,0*\([1-9][0-9]*\),\1,'`
if [ "x$LLVM_MINOR_VERSION" = "x" ]; then
    LLVM_MINOR_VERSION=0
fi
RC_ProjectSourceSubversion=`printf "%d" $LLVM_MINOR_VERSION`
echo "#define LLVM_VERSION ${RC_ProjectSourceVersion}" > $DEST_DIR$DEST_ROOT/include/llvm/Version.h
echo "#define LLVM_MINOR_VERSION ${RC_ProjectSourceSubversion}" >> $DEST_DIR$DEST_ROOT/include/llvm/Version.h

# Run unifdef to preprocess the installed headers to reflect whether this
# was a debug or release build.
for file in `find $DEST_DIR$DEST_ROOT/include -type f -print`; do
  if [ "$LLVM_ASSERTIONS" = yes ]; then
    unifdef -UNDEBUG -D_DEBUG -o $file $file
  else
    unifdef -DNDEBUG -U_DEBUG -ULLVM_ENABLE_DUMP -o $file $file
  fi
done

# Find the right version of strip to use.
STRIP=strip
if [ -n "$SDKROOT" ]; then
  STRIP=`xcrun -sdk $SDKROOT -find strip`
fi

if [ "x$LLVM_DEBUG" != "x1" ]; then
    # Strip local symbols from llvm libraries.
    #
    # Use '-l' to strip i386 modules. N.B. that flag doesn't work with kext or
    # PPC objects!
    $STRIP -Sl $DEST_DIR$DEST_ROOT/lib/*.[oa]
    for f in `ls $DEST_DIR$DEST_ROOT/lib/*.so`; do
        $STRIP -Sxl $f
    done
fi

# Remove .dir files 
cd $DEST_DIR$DEST_ROOT
rm -f bin/.dir etc/llvm/.dir lib/.dir

# The Hello dylib is an example of how to build a pass.
# The BugpointPasses module is only used to test bugpoint.
# These unversioned dylibs cause verification failures, so do not install them.
# (The wildcards are used to match a "lib" prefix if it is present.)
rm $DEST_DIR$DEST_ROOT/lib/*LLVMHello.dylib
rm $DEST_DIR$DEST_ROOT/lib/*BugpointPasses.dylib

# Compress manpages
MDIR=$DEST_DIR$DEST_ROOT/share/man/man1
gzip -f $MDIR/*

################################################################################
# Create SYM_DIR with information required for debugging.

# 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

cd $SYM_DIR || exit 1

# Clean out SYM_DIR in case -noclean was passed to buildit.
rm -rf * || exit 1

# Generate .dSYM files
DSYMUTIL=`xcrun -find dsymutil`
find $DEST_DIR -perm -0111 -type f \
    ! \( -name '*.la' -o -name gccas -o -name gccld -o -name llvm-config -o -name '*.a' \) \
    -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\] -o -name \*.cpp -print \
    | cpio -pdml $SYM_DIR/src || exit 1

################################################################################
# Remove libLTO.dylib and lto.h.  Those are installed by clang.

cd $DEST_DIR$DEST_ROOT
rm -f lib/libLTO.dylib
rm -f lib/libLTO.a lib/libLTO.la
find $DEST_DIR$DEST_ROOT -name lto.h -delete

################################################################################
# Remove debugging information from DEST_DIR.

cd $DIR || exit 1

find $DEST_DIR -name \*.a -print | xargs ranlib || exit 1
find $DEST_DIR -name \*.dSYM -print | xargs rm -r || exit 1

# Strip debugging information from files
#
# Use '-l' to strip i386 modules. N.B. that flag doesn't work with kext or
# PPC objects!
find $DEST_DIR -perm -0111 -type f \
    ! \( -name '*.la' -o -name gccas -o -name gccld -o -name llvm-config \) \
    -print | xargs -n 1 -P ${SYSCTL} $STRIP -arch all -Sl

chgrp -h -R wheel $DEST_DIR
chgrp -R wheel $DEST_DIR

################################################################################
# Remove the docs directory

rm -rf $DEST_DIR$DEST_ROOT/docs

################################################################################
# w00t! Done!

exit 0
