blob: 45bf40681f7c7386d286cda525cf2b1560129107 [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,
Galina Kistanovaf4d79352011-10-20 20:46:52 +000039 checkout_compiler_rt=False):
40 # Prepare environmental variables. Set here all env we want everywhere.
41 merged_env = {
42 'TERM' : 'dumb' # Make sure Clang doesn't use color escape sequences.
43 }
44 if env is not None:
45 # Overwrite pre-set items with the given ones, so user can set anything.
46 merged_env.update(env)
47
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +000048 # Don't use in-dir builds with a two stage build process.
Daniel Dunbar3efb7822010-02-26 19:20:00 +000049 inDir = not outOfDir and not useTwoStage
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +000050 if inDir:
51 llvm_srcdir = "llvm"
52 llvm_1_objdir = "llvm"
Daniel Dunbar9870de32010-03-28 22:25:31 +000053 if always_install:
54 llvm_1_installdir = "llvm.install"
55 else:
56 llvm_1_installdir = None
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +000057 else:
58 llvm_srcdir = "llvm.src"
59 llvm_1_objdir = "llvm.obj"
60 llvm_1_installdir = "llvm.install.1"
61 llvm_2_objdir = "llvm.obj.2"
Daniel Dunbar22d594a2010-07-31 05:29:16 +000062 llvm_2_installdir = "llvm.install"
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +000063
Daniel Dunbar235aa412009-07-18 07:16:15 +000064 f = buildbot.process.factory.BuildFactory()
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +000065
66 # Determine the build directory.
67 f.addStep(buildbot.steps.shell.SetProperty(name="get_builddir",
68 command=["pwd"],
69 property="builddir",
70 description="set build dir",
Galina Kistanovaf4d79352011-10-20 20:46:52 +000071 workdir=".",
72 env=merged_env))
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +000073
Daniel Dunbar06b20f12010-04-08 18:29:38 +000074 # Blow away completely, if requested.
75 if completely_clean:
76 f.addStep(ShellCommand(name="rm-llvm.src",
77 command=["rm", "-rf", llvm_srcdir],
78 haltOnFailure=True,
79 description=["rm src dir", "llvm"],
Galina Kistanovaf4d79352011-10-20 20:46:52 +000080 workdir=".",
81 env=merged_env))
Daniel Dunbar06b20f12010-04-08 18:29:38 +000082
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +000083 # Checkout sources.
Peter Collingbourned49ac282011-10-25 14:38:45 +000084 if trunk_revision:
85 # The SVN build step provides no mechanism to check out a specific revision
86 # based on a property, so just run the commands directly here.
87 svn_co = ['svn', 'checkout']
88 if force_checkout:
89 svn_co += ['--force']
90 svn_co += ['--revision', WithProperties(trunk_revision)]
91
92 svn_co_llvm = svn_co + \
93 [WithProperties('http://llvm.org/svn/llvm-project/llvm/trunk@%s' %
94 trunk_revision),
95 llvm_srcdir]
96 svn_co_clang = svn_co + \
97 [WithProperties('http://llvm.org/svn/llvm-project/cfe/trunk@%s' %
98 trunk_revision),
99 '%s/tools/clang' % llvm_srcdir]
100
101 f.addStep(ShellCommand(name='svn-llvm',
102 command=svn_co_llvm,
103 haltOnFailure=True,
104 workdir='.'))
105 f.addStep(ShellCommand(name='svn-clang',
106 command=svn_co_clang,
107 haltOnFailure=True,
108 workdir='.'))
109 else:
110 f.addStep(SVN(name='svn-llvm',
Daniel Dunbarf4e23eb2010-09-20 21:13:02 +0000111 mode='update',
Peter Collingbourned49ac282011-10-25 14:38:45 +0000112 baseURL='http://llvm.org/svn/llvm-project/llvm/',
Daniel Dunbarf4e23eb2010-09-20 21:13:02 +0000113 defaultBranch='trunk',
Peter Collingbourned49ac282011-10-25 14:38:45 +0000114 workdir=llvm_srcdir))
115 f.addStep(SVN(name='svn-clang',
116 mode='update',
117 baseURL='http://llvm.org/svn/llvm-project/cfe/',
118 defaultBranch='trunk',
119 workdir='%s/tools/clang' % llvm_srcdir))
120 if checkout_compiler_rt:
121 f.addStep(SVN(name='svn-compiler-rt',
122 mode='update',
123 baseURL='http://llvm.org/svn/llvm-project/compiler-rt/',
124 defaultBranch='trunk',
125 workdir='%s/projects/compiler-rt' % llvm_srcdir))
Daniel Dunbarfa0e0222009-11-09 06:08:28 +0000126
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000127 # Clean up llvm (stage 1); unless in-dir.
128 if clean and llvm_srcdir != llvm_1_objdir:
129 f.addStep(ShellCommand(name="rm-llvm.obj.stage1",
130 command=["rm", "-rf", llvm_1_objdir],
131 haltOnFailure=True,
132 description=["rm build dir", "llvm"],
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000133 workdir=".",
134 env=merged_env))
Andrew Trick70fa9d22011-08-25 23:38:51 +0000135
Daniel Dunbarfa0e0222009-11-09 06:08:28 +0000136 # Force without llvm-gcc so we don't run afoul of Frontend test failures.
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000137 base_configure_args = [WithProperties("%%(builddir)s/%s/configure" % llvm_srcdir),
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000138 '--disable-bindings']
139 base_configure_args += extra_configure_args
Daniel Dunbarfa0e0222009-11-09 06:08:28 +0000140 if triple:
Andrew Trick70fa9d22011-08-25 23:38:51 +0000141 base_configure_args += ['--build=%s' % triple,
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000142 '--host=%s' % triple,
143 '--target=%s' % triple]
144 args = base_configure_args + ["--without-llvmgcc", "--without-llvmgxx"]
Daniel Dunbar3efb7822010-02-26 19:20:00 +0000145 args.append(WithProperties("--prefix=%%(builddir)s/%s" % llvm_1_installdir))
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000146 args += getConfigArgs(stage1_config)
147 f.addStep(Configure(command=args,
148 workdir=llvm_1_objdir,
149 description=['configuring',stage1_config],
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000150 descriptionDone=['configure',stage1_config],
151 env=merged_env))
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000152
153 # Make clean if using in-dir builds.
154 if clean and llvm_srcdir == llvm_1_objdir:
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +0000155 f.addStep(WarningCountingShellCommand(name="clean-llvm",
Daniel Dunbard20468a2009-11-24 18:27:23 +0000156 command=[make, "clean"],
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +0000157 haltOnFailure=True,
158 description="cleaning llvm",
159 descriptionDone="clean llvm",
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000160 workdir=llvm_1_objdir,
161 env=merged_env))
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000162
Daniel Dunbar7e959c82009-09-28 04:01:19 +0000163 f.addStep(WarningCountingShellCommand(name="compile",
Daniel Dunbard20468a2009-11-24 18:27:23 +0000164 command=['nice', '-n', '10',
165 make, WithProperties("-j%s" % jobs)],
Daniel Dunbar7e959c82009-09-28 04:01:19 +0000166 haltOnFailure=True,
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000167 description=["compiling", stage1_config],
168 descriptionDone=["compile", stage1_config],
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000169 workdir=llvm_1_objdir,
170 env=merged_env))
Daniel Dunbar256fed42009-11-25 21:11:08 +0000171
172 if examples:
173 f.addStep(WarningCountingShellCommand(name="compile.examples",
174 command=['nice', '-n', '10',
175 make, WithProperties("-j%s" % jobs),
176 "BUILD_EXAMPLES=1"],
177 haltOnFailure=True,
178 description=["compilinge", stage1_config, "examples"],
179 descriptionDone=["compile", stage1_config, "examples"],
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000180 workdir=llvm_1_objdir,
181 env=merged_env))
Daniel Dunbar256fed42009-11-25 21:11:08 +0000182
Daniel Dunbar93f828a2010-06-23 17:42:14 +0000183 clangTestArgs = llvmTestArgs = '-v -j %s' % jobs
Daniel Dunbarfa0e0222009-11-09 06:08:28 +0000184 if valgrind:
Daniel Dunbar89184b92010-04-18 19:09:32 +0000185 clangTestArgs += ' --vg'
Daniel Dunbara1bebce2010-03-21 01:24:00 +0000186 if valgrindLeakCheck:
187 clangTestArgs += ' --vg-leak'
Nick Lewycky8d26e472011-08-27 21:18:56 +0000188 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 +0000189 extraTestDirs = ''
190 if run_cxx_tests:
191 extraTestDirs += '%(builddir)s/llvm/tools/clang/utils/C++Tests'
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +0000192 if test:
193 f.addStep(ClangTestCommand(name='test-llvm',
Daniel Dunbar93f828a2010-06-23 17:42:14 +0000194 command=[make, "check-lit", "VERBOSE=1",
195 WithProperties("LIT_ARGS=%s" % llvmTestArgs)],
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +0000196 description=["testing", "llvm"],
197 descriptionDone=["test", "llvm"],
Daniel Dunbar469e8ca2010-05-19 21:26:48 +0000198 workdir=llvm_1_objdir,
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000199 usePTY=use_pty_in_tests,
200 env=merged_env))
Daniel Dunbar44abe742009-07-19 01:59:03 +0000201 f.addStep(ClangTestCommand(name='test-clang',
Daniel Dunbard20468a2009-11-24 18:27:23 +0000202 command=[make, 'test', WithProperties('TESTARGS=%s' % clangTestArgs),
Daniel Dunbarfa0e0222009-11-09 06:08:28 +0000203 WithProperties('EXTRA_TESTDIRS=%s' % extraTestDirs)],
Daniel Dunbar469e8ca2010-05-19 21:26:48 +0000204 workdir='%s/tools/clang' % llvm_1_objdir,
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000205 usePTY=use_pty_in_tests,
206 env=merged_env))
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000207
208 # Install llvm and clang.
209 if llvm_1_installdir:
Daniel Dunbar9870de32010-03-28 22:25:31 +0000210 f.addStep(ShellCommand(name="rm-install.clang.stage1",
211 command=["rm", "-rf", llvm_1_installdir],
212 haltOnFailure=True,
213 description=["rm install dir", "clang"],
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000214 workdir=".",
215 env=merged_env))
Daniel Dunbar9870de32010-03-28 22:25:31 +0000216 f.addStep(WarningCountingShellCommand(name="install.clang.stage1",
217 command = ['nice', '-n', '10',
218 make, 'install-clang'],
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000219 haltOnFailure=True,
Daniel Dunbar9870de32010-03-28 22:25:31 +0000220 description=["install", "clang",
221 stage1_config],
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000222 workdir=llvm_1_objdir,
223 env=merged_env))
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000224
225 if not useTwoStage:
Daniel Dunbardedf6572010-11-13 00:23:34 +0000226 if package_dst:
227 name = WithProperties(
228 "%(builddir)s/" + llvm_1_objdir +
229 "/clang-r%(got_revision)s-b%(buildnumber)s.tgz")
230 f.addStep(ShellCommand(name='pkg.tar',
231 description="tar root",
232 command=["tar", "zcvf", name, "./"],
233 workdir=llvm_1_installdir,
234 warnOnFailure=True,
235 flunkOnFailure=False,
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000236 haltOnFailure=False,
237 env=merged_env))
Daniel Dunbardedf6572010-11-13 00:23:34 +0000238 f.addStep(ShellCommand(name='pkg.upload',
Andrew Trick70fa9d22011-08-25 23:38:51 +0000239 description="upload root",
Daniel Dunbardedf6572010-11-13 00:23:34 +0000240 command=["scp", name,
241 WithProperties(
242 package_dst + "/%(buildername)s")],
243 workdir=".",
244 warnOnFailure=True,
245 flunkOnFailure=False,
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000246 haltOnFailure=False,
247 env=merged_env))
Daniel Dunbardedf6572010-11-13 00:23:34 +0000248
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000249 return f
250
251 # Clean up llvm (stage 2).
252 if clean:
253 f.addStep(ShellCommand(name="rm-llvm.obj.stage2",
254 command=["rm", "-rf", llvm_2_objdir],
255 haltOnFailure=True,
256 description=["rm build dir", "llvm", "(stage 2)"],
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000257 workdir=".",
258 env=merged_env))
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000259
260 # Configure llvm (stage 2).
261 args = base_configure_args + ["--without-llvmgcc", "--without-llvmgxx"]
Daniel Dunbar3efb7822010-02-26 19:20:00 +0000262 args.append(WithProperties("--prefix=%(builddir)s/" + llvm_2_installdir))
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000263 args += getConfigArgs(stage2_config)
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000264 local_env = dict(merged_env).update({
265 'CC' : WithProperties("%%(builddir)s/%s/bin/clang" % llvm_1_installdir),
266 'CXX' : WithProperties("%%(builddir)s/%s/bin/clang++" % llvm_1_installdir)})
267
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000268 f.addStep(Configure(name="configure.llvm.stage2",
269 command=args,
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000270 haltOnFailure=True,
271 workdir=llvm_2_objdir,
272 description=["configure", "llvm", "(stage 2)",
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000273 stage2_config],
274 env=local_env))
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000275
276 # Build llvm (stage 2).
277 f.addStep(WarningCountingShellCommand(name="compile.llvm.stage2",
278 command=['nice', '-n', '10',
279 make, WithProperties("-j%s" % jobs)],
280 haltOnFailure=True,
281 description=["compiling", "(stage 2)",
282 stage2_config],
283 descriptionDone=["compile", "(stage 2)",
284 stage2_config],
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000285 workdir=llvm_2_objdir,
286 env=merged_env))
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000287
288 if test:
289 f.addStep(ClangTestCommand(name='test-llvm',
Daniel Dunbar93f828a2010-06-23 17:42:14 +0000290 command=[make, "check-lit", "VERBOSE=1",
291 WithProperties("LIT_ARGS=%s" % llvmTestArgs)],
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000292 description=["testing", "llvm"],
293 descriptionDone=["test", "llvm"],
Daniel Dunbar469e8ca2010-05-19 21:26:48 +0000294 workdir=llvm_2_objdir,
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000295 usePTY=use_pty_in_tests,
296 env=merged_env))
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000297 f.addStep(ClangTestCommand(name='test-clang',
298 command=[make, 'test', WithProperties('TESTARGS=%s' % clangTestArgs),
299 WithProperties('EXTRA_TESTDIRS=%s' % extraTestDirs)],
Daniel Dunbar469e8ca2010-05-19 21:26:48 +0000300 workdir='%s/tools/clang' % llvm_2_objdir,
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000301 usePTY=use_pty_in_tests,
302 env=merged_env))
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000303
Daniel Dunbar3efb7822010-02-26 19:20:00 +0000304 # Install clang (stage 2).
Daniel Dunbar9870de32010-03-28 22:25:31 +0000305 f.addStep(ShellCommand(name="rm-install.clang.stage2",
306 command=["rm", "-rf", llvm_2_installdir],
307 haltOnFailure=True,
308 description=["rm install dir", "clang"],
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000309 workdir=".",
310 env=merged_env))
Daniel Dunbar3efb7822010-02-26 19:20:00 +0000311 f.addStep(WarningCountingShellCommand(name="install.clang.stage2",
312 command = ['nice', '-n', '10',
313 make, 'install-clang'],
314 haltOnFailure=True,
315 description=["install", "clang",
316 "(stage 2)"],
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000317 workdir=llvm_2_objdir,
318 env=merged_env))
Daniel Dunbar3efb7822010-02-26 19:20:00 +0000319
320 if package_dst:
321 name = WithProperties(
322 "%(builddir)s/" + llvm_2_objdir +
323 "/clang-r%(got_revision)s-b%(buildnumber)s.tgz")
324 f.addStep(ShellCommand(name='pkg.tar',
325 description="tar root",
326 command=["tar", "zcvf", name, "./"],
327 workdir=llvm_2_installdir,
328 warnOnFailure=True,
329 flunkOnFailure=False,
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000330 haltOnFailure=False,
331 env=merged_env))
Daniel Dunbar3efb7822010-02-26 19:20:00 +0000332 f.addStep(ShellCommand(name='pkg.upload',
Andrew Trick70fa9d22011-08-25 23:38:51 +0000333 description="upload root",
Daniel Dunbar3efb7822010-02-26 19:20:00 +0000334 command=["scp", name,
335 WithProperties(
336 package_dst + "/%(buildername)s")],
337 workdir=".",
338 warnOnFailure=True,
339 flunkOnFailure=False,
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000340 haltOnFailure=False,
341 env=merged_env))
Daniel Dunbar3efb7822010-02-26 19:20:00 +0000342
Daniel Dunbar235aa412009-07-18 07:16:15 +0000343 return f
Daniel Dunbar44abe742009-07-19 01:59:03 +0000344
Daniel Dunbarc51a59e2010-09-23 14:57:45 +0000345def getClangMSVCBuildFactory(update=True, clean=True, vcDrive='c', jobs=1, cmake=r"cmake"):
Daniel Dunbar44abe742009-07-19 01:59:03 +0000346 f = buildbot.process.factory.BuildFactory()
347
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +0000348 if update:
Daniel Dunbar44abe742009-07-19 01:59:03 +0000349 f.addStep(SVN(name='svn-llvm',
350 mode='update', baseURL='http://llvm.org/svn/llvm-project/llvm/',
351 defaultBranch='trunk',
352 workdir='llvm'))
353
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +0000354 if update:
Daniel Dunbar44abe742009-07-19 01:59:03 +0000355 f.addStep(SVN(name='svn-clang',
Daniel Dunbar7e959c82009-09-28 04:01:19 +0000356 mode='update', baseURL='http://llvm.org/svn/llvm-project/cfe/',
Daniel Dunbar44abe742009-07-19 01:59:03 +0000357 defaultBranch='trunk',
358 workdir='llvm/tools/clang'))
359
360 # Full & fast clean.
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +0000361 if clean:
Daniel Dunbar44abe742009-07-19 01:59:03 +0000362 f.addStep(ShellCommand(name='clean-1',
363 command=['del','/s/q','build'],
Daniel Dunbar7e959c82009-09-28 04:01:19 +0000364 warnOnFailure=True,
Daniel Dunbar44abe742009-07-19 01:59:03 +0000365 description='cleaning',
366 descriptionDone='clean',
367 workdir='llvm'))
368 f.addStep(ShellCommand(name='clean-2',
369 command=['rmdir','/s/q','build'],
Daniel Dunbar7e959c82009-09-28 04:01:19 +0000370 warnOnFailure=True,
Daniel Dunbar44abe742009-07-19 01:59:03 +0000371 description='cleaning',
372 descriptionDone='clean',
373 workdir='llvm'))
374
375 # Create the project files.
Daniel Dunbar7e959c82009-09-28 04:01:19 +0000376
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +0000377 # Use batch files instead of ShellCommand directly, Windows quoting is
378 # borked. FIXME: See buildbot ticket #595 and buildbot ticket #377.
379 f.addStep(BatchFileDownload(name='cmakegen',
Daniel Dunbar06b20f12010-04-08 18:29:38 +0000380 command=[cmake,
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +0000381 "-DLLVM_TARGETS_TO_BUILD:=X86",
Daniel Dunbar1ddedce2010-09-24 19:57:34 +0000382 "-DLLVM_INCLUDE_EXAMPLES:=OFF",
383 "-DLLVM_INCLUDE_TESTS:=OFF",
384 "-DLLVM_TARGETS_TO_BUILD:=X86",
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +0000385 "-G",
386 "Visual Studio 9 2008",
387 ".."],
388 workdir="llvm\\build"))
Daniel Dunbar44abe742009-07-19 01:59:03 +0000389 f.addStep(ShellCommand(name='cmake',
390 command=['cmakegen.bat'],
Daniel Dunbar7e959c82009-09-28 04:01:19 +0000391 haltOnFailure=True,
Daniel Dunbar44abe742009-07-19 01:59:03 +0000392 description='cmake gen',
393 workdir='llvm\\build'))
394
395 # Build it.
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +0000396 f.addStep(BatchFileDownload(name='vcbuild',
397 command=[vcDrive + r""":\Program Files\Microsoft Visual Studio 9.0\VC\VCPackages\vcbuild.exe""",
398 "/M%d" % jobs,
399 "LLVM.sln",
400 "Debug|Win32"],
401 workdir="llvm\\build"))
Daniel Dunbar44abe742009-07-19 01:59:03 +0000402 f.addStep(WarningCountingShellCommand(name='vcbuild',
403 command=['vcbuild.bat'],
Daniel Dunbar7e959c82009-09-28 04:01:19 +0000404 haltOnFailure=True,
Daniel Dunbar44abe742009-07-19 01:59:03 +0000405 description='vcbuild',
406 workdir='llvm\\build',
407 warningPattern=" warning C.*:"))
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +0000408
409 # Build clang-test project.
410 f.addStep(BatchFileDownload(name='vcbuild_test',
411 command=[vcDrive + r""":\Program Files\Microsoft Visual Studio 9.0\VC\VCPackages\vcbuild.exe""",
412 "clang-test.vcproj",
413 "Debug|Win32"],
414 workdir="llvm\\build\\tools\\clang\\test"))
415 f.addStep(ClangTestCommand(name='test-clang',
416 command=["vcbuild_test.bat"],
417 workdir="llvm\\build\\tools\\clang\\test"))
418
Daniel Dunbar44abe742009-07-19 01:59:03 +0000419 return f
Daniel Dunbar22d594a2010-07-31 05:29:16 +0000420
Daniel Dunbar7363d032011-02-27 03:22:35 +0000421def addClangGCCTests(f, ignores={}, install_prefix="%(builddir)s/llvm.install",
422 languages = ('gcc', 'g++', 'objc', 'obj-c++')):
Daniel Dunbar22d594a2010-07-31 05:29:16 +0000423 make_vars = [WithProperties(
Daniel Dunbar2b67e8f2011-02-11 21:03:41 +0000424 'CC_UNDER_TEST=%s/bin/clang' % install_prefix),
Daniel Dunbar22d594a2010-07-31 05:29:16 +0000425 WithProperties(
Daniel Dunbar2b67e8f2011-02-11 21:03:41 +0000426 'CXX_UNDER_TEST=%s/bin/clang++' % install_prefix)]
Daniel Dunbar22d594a2010-07-31 05:29:16 +0000427 f.addStep(SVN(name='svn-clang-tests', mode='update',
428 baseURL='http://llvm.org/svn/llvm-project/clang-tests/',
429 defaultBranch='trunk', workdir='clang-tests'))
430 gcc_dg_ignores = ignores.get('gcc-4_2-testsuite', {})
Daniel Dunbar2b67e8f2011-02-11 21:03:41 +0000431 for lang in languages:
Daniel Dunbar22d594a2010-07-31 05:29:16 +0000432 f.addStep(DejaGNUCommand.DejaGNUCommand(
433 name='test-gcc-4_2-testsuite-%s' % lang,
434 command=["make", "-k", "check-%s" % lang] + make_vars,
435 description="gcc-4_2-testsuite (%s)" % lang,
436 workdir='clang-tests/gcc-4_2-testsuite',
David Dean2bd0c3a2011-10-18 16:36:28 +0000437 logfiles={ 'dg.sum' : 'obj/%s/%s.sum' % (lang, lang),
438 '%s.log' % lang : 'obj/%s/%s.log' % (lang, lang)},
Daniel Dunbar22d594a2010-07-31 05:29:16 +0000439 ignore=gcc_dg_ignores.get(lang, [])))
Daniel Dunbar2b67e8f2011-02-11 21:03:41 +0000440
Daniel Dunbar7363d032011-02-27 03:22:35 +0000441def addClangGDBTests(f, ignores={}, install_prefix="%(builddir)s/llvm.install"):
442 make_vars = [WithProperties(
443 'CC_UNDER_TEST=%s/bin/clang' % install_prefix),
444 WithProperties(
445 'CXX_UNDER_TEST=%s/bin/clang++' % install_prefix)]
446 f.addStep(SVN(name='svn-clang-tests', mode='update',
447 baseURL='http://llvm.org/svn/llvm-project/clang-tests/',
448 defaultBranch='trunk', workdir='clang-tests'))
449 gdb_dg_ignores = ignores.get('gdb-1472-testsuite', {})
450 f.addStep(DejaGNUCommand.DejaGNUCommand(
451 name='test-gdb-1472-testsuite',
452 command=["make", "-k", "check"] + make_vars,
453 description="gdb-1472-testsuite",
454 workdir='clang-tests/gdb-1472-testsuite',
455 logfiles={ 'dg.sum' : 'obj/gdb.sum' },
456 ignore=gdb_dg_ignores))
457
458# FIXME: Deprecated.
459addClangTests = addClangGCCTests
460
Daniel Dunbar2b67e8f2011-02-11 21:03:41 +0000461def getClangTestsIgnoresFromPath(path, key):
462 def readList(path):
463 if not os.path.exists(path):
464 return []
465
466 f = open(path)
467 lines = [ln.strip() for ln in f]
468 f.close()
469 return lines
470
471 ignores = {}
472
473 gcc_dg_ignores = {}
474 for lang in ('gcc', 'g++', 'objc', 'obj-c++'):
475 lang_path = os.path.join(path, 'gcc-4_2-testsuite', 'expected_results',
476 key, lang)
477 gcc_dg_ignores[lang] = (
478 readList(os.path.join(lang_path, 'FAIL.txt')) +
479 readList(os.path.join(lang_path, 'UNRESOLVED.txt')) +
480 readList(os.path.join(lang_path, 'XPASS.txt')))
481 ignores['gcc-4_2-testsuite' ] = gcc_dg_ignores
482
Daniel Dunbar7363d032011-02-27 03:22:35 +0000483 ignores_path = os.path.join(path, 'gdb-1472-testsuite', 'expected_results',
484 key)
485 gdb_dg_ignores = (
486 readList(os.path.join(ignores_path, 'FAIL.txt')) +
487 readList(os.path.join(ignores_path, 'UNRESOLVED.txt')) +
488 readList(os.path.join(ignores_path, 'XPASS.txt')))
489 ignores['gdb-1472-testsuite' ] = gdb_dg_ignores
490
Daniel Dunbar2b67e8f2011-02-11 21:03:41 +0000491 return ignores