summaryrefslogtreecommitdiffstats
path: root/utils/release
diff options
context:
space:
mode:
Diffstat (limited to 'utils/release')
-rwxr-xr-xutils/release/findRegressions-nightly.py130
-rwxr-xr-xutils/release/findRegressions-simple.py (renamed from utils/release/findRegressions.py)57
-rwxr-xr-xutils/release/merge.sh74
-rwxr-xr-xutils/release/tag.sh99
-rwxr-xr-xutils/release/test-release.sh260
5 files changed, 555 insertions, 65 deletions
diff --git a/utils/release/findRegressions-nightly.py b/utils/release/findRegressions-nightly.py
new file mode 100755
index 0000000..e801dab
--- /dev/null
+++ b/utils/release/findRegressions-nightly.py
@@ -0,0 +1,130 @@
+#!/usr/bin/python
+import re, string, sys, os, time
+
+DEBUG = 0
+testDirName = 'llvm-test'
+test = ['compile', 'llc', 'jit', 'cbe']
+exectime = ['llc-time', 'jit-time', 'cbe-time',]
+comptime = ['llc', 'jit-comptime', 'compile']
+
+(tp, exp) = ('compileTime_', 'executeTime_')
+
+def parse(file):
+ f=open(file, 'r')
+ d = f.read()
+
+ #Cleanup weird stuff
+ d = re.sub(r',\d+:\d','', d)
+
+ r = re.findall(r'TEST-(PASS|FAIL|RESULT.*?):\s+(.*?)\s+(.*?)\r*\n', d)
+
+ test = {}
+ fname = ''
+ for t in r:
+ if DEBUG:
+ print t
+ if t[0] == 'PASS' or t[0] == 'FAIL' :
+ tmp = t[2].split(testDirName)
+
+ if DEBUG:
+ print tmp
+
+ if len(tmp) == 2:
+ fname = tmp[1].strip('\r\n')
+ else:
+ fname = tmp[0].strip('\r\n')
+
+ if not test.has_key(fname) :
+ test[fname] = {}
+
+ for k in test:
+ test[fname][k] = 'NA'
+ test[fname][t[1]] = t[0]
+ if DEBUG:
+ print test[fname][t[1]]
+ else :
+ try:
+ n = t[0].split('RESULT-')[1]
+
+ if DEBUG:
+ print n;
+
+ if n == 'llc' or n == 'jit-comptime' or n == 'compile':
+ test[fname][tp + n] = float(t[2].split(' ')[2])
+ if DEBUG:
+ print test[fname][tp + n]
+
+ elif n.endswith('-time') :
+ test[fname][exp + n] = float(t[2].strip('\r\n'))
+ if DEBUG:
+ print test[fname][exp + n]
+
+ else :
+ print "ERROR!"
+ sys.exit(1)
+
+ except:
+ continue
+
+ return test
+
+# Diff results and look for regressions.
+def diffResults(d_old, d_new):
+
+ for t in sorted(d_old.keys()) :
+ if DEBUG:
+ print t
+
+ if d_new.has_key(t) :
+
+ # Check if the test passed or failed.
+ for x in test:
+ if d_old[t].has_key(x):
+ if d_new[t].has_key(x):
+ if d_old[t][x] == 'PASS':
+ if d_new[t][x] != 'PASS':
+ print t + " *** REGRESSION (" + x + ")\n"
+ else:
+ if d_new[t][x] == 'PASS':
+ print t + " * NEW PASS (" + x + ")\n"
+
+ else :
+ print t + "*** REGRESSION (" + x + ")\n"
+
+ # For execution time, if there is no result, its a fail.
+ for x in exectime:
+ if d_old[t].has_key(tp + x):
+ if not d_new[t].has_key(tp + x):
+ print t + " *** REGRESSION (" + tp + x + ")\n"
+
+ else :
+ if d_new[t].has_key(tp + x):
+ print t + " * NEW PASS (" + tp + x + ")\n"
+
+
+ for x in comptime:
+ if d_old[t].has_key(exp + x):
+ if not d_new[t].has_key(exp + x):
+ print t + " *** REGRESSION (" + exp + x + ")\n"
+
+ else :
+ if d_new[t].has_key(exp + x):
+ print t + " * NEW PASS (" + exp + x + ")\n"
+
+ else :
+ print t + ": Removed from test-suite.\n"
+
+
+#Main
+if len(sys.argv) < 3 :
+ print 'Usage:', sys.argv[0], \
+ '<old log> <new log>'
+ sys.exit(-1)
+
+d_old = parse(sys.argv[1])
+d_new = parse(sys.argv[2])
+
+
+diffResults(d_old, d_new)
+
+
diff --git a/utils/release/findRegressions.py b/utils/release/findRegressions-simple.py
index 7629c8b..7586231 100755
--- a/utils/release/findRegressions.py
+++ b/utils/release/findRegressions-simple.py
@@ -62,6 +62,13 @@ def parse(file):
# Diff results and look for regressions.
def diffResults(d_old, d_new):
+ regressions = {}
+ passes = {}
+ removed = ''
+
+ for x in ['compile state', 'compile time', 'exec state', 'exec time']:
+ regressions[x] = ''
+ passes[x] = ''
for t in sorted(d_old.keys()) :
if d_new.has_key(t):
@@ -77,13 +84,13 @@ def diffResults(d_old, d_new):
if d_old[t][x] == 'PASS':
if d_new[t][x] != 'PASS':
- print t + " *** REGRESSION (" + x + " now fails)"
+ regressions[x] += t + "\n"
else:
if d_new[t][x] == 'PASS':
- print t + " * NEW PASS (" + x + " now fails)"
+ passes[x] += t + "\n"
else :
- print t + "*** REGRESSION (" + x + " now fails)"
+ regressions[x] += t + "\n"
if x == 'compile state' or x == 'exec state':
continue
@@ -92,25 +99,53 @@ def diffResults(d_old, d_new):
if not d_old[t].has_key(x) and not d_new[t].has_key(x):
continue
elif not d_new[t].has_key(x):
- print t + " *** REGRESSION (" + x + ")"
+ regressions[x] += t + "\n"
elif not d_old[t].has_key(x):
- print t + " * NEW PASS (" + x + ")"
+ passes[x] += t + "\n"
if math.isnan(d_old[t][x]) and math.isnan(d_new[t][x]):
continue
elif math.isnan(d_old[t][x]) and not math.isnan(d_new[t][x]):
- print t + " * NEW PASS (" + x + ")"
+ passes[x] += t + "\n"
elif not math.isnan(d_old[t][x]) and math.isnan(d_new[t][x]):
- print t + " *** REGRESSION (" + x + ")"
+ regressions[x] += t + ": NaN%\n"
- if d_new[t][x] > d_old[t][x] and \
- (d_new[t][x] - d_old[t][x]) / d_new[t][x] > .05:
- print t + " *** REGRESSION (" + x + ")"
+ if d_new[t][x] > d_old[t][x] and d_old[t][x] > 0.0 and \
+ (d_new[t][x] - d_old[t][x]) / d_old[t][x] > .05:
+ regressions[x] += t + ": " + "{0:.1f}".format(100 * (d_new[t][x] - d_old[t][x]) / d_old[t][x]) + "%\n"
else :
- print t + ": Removed from test-suite."
+ removed += t + "\n"
+
+ if len(regressions['compile state']) != 0:
+ print 'REGRESSION: Compilation Failed'
+ print regressions['compile state']
+
+ if len(regressions['exec state']) != 0:
+ print 'REGRESSION: Execution Failed'
+ print regressions['exec state']
+
+ if len(regressions['compile time']) != 0:
+ print 'REGRESSION: Compilation Time'
+ print regressions['compile time']
+
+ if len(regressions['exec time']) != 0:
+ print 'REGRESSION: Execution Time'
+ print regressions['exec time']
+
+ if len(passes['compile state']) != 0:
+ print 'NEW PASSES: Compilation'
+ print passes['compile state']
+
+ if len(passes['exec state']) != 0:
+ print 'NEW PASSES: Execution'
+ print passes['exec state']
+
+ if len(removed) != 0:
+ print 'REMOVED TESTS'
+ print removed
# Main
if len(sys.argv) < 3 :
diff --git a/utils/release/merge.sh b/utils/release/merge.sh
new file mode 100755
index 0000000..2cf39b2
--- /dev/null
+++ b/utils/release/merge.sh
@@ -0,0 +1,74 @@
+#!/bin/sh
+#===-- merge.sh - Test the LLVM release candidates -------------------------===#
+#
+# The LLVM Compiler Infrastructure
+#
+# This file is distributed under the University of Illinois Open Source
+# License.
+#
+#===------------------------------------------------------------------------===#
+#
+# Merge a revision into a project.
+#
+#===------------------------------------------------------------------------===#
+
+set -e
+
+rev=""
+proj=""
+
+function usage() {
+ echo "usage: `basename $0` [OPTIONS]"
+ echo " -proj PROJECT The project to merge the result into"
+ echo " -rev NUM The revision to merge into the project"
+}
+
+while [ $# -gt 0 ]; do
+ case $1 in
+ -rev | --rev | -r )
+ shift
+ rev=$1
+ ;;
+ -proj | --proj | -project | --project | -p )
+ shift
+ proj=$1
+ ;;
+ -h | -help | --help )
+ usage
+ ;;
+ * )
+ echo "unknown option: $1"
+ echo ""
+ usage
+ exit 1
+ ;;
+ esac
+ shift
+done
+
+if [ "x$rev" = "x" -o "x$proj" = "x" ]; then
+ echo "error: need to specify project and revision"
+ echo
+ usage
+ exit 1
+fi
+
+if ! svn ls http://llvm.org/svn/llvm-project/$proj/trunk > /dev/null 2>&1 ; then
+ echo "error: invalid project: $proj"
+ exit 1
+fi
+
+tempfile=`mktemp /tmp/merge.XXXXXX` || exit 1
+
+echo "Merging r$rev:" > $tempfile
+svn log -c $rev http://llvm.org/svn/llvm-project/$proj/trunk >> $tempfile 2>&1
+
+cd $proj.src
+echo "# Updating tree"
+svn up
+echo "# Merging r$rev into $proj"
+svn merge -c $rev https://llvm.org/svn/llvm-project/$proj/trunk . || exit 1
+echo "# Committing changes"
+svn commit -F $tempfile || exit 1
+rm -f $tempfile
+exit 0
diff --git a/utils/release/tag.sh b/utils/release/tag.sh
new file mode 100755
index 0000000..80da47a
--- /dev/null
+++ b/utils/release/tag.sh
@@ -0,0 +1,99 @@
+#!/bin/sh
+#===-- tag.sh - Tag the LLVM release candidates ----------------------------===#
+#
+# The LLVM Compiler Infrastructure
+#
+# This file is distributed under the University of Illinois Open Source
+# License.
+#
+#===------------------------------------------------------------------------===#
+#
+# Create branches and release candidates for the LLVM release.
+#
+#===------------------------------------------------------------------------===#
+
+set -e
+
+release=""
+rc=""
+
+base_url="https://llvm.org/svn/llvm-project"
+
+function usage() {
+ echo "usage: `basename $0` -release <num>"
+ echo "usage: `basename $0` -release <num> -rc <num>"
+ echo " "
+ echo " -release <num> The version number of the release"
+ echo " -rc <num> The release candidate number"
+ echo " -final Tag final release candidate"
+}
+
+function tag_version() {
+ set -x
+ for proj in llvm cfe dragonegg test-suite compiler-rt libcxx libcxxabi ; do
+ if ! svn ls $base_url/$proj/branches/release_$release > /dev/null 2>&1 ; then
+ svn copy -m "Creating release_$release branch" \
+ $base_url/$proj/trunk \
+ $base_url/$proj/branches/release_$release
+ fi
+ done
+ set +x
+}
+
+function tag_release_candidate() {
+ set -x
+ for proj in llvm cfe dragonegg test-suite compiler-rt libcxx libcxxabi ; do
+ if ! svn ls $base_url/$proj/tags/RELEASE_$release > /dev/null 2>&1 ; then
+ svn mkdir -m "Creating release directory for release_$release." $base_url/$proj/tags/RELEASE_$release
+ fi
+ if ! svn ls $base_url/$proj/tags/RELEASE_$release/$rc > /dev/null 2>&1 ; then
+ svn copy -m "Creating release candidate $rc from release_$release branch" \
+ $base_url/$proj/branches/release_$release \
+ $base_url/$proj/tags/RELEASE_$release/$rc
+ fi
+ done
+ set +x
+}
+
+while [ $# -gt 0 ]; do
+ case $1 in
+ -release | --release )
+ shift
+ release=$1
+ ;;
+ -rc | --rc )
+ shift
+ rc="rc$1"
+ ;;
+ -final | --final )
+ rc="final"
+ ;;
+ -h | --help | -help )
+ usage
+ exit 0
+ ;;
+ * )
+ echo "unknown option: $1"
+ usage
+ exit 1
+ ;;
+ esac
+ shift
+done
+
+if [ "x$release" = "x" ]; then
+ echo "error: need to specify a release version"
+ echo
+ usage
+ exit 1
+fi
+
+release=`echo $release | sed -e 's,\.,,g'`
+
+if [ "x$rc" = "x" ]; then
+ tag_version
+else
+ tag_release_candidate
+fi
+
+exit 1
diff --git a/utils/release/test-release.sh b/utils/release/test-release.sh
index 94217e5..ad1af5f 100755
--- a/utils/release/test-release.sh
+++ b/utils/release/test-release.sh
@@ -28,11 +28,14 @@ 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"
+do_compare="yes"
BuildDir="`pwd`"
function usage() {
@@ -40,15 +43,19 @@ function usage() {
echo ""
echo " -release X.Y The release number to test."
echo " -rc NUM The pre-release candidate number."
+ 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
@@ -60,7 +67,10 @@ while [ $# -gt 0 ]; do
;;
-rc | --rc | -RC | --RC )
shift
- RC=$1
+ RC="rc$1"
+ ;;
+ -final | --final )
+ RC=final
;;
-j* )
NumJobs="`echo $1 | sed -e 's,-j\([0-9]*\),\1,g'`"
@@ -82,6 +92,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"
;;
@@ -94,6 +110,9 @@ while [ $# -gt 0 ]; do
-test-asserts | --test-asserts )
do_asserts="yes"
;;
+ -no-compare-files | --no-compare-files )
+ do_compare="no"
+ ;;
-help | --help | -h | --h | -\? )
usage
exit 0
@@ -132,7 +151,7 @@ if [ -z "$NumJobs" ]; then
fi
# Go to the build directory (may be different from CWD)
-BuildDir=$BuildDir/rc$RC
+BuildDir=$BuildDir/$RC
mkdir -p $BuildDir
cd $BuildDir
@@ -140,16 +159,34 @@ cd $BuildDir
LogDir=$BuildDir/logs
mkdir -p $LogDir
-# Find a compilers.
-c_compiler="$CC"
-cxx_compiler="$CXX"
+# 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
+
# Make sure that the URLs are valid.
function check_valid_urls() {
for proj in $projects ; do
echo "# Validating $proj SVN URL"
- if ! svn ls $Base_url/$proj/tags/RELEASE_$Release_no_dot/rc$RC > /dev/null 2>&1 ; then
+ if ! svn ls $Base_url/$proj/tags/RELEASE_$Release_no_dot/$RC > /dev/null 2>&1 ; then
echo "llvm $Release release candidate $RC doesn't exist!"
exit 1
fi
@@ -162,7 +199,7 @@ function export_sources() {
for proj in $projects ; do
echo "# Exporting $proj $Release-RC$RC sources"
- if ! svn export -q $Base_url/$proj/tags/RELEASE_$Release_no_dot/rc$RC $proj.src ; then
+ if ! svn export -q $Base_url/$proj/tags/RELEASE_$Release_no_dot/$RC $proj.src ; then
echo "error: failed to export $proj project"
exit 1
fi
@@ -210,14 +247,15 @@ function configure_llvmCore() {
echo "# Using C++ compiler: $cxx_compiler"
cd $ObjDir
- echo "# Configuring llvm $Release-rc$RC $Flavor"
+ 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 \
+ 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
}
@@ -233,18 +271,40 @@ function build_llvmCore() {
fi
cd $ObjDir
- echo "# Compiling llvm $Release-rc$RC $Flavor"
+ 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$RC $Flavor"
+ 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"
@@ -280,81 +340,173 @@ for Flavor in $Flavors ; do
echo ""
echo ""
echo "********************************************************************************"
- echo " Release: $Release-rc$RC"
+ echo " Release: $Release-$RC"
echo " Build: $Flavor"
echo " System Info: "
echo " `uname -a`"
echo "********************************************************************************"
echo ""
- llvmCore_phase1_objdir=$BuildDir/Phase1/$Flavor/llvmCore-$Release-rc$RC.obj
- llvmCore_phase1_installdir=$BuildDir/Phase1/$Flavor/llvmCore-$Release-rc$RC.install
+ 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$RC.obj
- llvmCore_phase2_installdir=$BuildDir/Phase2/$Flavor/llvmCore-$Release-rc$RC.install
+ 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$RC.obj
- llvmCore_phase3_installdir=$BuildDir/Phase3/$Flavor/llvmCore-$Release-rc$RC.install
+ 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 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
-
- ############################################################################
- # 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
+ # 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
- ############################################################################
- # Testing: Test phase 3
- echo "# Testing - built with clang"
- test_llvmCore 3 $Flavor $llvmCore_phase3_objdir
+ # 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
- ############################################################################
- # 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
+ # 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
+) 2>&1 | tee $LogDir/testing.$Release-$RC.log
set +e
OpenPOWER on IntegriCloud