test-release.sh revision cbece8c2a6c06b3c14e35228b326e629f936c458
1495069e4df9785b1d6fb45971ca20479057b4558Bill Wendling#!/usr/bin/env bash
2b91c71299a819e2d20786b629376f119085e8b28Bill Wendling#===-- test-release.sh - Test the LLVM release candidates ------------------===#
3b91c71299a819e2d20786b629376f119085e8b28Bill Wendling#
4b91c71299a819e2d20786b629376f119085e8b28Bill Wendling#                     The LLVM Compiler Infrastructure
5b91c71299a819e2d20786b629376f119085e8b28Bill Wendling#
6b91c71299a819e2d20786b629376f119085e8b28Bill Wendling# This file is distributed under the University of Illinois Open Source
7b91c71299a819e2d20786b629376f119085e8b28Bill Wendling# License.
8b91c71299a819e2d20786b629376f119085e8b28Bill Wendling#
9b91c71299a819e2d20786b629376f119085e8b28Bill Wendling#===------------------------------------------------------------------------===#
10b91c71299a819e2d20786b629376f119085e8b28Bill Wendling#
11b91c71299a819e2d20786b629376f119085e8b28Bill Wendling# Download, build, and test the release candidate for an LLVM release.
12b91c71299a819e2d20786b629376f119085e8b28Bill Wendling#
13b91c71299a819e2d20786b629376f119085e8b28Bill Wendling#===------------------------------------------------------------------------===#
14b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
15783993e79502641d4f2ec82f3db78320b6837f4eBill Wendlingif [ `uname -s` = "FreeBSD" ]; then
16783993e79502641d4f2ec82f3db78320b6837f4eBill Wendling    MAKE=gmake
17783993e79502641d4f2ec82f3db78320b6837f4eBill Wendlingelse
18783993e79502641d4f2ec82f3db78320b6837f4eBill Wendling    MAKE=make
19783993e79502641d4f2ec82f3db78320b6837f4eBill Wendlingfi
20783993e79502641d4f2ec82f3db78320b6837f4eBill Wendling
2141adc5fb8bd0d81f07d93754868bd9f27b6fd9afBill Wendlingprojects="llvm cfe dragonegg test-suite"
221416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling
231416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling# Base SVN URL for the sources.
241416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill WendlingBase_url="http://llvm.org/svn/llvm-project"
251416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling
26b91c71299a819e2d20786b629376f119085e8b28Bill WendlingRelease=""
27b91c71299a819e2d20786b629376f119085e8b28Bill WendlingRelease_no_dot=""
28b91c71299a819e2d20786b629376f119085e8b28Bill WendlingRC=""
29b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingdo_checkout="yes"
30b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingdo_ada="no"
31c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sandsdo_clang="yes"
32c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sandsdo_dragonegg="no"
331416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendlingdo_fortran="no"
34c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sandsdo_objc="yes"
35b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingdo_64bit="yes"
361416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendlingdo_debug="no"
37a854f5d6f9394212319f4e00b6396900f6e62864Bill Wendlingdo_asserts="no"
381adc215ddcadcfaaa07a8e93f48a8f62c4561afeBill Wendlingdo_compare="yes"
39b91c71299a819e2d20786b629376f119085e8b28Bill WendlingBuildDir="`pwd`"
40b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
41b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingfunction usage() {
42b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo "usage: `basename $0` -release X.Y -rc NUM [OPTIONS]"
43b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo ""
44b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo " -release X.Y      The release number to test."
45b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo " -rc NUM           The pre-release candidate number."
4664acc57b23530aee37d224f48293cb764c4290a8Bill Wendling    echo " -final            The final release candidate."
47b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo " -j NUM            Number of compile jobs to run. [default: 3]"
48b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo " -build-dir DIR    Directory to perform testing in. [default: pwd]"
49b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo " -no-checkout      Don't checkout the sources from SVN."
50b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo " -no-64bit         Don't test the 64-bit version. [default: yes]"
51e7e9a60df6ea92460337569e24746f390cbd56e3Bill Wendling    echo " -enable-ada       Build Ada. [default: disable]"
52c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    echo " -disable-clang    Do not test clang. [default: enable]"
53c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    echo " -enable-dragonegg Test dragonegg. [default: disable]"
541416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling    echo " -enable-fortran   Enable Fortran build. [default: disable]"
55e7e9a60df6ea92460337569e24746f390cbd56e3Bill Wendling    echo " -disable-objc     Disable ObjC build. [default: enable]"
561416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling    echo " -test-debug       Test the debug build. [default: no]"
57a854f5d6f9394212319f4e00b6396900f6e62864Bill Wendling    echo " -test-asserts     Test with asserts on. [default: no]"
581adc215ddcadcfaaa07a8e93f48a8f62c4561afeBill Wendling    echo " -no-compare-files Don't test that phase 2 and 3 files are identical."
59b91c71299a819e2d20786b629376f119085e8b28Bill Wendling}
60b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
61b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingwhile [ $# -gt 0 ]; do
62b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    case $1 in
63b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        -release | --release )
64b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            shift
65b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            Release="$1"
66b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            Release_no_dot="`echo $1 | sed -e 's,\.,,'`"
67b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            ;;
68b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        -rc | --rc | -RC | --RC )
69b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            shift
7064acc57b23530aee37d224f48293cb764c4290a8Bill Wendling            RC="rc$1"
7164acc57b23530aee37d224f48293cb764c4290a8Bill Wendling            ;;
7264acc57b23530aee37d224f48293cb764c4290a8Bill Wendling        -final | --final )
7364acc57b23530aee37d224f48293cb764c4290a8Bill Wendling            RC=final
74b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            ;;
75b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        -j* )
76b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            NumJobs="`echo $1 | sed -e 's,-j\([0-9]*\),\1,g'`"
77b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            if [ -z "$NumJobs" ]; then
78b91c71299a819e2d20786b629376f119085e8b28Bill Wendling                shift
79b91c71299a819e2d20786b629376f119085e8b28Bill Wendling                NumJobs="$1"
80b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            fi
81b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            ;;
82b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        -build-dir | --build-dir | -builddir | --builddir )
83b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            shift
84b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            BuildDir="$1"
85b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            ;;
86b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        -no-checkout | --no-checkout )
87b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            do_checkout="no"
88b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            ;;
89b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        -no-64bit | --no-64bit )
90b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            do_64bit="no"
91b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            ;;
92e7e9a60df6ea92460337569e24746f390cbd56e3Bill Wendling        -enable-ada | --enable-ada )
93b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            do_ada="yes"
94b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            ;;
95c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        -disable-clang | --disable-clang )
96c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands            do_clang="no"
97c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands            ;;
98c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        -enable-dragonegg | --enable-dragonegg )
99c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands            do_dragonegg="yes"
100c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands            ;;
1011416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling        -enable-fortran | --enable-fortran )
1021416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling            do_fortran="yes"
1031416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling            ;;
104c248bbab04cb674bde5de8d6e2b2736a574fa0f8Bill Wendling        -disable-objc | --disable-objc )
105c248bbab04cb674bde5de8d6e2b2736a574fa0f8Bill Wendling            do_objc="no"
106c248bbab04cb674bde5de8d6e2b2736a574fa0f8Bill Wendling            ;;
1071416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling        -test-debug | --test-debug )
1081416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling            do_debug="yes"
109b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            ;;
110a854f5d6f9394212319f4e00b6396900f6e62864Bill Wendling        -test-asserts | --test-asserts )
111a854f5d6f9394212319f4e00b6396900f6e62864Bill Wendling            do_asserts="yes"
112a854f5d6f9394212319f4e00b6396900f6e62864Bill Wendling            ;;
1131adc215ddcadcfaaa07a8e93f48a8f62c4561afeBill Wendling        -no-compare-files | --no-compare-files )
1141adc215ddcadcfaaa07a8e93f48a8f62c4561afeBill Wendling            do_compare="no"
1151adc215ddcadcfaaa07a8e93f48a8f62c4561afeBill Wendling            ;;
116b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        -help | --help | -h | --h | -\? )
117b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            usage
118b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            exit 0
119b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            ;;
120b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        * )
121b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            echo "unknown option: $1"
122b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            usage
123b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            exit 1
124b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            ;;
125b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    esac
126b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    shift
127b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingdone
128b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
129b91c71299a819e2d20786b629376f119085e8b28Bill Wendling# Check required arguments.
130b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingif [ -z "$Release" ]; then
1311416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling    echo "error: no release number specified"
132b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    exit 1
133b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingfi
134b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingif [ -z "$RC" ]; then
1351416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling    echo "error: no release candidate number specified"
136b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    exit 1
137b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingfi
138b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
139d357d747ded75c3eae9238f23e1c05d621d915e8Duncan Sands# Figure out how many make processes to run.
140d357d747ded75c3eae9238f23e1c05d621d915e8Duncan Sandsif [ -z "$NumJobs" ]; then
141d357d747ded75c3eae9238f23e1c05d621d915e8Duncan Sands    NumJobs=`sysctl -n hw.activecpu 2> /dev/null || true`
142d357d747ded75c3eae9238f23e1c05d621d915e8Duncan Sandsfi
143d357d747ded75c3eae9238f23e1c05d621d915e8Duncan Sandsif [ -z "$NumJobs" ]; then
144d357d747ded75c3eae9238f23e1c05d621d915e8Duncan Sands    NumJobs=`sysctl -n hw.ncpu 2> /dev/null || true`
145d357d747ded75c3eae9238f23e1c05d621d915e8Duncan Sandsfi
146d357d747ded75c3eae9238f23e1c05d621d915e8Duncan Sandsif [ -z "$NumJobs" ]; then
147d357d747ded75c3eae9238f23e1c05d621d915e8Duncan Sands    NumJobs=`grep -c processor /proc/cpuinfo 2> /dev/null || true`
148d357d747ded75c3eae9238f23e1c05d621d915e8Duncan Sandsfi
149b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingif [ -z "$NumJobs" ]; then
150b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    NumJobs=3
151b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingfi
152b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
1531416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling# Go to the build directory (may be different from CWD)
15464acc57b23530aee37d224f48293cb764c4290a8Bill WendlingBuildDir=$BuildDir/$RC
1551416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendlingmkdir -p $BuildDir
1561416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendlingcd $BuildDir
157b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
158f0bf9dfc1f7755a6233e41fd6f259c4ee08a40dcDuncan Sands# Location of log files.
1591416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill WendlingLogDir=$BuildDir/logs
160f0bf9dfc1f7755a6233e41fd6f259c4ee08a40dcDuncan Sandsmkdir -p $LogDir
161f0bf9dfc1f7755a6233e41fd6f259c4ee08a40dcDuncan Sands
162c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands# Find compilers.
163c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sandsif [ "$do_dragonegg" = "yes" ]; then
164c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    gcc_compiler="$GCC"
165c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    if [ -z "$gcc_compiler" ]; then
166c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        gcc_compiler="`which gcc`"
167c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        if [ -z "$gcc_compiler" ]; then
168c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands            echo "error: cannot find gcc to use with dragonegg"
169c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands            exit 1
170c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        fi
171c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    fi
172c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands
173c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    gxx_compiler="$GXX"
174c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    if [ -z "$gxx_compiler" ]; then
175c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        gxx_compiler="`which g++`"
176c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        if [ -z "$gxx_compiler" ]; then
177c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands            echo "error: cannot find g++ to use with dragonegg"
178c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands            exit 1
179c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        fi
180c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    fi
181c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sandsfi
182c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands
183b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
184b91c71299a819e2d20786b629376f119085e8b28Bill Wendling# Make sure that the URLs are valid.
185b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingfunction check_valid_urls() {
1861416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling    for proj in $projects ; do
1871416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling        echo "# Validating $proj SVN URL"
1881416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling
18964acc57b23530aee37d224f48293cb764c4290a8Bill Wendling        if ! svn ls $Base_url/$proj/tags/RELEASE_$Release_no_dot/$RC > /dev/null 2>&1 ; then
1901416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling            echo "llvm $Release release candidate $RC doesn't exist!"
1911416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling            exit 1
1921416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling        fi
1931416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling    done
194b91c71299a819e2d20786b629376f119085e8b28Bill Wendling}
195b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
196b91c71299a819e2d20786b629376f119085e8b28Bill Wendling# Export sources to the the build directory.
197b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingfunction export_sources() {
198b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    check_valid_urls
199b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
2001416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling    for proj in $projects ; do
2011416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling        echo "# Exporting $proj $Release-RC$RC sources"
20264acc57b23530aee37d224f48293cb764c4290a8Bill Wendling        if ! svn export -q $Base_url/$proj/tags/RELEASE_$Release_no_dot/$RC $proj.src ; then
2031416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling            echo "error: failed to export $proj project"
2041416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling            exit 1
2051416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling        fi
2061416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling    done
2071416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling
2081416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling    echo "# Creating symlinks"
2091416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling    cd $BuildDir/llvm.src/tools
2101416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling    if [ ! -h clang ]; then
211ac6d7e49117fc12b81eb9dcddda08debedcf2360Bill Wendling        ln -s ../../cfe.src clang
2121416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling    fi
2131416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling    cd $BuildDir/llvm.src/projects
2141416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling    if [ ! -h llvm-test ]; then
215ac6d7e49117fc12b81eb9dcddda08debedcf2360Bill Wendling        ln -s ../../test-suite.src llvm-test
2161416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling    fi
2171416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling    cd $BuildDir
218b91c71299a819e2d20786b629376f119085e8b28Bill Wendling}
219b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
220b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingfunction configure_llvmCore() {
221b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    Phase="$1"
222b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    Flavor="$2"
223b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    ObjDir="$3"
224b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    InstallDir="$4"
225b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
226b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    case $Flavor in
227b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        Release | Release-64 )
228b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            Optimized="yes"
2298a6e53e1162663dd2bc1da783fe2ff5947fba9e0Duncan Sands            Assertions="no"
230b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            ;;
2318a6e53e1162663dd2bc1da783fe2ff5947fba9e0Duncan Sands        Release+Asserts )
232b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            Optimized="yes"
2338a6e53e1162663dd2bc1da783fe2ff5947fba9e0Duncan Sands            Assertions="yes"
234b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            ;;
235b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        Debug )
236b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            Optimized="no"
237b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            Assertions="yes"
238b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            ;;
239b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        * )
2401416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling            echo "# Invalid flavor '$Flavor'"
241b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            echo ""
242b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            return
243b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            ;;
244b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    esac
245b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
2461416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling    echo "# Using C compiler: $c_compiler"
2471416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling    echo "# Using C++ compiler: $cxx_compiler"
2481416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling
249b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    cd $ObjDir
25064acc57b23530aee37d224f48293cb764c4290a8Bill Wendling    echo "# Configuring llvm $Release-$RC $Flavor"
2511416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling    echo "# $BuildDir/llvm.src/configure --prefix=$InstallDir \
252b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        --enable-optimized=$Optimized \
2531416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling        --enable-assertions=$Assertions"
254c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    env CC="$c_compiler" CXX="$cxx_compiler" \
2551416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling    $BuildDir/llvm.src/configure --prefix=$InstallDir \
256b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        --enable-optimized=$Optimized \
257b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        --enable-assertions=$Assertions \
25858fba239e472b322633447482013aeae599d56beDuncan Sands        --disable-timestamps \
2591416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling        2>&1 | tee $LogDir/llvm.configure-Phase$Phase-$Flavor.log
2601416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling    cd $BuildDir
261b91c71299a819e2d20786b629376f119085e8b28Bill Wendling}
262b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
263b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingfunction build_llvmCore() {
264b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    Phase="$1"
265b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    Flavor="$2"
266b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    ObjDir="$3"
267b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    ExtraOpts=""
268b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
269b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    if [ "$Flavor" = "Release-64" ]; then
270b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        ExtraOpts="EXTRA_OPTIONS=-m64"
271b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    fi
272b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
273b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    cd $ObjDir
27464acc57b23530aee37d224f48293cb764c4290a8Bill Wendling    echo "# Compiling llvm $Release-$RC $Flavor"
275783993e79502641d4f2ec82f3db78320b6837f4eBill Wendling    echo "# ${MAKE} -j $NumJobs VERBOSE=1 $ExtraOpts"
276783993e79502641d4f2ec82f3db78320b6837f4eBill Wendling    ${MAKE} -j $NumJobs VERBOSE=1 $ExtraOpts \
2771416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling        2>&1 | tee $LogDir/llvm.make-Phase$Phase-$Flavor.log
278b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
27964acc57b23530aee37d224f48293cb764c4290a8Bill Wendling    echo "# Installing llvm $Release-$RC $Flavor"
280783993e79502641d4f2ec82f3db78320b6837f4eBill Wendling    echo "# ${MAKE} install"
281783993e79502641d4f2ec82f3db78320b6837f4eBill Wendling    ${MAKE} install \
2821416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling        2>&1 | tee $LogDir/llvm.install-Phase$Phase-$Flavor.log
2831416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling    cd $BuildDir
284b91c71299a819e2d20786b629376f119085e8b28Bill Wendling}
285b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
286c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sandsfunction build_dragonegg() {
287c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    Phase="$1"
288c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    Flavor="$2"
289c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    LLVMInstallDir="$3"
290c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    DragonEggObjDir="$4"
291c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    LLVM_CONFIG=$LLVMInstallDir/bin/llvm-config
292c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    TOP_DIR=$BuildDir/dragonegg.src
293c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands
294c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    echo "# Targeted compiler: $gcc_compiler"
295c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands
296c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    cd $DragonEggObjDir
29764acc57b23530aee37d224f48293cb764c4290a8Bill Wendling    echo "# Compiling phase $Phase dragonegg $Release-$RC $Flavor"
298c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    echo -n "# CXX=$cxx_compiler TOP_DIR=$TOP_DIR GCC=$gcc_compiler "
299c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    echo -n "LLVM_CONFIG=$LLVM_CONFIG ${MAKE} -f $TOP_DIR/Makefile "
300c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    echo "-j $NumJobs VERBOSE=1"
301c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    CXX="$cxx_compiler" TOP_DIR="$TOP_DIR" GCC="$gcc_compiler" \
302c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    LLVM_CONFIG="$LLVM_CONFIG" ${MAKE} -f $TOP_DIR/Makefile \
303c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        -j $NumJobs VERBOSE=1 \
304c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands            2>&1 | tee $LogDir/dragonegg-Phase$Phase-$Flavor.log
305c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    cd $BuildDir
306c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands}
307c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands
308b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingfunction test_llvmCore() {
309b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    Phase="$1"
310b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    Flavor="$2"
311b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    ObjDir="$3"
312b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
313b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    cd $ObjDir
314783993e79502641d4f2ec82f3db78320b6837f4eBill Wendling    ${MAKE} -k check-all \
3151416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling        2>&1 | tee $LogDir/llvm.check-Phase$Phase-$Flavor.log
316783993e79502641d4f2ec82f3db78320b6837f4eBill Wendling    ${MAKE} -k unittests \
31741adc5fb8bd0d81f07d93754868bd9f27b6fd9afBill Wendling        2>&1 | tee $LogDir/llvm.unittests-Phase$Phase-$Flavor.log
3181416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling    cd $BuildDir
319b91c71299a819e2d20786b629376f119085e8b28Bill Wendling}
320b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
321630243a8c2d40df137b64246b7ed4363962fd9b4Bill Wendlingset -e                          # Exit if any command fails
322630243a8c2d40df137b64246b7ed4363962fd9b4Bill Wendling
323b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingif [ "$do_checkout" = "yes" ]; then
324b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    export_sources
325b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingfi
326b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
327f0bf9dfc1f7755a6233e41fd6f259c4ee08a40dcDuncan Sands(
328a854f5d6f9394212319f4e00b6396900f6e62864Bill WendlingFlavors="Release"
3291416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendlingif [ "$do_debug" = "yes" ]; then
3301416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling    Flavors="Debug $Flavors"
3311416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendlingfi
332a854f5d6f9394212319f4e00b6396900f6e62864Bill Wendlingif [ "$do_asserts" = "yes" ]; then
333a854f5d6f9394212319f4e00b6396900f6e62864Bill Wendling    Flavors="$Flavors Release+Asserts"
334a854f5d6f9394212319f4e00b6396900f6e62864Bill Wendlingfi
335b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingif [ "$do_64bit" = "yes" ]; then
336b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    Flavors="$Flavors Release-64"
337b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingfi
338b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
339b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingfor Flavor in $Flavors ; do
340b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo ""
341b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo ""
342b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo "********************************************************************************"
34364acc57b23530aee37d224f48293cb764c4290a8Bill Wendling    echo "  Release:     $Release-$RC"
344b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo "  Build:       $Flavor"
345b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo "  System Info: "
346b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo "    `uname -a`"
347b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo "********************************************************************************"
348b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo ""
349b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
350fbc0dec7b4dc94a667c2b8af6748a742da95353dDuncan Sands    c_compiler="$CC"
351fbc0dec7b4dc94a667c2b8af6748a742da95353dDuncan Sands    cxx_compiler="$CXX"
352fbc0dec7b4dc94a667c2b8af6748a742da95353dDuncan Sands
35364acc57b23530aee37d224f48293cb764c4290a8Bill Wendling    llvmCore_phase1_objdir=$BuildDir/Phase1/$Flavor/llvmCore-$Release-$RC.obj
35464acc57b23530aee37d224f48293cb764c4290a8Bill Wendling    llvmCore_phase1_installdir=$BuildDir/Phase1/$Flavor/llvmCore-$Release-$RC.install
35564acc57b23530aee37d224f48293cb764c4290a8Bill Wendling    dragonegg_phase1_objdir=$BuildDir/Phase1/$Flavor/DragonEgg-$Release-$RC.obj
356b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
35764acc57b23530aee37d224f48293cb764c4290a8Bill Wendling    llvmCore_phase2_objdir=$BuildDir/Phase2/$Flavor/llvmCore-$Release-$RC.obj
35864acc57b23530aee37d224f48293cb764c4290a8Bill Wendling    llvmCore_phase2_installdir=$BuildDir/Phase2/$Flavor/llvmCore-$Release-$RC.install
35964acc57b23530aee37d224f48293cb764c4290a8Bill Wendling    llvmCore_de_phase2_objdir=$BuildDir/Phase2/$Flavor/llvmCore-DragonEgg-$Release-$RC.obj
36064acc57b23530aee37d224f48293cb764c4290a8Bill Wendling    llvmCore_de_phase2_installdir=$BuildDir/Phase2/$Flavor/llvmCore-DragonEgg-$Release-$RC.install
36164acc57b23530aee37d224f48293cb764c4290a8Bill Wendling    dragonegg_phase2_objdir=$BuildDir/Phase2/$Flavor/DragonEgg-$Release-$RC.obj
362b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
36364acc57b23530aee37d224f48293cb764c4290a8Bill Wendling    llvmCore_phase3_objdir=$BuildDir/Phase3/$Flavor/llvmCore-$Release-$RC.obj
36464acc57b23530aee37d224f48293cb764c4290a8Bill Wendling    llvmCore_phase3_installdir=$BuildDir/Phase3/$Flavor/llvmCore-$Release-$RC.install
36564acc57b23530aee37d224f48293cb764c4290a8Bill Wendling    llvmCore_de_phase3_objdir=$BuildDir/Phase3/$Flavor/llvmCore-DragonEgg-$Release-$RC.obj
36664acc57b23530aee37d224f48293cb764c4290a8Bill Wendling    llvmCore_de_phase3_installdir=$BuildDir/Phase3/$Flavor/llvmCore-DragonEgg-$Release-$RC.install
36764acc57b23530aee37d224f48293cb764c4290a8Bill Wendling    dragonegg_phase3_objdir=$BuildDir/Phase3/$Flavor/DragonEgg-$Release-$RC.obj
368a854f5d6f9394212319f4e00b6396900f6e62864Bill Wendling
369b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    rm -rf $llvmCore_phase1_objdir
370b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    rm -rf $llvmCore_phase1_installdir
371c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    rm -rf $dragonegg_phase1_objdir
372c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands
373b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    rm -rf $llvmCore_phase2_objdir
374b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    rm -rf $llvmCore_phase2_installdir
375c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    rm -rf $llvmCore_de_phase2_objdir
376c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    rm -rf $llvmCore_de_phase2_installdir
377c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    rm -rf $dragonegg_phase2_objdir
378c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands
379a854f5d6f9394212319f4e00b6396900f6e62864Bill Wendling    rm -rf $llvmCore_phase3_objdir
380a854f5d6f9394212319f4e00b6396900f6e62864Bill Wendling    rm -rf $llvmCore_phase3_installdir
381c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    rm -rf $llvmCore_de_phase3_objdir
382c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    rm -rf $llvmCore_de_phase3_installdir
383c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    rm -rf $dragonegg_phase3_objdir
384b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
385b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    mkdir -p $llvmCore_phase1_objdir
386b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    mkdir -p $llvmCore_phase1_installdir
387c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    mkdir -p $dragonegg_phase1_objdir
388c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands
389b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    mkdir -p $llvmCore_phase2_objdir
390b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    mkdir -p $llvmCore_phase2_installdir
391c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    mkdir -p $llvmCore_de_phase2_objdir
392c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    mkdir -p $llvmCore_de_phase2_installdir
393c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    mkdir -p $dragonegg_phase2_objdir
394c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands
395a854f5d6f9394212319f4e00b6396900f6e62864Bill Wendling    mkdir -p $llvmCore_phase3_objdir
396a854f5d6f9394212319f4e00b6396900f6e62864Bill Wendling    mkdir -p $llvmCore_phase3_installdir
397c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    mkdir -p $llvmCore_de_phase3_objdir
398c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    mkdir -p $llvmCore_de_phase3_installdir
399c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    mkdir -p $dragonegg_phase3_objdir
400b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
401b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    ############################################################################
402c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    # Phase 1: Build llvmCore and clang
403b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo "# Phase 1: Building llvmCore"
404b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    configure_llvmCore 1 $Flavor \
4051416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling        $llvmCore_phase1_objdir $llvmCore_phase1_installdir
406b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    build_llvmCore 1 $Flavor \
407b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        $llvmCore_phase1_objdir
408b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
409c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    # Test clang
410c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    if [ "$do_clang" = "yes" ]; then
4111adc215ddcadcfaaa07a8e93f48a8f62c4561afeBill Wendling        ########################################################################
412c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        # Phase 2: Build llvmCore with newly built clang from phase 1.
413c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        c_compiler=$llvmCore_phase1_installdir/bin/clang
414c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        cxx_compiler=$llvmCore_phase1_installdir/bin/clang++
415c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        echo "# Phase 2: Building llvmCore"
416c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        configure_llvmCore 2 $Flavor \
417c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands            $llvmCore_phase2_objdir $llvmCore_phase2_installdir
418c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        build_llvmCore 2 $Flavor \
419c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands            $llvmCore_phase2_objdir
420c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands
4211adc215ddcadcfaaa07a8e93f48a8f62c4561afeBill Wendling        ########################################################################
422c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        # Phase 3: Build llvmCore with newly built clang from phase 2.
423c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        c_compiler=$llvmCore_phase2_installdir/bin/clang
424c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        cxx_compiler=$llvmCore_phase2_installdir/bin/clang++
425c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        echo "# Phase 3: Building llvmCore"
426c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        configure_llvmCore 3 $Flavor \
427c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands            $llvmCore_phase3_objdir $llvmCore_phase3_installdir
428c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        build_llvmCore 3 $Flavor \
429c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands            $llvmCore_phase3_objdir
430c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands
4311adc215ddcadcfaaa07a8e93f48a8f62c4561afeBill Wendling        ########################################################################
432c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        # Testing: Test phase 3
433c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        echo "# Testing - built with clang"
434c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        test_llvmCore 3 $Flavor $llvmCore_phase3_objdir
435c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands
4361adc215ddcadcfaaa07a8e93f48a8f62c4561afeBill Wendling        ########################################################################
4371adc215ddcadcfaaa07a8e93f48a8f62c4561afeBill Wendling        # Compare .o files between Phase2 and Phase3 and report which ones
4381adc215ddcadcfaaa07a8e93f48a8f62c4561afeBill Wendling        # differ.
4391adc215ddcadcfaaa07a8e93f48a8f62c4561afeBill Wendling        if [ "$do_compare" = "yes" ]; then
440cbece8c2a6c06b3c14e35228b326e629f936c458Bill Wendling            echo
441cbece8c2a6c06b3c14e35228b326e629f936c458Bill Wendling            echo "# Comparing Phase 2 and Phase 3 files"
442cbece8c2a6c06b3c14e35228b326e629f936c458Bill Wendling            for o in `find $llvmCore_phase2_objdir -name '*.o'` ; do
443cbece8c2a6c06b3c14e35228b326e629f936c458Bill Wendling                p3=`echo $o | sed -e 's,Phase2,Phase3,'`
444cbece8c2a6c06b3c14e35228b326e629f936c458Bill Wendling                if ! cmp --ignore-initial=16 $o $p3 > /dev/null 2>&1 ; then
445cbece8c2a6c06b3c14e35228b326e629f936c458Bill Wendling                    echo "file `basename $o` differs between phase 2 and phase 3"
446cbece8c2a6c06b3c14e35228b326e629f936c458Bill Wendling                fi
447cbece8c2a6c06b3c14e35228b326e629f936c458Bill Wendling            done
4481adc215ddcadcfaaa07a8e93f48a8f62c4561afeBill Wendling        fi
449c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    fi
450a854f5d6f9394212319f4e00b6396900f6e62864Bill Wendling
451c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    # Test dragonegg
452c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    if [ "$do_dragonegg" = "yes" ]; then
453c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        # Build dragonegg using the targeted gcc.  This isn't necessary, but
454c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        # helps avoid using broken versions of gcc (which are legion), tests
455c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        # that the targeted gcc is basically sane and is consistent with the
456c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        # later phases in which the targeted gcc + dragonegg are used.
457c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        c_compiler="$gcc_compiler"
458c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        cxx_compiler="$gxx_compiler"
459c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        build_dragonegg 1 $Flavor $llvmCore_phase1_installdir $dragonegg_phase1_objdir
460c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands
4611adc215ddcadcfaaa07a8e93f48a8f62c4561afeBill Wendling        ########################################################################
462c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        # Phase 2: Build llvmCore with newly built dragonegg from phase 1.
463c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        c_compiler="$gcc_compiler -fplugin=$dragonegg_phase1_objdir/dragonegg.so"
464c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        cxx_compiler="$gxx_compiler -fplugin=$dragonegg_phase1_objdir/dragonegg.so"
465c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        echo "# Phase 2: Building llvmCore with dragonegg"
466c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        configure_llvmCore 2 $Flavor \
467c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands            $llvmCore_de_phase2_objdir $llvmCore_de_phase2_installdir
468c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        build_llvmCore 2 $Flavor \
469c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands            $llvmCore_de_phase2_objdir
470c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        build_dragonegg 2 $Flavor $llvmCore_de_phase2_installdir $dragonegg_phase2_objdir
471c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands
4721adc215ddcadcfaaa07a8e93f48a8f62c4561afeBill Wendling        ########################################################################
473c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        # Phase 3: Build llvmCore with newly built clang from phase 2.
474c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        c_compiler="$gcc_compiler -fplugin=$dragonegg_phase2_objdir/dragonegg.so"
475c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        cxx_compiler="$gxx_compiler -fplugin=$dragonegg_phase2_objdir/dragonegg.so"
476c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        echo "# Phase 3: Building llvmCore with dragonegg"
477c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        configure_llvmCore 3 $Flavor \
478c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands            $llvmCore_de_phase3_objdir $llvmCore_de_phase3_installdir
479c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        build_llvmCore 3 $Flavor \
480c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands            $llvmCore_de_phase3_objdir
481c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        build_dragonegg 3 $Flavor $llvmCore_de_phase3_installdir $dragonegg_phase3_objdir
482c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands
4831adc215ddcadcfaaa07a8e93f48a8f62c4561afeBill Wendling        ########################################################################
484c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        # Testing: Test phase 3
485c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        c_compiler="$gcc_compiler -fplugin=$dragonegg_phase3_objdir/dragonegg.so"
486c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        cxx_compiler="$gxx_compiler -fplugin=$dragonegg_phase3_objdir/dragonegg.so"
487c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        echo "# Testing - built with dragonegg"
488c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        test_llvmCore 3 $Flavor $llvmCore_de_phase3_objdir
489c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands
4901adc215ddcadcfaaa07a8e93f48a8f62c4561afeBill Wendling        ########################################################################
491c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        # Compare .o files between Phase2 and Phase3 and report which ones differ.
492c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        echo
493c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        echo "# Comparing Phase 2 and Phase 3 files"
49419595dc4d0cb2495c37828530f04b7e47cf0837fDuncan Sands        for o in `find $llvmCore_de_phase2_objdir -name '*.o'` \
49519595dc4d0cb2495c37828530f04b7e47cf0837fDuncan Sands          `find $dragonegg_phase2_objdir -name '*.o'` ; do
496c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands            p3=`echo $o | sed -e 's,Phase2,Phase3,'`
497c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands            if ! cmp --ignore-initial=16 $o $p3 > /dev/null 2>&1 ; then
498c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands                echo "file `basename $o` differs between dragonegg phase 2 and phase 3"
499c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands            fi
500c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        done
501c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    fi
502a854f5d6f9394212319f4e00b6396900f6e62864Bill Wendling
503c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    # Otherwise just test the core.
504c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    if [ "$do_clang" != "yes" -a "$do_dragonegg" != "yes" ]; then
505c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        echo "# Testing - built with system compiler"
506c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        test_llvmCore 1 $Flavor $llvmCore_phase1_objdir
507c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    fi
508b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingdone
50964acc57b23530aee37d224f48293cb764c4290a8Bill Wendling) 2>&1 | tee $LogDir/testing.$Release-$RC.log
510b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
511630243a8c2d40df137b64246b7ed4363962fd9b4Bill Wendlingset +e
512630243a8c2d40df137b64246b7ed4363962fd9b4Bill Wendling
513b91c71299a819e2d20786b629376f119085e8b28Bill Wendling# Woo hoo!
514b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingecho "### Testing Finished ###"
515f0bf9dfc1f7755a6233e41fd6f259c4ee08a40dcDuncan Sandsecho "### Logs: $LogDir"
516b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingexit 0
517