#!/bin/bash

set -e                     # Terminate script at the first line that fails.
set -o pipefail            # Return the first non-zero pipe command error.
set -x                     # Print commands as they are executed

# This script performs an automated build on x86_64-apple-darwin10 of
# cross llvm-gcc for i686-pc-linux-gnu. It assumes the valid native
# compiler for x86_64-apple-darwin10 is in place and available as well as
# cross libraries and headers for i686-pc-linux-gnu.

# --build=x86_64-apple-darwin10
# --host=x86_64-apple-darwin10
# --target=i686-pc-linux-gnu

# The usage:
# Run this build from the build from the build root directory as
# build-x-4-linux [<step>] [<extra args>]

# Expected project tree structure:
# <build root>
#    +-- ${LLVM_src}
#    +-- ${LLVM_GCC_src}
#    +-- ${LLVM_obj}
#    +-- ${LLVM_GCC_obj}
#    +-- ${INSTALL}

LLVM_src=llvm.src          # The LLVM source code root directory name.
LLVM_GCC_src=llvm-gcc.src  # The LLVM-GCC source code root directory name.
LLVM_obj=llvm.obj          # The LLVM build root directory name.
LLVM_GCC_obj=llvm-gcc.obj  # The LLVM-GCC build root directory name.
INSTALL=install            # Where the result will be installed.

# CFLAGS and CXXFLAGS must not be set during the building of cross-tools.
unset CFLAGS
unset CXXFLAGS

BUILD_ROOT=$PWD                           # Where build happens.
PRIVATE_INSTALL=${BUILD_ROOT}/${INSTALL}  # Where the result will be installed.

#------------------------------------------------------------------------------
# Define build steps, parse and validate input parameters
#------------------------------------------------------------------------------

# This script supports the following steps:
do_clean=no                # Clean up the build directory.
do_copy_cross_tools=no     # Copy cross-tools.
do_configure_llvm=no       # Configure LLVM.
do_make_llvm=no            # Make LLVM.
do_test_llvm=no            # Test LLVM.
do_configure_llvmgcc=no    # Configure LLVM-GCC.
do_make_llvmgcc=no         # Make LLVM-GCC.
do_install_llvmgcc=no      # Install LLVM-GCC.
do_all=no                  # Runs all steps at once when requested.

# Set step parameter
if (( $# == 0 )) ; then
   do_all=yes
fi
# else
if (( ! $# == 0 )) ; then
   # First check that the parameter actually defines a step.
   case $1 in
      clean             |  \
      copy_cross_tools  |  \
      configure_llvm    |  \
      make_llvm         |  \
      test_llvm         |  \
      configure_llvmgcc |  \
      make_llvmgcc      |  \
      install_llvmgcc   |  \
      all)
         eval do_$1=yes    # Set the flag for the requested step .
         shift             # Remove it since is is ours and already precessed.
         ;;

      *)
         # Not our parameter. Pass it as is.
   esac
fi

# Set all steps if do_all requested
if [ "$do_all" == "yes" ] ; then
   # Set all steps to yes
   do_clean=yes
   do_copy_cross_tools=yes
   do_configure_llvm=yes
   do_make_llvm=yes
   do_test_llvm=yes
   do_configure_llvmgcc=yes
   do_make_llvmgcc=yes
   do_install_llvmgcc=yes
fi

#------------------------------------------------------------------------------
# Step: Clean up.
#------------------------------------------------------------------------------
if [ "$do_clean" == "yes" ] ; then

   # Remove everything from where we will be installing the result.
   rm -rf ${PRIVATE_INSTALL}
   mkdir -p ${PRIVATE_INSTALL}
   chmod a+rx ${PRIVATE_INSTALL}

fi

#------------------------------------------------------------------------------
# Step: Copy cross-tools.
#------------------------------------------------------------------------------
if [ "$do_copy_cross_tools" == "yes" ] ; then

   # We need a local copy of binutils, system libraries and headers,
   # since we will be installing there.
   cp -RL /cross-tools/ ${PRIVATE_INSTALL}

fi

#------------------------------------------------------------------------------
# Step: Configure LLVM.
#------------------------------------------------------------------------------
if [ "$do_configure_llvm" == "yes" ] ; then

   # Remove previously build files if any.
   rm -rf ${BUILD_ROOT}/${LLVM_obj}
   mkdir -p ${BUILD_ROOT}/${LLVM_obj}
   chmod a+rx ${BUILD_ROOT}/${LLVM_obj}
   cd ${BUILD_ROOT}/${LLVM_obj}
   
   ../${LLVM_src}/configure --prefix=${PRIVATE_INSTALL}          \
      --build=x86_64-apple-darwin10 --host=x86_64-apple-darwin10 \
      --target=i686-pc-linux-gnu                                 \
      --enable-optimize                                          \
      $@  # Extra args if any

fi

#------------------------------------------------------------------------------
# Step: Make LLVM.
#------------------------------------------------------------------------------
if [ "$do_make_llvm" == "yes" ] ; then

   cd ${BUILD_ROOT}/${LLVM_obj}
   # NOTE: Do not build with ENABLE_OPTIMIZED=1 - some test fail after it.   
   nice -n 20 make VERBOSE=1 \
      $@  # Extra args if any, like -j16 for example.

fi

#------------------------------------------------------------------------------
# Step: Test LLVM.
#------------------------------------------------------------------------------
if [ "$do_test_llvm" == "yes" ] ; then

   cd ${BUILD_ROOT}/${LLVM_obj}
   make check-lit VERBOSE=1  \
      $@  # Extra args if any, like -j16 for example.

fi

#------------------------------------------------------------------------------
# Step: Configure LLVM-GCC.
#------------------------------------------------------------------------------
if [ "$do_configure_llvmgcc" == "yes" ] ; then

   # Remove previously build files if any.
   rm -rf ${BUILD_ROOT}/${LLVM_GCC_obj}
   mkdir -p ${BUILD_ROOT}/${LLVM_GCC_obj}
   chmod a+rx ${BUILD_ROOT}/${LLVM_GCC_obj}
   cd ${BUILD_ROOT}/${LLVM_GCC_obj}

# TODO: check the next comment
# We want this cross-compiler to have prefix of the target platform
# instead of llvm-, so we would not rename it later to get used as a cross.
   
   ../${LLVM_GCC_src}/configure --prefix=${PRIVATE_INSTALL}      \
      --build=x86_64-apple-darwin10 --host=x86_64-apple-darwin10 \
      --target=i686-pc-linux-gnu                                 \
      --with-local-prefix=/tools                                 \
      --program-prefix=llvm-                                     \
      --enable-llvm=${BUILD_ROOT}/${LLVM_obj}                    \
      --enable-languages=c,c++                                   \
      --disable-multilib --disable-nls                           \
      $@  # Extra args if any
fi

#------------------------------------------------------------------------------
# Step: Make LLVM-GCC.
#------------------------------------------------------------------------------
if [ "$do_make_llvmgcc" == "yes" ] ; then

   cd ${BUILD_ROOT}/${LLVM_GCC_obj}
   nice -n 20 make          \
      $@  # Extra args if any

fi

#------------------------------------------------------------------------------
# Step: Install LLVM-GCC.
#------------------------------------------------------------------------------
if [ "$do_install_llvmgcc" == "yes" ] ; then

   cd ${BUILD_ROOT}/${LLVM_GCC_obj}
   nice -n 20 make install  \
      $@  # Extra args if any

fi
