Add support for testing dragonegg. This is disabled by default.

In fact this commit is not intended to change anything unless you
use one of the new command line flags.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@142577 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Duncan Sands 2011-10-20 11:13:04 +00:00
parent 84dc1f0aaf
commit c1aef0884c

View File

@ -28,8 +28,10 @@ Release_no_dot=""
RC=""
do_checkout="yes"
do_ada="no"
do_objc="yes"
do_clang="yes"
do_dragonegg="no"
do_fortran="no"
do_objc="yes"
do_64bit="yes"
do_debug="no"
do_asserts="no"
@ -45,6 +47,8 @@ function usage() {
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]"
@ -82,6 +86,12 @@ while [ $# -gt 0 ]; do
-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"
;;
@ -140,9 +150,29 @@ cd $BuildDir
LogDir=$BuildDir/logs
mkdir -p $LogDir
# Find a compilers.
# Find compilers.
c_compiler="$CC"
cxx_compiler="$CXX"
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
# Make sure that the URLs are valid.
function check_valid_urls() {
@ -214,7 +244,7 @@ function configure_llvmCore() {
echo "# $BuildDir/llvm.src/configure --prefix=$InstallDir \
--enable-optimized=$Optimized \
--enable-assertions=$Assertions"
env CC=$c_compiler CXX=$cxx_compiler \
env CC="$c_compiler" CXX="$cxx_compiler" \
$BuildDir/llvm.src/configure --prefix=$InstallDir \
--enable-optimized=$Optimized \
--enable-assertions=$Assertions \
@ -245,6 +275,28 @@ function build_llvmCore() {
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$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"
@ -289,70 +341,155 @@ for Flavor in $Flavors ; do
llvmCore_phase1_objdir=$BuildDir/Phase1/$Flavor/llvmCore-$Release-rc$RC.obj
llvmCore_phase1_installdir=$BuildDir/Phase1/$Flavor/llvmCore-$Release-rc$RC.install
dragonegg_phase1_objdir=$BuildDir/Phase1/$Flavor/DragonEgg-$Release-rc$RC.obj
llvmCore_phase2_objdir=$BuildDir/Phase2/$Flavor/llvmCore-$Release-rc$RC.obj
llvmCore_phase2_installdir=$BuildDir/Phase2/$Flavor/llvmCore-$Release-rc$RC.install
llvmCore_de_phase2_objdir=$BuildDir/Phase2/$Flavor/llvmCore-DragonEgg-$Release-rc$RC.obj
llvmCore_de_phase2_installdir=$BuildDir/Phase2/$Flavor/llvmCore-DragonEgg-$Release-rc$RC.install
dragonegg_phase2_objdir=$BuildDir/Phase2/$Flavor/DragonEgg-$Release-rc$RC.obj
llvmCore_phase3_objdir=$BuildDir/Phase3/$Flavor/llvmCore-$Release-rc$RC.obj
llvmCore_phase3_installdir=$BuildDir/Phase3/$Flavor/llvmCore-$Release-rc$RC.install
llvmCore_de_phase3_objdir=$BuildDir/Phase3/$Flavor/llvmCore-DragonEgg-$Release-rc$RC.obj
llvmCore_de_phase3_installdir=$BuildDir/Phase3/$Flavor/llvmCore-DragonEgg-$Release-rc$RC.install
dragonegg_phase3_objdir=$BuildDir/Phase3/$Flavor/DragonEgg-$Release-rc$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 llvmgcc42
# 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
############################################################################
# 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
# 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
############################################################################
# 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
############################################################################
# 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.
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
############################################################################
# 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_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
# 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'` ; 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$RC.log