test-release.sh revision e7e9a60df6ea92460337569e24746f390cbd56e3
1b91c71299a819e2d20786b629376f119085e8b28Bill Wendling#!/bin/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
15e7e9a60df6ea92460337569e24746f390cbd56e3Bill Wendlingset -e                          # Exit if any command fails
16e7e9a60df6ea92460337569e24746f390cbd56e3Bill Wendlingset -x                          # Show commands as they are executed
17b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
18b91c71299a819e2d20786b629376f119085e8b28Bill WendlingRelease=""
19b91c71299a819e2d20786b629376f119085e8b28Bill WendlingRelease_no_dot=""
20b91c71299a819e2d20786b629376f119085e8b28Bill WendlingRC=""
21b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingdo_checkout="yes"
22b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingdo_ada="no"
23c248bbab04cb674bde5de8d6e2b2736a574fa0f8Bill Wendlingdo_objc="yes"
24b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingdo_fortran="yes"
25b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingdo_64bit="yes"
26b91c71299a819e2d20786b629376f119085e8b28Bill WendlingBuildDir="`pwd`"
27b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
28b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingfunction usage() {
29b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo "usage: `basename $0` -release X.Y -rc NUM [OPTIONS]"
30b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo ""
31b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo " -release X.Y      The release number to test."
32b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo " -rc NUM           The pre-release candidate number."
33b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo " -j NUM            Number of compile jobs to run. [default: 3]"
34b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo " -build-dir DIR    Directory to perform testing in. [default: pwd]"
35b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo " -no-checkout      Don't checkout the sources from SVN."
36b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo " -no-64bit         Don't test the 64-bit version. [default: yes]"
37e7e9a60df6ea92460337569e24746f390cbd56e3Bill Wendling    echo " -enable-ada       Build Ada. [default: disable]"
38e7e9a60df6ea92460337569e24746f390cbd56e3Bill Wendling    echo " -disable-objc     Disable ObjC build. [default: enable]"
39e7e9a60df6ea92460337569e24746f390cbd56e3Bill Wendling    echo " -disable-fortran  Disable Fortran build. [default: enable]"
40b91c71299a819e2d20786b629376f119085e8b28Bill Wendling}
41b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
42b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingwhile [ $# -gt 0 ]; do
43b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    case $1 in
44b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        -release | --release )
45b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            shift
46b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            Release="$1"
47b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            Release_no_dot="`echo $1 | sed -e 's,\.,,'`"
48b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            ;;
49b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        -rc | --rc | -RC | --RC )
50b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            shift
51b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            RC=$1
52b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            ;;
53b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        -j* )
54b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            NumJobs="`echo $1 | sed -e 's,-j\([0-9]*\),\1,g'`"
55b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            if [ -z "$NumJobs" ]; then
56b91c71299a819e2d20786b629376f119085e8b28Bill Wendling                shift
57b91c71299a819e2d20786b629376f119085e8b28Bill Wendling                NumJobs="$1"
58b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            fi
59b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            ;;
60b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        -build-dir | --build-dir | -builddir | --builddir )
61b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            shift
62b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            BuildDir="$1"
63b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            ;;
64b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        -no-checkout | --no-checkout )
65b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            do_checkout="no"
66b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            ;;
67b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        -no-64bit | --no-64bit )
68b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            do_64bit="no"
69b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            ;;
70e7e9a60df6ea92460337569e24746f390cbd56e3Bill Wendling        -enable-ada | --enable-ada )
71b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            do_ada="yes"
72b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            ;;
73c248bbab04cb674bde5de8d6e2b2736a574fa0f8Bill Wendling        -disable-objc | --disable-objc )
74c248bbab04cb674bde5de8d6e2b2736a574fa0f8Bill Wendling            do_objc="no"
75c248bbab04cb674bde5de8d6e2b2736a574fa0f8Bill Wendling            ;;
76b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        -disable-fortran | --disable-fortran )
77b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            echo "WARNING: Do you *really* need to disable Fortran?"
78b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            sleep 5
79b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            do_fortran="no"
80b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            ;;
81b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        -help | --help | -h | --h | -\? )
82b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            usage
83b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            exit 0
84b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            ;;
85b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        * )
86b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            echo "unknown option: $1"
87b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            usage
88b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            exit 1
89b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            ;;
90b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    esac
91b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    shift
92b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingdone
93b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
94b91c71299a819e2d20786b629376f119085e8b28Bill Wendling# Check required arguments.
95b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingif [ -z "$Release" ]; then
96b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo "No release number specified!"
97b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    exit 1
98b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingfi
99b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingif [ -z "$RC" ]; then
100b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo "No release candidate number specified!"
101b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    exit 1
102b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingfi
103b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
104d357d747ded75c3eae9238f23e1c05d621d915e8Duncan Sands# Figure out how many make processes to run.
105d357d747ded75c3eae9238f23e1c05d621d915e8Duncan Sandsif [ -z "$NumJobs" ]; then
106d357d747ded75c3eae9238f23e1c05d621d915e8Duncan Sands    NumJobs=`sysctl -n hw.activecpu 2> /dev/null || true`
107d357d747ded75c3eae9238f23e1c05d621d915e8Duncan Sandsfi
108d357d747ded75c3eae9238f23e1c05d621d915e8Duncan Sandsif [ -z "$NumJobs" ]; then
109d357d747ded75c3eae9238f23e1c05d621d915e8Duncan Sands    NumJobs=`sysctl -n hw.ncpu 2> /dev/null || true`
110d357d747ded75c3eae9238f23e1c05d621d915e8Duncan Sandsfi
111d357d747ded75c3eae9238f23e1c05d621d915e8Duncan Sandsif [ -z "$NumJobs" ]; then
112d357d747ded75c3eae9238f23e1c05d621d915e8Duncan Sands    NumJobs=`grep -c processor /proc/cpuinfo 2> /dev/null || true`
113d357d747ded75c3eae9238f23e1c05d621d915e8Duncan Sandsfi
114b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingif [ -z "$NumJobs" ]; then
115b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    NumJobs=3
116b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingfi
117b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
118b91c71299a819e2d20786b629376f119085e8b28Bill Wendling# Location of sources.
119b91c71299a819e2d20786b629376f119085e8b28Bill WendlingllvmCore_srcdir=$BuildDir/llvmCore-$Release-rc$RC.src
120b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingllvmgcc42_srcdir=$BuildDir/llvmgcc42-$Release-rc$RC.src
121b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
122b91c71299a819e2d20786b629376f119085e8b28Bill Wendling# SVN URLs for the sources.
123b91c71299a819e2d20786b629376f119085e8b28Bill WendlingBase_url="http://llvm.org/svn/llvm-project"
124b91c71299a819e2d20786b629376f119085e8b28Bill WendlingllvmCore_RC_url="$Base_url/llvm/tags/RELEASE_$Release_no_dot/rc$RC"
125b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingllvmgcc42_RC_url="$Base_url/llvm-gcc-4.2/tags/RELEASE_$Release_no_dot/rc$RC"
126b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingclang_RC_url="$Base_url/cfe/tags/RELEASE_$Release_no_dot/rc$RC"
127b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingtest_suite_RC_url="$Base_url/test-suite/tags/RELEASE_$Release_no_dot/rc$RC"
128b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
129b91c71299a819e2d20786b629376f119085e8b28Bill Wendling# Make sure that the URLs are valid.
130b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingfunction check_valid_urls() {
131b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo "# Validating SVN URLs"
132b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    if ! svn ls $llvmCore_RC_url > /dev/null 2>&1 ; then
133b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        echo "llvm $Release release candidate $RC doesn't exist!"
134b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        exit 1
135b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    fi
136b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    if ! svn ls $llvmgcc42_RC_url > /dev/null 2>&1 ; then
137b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        echo "llvm-gcc-4.2 $Release release candidate $RC doesn't exist!"
138b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        exit 1
139b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    fi
140b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    if ! svn ls $clang_RC_url > /dev/null 2>&1 ; then
141b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        echo "clang $Release release candidate $RC doesn't exist!"
142b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        exit 1
143b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    fi
144b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    if ! svn ls $test_suite_RC_url > /dev/null 2>&1 ; then
145b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        echo "test-suite $Release release candidate $RC doesn't exist!"
146b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        exit 1
147b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    fi
148b91c71299a819e2d20786b629376f119085e8b28Bill Wendling}
149b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
150b91c71299a819e2d20786b629376f119085e8b28Bill Wendling# Export sources to the the build directory.
151b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingfunction export_sources() {
152b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    check_valid_urls
153b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
154b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo "# Exporting llvm $Release-RC$RC sources"
155b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    svn export -q $llvmCore_RC_url $llvmCore_srcdir
156b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo "# Exporting llvm-gcc-4.2 $Release-rc$RC  sources"
157b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    svn export -q $llvmgcc42_RC_url $llvmgcc42_srcdir
158b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo "# Exporting clang $Release-rc$RC sources"
159b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    svn export -q $clang_RC_url $llvmCore_srcdir/tools/clang
160b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo "# Exporting llvm test suite $Release-rc$RC sources"
161b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    svn export -q $test_suite_RC_url $llvmCore_srcdir/projects/llvm-test
162b91c71299a819e2d20786b629376f119085e8b28Bill Wendling}
163b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
164b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingfunction configure_llvmCore() {
165b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    Phase="$1"
166b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    Flavor="$2"
167b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    ObjDir="$3"
168b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    InstallDir="$4"
169b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    llvmgccDir="$5"
170b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
171b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    case $Flavor in
172b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        Release | Release-64 )
173b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            Optimized="yes"
1748a6e53e1162663dd2bc1da783fe2ff5947fba9e0Duncan Sands            Assertions="no"
175b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            ;;
1768a6e53e1162663dd2bc1da783fe2ff5947fba9e0Duncan Sands        Release+Asserts )
177b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            Optimized="yes"
1788a6e53e1162663dd2bc1da783fe2ff5947fba9e0Duncan Sands            Assertions="yes"
179b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            ;;
180b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        Debug )
181b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            Optimized="no"
182b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            Assertions="yes"
183b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            ;;
184b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        * )
185b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            echo "# Invalid flavor $Flavor!"
186b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            echo ""
187b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            return
188b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            ;;
189b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    esac
190b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
191b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    cd $ObjDir
192b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo "# Configuring llvm $Release-rc$RC $Flavor"
193cff1dbfa186b2d69237392f0064fe543e10ff119Duncan Sands    echo "# $llvmCore_srcdir/configure --prefix=$InstallDir \
194b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        --enable-optimized=$Optimized \
195b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        --enable-assertions=$Assertions \
196b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        --with-llvmgccdir=$llvmgccDir"
197b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    $llvmCore_srcdir/configure --prefix=$InstallDir \
198b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        --enable-optimized=$Optimized \
199b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        --enable-assertions=$Assertions \
200e7e9a60df6ea92460337569e24746f390cbd56e3Bill Wendling        --with-llvmgccdir=$llvmgccDir
201b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    cd -
202b91c71299a819e2d20786b629376f119085e8b28Bill Wendling}
203b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
204b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingfunction build_llvmCore() {
205b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    Phase="$1"
206b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    Flavor="$2"
207b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    ObjDir="$3"
208b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    ExtraOpts=""
209b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
210b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    CompilerFlags=""
211b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    if [ "$Phase" = "2" ]; then
212b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        CompilerFlags="CC=$llvmgccDir/bin/llvm-gcc CXX=$llvmgccDir/bin/llvm-g++"
213b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    fi
214b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    if [ "$Flavor" = "Release-64" ]; then
215b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        ExtraOpts="EXTRA_OPTIONS=-m64"
216b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    fi
217b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
218b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    cd $ObjDir
219b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo "# Compiling llvm $Release-rc$RC $Flavor"
220b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo "# make -j $NumJobs VERBOSE=1 $ExtraOpts"
221e7e9a60df6ea92460337569e24746f390cbd56e3Bill Wendling    make -j $NumJobs VERBOSE=1 $ExtraOpts $CompilerFlags
222b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
223b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo "# Installing llvm $Release-rc$RC $Flavor"
224b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo "# make install"
225e7e9a60df6ea92460337569e24746f390cbd56e3Bill Wendling    make install
226b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    cd -
227b91c71299a819e2d20786b629376f119085e8b28Bill Wendling}
228b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
229b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingfunction test_llvmCore() {
230b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    Phase="$1"
231b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    Flavor="$2"
232b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    ObjDir="$3"
233b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
234b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    cd $ObjDir
235e7e9a60df6ea92460337569e24746f390cbd56e3Bill Wendling    make check
236e7e9a60df6ea92460337569e24746f390cbd56e3Bill Wendling    make -C tools/clang test
237e7e9a60df6ea92460337569e24746f390cbd56e3Bill Wendling    make unittests
238b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    cd -
239b91c71299a819e2d20786b629376f119085e8b28Bill Wendling}
240b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
241b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingfunction configure_llvm_gcc() {
242b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    Phase="$1"
243b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    Flavor="$2"
244b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    ObjDir="$3"
245b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    InstallDir="$4"
246b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    llvmObjDir="$5"
247b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
248c248bbab04cb674bde5de8d6e2b2736a574fa0f8Bill Wendling    languages="c,c++"
249c248bbab04cb674bde5de8d6e2b2736a574fa0f8Bill Wendling    if [ "$do_objc" = "yes" ]; then
250c248bbab04cb674bde5de8d6e2b2736a574fa0f8Bill Wendling        languages="$languages,objc,obj-c++"
251c248bbab04cb674bde5de8d6e2b2736a574fa0f8Bill Wendling    fi
252b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    if [ "$do_fortran" = "yes" ]; then
253b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        languages="$languages,fortran"
254b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    fi
255b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    if [ "$do_ada" = "yes" ]; then
256b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        languages="$languages,ada"
257b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    fi
258b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
259b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    cd $ObjDir
260b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo "# Configuring llvm-gcc $Release-rc$RC $Flavor"
261b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo "# $llvmgcc42_srcdir/configure --prefix=$InstallDir \
262b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        --program-prefix=llvm- --enable-llvm=$llvmObjDir \
2638be4e032bd178d825bf28a7eeb39e5390cc7a507Bill Wendling        --enable-languages=$languages"
264b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    $llvmgcc42_srcdir/configure --prefix=$InstallDir \
265b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        --program-prefix=llvm- --enable-llvm=$llvmObjDir \
266e7e9a60df6ea92460337569e24746f390cbd56e3Bill Wendling        --enable-languages=$languages
267b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    cd -
268b91c71299a819e2d20786b629376f119085e8b28Bill Wendling}
269b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
270b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingfunction build_llvm_gcc() {
271b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    Phase="$1"
272b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    Flavor="$2"
273b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    ObjDir="$3"
274b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    llvmgccDir="$4"
275b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
276b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    CompilerFlags=""
277b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    if [ "$Phase" = "2" ]; then
278b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        CompilerFlags="CC=$llvmgccDir/bin/llvm-gcc CXX=$llvmgccDir/bin/llvm-g++"
279b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    fi
280b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
281b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    cd $ObjDir
282b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo "# Compiling llvm-gcc $Release-rc$RC $Flavor"
283b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo "# make -j $NumJobs bootstrap LLVM_VERSION_INFO=$Release"
284e7e9a60df6ea92460337569e24746f390cbd56e3Bill Wendling    make -j $NumJobs bootstrap LLVM_VERSION_INFO=$Release $CompilerFlags
285b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
286b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo "# Installing llvm-gcc $Release-rc$RC $Flavor"
287b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo "# make install"
288e7e9a60df6ea92460337569e24746f390cbd56e3Bill Wendling    make install
289b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    cd -
290b91c71299a819e2d20786b629376f119085e8b28Bill Wendling}
291b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
292b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingif [ "$do_checkout" = "yes" ]; then
293b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    export_sources
294b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingfi
295b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
29640989a40f085ca027ba322fbcffc771cb360e854Duncan SandsFlavors="Debug Release Release+Asserts"
297b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingif [ "$do_64bit" = "yes" ]; then
298b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    Flavors="$Flavors Release-64"
299b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingfi
300b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
301b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingfor Flavor in $Flavors ; do
302b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo ""
303b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo ""
304b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo "********************************************************************************"
305b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo "  Release:     $Release-rc$RC"
306b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo "  Build:       $Flavor"
307b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo "  System Info: "
308b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo "    `uname -a`"
309b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo "********************************************************************************"
310b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo ""
311b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
312b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    llvmCore_phase1_objdir=$BuildDir/Phase1/$Flavor/llvmCore-$Release-rc$RC.obj
313b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    llvmCore_phase1_installdir=$BuildDir/Phase1/$Flavor/llvmCore-$Release-rc$RC.install
314b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
315b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    llvmCore_phase2_objdir=$BuildDir/Phase2/$Flavor/llvmCore-$Release-rc$RC.obj
316b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    llvmCore_phase2_installdir=$BuildDir/Phase2/$Flavor/llvmCore-$Release-rc$RC.install
317b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
318b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    rm -rf $llvmCore_phase1_objdir
319b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    rm -rf $llvmCore_phase1_installdir
320b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    rm -rf $llvmCore_phase2_objdir
321b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    rm -rf $llvmCore_phase2_installdir
322b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
323b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    mkdir -p $llvmCore_phase1_objdir
324b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    mkdir -p $llvmCore_phase1_installdir
325b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    mkdir -p $llvmCore_phase2_objdir
326b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    mkdir -p $llvmCore_phase2_installdir
327b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
328b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    llvmgcc42_phase1_objdir=$BuildDir/Phase1/$Flavor/llvmgcc42-$Release-rc$RC.obj
329b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    llvmgcc42_phase1_installdir=$BuildDir/Phase1/$Flavor/llvmgcc42-$Release-rc$RC.install
330b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
331b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    llvmgcc42_phase2_objdir=$BuildDir/Phase2/$Flavor/llvmgcc42-$Release-rc$RC.obj
332b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    llvmgcc42_phase2_installdir=$BuildDir/Phase2/$Flavor/llvmgcc42-$Release-rc$RC.install
333b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
334b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    rm -rf $llvmgcc42_phase1_objdir
335b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    rm -rf $llvmgcc42_phase1_installdir
336b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    rm -rf $llvmgcc42_phase2_objdir
337b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    rm -rf $llvmgcc42_phase2_installdir
338b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
339b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    mkdir -p $llvmgcc42_phase1_objdir
340b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    mkdir -p $llvmgcc42_phase1_installdir
341b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    mkdir -p $llvmgcc42_phase2_objdir
342b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    mkdir -p $llvmgcc42_phase2_installdir
343b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
344b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    ############################################################################
345b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    # Phase 1: Build llvmCore and llvmgcc42
346b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo "# Phase 1: Building llvmCore"
347b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    configure_llvmCore 1 $Flavor \
348b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        $llvmCore_phase1_objdir $llvmCore_phase1_installdir \
349b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        $llvmgcc42_phase1_installdir
350b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    build_llvmCore 1 $Flavor \
351b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        $llvmCore_phase1_objdir
352b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
353b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo "# Phase 1: Building llvmgcc42"
354b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    configure_llvm_gcc 1 $Flavor \
355b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        $llvmgcc42_phase1_objdir $llvmgcc42_phase1_installdir \
356b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        $llvmCore_phase1_objdir
357b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    build_llvm_gcc 1 $Flavor \
358b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        $llvmgcc42_phase1_objdir $llvmgcc42_phase1_installdir
359b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
360b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    ############################################################################
361b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    # Phase 2: Build llvmCore with newly built llvmgcc42 from phase 1.
362b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo "# Phase 2: Building llvmCore"
363b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    configure_llvmCore 2 $Flavor \
364b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        $llvmCore_phase2_objdir $llvmCore_phase2_installdir \
365b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        $llvmgcc42_phase1_installdir
366b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    build_llvmCore 2 $Flavor \
367b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        $llvmCore_phase2_objdir
368b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
369b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo "# Phase 2: Building llvmgcc42"
370b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    configure_llvm_gcc 2 $Flavor \
371b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        $llvmgcc42_phase2_objdir $llvmgcc42_phase2_installdir \
372b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        $llvmCore_phase2_objdir
373b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    build_llvm_gcc 2 $Flavor \
374b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        $llvmgcc42_phase2_objdir $llvmgcc42_phase1_installdir
375b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
376b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo "# Testing - built with llvmgcc42"
377b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    test_llvmCore 2 $Flavor $llvmCore_phase2_objdir
378b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingdone
379b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
380b91c71299a819e2d20786b629376f119085e8b28Bill Wendling# Woo hoo!
381b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingecho "### Testing Finished ###"
382b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingexit 0
383