mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-22 18:54:02 +01:00
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. llvm-svn: 142577
This commit is contained in:
parent
a18fd5ecb4
commit
6c9aa4404d
@ -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
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user