#!/usr/bin/env bash
#===-- test-release.sh - Test the LLVM release candidates ------------------===#
#
#                     The LLVM Compiler Infrastructure
#
# This file is distributed under the University of Illinois Open Source
# License.
#
#===------------------------------------------------------------------------===#
#
# Download, build, and test the release candidate for an LLVM release.
#
#===------------------------------------------------------------------------===#

if [ `uname -s` = "FreeBSD" ]; then
    MAKE=gmake
else
    MAKE=make
fi

projects="llvm cfe dragonegg compiler-rt test-suite"

# Base SVN URL for the sources.
Base_url="http://llvm.org/svn/llvm-project"

Release=""
Release_no_dot=""
RC=""
DOT=""
do_checkout="yes"
do_ada="no"
do_clang="yes"
do_dragonegg="no"
do_fortran="no"
do_objc="yes"
do_64bit="yes"
do_debug="no"
do_asserts="no"
do_compare="no"
BuildDir="`pwd`"

function usage() {
    echo "usage: `basename $0` -release X.Y -rc NUM [OPTIONS]"
    echo ""
    echo " -release X.Y      The release number to test."
    echo " -rc NUM           The pre-release candidate number."
    echo " -dot NUM          The dot number to test e.g. X.Y.Dot."
    echo " -final            The final release candidate."
    echo " -j NUM            Number of compile jobs to run. [default: 3]"
    echo " -build-dir DIR    Directory to perform testing in. [default: pwd]"
    echo " -no-checkout      Don't checkout the sources from SVN."
    echo " -no-64bit         Don't test the 64-bit version. [default: yes]"
    echo " -enable-ada       Build Ada. [default: disable]"
    echo " -disable-clang    Do not test clang. [default: enable]"
    echo " -enable-dragonegg Test dragonegg. [default: disable]"
    echo " -enable-fortran   Enable Fortran build. [default: disable]"
    echo " -disable-objc     Disable ObjC build. [default: enable]"
    echo " -test-debug       Test the debug build. [default: no]"
    echo " -test-asserts     Test with asserts on. [default: no]"
    echo " -no-compare-files Don't test that phase 2 and 3 files are identical."
}

while [ $# -gt 0 ]; do
    case $1 in
        -release | --release )
            shift
            Release="$1"
            Release_no_dot="`echo $1 | sed -e 's,\.,,'`"
            ;;
        -rc | --rc | -RC | --RC )
            shift
            RC="rc$1"
            ;;
        -final | --final )
            RC=final
            ;;
        -dot | --dot )
            shift
            DOT="$1"
            ;;
        -j* )
            NumJobs="`echo $1 | sed -e 's,-j\([0-9]*\),\1,g'`"
            if [ -z "$NumJobs" ]; then
                shift
                NumJobs="$1"
            fi
            ;;
        -build-dir | --build-dir | -builddir | --builddir )
            shift
            BuildDir="$1"
            ;;
        -no-checkout | --no-checkout )
            do_checkout="no"
            ;;
        -no-64bit | --no-64bit )
            do_64bit="no"
            ;;
        -enable-ada | --enable-ada )
            do_ada="yes"
            ;;
        -disable-clang | --disable-clang )
            do_clang="no"
            ;;
        -enable-dragonegg | --enable-dragonegg )
            do_dragonegg="yes"
            ;;
        -enable-fortran | --enable-fortran )
            do_fortran="yes"
            ;;
        -disable-objc | --disable-objc )
            do_objc="no"
            ;;
        -test-debug | --test-debug )
            do_debug="yes"
            ;;
        -test-asserts | --test-asserts )
            do_asserts="yes"
            ;;
        -no-compare-files | --no-compare-files )
            do_compare="no"
            ;;
        -help | --help | -h | --h | -\? )
            usage
            exit 0
            ;;
        * )
            echo "unknown option: $1"
            usage
            exit 1
            ;;
    esac
    shift
done

# Check required arguments.
if [ -z "$Release" ]; then
    echo "error: no release number specified"
    exit 1
fi
if [ -z "$RC" ]; then
    echo "error: no release candidate number specified"
    exit 1
fi

# Append the dot number if necessary and determine the SVN tag name.
SvnDotTag="RELEASE_$Release_no_dot/"
SvnNoDotTag=""
if [ -n "$DOT" ]; then
    Release="$Release.$DOT"
    SvnNoDotTag="${SvnDotTag}/final"
    SvnDotTag="${SvnDotTag}dot${DOT}-"

fi
SvnDotTag="$SvnDotTag$RC"

# Figure out how many make processes to run.
if [ -z "$NumJobs" ]; then
    NumJobs=`sysctl -n hw.activecpu 2> /dev/null || true`
fi
if [ -z "$NumJobs" ]; then
    NumJobs=`sysctl -n hw.ncpu 2> /dev/null || true`
fi
if [ -z "$NumJobs" ]; then
    NumJobs=`grep -c processor /proc/cpuinfo 2> /dev/null || true`
fi
if [ -z "$NumJobs" ]; then
    NumJobs=3
fi

# Go to the build directory (may be different from CWD)
BuildDir=$BuildDir/$RC
mkdir -p $BuildDir
cd $BuildDir

# Location of log files.
LogDir=$BuildDir/logs
mkdir -p $LogDir

# Find compilers.
if [ "$do_dragonegg" = "yes" ]; then
    gcc_compiler="$GCC"
    if [ -z "$gcc_compiler" ]; then
        gcc_compiler="`which gcc`"
        if [ -z "$gcc_compiler" ]; then
            echo "error: cannot find gcc to use with dragonegg"
            exit 1
        fi
    fi

    gxx_compiler="$GXX"
    if [ -z "$gxx_compiler" ]; then
        gxx_compiler="`which g++`"
        if [ -z "$gxx_compiler" ]; then
            echo "error: cannot find g++ to use with dragonegg"
            exit 1
        fi
    fi
fi


function get_svn_tag() {
    if [ -z $DOT ]; then
        SvnTag="$SvnDotTag"
    else
        case $1 in
            llvm | cfe)
                SvnTag="$SvnDotTag"
                ;;
            *)
                SvnTag="$SvnNoDotTag"
                ;;
        esac
    fi
}

# Make sure that the URLs are valid.
function check_valid_urls() {
    for proj in $projects ; do
        echo "# Validating $proj SVN URL"
        get_svn_tag $proj
        if ! svn ls $Base_url/$proj/tags/$SvnTag > /dev/null 2>&1 ; then
            echo "llvm $Release release candidate $RC doesn't exist!"
            exit 1
        fi
    done
}

# Export sources to the build directory.
function export_sources() {
    check_valid_urls

    for proj in $projects ; do
        echo "# Exporting $proj $Release-RC$RC sources"
        get_svn_tag $proj
        if ! svn export -q $Base_url/$proj/tags/$SvnTag $proj.src ; then
            echo "error: failed to export $proj project"
            exit 1
        fi
    done

    echo "# Creating symlinks"
    cd $BuildDir/llvm.src/tools
    if [ ! -h clang ]; then
        ln -s ../../cfe.src clang
    fi
    cd $BuildDir/llvm.src/projects
    if [ ! -h llvm-test ]; then
        ln -s ../../test-suite.src llvm-test
    fi
    if [ ! -h compiler-rt ]; then
        ln -s ../../compiler-rt.src compiler-rt
    fi
    cd $BuildDir
}

function configure_llvmCore() {
    Phase="$1"
    Flavor="$2"
    ObjDir="$3"
    InstallDir="$4"

    case $Flavor in
        Release | Release-64 )
            Optimized="yes"
            Assertions="no"
            ;;
        Release+Asserts )
            Optimized="yes"
            Assertions="yes"
            ;;
        Debug )
            Optimized="no"
            Assertions="yes"
            ;;
        * )
            echo "# Invalid flavor '$Flavor'"
            echo ""
            return
            ;;
    esac

    echo "# Using C compiler: $c_compiler"
    echo "# Using C++ compiler: $cxx_compiler"

    cd $ObjDir
    echo "# Configuring llvm $Release-$RC $Flavor"
    echo "# $BuildDir/llvm.src/configure --prefix=$InstallDir \
        --enable-optimized=$Optimized \
        --enable-assertions=$Assertions"
    env CC="$c_compiler" CXX="$cxx_compiler" \
    $BuildDir/llvm.src/configure --prefix=$InstallDir \
        --enable-optimized=$Optimized \
        --enable-assertions=$Assertions \
        --disable-timestamps \
        2>&1 | tee $LogDir/llvm.configure-Phase$Phase-$Flavor.log
    cd $BuildDir
}

function build_llvmCore() {
    Phase="$1"
    Flavor="$2"
    ObjDir="$3"
    ExtraOpts=""

    if [ "$Flavor" = "Release-64" ]; then
        ExtraOpts="EXTRA_OPTIONS=-m64"
    fi

    cd $ObjDir
    echo "# Compiling llvm $Release-$RC $Flavor"
    echo "# ${MAKE} -j $NumJobs VERBOSE=1 $ExtraOpts"
    ${MAKE} -j $NumJobs VERBOSE=1 $ExtraOpts \
        2>&1 | tee $LogDir/llvm.make-Phase$Phase-$Flavor.log

    echo "# Installing llvm $Release-$RC $Flavor"
    echo "# ${MAKE} install"
    ${MAKE} install \
        2>&1 | tee $LogDir/llvm.install-Phase$Phase-$Flavor.log
    cd $BuildDir
}

function build_dragonegg() {
    Phase="$1"
    Flavor="$2"
    LLVMInstallDir="$3"
    DragonEggObjDir="$4"
    LLVM_CONFIG=$LLVMInstallDir/bin/llvm-config
    TOP_DIR=$BuildDir/dragonegg.src

    echo "# Targeted compiler: $gcc_compiler"

    cd $DragonEggObjDir
    echo "# Compiling phase $Phase dragonegg $Release-$RC $Flavor"
    echo -n "# CXX=$cxx_compiler TOP_DIR=$TOP_DIR GCC=$gcc_compiler "
    echo -n "LLVM_CONFIG=$LLVM_CONFIG ${MAKE} -f $TOP_DIR/Makefile "
    echo "-j $NumJobs VERBOSE=1"
    CXX="$cxx_compiler" TOP_DIR="$TOP_DIR" GCC="$gcc_compiler" \
    LLVM_CONFIG="$LLVM_CONFIG" ${MAKE} -f $TOP_DIR/Makefile \
        -j $NumJobs VERBOSE=1 \
            2>&1 | tee $LogDir/dragonegg-Phase$Phase-$Flavor.log
    cd $BuildDir
}

function test_llvmCore() {
    Phase="$1"
    Flavor="$2"
    ObjDir="$3"

    cd $ObjDir
    ${MAKE} -k check-all \
        2>&1 | tee $LogDir/llvm.check-Phase$Phase-$Flavor.log
    ${MAKE} -k unittests \
        2>&1 | tee $LogDir/llvm.unittests-Phase$Phase-$Flavor.log
    cd $BuildDir
}

set -e                          # Exit if any command fails

if [ "$do_checkout" = "yes" ]; then
    export_sources
fi

(
Flavors="Release"
if [ "$do_debug" = "yes" ]; then
    Flavors="Debug $Flavors"
fi
if [ "$do_asserts" = "yes" ]; then
    Flavors="$Flavors Release+Asserts"
fi
if [ "$do_64bit" = "yes" ]; then
    Flavors="$Flavors Release-64"
fi

for Flavor in $Flavors ; do
    echo ""
    echo ""
    echo "********************************************************************************"
    echo "  Release:     $Release-$RC"
    echo "  Build:       $Flavor"
    echo "  System Info: "
    echo "    `uname -a`"
    echo "********************************************************************************"
    echo ""

    c_compiler="$CC"
    cxx_compiler="$CXX"

    llvmCore_phase1_objdir=$BuildDir/Phase1/$Flavor/llvmCore-$Release-$RC.obj
    llvmCore_phase1_installdir=$BuildDir/Phase1/$Flavor/llvmCore-$Release-$RC.install
    dragonegg_phase1_objdir=$BuildDir/Phase1/$Flavor/DragonEgg-$Release-$RC.obj

    llvmCore_phase2_objdir=$BuildDir/Phase2/$Flavor/llvmCore-$Release-$RC.obj
    llvmCore_phase2_installdir=$BuildDir/Phase2/$Flavor/llvmCore-$Release-$RC.install
    llvmCore_de_phase2_objdir=$BuildDir/Phase2/$Flavor/llvmCore-DragonEgg-$Release-$RC.obj
    llvmCore_de_phase2_installdir=$BuildDir/Phase2/$Flavor/llvmCore-DragonEgg-$Release-$RC.install
    dragonegg_phase2_objdir=$BuildDir/Phase2/$Flavor/DragonEgg-$Release-$RC.obj

    llvmCore_phase3_objdir=$BuildDir/Phase3/$Flavor/llvmCore-$Release-$RC.obj
    llvmCore_phase3_installdir=$BuildDir/Phase3/$Flavor/llvmCore-$Release-$RC.install
    llvmCore_de_phase3_objdir=$BuildDir/Phase3/$Flavor/llvmCore-DragonEgg-$Release-$RC.obj
    llvmCore_de_phase3_installdir=$BuildDir/Phase3/$Flavor/llvmCore-DragonEgg-$Release-$RC.install
    dragonegg_phase3_objdir=$BuildDir/Phase3/$Flavor/DragonEgg-$Release-$RC.obj

    rm -rf $llvmCore_phase1_objdir
    rm -rf $llvmCore_phase1_installdir
    rm -rf $dragonegg_phase1_objdir

    rm -rf $llvmCore_phase2_objdir
    rm -rf $llvmCore_phase2_installdir
    rm -rf $llvmCore_de_phase2_objdir
    rm -rf $llvmCore_de_phase2_installdir
    rm -rf $dragonegg_phase2_objdir

    rm -rf $llvmCore_phase3_objdir
    rm -rf $llvmCore_phase3_installdir
    rm -rf $llvmCore_de_phase3_objdir
    rm -rf $llvmCore_de_phase3_installdir
    rm -rf $dragonegg_phase3_objdir

    mkdir -p $llvmCore_phase1_objdir
    mkdir -p $llvmCore_phase1_installdir
    mkdir -p $dragonegg_phase1_objdir

    mkdir -p $llvmCore_phase2_objdir
    mkdir -p $llvmCore_phase2_installdir
    mkdir -p $llvmCore_de_phase2_objdir
    mkdir -p $llvmCore_de_phase2_installdir
    mkdir -p $dragonegg_phase2_objdir

    mkdir -p $llvmCore_phase3_objdir
    mkdir -p $llvmCore_phase3_installdir
    mkdir -p $llvmCore_de_phase3_objdir
    mkdir -p $llvmCore_de_phase3_installdir
    mkdir -p $dragonegg_phase3_objdir

    ############################################################################
    # Phase 1: Build llvmCore and clang
    echo "# Phase 1: Building llvmCore"
    configure_llvmCore 1 $Flavor \
        $llvmCore_phase1_objdir $llvmCore_phase1_installdir
    build_llvmCore 1 $Flavor \
        $llvmCore_phase1_objdir

    # Test clang
    if [ "$do_clang" = "yes" ]; then
        ########################################################################
        # Phase 2: Build llvmCore with newly built clang from phase 1.
        c_compiler=$llvmCore_phase1_installdir/bin/clang
        cxx_compiler=$llvmCore_phase1_installdir/bin/clang++
        echo "# Phase 2: Building llvmCore"
        configure_llvmCore 2 $Flavor \
            $llvmCore_phase2_objdir $llvmCore_phase2_installdir
        build_llvmCore 2 $Flavor \
            $llvmCore_phase2_objdir

        ########################################################################
        # Phase 3: Build llvmCore with newly built clang from phase 2.
        c_compiler=$llvmCore_phase2_installdir/bin/clang
        cxx_compiler=$llvmCore_phase2_installdir/bin/clang++
        echo "# Phase 3: Building llvmCore"
        configure_llvmCore 3 $Flavor \
            $llvmCore_phase3_objdir $llvmCore_phase3_installdir
        build_llvmCore 3 $Flavor \
            $llvmCore_phase3_objdir

        ########################################################################
        # Testing: Test phase 3
        echo "# Testing - built with clang"
        test_llvmCore 3 $Flavor $llvmCore_phase3_objdir

        ########################################################################
        # Compare .o files between Phase2 and Phase3 and report which ones
        # differ.
        if [ "$do_compare" = "yes" ]; then
            echo
            echo "# Comparing Phase 2 and Phase 3 files"
            for o in `find $llvmCore_phase2_objdir -name '*.o'` ; do
                p3=`echo $o | sed -e 's,Phase2,Phase3,'`
                if ! cmp --ignore-initial=16 $o $p3 > /dev/null 2>&1 ; then
                    echo "file `basename $o` differs between phase 2 and phase 3"
                fi
            done
        fi
    fi

    # Test dragonegg
    if [ "$do_dragonegg" = "yes" ]; then
        # Build dragonegg using the targeted gcc.  This isn't necessary, but
        # helps avoid using broken versions of gcc (which are legion), tests
        # that the targeted gcc is basically sane and is consistent with the
        # later phases in which the targeted gcc + dragonegg are used.
        c_compiler="$gcc_compiler"
        cxx_compiler="$gxx_compiler"
        build_dragonegg 1 $Flavor $llvmCore_phase1_installdir $dragonegg_phase1_objdir

        ########################################################################
        # Phase 2: Build llvmCore with newly built dragonegg from phase 1.
        c_compiler="$gcc_compiler -fplugin=$dragonegg_phase1_objdir/dragonegg.so"
        cxx_compiler="$gxx_compiler -fplugin=$dragonegg_phase1_objdir/dragonegg.so"
        echo "# Phase 2: Building llvmCore with dragonegg"
        configure_llvmCore 2 $Flavor \
            $llvmCore_de_phase2_objdir $llvmCore_de_phase2_installdir
        build_llvmCore 2 $Flavor \
            $llvmCore_de_phase2_objdir
        build_dragonegg 2 $Flavor $llvmCore_de_phase2_installdir $dragonegg_phase2_objdir

        ########################################################################
        # Phase 3: Build llvmCore with newly built clang from phase 2.
        c_compiler="$gcc_compiler -fplugin=$dragonegg_phase2_objdir/dragonegg.so"
        cxx_compiler="$gxx_compiler -fplugin=$dragonegg_phase2_objdir/dragonegg.so"
        echo "# Phase 3: Building llvmCore with dragonegg"
        configure_llvmCore 3 $Flavor \
            $llvmCore_de_phase3_objdir $llvmCore_de_phase3_installdir
        build_llvmCore 3 $Flavor \
            $llvmCore_de_phase3_objdir
        build_dragonegg 3 $Flavor $llvmCore_de_phase3_installdir $dragonegg_phase3_objdir

        ########################################################################
        # Testing: Test phase 3
        c_compiler="$gcc_compiler -fplugin=$dragonegg_phase3_objdir/dragonegg.so"
        cxx_compiler="$gxx_compiler -fplugin=$dragonegg_phase3_objdir/dragonegg.so"
        echo "# Testing - built with dragonegg"
        test_llvmCore 3 $Flavor $llvmCore_de_phase3_objdir

        ########################################################################
        # Compare .o files between Phase2 and Phase3 and report which ones differ.
        echo
        echo "# Comparing Phase 2 and Phase 3 files"
        for o in `find $llvmCore_de_phase2_objdir -name '*.o'` \
          `find $dragonegg_phase2_objdir -name '*.o'` ; do
            p3=`echo $o | sed -e 's,Phase2,Phase3,'`
            if ! cmp --ignore-initial=16 $o $p3 > /dev/null 2>&1 ; then
                echo "file `basename $o` differs between dragonegg phase 2 and phase 3"
            fi
        done
    fi

    # Otherwise just test the core.
    if [ "$do_clang" != "yes" -a "$do_dragonegg" != "yes" ]; then
        echo "# Testing - built with system compiler"
        test_llvmCore 1 $Flavor $llvmCore_phase1_objdir
    fi
done
) 2>&1 | tee $LogDir/testing.$Release-$RC.log

set +e

# Woo hoo!
echo "### Testing Finished ###"
echo "### Logs: $LogDir"
exit 0
