blob: aed9132bf94cce4da4a69e8821cb8db6f0620027 [file] [log] [blame]
Bill Wendlingb91c7122010-09-08 18:32:31 +00001#!/bin/bash
2#===-- test-release.sh - Test the LLVM release candidates ------------------===#
3#
4# The LLVM Compiler Infrastructure
5#
6# This file is distributed under the University of Illinois Open Source
7# License.
8#
9#===------------------------------------------------------------------------===#
10#
11# Download, build, and test the release candidate for an LLVM release.
12#
13#===------------------------------------------------------------------------===#
14
Bill Wendlinge7e9a602011-03-07 07:37:37 +000015set -e # Exit if any command fails
16set -x # Show commands as they are executed
Bill Wendlingb91c7122010-09-08 18:32:31 +000017
18Release=""
19Release_no_dot=""
20RC=""
21do_checkout="yes"
22do_ada="no"
Bill Wendlingc248bba2010-09-08 20:09:14 +000023do_objc="yes"
Bill Wendlingb91c7122010-09-08 18:32:31 +000024do_fortran="yes"
25do_64bit="yes"
26BuildDir="`pwd`"
27
Bill Wendlingb91c7122010-09-08 18:32:31 +000028function usage() {
29 echo "usage: `basename $0` -release X.Y -rc NUM [OPTIONS]"
30 echo ""
31 echo " -release X.Y The release number to test."
32 echo " -rc NUM The pre-release candidate number."
33 echo " -j NUM Number of compile jobs to run. [default: 3]"
34 echo " -build-dir DIR Directory to perform testing in. [default: pwd]"
35 echo " -no-checkout Don't checkout the sources from SVN."
36 echo " -no-64bit Don't test the 64-bit version. [default: yes]"
Bill Wendlinge7e9a602011-03-07 07:37:37 +000037 echo " -enable-ada Build Ada. [default: disable]"
38 echo " -disable-objc Disable ObjC build. [default: enable]"
39 echo " -disable-fortran Disable Fortran build. [default: enable]"
Bill Wendlingb91c7122010-09-08 18:32:31 +000040}
41
42while [ $# -gt 0 ]; do
43 case $1 in
44 -release | --release )
45 shift
46 Release="$1"
47 Release_no_dot="`echo $1 | sed -e 's,\.,,'`"
48 ;;
49 -rc | --rc | -RC | --RC )
50 shift
51 RC=$1
52 ;;
53 -j* )
54 NumJobs="`echo $1 | sed -e 's,-j\([0-9]*\),\1,g'`"
55 if [ -z "$NumJobs" ]; then
56 shift
57 NumJobs="$1"
58 fi
59 ;;
60 -build-dir | --build-dir | -builddir | --builddir )
61 shift
62 BuildDir="$1"
63 ;;
64 -no-checkout | --no-checkout )
65 do_checkout="no"
66 ;;
67 -no-64bit | --no-64bit )
68 do_64bit="no"
69 ;;
Bill Wendlinge7e9a602011-03-07 07:37:37 +000070 -enable-ada | --enable-ada )
Bill Wendlingb91c7122010-09-08 18:32:31 +000071 do_ada="yes"
72 ;;
Bill Wendlingc248bba2010-09-08 20:09:14 +000073 -disable-objc | --disable-objc )
74 do_objc="no"
75 ;;
Bill Wendlingb91c7122010-09-08 18:32:31 +000076 -disable-fortran | --disable-fortran )
77 echo "WARNING: Do you *really* need to disable Fortran?"
78 sleep 5
79 do_fortran="no"
80 ;;
81 -help | --help | -h | --h | -\? )
82 usage
83 exit 0
84 ;;
85 * )
86 echo "unknown option: $1"
87 usage
88 exit 1
89 ;;
90 esac
91 shift
92done
93
94# Check required arguments.
95if [ -z "$Release" ]; then
96 echo "No release number specified!"
97 exit 1
98fi
99if [ -z "$RC" ]; then
100 echo "No release candidate number specified!"
101 exit 1
102fi
103
Duncan Sandsd357d742010-09-08 19:50:25 +0000104# Figure out how many make processes to run.
105if [ -z "$NumJobs" ]; then
106 NumJobs=`sysctl -n hw.activecpu 2> /dev/null || true`
107fi
108if [ -z "$NumJobs" ]; then
109 NumJobs=`sysctl -n hw.ncpu 2> /dev/null || true`
110fi
111if [ -z "$NumJobs" ]; then
112 NumJobs=`grep -c processor /proc/cpuinfo 2> /dev/null || true`
113fi
Bill Wendlingb91c7122010-09-08 18:32:31 +0000114if [ -z "$NumJobs" ]; then
115 NumJobs=3
116fi
117
118# Location of sources.
119llvmCore_srcdir=$BuildDir/llvmCore-$Release-rc$RC.src
120llvmgcc42_srcdir=$BuildDir/llvmgcc42-$Release-rc$RC.src
121
Bill Wendlingb91c7122010-09-08 18:32:31 +0000122# SVN URLs for the sources.
123Base_url="http://llvm.org/svn/llvm-project"
124llvmCore_RC_url="$Base_url/llvm/tags/RELEASE_$Release_no_dot/rc$RC"
125llvmgcc42_RC_url="$Base_url/llvm-gcc-4.2/tags/RELEASE_$Release_no_dot/rc$RC"
126clang_RC_url="$Base_url/cfe/tags/RELEASE_$Release_no_dot/rc$RC"
127test_suite_RC_url="$Base_url/test-suite/tags/RELEASE_$Release_no_dot/rc$RC"
128
129# Make sure that the URLs are valid.
130function check_valid_urls() {
131 echo "# Validating SVN URLs"
132 if ! svn ls $llvmCore_RC_url > /dev/null 2>&1 ; then
133 echo "llvm $Release release candidate $RC doesn't exist!"
134 exit 1
135 fi
136 if ! svn ls $llvmgcc42_RC_url > /dev/null 2>&1 ; then
137 echo "llvm-gcc-4.2 $Release release candidate $RC doesn't exist!"
138 exit 1
139 fi
140 if ! svn ls $clang_RC_url > /dev/null 2>&1 ; then
141 echo "clang $Release release candidate $RC doesn't exist!"
142 exit 1
143 fi
144 if ! svn ls $test_suite_RC_url > /dev/null 2>&1 ; then
145 echo "test-suite $Release release candidate $RC doesn't exist!"
146 exit 1
147 fi
148}
149
150# Export sources to the the build directory.
151function export_sources() {
152 check_valid_urls
153
154 echo "# Exporting llvm $Release-RC$RC sources"
155 svn export -q $llvmCore_RC_url $llvmCore_srcdir
156 echo "# Exporting llvm-gcc-4.2 $Release-rc$RC sources"
157 svn export -q $llvmgcc42_RC_url $llvmgcc42_srcdir
158 echo "# Exporting clang $Release-rc$RC sources"
159 svn export -q $clang_RC_url $llvmCore_srcdir/tools/clang
160 echo "# Exporting llvm test suite $Release-rc$RC sources"
161 svn export -q $test_suite_RC_url $llvmCore_srcdir/projects/llvm-test
162}
163
164function configure_llvmCore() {
165 Phase="$1"
166 Flavor="$2"
167 ObjDir="$3"
168 InstallDir="$4"
169 llvmgccDir="$5"
170
171 case $Flavor in
172 Release | Release-64 )
173 Optimized="yes"
Bill Wendlingb91c7122010-09-08 18:32:31 +0000174 Assertions="no"
175 ;;
Duncan Sands8a6e53e2010-09-13 13:45:33 +0000176 Release+Asserts )
177 Optimized="yes"
178 Assertions="yes"
179 ;;
Bill Wendlingb91c7122010-09-08 18:32:31 +0000180 Debug )
181 Optimized="no"
182 Assertions="yes"
183 ;;
184 * )
185 echo "# Invalid flavor $Flavor!"
186 echo ""
187 return
188 ;;
189 esac
190
191 cd $ObjDir
192 echo "# Configuring llvm $Release-rc$RC $Flavor"
Duncan Sandscff1dbf2010-09-08 19:58:15 +0000193 echo "# $llvmCore_srcdir/configure --prefix=$InstallDir \
Bill Wendlingb91c7122010-09-08 18:32:31 +0000194 --enable-optimized=$Optimized \
195 --enable-assertions=$Assertions \
196 --with-llvmgccdir=$llvmgccDir"
197 $llvmCore_srcdir/configure --prefix=$InstallDir \
198 --enable-optimized=$Optimized \
199 --enable-assertions=$Assertions \
Bill Wendlinge7e9a602011-03-07 07:37:37 +0000200 --with-llvmgccdir=$llvmgccDir
Bill Wendlingb91c7122010-09-08 18:32:31 +0000201 cd -
202}
203
204function build_llvmCore() {
205 Phase="$1"
206 Flavor="$2"
207 ObjDir="$3"
208 ExtraOpts=""
209
210 CompilerFlags=""
211 if [ "$Phase" = "2" ]; then
212 CompilerFlags="CC=$llvmgccDir/bin/llvm-gcc CXX=$llvmgccDir/bin/llvm-g++"
213 fi
214 if [ "$Flavor" = "Release-64" ]; then
215 ExtraOpts="EXTRA_OPTIONS=-m64"
216 fi
217
218 cd $ObjDir
219 echo "# Compiling llvm $Release-rc$RC $Flavor"
220 echo "# make -j $NumJobs VERBOSE=1 $ExtraOpts"
Bill Wendlinge7e9a602011-03-07 07:37:37 +0000221 make -j $NumJobs VERBOSE=1 $ExtraOpts $CompilerFlags
Bill Wendlingb91c7122010-09-08 18:32:31 +0000222
223 echo "# Installing llvm $Release-rc$RC $Flavor"
224 echo "# make install"
Bill Wendlinge7e9a602011-03-07 07:37:37 +0000225 make install
Bill Wendlingb91c7122010-09-08 18:32:31 +0000226 cd -
227}
228
229function test_llvmCore() {
230 Phase="$1"
231 Flavor="$2"
232 ObjDir="$3"
233
234 cd $ObjDir
Bill Wendlinge7e9a602011-03-07 07:37:37 +0000235 make check
236 make -C tools/clang test
237 make unittests
Bill Wendlingb91c7122010-09-08 18:32:31 +0000238 cd -
239}
240
241function configure_llvm_gcc() {
242 Phase="$1"
243 Flavor="$2"
244 ObjDir="$3"
245 InstallDir="$4"
246 llvmObjDir="$5"
247
Bill Wendlingc248bba2010-09-08 20:09:14 +0000248 languages="c,c++"
249 if [ "$do_objc" = "yes" ]; then
250 languages="$languages,objc,obj-c++"
251 fi
Bill Wendlingb91c7122010-09-08 18:32:31 +0000252 if [ "$do_fortran" = "yes" ]; then
253 languages="$languages,fortran"
254 fi
255 if [ "$do_ada" = "yes" ]; then
256 languages="$languages,ada"
257 fi
258
259 cd $ObjDir
260 echo "# Configuring llvm-gcc $Release-rc$RC $Flavor"
261 echo "# $llvmgcc42_srcdir/configure --prefix=$InstallDir \
262 --program-prefix=llvm- --enable-llvm=$llvmObjDir \
Bill Wendling8be4e032010-09-08 20:21:11 +0000263 --enable-languages=$languages"
Bill Wendlingb91c7122010-09-08 18:32:31 +0000264 $llvmgcc42_srcdir/configure --prefix=$InstallDir \
265 --program-prefix=llvm- --enable-llvm=$llvmObjDir \
Bill Wendlinge7e9a602011-03-07 07:37:37 +0000266 --enable-languages=$languages
Bill Wendlingb91c7122010-09-08 18:32:31 +0000267 cd -
268}
269
270function build_llvm_gcc() {
271 Phase="$1"
272 Flavor="$2"
273 ObjDir="$3"
274 llvmgccDir="$4"
275
276 CompilerFlags=""
277 if [ "$Phase" = "2" ]; then
278 CompilerFlags="CC=$llvmgccDir/bin/llvm-gcc CXX=$llvmgccDir/bin/llvm-g++"
279 fi
280
281 cd $ObjDir
282 echo "# Compiling llvm-gcc $Release-rc$RC $Flavor"
283 echo "# make -j $NumJobs bootstrap LLVM_VERSION_INFO=$Release"
Bill Wendlinge7e9a602011-03-07 07:37:37 +0000284 make -j $NumJobs bootstrap LLVM_VERSION_INFO=$Release $CompilerFlags
Bill Wendlingb91c7122010-09-08 18:32:31 +0000285
286 echo "# Installing llvm-gcc $Release-rc$RC $Flavor"
287 echo "# make install"
Bill Wendlinge7e9a602011-03-07 07:37:37 +0000288 make install
Bill Wendlingb91c7122010-09-08 18:32:31 +0000289 cd -
290}
291
292if [ "$do_checkout" = "yes" ]; then
293 export_sources
294fi
295
Duncan Sands40989a42010-09-15 12:30:35 +0000296Flavors="Debug Release Release+Asserts"
Bill Wendlingb91c7122010-09-08 18:32:31 +0000297if [ "$do_64bit" = "yes" ]; then
298 Flavors="$Flavors Release-64"
299fi
300
301for Flavor in $Flavors ; do
302 echo ""
303 echo ""
304 echo "********************************************************************************"
305 echo " Release: $Release-rc$RC"
306 echo " Build: $Flavor"
307 echo " System Info: "
308 echo " `uname -a`"
309 echo "********************************************************************************"
310 echo ""
311
312 llvmCore_phase1_objdir=$BuildDir/Phase1/$Flavor/llvmCore-$Release-rc$RC.obj
313 llvmCore_phase1_installdir=$BuildDir/Phase1/$Flavor/llvmCore-$Release-rc$RC.install
314
315 llvmCore_phase2_objdir=$BuildDir/Phase2/$Flavor/llvmCore-$Release-rc$RC.obj
316 llvmCore_phase2_installdir=$BuildDir/Phase2/$Flavor/llvmCore-$Release-rc$RC.install
317
318 rm -rf $llvmCore_phase1_objdir
319 rm -rf $llvmCore_phase1_installdir
320 rm -rf $llvmCore_phase2_objdir
321 rm -rf $llvmCore_phase2_installdir
322
323 mkdir -p $llvmCore_phase1_objdir
324 mkdir -p $llvmCore_phase1_installdir
325 mkdir -p $llvmCore_phase2_objdir
326 mkdir -p $llvmCore_phase2_installdir
327
328 llvmgcc42_phase1_objdir=$BuildDir/Phase1/$Flavor/llvmgcc42-$Release-rc$RC.obj
329 llvmgcc42_phase1_installdir=$BuildDir/Phase1/$Flavor/llvmgcc42-$Release-rc$RC.install
330
331 llvmgcc42_phase2_objdir=$BuildDir/Phase2/$Flavor/llvmgcc42-$Release-rc$RC.obj
332 llvmgcc42_phase2_installdir=$BuildDir/Phase2/$Flavor/llvmgcc42-$Release-rc$RC.install
333
334 rm -rf $llvmgcc42_phase1_objdir
335 rm -rf $llvmgcc42_phase1_installdir
336 rm -rf $llvmgcc42_phase2_objdir
337 rm -rf $llvmgcc42_phase2_installdir
338
339 mkdir -p $llvmgcc42_phase1_objdir
340 mkdir -p $llvmgcc42_phase1_installdir
341 mkdir -p $llvmgcc42_phase2_objdir
342 mkdir -p $llvmgcc42_phase2_installdir
343
344 ############################################################################
345 # Phase 1: Build llvmCore and llvmgcc42
346 echo "# Phase 1: Building llvmCore"
347 configure_llvmCore 1 $Flavor \
348 $llvmCore_phase1_objdir $llvmCore_phase1_installdir \
349 $llvmgcc42_phase1_installdir
350 build_llvmCore 1 $Flavor \
351 $llvmCore_phase1_objdir
352
353 echo "# Phase 1: Building llvmgcc42"
354 configure_llvm_gcc 1 $Flavor \
355 $llvmgcc42_phase1_objdir $llvmgcc42_phase1_installdir \
356 $llvmCore_phase1_objdir
357 build_llvm_gcc 1 $Flavor \
358 $llvmgcc42_phase1_objdir $llvmgcc42_phase1_installdir
359
360 ############################################################################
361 # Phase 2: Build llvmCore with newly built llvmgcc42 from phase 1.
362 echo "# Phase 2: Building llvmCore"
363 configure_llvmCore 2 $Flavor \
364 $llvmCore_phase2_objdir $llvmCore_phase2_installdir \
365 $llvmgcc42_phase1_installdir
366 build_llvmCore 2 $Flavor \
367 $llvmCore_phase2_objdir
368
369 echo "# Phase 2: Building llvmgcc42"
370 configure_llvm_gcc 2 $Flavor \
371 $llvmgcc42_phase2_objdir $llvmgcc42_phase2_installdir \
372 $llvmCore_phase2_objdir
373 build_llvm_gcc 2 $Flavor \
374 $llvmgcc42_phase2_objdir $llvmgcc42_phase1_installdir
375
376 echo "# Testing - built with llvmgcc42"
377 test_llvmCore 2 $Flavor $llvmCore_phase2_objdir
378done
Bill Wendlingb91c7122010-09-08 18:32:31 +0000379
380# Woo hoo!
381echo "### Testing Finished ###"
Bill Wendlingb91c7122010-09-08 18:32:31 +0000382exit 0