blob: 943bbc727755a4bcf60a7da13d83ccf5ca01fc2b [file] [log] [blame]
Daniel Dunbar44abe742009-07-19 01:59:03 +00001import os
2
Daniel Dunbar235aa412009-07-18 07:16:15 +00003import buildbot
4import buildbot.process.factory
5from buildbot.steps.source import SVN
Daniel Dunbar44abe742009-07-19 01:59:03 +00006from buildbot.steps.shell import Configure, ShellCommand
7from buildbot.steps.shell import WarningCountingShellCommand
8from buildbot.steps.transfer import FileDownload
Daniel Dunbar235aa412009-07-18 07:16:15 +00009from buildbot.process.properties import WithProperties
10
Daniel Dunbar235aa412009-07-18 07:16:15 +000011from zorg.buildbot.commands.ClangTestCommand import ClangTestCommand
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +000012from zorg.buildbot.commands.BatchFileDownload import BatchFileDownload
Daniel Dunbar22d594a2010-07-31 05:29:16 +000013from zorg.buildbot.commands import DejaGNUCommand
Daniel Dunbar235aa412009-07-18 07:16:15 +000014
Daniel Dunbar2b67e8f2011-02-11 21:03:41 +000015from zorg.buildbot.builders.Util import getConfigArgs
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +000016
Galina Kistanovaf4d79352011-10-20 20:46:52 +000017def getClangBuildFactory(
18 triple=None,
19 clean=True,
20 test=True,
21 package_dst=None,
22 run_cxx_tests=False,
23 examples=False,
24 valgrind=False,
25 valgrindLeakCheck=False,
26 outOfDir=False,
27 useTwoStage=False,
28 completely_clean=False,
29 always_install=False,
30 make='make',
31 jobs="%(jobs)s",
32 stage1_config='Debug+Asserts',
33 stage2_config='Release+Asserts',
34 env={}, # Environmental variables for all steps.
35 extra_configure_args=[],
36 use_pty_in_tests=False,
Peter Collingbourned49ac282011-10-25 14:38:45 +000037 trunk_revision=None,
38 force_checkout=False,
Peter Collingbourne7a95b0c2011-10-26 16:40:17 +000039 extra_clean_step=None,
Galina Kistanovaf4d79352011-10-20 20:46:52 +000040 checkout_compiler_rt=False):
41 # Prepare environmental variables. Set here all env we want everywhere.
42 merged_env = {
43 'TERM' : 'dumb' # Make sure Clang doesn't use color escape sequences.
44 }
45 if env is not None:
46 # Overwrite pre-set items with the given ones, so user can set anything.
47 merged_env.update(env)
48
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +000049 # Don't use in-dir builds with a two stage build process.
Daniel Dunbar3efb7822010-02-26 19:20:00 +000050 inDir = not outOfDir and not useTwoStage
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +000051 if inDir:
52 llvm_srcdir = "llvm"
53 llvm_1_objdir = "llvm"
Daniel Dunbar9870de32010-03-28 22:25:31 +000054 if always_install:
55 llvm_1_installdir = "llvm.install"
56 else:
57 llvm_1_installdir = None
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +000058 else:
59 llvm_srcdir = "llvm.src"
60 llvm_1_objdir = "llvm.obj"
61 llvm_1_installdir = "llvm.install.1"
62 llvm_2_objdir = "llvm.obj.2"
Daniel Dunbar22d594a2010-07-31 05:29:16 +000063 llvm_2_installdir = "llvm.install"
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +000064
Daniel Dunbar235aa412009-07-18 07:16:15 +000065 f = buildbot.process.factory.BuildFactory()
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +000066
67 # Determine the build directory.
68 f.addStep(buildbot.steps.shell.SetProperty(name="get_builddir",
69 command=["pwd"],
70 property="builddir",
71 description="set build dir",
Galina Kistanovaf4d79352011-10-20 20:46:52 +000072 workdir=".",
73 env=merged_env))
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +000074
Daniel Dunbar06b20f12010-04-08 18:29:38 +000075 # Blow away completely, if requested.
76 if completely_clean:
77 f.addStep(ShellCommand(name="rm-llvm.src",
78 command=["rm", "-rf", llvm_srcdir],
79 haltOnFailure=True,
80 description=["rm src dir", "llvm"],
Galina Kistanovaf4d79352011-10-20 20:46:52 +000081 workdir=".",
82 env=merged_env))
Daniel Dunbar06b20f12010-04-08 18:29:38 +000083
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +000084 # Checkout sources.
Peter Collingbourned49ac282011-10-25 14:38:45 +000085 if trunk_revision:
86 # The SVN build step provides no mechanism to check out a specific revision
87 # based on a property, so just run the commands directly here.
88 svn_co = ['svn', 'checkout']
89 if force_checkout:
90 svn_co += ['--force']
91 svn_co += ['--revision', WithProperties(trunk_revision)]
92
93 svn_co_llvm = svn_co + \
94 [WithProperties('http://llvm.org/svn/llvm-project/llvm/trunk@%s' %
95 trunk_revision),
96 llvm_srcdir]
97 svn_co_clang = svn_co + \
98 [WithProperties('http://llvm.org/svn/llvm-project/cfe/trunk@%s' %
99 trunk_revision),
100 '%s/tools/clang' % llvm_srcdir]
101
102 f.addStep(ShellCommand(name='svn-llvm',
103 command=svn_co_llvm,
104 haltOnFailure=True,
105 workdir='.'))
106 f.addStep(ShellCommand(name='svn-clang',
107 command=svn_co_clang,
108 haltOnFailure=True,
109 workdir='.'))
110 else:
111 f.addStep(SVN(name='svn-llvm',
Daniel Dunbarf4e23eb2010-09-20 21:13:02 +0000112 mode='update',
Peter Collingbourned49ac282011-10-25 14:38:45 +0000113 baseURL='http://llvm.org/svn/llvm-project/llvm/',
Daniel Dunbarf4e23eb2010-09-20 21:13:02 +0000114 defaultBranch='trunk',
Peter Collingbourned49ac282011-10-25 14:38:45 +0000115 workdir=llvm_srcdir))
116 f.addStep(SVN(name='svn-clang',
117 mode='update',
118 baseURL='http://llvm.org/svn/llvm-project/cfe/',
119 defaultBranch='trunk',
120 workdir='%s/tools/clang' % llvm_srcdir))
121 if checkout_compiler_rt:
122 f.addStep(SVN(name='svn-compiler-rt',
123 mode='update',
124 baseURL='http://llvm.org/svn/llvm-project/compiler-rt/',
125 defaultBranch='trunk',
126 workdir='%s/projects/compiler-rt' % llvm_srcdir))
Daniel Dunbarfa0e0222009-11-09 06:08:28 +0000127
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000128 # Clean up llvm (stage 1); unless in-dir.
129 if clean and llvm_srcdir != llvm_1_objdir:
130 f.addStep(ShellCommand(name="rm-llvm.obj.stage1",
131 command=["rm", "-rf", llvm_1_objdir],
132 haltOnFailure=True,
133 description=["rm build dir", "llvm"],
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000134 workdir=".",
135 env=merged_env))
Andrew Trick70fa9d22011-08-25 23:38:51 +0000136
Daniel Dunbarfa0e0222009-11-09 06:08:28 +0000137 # Force without llvm-gcc so we don't run afoul of Frontend test failures.
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000138 base_configure_args = [WithProperties("%%(builddir)s/%s/configure" % llvm_srcdir),
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000139 '--disable-bindings']
140 base_configure_args += extra_configure_args
Daniel Dunbarfa0e0222009-11-09 06:08:28 +0000141 if triple:
Andrew Trick70fa9d22011-08-25 23:38:51 +0000142 base_configure_args += ['--build=%s' % triple,
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000143 '--host=%s' % triple,
144 '--target=%s' % triple]
145 args = base_configure_args + ["--without-llvmgcc", "--without-llvmgxx"]
Daniel Dunbar3efb7822010-02-26 19:20:00 +0000146 args.append(WithProperties("--prefix=%%(builddir)s/%s" % llvm_1_installdir))
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000147 args += getConfigArgs(stage1_config)
148 f.addStep(Configure(command=args,
149 workdir=llvm_1_objdir,
150 description=['configuring',stage1_config],
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000151 descriptionDone=['configure',stage1_config],
152 env=merged_env))
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000153
154 # Make clean if using in-dir builds.
155 if clean and llvm_srcdir == llvm_1_objdir:
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +0000156 f.addStep(WarningCountingShellCommand(name="clean-llvm",
Daniel Dunbard20468a2009-11-24 18:27:23 +0000157 command=[make, "clean"],
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +0000158 haltOnFailure=True,
159 description="cleaning llvm",
160 descriptionDone="clean llvm",
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000161 workdir=llvm_1_objdir,
Peter Collingbourne7a95b0c2011-10-26 16:40:17 +0000162 doStepIf=clean,
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000163 env=merged_env))
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000164
Peter Collingbourne7a95b0c2011-10-26 16:40:17 +0000165 if extra_clean_step:
166 f.addStep(extra_clean_step)
167
Daniel Dunbar7e959c82009-09-28 04:01:19 +0000168 f.addStep(WarningCountingShellCommand(name="compile",
Daniel Dunbard20468a2009-11-24 18:27:23 +0000169 command=['nice', '-n', '10',
170 make, WithProperties("-j%s" % jobs)],
Daniel Dunbar7e959c82009-09-28 04:01:19 +0000171 haltOnFailure=True,
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000172 description=["compiling", stage1_config],
173 descriptionDone=["compile", stage1_config],
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000174 workdir=llvm_1_objdir,
175 env=merged_env))
Daniel Dunbar256fed42009-11-25 21:11:08 +0000176
177 if examples:
178 f.addStep(WarningCountingShellCommand(name="compile.examples",
179 command=['nice', '-n', '10',
180 make, WithProperties("-j%s" % jobs),
181 "BUILD_EXAMPLES=1"],
182 haltOnFailure=True,
183 description=["compilinge", stage1_config, "examples"],
184 descriptionDone=["compile", stage1_config, "examples"],
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000185 workdir=llvm_1_objdir,
186 env=merged_env))
Daniel Dunbar256fed42009-11-25 21:11:08 +0000187
Daniel Dunbar93f828a2010-06-23 17:42:14 +0000188 clangTestArgs = llvmTestArgs = '-v -j %s' % jobs
Daniel Dunbarfa0e0222009-11-09 06:08:28 +0000189 if valgrind:
Daniel Dunbar89184b92010-04-18 19:09:32 +0000190 clangTestArgs += ' --vg'
Daniel Dunbara1bebce2010-03-21 01:24:00 +0000191 if valgrindLeakCheck:
192 clangTestArgs += ' --vg-leak'
Nick Lewycky8d26e472011-08-27 21:18:56 +0000193 clangTestArgs += ' --vg-arg --suppressions=%(builddir)s/llvm/tools/clang/utils/valgrind/x86_64-pc-linux-gnu_gcc-4.3.3.supp --vg-arg --suppressions=%(builddir)s/llvm/utils/valgrind/x86_64-pc-linux-gnu.supp'
Daniel Dunbarfa0e0222009-11-09 06:08:28 +0000194 extraTestDirs = ''
195 if run_cxx_tests:
196 extraTestDirs += '%(builddir)s/llvm/tools/clang/utils/C++Tests'
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +0000197 if test:
198 f.addStep(ClangTestCommand(name='test-llvm',
Daniel Dunbar93f828a2010-06-23 17:42:14 +0000199 command=[make, "check-lit", "VERBOSE=1",
200 WithProperties("LIT_ARGS=%s" % llvmTestArgs)],
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +0000201 description=["testing", "llvm"],
202 descriptionDone=["test", "llvm"],
Daniel Dunbar469e8ca2010-05-19 21:26:48 +0000203 workdir=llvm_1_objdir,
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000204 usePTY=use_pty_in_tests,
205 env=merged_env))
Daniel Dunbar44abe742009-07-19 01:59:03 +0000206 f.addStep(ClangTestCommand(name='test-clang',
Daniel Dunbard20468a2009-11-24 18:27:23 +0000207 command=[make, 'test', WithProperties('TESTARGS=%s' % clangTestArgs),
Daniel Dunbarfa0e0222009-11-09 06:08:28 +0000208 WithProperties('EXTRA_TESTDIRS=%s' % extraTestDirs)],
Daniel Dunbar469e8ca2010-05-19 21:26:48 +0000209 workdir='%s/tools/clang' % llvm_1_objdir,
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000210 usePTY=use_pty_in_tests,
211 env=merged_env))
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000212
213 # Install llvm and clang.
214 if llvm_1_installdir:
Daniel Dunbar9870de32010-03-28 22:25:31 +0000215 f.addStep(ShellCommand(name="rm-install.clang.stage1",
216 command=["rm", "-rf", llvm_1_installdir],
217 haltOnFailure=True,
218 description=["rm install dir", "clang"],
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000219 workdir=".",
220 env=merged_env))
Daniel Dunbar9870de32010-03-28 22:25:31 +0000221 f.addStep(WarningCountingShellCommand(name="install.clang.stage1",
222 command = ['nice', '-n', '10',
223 make, 'install-clang'],
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000224 haltOnFailure=True,
Daniel Dunbar9870de32010-03-28 22:25:31 +0000225 description=["install", "clang",
226 stage1_config],
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000227 workdir=llvm_1_objdir,
228 env=merged_env))
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000229
230 if not useTwoStage:
Daniel Dunbardedf6572010-11-13 00:23:34 +0000231 if package_dst:
232 name = WithProperties(
233 "%(builddir)s/" + llvm_1_objdir +
234 "/clang-r%(got_revision)s-b%(buildnumber)s.tgz")
235 f.addStep(ShellCommand(name='pkg.tar',
236 description="tar root",
237 command=["tar", "zcvf", name, "./"],
238 workdir=llvm_1_installdir,
239 warnOnFailure=True,
240 flunkOnFailure=False,
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000241 haltOnFailure=False,
242 env=merged_env))
Daniel Dunbardedf6572010-11-13 00:23:34 +0000243 f.addStep(ShellCommand(name='pkg.upload',
Andrew Trick70fa9d22011-08-25 23:38:51 +0000244 description="upload root",
Daniel Dunbardedf6572010-11-13 00:23:34 +0000245 command=["scp", name,
246 WithProperties(
247 package_dst + "/%(buildername)s")],
248 workdir=".",
249 warnOnFailure=True,
250 flunkOnFailure=False,
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000251 haltOnFailure=False,
252 env=merged_env))
Daniel Dunbardedf6572010-11-13 00:23:34 +0000253
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000254 return f
255
256 # Clean up llvm (stage 2).
257 if clean:
258 f.addStep(ShellCommand(name="rm-llvm.obj.stage2",
259 command=["rm", "-rf", llvm_2_objdir],
260 haltOnFailure=True,
261 description=["rm build dir", "llvm", "(stage 2)"],
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000262 workdir=".",
263 env=merged_env))
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000264
265 # Configure llvm (stage 2).
266 args = base_configure_args + ["--without-llvmgcc", "--without-llvmgxx"]
Daniel Dunbar3efb7822010-02-26 19:20:00 +0000267 args.append(WithProperties("--prefix=%(builddir)s/" + llvm_2_installdir))
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000268 args += getConfigArgs(stage2_config)
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000269 local_env = dict(merged_env).update({
270 'CC' : WithProperties("%%(builddir)s/%s/bin/clang" % llvm_1_installdir),
271 'CXX' : WithProperties("%%(builddir)s/%s/bin/clang++" % llvm_1_installdir)})
272
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000273 f.addStep(Configure(name="configure.llvm.stage2",
274 command=args,
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000275 haltOnFailure=True,
276 workdir=llvm_2_objdir,
277 description=["configure", "llvm", "(stage 2)",
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000278 stage2_config],
279 env=local_env))
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000280
281 # Build llvm (stage 2).
282 f.addStep(WarningCountingShellCommand(name="compile.llvm.stage2",
283 command=['nice', '-n', '10',
284 make, WithProperties("-j%s" % jobs)],
285 haltOnFailure=True,
286 description=["compiling", "(stage 2)",
287 stage2_config],
288 descriptionDone=["compile", "(stage 2)",
289 stage2_config],
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000290 workdir=llvm_2_objdir,
291 env=merged_env))
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000292
293 if test:
294 f.addStep(ClangTestCommand(name='test-llvm',
Daniel Dunbar93f828a2010-06-23 17:42:14 +0000295 command=[make, "check-lit", "VERBOSE=1",
296 WithProperties("LIT_ARGS=%s" % llvmTestArgs)],
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000297 description=["testing", "llvm"],
298 descriptionDone=["test", "llvm"],
Daniel Dunbar469e8ca2010-05-19 21:26:48 +0000299 workdir=llvm_2_objdir,
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000300 usePTY=use_pty_in_tests,
301 env=merged_env))
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000302 f.addStep(ClangTestCommand(name='test-clang',
303 command=[make, 'test', WithProperties('TESTARGS=%s' % clangTestArgs),
304 WithProperties('EXTRA_TESTDIRS=%s' % extraTestDirs)],
Daniel Dunbar469e8ca2010-05-19 21:26:48 +0000305 workdir='%s/tools/clang' % llvm_2_objdir,
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000306 usePTY=use_pty_in_tests,
307 env=merged_env))
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000308
Daniel Dunbar3efb7822010-02-26 19:20:00 +0000309 # Install clang (stage 2).
Daniel Dunbar9870de32010-03-28 22:25:31 +0000310 f.addStep(ShellCommand(name="rm-install.clang.stage2",
311 command=["rm", "-rf", llvm_2_installdir],
312 haltOnFailure=True,
313 description=["rm install dir", "clang"],
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000314 workdir=".",
315 env=merged_env))
Daniel Dunbar3efb7822010-02-26 19:20:00 +0000316 f.addStep(WarningCountingShellCommand(name="install.clang.stage2",
317 command = ['nice', '-n', '10',
318 make, 'install-clang'],
319 haltOnFailure=True,
320 description=["install", "clang",
321 "(stage 2)"],
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000322 workdir=llvm_2_objdir,
323 env=merged_env))
Daniel Dunbar3efb7822010-02-26 19:20:00 +0000324
325 if package_dst:
326 name = WithProperties(
327 "%(builddir)s/" + llvm_2_objdir +
328 "/clang-r%(got_revision)s-b%(buildnumber)s.tgz")
329 f.addStep(ShellCommand(name='pkg.tar',
330 description="tar root",
331 command=["tar", "zcvf", name, "./"],
332 workdir=llvm_2_installdir,
333 warnOnFailure=True,
334 flunkOnFailure=False,
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000335 haltOnFailure=False,
336 env=merged_env))
Daniel Dunbar3efb7822010-02-26 19:20:00 +0000337 f.addStep(ShellCommand(name='pkg.upload',
Andrew Trick70fa9d22011-08-25 23:38:51 +0000338 description="upload root",
Daniel Dunbar3efb7822010-02-26 19:20:00 +0000339 command=["scp", name,
340 WithProperties(
341 package_dst + "/%(buildername)s")],
342 workdir=".",
343 warnOnFailure=True,
344 flunkOnFailure=False,
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000345 haltOnFailure=False,
346 env=merged_env))
Daniel Dunbar3efb7822010-02-26 19:20:00 +0000347
Daniel Dunbar235aa412009-07-18 07:16:15 +0000348 return f
Daniel Dunbar44abe742009-07-19 01:59:03 +0000349
Daniel Dunbarc51a59e2010-09-23 14:57:45 +0000350def getClangMSVCBuildFactory(update=True, clean=True, vcDrive='c', jobs=1, cmake=r"cmake"):
Daniel Dunbar44abe742009-07-19 01:59:03 +0000351 f = buildbot.process.factory.BuildFactory()
352
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +0000353 if update:
Daniel Dunbar44abe742009-07-19 01:59:03 +0000354 f.addStep(SVN(name='svn-llvm',
355 mode='update', baseURL='http://llvm.org/svn/llvm-project/llvm/',
356 defaultBranch='trunk',
357 workdir='llvm'))
358
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +0000359 if update:
Daniel Dunbar44abe742009-07-19 01:59:03 +0000360 f.addStep(SVN(name='svn-clang',
Daniel Dunbar7e959c82009-09-28 04:01:19 +0000361 mode='update', baseURL='http://llvm.org/svn/llvm-project/cfe/',
Daniel Dunbar44abe742009-07-19 01:59:03 +0000362 defaultBranch='trunk',
363 workdir='llvm/tools/clang'))
364
365 # Full & fast clean.
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +0000366 if clean:
Daniel Dunbar44abe742009-07-19 01:59:03 +0000367 f.addStep(ShellCommand(name='clean-1',
368 command=['del','/s/q','build'],
Daniel Dunbar7e959c82009-09-28 04:01:19 +0000369 warnOnFailure=True,
Daniel Dunbar44abe742009-07-19 01:59:03 +0000370 description='cleaning',
371 descriptionDone='clean',
372 workdir='llvm'))
373 f.addStep(ShellCommand(name='clean-2',
374 command=['rmdir','/s/q','build'],
Daniel Dunbar7e959c82009-09-28 04:01:19 +0000375 warnOnFailure=True,
Daniel Dunbar44abe742009-07-19 01:59:03 +0000376 description='cleaning',
377 descriptionDone='clean',
378 workdir='llvm'))
379
380 # Create the project files.
Daniel Dunbar7e959c82009-09-28 04:01:19 +0000381
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +0000382 # Use batch files instead of ShellCommand directly, Windows quoting is
383 # borked. FIXME: See buildbot ticket #595 and buildbot ticket #377.
384 f.addStep(BatchFileDownload(name='cmakegen',
Daniel Dunbar06b20f12010-04-08 18:29:38 +0000385 command=[cmake,
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +0000386 "-DLLVM_TARGETS_TO_BUILD:=X86",
Daniel Dunbar1ddedce2010-09-24 19:57:34 +0000387 "-DLLVM_INCLUDE_EXAMPLES:=OFF",
388 "-DLLVM_INCLUDE_TESTS:=OFF",
389 "-DLLVM_TARGETS_TO_BUILD:=X86",
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +0000390 "-G",
391 "Visual Studio 9 2008",
392 ".."],
393 workdir="llvm\\build"))
Daniel Dunbar44abe742009-07-19 01:59:03 +0000394 f.addStep(ShellCommand(name='cmake',
395 command=['cmakegen.bat'],
Daniel Dunbar7e959c82009-09-28 04:01:19 +0000396 haltOnFailure=True,
Daniel Dunbar44abe742009-07-19 01:59:03 +0000397 description='cmake gen',
398 workdir='llvm\\build'))
399
400 # Build it.
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +0000401 f.addStep(BatchFileDownload(name='vcbuild',
402 command=[vcDrive + r""":\Program Files\Microsoft Visual Studio 9.0\VC\VCPackages\vcbuild.exe""",
403 "/M%d" % jobs,
404 "LLVM.sln",
405 "Debug|Win32"],
406 workdir="llvm\\build"))
Daniel Dunbar44abe742009-07-19 01:59:03 +0000407 f.addStep(WarningCountingShellCommand(name='vcbuild',
408 command=['vcbuild.bat'],
Daniel Dunbar7e959c82009-09-28 04:01:19 +0000409 haltOnFailure=True,
Daniel Dunbar44abe742009-07-19 01:59:03 +0000410 description='vcbuild',
411 workdir='llvm\\build',
412 warningPattern=" warning C.*:"))
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +0000413
414 # Build clang-test project.
415 f.addStep(BatchFileDownload(name='vcbuild_test',
416 command=[vcDrive + r""":\Program Files\Microsoft Visual Studio 9.0\VC\VCPackages\vcbuild.exe""",
417 "clang-test.vcproj",
418 "Debug|Win32"],
419 workdir="llvm\\build\\tools\\clang\\test"))
420 f.addStep(ClangTestCommand(name='test-clang',
421 command=["vcbuild_test.bat"],
422 workdir="llvm\\build\\tools\\clang\\test"))
423
Daniel Dunbar44abe742009-07-19 01:59:03 +0000424 return f
Daniel Dunbar22d594a2010-07-31 05:29:16 +0000425
Daniel Dunbar7363d032011-02-27 03:22:35 +0000426def addClangGCCTests(f, ignores={}, install_prefix="%(builddir)s/llvm.install",
427 languages = ('gcc', 'g++', 'objc', 'obj-c++')):
Daniel Dunbar22d594a2010-07-31 05:29:16 +0000428 make_vars = [WithProperties(
Daniel Dunbar2b67e8f2011-02-11 21:03:41 +0000429 'CC_UNDER_TEST=%s/bin/clang' % install_prefix),
Daniel Dunbar22d594a2010-07-31 05:29:16 +0000430 WithProperties(
Daniel Dunbar2b67e8f2011-02-11 21:03:41 +0000431 'CXX_UNDER_TEST=%s/bin/clang++' % install_prefix)]
Daniel Dunbar22d594a2010-07-31 05:29:16 +0000432 f.addStep(SVN(name='svn-clang-tests', mode='update',
433 baseURL='http://llvm.org/svn/llvm-project/clang-tests/',
434 defaultBranch='trunk', workdir='clang-tests'))
435 gcc_dg_ignores = ignores.get('gcc-4_2-testsuite', {})
Daniel Dunbar2b67e8f2011-02-11 21:03:41 +0000436 for lang in languages:
Daniel Dunbar22d594a2010-07-31 05:29:16 +0000437 f.addStep(DejaGNUCommand.DejaGNUCommand(
438 name='test-gcc-4_2-testsuite-%s' % lang,
439 command=["make", "-k", "check-%s" % lang] + make_vars,
440 description="gcc-4_2-testsuite (%s)" % lang,
441 workdir='clang-tests/gcc-4_2-testsuite',
David Dean2bd0c3a2011-10-18 16:36:28 +0000442 logfiles={ 'dg.sum' : 'obj/%s/%s.sum' % (lang, lang),
443 '%s.log' % lang : 'obj/%s/%s.log' % (lang, lang)},
Daniel Dunbar22d594a2010-07-31 05:29:16 +0000444 ignore=gcc_dg_ignores.get(lang, [])))
Daniel Dunbar2b67e8f2011-02-11 21:03:41 +0000445
Daniel Dunbar7363d032011-02-27 03:22:35 +0000446def addClangGDBTests(f, ignores={}, install_prefix="%(builddir)s/llvm.install"):
447 make_vars = [WithProperties(
448 'CC_UNDER_TEST=%s/bin/clang' % install_prefix),
449 WithProperties(
450 'CXX_UNDER_TEST=%s/bin/clang++' % install_prefix)]
451 f.addStep(SVN(name='svn-clang-tests', mode='update',
452 baseURL='http://llvm.org/svn/llvm-project/clang-tests/',
453 defaultBranch='trunk', workdir='clang-tests'))
454 gdb_dg_ignores = ignores.get('gdb-1472-testsuite', {})
455 f.addStep(DejaGNUCommand.DejaGNUCommand(
456 name='test-gdb-1472-testsuite',
457 command=["make", "-k", "check"] + make_vars,
458 description="gdb-1472-testsuite",
459 workdir='clang-tests/gdb-1472-testsuite',
460 logfiles={ 'dg.sum' : 'obj/gdb.sum' },
461 ignore=gdb_dg_ignores))
462
463# FIXME: Deprecated.
464addClangTests = addClangGCCTests
465
Daniel Dunbar2b67e8f2011-02-11 21:03:41 +0000466def getClangTestsIgnoresFromPath(path, key):
467 def readList(path):
468 if not os.path.exists(path):
469 return []
470
471 f = open(path)
472 lines = [ln.strip() for ln in f]
473 f.close()
474 return lines
475
476 ignores = {}
477
478 gcc_dg_ignores = {}
479 for lang in ('gcc', 'g++', 'objc', 'obj-c++'):
480 lang_path = os.path.join(path, 'gcc-4_2-testsuite', 'expected_results',
481 key, lang)
482 gcc_dg_ignores[lang] = (
483 readList(os.path.join(lang_path, 'FAIL.txt')) +
484 readList(os.path.join(lang_path, 'UNRESOLVED.txt')) +
485 readList(os.path.join(lang_path, 'XPASS.txt')))
486 ignores['gcc-4_2-testsuite' ] = gcc_dg_ignores
487
Daniel Dunbar7363d032011-02-27 03:22:35 +0000488 ignores_path = os.path.join(path, 'gdb-1472-testsuite', 'expected_results',
489 key)
490 gdb_dg_ignores = (
491 readList(os.path.join(ignores_path, 'FAIL.txt')) +
492 readList(os.path.join(ignores_path, 'UNRESOLVED.txt')) +
493 readList(os.path.join(ignores_path, 'XPASS.txt')))
494 ignores['gdb-1472-testsuite' ] = gdb_dg_ignores
495
Daniel Dunbar2b67e8f2011-02-11 21:03:41 +0000496 return ignores