test-release.sh revision 64acc57b23530aee37d224f48293cb764c4290a8
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."
4564acc57b23530aee37d224f48293cb764c4290a8Bill Wendling    echo " -final            The final release candidate."
46b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo " -j NUM            Number of compile jobs to run. [default: 3]"
47b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo " -build-dir DIR    Directory to perform testing in. [default: pwd]"
48b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo " -no-checkout      Don't checkout the sources from SVN."
49b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo " -no-64bit         Don't test the 64-bit version. [default: yes]"
50e7e9a60df6ea92460337569e24746f390cbd56e3Bill Wendling    echo " -enable-ada       Build Ada. [default: disable]"
51c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    echo " -disable-clang    Do not test clang. [default: enable]"
52c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    echo " -enable-dragonegg Test dragonegg. [default: disable]"
531416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling    echo " -enable-fortran   Enable Fortran build. [default: disable]"
54e7e9a60df6ea92460337569e24746f390cbd56e3Bill Wendling    echo " -disable-objc     Disable ObjC build. [default: enable]"
551416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling    echo " -test-debug       Test the debug build. [default: no]"
56a854f5d6f9394212319f4e00b6396900f6e62864Bill Wendling    echo " -test-asserts     Test with asserts on. [default: no]"
57b91c71299a819e2d20786b629376f119085e8b28Bill Wendling}
58b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
59b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingwhile [ $# -gt 0 ]; do
60b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    case $1 in
61b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        -release | --release )
62b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            shift
63b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            Release="$1"
64b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            Release_no_dot="`echo $1 | sed -e 's,\.,,'`"
65b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            ;;
66b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        -rc | --rc | -RC | --RC )
67b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            shift
6864acc57b23530aee37d224f48293cb764c4290a8Bill Wendling            RC="rc$1"
6964acc57b23530aee37d224f48293cb764c4290a8Bill Wendling            ;;
7064acc57b23530aee37d224f48293cb764c4290a8Bill Wendling        -final | --final )
7164acc57b23530aee37d224f48293cb764c4290a8Bill Wendling            RC=final
72b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            ;;
73b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        -j* )
74b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            NumJobs="`echo $1 | sed -e 's,-j\([0-9]*\),\1,g'`"
75b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            if [ -z "$NumJobs" ]; then
76b91c71299a819e2d20786b629376f119085e8b28Bill Wendling                shift
77b91c71299a819e2d20786b629376f119085e8b28Bill Wendling                NumJobs="$1"
78b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            fi
79b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            ;;
80b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        -build-dir | --build-dir | -builddir | --builddir )
81b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            shift
82b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            BuildDir="$1"
83b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            ;;
84b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        -no-checkout | --no-checkout )
85b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            do_checkout="no"
86b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            ;;
87b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        -no-64bit | --no-64bit )
88b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            do_64bit="no"
89b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            ;;
90e7e9a60df6ea92460337569e24746f390cbd56e3Bill Wendling        -enable-ada | --enable-ada )
91b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            do_ada="yes"
92b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            ;;
93c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        -disable-clang | --disable-clang )
94c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands            do_clang="no"
95c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands            ;;
96c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        -enable-dragonegg | --enable-dragonegg )
97c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands            do_dragonegg="yes"
98c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands            ;;
991416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling        -enable-fortran | --enable-fortran )
1001416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling            do_fortran="yes"
1011416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling            ;;
102c248bbab04cb674bde5de8d6e2b2736a574fa0f8Bill Wendling        -disable-objc | --disable-objc )
103c248bbab04cb674bde5de8d6e2b2736a574fa0f8Bill Wendling            do_objc="no"
104c248bbab04cb674bde5de8d6e2b2736a574fa0f8Bill Wendling            ;;
1051416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling        -test-debug | --test-debug )
1061416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling            do_debug="yes"
107b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            ;;
108a854f5d6f9394212319f4e00b6396900f6e62864Bill Wendling        -test-asserts | --test-asserts )
109a854f5d6f9394212319f4e00b6396900f6e62864Bill Wendling            do_asserts="yes"
110a854f5d6f9394212319f4e00b6396900f6e62864Bill Wendling            ;;
111b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        -help | --help | -h | --h | -\? )
112b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            usage
113b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            exit 0
114b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            ;;
115b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        * )
116b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            echo "unknown option: $1"
117b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            usage
118b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            exit 1
119b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            ;;
120b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    esac
121b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    shift
122b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingdone
123b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
124b91c71299a819e2d20786b629376f119085e8b28Bill Wendling# Check required arguments.
125b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingif [ -z "$Release" ]; then
1261416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling    echo "error: no release number specified"
127b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    exit 1
128b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingfi
129b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingif [ -z "$RC" ]; then
1301416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling    echo "error: no release candidate number specified"
131b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    exit 1
132b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingfi
133b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
134d357d747ded75c3eae9238f23e1c05d621d915e8Duncan Sands# Figure out how many make processes to run.
135d357d747ded75c3eae9238f23e1c05d621d915e8Duncan Sandsif [ -z "$NumJobs" ]; then
136d357d747ded75c3eae9238f23e1c05d621d915e8Duncan Sands    NumJobs=`sysctl -n hw.activecpu 2> /dev/null || true`
137d357d747ded75c3eae9238f23e1c05d621d915e8Duncan Sandsfi
138d357d747ded75c3eae9238f23e1c05d621d915e8Duncan Sandsif [ -z "$NumJobs" ]; then
139d357d747ded75c3eae9238f23e1c05d621d915e8Duncan Sands    NumJobs=`sysctl -n hw.ncpu 2> /dev/null || true`
140d357d747ded75c3eae9238f23e1c05d621d915e8Duncan Sandsfi
141d357d747ded75c3eae9238f23e1c05d621d915e8Duncan Sandsif [ -z "$NumJobs" ]; then
142d357d747ded75c3eae9238f23e1c05d621d915e8Duncan Sands    NumJobs=`grep -c processor /proc/cpuinfo 2> /dev/null || true`
143d357d747ded75c3eae9238f23e1c05d621d915e8Duncan Sandsfi
144b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingif [ -z "$NumJobs" ]; then
145b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    NumJobs=3
146b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingfi
147b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
1481416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling# Go to the build directory (may be different from CWD)
14964acc57b23530aee37d224f48293cb764c4290a8Bill WendlingBuildDir=$BuildDir/$RC
1501416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendlingmkdir -p $BuildDir
1511416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendlingcd $BuildDir
152b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
153f0bf9dfc1f7755a6233e41fd6f259c4ee08a40dcDuncan Sands# Location of log files.
1541416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill WendlingLogDir=$BuildDir/logs
155f0bf9dfc1f7755a6233e41fd6f259c4ee08a40dcDuncan Sandsmkdir -p $LogDir
156f0bf9dfc1f7755a6233e41fd6f259c4ee08a40dcDuncan Sands
157c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands# Find compilers.
158c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sandsif [ "$do_dragonegg" = "yes" ]; then
159c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    gcc_compiler="$GCC"
160c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    if [ -z "$gcc_compiler" ]; then
161c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        gcc_compiler="`which gcc`"
162c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        if [ -z "$gcc_compiler" ]; then
163c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands            echo "error: cannot find gcc to use with dragonegg"
164c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands            exit 1
165c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        fi
166c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    fi
167c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands
168c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    gxx_compiler="$GXX"
169c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    if [ -z "$gxx_compiler" ]; then
170c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        gxx_compiler="`which g++`"
171c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        if [ -z "$gxx_compiler" ]; then
172c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands            echo "error: cannot find g++ to use with dragonegg"
173c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands            exit 1
174c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        fi
175c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    fi
176c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sandsfi
177c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands
178b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
179b91c71299a819e2d20786b629376f119085e8b28Bill Wendling# Make sure that the URLs are valid.
180b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingfunction check_valid_urls() {
1811416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling    for proj in $projects ; do
1821416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling        echo "# Validating $proj SVN URL"
1831416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling
18464acc57b23530aee37d224f48293cb764c4290a8Bill Wendling        if ! svn ls $Base_url/$proj/tags/RELEASE_$Release_no_dot/$RC > /dev/null 2>&1 ; then
1851416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling            echo "llvm $Release release candidate $RC doesn't exist!"
1861416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling            exit 1
1871416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling        fi
1881416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling    done
189b91c71299a819e2d20786b629376f119085e8b28Bill Wendling}
190b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
191b91c71299a819e2d20786b629376f119085e8b28Bill Wendling# Export sources to the the build directory.
192b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingfunction export_sources() {
193b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    check_valid_urls
194b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
1951416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling    for proj in $projects ; do
1961416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling        echo "# Exporting $proj $Release-RC$RC sources"
19764acc57b23530aee37d224f48293cb764c4290a8Bill Wendling        if ! svn export -q $Base_url/$proj/tags/RELEASE_$Release_no_dot/$RC $proj.src ; then
1981416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling            echo "error: failed to export $proj project"
1991416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling            exit 1
2001416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling        fi
2011416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling    done
2021416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling
2031416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling    echo "# Creating symlinks"
2041416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling    cd $BuildDir/llvm.src/tools
2051416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling    if [ ! -h clang ]; then
206ac6d7e49117fc12b81eb9dcddda08debedcf2360Bill Wendling        ln -s ../../cfe.src clang
2071416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling    fi
2081416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling    cd $BuildDir/llvm.src/projects
2091416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling    if [ ! -h llvm-test ]; then
210ac6d7e49117fc12b81eb9dcddda08debedcf2360Bill Wendling        ln -s ../../test-suite.src llvm-test
2111416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling    fi
2121416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling    cd $BuildDir
213b91c71299a819e2d20786b629376f119085e8b28Bill Wendling}
214b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
215b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingfunction configure_llvmCore() {
216b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    Phase="$1"
217b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    Flavor="$2"
218b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    ObjDir="$3"
219b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    InstallDir="$4"
220b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
221b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    case $Flavor in
222b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        Release | Release-64 )
223b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            Optimized="yes"
2248a6e53e1162663dd2bc1da783fe2ff5947fba9e0Duncan Sands            Assertions="no"
225b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            ;;
2268a6e53e1162663dd2bc1da783fe2ff5947fba9e0Duncan Sands        Release+Asserts )
227b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            Optimized="yes"
2288a6e53e1162663dd2bc1da783fe2ff5947fba9e0Duncan Sands            Assertions="yes"
229b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            ;;
230b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        Debug )
231b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            Optimized="no"
232b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            Assertions="yes"
233b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            ;;
234b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        * )
2351416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling            echo "# Invalid flavor '$Flavor'"
236b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            echo ""
237b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            return
238b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            ;;
239b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    esac
240b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
2411416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling    echo "# Using C compiler: $c_compiler"
2421416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling    echo "# Using C++ compiler: $cxx_compiler"
2431416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling
244b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    cd $ObjDir
24564acc57b23530aee37d224f48293cb764c4290a8Bill Wendling    echo "# Configuring llvm $Release-$RC $Flavor"
2461416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling    echo "# $BuildDir/llvm.src/configure --prefix=$InstallDir \
247b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        --enable-optimized=$Optimized \
2481416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling        --enable-assertions=$Assertions"
249c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    env CC="$c_compiler" CXX="$cxx_compiler" \
2501416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling    $BuildDir/llvm.src/configure --prefix=$InstallDir \
251b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        --enable-optimized=$Optimized \
252b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        --enable-assertions=$Assertions \
25358fba239e472b322633447482013aeae599d56beDuncan Sands        --disable-timestamps \
2541416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling        2>&1 | tee $LogDir/llvm.configure-Phase$Phase-$Flavor.log
2551416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling    cd $BuildDir
256b91c71299a819e2d20786b629376f119085e8b28Bill Wendling}
257b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
258b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingfunction build_llvmCore() {
259b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    Phase="$1"
260b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    Flavor="$2"
261b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    ObjDir="$3"
262b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    ExtraOpts=""
263b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
264b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    if [ "$Flavor" = "Release-64" ]; then
265b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        ExtraOpts="EXTRA_OPTIONS=-m64"
266b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    fi
267b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
268b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    cd $ObjDir
26964acc57b23530aee37d224f48293cb764c4290a8Bill Wendling    echo "# Compiling llvm $Release-$RC $Flavor"
270783993e79502641d4f2ec82f3db78320b6837f4eBill Wendling    echo "# ${MAKE} -j $NumJobs VERBOSE=1 $ExtraOpts"
271783993e79502641d4f2ec82f3db78320b6837f4eBill Wendling    ${MAKE} -j $NumJobs VERBOSE=1 $ExtraOpts \
2721416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling        2>&1 | tee $LogDir/llvm.make-Phase$Phase-$Flavor.log
273b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
27464acc57b23530aee37d224f48293cb764c4290a8Bill Wendling    echo "# Installing llvm $Release-$RC $Flavor"
275783993e79502641d4f2ec82f3db78320b6837f4eBill Wendling    echo "# ${MAKE} install"
276783993e79502641d4f2ec82f3db78320b6837f4eBill Wendling    ${MAKE} install \
2771416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling        2>&1 | tee $LogDir/llvm.install-Phase$Phase-$Flavor.log
2781416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling    cd $BuildDir
279b91c71299a819e2d20786b629376f119085e8b28Bill Wendling}
280b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
281c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sandsfunction build_dragonegg() {
282c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    Phase="$1"
283c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    Flavor="$2"
284c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    LLVMInstallDir="$3"
285c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    DragonEggObjDir="$4"
286c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    LLVM_CONFIG=$LLVMInstallDir/bin/llvm-config
287c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    TOP_DIR=$BuildDir/dragonegg.src
288c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands
289c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    echo "# Targeted compiler: $gcc_compiler"
290c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands
291c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    cd $DragonEggObjDir
29264acc57b23530aee37d224f48293cb764c4290a8Bill Wendling    echo "# Compiling phase $Phase dragonegg $Release-$RC $Flavor"
293c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    echo -n "# CXX=$cxx_compiler TOP_DIR=$TOP_DIR GCC=$gcc_compiler "
294c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    echo -n "LLVM_CONFIG=$LLVM_CONFIG ${MAKE} -f $TOP_DIR/Makefile "
295c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    echo "-j $NumJobs VERBOSE=1"
296c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    CXX="$cxx_compiler" TOP_DIR="$TOP_DIR" GCC="$gcc_compiler" \
297c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    LLVM_CONFIG="$LLVM_CONFIG" ${MAKE} -f $TOP_DIR/Makefile \
298c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        -j $NumJobs VERBOSE=1 \
299c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands            2>&1 | tee $LogDir/dragonegg-Phase$Phase-$Flavor.log
300c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    cd $BuildDir
301c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands}
302c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands
303b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingfunction test_llvmCore() {
304b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    Phase="$1"
305b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    Flavor="$2"
306b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    ObjDir="$3"
307b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
308b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    cd $ObjDir
309783993e79502641d4f2ec82f3db78320b6837f4eBill Wendling    ${MAKE} -k check-all \
3101416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling        2>&1 | tee $LogDir/llvm.check-Phase$Phase-$Flavor.log
311783993e79502641d4f2ec82f3db78320b6837f4eBill Wendling    ${MAKE} -k unittests \
31241adc5fb8bd0d81f07d93754868bd9f27b6fd9afBill Wendling        2>&1 | tee $LogDir/llvm.unittests-Phase$Phase-$Flavor.log
3131416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling    cd $BuildDir
314b91c71299a819e2d20786b629376f119085e8b28Bill Wendling}
315b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
316630243a8c2d40df137b64246b7ed4363962fd9b4Bill Wendlingset -e                          # Exit if any command fails
317630243a8c2d40df137b64246b7ed4363962fd9b4Bill Wendling
318b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingif [ "$do_checkout" = "yes" ]; then
319b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    export_sources
320b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingfi
321b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
322f0bf9dfc1f7755a6233e41fd6f259c4ee08a40dcDuncan Sands(
323a854f5d6f9394212319f4e00b6396900f6e62864Bill WendlingFlavors="Release"
3241416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendlingif [ "$do_debug" = "yes" ]; then
3251416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling    Flavors="Debug $Flavors"
3261416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendlingfi
327a854f5d6f9394212319f4e00b6396900f6e62864Bill Wendlingif [ "$do_asserts" = "yes" ]; then
328a854f5d6f9394212319f4e00b6396900f6e62864Bill Wendling    Flavors="$Flavors Release+Asserts"
329a854f5d6f9394212319f4e00b6396900f6e62864Bill Wendlingfi
330b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingif [ "$do_64bit" = "yes" ]; then
331b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    Flavors="$Flavors Release-64"
332b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingfi
333b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
334b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingfor Flavor in $Flavors ; do
335b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo ""
336b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo ""
337b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo "********************************************************************************"
33864acc57b23530aee37d224f48293cb764c4290a8Bill Wendling    echo "  Release:     $Release-$RC"
339b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo "  Build:       $Flavor"
340b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo "  System Info: "
341b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo "    `uname -a`"
342b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo "********************************************************************************"
343b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo ""
344b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
345fbc0dec7b4dc94a667c2b8af6748a742da95353dDuncan Sands    c_compiler="$CC"
346fbc0dec7b4dc94a667c2b8af6748a742da95353dDuncan Sands    cxx_compiler="$CXX"
347fbc0dec7b4dc94a667c2b8af6748a742da95353dDuncan Sands
34864acc57b23530aee37d224f48293cb764c4290a8Bill Wendling    llvmCore_phase1_objdir=$BuildDir/Phase1/$Flavor/llvmCore-$Release-$RC.obj
34964acc57b23530aee37d224f48293cb764c4290a8Bill Wendling    llvmCore_phase1_installdir=$BuildDir/Phase1/$Flavor/llvmCore-$Release-$RC.install
35064acc57b23530aee37d224f48293cb764c4290a8Bill Wendling    dragonegg_phase1_objdir=$BuildDir/Phase1/$Flavor/DragonEgg-$Release-$RC.obj
351b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
35264acc57b23530aee37d224f48293cb764c4290a8Bill Wendling    llvmCore_phase2_objdir=$BuildDir/Phase2/$Flavor/llvmCore-$Release-$RC.obj
35364acc57b23530aee37d224f48293cb764c4290a8Bill Wendling    llvmCore_phase2_installdir=$BuildDir/Phase2/$Flavor/llvmCore-$Release-$RC.install
35464acc57b23530aee37d224f48293cb764c4290a8Bill Wendling    llvmCore_de_phase2_objdir=$BuildDir/Phase2/$Flavor/llvmCore-DragonEgg-$Release-$RC.obj
35564acc57b23530aee37d224f48293cb764c4290a8Bill Wendling    llvmCore_de_phase2_installdir=$BuildDir/Phase2/$Flavor/llvmCore-DragonEgg-$Release-$RC.install
35664acc57b23530aee37d224f48293cb764c4290a8Bill Wendling    dragonegg_phase2_objdir=$BuildDir/Phase2/$Flavor/DragonEgg-$Release-$RC.obj
357b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
35864acc57b23530aee37d224f48293cb764c4290a8Bill Wendling    llvmCore_phase3_objdir=$BuildDir/Phase3/$Flavor/llvmCore-$Release-$RC.obj
35964acc57b23530aee37d224f48293cb764c4290a8Bill Wendling    llvmCore_phase3_installdir=$BuildDir/Phase3/$Flavor/llvmCore-$Release-$RC.install
36064acc57b23530aee37d224f48293cb764c4290a8Bill Wendling    llvmCore_de_phase3_objdir=$BuildDir/Phase3/$Flavor/llvmCore-DragonEgg-$Release-$RC.obj
36164acc57b23530aee37d224f48293cb764c4290a8Bill Wendling    llvmCore_de_phase3_installdir=$BuildDir/Phase3/$Flavor/llvmCore-DragonEgg-$Release-$RC.install
36264acc57b23530aee37d224f48293cb764c4290a8Bill Wendling    dragonegg_phase3_objdir=$BuildDir/Phase3/$Flavor/DragonEgg-$Release-$RC.obj
363a854f5d6f9394212319f4e00b6396900f6e62864Bill Wendling
364b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    rm -rf $llvmCore_phase1_objdir
365b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    rm -rf $llvmCore_phase1_installdir
366c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    rm -rf $dragonegg_phase1_objdir
367c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands
368b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    rm -rf $llvmCore_phase2_objdir
369b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    rm -rf $llvmCore_phase2_installdir
370c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    rm -rf $llvmCore_de_phase2_objdir
371c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    rm -rf $llvmCore_de_phase2_installdir
372c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    rm -rf $dragonegg_phase2_objdir
373c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands
374a854f5d6f9394212319f4e00b6396900f6e62864Bill Wendling    rm -rf $llvmCore_phase3_objdir
375a854f5d6f9394212319f4e00b6396900f6e62864Bill Wendling    rm -rf $llvmCore_phase3_installdir
376c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    rm -rf $llvmCore_de_phase3_objdir
377c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    rm -rf $llvmCore_de_phase3_installdir
378c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    rm -rf $dragonegg_phase3_objdir
379b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
380b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    mkdir -p $llvmCore_phase1_objdir
381b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    mkdir -p $llvmCore_phase1_installdir
382c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    mkdir -p $dragonegg_phase1_objdir
383c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands
384b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    mkdir -p $llvmCore_phase2_objdir
385b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    mkdir -p $llvmCore_phase2_installdir
386c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    mkdir -p $llvmCore_de_phase2_objdir
387c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    mkdir -p $llvmCore_de_phase2_installdir
388c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    mkdir -p $dragonegg_phase2_objdir
389c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands
390a854f5d6f9394212319f4e00b6396900f6e62864Bill Wendling    mkdir -p $llvmCore_phase3_objdir
391a854f5d6f9394212319f4e00b6396900f6e62864Bill Wendling    mkdir -p $llvmCore_phase3_installdir
392c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    mkdir -p $llvmCore_de_phase3_objdir
393c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    mkdir -p $llvmCore_de_phase3_installdir
394c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    mkdir -p $dragonegg_phase3_objdir
395b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
396b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    ############################################################################
397c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    # Phase 1: Build llvmCore and clang
398b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo "# Phase 1: Building llvmCore"
399b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    configure_llvmCore 1 $Flavor \
4001416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling        $llvmCore_phase1_objdir $llvmCore_phase1_installdir
401b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    build_llvmCore 1 $Flavor \
402b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        $llvmCore_phase1_objdir
403b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
404c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    # Test clang
405c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    if [ "$do_clang" = "yes" ]; then
406c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        ############################################################################
407c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        # Phase 2: Build llvmCore with newly built clang from phase 1.
408c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        c_compiler=$llvmCore_phase1_installdir/bin/clang
409c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        cxx_compiler=$llvmCore_phase1_installdir/bin/clang++
410c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        echo "# Phase 2: Building llvmCore"
411c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        configure_llvmCore 2 $Flavor \
412c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands            $llvmCore_phase2_objdir $llvmCore_phase2_installdir
413c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        build_llvmCore 2 $Flavor \
414c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands            $llvmCore_phase2_objdir
415c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands
416c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        ############################################################################
417c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        # Phase 3: Build llvmCore with newly built clang from phase 2.
418c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        c_compiler=$llvmCore_phase2_installdir/bin/clang
419c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        cxx_compiler=$llvmCore_phase2_installdir/bin/clang++
420c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        echo "# Phase 3: Building llvmCore"
421c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        configure_llvmCore 3 $Flavor \
422c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands            $llvmCore_phase3_objdir $llvmCore_phase3_installdir
423c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        build_llvmCore 3 $Flavor \
424c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands            $llvmCore_phase3_objdir
425c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands
426c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        ############################################################################
427c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        # Testing: Test phase 3
428c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        echo "# Testing - built with clang"
429c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        test_llvmCore 3 $Flavor $llvmCore_phase3_objdir
430c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands
431c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        ############################################################################
432c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        # Compare .o files between Phase2 and Phase3 and report which ones differ.
433c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        echo
434c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        echo "# Comparing Phase 2 and Phase 3 files"
435c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        for o in `find $llvmCore_phase2_objdir -name '*.o'` ; do
436c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands            p3=`echo $o | sed -e 's,Phase2,Phase3,'`
437c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands            if ! cmp --ignore-initial=16 $o $p3 > /dev/null 2>&1 ; then
438c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands                echo "file `basename $o` differs between phase 2 and phase 3"
439c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands            fi
440c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        done
441c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    fi
442a854f5d6f9394212319f4e00b6396900f6e62864Bill Wendling
443c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    # Test dragonegg
444c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    if [ "$do_dragonegg" = "yes" ]; then
445c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        # Build dragonegg using the targeted gcc.  This isn't necessary, but
446c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        # helps avoid using broken versions of gcc (which are legion), tests
447c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        # that the targeted gcc is basically sane and is consistent with the
448c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        # later phases in which the targeted gcc + dragonegg are used.
449c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        c_compiler="$gcc_compiler"
450c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        cxx_compiler="$gxx_compiler"
451c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        build_dragonegg 1 $Flavor $llvmCore_phase1_installdir $dragonegg_phase1_objdir
452c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands
453c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        ############################################################################
454c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        # Phase 2: Build llvmCore with newly built dragonegg from phase 1.
455c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        c_compiler="$gcc_compiler -fplugin=$dragonegg_phase1_objdir/dragonegg.so"
456c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        cxx_compiler="$gxx_compiler -fplugin=$dragonegg_phase1_objdir/dragonegg.so"
457c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        echo "# Phase 2: Building llvmCore with dragonegg"
458c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        configure_llvmCore 2 $Flavor \
459c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands            $llvmCore_de_phase2_objdir $llvmCore_de_phase2_installdir
460c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        build_llvmCore 2 $Flavor \
461c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands            $llvmCore_de_phase2_objdir
462c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        build_dragonegg 2 $Flavor $llvmCore_de_phase2_installdir $dragonegg_phase2_objdir
463c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands
464c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        ############################################################################
465c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        # Phase 3: Build llvmCore with newly built clang from phase 2.
466c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        c_compiler="$gcc_compiler -fplugin=$dragonegg_phase2_objdir/dragonegg.so"
467c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        cxx_compiler="$gxx_compiler -fplugin=$dragonegg_phase2_objdir/dragonegg.so"
468c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        echo "# Phase 3: Building llvmCore with dragonegg"
469c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        configure_llvmCore 3 $Flavor \
470c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands            $llvmCore_de_phase3_objdir $llvmCore_de_phase3_installdir
471c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        build_llvmCore 3 $Flavor \
472c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands            $llvmCore_de_phase3_objdir
473c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        build_dragonegg 3 $Flavor $llvmCore_de_phase3_installdir $dragonegg_phase3_objdir
474c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands
475c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        ############################################################################
476c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        # Testing: Test phase 3
477c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        c_compiler="$gcc_compiler -fplugin=$dragonegg_phase3_objdir/dragonegg.so"
478c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        cxx_compiler="$gxx_compiler -fplugin=$dragonegg_phase3_objdir/dragonegg.so"
479c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        echo "# Testing - built with dragonegg"
480c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        test_llvmCore 3 $Flavor $llvmCore_de_phase3_objdir
481c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands
482c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        ############################################################################
483c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        # Compare .o files between Phase2 and Phase3 and report which ones differ.
484c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        echo
485c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        echo "# Comparing Phase 2 and Phase 3 files"
48619595dc4d0cb2495c37828530f04b7e47cf0837fDuncan Sands        for o in `find $llvmCore_de_phase2_objdir -name '*.o'` \
48719595dc4d0cb2495c37828530f04b7e47cf0837fDuncan Sands          `find $dragonegg_phase2_objdir -name '*.o'` ; do
488c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands            p3=`echo $o | sed -e 's,Phase2,Phase3,'`
489c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands            if ! cmp --ignore-initial=16 $o $p3 > /dev/null 2>&1 ; then
490c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands                echo "file `basename $o` differs between dragonegg phase 2 and phase 3"
491c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands            fi
492c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        done
493c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    fi
494a854f5d6f9394212319f4e00b6396900f6e62864Bill Wendling
495c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    # Otherwise just test the core.
496c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    if [ "$do_clang" != "yes" -a "$do_dragonegg" != "yes" ]; then
497c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        echo "# Testing - built with system compiler"
498c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        test_llvmCore 1 $Flavor $llvmCore_phase1_objdir
499c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    fi
500b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingdone
50164acc57b23530aee37d224f48293cb764c4290a8Bill Wendling) 2>&1 | tee $LogDir/testing.$Release-$RC.log
502b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
503630243a8c2d40df137b64246b7ed4363962fd9b4Bill Wendlingset +e
504630243a8c2d40df137b64246b7ed4363962fd9b4Bill Wendling
505b91c71299a819e2d20786b629376f119085e8b28Bill Wendling# Woo hoo!
506b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingecho "### Testing Finished ###"
507f0bf9dfc1f7755a6233e41fd6f259c4ee08a40dcDuncan Sandsecho "### Logs: $LogDir"
508b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingexit 0
509