blob: eaa96bb0e9df08cf3e39df52b0f3a098616385ff [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)
50
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +000051 # Don't use in-dir builds with a two stage build process.
Daniel Dunbar3efb7822010-02-26 19:20:00 +000052 inDir = not outOfDir and not useTwoStage
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +000053 if inDir:
54 llvm_srcdir = "llvm"
55 llvm_1_objdir = "llvm"
Daniel Dunbar9870de32010-03-28 22:25:31 +000056 if always_install:
57 llvm_1_installdir = "llvm.install"
58 else:
59 llvm_1_installdir = None
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +000060 else:
61 llvm_srcdir = "llvm.src"
62 llvm_1_objdir = "llvm.obj"
63 llvm_1_installdir = "llvm.install.1"
64 llvm_2_objdir = "llvm.obj.2"
Daniel Dunbar22d594a2010-07-31 05:29:16 +000065 llvm_2_installdir = "llvm.install"
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +000066
Daniel Dunbar235aa412009-07-18 07:16:15 +000067 f = buildbot.process.factory.BuildFactory()
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +000068
69 # Determine the build directory.
70 f.addStep(buildbot.steps.shell.SetProperty(name="get_builddir",
71 command=["pwd"],
72 property="builddir",
73 description="set build dir",
Galina Kistanovaf4d79352011-10-20 20:46:52 +000074 workdir=".",
75 env=merged_env))
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +000076
Daniel Dunbar06b20f12010-04-08 18:29:38 +000077 # Blow away completely, if requested.
78 if completely_clean:
79 f.addStep(ShellCommand(name="rm-llvm.src",
80 command=["rm", "-rf", llvm_srcdir],
81 haltOnFailure=True,
82 description=["rm src dir", "llvm"],
Galina Kistanovaf4d79352011-10-20 20:46:52 +000083 workdir=".",
84 env=merged_env))
Daniel Dunbar06b20f12010-04-08 18:29:38 +000085
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +000086 # Checkout sources.
Peter Collingbourned49ac282011-10-25 14:38:45 +000087 if trunk_revision:
88 # The SVN build step provides no mechanism to check out a specific revision
89 # based on a property, so just run the commands directly here.
90 svn_co = ['svn', 'checkout']
91 if force_checkout:
92 svn_co += ['--force']
93 svn_co += ['--revision', WithProperties(trunk_revision)]
94
95 svn_co_llvm = svn_co + \
96 [WithProperties('http://llvm.org/svn/llvm-project/llvm/trunk@%s' %
97 trunk_revision),
98 llvm_srcdir]
99 svn_co_clang = svn_co + \
100 [WithProperties('http://llvm.org/svn/llvm-project/cfe/trunk@%s' %
101 trunk_revision),
102 '%s/tools/clang' % llvm_srcdir]
David Blaikie845ae0d2012-08-10 00:51:38 +0000103 svn_co_clang_tools_extra = svn_co + \
104 [WithProperties('http://llvm.org/svn/llvm-project/clang-tools-extra/trunk@%s' %
105 trunk_revision),
106 '%s/tools/clang/tools/extra' % llvm_srcdir]
Peter Collingbourned49ac282011-10-25 14:38:45 +0000107
108 f.addStep(ShellCommand(name='svn-llvm',
109 command=svn_co_llvm,
110 haltOnFailure=True,
111 workdir='.'))
112 f.addStep(ShellCommand(name='svn-clang',
113 command=svn_co_clang,
114 haltOnFailure=True,
115 workdir='.'))
David Blaikie845ae0d2012-08-10 00:51:38 +0000116 f.addStep(ShellCommand(name='svn-clang-tools-extra',
117 command=svn_co_clang_tools_extra,
118 haltOnFailure=True,
119 workdir='.'))
Peter Collingbourned49ac282011-10-25 14:38:45 +0000120 else:
121 f.addStep(SVN(name='svn-llvm',
Daniel Dunbarf4e23eb2010-09-20 21:13:02 +0000122 mode='update',
Peter Collingbourned49ac282011-10-25 14:38:45 +0000123 baseURL='http://llvm.org/svn/llvm-project/llvm/',
Daniel Dunbarf4e23eb2010-09-20 21:13:02 +0000124 defaultBranch='trunk',
Peter Collingbourned49ac282011-10-25 14:38:45 +0000125 workdir=llvm_srcdir))
126 f.addStep(SVN(name='svn-clang',
127 mode='update',
128 baseURL='http://llvm.org/svn/llvm-project/cfe/',
129 defaultBranch='trunk',
130 workdir='%s/tools/clang' % llvm_srcdir))
David Blaikie845ae0d2012-08-10 00:51:38 +0000131 f.addStep(SVN(name='svn-clang-tools-extra',
132 mode='update',
133 baseURL='http://llvm.org/svn/llvm-project/clang-tools-extra/',
134 defaultBranch='trunk',
135 workdir='%s/tools/clang/tools/extra' % llvm_srcdir))
Peter Collingbourned49ac282011-10-25 14:38:45 +0000136 if checkout_compiler_rt:
137 f.addStep(SVN(name='svn-compiler-rt',
138 mode='update',
139 baseURL='http://llvm.org/svn/llvm-project/compiler-rt/',
140 defaultBranch='trunk',
141 workdir='%s/projects/compiler-rt' % llvm_srcdir))
Daniel Dunbarfa0e0222009-11-09 06:08:28 +0000142
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000143 # Clean up llvm (stage 1); unless in-dir.
144 if clean and llvm_srcdir != llvm_1_objdir:
145 f.addStep(ShellCommand(name="rm-llvm.obj.stage1",
146 command=["rm", "-rf", llvm_1_objdir],
147 haltOnFailure=True,
148 description=["rm build dir", "llvm"],
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000149 workdir=".",
150 env=merged_env))
Andrew Trick70fa9d22011-08-25 23:38:51 +0000151
Daniel Dunbarfa0e0222009-11-09 06:08:28 +0000152 # Force without llvm-gcc so we don't run afoul of Frontend test failures.
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000153 base_configure_args = [WithProperties("%%(builddir)s/%s/configure" % llvm_srcdir),
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000154 '--disable-bindings']
155 base_configure_args += extra_configure_args
Daniel Dunbarfa0e0222009-11-09 06:08:28 +0000156 if triple:
Andrew Trick70fa9d22011-08-25 23:38:51 +0000157 base_configure_args += ['--build=%s' % triple,
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000158 '--host=%s' % triple,
159 '--target=%s' % triple]
160 args = base_configure_args + ["--without-llvmgcc", "--without-llvmgxx"]
Daniel Dunbar3efb7822010-02-26 19:20:00 +0000161 args.append(WithProperties("--prefix=%%(builddir)s/%s" % llvm_1_installdir))
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000162 args += getConfigArgs(stage1_config)
163 f.addStep(Configure(command=args,
164 workdir=llvm_1_objdir,
165 description=['configuring',stage1_config],
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000166 descriptionDone=['configure',stage1_config],
167 env=merged_env))
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000168
169 # Make clean if using in-dir builds.
170 if clean and llvm_srcdir == llvm_1_objdir:
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +0000171 f.addStep(WarningCountingShellCommand(name="clean-llvm",
Daniel Dunbard20468a2009-11-24 18:27:23 +0000172 command=[make, "clean"],
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +0000173 haltOnFailure=True,
174 description="cleaning llvm",
175 descriptionDone="clean llvm",
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000176 workdir=llvm_1_objdir,
Peter Collingbourne7a95b0c2011-10-26 16:40:17 +0000177 doStepIf=clean,
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000178 env=merged_env))
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000179
Peter Collingbourne7a95b0c2011-10-26 16:40:17 +0000180 if extra_clean_step:
181 f.addStep(extra_clean_step)
182
Daniel Dunbar7e959c82009-09-28 04:01:19 +0000183 f.addStep(WarningCountingShellCommand(name="compile",
Daniel Dunbard20468a2009-11-24 18:27:23 +0000184 command=['nice', '-n', '10',
185 make, WithProperties("-j%s" % jobs)],
Daniel Dunbar7e959c82009-09-28 04:01:19 +0000186 haltOnFailure=True,
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000187 description=["compiling", stage1_config],
188 descriptionDone=["compile", stage1_config],
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000189 workdir=llvm_1_objdir,
190 env=merged_env))
Daniel Dunbar256fed42009-11-25 21:11:08 +0000191
192 if examples:
193 f.addStep(WarningCountingShellCommand(name="compile.examples",
194 command=['nice', '-n', '10',
195 make, WithProperties("-j%s" % jobs),
196 "BUILD_EXAMPLES=1"],
197 haltOnFailure=True,
198 description=["compilinge", stage1_config, "examples"],
199 descriptionDone=["compile", stage1_config, "examples"],
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000200 workdir=llvm_1_objdir,
201 env=merged_env))
Daniel Dunbar256fed42009-11-25 21:11:08 +0000202
Daniel Dunbar93f828a2010-06-23 17:42:14 +0000203 clangTestArgs = llvmTestArgs = '-v -j %s' % jobs
Daniel Dunbarfa0e0222009-11-09 06:08:28 +0000204 if valgrind:
Daniel Dunbar89184b92010-04-18 19:09:32 +0000205 clangTestArgs += ' --vg'
Daniel Dunbara1bebce2010-03-21 01:24:00 +0000206 if valgrindLeakCheck:
207 clangTestArgs += ' --vg-leak'
Nick Lewycky8d26e472011-08-27 21:18:56 +0000208 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 +0000209 extraTestDirs = ''
210 if run_cxx_tests:
211 extraTestDirs += '%(builddir)s/llvm/tools/clang/utils/C++Tests'
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +0000212 if test:
213 f.addStep(ClangTestCommand(name='test-llvm',
Daniel Dunbar93f828a2010-06-23 17:42:14 +0000214 command=[make, "check-lit", "VERBOSE=1",
215 WithProperties("LIT_ARGS=%s" % llvmTestArgs)],
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +0000216 description=["testing", "llvm"],
217 descriptionDone=["test", "llvm"],
Daniel Dunbar469e8ca2010-05-19 21:26:48 +0000218 workdir=llvm_1_objdir,
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000219 usePTY=use_pty_in_tests,
220 env=merged_env))
Daniel Dunbar44abe742009-07-19 01:59:03 +0000221 f.addStep(ClangTestCommand(name='test-clang',
Daniel Dunbard20468a2009-11-24 18:27:23 +0000222 command=[make, 'test', WithProperties('TESTARGS=%s' % clangTestArgs),
Daniel Dunbarfa0e0222009-11-09 06:08:28 +0000223 WithProperties('EXTRA_TESTDIRS=%s' % extraTestDirs)],
Daniel Dunbar469e8ca2010-05-19 21:26:48 +0000224 workdir='%s/tools/clang' % llvm_1_objdir,
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000225 usePTY=use_pty_in_tests,
226 env=merged_env))
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000227
228 # Install llvm and clang.
229 if llvm_1_installdir:
Daniel Dunbar9870de32010-03-28 22:25:31 +0000230 f.addStep(ShellCommand(name="rm-install.clang.stage1",
231 command=["rm", "-rf", llvm_1_installdir],
232 haltOnFailure=True,
233 description=["rm install dir", "clang"],
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000234 workdir=".",
235 env=merged_env))
Daniel Dunbar9870de32010-03-28 22:25:31 +0000236 f.addStep(WarningCountingShellCommand(name="install.clang.stage1",
237 command = ['nice', '-n', '10',
238 make, 'install-clang'],
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000239 haltOnFailure=True,
Daniel Dunbar9870de32010-03-28 22:25:31 +0000240 description=["install", "clang",
241 stage1_config],
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000242 workdir=llvm_1_objdir,
243 env=merged_env))
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000244
David Blaikiea76da842012-08-13 22:24:46 +0000245 if run_gdb or run_gcc:
246 ignores = getClangTestsIgnoresFromPath(os.path.expanduser('~/public/clang-tests'), 'clang-x86_64-darwin10')
247 install_prefix = "%%(builddir)s/%s" % llvm_1_installdir
248 if run_gdb:
249 addClangGDBTests(f, ignores, install_prefix)
250 if run_gcc:
251 addClangGCCTests(f, ignores, install_prefix)
252
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000253 if not useTwoStage:
Daniel Dunbardedf6572010-11-13 00:23:34 +0000254 if package_dst:
255 name = WithProperties(
256 "%(builddir)s/" + llvm_1_objdir +
257 "/clang-r%(got_revision)s-b%(buildnumber)s.tgz")
258 f.addStep(ShellCommand(name='pkg.tar',
259 description="tar root",
260 command=["tar", "zcvf", name, "./"],
261 workdir=llvm_1_installdir,
262 warnOnFailure=True,
263 flunkOnFailure=False,
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000264 haltOnFailure=False,
265 env=merged_env))
Daniel Dunbardedf6572010-11-13 00:23:34 +0000266 f.addStep(ShellCommand(name='pkg.upload',
Andrew Trick70fa9d22011-08-25 23:38:51 +0000267 description="upload root",
Daniel Dunbardedf6572010-11-13 00:23:34 +0000268 command=["scp", name,
269 WithProperties(
270 package_dst + "/%(buildername)s")],
271 workdir=".",
272 warnOnFailure=True,
273 flunkOnFailure=False,
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000274 haltOnFailure=False,
275 env=merged_env))
Daniel Dunbardedf6572010-11-13 00:23:34 +0000276
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000277 return f
278
279 # Clean up llvm (stage 2).
280 if clean:
281 f.addStep(ShellCommand(name="rm-llvm.obj.stage2",
282 command=["rm", "-rf", llvm_2_objdir],
283 haltOnFailure=True,
284 description=["rm build dir", "llvm", "(stage 2)"],
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000285 workdir=".",
286 env=merged_env))
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000287
288 # Configure llvm (stage 2).
289 args = base_configure_args + ["--without-llvmgcc", "--without-llvmgxx"]
Daniel Dunbar3efb7822010-02-26 19:20:00 +0000290 args.append(WithProperties("--prefix=%(builddir)s/" + llvm_2_installdir))
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000291 args += getConfigArgs(stage2_config)
Benjamin Kramer9c6fed72012-07-20 10:18:32 +0000292 local_env = dict(merged_env)
293 local_env.update({
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000294 'CC' : WithProperties("%%(builddir)s/%s/bin/clang" % llvm_1_installdir),
295 'CXX' : WithProperties("%%(builddir)s/%s/bin/clang++" % llvm_1_installdir)})
296
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000297 f.addStep(Configure(name="configure.llvm.stage2",
298 command=args,
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000299 haltOnFailure=True,
300 workdir=llvm_2_objdir,
301 description=["configure", "llvm", "(stage 2)",
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000302 stage2_config],
303 env=local_env))
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000304
305 # Build llvm (stage 2).
306 f.addStep(WarningCountingShellCommand(name="compile.llvm.stage2",
307 command=['nice', '-n', '10',
308 make, WithProperties("-j%s" % jobs)],
309 haltOnFailure=True,
310 description=["compiling", "(stage 2)",
311 stage2_config],
312 descriptionDone=["compile", "(stage 2)",
313 stage2_config],
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000314 workdir=llvm_2_objdir,
315 env=merged_env))
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000316
317 if test:
318 f.addStep(ClangTestCommand(name='test-llvm',
Daniel Dunbar93f828a2010-06-23 17:42:14 +0000319 command=[make, "check-lit", "VERBOSE=1",
320 WithProperties("LIT_ARGS=%s" % llvmTestArgs)],
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000321 description=["testing", "llvm"],
322 descriptionDone=["test", "llvm"],
Daniel Dunbar469e8ca2010-05-19 21:26:48 +0000323 workdir=llvm_2_objdir,
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000324 usePTY=use_pty_in_tests,
325 env=merged_env))
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000326 f.addStep(ClangTestCommand(name='test-clang',
327 command=[make, 'test', WithProperties('TESTARGS=%s' % clangTestArgs),
328 WithProperties('EXTRA_TESTDIRS=%s' % extraTestDirs)],
Daniel Dunbar469e8ca2010-05-19 21:26:48 +0000329 workdir='%s/tools/clang' % llvm_2_objdir,
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000330 usePTY=use_pty_in_tests,
331 env=merged_env))
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000332
Daniel Dunbar3efb7822010-02-26 19:20:00 +0000333 # Install clang (stage 2).
Daniel Dunbar9870de32010-03-28 22:25:31 +0000334 f.addStep(ShellCommand(name="rm-install.clang.stage2",
335 command=["rm", "-rf", llvm_2_installdir],
336 haltOnFailure=True,
337 description=["rm install dir", "clang"],
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000338 workdir=".",
339 env=merged_env))
Daniel Dunbar3efb7822010-02-26 19:20:00 +0000340 f.addStep(WarningCountingShellCommand(name="install.clang.stage2",
341 command = ['nice', '-n', '10',
342 make, 'install-clang'],
343 haltOnFailure=True,
344 description=["install", "clang",
345 "(stage 2)"],
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000346 workdir=llvm_2_objdir,
347 env=merged_env))
Daniel Dunbar3efb7822010-02-26 19:20:00 +0000348
349 if package_dst:
350 name = WithProperties(
351 "%(builddir)s/" + llvm_2_objdir +
352 "/clang-r%(got_revision)s-b%(buildnumber)s.tgz")
353 f.addStep(ShellCommand(name='pkg.tar',
354 description="tar root",
355 command=["tar", "zcvf", name, "./"],
356 workdir=llvm_2_installdir,
357 warnOnFailure=True,
358 flunkOnFailure=False,
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000359 haltOnFailure=False,
360 env=merged_env))
Daniel Dunbar3efb7822010-02-26 19:20:00 +0000361 f.addStep(ShellCommand(name='pkg.upload',
Andrew Trick70fa9d22011-08-25 23:38:51 +0000362 description="upload root",
Daniel Dunbar3efb7822010-02-26 19:20:00 +0000363 command=["scp", name,
364 WithProperties(
365 package_dst + "/%(buildername)s")],
366 workdir=".",
367 warnOnFailure=True,
368 flunkOnFailure=False,
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000369 haltOnFailure=False,
370 env=merged_env))
Daniel Dunbar3efb7822010-02-26 19:20:00 +0000371
Daniel Dunbar235aa412009-07-18 07:16:15 +0000372 return f
Daniel Dunbar44abe742009-07-19 01:59:03 +0000373
Daniel Dunbarc51a59e2010-09-23 14:57:45 +0000374def getClangMSVCBuildFactory(update=True, clean=True, vcDrive='c', jobs=1, cmake=r"cmake"):
Daniel Dunbar44abe742009-07-19 01:59:03 +0000375 f = buildbot.process.factory.BuildFactory()
376
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +0000377 if update:
Daniel Dunbar44abe742009-07-19 01:59:03 +0000378 f.addStep(SVN(name='svn-llvm',
379 mode='update', baseURL='http://llvm.org/svn/llvm-project/llvm/',
380 defaultBranch='trunk',
381 workdir='llvm'))
Daniel Dunbar44abe742009-07-19 01:59:03 +0000382 f.addStep(SVN(name='svn-clang',
Daniel Dunbar7e959c82009-09-28 04:01:19 +0000383 mode='update', baseURL='http://llvm.org/svn/llvm-project/cfe/',
Daniel Dunbar44abe742009-07-19 01:59:03 +0000384 defaultBranch='trunk',
385 workdir='llvm/tools/clang'))
David Blaikie845ae0d2012-08-10 00:51:38 +0000386 f.addStep(SVN(name='svn-clang-tools-extra',
387 mode='update', baseURL='http://llvm.org/svn/llvm-project/clang-tools-extra/',
388 defaultBranch='trunk',
389 workdir='llvm/tools/clang/tools/extra'))
Daniel Dunbar44abe742009-07-19 01:59:03 +0000390
391 # Full & fast clean.
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +0000392 if clean:
Daniel Dunbar44abe742009-07-19 01:59:03 +0000393 f.addStep(ShellCommand(name='clean-1',
394 command=['del','/s/q','build'],
Daniel Dunbar7e959c82009-09-28 04:01:19 +0000395 warnOnFailure=True,
Daniel Dunbar44abe742009-07-19 01:59:03 +0000396 description='cleaning',
397 descriptionDone='clean',
398 workdir='llvm'))
399 f.addStep(ShellCommand(name='clean-2',
400 command=['rmdir','/s/q','build'],
Daniel Dunbar7e959c82009-09-28 04:01:19 +0000401 warnOnFailure=True,
Daniel Dunbar44abe742009-07-19 01:59:03 +0000402 description='cleaning',
403 descriptionDone='clean',
404 workdir='llvm'))
405
406 # Create the project files.
Daniel Dunbar7e959c82009-09-28 04:01:19 +0000407
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +0000408 # Use batch files instead of ShellCommand directly, Windows quoting is
409 # borked. FIXME: See buildbot ticket #595 and buildbot ticket #377.
410 f.addStep(BatchFileDownload(name='cmakegen',
Daniel Dunbar06b20f12010-04-08 18:29:38 +0000411 command=[cmake,
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +0000412 "-DLLVM_TARGETS_TO_BUILD:=X86",
Daniel Dunbar1ddedce2010-09-24 19:57:34 +0000413 "-DLLVM_INCLUDE_EXAMPLES:=OFF",
414 "-DLLVM_INCLUDE_TESTS:=OFF",
415 "-DLLVM_TARGETS_TO_BUILD:=X86",
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +0000416 "-G",
417 "Visual Studio 9 2008",
418 ".."],
419 workdir="llvm\\build"))
Daniel Dunbar44abe742009-07-19 01:59:03 +0000420 f.addStep(ShellCommand(name='cmake',
421 command=['cmakegen.bat'],
Daniel Dunbar7e959c82009-09-28 04:01:19 +0000422 haltOnFailure=True,
Daniel Dunbar44abe742009-07-19 01:59:03 +0000423 description='cmake gen',
424 workdir='llvm\\build'))
425
426 # Build it.
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +0000427 f.addStep(BatchFileDownload(name='vcbuild',
428 command=[vcDrive + r""":\Program Files\Microsoft Visual Studio 9.0\VC\VCPackages\vcbuild.exe""",
429 "/M%d" % jobs,
430 "LLVM.sln",
431 "Debug|Win32"],
432 workdir="llvm\\build"))
Daniel Dunbar44abe742009-07-19 01:59:03 +0000433 f.addStep(WarningCountingShellCommand(name='vcbuild',
434 command=['vcbuild.bat'],
Daniel Dunbar7e959c82009-09-28 04:01:19 +0000435 haltOnFailure=True,
Daniel Dunbar44abe742009-07-19 01:59:03 +0000436 description='vcbuild',
437 workdir='llvm\\build',
438 warningPattern=" warning C.*:"))
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +0000439
440 # Build clang-test project.
441 f.addStep(BatchFileDownload(name='vcbuild_test',
442 command=[vcDrive + r""":\Program Files\Microsoft Visual Studio 9.0\VC\VCPackages\vcbuild.exe""",
443 "clang-test.vcproj",
444 "Debug|Win32"],
445 workdir="llvm\\build\\tools\\clang\\test"))
446 f.addStep(ClangTestCommand(name='test-clang',
447 command=["vcbuild_test.bat"],
448 workdir="llvm\\build\\tools\\clang\\test"))
449
Daniel Dunbar44abe742009-07-19 01:59:03 +0000450 return f
Daniel Dunbar22d594a2010-07-31 05:29:16 +0000451
Galina Kistanova2a97a3b2012-06-06 20:50:33 +0000452# Builds on Windows using CMake, MinGW(32|64), and no Microsoft tools.
Galina Kistanova5e97edf2012-06-19 20:10:21 +0000453def getClangMinGWBuildFactory(update=True, clean=True, jobs=6, cmake=r"cmake"):
Galina Kistanova2a97a3b2012-06-06 20:50:33 +0000454 f = buildbot.process.factory.BuildFactory()
455
456 if update:
457 f.addStep(SVN(name='svn-llvm',
458 mode='update', baseURL='http://llvm.org/svn/llvm-project/llvm/',
459 defaultBranch='trunk',
460 workdir='llvm'))
Galina Kistanova2a97a3b2012-06-06 20:50:33 +0000461 f.addStep(SVN(name='svn-clang',
462 mode='update', baseURL='http://llvm.org/svn/llvm-project/cfe/',
463 defaultBranch='trunk',
464 workdir='llvm/tools/clang'))
David Blaikie845ae0d2012-08-10 00:51:38 +0000465 f.addStep(SVN(name='svn-clang-tools-extra',
466 mode='update', baseURL='http://llvm.org/svn/llvm-project/clang-tools-extra/',
467 defaultBranch='trunk',
468 workdir='llvm/tools/clang/tools/extra'))
Galina Kistanova2a97a3b2012-06-06 20:50:33 +0000469
470 # Full & fast clean.
471 if clean:
472 # note: This command is redundant as the next command removes everything
473 f.addStep(ShellCommand(name='clean-1',
474 command=['del','/s/q','build'],
475 warnOnFailure=True,
476 description='cleaning',
477 descriptionDone='clean',
478 workdir='llvm'))
479 f.addStep(ShellCommand(name='clean-2',
480 command=['rmdir','/s/q','build'],
481 warnOnFailure=True,
482 description='cleaning',
483 descriptionDone='clean',
484 workdir='llvm'))
485
486 # Create the Makefiles.
487
488 # Use batch files instead of ShellCommand directly, Windows quoting is
489 # borked. FIXME: See buildbot ticket #595 and buildbot ticket #377.
490 f.addStep(BatchFileDownload(name='cmakegen',
491 command=[cmake,
492 "-DLLVM_TARGETS_TO_BUILD:=X86",
493 "-DLLVM_INCLUDE_EXAMPLES:=OFF",
494 "-DLLVM_INCLUDE_TESTS:=OFF",
495 "-DLLVM_TARGETS_TO_BUILD:=X86",
496 "-G",
Galina Kistanova5e97edf2012-06-19 20:10:21 +0000497 "Ninja",
Galina Kistanova2a97a3b2012-06-06 20:50:33 +0000498 ".."],
499 workdir="llvm\\build"))
500 f.addStep(ShellCommand(name='cmake',
501 command=['cmakegen.bat'],
502 haltOnFailure=True,
503 description='cmake gen',
504 workdir='llvm\\build'))
505
506 # Build it.
507 f.addStep(BatchFileDownload(name='makeall',
Galina Kistanova5e97edf2012-06-19 20:10:21 +0000508 command=["ninja", "-j", "%d" % jobs],
Galina Kistanova2a97a3b2012-06-06 20:50:33 +0000509 haltOnFailure=True,
510 workdir='llvm\\build'))
511
512 f.addStep(WarningCountingShellCommand(name='makeall',
513 command=['makeall.bat'],
514 haltOnFailure=True,
515 description='makeall',
516 workdir='llvm\\build'))
517
Galina Kistanova5e97edf2012-06-19 20:10:21 +0000518 # Build global check project (make check) (sources not checked out...).
519 if 0:
520 f.addStep(BatchFileDownload(name='makecheck',
521 command=["ninja", "check"],
522 workdir='llvm\\build'))
523 f.addStep(WarningCountingShellCommand(name='check',
524 command=['makecheck.bat'],
525 description='make check',
526 workdir='llvm\\build'))
Galina Kistanova049d76c2012-06-09 00:56:05 +0000527
528 # Build clang-test project (make clang-test).
Galina Kistanova2a97a3b2012-06-06 20:50:33 +0000529 f.addStep(BatchFileDownload(name='maketest',
Galina Kistanova5e97edf2012-06-19 20:10:21 +0000530 command=["ninja", "clang-test"],
Galina Kistanova049d76c2012-06-09 00:56:05 +0000531 workdir="llvm\\build"))
532 f.addStep(ClangTestCommand(name='clang-test',
Galina Kistanova2a97a3b2012-06-06 20:50:33 +0000533 command=["maketest.bat"],
Galina Kistanova049d76c2012-06-09 00:56:05 +0000534 workdir="llvm\\build"))
Galina Kistanova2a97a3b2012-06-06 20:50:33 +0000535
536 return f
537
Daniel Dunbar7363d032011-02-27 03:22:35 +0000538def addClangGCCTests(f, ignores={}, install_prefix="%(builddir)s/llvm.install",
539 languages = ('gcc', 'g++', 'objc', 'obj-c++')):
Daniel Dunbar22d594a2010-07-31 05:29:16 +0000540 make_vars = [WithProperties(
Daniel Dunbar2b67e8f2011-02-11 21:03:41 +0000541 'CC_UNDER_TEST=%s/bin/clang' % install_prefix),
Daniel Dunbar22d594a2010-07-31 05:29:16 +0000542 WithProperties(
Daniel Dunbar2b67e8f2011-02-11 21:03:41 +0000543 'CXX_UNDER_TEST=%s/bin/clang++' % install_prefix)]
Daniel Dunbar22d594a2010-07-31 05:29:16 +0000544 f.addStep(SVN(name='svn-clang-tests', mode='update',
545 baseURL='http://llvm.org/svn/llvm-project/clang-tests/',
546 defaultBranch='trunk', workdir='clang-tests'))
547 gcc_dg_ignores = ignores.get('gcc-4_2-testsuite', {})
Daniel Dunbar2b67e8f2011-02-11 21:03:41 +0000548 for lang in languages:
Daniel Dunbar22d594a2010-07-31 05:29:16 +0000549 f.addStep(DejaGNUCommand.DejaGNUCommand(
550 name='test-gcc-4_2-testsuite-%s' % lang,
551 command=["make", "-k", "check-%s" % lang] + make_vars,
552 description="gcc-4_2-testsuite (%s)" % lang,
553 workdir='clang-tests/gcc-4_2-testsuite',
David Dean2bd0c3a2011-10-18 16:36:28 +0000554 logfiles={ 'dg.sum' : 'obj/%s/%s.sum' % (lang, lang),
555 '%s.log' % lang : 'obj/%s/%s.log' % (lang, lang)},
Daniel Dunbar22d594a2010-07-31 05:29:16 +0000556 ignore=gcc_dg_ignores.get(lang, [])))
Daniel Dunbar2b67e8f2011-02-11 21:03:41 +0000557
Daniel Dunbar7363d032011-02-27 03:22:35 +0000558def addClangGDBTests(f, ignores={}, install_prefix="%(builddir)s/llvm.install"):
559 make_vars = [WithProperties(
560 'CC_UNDER_TEST=%s/bin/clang' % install_prefix),
561 WithProperties(
562 'CXX_UNDER_TEST=%s/bin/clang++' % install_prefix)]
563 f.addStep(SVN(name='svn-clang-tests', mode='update',
564 baseURL='http://llvm.org/svn/llvm-project/clang-tests/',
565 defaultBranch='trunk', workdir='clang-tests'))
566 gdb_dg_ignores = ignores.get('gdb-1472-testsuite', {})
567 f.addStep(DejaGNUCommand.DejaGNUCommand(
568 name='test-gdb-1472-testsuite',
569 command=["make", "-k", "check"] + make_vars,
570 description="gdb-1472-testsuite",
571 workdir='clang-tests/gdb-1472-testsuite',
David Deana10dc222011-12-17 17:26:11 +0000572 logfiles={ 'dg.sum' : 'obj/gdb.sum',
573 'gdb.log' : 'obj/gdb.log' },
Daniel Dunbar7363d032011-02-27 03:22:35 +0000574 ignore=gdb_dg_ignores))
575
576# FIXME: Deprecated.
577addClangTests = addClangGCCTests
578
Daniel Dunbar2b67e8f2011-02-11 21:03:41 +0000579def getClangTestsIgnoresFromPath(path, key):
580 def readList(path):
581 if not os.path.exists(path):
582 return []
583
584 f = open(path)
585 lines = [ln.strip() for ln in f]
586 f.close()
587 return lines
588
589 ignores = {}
590
591 gcc_dg_ignores = {}
592 for lang in ('gcc', 'g++', 'objc', 'obj-c++'):
593 lang_path = os.path.join(path, 'gcc-4_2-testsuite', 'expected_results',
594 key, lang)
595 gcc_dg_ignores[lang] = (
596 readList(os.path.join(lang_path, 'FAIL.txt')) +
597 readList(os.path.join(lang_path, 'UNRESOLVED.txt')) +
598 readList(os.path.join(lang_path, 'XPASS.txt')))
599 ignores['gcc-4_2-testsuite' ] = gcc_dg_ignores
600
Daniel Dunbar7363d032011-02-27 03:22:35 +0000601 ignores_path = os.path.join(path, 'gdb-1472-testsuite', 'expected_results',
602 key)
603 gdb_dg_ignores = (
604 readList(os.path.join(ignores_path, 'FAIL.txt')) +
605 readList(os.path.join(ignores_path, 'UNRESOLVED.txt')) +
606 readList(os.path.join(ignores_path, 'XPASS.txt')))
607 ignores['gdb-1472-testsuite' ] = gdb_dg_ignores
608
Daniel Dunbar2b67e8f2011-02-11 21:03:41 +0000609 return ignores