blob: 7ffd99cd3a5d4d1fae82ab3ad09facf1b3b2f1f4 [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,
David Blaikiea76da842012-08-13 22:24:46 +000040 checkout_compiler_rt=False,
41 run_gdb=False,
42 run_gcc=False):
Galina Kistanovaf4d79352011-10-20 20:46:52 +000043 # Prepare environmental variables. Set here all env we want everywhere.
44 merged_env = {
45 'TERM' : 'dumb' # Make sure Clang doesn't use color escape sequences.
46 }
47 if env is not None:
48 # Overwrite pre-set items with the given ones, so user can set anything.
49 merged_env.update(env)
David Blaikie2f7eb282012-08-24 18:37:00 +000050
51 if run_gdb or run_gcc:
52 always_install = True
Galina Kistanovaf4d79352011-10-20 20:46:52 +000053
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +000054 # Don't use in-dir builds with a two stage build process.
Daniel Dunbar3efb7822010-02-26 19:20:00 +000055 inDir = not outOfDir and not useTwoStage
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +000056 if inDir:
57 llvm_srcdir = "llvm"
58 llvm_1_objdir = "llvm"
Daniel Dunbar9870de32010-03-28 22:25:31 +000059 if always_install:
60 llvm_1_installdir = "llvm.install"
61 else:
62 llvm_1_installdir = None
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +000063 else:
64 llvm_srcdir = "llvm.src"
65 llvm_1_objdir = "llvm.obj"
66 llvm_1_installdir = "llvm.install.1"
67 llvm_2_objdir = "llvm.obj.2"
Daniel Dunbar22d594a2010-07-31 05:29:16 +000068 llvm_2_installdir = "llvm.install"
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +000069
Daniel Dunbar235aa412009-07-18 07:16:15 +000070 f = buildbot.process.factory.BuildFactory()
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +000071
72 # Determine the build directory.
73 f.addStep(buildbot.steps.shell.SetProperty(name="get_builddir",
74 command=["pwd"],
75 property="builddir",
76 description="set build dir",
Galina Kistanovaf4d79352011-10-20 20:46:52 +000077 workdir=".",
78 env=merged_env))
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +000079
Daniel Dunbar06b20f12010-04-08 18:29:38 +000080 # Blow away completely, if requested.
81 if completely_clean:
82 f.addStep(ShellCommand(name="rm-llvm.src",
83 command=["rm", "-rf", llvm_srcdir],
84 haltOnFailure=True,
85 description=["rm src dir", "llvm"],
Galina Kistanovaf4d79352011-10-20 20:46:52 +000086 workdir=".",
87 env=merged_env))
Daniel Dunbar06b20f12010-04-08 18:29:38 +000088
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +000089 # Checkout sources.
Peter Collingbourned49ac282011-10-25 14:38:45 +000090 if trunk_revision:
91 # The SVN build step provides no mechanism to check out a specific revision
92 # based on a property, so just run the commands directly here.
93 svn_co = ['svn', 'checkout']
94 if force_checkout:
95 svn_co += ['--force']
96 svn_co += ['--revision', WithProperties(trunk_revision)]
97
98 svn_co_llvm = svn_co + \
99 [WithProperties('http://llvm.org/svn/llvm-project/llvm/trunk@%s' %
100 trunk_revision),
101 llvm_srcdir]
102 svn_co_clang = svn_co + \
103 [WithProperties('http://llvm.org/svn/llvm-project/cfe/trunk@%s' %
104 trunk_revision),
105 '%s/tools/clang' % llvm_srcdir]
David Blaikie845ae0d2012-08-10 00:51:38 +0000106 svn_co_clang_tools_extra = svn_co + \
107 [WithProperties('http://llvm.org/svn/llvm-project/clang-tools-extra/trunk@%s' %
108 trunk_revision),
109 '%s/tools/clang/tools/extra' % llvm_srcdir]
Peter Collingbourned49ac282011-10-25 14:38:45 +0000110
111 f.addStep(ShellCommand(name='svn-llvm',
112 command=svn_co_llvm,
113 haltOnFailure=True,
114 workdir='.'))
115 f.addStep(ShellCommand(name='svn-clang',
116 command=svn_co_clang,
117 haltOnFailure=True,
118 workdir='.'))
David Blaikie845ae0d2012-08-10 00:51:38 +0000119 f.addStep(ShellCommand(name='svn-clang-tools-extra',
120 command=svn_co_clang_tools_extra,
121 haltOnFailure=True,
122 workdir='.'))
Peter Collingbourned49ac282011-10-25 14:38:45 +0000123 else:
124 f.addStep(SVN(name='svn-llvm',
Daniel Dunbarf4e23eb2010-09-20 21:13:02 +0000125 mode='update',
Peter Collingbourned49ac282011-10-25 14:38:45 +0000126 baseURL='http://llvm.org/svn/llvm-project/llvm/',
Daniel Dunbarf4e23eb2010-09-20 21:13:02 +0000127 defaultBranch='trunk',
Peter Collingbourned49ac282011-10-25 14:38:45 +0000128 workdir=llvm_srcdir))
129 f.addStep(SVN(name='svn-clang',
130 mode='update',
131 baseURL='http://llvm.org/svn/llvm-project/cfe/',
132 defaultBranch='trunk',
133 workdir='%s/tools/clang' % llvm_srcdir))
David Blaikie845ae0d2012-08-10 00:51:38 +0000134 f.addStep(SVN(name='svn-clang-tools-extra',
135 mode='update',
136 baseURL='http://llvm.org/svn/llvm-project/clang-tools-extra/',
137 defaultBranch='trunk',
138 workdir='%s/tools/clang/tools/extra' % llvm_srcdir))
Peter Collingbourned49ac282011-10-25 14:38:45 +0000139 if checkout_compiler_rt:
140 f.addStep(SVN(name='svn-compiler-rt',
141 mode='update',
142 baseURL='http://llvm.org/svn/llvm-project/compiler-rt/',
143 defaultBranch='trunk',
144 workdir='%s/projects/compiler-rt' % llvm_srcdir))
Daniel Dunbarfa0e0222009-11-09 06:08:28 +0000145
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000146 # Clean up llvm (stage 1); unless in-dir.
147 if clean and llvm_srcdir != llvm_1_objdir:
148 f.addStep(ShellCommand(name="rm-llvm.obj.stage1",
149 command=["rm", "-rf", llvm_1_objdir],
150 haltOnFailure=True,
151 description=["rm build dir", "llvm"],
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000152 workdir=".",
153 env=merged_env))
Andrew Trick70fa9d22011-08-25 23:38:51 +0000154
Daniel Dunbarfa0e0222009-11-09 06:08:28 +0000155 # Force without llvm-gcc so we don't run afoul of Frontend test failures.
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000156 base_configure_args = [WithProperties("%%(builddir)s/%s/configure" % llvm_srcdir),
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000157 '--disable-bindings']
158 base_configure_args += extra_configure_args
Daniel Dunbarfa0e0222009-11-09 06:08:28 +0000159 if triple:
Andrew Trick70fa9d22011-08-25 23:38:51 +0000160 base_configure_args += ['--build=%s' % triple,
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000161 '--host=%s' % triple,
162 '--target=%s' % triple]
163 args = base_configure_args + ["--without-llvmgcc", "--without-llvmgxx"]
Daniel Dunbar3efb7822010-02-26 19:20:00 +0000164 args.append(WithProperties("--prefix=%%(builddir)s/%s" % llvm_1_installdir))
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000165 args += getConfigArgs(stage1_config)
166 f.addStep(Configure(command=args,
167 workdir=llvm_1_objdir,
168 description=['configuring',stage1_config],
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000169 descriptionDone=['configure',stage1_config],
170 env=merged_env))
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000171
172 # Make clean if using in-dir builds.
173 if clean and llvm_srcdir == llvm_1_objdir:
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +0000174 f.addStep(WarningCountingShellCommand(name="clean-llvm",
Daniel Dunbard20468a2009-11-24 18:27:23 +0000175 command=[make, "clean"],
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +0000176 haltOnFailure=True,
177 description="cleaning llvm",
178 descriptionDone="clean llvm",
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000179 workdir=llvm_1_objdir,
Peter Collingbourne7a95b0c2011-10-26 16:40:17 +0000180 doStepIf=clean,
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000181 env=merged_env))
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000182
Peter Collingbourne7a95b0c2011-10-26 16:40:17 +0000183 if extra_clean_step:
184 f.addStep(extra_clean_step)
185
Daniel Dunbar7e959c82009-09-28 04:01:19 +0000186 f.addStep(WarningCountingShellCommand(name="compile",
Daniel Dunbard20468a2009-11-24 18:27:23 +0000187 command=['nice', '-n', '10',
188 make, WithProperties("-j%s" % jobs)],
Daniel Dunbar7e959c82009-09-28 04:01:19 +0000189 haltOnFailure=True,
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000190 description=["compiling", stage1_config],
191 descriptionDone=["compile", stage1_config],
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000192 workdir=llvm_1_objdir,
193 env=merged_env))
Daniel Dunbar256fed42009-11-25 21:11:08 +0000194
195 if examples:
196 f.addStep(WarningCountingShellCommand(name="compile.examples",
197 command=['nice', '-n', '10',
198 make, WithProperties("-j%s" % jobs),
199 "BUILD_EXAMPLES=1"],
200 haltOnFailure=True,
201 description=["compilinge", stage1_config, "examples"],
202 descriptionDone=["compile", stage1_config, "examples"],
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000203 workdir=llvm_1_objdir,
204 env=merged_env))
Daniel Dunbar256fed42009-11-25 21:11:08 +0000205
Daniel Dunbar93f828a2010-06-23 17:42:14 +0000206 clangTestArgs = llvmTestArgs = '-v -j %s' % jobs
Daniel Dunbarfa0e0222009-11-09 06:08:28 +0000207 if valgrind:
Daniel Dunbar89184b92010-04-18 19:09:32 +0000208 clangTestArgs += ' --vg'
Daniel Dunbara1bebce2010-03-21 01:24:00 +0000209 if valgrindLeakCheck:
210 clangTestArgs += ' --vg-leak'
Nick Lewycky8d26e472011-08-27 21:18:56 +0000211 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 +0000212 extraTestDirs = ''
213 if run_cxx_tests:
214 extraTestDirs += '%(builddir)s/llvm/tools/clang/utils/C++Tests'
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +0000215 if test:
216 f.addStep(ClangTestCommand(name='test-llvm',
Daniel Dunbar93f828a2010-06-23 17:42:14 +0000217 command=[make, "check-lit", "VERBOSE=1",
218 WithProperties("LIT_ARGS=%s" % llvmTestArgs)],
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +0000219 description=["testing", "llvm"],
220 descriptionDone=["test", "llvm"],
Daniel Dunbar469e8ca2010-05-19 21:26:48 +0000221 workdir=llvm_1_objdir,
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000222 usePTY=use_pty_in_tests,
223 env=merged_env))
Daniel Dunbar44abe742009-07-19 01:59:03 +0000224 f.addStep(ClangTestCommand(name='test-clang',
Daniel Dunbard20468a2009-11-24 18:27:23 +0000225 command=[make, 'test', WithProperties('TESTARGS=%s' % clangTestArgs),
Daniel Dunbarfa0e0222009-11-09 06:08:28 +0000226 WithProperties('EXTRA_TESTDIRS=%s' % extraTestDirs)],
Daniel Dunbar469e8ca2010-05-19 21:26:48 +0000227 workdir='%s/tools/clang' % llvm_1_objdir,
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000228 usePTY=use_pty_in_tests,
229 env=merged_env))
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000230
231 # Install llvm and clang.
232 if llvm_1_installdir:
Daniel Dunbar9870de32010-03-28 22:25:31 +0000233 f.addStep(ShellCommand(name="rm-install.clang.stage1",
234 command=["rm", "-rf", llvm_1_installdir],
235 haltOnFailure=True,
236 description=["rm install dir", "clang"],
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000237 workdir=".",
238 env=merged_env))
Daniel Dunbar9870de32010-03-28 22:25:31 +0000239 f.addStep(WarningCountingShellCommand(name="install.clang.stage1",
240 command = ['nice', '-n', '10',
241 make, 'install-clang'],
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000242 haltOnFailure=True,
Daniel Dunbar9870de32010-03-28 22:25:31 +0000243 description=["install", "clang",
244 stage1_config],
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000245 workdir=llvm_1_objdir,
246 env=merged_env))
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000247
David Blaikiea76da842012-08-13 22:24:46 +0000248 if run_gdb or run_gcc:
249 ignores = getClangTestsIgnoresFromPath(os.path.expanduser('~/public/clang-tests'), 'clang-x86_64-darwin10')
250 install_prefix = "%%(builddir)s/%s" % llvm_1_installdir
251 if run_gdb:
252 addClangGDBTests(f, ignores, install_prefix)
253 if run_gcc:
254 addClangGCCTests(f, ignores, install_prefix)
255
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000256 if not useTwoStage:
Daniel Dunbardedf6572010-11-13 00:23:34 +0000257 if package_dst:
258 name = WithProperties(
259 "%(builddir)s/" + llvm_1_objdir +
260 "/clang-r%(got_revision)s-b%(buildnumber)s.tgz")
261 f.addStep(ShellCommand(name='pkg.tar',
262 description="tar root",
263 command=["tar", "zcvf", name, "./"],
264 workdir=llvm_1_installdir,
265 warnOnFailure=True,
266 flunkOnFailure=False,
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000267 haltOnFailure=False,
268 env=merged_env))
Daniel Dunbardedf6572010-11-13 00:23:34 +0000269 f.addStep(ShellCommand(name='pkg.upload',
Andrew Trick70fa9d22011-08-25 23:38:51 +0000270 description="upload root",
Daniel Dunbardedf6572010-11-13 00:23:34 +0000271 command=["scp", name,
272 WithProperties(
273 package_dst + "/%(buildername)s")],
274 workdir=".",
275 warnOnFailure=True,
276 flunkOnFailure=False,
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000277 haltOnFailure=False,
278 env=merged_env))
Daniel Dunbardedf6572010-11-13 00:23:34 +0000279
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000280 return f
281
282 # Clean up llvm (stage 2).
283 if clean:
284 f.addStep(ShellCommand(name="rm-llvm.obj.stage2",
285 command=["rm", "-rf", llvm_2_objdir],
286 haltOnFailure=True,
287 description=["rm build dir", "llvm", "(stage 2)"],
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000288 workdir=".",
289 env=merged_env))
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000290
291 # Configure llvm (stage 2).
292 args = base_configure_args + ["--without-llvmgcc", "--without-llvmgxx"]
Daniel Dunbar3efb7822010-02-26 19:20:00 +0000293 args.append(WithProperties("--prefix=%(builddir)s/" + llvm_2_installdir))
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000294 args += getConfigArgs(stage2_config)
Benjamin Kramer9c6fed72012-07-20 10:18:32 +0000295 local_env = dict(merged_env)
296 local_env.update({
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000297 'CC' : WithProperties("%%(builddir)s/%s/bin/clang" % llvm_1_installdir),
298 'CXX' : WithProperties("%%(builddir)s/%s/bin/clang++" % llvm_1_installdir)})
299
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000300 f.addStep(Configure(name="configure.llvm.stage2",
301 command=args,
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000302 haltOnFailure=True,
303 workdir=llvm_2_objdir,
304 description=["configure", "llvm", "(stage 2)",
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000305 stage2_config],
306 env=local_env))
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000307
308 # Build llvm (stage 2).
309 f.addStep(WarningCountingShellCommand(name="compile.llvm.stage2",
310 command=['nice', '-n', '10',
311 make, WithProperties("-j%s" % jobs)],
312 haltOnFailure=True,
313 description=["compiling", "(stage 2)",
314 stage2_config],
315 descriptionDone=["compile", "(stage 2)",
316 stage2_config],
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000317 workdir=llvm_2_objdir,
318 env=merged_env))
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000319
320 if test:
321 f.addStep(ClangTestCommand(name='test-llvm',
Daniel Dunbar93f828a2010-06-23 17:42:14 +0000322 command=[make, "check-lit", "VERBOSE=1",
323 WithProperties("LIT_ARGS=%s" % llvmTestArgs)],
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000324 description=["testing", "llvm"],
325 descriptionDone=["test", "llvm"],
Daniel Dunbar469e8ca2010-05-19 21:26:48 +0000326 workdir=llvm_2_objdir,
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000327 usePTY=use_pty_in_tests,
328 env=merged_env))
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000329 f.addStep(ClangTestCommand(name='test-clang',
330 command=[make, 'test', WithProperties('TESTARGS=%s' % clangTestArgs),
331 WithProperties('EXTRA_TESTDIRS=%s' % extraTestDirs)],
Daniel Dunbar469e8ca2010-05-19 21:26:48 +0000332 workdir='%s/tools/clang' % llvm_2_objdir,
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000333 usePTY=use_pty_in_tests,
334 env=merged_env))
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000335
Daniel Dunbar3efb7822010-02-26 19:20:00 +0000336 # Install clang (stage 2).
Daniel Dunbar9870de32010-03-28 22:25:31 +0000337 f.addStep(ShellCommand(name="rm-install.clang.stage2",
338 command=["rm", "-rf", llvm_2_installdir],
339 haltOnFailure=True,
340 description=["rm install dir", "clang"],
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000341 workdir=".",
342 env=merged_env))
Daniel Dunbar3efb7822010-02-26 19:20:00 +0000343 f.addStep(WarningCountingShellCommand(name="install.clang.stage2",
344 command = ['nice', '-n', '10',
345 make, 'install-clang'],
346 haltOnFailure=True,
347 description=["install", "clang",
348 "(stage 2)"],
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000349 workdir=llvm_2_objdir,
350 env=merged_env))
Daniel Dunbar3efb7822010-02-26 19:20:00 +0000351
352 if package_dst:
353 name = WithProperties(
354 "%(builddir)s/" + llvm_2_objdir +
355 "/clang-r%(got_revision)s-b%(buildnumber)s.tgz")
356 f.addStep(ShellCommand(name='pkg.tar',
357 description="tar root",
358 command=["tar", "zcvf", name, "./"],
359 workdir=llvm_2_installdir,
360 warnOnFailure=True,
361 flunkOnFailure=False,
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000362 haltOnFailure=False,
363 env=merged_env))
Daniel Dunbar3efb7822010-02-26 19:20:00 +0000364 f.addStep(ShellCommand(name='pkg.upload',
Andrew Trick70fa9d22011-08-25 23:38:51 +0000365 description="upload root",
Daniel Dunbar3efb7822010-02-26 19:20:00 +0000366 command=["scp", name,
367 WithProperties(
368 package_dst + "/%(buildername)s")],
369 workdir=".",
370 warnOnFailure=True,
371 flunkOnFailure=False,
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000372 haltOnFailure=False,
373 env=merged_env))
Daniel Dunbar3efb7822010-02-26 19:20:00 +0000374
Daniel Dunbar235aa412009-07-18 07:16:15 +0000375 return f
Daniel Dunbar44abe742009-07-19 01:59:03 +0000376
Daniel Dunbarc51a59e2010-09-23 14:57:45 +0000377def getClangMSVCBuildFactory(update=True, clean=True, vcDrive='c', jobs=1, cmake=r"cmake"):
Daniel Dunbar44abe742009-07-19 01:59:03 +0000378 f = buildbot.process.factory.BuildFactory()
379
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +0000380 if update:
Daniel Dunbar44abe742009-07-19 01:59:03 +0000381 f.addStep(SVN(name='svn-llvm',
382 mode='update', baseURL='http://llvm.org/svn/llvm-project/llvm/',
383 defaultBranch='trunk',
384 workdir='llvm'))
Daniel Dunbar44abe742009-07-19 01:59:03 +0000385 f.addStep(SVN(name='svn-clang',
Daniel Dunbar7e959c82009-09-28 04:01:19 +0000386 mode='update', baseURL='http://llvm.org/svn/llvm-project/cfe/',
Daniel Dunbar44abe742009-07-19 01:59:03 +0000387 defaultBranch='trunk',
388 workdir='llvm/tools/clang'))
David Blaikie845ae0d2012-08-10 00:51:38 +0000389 f.addStep(SVN(name='svn-clang-tools-extra',
390 mode='update', baseURL='http://llvm.org/svn/llvm-project/clang-tools-extra/',
391 defaultBranch='trunk',
392 workdir='llvm/tools/clang/tools/extra'))
Daniel Dunbar44abe742009-07-19 01:59:03 +0000393
394 # Full & fast clean.
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +0000395 if clean:
Daniel Dunbar44abe742009-07-19 01:59:03 +0000396 f.addStep(ShellCommand(name='clean-1',
397 command=['del','/s/q','build'],
Daniel Dunbar7e959c82009-09-28 04:01:19 +0000398 warnOnFailure=True,
Daniel Dunbar44abe742009-07-19 01:59:03 +0000399 description='cleaning',
400 descriptionDone='clean',
401 workdir='llvm'))
402 f.addStep(ShellCommand(name='clean-2',
403 command=['rmdir','/s/q','build'],
Daniel Dunbar7e959c82009-09-28 04:01:19 +0000404 warnOnFailure=True,
Daniel Dunbar44abe742009-07-19 01:59:03 +0000405 description='cleaning',
406 descriptionDone='clean',
407 workdir='llvm'))
408
409 # Create the project files.
Daniel Dunbar7e959c82009-09-28 04:01:19 +0000410
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +0000411 # Use batch files instead of ShellCommand directly, Windows quoting is
412 # borked. FIXME: See buildbot ticket #595 and buildbot ticket #377.
413 f.addStep(BatchFileDownload(name='cmakegen',
Daniel Dunbar06b20f12010-04-08 18:29:38 +0000414 command=[cmake,
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +0000415 "-DLLVM_TARGETS_TO_BUILD:=X86",
Daniel Dunbar1ddedce2010-09-24 19:57:34 +0000416 "-DLLVM_INCLUDE_EXAMPLES:=OFF",
417 "-DLLVM_INCLUDE_TESTS:=OFF",
418 "-DLLVM_TARGETS_TO_BUILD:=X86",
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +0000419 "-G",
420 "Visual Studio 9 2008",
421 ".."],
422 workdir="llvm\\build"))
Daniel Dunbar44abe742009-07-19 01:59:03 +0000423 f.addStep(ShellCommand(name='cmake',
424 command=['cmakegen.bat'],
Daniel Dunbar7e959c82009-09-28 04:01:19 +0000425 haltOnFailure=True,
Daniel Dunbar44abe742009-07-19 01:59:03 +0000426 description='cmake gen',
427 workdir='llvm\\build'))
428
429 # Build it.
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +0000430 f.addStep(BatchFileDownload(name='vcbuild',
431 command=[vcDrive + r""":\Program Files\Microsoft Visual Studio 9.0\VC\VCPackages\vcbuild.exe""",
432 "/M%d" % jobs,
433 "LLVM.sln",
434 "Debug|Win32"],
435 workdir="llvm\\build"))
Daniel Dunbar44abe742009-07-19 01:59:03 +0000436 f.addStep(WarningCountingShellCommand(name='vcbuild',
437 command=['vcbuild.bat'],
Daniel Dunbar7e959c82009-09-28 04:01:19 +0000438 haltOnFailure=True,
Daniel Dunbar44abe742009-07-19 01:59:03 +0000439 description='vcbuild',
440 workdir='llvm\\build',
441 warningPattern=" warning C.*:"))
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +0000442
443 # Build clang-test project.
444 f.addStep(BatchFileDownload(name='vcbuild_test',
445 command=[vcDrive + r""":\Program Files\Microsoft Visual Studio 9.0\VC\VCPackages\vcbuild.exe""",
446 "clang-test.vcproj",
447 "Debug|Win32"],
448 workdir="llvm\\build\\tools\\clang\\test"))
449 f.addStep(ClangTestCommand(name='test-clang',
450 command=["vcbuild_test.bat"],
451 workdir="llvm\\build\\tools\\clang\\test"))
452
Daniel Dunbar44abe742009-07-19 01:59:03 +0000453 return f
Daniel Dunbar22d594a2010-07-31 05:29:16 +0000454
Galina Kistanova2a97a3b2012-06-06 20:50:33 +0000455# Builds on Windows using CMake, MinGW(32|64), and no Microsoft tools.
Galina Kistanova5e97edf2012-06-19 20:10:21 +0000456def getClangMinGWBuildFactory(update=True, clean=True, jobs=6, cmake=r"cmake"):
Galina Kistanova2a97a3b2012-06-06 20:50:33 +0000457 f = buildbot.process.factory.BuildFactory()
458
459 if update:
460 f.addStep(SVN(name='svn-llvm',
461 mode='update', baseURL='http://llvm.org/svn/llvm-project/llvm/',
462 defaultBranch='trunk',
463 workdir='llvm'))
Galina Kistanova2a97a3b2012-06-06 20:50:33 +0000464 f.addStep(SVN(name='svn-clang',
465 mode='update', baseURL='http://llvm.org/svn/llvm-project/cfe/',
466 defaultBranch='trunk',
467 workdir='llvm/tools/clang'))
David Blaikie845ae0d2012-08-10 00:51:38 +0000468 f.addStep(SVN(name='svn-clang-tools-extra',
469 mode='update', baseURL='http://llvm.org/svn/llvm-project/clang-tools-extra/',
470 defaultBranch='trunk',
471 workdir='llvm/tools/clang/tools/extra'))
Galina Kistanova2a97a3b2012-06-06 20:50:33 +0000472
473 # Full & fast clean.
474 if clean:
475 # note: This command is redundant as the next command removes everything
476 f.addStep(ShellCommand(name='clean-1',
477 command=['del','/s/q','build'],
478 warnOnFailure=True,
479 description='cleaning',
480 descriptionDone='clean',
481 workdir='llvm'))
482 f.addStep(ShellCommand(name='clean-2',
483 command=['rmdir','/s/q','build'],
484 warnOnFailure=True,
485 description='cleaning',
486 descriptionDone='clean',
487 workdir='llvm'))
488
489 # Create the Makefiles.
490
491 # Use batch files instead of ShellCommand directly, Windows quoting is
492 # borked. FIXME: See buildbot ticket #595 and buildbot ticket #377.
493 f.addStep(BatchFileDownload(name='cmakegen',
494 command=[cmake,
495 "-DLLVM_TARGETS_TO_BUILD:=X86",
496 "-DLLVM_INCLUDE_EXAMPLES:=OFF",
497 "-DLLVM_INCLUDE_TESTS:=OFF",
498 "-DLLVM_TARGETS_TO_BUILD:=X86",
499 "-G",
Galina Kistanova5e97edf2012-06-19 20:10:21 +0000500 "Ninja",
Galina Kistanova2a97a3b2012-06-06 20:50:33 +0000501 ".."],
502 workdir="llvm\\build"))
503 f.addStep(ShellCommand(name='cmake',
504 command=['cmakegen.bat'],
505 haltOnFailure=True,
506 description='cmake gen',
507 workdir='llvm\\build'))
508
509 # Build it.
510 f.addStep(BatchFileDownload(name='makeall',
Galina Kistanova5e97edf2012-06-19 20:10:21 +0000511 command=["ninja", "-j", "%d" % jobs],
Galina Kistanova2a97a3b2012-06-06 20:50:33 +0000512 haltOnFailure=True,
513 workdir='llvm\\build'))
514
515 f.addStep(WarningCountingShellCommand(name='makeall',
516 command=['makeall.bat'],
517 haltOnFailure=True,
518 description='makeall',
519 workdir='llvm\\build'))
520
Galina Kistanova5e97edf2012-06-19 20:10:21 +0000521 # Build global check project (make check) (sources not checked out...).
522 if 0:
523 f.addStep(BatchFileDownload(name='makecheck',
524 command=["ninja", "check"],
525 workdir='llvm\\build'))
526 f.addStep(WarningCountingShellCommand(name='check',
527 command=['makecheck.bat'],
528 description='make check',
529 workdir='llvm\\build'))
Galina Kistanova049d76c2012-06-09 00:56:05 +0000530
531 # Build clang-test project (make clang-test).
Galina Kistanova2a97a3b2012-06-06 20:50:33 +0000532 f.addStep(BatchFileDownload(name='maketest',
Galina Kistanova5e97edf2012-06-19 20:10:21 +0000533 command=["ninja", "clang-test"],
Galina Kistanova049d76c2012-06-09 00:56:05 +0000534 workdir="llvm\\build"))
535 f.addStep(ClangTestCommand(name='clang-test',
Galina Kistanova2a97a3b2012-06-06 20:50:33 +0000536 command=["maketest.bat"],
Galina Kistanova049d76c2012-06-09 00:56:05 +0000537 workdir="llvm\\build"))
Galina Kistanova2a97a3b2012-06-06 20:50:33 +0000538
539 return f
540
Daniel Dunbar7363d032011-02-27 03:22:35 +0000541def addClangGCCTests(f, ignores={}, install_prefix="%(builddir)s/llvm.install",
542 languages = ('gcc', 'g++', 'objc', 'obj-c++')):
Daniel Dunbar22d594a2010-07-31 05:29:16 +0000543 make_vars = [WithProperties(
Daniel Dunbar2b67e8f2011-02-11 21:03:41 +0000544 'CC_UNDER_TEST=%s/bin/clang' % install_prefix),
Daniel Dunbar22d594a2010-07-31 05:29:16 +0000545 WithProperties(
Daniel Dunbar2b67e8f2011-02-11 21:03:41 +0000546 'CXX_UNDER_TEST=%s/bin/clang++' % install_prefix)]
Daniel Dunbar22d594a2010-07-31 05:29:16 +0000547 f.addStep(SVN(name='svn-clang-tests', mode='update',
548 baseURL='http://llvm.org/svn/llvm-project/clang-tests/',
549 defaultBranch='trunk', workdir='clang-tests'))
550 gcc_dg_ignores = ignores.get('gcc-4_2-testsuite', {})
Daniel Dunbar2b67e8f2011-02-11 21:03:41 +0000551 for lang in languages:
Daniel Dunbar22d594a2010-07-31 05:29:16 +0000552 f.addStep(DejaGNUCommand.DejaGNUCommand(
553 name='test-gcc-4_2-testsuite-%s' % lang,
554 command=["make", "-k", "check-%s" % lang] + make_vars,
555 description="gcc-4_2-testsuite (%s)" % lang,
556 workdir='clang-tests/gcc-4_2-testsuite',
David Dean2bd0c3a2011-10-18 16:36:28 +0000557 logfiles={ 'dg.sum' : 'obj/%s/%s.sum' % (lang, lang),
558 '%s.log' % lang : 'obj/%s/%s.log' % (lang, lang)},
Daniel Dunbar22d594a2010-07-31 05:29:16 +0000559 ignore=gcc_dg_ignores.get(lang, [])))
Daniel Dunbar2b67e8f2011-02-11 21:03:41 +0000560
Daniel Dunbar7363d032011-02-27 03:22:35 +0000561def addClangGDBTests(f, ignores={}, install_prefix="%(builddir)s/llvm.install"):
562 make_vars = [WithProperties(
563 'CC_UNDER_TEST=%s/bin/clang' % install_prefix),
564 WithProperties(
565 'CXX_UNDER_TEST=%s/bin/clang++' % install_prefix)]
566 f.addStep(SVN(name='svn-clang-tests', mode='update',
567 baseURL='http://llvm.org/svn/llvm-project/clang-tests/',
568 defaultBranch='trunk', workdir='clang-tests'))
569 gdb_dg_ignores = ignores.get('gdb-1472-testsuite', {})
570 f.addStep(DejaGNUCommand.DejaGNUCommand(
571 name='test-gdb-1472-testsuite',
572 command=["make", "-k", "check"] + make_vars,
573 description="gdb-1472-testsuite",
574 workdir='clang-tests/gdb-1472-testsuite',
David Deana10dc222011-12-17 17:26:11 +0000575 logfiles={ 'dg.sum' : 'obj/gdb.sum',
576 'gdb.log' : 'obj/gdb.log' },
Daniel Dunbar7363d032011-02-27 03:22:35 +0000577 ignore=gdb_dg_ignores))
578
579# FIXME: Deprecated.
580addClangTests = addClangGCCTests
581
Daniel Dunbar2b67e8f2011-02-11 21:03:41 +0000582def getClangTestsIgnoresFromPath(path, key):
583 def readList(path):
584 if not os.path.exists(path):
585 return []
586
587 f = open(path)
588 lines = [ln.strip() for ln in f]
589 f.close()
590 return lines
591
592 ignores = {}
593
594 gcc_dg_ignores = {}
595 for lang in ('gcc', 'g++', 'objc', 'obj-c++'):
596 lang_path = os.path.join(path, 'gcc-4_2-testsuite', 'expected_results',
597 key, lang)
598 gcc_dg_ignores[lang] = (
599 readList(os.path.join(lang_path, 'FAIL.txt')) +
600 readList(os.path.join(lang_path, 'UNRESOLVED.txt')) +
601 readList(os.path.join(lang_path, 'XPASS.txt')))
602 ignores['gcc-4_2-testsuite' ] = gcc_dg_ignores
603
Daniel Dunbar7363d032011-02-27 03:22:35 +0000604 ignores_path = os.path.join(path, 'gdb-1472-testsuite', 'expected_results',
605 key)
606 gdb_dg_ignores = (
607 readList(os.path.join(ignores_path, 'FAIL.txt')) +
608 readList(os.path.join(ignores_path, 'UNRESOLVED.txt')) +
609 readList(os.path.join(ignores_path, 'XPASS.txt')))
610 ignores['gdb-1472-testsuite' ] = gdb_dg_ignores
611
Daniel Dunbar2b67e8f2011-02-11 21:03:41 +0000612 return ignores