test-release.sh revision 58fba239e472b322633447482013aeae599d56be
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"
38b91c71299a819e2d20786b629376f119085e8b28Bill WendlingBuildDir="`pwd`"
39b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
40b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingfunction usage() {
41b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo "usage: `basename $0` -release X.Y -rc NUM [OPTIONS]"
42b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo ""
43b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo " -release X.Y      The release number to test."
44b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo " -rc NUM           The pre-release candidate number."
45b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo " -j NUM            Number of compile jobs to run. [default: 3]"
46b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo " -build-dir DIR    Directory to perform testing in. [default: pwd]"
47b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo " -no-checkout      Don't checkout the sources from SVN."
48b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo " -no-64bit         Don't test the 64-bit version. [default: yes]"
49e7e9a60df6ea92460337569e24746f390cbd56e3Bill Wendling    echo " -enable-ada       Build Ada. [default: disable]"
50c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    echo " -disable-clang    Do not test clang. [default: enable]"
51c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    echo " -enable-dragonegg Test dragonegg. [default: disable]"
521416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling    echo " -enable-fortran   Enable Fortran build. [default: disable]"
53e7e9a60df6ea92460337569e24746f390cbd56e3Bill Wendling    echo " -disable-objc     Disable ObjC build. [default: enable]"
541416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling    echo " -test-debug       Test the debug build. [default: no]"
55a854f5d6f9394212319f4e00b6396900f6e62864Bill Wendling    echo " -test-asserts     Test with asserts on. [default: no]"
56b91c71299a819e2d20786b629376f119085e8b28Bill Wendling}
57b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
58b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingwhile [ $# -gt 0 ]; do
59b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    case $1 in
60b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        -release | --release )
61b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            shift
62b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            Release="$1"
63b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            Release_no_dot="`echo $1 | sed -e 's,\.,,'`"
64b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            ;;
65b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        -rc | --rc | -RC | --RC )
66b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            shift
67b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            RC=$1
68b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            ;;
69b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        -j* )
70b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            NumJobs="`echo $1 | sed -e 's,-j\([0-9]*\),\1,g'`"
71b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            if [ -z "$NumJobs" ]; then
72b91c71299a819e2d20786b629376f119085e8b28Bill Wendling                shift
73b91c71299a819e2d20786b629376f119085e8b28Bill Wendling                NumJobs="$1"
74b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            fi
75b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            ;;
76b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        -build-dir | --build-dir | -builddir | --builddir )
77b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            shift
78b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            BuildDir="$1"
79b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            ;;
80b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        -no-checkout | --no-checkout )
81b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            do_checkout="no"
82b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            ;;
83b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        -no-64bit | --no-64bit )
84b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            do_64bit="no"
85b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            ;;
86e7e9a60df6ea92460337569e24746f390cbd56e3Bill Wendling        -enable-ada | --enable-ada )
87b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            do_ada="yes"
88b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            ;;
89c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        -disable-clang | --disable-clang )
90c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands            do_clang="no"
91c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands            ;;
92c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        -enable-dragonegg | --enable-dragonegg )
93c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands            do_dragonegg="yes"
94c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands            ;;
951416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling        -enable-fortran | --enable-fortran )
961416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling            do_fortran="yes"
971416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling            ;;
98c248bbab04cb674bde5de8d6e2b2736a574fa0f8Bill Wendling        -disable-objc | --disable-objc )
99c248bbab04cb674bde5de8d6e2b2736a574fa0f8Bill Wendling            do_objc="no"
100c248bbab04cb674bde5de8d6e2b2736a574fa0f8Bill Wendling            ;;
1011416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling        -test-debug | --test-debug )
1021416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling            do_debug="yes"
103b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            ;;
104a854f5d6f9394212319f4e00b6396900f6e62864Bill Wendling        -test-asserts | --test-asserts )
105a854f5d6f9394212319f4e00b6396900f6e62864Bill Wendling            do_asserts="yes"
106a854f5d6f9394212319f4e00b6396900f6e62864Bill Wendling            ;;
107b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        -help | --help | -h | --h | -\? )
108b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            usage
109b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            exit 0
110b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            ;;
111b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        * )
112b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            echo "unknown option: $1"
113b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            usage
114b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            exit 1
115b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            ;;
116b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    esac
117b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    shift
118b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingdone
119b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
120b91c71299a819e2d20786b629376f119085e8b28Bill Wendling# Check required arguments.
121b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingif [ -z "$Release" ]; then
1221416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling    echo "error: no release number specified"
123b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    exit 1
124b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingfi
125b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingif [ -z "$RC" ]; then
1261416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling    echo "error: no release candidate number specified"
127b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    exit 1
128b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingfi
129b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
130d357d747ded75c3eae9238f23e1c05d621d915e8Duncan Sands# Figure out how many make processes to run.
131d357d747ded75c3eae9238f23e1c05d621d915e8Duncan Sandsif [ -z "$NumJobs" ]; then
132d357d747ded75c3eae9238f23e1c05d621d915e8Duncan Sands    NumJobs=`sysctl -n hw.activecpu 2> /dev/null || true`
133d357d747ded75c3eae9238f23e1c05d621d915e8Duncan Sandsfi
134d357d747ded75c3eae9238f23e1c05d621d915e8Duncan Sandsif [ -z "$NumJobs" ]; then
135d357d747ded75c3eae9238f23e1c05d621d915e8Duncan Sands    NumJobs=`sysctl -n hw.ncpu 2> /dev/null || true`
136d357d747ded75c3eae9238f23e1c05d621d915e8Duncan Sandsfi
137d357d747ded75c3eae9238f23e1c05d621d915e8Duncan Sandsif [ -z "$NumJobs" ]; then
138d357d747ded75c3eae9238f23e1c05d621d915e8Duncan Sands    NumJobs=`grep -c processor /proc/cpuinfo 2> /dev/null || true`
139d357d747ded75c3eae9238f23e1c05d621d915e8Duncan Sandsfi
140b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingif [ -z "$NumJobs" ]; then
141b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    NumJobs=3
142b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingfi
143b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
1441416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling# Go to the build directory (may be different from CWD)
1451416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill WendlingBuildDir=$BuildDir/rc$RC
1461416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendlingmkdir -p $BuildDir
1471416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendlingcd $BuildDir
148b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
149f0bf9dfc1f7755a6233e41fd6f259c4ee08a40dcDuncan Sands# Location of log files.
1501416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill WendlingLogDir=$BuildDir/logs
151f0bf9dfc1f7755a6233e41fd6f259c4ee08a40dcDuncan Sandsmkdir -p $LogDir
152f0bf9dfc1f7755a6233e41fd6f259c4ee08a40dcDuncan Sands
153c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands# Find compilers.
154c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sandsif [ "$do_dragonegg" = "yes" ]; then
155c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    gcc_compiler="$GCC"
156c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    if [ -z "$gcc_compiler" ]; then
157c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        gcc_compiler="`which gcc`"
158c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        if [ -z "$gcc_compiler" ]; then
159c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands            echo "error: cannot find gcc to use with dragonegg"
160c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands            exit 1
161c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        fi
162c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    fi
163c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands
164c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    gxx_compiler="$GXX"
165c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    if [ -z "$gxx_compiler" ]; then
166c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        gxx_compiler="`which g++`"
167c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        if [ -z "$gxx_compiler" ]; then
168c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands            echo "error: cannot find g++ to use with dragonegg"
169c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands            exit 1
170c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        fi
171c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    fi
172c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sandsfi
173c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands
174b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
175b91c71299a819e2d20786b629376f119085e8b28Bill Wendling# Make sure that the URLs are valid.
176b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingfunction check_valid_urls() {
1771416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling    for proj in $projects ; do
1781416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling        echo "# Validating $proj SVN URL"
1791416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling
180540d5b7406a9aeb75492adfa58f0b5b4a2b9442aBill Wendling        if ! svn ls $Base_url/$proj/tags/RELEASE_$Release_no_dot/rc$RC > /dev/null 2>&1 ; then
1811416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling            echo "llvm $Release release candidate $RC doesn't exist!"
1821416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling            exit 1
1831416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling        fi
1841416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling    done
185b91c71299a819e2d20786b629376f119085e8b28Bill Wendling}
186b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
187b91c71299a819e2d20786b629376f119085e8b28Bill Wendling# Export sources to the the build directory.
188b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingfunction export_sources() {
189b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    check_valid_urls
190b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
1911416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling    for proj in $projects ; do
1921416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling        echo "# Exporting $proj $Release-RC$RC sources"
1931416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling        if ! svn export -q $Base_url/$proj/tags/RELEASE_$Release_no_dot/rc$RC $proj.src ; then
1941416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling            echo "error: failed to export $proj project"
1951416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling            exit 1
1961416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling        fi
1971416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling    done
1981416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling
1991416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling    echo "# Creating symlinks"
2001416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling    cd $BuildDir/llvm.src/tools
2011416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling    if [ ! -h clang ]; then
2021416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling        ln -s $BuildDir/cfe.src clang
2031416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling    fi
2041416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling    cd $BuildDir/llvm.src/projects
2051416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling    if [ ! -h llvm-test ]; then
2061416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling        ln -s $BuildDir/test-suite.src llvm-test
2071416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling    fi
2081416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling    cd $BuildDir
209b91c71299a819e2d20786b629376f119085e8b28Bill Wendling}
210b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
211b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingfunction configure_llvmCore() {
212b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    Phase="$1"
213b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    Flavor="$2"
214b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    ObjDir="$3"
215b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    InstallDir="$4"
216b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
217b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    case $Flavor in
218b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        Release | Release-64 )
219b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            Optimized="yes"
2208a6e53e1162663dd2bc1da783fe2ff5947fba9e0Duncan Sands            Assertions="no"
221b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            ;;
2228a6e53e1162663dd2bc1da783fe2ff5947fba9e0Duncan Sands        Release+Asserts )
223b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            Optimized="yes"
2248a6e53e1162663dd2bc1da783fe2ff5947fba9e0Duncan Sands            Assertions="yes"
225b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            ;;
226b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        Debug )
227b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            Optimized="no"
228b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            Assertions="yes"
229b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            ;;
230b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        * )
2311416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling            echo "# Invalid flavor '$Flavor'"
232b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            echo ""
233b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            return
234b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            ;;
235b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    esac
236b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
2371416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling    echo "# Using C compiler: $c_compiler"
2381416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling    echo "# Using C++ compiler: $cxx_compiler"
2391416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling
240b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    cd $ObjDir
241b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo "# Configuring llvm $Release-rc$RC $Flavor"
2421416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling    echo "# $BuildDir/llvm.src/configure --prefix=$InstallDir \
243b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        --enable-optimized=$Optimized \
2441416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling        --enable-assertions=$Assertions"
245c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    env CC="$c_compiler" CXX="$cxx_compiler" \
2461416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling    $BuildDir/llvm.src/configure --prefix=$InstallDir \
247b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        --enable-optimized=$Optimized \
248b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        --enable-assertions=$Assertions \
24958fba239e472b322633447482013aeae599d56beDuncan Sands        --disable-timestamps \
2501416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling        2>&1 | tee $LogDir/llvm.configure-Phase$Phase-$Flavor.log
2511416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling    cd $BuildDir
252b91c71299a819e2d20786b629376f119085e8b28Bill Wendling}
253b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
254b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingfunction build_llvmCore() {
255b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    Phase="$1"
256b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    Flavor="$2"
257b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    ObjDir="$3"
258b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    ExtraOpts=""
259b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
260b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    if [ "$Flavor" = "Release-64" ]; then
261b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        ExtraOpts="EXTRA_OPTIONS=-m64"
262b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    fi
263b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
264b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    cd $ObjDir
265b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo "# Compiling llvm $Release-rc$RC $Flavor"
266783993e79502641d4f2ec82f3db78320b6837f4eBill Wendling    echo "# ${MAKE} -j $NumJobs VERBOSE=1 $ExtraOpts"
267783993e79502641d4f2ec82f3db78320b6837f4eBill Wendling    ${MAKE} -j $NumJobs VERBOSE=1 $ExtraOpts \
2681416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling        2>&1 | tee $LogDir/llvm.make-Phase$Phase-$Flavor.log
269b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
270b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo "# Installing llvm $Release-rc$RC $Flavor"
271783993e79502641d4f2ec82f3db78320b6837f4eBill Wendling    echo "# ${MAKE} install"
272783993e79502641d4f2ec82f3db78320b6837f4eBill Wendling    ${MAKE} install \
2731416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling        2>&1 | tee $LogDir/llvm.install-Phase$Phase-$Flavor.log
2741416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling    cd $BuildDir
275b91c71299a819e2d20786b629376f119085e8b28Bill Wendling}
276b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
277c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sandsfunction build_dragonegg() {
278c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    Phase="$1"
279c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    Flavor="$2"
280c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    LLVMInstallDir="$3"
281c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    DragonEggObjDir="$4"
282c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    LLVM_CONFIG=$LLVMInstallDir/bin/llvm-config
283c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    TOP_DIR=$BuildDir/dragonegg.src
284c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands
285c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    echo "# Targeted compiler: $gcc_compiler"
286c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands
287c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    cd $DragonEggObjDir
288c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    echo "# Compiling phase $Phase dragonegg $Release-rc$RC $Flavor"
289c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    echo -n "# CXX=$cxx_compiler TOP_DIR=$TOP_DIR GCC=$gcc_compiler "
290c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    echo -n "LLVM_CONFIG=$LLVM_CONFIG ${MAKE} -f $TOP_DIR/Makefile "
291c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    echo "-j $NumJobs VERBOSE=1"
292c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    CXX="$cxx_compiler" TOP_DIR="$TOP_DIR" GCC="$gcc_compiler" \
293c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    LLVM_CONFIG="$LLVM_CONFIG" ${MAKE} -f $TOP_DIR/Makefile \
294c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        -j $NumJobs VERBOSE=1 \
295c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands            2>&1 | tee $LogDir/dragonegg-Phase$Phase-$Flavor.log
296c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    cd $BuildDir
297c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands}
298c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands
299b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingfunction test_llvmCore() {
300b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    Phase="$1"
301b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    Flavor="$2"
302b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    ObjDir="$3"
303b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
304b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    cd $ObjDir
305783993e79502641d4f2ec82f3db78320b6837f4eBill Wendling    ${MAKE} -k check-all \
3061416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling        2>&1 | tee $LogDir/llvm.check-Phase$Phase-$Flavor.log
307783993e79502641d4f2ec82f3db78320b6837f4eBill Wendling    ${MAKE} -k unittests \
30841adc5fb8bd0d81f07d93754868bd9f27b6fd9afBill Wendling        2>&1 | tee $LogDir/llvm.unittests-Phase$Phase-$Flavor.log
3091416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling    cd $BuildDir
310b91c71299a819e2d20786b629376f119085e8b28Bill Wendling}
311b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
312630243a8c2d40df137b64246b7ed4363962fd9b4Bill Wendlingset -e                          # Exit if any command fails
313630243a8c2d40df137b64246b7ed4363962fd9b4Bill Wendling
314b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingif [ "$do_checkout" = "yes" ]; then
315b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    export_sources
316b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingfi
317b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
318f0bf9dfc1f7755a6233e41fd6f259c4ee08a40dcDuncan Sands(
319a854f5d6f9394212319f4e00b6396900f6e62864Bill WendlingFlavors="Release"
3201416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendlingif [ "$do_debug" = "yes" ]; then
3211416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling    Flavors="Debug $Flavors"
3221416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendlingfi
323a854f5d6f9394212319f4e00b6396900f6e62864Bill Wendlingif [ "$do_asserts" = "yes" ]; then
324a854f5d6f9394212319f4e00b6396900f6e62864Bill Wendling    Flavors="$Flavors Release+Asserts"
325a854f5d6f9394212319f4e00b6396900f6e62864Bill Wendlingfi
326b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingif [ "$do_64bit" = "yes" ]; then
327b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    Flavors="$Flavors Release-64"
328b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingfi
329b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
330b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingfor Flavor in $Flavors ; do
331b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo ""
332b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo ""
333b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo "********************************************************************************"
334b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo "  Release:     $Release-rc$RC"
335b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo "  Build:       $Flavor"
336b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo "  System Info: "
337b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo "    `uname -a`"
338b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo "********************************************************************************"
339b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo ""
340b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
341fbc0dec7b4dc94a667c2b8af6748a742da95353dDuncan Sands    c_compiler="$CC"
342fbc0dec7b4dc94a667c2b8af6748a742da95353dDuncan Sands    cxx_compiler="$CXX"
343fbc0dec7b4dc94a667c2b8af6748a742da95353dDuncan Sands
344b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    llvmCore_phase1_objdir=$BuildDir/Phase1/$Flavor/llvmCore-$Release-rc$RC.obj
345b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    llvmCore_phase1_installdir=$BuildDir/Phase1/$Flavor/llvmCore-$Release-rc$RC.install
346c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    dragonegg_phase1_objdir=$BuildDir/Phase1/$Flavor/DragonEgg-$Release-rc$RC.obj
347b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
348b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    llvmCore_phase2_objdir=$BuildDir/Phase2/$Flavor/llvmCore-$Release-rc$RC.obj
349b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    llvmCore_phase2_installdir=$BuildDir/Phase2/$Flavor/llvmCore-$Release-rc$RC.install
350c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    llvmCore_de_phase2_objdir=$BuildDir/Phase2/$Flavor/llvmCore-DragonEgg-$Release-rc$RC.obj
351c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    llvmCore_de_phase2_installdir=$BuildDir/Phase2/$Flavor/llvmCore-DragonEgg-$Release-rc$RC.install
352c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    dragonegg_phase2_objdir=$BuildDir/Phase2/$Flavor/DragonEgg-$Release-rc$RC.obj
353b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
354a854f5d6f9394212319f4e00b6396900f6e62864Bill Wendling    llvmCore_phase3_objdir=$BuildDir/Phase3/$Flavor/llvmCore-$Release-rc$RC.obj
355a854f5d6f9394212319f4e00b6396900f6e62864Bill Wendling    llvmCore_phase3_installdir=$BuildDir/Phase3/$Flavor/llvmCore-$Release-rc$RC.install
356c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    llvmCore_de_phase3_objdir=$BuildDir/Phase3/$Flavor/llvmCore-DragonEgg-$Release-rc$RC.obj
357c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    llvmCore_de_phase3_installdir=$BuildDir/Phase3/$Flavor/llvmCore-DragonEgg-$Release-rc$RC.install
358c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    dragonegg_phase3_objdir=$BuildDir/Phase3/$Flavor/DragonEgg-$Release-rc$RC.obj
359a854f5d6f9394212319f4e00b6396900f6e62864Bill Wendling
360b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    rm -rf $llvmCore_phase1_objdir
361b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    rm -rf $llvmCore_phase1_installdir
362c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    rm -rf $dragonegg_phase1_objdir
363c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands
364b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    rm -rf $llvmCore_phase2_objdir
365b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    rm -rf $llvmCore_phase2_installdir
366c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    rm -rf $llvmCore_de_phase2_objdir
367c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    rm -rf $llvmCore_de_phase2_installdir
368c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    rm -rf $dragonegg_phase2_objdir
369c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands
370a854f5d6f9394212319f4e00b6396900f6e62864Bill Wendling    rm -rf $llvmCore_phase3_objdir
371a854f5d6f9394212319f4e00b6396900f6e62864Bill Wendling    rm -rf $llvmCore_phase3_installdir
372c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    rm -rf $llvmCore_de_phase3_objdir
373c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    rm -rf $llvmCore_de_phase3_installdir
374c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    rm -rf $dragonegg_phase3_objdir
375b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
376b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    mkdir -p $llvmCore_phase1_objdir
377b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    mkdir -p $llvmCore_phase1_installdir
378c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    mkdir -p $dragonegg_phase1_objdir
379c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands
380b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    mkdir -p $llvmCore_phase2_objdir
381b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    mkdir -p $llvmCore_phase2_installdir
382c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    mkdir -p $llvmCore_de_phase2_objdir
383c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    mkdir -p $llvmCore_de_phase2_installdir
384c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    mkdir -p $dragonegg_phase2_objdir
385c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands
386a854f5d6f9394212319f4e00b6396900f6e62864Bill Wendling    mkdir -p $llvmCore_phase3_objdir
387a854f5d6f9394212319f4e00b6396900f6e62864Bill Wendling    mkdir -p $llvmCore_phase3_installdir
388c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    mkdir -p $llvmCore_de_phase3_objdir
389c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    mkdir -p $llvmCore_de_phase3_installdir
390c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    mkdir -p $dragonegg_phase3_objdir
391b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
392b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    ############################################################################
393c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    # Phase 1: Build llvmCore and clang
394b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo "# Phase 1: Building llvmCore"
395b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    configure_llvmCore 1 $Flavor \
3961416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling        $llvmCore_phase1_objdir $llvmCore_phase1_installdir
397b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    build_llvmCore 1 $Flavor \
398b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        $llvmCore_phase1_objdir
399b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
400c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    # Test clang
401c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    if [ "$do_clang" = "yes" ]; then
402c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        ############################################################################
403c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        # Phase 2: Build llvmCore with newly built clang from phase 1.
404c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        c_compiler=$llvmCore_phase1_installdir/bin/clang
405c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        cxx_compiler=$llvmCore_phase1_installdir/bin/clang++
406c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        echo "# Phase 2: Building llvmCore"
407c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        configure_llvmCore 2 $Flavor \
408c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands            $llvmCore_phase2_objdir $llvmCore_phase2_installdir
409c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        build_llvmCore 2 $Flavor \
410c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands            $llvmCore_phase2_objdir
411c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands
412c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        ############################################################################
413c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        # Phase 3: Build llvmCore with newly built clang from phase 2.
414c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        c_compiler=$llvmCore_phase2_installdir/bin/clang
415c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        cxx_compiler=$llvmCore_phase2_installdir/bin/clang++
416c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        echo "# Phase 3: Building llvmCore"
417c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        configure_llvmCore 3 $Flavor \
418c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands            $llvmCore_phase3_objdir $llvmCore_phase3_installdir
419c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        build_llvmCore 3 $Flavor \
420c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands            $llvmCore_phase3_objdir
421c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands
422c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        ############################################################################
423c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        # Testing: Test phase 3
424c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        echo "# Testing - built with clang"
425c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        test_llvmCore 3 $Flavor $llvmCore_phase3_objdir
426c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands
427c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        ############################################################################
428c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        # Compare .o files between Phase2 and Phase3 and report which ones differ.
429c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        echo
430c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        echo "# Comparing Phase 2 and Phase 3 files"
431c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        for o in `find $llvmCore_phase2_objdir -name '*.o'` ; do
432c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands            p3=`echo $o | sed -e 's,Phase2,Phase3,'`
433c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands            if ! cmp --ignore-initial=16 $o $p3 > /dev/null 2>&1 ; then
434c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands                echo "file `basename $o` differs between phase 2 and phase 3"
435c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands            fi
436c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        done
437c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    fi
438a854f5d6f9394212319f4e00b6396900f6e62864Bill Wendling
439c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    # Test dragonegg
440c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    if [ "$do_dragonegg" = "yes" ]; then
441c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        # Build dragonegg using the targeted gcc.  This isn't necessary, but
442c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        # helps avoid using broken versions of gcc (which are legion), tests
443c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        # that the targeted gcc is basically sane and is consistent with the
444c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        # later phases in which the targeted gcc + dragonegg are used.
445c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        c_compiler="$gcc_compiler"
446c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        cxx_compiler="$gxx_compiler"
447c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        build_dragonegg 1 $Flavor $llvmCore_phase1_installdir $dragonegg_phase1_objdir
448c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands
449c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        ############################################################################
450c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        # Phase 2: Build llvmCore with newly built dragonegg from phase 1.
451c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        c_compiler="$gcc_compiler -fplugin=$dragonegg_phase1_objdir/dragonegg.so"
452c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        cxx_compiler="$gxx_compiler -fplugin=$dragonegg_phase1_objdir/dragonegg.so"
453c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        echo "# Phase 2: Building llvmCore with dragonegg"
454c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        configure_llvmCore 2 $Flavor \
455c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands            $llvmCore_de_phase2_objdir $llvmCore_de_phase2_installdir
456c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        build_llvmCore 2 $Flavor \
457c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands            $llvmCore_de_phase2_objdir
458c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        build_dragonegg 2 $Flavor $llvmCore_de_phase2_installdir $dragonegg_phase2_objdir
459c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands
460c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        ############################################################################
461c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        # Phase 3: Build llvmCore with newly built clang from phase 2.
462c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        c_compiler="$gcc_compiler -fplugin=$dragonegg_phase2_objdir/dragonegg.so"
463c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        cxx_compiler="$gxx_compiler -fplugin=$dragonegg_phase2_objdir/dragonegg.so"
464c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        echo "# Phase 3: Building llvmCore with dragonegg"
465c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        configure_llvmCore 3 $Flavor \
466c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands            $llvmCore_de_phase3_objdir $llvmCore_de_phase3_installdir
467c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        build_llvmCore 3 $Flavor \
468c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands            $llvmCore_de_phase3_objdir
469c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        build_dragonegg 3 $Flavor $llvmCore_de_phase3_installdir $dragonegg_phase3_objdir
470c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands
471c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        ############################################################################
472c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        # Testing: Test phase 3
473c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        c_compiler="$gcc_compiler -fplugin=$dragonegg_phase3_objdir/dragonegg.so"
474c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        cxx_compiler="$gxx_compiler -fplugin=$dragonegg_phase3_objdir/dragonegg.so"
475c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        echo "# Testing - built with dragonegg"
476c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        test_llvmCore 3 $Flavor $llvmCore_de_phase3_objdir
477c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands
478c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        ############################################################################
479c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        # Compare .o files between Phase2 and Phase3 and report which ones differ.
480c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        echo
481c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        echo "# Comparing Phase 2 and Phase 3 files"
48219595dc4d0cb2495c37828530f04b7e47cf0837fDuncan Sands        for o in `find $llvmCore_de_phase2_objdir -name '*.o'` \
48319595dc4d0cb2495c37828530f04b7e47cf0837fDuncan Sands          `find $dragonegg_phase2_objdir -name '*.o'` ; do
484c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands            p3=`echo $o | sed -e 's,Phase2,Phase3,'`
485c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands            if ! cmp --ignore-initial=16 $o $p3 > /dev/null 2>&1 ; then
486c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands                echo "file `basename $o` differs between dragonegg phase 2 and phase 3"
487c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands            fi
488c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        done
489c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    fi
490a854f5d6f9394212319f4e00b6396900f6e62864Bill Wendling
491c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    # Otherwise just test the core.
492c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    if [ "$do_clang" != "yes" -a "$do_dragonegg" != "yes" ]; then
493c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        echo "# Testing - built with system compiler"
494c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        test_llvmCore 1 $Flavor $llvmCore_phase1_objdir
495c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    fi
496b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingdone
497f0bf9dfc1f7755a6233e41fd6f259c4ee08a40dcDuncan Sands) 2>&1 | tee $LogDir/testing.$Release-rc$RC.log
498b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
499630243a8c2d40df137b64246b7ed4363962fd9b4Bill Wendlingset +e
500630243a8c2d40df137b64246b7ed4363962fd9b4Bill Wendling
501b91c71299a819e2d20786b629376f119085e8b28Bill Wendling# Woo hoo!
502b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingecho "### Testing Finished ###"
503f0bf9dfc1f7755a6233e41fd6f259c4ee08a40dcDuncan Sandsecho "### Logs: $LogDir"
504b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingexit 0
505