#!/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 cross build on x86_64-apple-darwin10 of
# self-hosted llvm-gcc for i686-pc-mingw32. It assumes the valid native
# cross compiler for i686-pc-mingw32 is in place and available as well as
# cross libraries and headers.

# --build=x86_64-apple-darwin10
# --host=i686-pc-mingw32
# --target=i686-pc-mingw32

# The usage:
# Run this build from the build from the build root directory as
# build-4-mingw32 [<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

export PATH=/opt/local/bin:/opt/local/sbin:/bin:/sbin:/usr/bin:/usr/sbin
export PATH=$PATH:/mingw_build_tools/install_with_gcc/bin

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_configure_llvm=no       # Configure LLVM.
do_make_llvm=no            # Make 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             |  \
      configure_llvm    |  \
      make_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_configure_llvm=yes
   do_make_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: 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=i686-pc-mingw32   \
      --target=i686-pc-mingw32                               \
      --enable-optimize                                      \
      $@  # Extra args if any

fi

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

   cd ${BUILD_ROOT}/${LLVM_obj}
   nice -n 20 make 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}

   ../${LLVM_GCC_src}/configure --prefix=${PRIVATE_INSTALL}  \
      --build=x86_64-apple-darwin10 --host=i686-pc-mingw32   \
      --target=i686-pc-mingw32                               \
      --program-prefix=llvm-                                 \
      --enable-llvm=${BUILD_ROOT}/${LLVM_obj}                \
      --enable-languages=c,c++                               \
      --disable-multilib --disable-nls --disable-shared      \
      --disable-sjlj-exceptions --disable-__cxa_atexit       \
      $@  # 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
