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