#!/bin/bash

# Two stages self build

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-mingw32 as
# --build=x86_64-apple-darwin10
# --host=x86_64-apple-darwin10
# --target=i686-pc-mingw32
#
# Then using this cross llvm-gcc for i686-pc-mingw32 it builds a self-hosted
# llvm-gcc for i686-pc-mingw32 as
# --build=x86_64-apple-darwin10
# --host=i686-pc-mingw32
# --target=i686-pc-mingw32
#
# This script assumes the valid native compiler for x86_64-apple-darwin10
# is in place and available as well as cross tools, libraries and
# headers for i686-pc-mingw32.

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

# Expected project tree structure:
# <build root>
#    +-- ${LLVM_src}
#    +-- ${LLVM_GCC_src}
#    +-- ${LLVM_obj_1}        # cross llvm     (Stage 1) build directory
#    +-- ${LLVM_GCC_obj_1}    # cross llvm-gcc (Stage 1) build directory
#    +-- ${LLVM_obj_2}        # self  llvm     (Stage 2) build directory
#    +-- ${LLVM_GCC_obj_2}    # self  llvm-gcc (Stage 2) build directory
#    +-- ${INSTALL}           # where the result gets installed

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_1=llvm-1.obj         # The LLVM build root directory name.
LLVM_GCC_obj_1=llvm-gcc-1.obj # The LLVM-GCC build root directory name.
LLVM_obj_2=llvm-2.obj         # The LLVM build directory name for Stage2.
LLVM_GCC_obj_2=llvm-gcc-2.obj # The LLVM-GCC build directory name for Stage2.
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.

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

# Make sure our just built tools will be selected first.
export PATH=${PRIVATE_INSTALL}/bin:$PATH

#------------------------------------------------------------------------------
# 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_1=no      # Configure LLVM.
do_make_llvm_1=no           # Make LLVM.
do_test_llvm_1=no           # Test LLVM.
do_configure_llvmgcc_1=no   # Configure LLVM-GCC.
do_make_llvmgcc_1=no        # Make LLVM-GCC.
do_install_llvmgcc_1=no     # Install LLVM-GCC.
do_configure_llvm_2=no      # Configure LLVM for Stage2.
do_make_llvm_2=no           # Make LLVM for Stage2.
do_configure_llvmgcc_2=no   # Configure LLVM-GCC for Stage2.
do_make_llvmgcc_2=no        # Make LLVM-GCC for Stage2.
do_install_llvmgcc_2=no     # Install LLVM-GCC for Stage2.

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_1    |  \
      make_llvm_1         |  \
      test_llvm_1         |  \
      configure_llvmgcc_1 |  \
      make_llvmgcc_1      |  \
      install_llvmgcc_1   |  \
      configure_llvm_2    |  \
      make_llvm_2         |  \
      configure_llvmgcc_2 |  \
      make_llvmgcc_2      |  \
      install_llvmgcc_2   |  \
      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_1=yes
   do_make_llvm_1=yes
   do_test_llvm_1=yes
   do_configure_llvmgcc_1=yes
   do_make_llvmgcc_1=yes
   do_install_llvmgcc_1=yes  
   do_configure_llvm_2=yes
   do_make_llvm_2=yes
   do_configure_llvmgcc_2=yes
   do_make_llvmgcc_2=yes
   do_install_llvmgcc_2=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 /mingw_build_tools/install_with_gcc/ ${PRIVATE_INSTALL}

fi

#==============================================================================
# STAGE 1 builds cross llvm-gcc for i686-pc-mingw32.
#==============================================================================

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

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

   ../${LLVM_src}/configure --prefix=${PRIVATE_INSTALL}          \
      --build=x86_64-apple-darwin10 --host=x86_64-apple-darwin10 \
      --target=i686-pc-mingw32                                   \
      --enable-optimize                                          \
      --without-llvmgcc --without-llvmgxx                        \
      $@  # Extra args if any

fi

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

   cd ${BUILD_ROOT}/${LLVM_obj_1}
   # NOTE: Do not use make ENABLE_OPTIMIZED=1. Some tests fail because of that.
   nice -n 20 make VERBOSE=1 \
      $@  # Extra args if any, like -j16 for example.

fi

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

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

fi

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

   # Remove previous build files if any.
   rm -rf ${BUILD_ROOT}/${LLVM_GCC_obj_1}
   mkdir -p ${BUILD_ROOT}/${LLVM_GCC_obj_1}
   chmod a+rx ${BUILD_ROOT}/${LLVM_GCC_obj_1}
   cd ${BUILD_ROOT}/${LLVM_GCC_obj_1}
   
   ../${LLVM_GCC_src}/configure --prefix=${PRIVATE_INSTALL}      \
      --build=x86_64-apple-darwin10 --host=x86_64-apple-darwin10 \
      --with-local-prefix=/tools                                 \
      --target=i686-pc-mingw32                                   \
      --program-prefix=i686-pc-mingw32-                          \
      --enable-llvm=${BUILD_ROOT}/${LLVM_obj_1}                  \
      --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_1" == "yes" ] ; then

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

fi

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

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

fi

#==============================================================================
# STAGE 2 builds self-hosted llvm-gcc for i686-pc-mingw32.
#==============================================================================

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

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

   ../${LLVM_src}/configure --prefix=${PRIVATE_INSTALL}          \
      --build=x86_64-apple-darwin10 --host=i686-pc-mingw32       \
      --target=i686-pc-mingw32                                   \
      --enable-optimize                                          \
      --with-llvmgcc=${PRIVATE_INSTALL}/bin/llvm-gcc             \
      --with-llvmgxx=${PRIVATE_INSTALL}/bin/llvm-g++

fi

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

   cd ${BUILD_ROOT}/${LLVM_obj_2}
   # NOTE: Do not use make ENABLE_OPTIMIZED=1. Some tests fail because of that.
   nice -n 20 make VERBOSE=1 \
      $@  # Extra args if any, like -j16 for example.

fi

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

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

   ../${LLVM_GCC_src}/configure --prefix=${PRIVATE_INSTALL}      \
      --build=x86_64-apple-darwin10 --host=i686-pc-mingw32       \
      --with-local-prefix=/tools                                 \
      --target=i686-pc-mingw32                                   \
      --program-prefix=llvm-                                     \
      --enable-llvm=${BUILD_ROOT}/${LLVM_obj_2}                  \
      --enable-languages=c,c++                                   \
      --disable-multilib --disable-nls --disable-shared          \
      --disable-sjlj-exceptions --disable-__cxa_atexit           \
      $@  # Extra args if any

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

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

fi

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

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

fi
