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
2177bf8661cd147d7569355d4a562c2ac8160b290cBill Wendlingprojects="llvm cfe dragonegg compiler-rt libcxx test-suite clang-tools-extra"
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=""
293c031bdef960479def2e01f28be506dcbdeb8758Bill WendlingTriple=""
30d49c8fca79093f3eaaae3ee03ada65ef258f80b8Bill Wendlinguse_gzip="no"
31b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingdo_checkout="yes"
32b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingdo_ada="no"
33c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sandsdo_clang="yes"
34c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sandsdo_dragonegg="no"
351416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendlingdo_fortran="no"
36c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sandsdo_objc="yes"
37b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingdo_64bit="yes"
381416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendlingdo_debug="no"
39a854f5d6f9394212319f4e00b6396900f6e62864Bill Wendlingdo_asserts="no"
401adc215ddcadcfaaa07a8e93f48a8f62c4561afeBill Wendlingdo_compare="yes"
41b91c71299a819e2d20786b629376f119085e8b28Bill WendlingBuildDir="`pwd`"
42b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
43b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingfunction usage() {
44b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo "usage: `basename $0` -release X.Y -rc NUM [OPTIONS]"
45b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo ""
46b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo " -release X.Y      The release number to test."
47b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo " -rc NUM           The pre-release candidate number."
4864acc57b23530aee37d224f48293cb764c4290a8Bill Wendling    echo " -final            The final release candidate."
493c031bdef960479def2e01f28be506dcbdeb8758Bill Wendling    echo " -triple TRIPLE    The target triple for this machine."
50b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo " -j NUM            Number of compile jobs to run. [default: 3]"
51b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo " -build-dir DIR    Directory to perform testing in. [default: pwd]"
52b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo " -no-checkout      Don't checkout the sources from SVN."
53b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo " -no-64bit         Don't test the 64-bit version. [default: yes]"
54e7e9a60df6ea92460337569e24746f390cbd56e3Bill Wendling    echo " -enable-ada       Build Ada. [default: disable]"
55c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    echo " -disable-clang    Do not test clang. [default: enable]"
56c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    echo " -enable-dragonegg Test dragonegg. [default: disable]"
571416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling    echo " -enable-fortran   Enable Fortran build. [default: disable]"
58e7e9a60df6ea92460337569e24746f390cbd56e3Bill Wendling    echo " -disable-objc     Disable ObjC build. [default: enable]"
591416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling    echo " -test-debug       Test the debug build. [default: no]"
60a854f5d6f9394212319f4e00b6396900f6e62864Bill Wendling    echo " -test-asserts     Test with asserts on. [default: no]"
611adc215ddcadcfaaa07a8e93f48a8f62c4561afeBill Wendling    echo " -no-compare-files Don't test that phase 2 and 3 files are identical."
62d49c8fca79093f3eaaae3ee03ada65ef258f80b8Bill Wendling    echo " -use-gzip         Use gzip instead of xz."
63b91c71299a819e2d20786b629376f119085e8b28Bill Wendling}
64b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
65b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingwhile [ $# -gt 0 ]; do
66b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    case $1 in
67b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        -release | --release )
68b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            shift
69b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            Release="$1"
70b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            Release_no_dot="`echo $1 | sed -e 's,\.,,'`"
71b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            ;;
72b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        -rc | --rc | -RC | --RC )
73b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            shift
7464acc57b23530aee37d224f48293cb764c4290a8Bill Wendling            RC="rc$1"
7564acc57b23530aee37d224f48293cb764c4290a8Bill Wendling            ;;
7664acc57b23530aee37d224f48293cb764c4290a8Bill Wendling        -final | --final )
7764acc57b23530aee37d224f48293cb764c4290a8Bill Wendling            RC=final
78b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            ;;
793c031bdef960479def2e01f28be506dcbdeb8758Bill Wendling        -triple | --triple )
803c031bdef960479def2e01f28be506dcbdeb8758Bill Wendling            shift
813c031bdef960479def2e01f28be506dcbdeb8758Bill Wendling            Triple="$1"
823c031bdef960479def2e01f28be506dcbdeb8758Bill Wendling            ;;
83b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        -j* )
84b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            NumJobs="`echo $1 | sed -e 's,-j\([0-9]*\),\1,g'`"
85b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            if [ -z "$NumJobs" ]; then
86b91c71299a819e2d20786b629376f119085e8b28Bill Wendling                shift
87b91c71299a819e2d20786b629376f119085e8b28Bill Wendling                NumJobs="$1"
88b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            fi
89b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            ;;
90b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        -build-dir | --build-dir | -builddir | --builddir )
91b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            shift
92b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            BuildDir="$1"
93b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            ;;
94b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        -no-checkout | --no-checkout )
95b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            do_checkout="no"
96b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            ;;
97b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        -no-64bit | --no-64bit )
98b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            do_64bit="no"
99b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            ;;
100e7e9a60df6ea92460337569e24746f390cbd56e3Bill Wendling        -enable-ada | --enable-ada )
101b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            do_ada="yes"
102b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            ;;
103c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        -disable-clang | --disable-clang )
104c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands            do_clang="no"
105c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands            ;;
106c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        -enable-dragonegg | --enable-dragonegg )
107c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands            do_dragonegg="yes"
108c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands            ;;
1091416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling        -enable-fortran | --enable-fortran )
1101416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling            do_fortran="yes"
1111416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling            ;;
112c248bbab04cb674bde5de8d6e2b2736a574fa0f8Bill Wendling        -disable-objc | --disable-objc )
113c248bbab04cb674bde5de8d6e2b2736a574fa0f8Bill Wendling            do_objc="no"
114c248bbab04cb674bde5de8d6e2b2736a574fa0f8Bill Wendling            ;;
1151416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling        -test-debug | --test-debug )
1161416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling            do_debug="yes"
117b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            ;;
118a854f5d6f9394212319f4e00b6396900f6e62864Bill Wendling        -test-asserts | --test-asserts )
119a854f5d6f9394212319f4e00b6396900f6e62864Bill Wendling            do_asserts="yes"
120a854f5d6f9394212319f4e00b6396900f6e62864Bill Wendling            ;;
1211adc215ddcadcfaaa07a8e93f48a8f62c4561afeBill Wendling        -no-compare-files | --no-compare-files )
1221adc215ddcadcfaaa07a8e93f48a8f62c4561afeBill Wendling            do_compare="no"
1231adc215ddcadcfaaa07a8e93f48a8f62c4561afeBill Wendling            ;;
124d49c8fca79093f3eaaae3ee03ada65ef258f80b8Bill Wendling        -use-gzip | --use-gzip )
125d49c8fca79093f3eaaae3ee03ada65ef258f80b8Bill Wendling            use_gzip="yes"
126d49c8fca79093f3eaaae3ee03ada65ef258f80b8Bill Wendling            ;;
127b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        -help | --help | -h | --h | -\? )
128b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            usage
129b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            exit 0
130b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            ;;
131b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        * )
132b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            echo "unknown option: $1"
133b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            usage
134b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            exit 1
135b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            ;;
136b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    esac
137b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    shift
138b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingdone
139b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
140b91c71299a819e2d20786b629376f119085e8b28Bill Wendling# Check required arguments.
141b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingif [ -z "$Release" ]; then
1421416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling    echo "error: no release number specified"
143b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    exit 1
144b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingfi
145b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingif [ -z "$RC" ]; then
1461416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling    echo "error: no release candidate number specified"
147b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    exit 1
148b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingfi
1493c031bdef960479def2e01f28be506dcbdeb8758Bill Wendlingif [ -z "$Triple" ]; then
1503c031bdef960479def2e01f28be506dcbdeb8758Bill Wendling    echo "error: no target triple specified"
1513c031bdef960479def2e01f28be506dcbdeb8758Bill Wendling    exit 1
1523c031bdef960479def2e01f28be506dcbdeb8758Bill Wendlingfi
153b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
154d357d747ded75c3eae9238f23e1c05d621d915e8Duncan Sands# Figure out how many make processes to run.
155d357d747ded75c3eae9238f23e1c05d621d915e8Duncan Sandsif [ -z "$NumJobs" ]; then
156d357d747ded75c3eae9238f23e1c05d621d915e8Duncan Sands    NumJobs=`sysctl -n hw.activecpu 2> /dev/null || true`
157d357d747ded75c3eae9238f23e1c05d621d915e8Duncan Sandsfi
158d357d747ded75c3eae9238f23e1c05d621d915e8Duncan Sandsif [ -z "$NumJobs" ]; then
159d357d747ded75c3eae9238f23e1c05d621d915e8Duncan Sands    NumJobs=`sysctl -n hw.ncpu 2> /dev/null || true`
160d357d747ded75c3eae9238f23e1c05d621d915e8Duncan Sandsfi
161d357d747ded75c3eae9238f23e1c05d621d915e8Duncan Sandsif [ -z "$NumJobs" ]; then
162d357d747ded75c3eae9238f23e1c05d621d915e8Duncan Sands    NumJobs=`grep -c processor /proc/cpuinfo 2> /dev/null || true`
163d357d747ded75c3eae9238f23e1c05d621d915e8Duncan Sandsfi
164b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingif [ -z "$NumJobs" ]; then
165b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    NumJobs=3
166b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingfi
167b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
1681416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling# Go to the build directory (may be different from CWD)
16964acc57b23530aee37d224f48293cb764c4290a8Bill WendlingBuildDir=$BuildDir/$RC
1701416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendlingmkdir -p $BuildDir
1711416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendlingcd $BuildDir
172b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
173f0bf9dfc1f7755a6233e41fd6f259c4ee08a40dcDuncan Sands# Location of log files.
1741416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill WendlingLogDir=$BuildDir/logs
175f0bf9dfc1f7755a6233e41fd6f259c4ee08a40dcDuncan Sandsmkdir -p $LogDir
176f0bf9dfc1f7755a6233e41fd6f259c4ee08a40dcDuncan Sands
1773c031bdef960479def2e01f28be506dcbdeb8758Bill Wendling# Final package name.
1783c031bdef960479def2e01f28be506dcbdeb8758Bill WendlingPackage=clang+llvm-$Release
1793c031bdef960479def2e01f28be506dcbdeb8758Bill Wendlingif [ $RC != "final" ]; then
1803c031bdef960479def2e01f28be506dcbdeb8758Bill Wendling  Package=$Package-$RC
1813c031bdef960479def2e01f28be506dcbdeb8758Bill Wendlingfi
1823c031bdef960479def2e01f28be506dcbdeb8758Bill WendlingPackage=$Package-$Triple
1833c031bdef960479def2e01f28be506dcbdeb8758Bill Wendling
184c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands# Find compilers.
185c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sandsif [ "$do_dragonegg" = "yes" ]; then
186c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    gcc_compiler="$GCC"
187c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    if [ -z "$gcc_compiler" ]; then
188c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        gcc_compiler="`which gcc`"
189c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        if [ -z "$gcc_compiler" ]; then
190c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands            echo "error: cannot find gcc to use with dragonegg"
191c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands            exit 1
192c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        fi
193c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    fi
194c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands
195c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    gxx_compiler="$GXX"
196c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    if [ -z "$gxx_compiler" ]; then
197c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        gxx_compiler="`which g++`"
198c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        if [ -z "$gxx_compiler" ]; then
199c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands            echo "error: cannot find g++ to use with dragonegg"
200c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands            exit 1
201c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        fi
202c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    fi
203c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sandsfi
204c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands
205ea8e1447d1f563f743b6b73739f4ff0912595752Arnaud A. de Grandmaison# Make sure that a required program is available
206ea8e1447d1f563f743b6b73739f4ff0912595752Arnaud A. de Grandmaisonfunction check_program_exists() {
207ea8e1447d1f563f743b6b73739f4ff0912595752Arnaud A. de Grandmaison  local program="$1"
208ea8e1447d1f563f743b6b73739f4ff0912595752Arnaud A. de Grandmaison  if ! type -P $program > /dev/null 2>&1 ; then
209ea8e1447d1f563f743b6b73739f4ff0912595752Arnaud A. de Grandmaison    echo "program '$1' not found !"
210ea8e1447d1f563f743b6b73739f4ff0912595752Arnaud A. de Grandmaison    exit 1
211ea8e1447d1f563f743b6b73739f4ff0912595752Arnaud A. de Grandmaison  fi
212ea8e1447d1f563f743b6b73739f4ff0912595752Arnaud A. de Grandmaison}
213ea8e1447d1f563f743b6b73739f4ff0912595752Arnaud A. de Grandmaison
2143c031bdef960479def2e01f28be506dcbdeb8758Bill Wendlingif [ `uname -s` != "Darwin" ]; then
2153c031bdef960479def2e01f28be506dcbdeb8758Bill Wendling  check_program_exists 'chrpath'
2163c031bdef960479def2e01f28be506dcbdeb8758Bill Wendling  check_program_exists 'file'
2173c031bdef960479def2e01f28be506dcbdeb8758Bill Wendling  check_program_exists 'objdump'
2183c031bdef960479def2e01f28be506dcbdeb8758Bill Wendlingfi
219b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
220b91c71299a819e2d20786b629376f119085e8b28Bill Wendling# Make sure that the URLs are valid.
221b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingfunction check_valid_urls() {
2221416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling    for proj in $projects ; do
2231416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling        echo "# Validating $proj SVN URL"
2241416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling
22564acc57b23530aee37d224f48293cb764c4290a8Bill Wendling        if ! svn ls $Base_url/$proj/tags/RELEASE_$Release_no_dot/$RC > /dev/null 2>&1 ; then
226dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines            echo "$proj $Release release candidate $RC doesn't exist!"
2271416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling            exit 1
2281416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling        fi
2291416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling    done
230b91c71299a819e2d20786b629376f119085e8b28Bill Wendling}
231b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
232c8e41c591741b3da1077f7000274ad040bef8002Sylvestre Ledru# Export sources to the build directory.
233b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingfunction export_sources() {
234b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    check_valid_urls
235b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
2361416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling    for proj in $projects ; do
23736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines        echo "# Exporting $proj $Release-$RC sources"
23864acc57b23530aee37d224f48293cb764c4290a8Bill Wendling        if ! svn export -q $Base_url/$proj/tags/RELEASE_$Release_no_dot/$RC $proj.src ; then
2391416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling            echo "error: failed to export $proj project"
2401416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling            exit 1
2411416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling        fi
2421416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling    done
2431416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling
2441416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling    echo "# Creating symlinks"
2451416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling    cd $BuildDir/llvm.src/tools
2461416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling    if [ ! -h clang ]; then
247ac6d7e49117fc12b81eb9dcddda08debedcf2360Bill Wendling        ln -s ../../cfe.src clang
2481416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling    fi
24977bf8661cd147d7569355d4a562c2ac8160b290cBill Wendling    cd $BuildDir/llvm.src/tools/clang/tools
25077bf8661cd147d7569355d4a562c2ac8160b290cBill Wendling    if [ ! -h clang-tools-extra ]; then
25177bf8661cd147d7569355d4a562c2ac8160b290cBill Wendling        ln -s ../../../../clang-tools-extra.src extra
25277bf8661cd147d7569355d4a562c2ac8160b290cBill Wendling    fi
2531416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling    cd $BuildDir/llvm.src/projects
25477bf8661cd147d7569355d4a562c2ac8160b290cBill Wendling    if [ ! -h test-suite ]; then
25577bf8661cd147d7569355d4a562c2ac8160b290cBill Wendling        ln -s ../../test-suite.src test-suite
2561416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling    fi
257e4576266f49169ad0ae112d9cb565e7d7c4bf24eBill Wendling    if [ ! -h compiler-rt ]; then
258e4576266f49169ad0ae112d9cb565e7d7c4bf24eBill Wendling        ln -s ../../compiler-rt.src compiler-rt
259e4576266f49169ad0ae112d9cb565e7d7c4bf24eBill Wendling    fi
26077bf8661cd147d7569355d4a562c2ac8160b290cBill Wendling    if [ ! -h libcxx ]; then
26177bf8661cd147d7569355d4a562c2ac8160b290cBill Wendling        ln -s ../../libcxx.src libcxx
26277bf8661cd147d7569355d4a562c2ac8160b290cBill Wendling    fi
2631416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling    cd $BuildDir
264b91c71299a819e2d20786b629376f119085e8b28Bill Wendling}
265b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
266b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingfunction configure_llvmCore() {
267b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    Phase="$1"
268b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    Flavor="$2"
269b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    ObjDir="$3"
270b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    InstallDir="$4"
271b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
272b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    case $Flavor in
273b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        Release | Release-64 )
274b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            Optimized="yes"
2758a6e53e1162663dd2bc1da783fe2ff5947fba9e0Duncan Sands            Assertions="no"
276b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            ;;
2778a6e53e1162663dd2bc1da783fe2ff5947fba9e0Duncan Sands        Release+Asserts )
278b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            Optimized="yes"
2798a6e53e1162663dd2bc1da783fe2ff5947fba9e0Duncan Sands            Assertions="yes"
280b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            ;;
281b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        Debug )
282b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            Optimized="no"
283b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            Assertions="yes"
284b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            ;;
285b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        * )
2861416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling            echo "# Invalid flavor '$Flavor'"
287b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            echo ""
288b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            return
289b91c71299a819e2d20786b629376f119085e8b28Bill Wendling            ;;
290b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    esac
291b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
2921416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling    echo "# Using C compiler: $c_compiler"
2931416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling    echo "# Using C++ compiler: $cxx_compiler"
2941416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling
295b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    cd $ObjDir
29664acc57b23530aee37d224f48293cb764c4290a8Bill Wendling    echo "# Configuring llvm $Release-$RC $Flavor"
2971416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling    echo "# $BuildDir/llvm.src/configure --prefix=$InstallDir \
298b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        --enable-optimized=$Optimized \
2991416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling        --enable-assertions=$Assertions"
300c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    env CC="$c_compiler" CXX="$cxx_compiler" \
3011416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling    $BuildDir/llvm.src/configure --prefix=$InstallDir \
302b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        --enable-optimized=$Optimized \
303b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        --enable-assertions=$Assertions \
30458fba239e472b322633447482013aeae599d56beDuncan Sands        --disable-timestamps \
3051416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling        2>&1 | tee $LogDir/llvm.configure-Phase$Phase-$Flavor.log
3061416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling    cd $BuildDir
307b91c71299a819e2d20786b629376f119085e8b28Bill Wendling}
308b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
309b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingfunction build_llvmCore() {
310b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    Phase="$1"
311b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    Flavor="$2"
312b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    ObjDir="$3"
313b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    ExtraOpts=""
314b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
315b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    if [ "$Flavor" = "Release-64" ]; then
316b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        ExtraOpts="EXTRA_OPTIONS=-m64"
317b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    fi
318b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
319b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    cd $ObjDir
32064acc57b23530aee37d224f48293cb764c4290a8Bill Wendling    echo "# Compiling llvm $Release-$RC $Flavor"
321783993e79502641d4f2ec82f3db78320b6837f4eBill Wendling    echo "# ${MAKE} -j $NumJobs VERBOSE=1 $ExtraOpts"
322783993e79502641d4f2ec82f3db78320b6837f4eBill Wendling    ${MAKE} -j $NumJobs VERBOSE=1 $ExtraOpts \
3231416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling        2>&1 | tee $LogDir/llvm.make-Phase$Phase-$Flavor.log
324b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
32564acc57b23530aee37d224f48293cb764c4290a8Bill Wendling    echo "# Installing llvm $Release-$RC $Flavor"
326783993e79502641d4f2ec82f3db78320b6837f4eBill Wendling    echo "# ${MAKE} install"
327783993e79502641d4f2ec82f3db78320b6837f4eBill Wendling    ${MAKE} install \
3281416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling        2>&1 | tee $LogDir/llvm.install-Phase$Phase-$Flavor.log
3291416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling    cd $BuildDir
330b91c71299a819e2d20786b629376f119085e8b28Bill Wendling}
331b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
332c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sandsfunction build_dragonegg() {
333c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    Phase="$1"
334c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    Flavor="$2"
335c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    LLVMInstallDir="$3"
336c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    DragonEggObjDir="$4"
337c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    LLVM_CONFIG=$LLVMInstallDir/bin/llvm-config
338c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    TOP_DIR=$BuildDir/dragonegg.src
339c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands
340c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    echo "# Targeted compiler: $gcc_compiler"
341c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands
342c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    cd $DragonEggObjDir
34364acc57b23530aee37d224f48293cb764c4290a8Bill Wendling    echo "# Compiling phase $Phase dragonegg $Release-$RC $Flavor"
344c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    echo -n "# CXX=$cxx_compiler TOP_DIR=$TOP_DIR GCC=$gcc_compiler "
345c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    echo -n "LLVM_CONFIG=$LLVM_CONFIG ${MAKE} -f $TOP_DIR/Makefile "
346c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    echo "-j $NumJobs VERBOSE=1"
347c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    CXX="$cxx_compiler" TOP_DIR="$TOP_DIR" GCC="$gcc_compiler" \
348c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    LLVM_CONFIG="$LLVM_CONFIG" ${MAKE} -f $TOP_DIR/Makefile \
349c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        -j $NumJobs VERBOSE=1 \
350c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands            2>&1 | tee $LogDir/dragonegg-Phase$Phase-$Flavor.log
351c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    cd $BuildDir
352c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands}
353c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands
354b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingfunction test_llvmCore() {
355b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    Phase="$1"
356b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    Flavor="$2"
357b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    ObjDir="$3"
358b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
359b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    cd $ObjDir
360783993e79502641d4f2ec82f3db78320b6837f4eBill Wendling    ${MAKE} -k check-all \
3611416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling        2>&1 | tee $LogDir/llvm.check-Phase$Phase-$Flavor.log
362783993e79502641d4f2ec82f3db78320b6837f4eBill Wendling    ${MAKE} -k unittests \
36341adc5fb8bd0d81f07d93754868bd9f27b6fd9afBill Wendling        2>&1 | tee $LogDir/llvm.unittests-Phase$Phase-$Flavor.log
3641416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling    cd $BuildDir
365b91c71299a819e2d20786b629376f119085e8b28Bill Wendling}
366b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
367ea8e1447d1f563f743b6b73739f4ff0912595752Arnaud A. de Grandmaison# Clean RPATH. Libtool adds the build directory to the search path, which is
368ea8e1447d1f563f743b6b73739f4ff0912595752Arnaud A. de Grandmaison# not necessary --- and even harmful --- for the binary packages we release.
369ea8e1447d1f563f743b6b73739f4ff0912595752Arnaud A. de Grandmaisonfunction clean_RPATH() {
3703c031bdef960479def2e01f28be506dcbdeb8758Bill Wendling  if [ `uname -s` = "Darwin" ]; then
3713c031bdef960479def2e01f28be506dcbdeb8758Bill Wendling    return
3723c031bdef960479def2e01f28be506dcbdeb8758Bill Wendling  fi
373ea8e1447d1f563f743b6b73739f4ff0912595752Arnaud A. de Grandmaison  local InstallPath="$1"
374ea8e1447d1f563f743b6b73739f4ff0912595752Arnaud A. de Grandmaison  for Candidate in `find $InstallPath/{bin,lib} -type f`; do
375ea8e1447d1f563f743b6b73739f4ff0912595752Arnaud A. de Grandmaison    if file $Candidate | grep ELF | egrep 'executable|shared object' > /dev/null 2>&1 ; then
376ea8e1447d1f563f743b6b73739f4ff0912595752Arnaud A. de Grandmaison      rpath=`objdump -x $Candidate | grep 'RPATH' | sed -e's/^ *RPATH *//'`
377ea8e1447d1f563f743b6b73739f4ff0912595752Arnaud A. de Grandmaison      if [ -n "$rpath" ]; then
378ea8e1447d1f563f743b6b73739f4ff0912595752Arnaud A. de Grandmaison        newrpath=`echo $rpath | sed -e's/.*\(\$ORIGIN[^:]*\).*/\1/'`
379ea8e1447d1f563f743b6b73739f4ff0912595752Arnaud A. de Grandmaison        chrpath -r $newrpath $Candidate 2>&1 > /dev/null 2>&1
380ea8e1447d1f563f743b6b73739f4ff0912595752Arnaud A. de Grandmaison      fi
381ea8e1447d1f563f743b6b73739f4ff0912595752Arnaud A. de Grandmaison    fi
382ea8e1447d1f563f743b6b73739f4ff0912595752Arnaud A. de Grandmaison  done
383ea8e1447d1f563f743b6b73739f4ff0912595752Arnaud A. de Grandmaison}
384ea8e1447d1f563f743b6b73739f4ff0912595752Arnaud A. de Grandmaison
3853c031bdef960479def2e01f28be506dcbdeb8758Bill Wendling# Create a package of the release binaries.
3863c031bdef960479def2e01f28be506dcbdeb8758Bill Wendlingfunction package_release() {
3873c031bdef960479def2e01f28be506dcbdeb8758Bill Wendling    cwd=`pwd`
3883c031bdef960479def2e01f28be506dcbdeb8758Bill Wendling    cd $BuildDir/Phase3/Release
3893c031bdef960479def2e01f28be506dcbdeb8758Bill Wendling    mv llvmCore-$Release-$RC.install $Package
390d49c8fca79093f3eaaae3ee03ada65ef258f80b8Bill Wendling    if [ "$use_gzip" = "yes" ]; then
391d49c8fca79093f3eaaae3ee03ada65ef258f80b8Bill Wendling      tar cfz $BuildDir/$Package.tar.gz $Package
392d49c8fca79093f3eaaae3ee03ada65ef258f80b8Bill Wendling    else
393d49c8fca79093f3eaaae3ee03ada65ef258f80b8Bill Wendling      tar cfJ $BuildDir/$Package.tar.xz $Package
394d49c8fca79093f3eaaae3ee03ada65ef258f80b8Bill Wendling    fi
3953c031bdef960479def2e01f28be506dcbdeb8758Bill Wendling    mv $Package llvmCore-$Release-$RC.install
3963c031bdef960479def2e01f28be506dcbdeb8758Bill Wendling    cd $cwd
3973c031bdef960479def2e01f28be506dcbdeb8758Bill Wendling}
3983c031bdef960479def2e01f28be506dcbdeb8758Bill Wendling
399630243a8c2d40df137b64246b7ed4363962fd9b4Bill Wendlingset -e                          # Exit if any command fails
400630243a8c2d40df137b64246b7ed4363962fd9b4Bill Wendling
401b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingif [ "$do_checkout" = "yes" ]; then
402b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    export_sources
403b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingfi
404b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
405f0bf9dfc1f7755a6233e41fd6f259c4ee08a40dcDuncan Sands(
406a854f5d6f9394212319f4e00b6396900f6e62864Bill WendlingFlavors="Release"
4071416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendlingif [ "$do_debug" = "yes" ]; then
4081416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling    Flavors="Debug $Flavors"
4091416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendlingfi
410a854f5d6f9394212319f4e00b6396900f6e62864Bill Wendlingif [ "$do_asserts" = "yes" ]; then
411a854f5d6f9394212319f4e00b6396900f6e62864Bill Wendling    Flavors="$Flavors Release+Asserts"
412a854f5d6f9394212319f4e00b6396900f6e62864Bill Wendlingfi
413b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingif [ "$do_64bit" = "yes" ]; then
414b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    Flavors="$Flavors Release-64"
415b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingfi
416b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
417b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingfor Flavor in $Flavors ; do
418b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo ""
419b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo ""
420b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo "********************************************************************************"
42164acc57b23530aee37d224f48293cb764c4290a8Bill Wendling    echo "  Release:     $Release-$RC"
422b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo "  Build:       $Flavor"
423b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo "  System Info: "
424b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo "    `uname -a`"
425b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo "********************************************************************************"
426b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo ""
427b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
428fbc0dec7b4dc94a667c2b8af6748a742da95353dDuncan Sands    c_compiler="$CC"
429fbc0dec7b4dc94a667c2b8af6748a742da95353dDuncan Sands    cxx_compiler="$CXX"
430fbc0dec7b4dc94a667c2b8af6748a742da95353dDuncan Sands
43164acc57b23530aee37d224f48293cb764c4290a8Bill Wendling    llvmCore_phase1_objdir=$BuildDir/Phase1/$Flavor/llvmCore-$Release-$RC.obj
43264acc57b23530aee37d224f48293cb764c4290a8Bill Wendling    llvmCore_phase1_installdir=$BuildDir/Phase1/$Flavor/llvmCore-$Release-$RC.install
43364acc57b23530aee37d224f48293cb764c4290a8Bill Wendling    dragonegg_phase1_objdir=$BuildDir/Phase1/$Flavor/DragonEgg-$Release-$RC.obj
434b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
43564acc57b23530aee37d224f48293cb764c4290a8Bill Wendling    llvmCore_phase2_objdir=$BuildDir/Phase2/$Flavor/llvmCore-$Release-$RC.obj
43664acc57b23530aee37d224f48293cb764c4290a8Bill Wendling    llvmCore_phase2_installdir=$BuildDir/Phase2/$Flavor/llvmCore-$Release-$RC.install
43764acc57b23530aee37d224f48293cb764c4290a8Bill Wendling    llvmCore_de_phase2_objdir=$BuildDir/Phase2/$Flavor/llvmCore-DragonEgg-$Release-$RC.obj
43864acc57b23530aee37d224f48293cb764c4290a8Bill Wendling    llvmCore_de_phase2_installdir=$BuildDir/Phase2/$Flavor/llvmCore-DragonEgg-$Release-$RC.install
43964acc57b23530aee37d224f48293cb764c4290a8Bill Wendling    dragonegg_phase2_objdir=$BuildDir/Phase2/$Flavor/DragonEgg-$Release-$RC.obj
440b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
44164acc57b23530aee37d224f48293cb764c4290a8Bill Wendling    llvmCore_phase3_objdir=$BuildDir/Phase3/$Flavor/llvmCore-$Release-$RC.obj
44264acc57b23530aee37d224f48293cb764c4290a8Bill Wendling    llvmCore_phase3_installdir=$BuildDir/Phase3/$Flavor/llvmCore-$Release-$RC.install
44364acc57b23530aee37d224f48293cb764c4290a8Bill Wendling    llvmCore_de_phase3_objdir=$BuildDir/Phase3/$Flavor/llvmCore-DragonEgg-$Release-$RC.obj
44464acc57b23530aee37d224f48293cb764c4290a8Bill Wendling    llvmCore_de_phase3_installdir=$BuildDir/Phase3/$Flavor/llvmCore-DragonEgg-$Release-$RC.install
44564acc57b23530aee37d224f48293cb764c4290a8Bill Wendling    dragonegg_phase3_objdir=$BuildDir/Phase3/$Flavor/DragonEgg-$Release-$RC.obj
446a854f5d6f9394212319f4e00b6396900f6e62864Bill Wendling
447b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    rm -rf $llvmCore_phase1_objdir
448b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    rm -rf $llvmCore_phase1_installdir
449c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    rm -rf $dragonegg_phase1_objdir
450c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands
451b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    rm -rf $llvmCore_phase2_objdir
452b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    rm -rf $llvmCore_phase2_installdir
453c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    rm -rf $llvmCore_de_phase2_objdir
454c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    rm -rf $llvmCore_de_phase2_installdir
455c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    rm -rf $dragonegg_phase2_objdir
456c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands
457a854f5d6f9394212319f4e00b6396900f6e62864Bill Wendling    rm -rf $llvmCore_phase3_objdir
458a854f5d6f9394212319f4e00b6396900f6e62864Bill Wendling    rm -rf $llvmCore_phase3_installdir
459c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    rm -rf $llvmCore_de_phase3_objdir
460c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    rm -rf $llvmCore_de_phase3_installdir
461c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    rm -rf $dragonegg_phase3_objdir
462b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
463b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    mkdir -p $llvmCore_phase1_objdir
464b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    mkdir -p $llvmCore_phase1_installdir
465c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    mkdir -p $dragonegg_phase1_objdir
466c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands
467b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    mkdir -p $llvmCore_phase2_objdir
468b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    mkdir -p $llvmCore_phase2_installdir
469c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    mkdir -p $llvmCore_de_phase2_objdir
470c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    mkdir -p $llvmCore_de_phase2_installdir
471c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    mkdir -p $dragonegg_phase2_objdir
472c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands
473a854f5d6f9394212319f4e00b6396900f6e62864Bill Wendling    mkdir -p $llvmCore_phase3_objdir
474a854f5d6f9394212319f4e00b6396900f6e62864Bill Wendling    mkdir -p $llvmCore_phase3_installdir
475c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    mkdir -p $llvmCore_de_phase3_objdir
476c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    mkdir -p $llvmCore_de_phase3_installdir
477c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    mkdir -p $dragonegg_phase3_objdir
478b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
479b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    ############################################################################
480c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    # Phase 1: Build llvmCore and clang
481b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    echo "# Phase 1: Building llvmCore"
482b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    configure_llvmCore 1 $Flavor \
4831416dc29d8573e58c8b2d7fe0715f3e289d03ab8Bill Wendling        $llvmCore_phase1_objdir $llvmCore_phase1_installdir
484b91c71299a819e2d20786b629376f119085e8b28Bill Wendling    build_llvmCore 1 $Flavor \
485b91c71299a819e2d20786b629376f119085e8b28Bill Wendling        $llvmCore_phase1_objdir
486ea8e1447d1f563f743b6b73739f4ff0912595752Arnaud A. de Grandmaison    clean_RPATH $llvmCore_phase1_installdir
487b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
488c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    # Test clang
489c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    if [ "$do_clang" = "yes" ]; then
4901adc215ddcadcfaaa07a8e93f48a8f62c4561afeBill Wendling        ########################################################################
491c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        # Phase 2: Build llvmCore with newly built clang from phase 1.
492c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        c_compiler=$llvmCore_phase1_installdir/bin/clang
493c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        cxx_compiler=$llvmCore_phase1_installdir/bin/clang++
494c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        echo "# Phase 2: Building llvmCore"
495c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        configure_llvmCore 2 $Flavor \
496c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands            $llvmCore_phase2_objdir $llvmCore_phase2_installdir
497c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        build_llvmCore 2 $Flavor \
498c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands            $llvmCore_phase2_objdir
499ea8e1447d1f563f743b6b73739f4ff0912595752Arnaud A. de Grandmaison        clean_RPATH $llvmCore_phase2_installdir
500c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands
5011adc215ddcadcfaaa07a8e93f48a8f62c4561afeBill Wendling        ########################################################################
502c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        # Phase 3: Build llvmCore with newly built clang from phase 2.
503c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        c_compiler=$llvmCore_phase2_installdir/bin/clang
504c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        cxx_compiler=$llvmCore_phase2_installdir/bin/clang++
505c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        echo "# Phase 3: Building llvmCore"
506c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        configure_llvmCore 3 $Flavor \
507c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands            $llvmCore_phase3_objdir $llvmCore_phase3_installdir
508c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        build_llvmCore 3 $Flavor \
509c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands            $llvmCore_phase3_objdir
510ea8e1447d1f563f743b6b73739f4ff0912595752Arnaud A. de Grandmaison        clean_RPATH $llvmCore_phase3_installdir
511c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands
5121adc215ddcadcfaaa07a8e93f48a8f62c4561afeBill Wendling        ########################################################################
513c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        # Testing: Test phase 3
514c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        echo "# Testing - built with clang"
515c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        test_llvmCore 3 $Flavor $llvmCore_phase3_objdir
516c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands
5171adc215ddcadcfaaa07a8e93f48a8f62c4561afeBill Wendling        ########################################################################
5181adc215ddcadcfaaa07a8e93f48a8f62c4561afeBill Wendling        # Compare .o files between Phase2 and Phase3 and report which ones
5191adc215ddcadcfaaa07a8e93f48a8f62c4561afeBill Wendling        # differ.
5201adc215ddcadcfaaa07a8e93f48a8f62c4561afeBill Wendling        if [ "$do_compare" = "yes" ]; then
521cbece8c2a6c06b3c14e35228b326e629f936c458Bill Wendling            echo
522cbece8c2a6c06b3c14e35228b326e629f936c458Bill Wendling            echo "# Comparing Phase 2 and Phase 3 files"
523cbece8c2a6c06b3c14e35228b326e629f936c458Bill Wendling            for o in `find $llvmCore_phase2_objdir -name '*.o'` ; do
524cbece8c2a6c06b3c14e35228b326e629f936c458Bill Wendling                p3=`echo $o | sed -e 's,Phase2,Phase3,'`
525cbece8c2a6c06b3c14e35228b326e629f936c458Bill Wendling                if ! cmp --ignore-initial=16 $o $p3 > /dev/null 2>&1 ; then
526cbece8c2a6c06b3c14e35228b326e629f936c458Bill Wendling                    echo "file `basename $o` differs between phase 2 and phase 3"
527cbece8c2a6c06b3c14e35228b326e629f936c458Bill Wendling                fi
528cbece8c2a6c06b3c14e35228b326e629f936c458Bill Wendling            done
5291adc215ddcadcfaaa07a8e93f48a8f62c4561afeBill Wendling        fi
530c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    fi
531a854f5d6f9394212319f4e00b6396900f6e62864Bill Wendling
532c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    # Test dragonegg
533c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    if [ "$do_dragonegg" = "yes" ]; then
534c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        # Build dragonegg using the targeted gcc.  This isn't necessary, but
535c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        # helps avoid using broken versions of gcc (which are legion), tests
536c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        # that the targeted gcc is basically sane and is consistent with the
537c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        # later phases in which the targeted gcc + dragonegg are used.
538c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        c_compiler="$gcc_compiler"
539c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        cxx_compiler="$gxx_compiler"
540c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        build_dragonegg 1 $Flavor $llvmCore_phase1_installdir $dragonegg_phase1_objdir
541c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands
5421adc215ddcadcfaaa07a8e93f48a8f62c4561afeBill Wendling        ########################################################################
543c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        # Phase 2: Build llvmCore with newly built dragonegg from phase 1.
544c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        c_compiler="$gcc_compiler -fplugin=$dragonegg_phase1_objdir/dragonegg.so"
545c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        cxx_compiler="$gxx_compiler -fplugin=$dragonegg_phase1_objdir/dragonegg.so"
546c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        echo "# Phase 2: Building llvmCore with dragonegg"
547c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        configure_llvmCore 2 $Flavor \
548c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands            $llvmCore_de_phase2_objdir $llvmCore_de_phase2_installdir
549c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        build_llvmCore 2 $Flavor \
550c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands            $llvmCore_de_phase2_objdir
551c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        build_dragonegg 2 $Flavor $llvmCore_de_phase2_installdir $dragonegg_phase2_objdir
552ea8e1447d1f563f743b6b73739f4ff0912595752Arnaud A. de Grandmaison        clean_RPATH $llvmCore_de_phase2_installdir
553c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands
5541adc215ddcadcfaaa07a8e93f48a8f62c4561afeBill Wendling        ########################################################################
5558cf79f86b7861de21e76209137c6498bad26d2b6Duncan Sands        # Phase 3: Build llvmCore with newly built dragonegg from phase 2.
556c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        c_compiler="$gcc_compiler -fplugin=$dragonegg_phase2_objdir/dragonegg.so"
557c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        cxx_compiler="$gxx_compiler -fplugin=$dragonegg_phase2_objdir/dragonegg.so"
558c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        echo "# Phase 3: Building llvmCore with dragonegg"
559c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        configure_llvmCore 3 $Flavor \
560c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands            $llvmCore_de_phase3_objdir $llvmCore_de_phase3_installdir
561c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        build_llvmCore 3 $Flavor \
562c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands            $llvmCore_de_phase3_objdir
563c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        build_dragonegg 3 $Flavor $llvmCore_de_phase3_installdir $dragonegg_phase3_objdir
564ea8e1447d1f563f743b6b73739f4ff0912595752Arnaud A. de Grandmaison        clean_RPATH $llvmCore_de_phase3_installdir
565c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands
5661adc215ddcadcfaaa07a8e93f48a8f62c4561afeBill Wendling        ########################################################################
567c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        # Testing: Test phase 3
568c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        c_compiler="$gcc_compiler -fplugin=$dragonegg_phase3_objdir/dragonegg.so"
569c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        cxx_compiler="$gxx_compiler -fplugin=$dragonegg_phase3_objdir/dragonegg.so"
570c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        echo "# Testing - built with dragonegg"
571c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        test_llvmCore 3 $Flavor $llvmCore_de_phase3_objdir
572c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands
5731adc215ddcadcfaaa07a8e93f48a8f62c4561afeBill Wendling        ########################################################################
574c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        # Compare .o files between Phase2 and Phase3 and report which ones differ.
575c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        echo
576c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        echo "# Comparing Phase 2 and Phase 3 files"
57719595dc4d0cb2495c37828530f04b7e47cf0837fDuncan Sands        for o in `find $llvmCore_de_phase2_objdir -name '*.o'` \
57819595dc4d0cb2495c37828530f04b7e47cf0837fDuncan Sands          `find $dragonegg_phase2_objdir -name '*.o'` ; do
579c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands            p3=`echo $o | sed -e 's,Phase2,Phase3,'`
580c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands            if ! cmp --ignore-initial=16 $o $p3 > /dev/null 2>&1 ; then
581c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands                echo "file `basename $o` differs between dragonegg phase 2 and phase 3"
582c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands            fi
583c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        done
584c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    fi
585a854f5d6f9394212319f4e00b6396900f6e62864Bill Wendling
586c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    # Otherwise just test the core.
587c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    if [ "$do_clang" != "yes" -a "$do_dragonegg" != "yes" ]; then
588c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        echo "# Testing - built with system compiler"
589c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands        test_llvmCore 1 $Flavor $llvmCore_phase1_objdir
590c1aef0884c1749a59b16ed3b5ee8b6bf67eabb8cDuncan Sands    fi
591b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingdone
59264acc57b23530aee37d224f48293cb764c4290a8Bill Wendling) 2>&1 | tee $LogDir/testing.$Release-$RC.log
593b91c71299a819e2d20786b629376f119085e8b28Bill Wendling
5943c031bdef960479def2e01f28be506dcbdeb8758Bill Wendlingpackage_release
5953c031bdef960479def2e01f28be506dcbdeb8758Bill Wendling
596630243a8c2d40df137b64246b7ed4363962fd9b4Bill Wendlingset +e
597630243a8c2d40df137b64246b7ed4363962fd9b4Bill Wendling
598b91c71299a819e2d20786b629376f119085e8b28Bill Wendling# Woo hoo!
599b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingecho "### Testing Finished ###"
600d49c8fca79093f3eaaae3ee03ada65ef258f80b8Bill Wendlingif [ "$use_gzip" = "yes" ]; then
601d49c8fca79093f3eaaae3ee03ada65ef258f80b8Bill Wendling  echo "### Package: $Package.tar.gz"
602d49c8fca79093f3eaaae3ee03ada65ef258f80b8Bill Wendlingelse
603d49c8fca79093f3eaaae3ee03ada65ef258f80b8Bill Wendling  echo "### Package: $Package.tar.xz"
604d49c8fca79093f3eaaae3ee03ada65ef258f80b8Bill Wendlingfi
605f0bf9dfc1f7755a6233e41fd6f259c4ee08a40dcDuncan Sandsecho "### Logs: $LogDir"
606b91c71299a819e2d20786b629376f119085e8b28Bill Wendlingexit 0
607