#!/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 i686-pc-linux-gnu of
# cross llvm-gcc for arm-eabi-hard-float. It assumes the valid native
# compiler for i686-pc-linux-gnu is in place and available as well as
# cross libraries and headers for arm-eabi.

# --build=i686-pc-linux-gnu
# --host=i686-pc-linux-gnu
# --target=arm-eabi
#

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

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_install_llvm=no         # Install LLVM-GCC.
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         |  \
      install_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_install_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 and newlib
#------------------------------------------------------------------------------
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 -Ru /opt/cross-tools/*        ${PRIVATE_INSTALL}
   cp -Ru /opt/newlib-src/newlib/   ${BUILD_ROOT}/${LLVM_GCC_src}
   cp -Ru /opt/newlib-src/libgloss/ ${BUILD_ROOT}/${LLVM_GCC_src}

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}  \
      --enable-optimized       \
      --enable-targets=cbe,arm \
      $@  # 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: Install LLVM.
#------------------------------------------------------------------------------
if [ "$do_install_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 install 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}

   ../${LLVM_GCC_src}/configure --prefix=${PRIVATE_INSTALL} \
      --target=arm-eabi         \
      --enable-languages=c,c++  \
      --disable-nls             \
      --program-prefix=llvm-    \
      --with-newlib             \
      --with-headers=yes        \
      --enable-llvm=${BUILD_ROOT}/${LLVM_obj} \
      --with-cpu=cortex-a9      \
      --with-fpu=neon           \
      --with-float=hard         \
      --with-abi=aapcs          \
      $@  # 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
