blob: 059b538d60e85b812d8a6e986891d784c126cbd3 [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,
Galina Kistanovaf4d79352011-10-20 20:46:52 +000029 make='make',
30 jobs="%(jobs)s",
31 stage1_config='Debug+Asserts',
32 stage2_config='Release+Asserts',
33 env={}, # Environmental variables for all steps.
34 extra_configure_args=[],
35 use_pty_in_tests=False,
Peter Collingbourned49ac282011-10-25 14:38:45 +000036 trunk_revision=None,
37 force_checkout=False,
Peter Collingbourne7a95b0c2011-10-26 16:40:17 +000038 extra_clean_step=None,
David Blaikiea76da842012-08-13 22:24:46 +000039 checkout_compiler_rt=False,
40 run_gdb=False,
41 run_gcc=False):
Galina Kistanovaf4d79352011-10-20 20:46:52 +000042 # Prepare environmental variables. Set here all env we want everywhere.
43 merged_env = {
44 'TERM' : 'dumb' # Make sure Clang doesn't use color escape sequences.
45 }
46 if env is not None:
47 # Overwrite pre-set items with the given ones, so user can set anything.
48 merged_env.update(env)
David Blaikie2f7eb282012-08-24 18:37:00 +000049
50 if run_gdb or run_gcc:
David Blaikie88511c72012-08-24 23:14:06 +000051 outOfDir = True
Galina Kistanovaf4d79352011-10-20 20:46:52 +000052
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +000053 # Don't use in-dir builds with a two stage build process.
Daniel Dunbar3efb7822010-02-26 19:20:00 +000054 inDir = not outOfDir and not useTwoStage
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +000055 if inDir:
56 llvm_srcdir = "llvm"
57 llvm_1_objdir = "llvm"
David Blaikie88511c72012-08-24 23:14:06 +000058 llvm_1_installdir = None
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +000059 else:
60 llvm_srcdir = "llvm.src"
61 llvm_1_objdir = "llvm.obj"
62 llvm_1_installdir = "llvm.install.1"
63 llvm_2_objdir = "llvm.obj.2"
Daniel Dunbar22d594a2010-07-31 05:29:16 +000064 llvm_2_installdir = "llvm.install"
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +000065
Daniel Dunbar235aa412009-07-18 07:16:15 +000066 f = buildbot.process.factory.BuildFactory()
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +000067
68 # Determine the build directory.
69 f.addStep(buildbot.steps.shell.SetProperty(name="get_builddir",
70 command=["pwd"],
71 property="builddir",
72 description="set build dir",
Galina Kistanovaf4d79352011-10-20 20:46:52 +000073 workdir=".",
74 env=merged_env))
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +000075
Daniel Dunbar06b20f12010-04-08 18:29:38 +000076 # Blow away completely, if requested.
77 if completely_clean:
78 f.addStep(ShellCommand(name="rm-llvm.src",
79 command=["rm", "-rf", llvm_srcdir],
80 haltOnFailure=True,
81 description=["rm src dir", "llvm"],
Galina Kistanovaf4d79352011-10-20 20:46:52 +000082 workdir=".",
83 env=merged_env))
Daniel Dunbar06b20f12010-04-08 18:29:38 +000084
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +000085 # Checkout sources.
Peter Collingbourned49ac282011-10-25 14:38:45 +000086 if trunk_revision:
87 # The SVN build step provides no mechanism to check out a specific revision
88 # based on a property, so just run the commands directly here.
89 svn_co = ['svn', 'checkout']
90 if force_checkout:
91 svn_co += ['--force']
92 svn_co += ['--revision', WithProperties(trunk_revision)]
93
94 svn_co_llvm = svn_co + \
95 [WithProperties('http://llvm.org/svn/llvm-project/llvm/trunk@%s' %
96 trunk_revision),
97 llvm_srcdir]
98 svn_co_clang = svn_co + \
99 [WithProperties('http://llvm.org/svn/llvm-project/cfe/trunk@%s' %
100 trunk_revision),
101 '%s/tools/clang' % llvm_srcdir]
David Blaikie845ae0d2012-08-10 00:51:38 +0000102 svn_co_clang_tools_extra = svn_co + \
103 [WithProperties('http://llvm.org/svn/llvm-project/clang-tools-extra/trunk@%s' %
104 trunk_revision),
105 '%s/tools/clang/tools/extra' % llvm_srcdir]
Peter Collingbourned49ac282011-10-25 14:38:45 +0000106
107 f.addStep(ShellCommand(name='svn-llvm',
108 command=svn_co_llvm,
109 haltOnFailure=True,
110 workdir='.'))
111 f.addStep(ShellCommand(name='svn-clang',
112 command=svn_co_clang,
113 haltOnFailure=True,
114 workdir='.'))
David Blaikie845ae0d2012-08-10 00:51:38 +0000115 f.addStep(ShellCommand(name='svn-clang-tools-extra',
116 command=svn_co_clang_tools_extra,
117 haltOnFailure=True,
118 workdir='.'))
Peter Collingbourned49ac282011-10-25 14:38:45 +0000119 else:
120 f.addStep(SVN(name='svn-llvm',
Daniel Dunbarf4e23eb2010-09-20 21:13:02 +0000121 mode='update',
Peter Collingbourned49ac282011-10-25 14:38:45 +0000122 baseURL='http://llvm.org/svn/llvm-project/llvm/',
Daniel Dunbarf4e23eb2010-09-20 21:13:02 +0000123 defaultBranch='trunk',
Peter Collingbourned49ac282011-10-25 14:38:45 +0000124 workdir=llvm_srcdir))
125 f.addStep(SVN(name='svn-clang',
126 mode='update',
127 baseURL='http://llvm.org/svn/llvm-project/cfe/',
128 defaultBranch='trunk',
129 workdir='%s/tools/clang' % llvm_srcdir))
David Blaikie845ae0d2012-08-10 00:51:38 +0000130 f.addStep(SVN(name='svn-clang-tools-extra',
131 mode='update',
132 baseURL='http://llvm.org/svn/llvm-project/clang-tools-extra/',
133 defaultBranch='trunk',
134 workdir='%s/tools/clang/tools/extra' % llvm_srcdir))
Peter Collingbourned49ac282011-10-25 14:38:45 +0000135 if checkout_compiler_rt:
136 f.addStep(SVN(name='svn-compiler-rt',
137 mode='update',
138 baseURL='http://llvm.org/svn/llvm-project/compiler-rt/',
139 defaultBranch='trunk',
140 workdir='%s/projects/compiler-rt' % llvm_srcdir))
Daniel Dunbarfa0e0222009-11-09 06:08:28 +0000141
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000142 # Clean up llvm (stage 1); unless in-dir.
143 if clean and llvm_srcdir != llvm_1_objdir:
144 f.addStep(ShellCommand(name="rm-llvm.obj.stage1",
145 command=["rm", "-rf", llvm_1_objdir],
146 haltOnFailure=True,
147 description=["rm build dir", "llvm"],
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000148 workdir=".",
149 env=merged_env))
Andrew Trick70fa9d22011-08-25 23:38:51 +0000150
Daniel Dunbarfa0e0222009-11-09 06:08:28 +0000151 # Force without llvm-gcc so we don't run afoul of Frontend test failures.
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000152 base_configure_args = [WithProperties("%%(builddir)s/%s/configure" % llvm_srcdir),
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000153 '--disable-bindings']
154 base_configure_args += extra_configure_args
Daniel Dunbarfa0e0222009-11-09 06:08:28 +0000155 if triple:
Andrew Trick70fa9d22011-08-25 23:38:51 +0000156 base_configure_args += ['--build=%s' % triple,
David Dean7da22862012-10-01 19:57:30 +0000157 '--host=%s' % triple]
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000158 args = base_configure_args + ["--without-llvmgcc", "--without-llvmgxx"]
Daniel Dunbar3efb7822010-02-26 19:20:00 +0000159 args.append(WithProperties("--prefix=%%(builddir)s/%s" % llvm_1_installdir))
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000160 args += getConfigArgs(stage1_config)
161 f.addStep(Configure(command=args,
162 workdir=llvm_1_objdir,
163 description=['configuring',stage1_config],
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000164 descriptionDone=['configure',stage1_config],
165 env=merged_env))
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000166
167 # Make clean if using in-dir builds.
168 if clean and llvm_srcdir == llvm_1_objdir:
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +0000169 f.addStep(WarningCountingShellCommand(name="clean-llvm",
Daniel Dunbard20468a2009-11-24 18:27:23 +0000170 command=[make, "clean"],
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +0000171 haltOnFailure=True,
172 description="cleaning llvm",
173 descriptionDone="clean llvm",
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000174 workdir=llvm_1_objdir,
Peter Collingbourne7a95b0c2011-10-26 16:40:17 +0000175 doStepIf=clean,
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000176 env=merged_env))
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000177
Peter Collingbourne7a95b0c2011-10-26 16:40:17 +0000178 if extra_clean_step:
179 f.addStep(extra_clean_step)
180
Daniel Dunbar7e959c82009-09-28 04:01:19 +0000181 f.addStep(WarningCountingShellCommand(name="compile",
Daniel Dunbard20468a2009-11-24 18:27:23 +0000182 command=['nice', '-n', '10',
183 make, WithProperties("-j%s" % jobs)],
Daniel Dunbar7e959c82009-09-28 04:01:19 +0000184 haltOnFailure=True,
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000185 description=["compiling", stage1_config],
186 descriptionDone=["compile", stage1_config],
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000187 workdir=llvm_1_objdir,
188 env=merged_env))
Daniel Dunbar256fed42009-11-25 21:11:08 +0000189
190 if examples:
191 f.addStep(WarningCountingShellCommand(name="compile.examples",
192 command=['nice', '-n', '10',
193 make, WithProperties("-j%s" % jobs),
194 "BUILD_EXAMPLES=1"],
195 haltOnFailure=True,
196 description=["compilinge", stage1_config, "examples"],
197 descriptionDone=["compile", stage1_config, "examples"],
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000198 workdir=llvm_1_objdir,
199 env=merged_env))
Daniel Dunbar256fed42009-11-25 21:11:08 +0000200
Daniel Dunbar93f828a2010-06-23 17:42:14 +0000201 clangTestArgs = llvmTestArgs = '-v -j %s' % jobs
Daniel Dunbarfa0e0222009-11-09 06:08:28 +0000202 if valgrind:
Daniel Dunbar89184b92010-04-18 19:09:32 +0000203 clangTestArgs += ' --vg'
Daniel Dunbara1bebce2010-03-21 01:24:00 +0000204 if valgrindLeakCheck:
205 clangTestArgs += ' --vg-leak'
Nick Lewycky8d26e472011-08-27 21:18:56 +0000206 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 +0000207 extraTestDirs = ''
208 if run_cxx_tests:
209 extraTestDirs += '%(builddir)s/llvm/tools/clang/utils/C++Tests'
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +0000210 if test:
David Blaikie7e6f8a12012-08-31 20:46:27 +0000211 f.addStep(ClangTestCommand(name='check-all',
212 command=[make, "check-all", "VERBOSE=1",
Daniel Dunbar93f828a2010-06-23 17:42:14 +0000213 WithProperties("LIT_ARGS=%s" % llvmTestArgs)],
David Blaikie7e6f8a12012-08-31 20:46:27 +0000214 description=["checking"],
215 descriptionDone=["checked"],
Daniel Dunbar469e8ca2010-05-19 21:26:48 +0000216 workdir=llvm_1_objdir,
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000217 usePTY=use_pty_in_tests,
218 env=merged_env))
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000219
220 # Install llvm and clang.
221 if llvm_1_installdir:
Daniel Dunbar9870de32010-03-28 22:25:31 +0000222 f.addStep(ShellCommand(name="rm-install.clang.stage1",
223 command=["rm", "-rf", llvm_1_installdir],
224 haltOnFailure=True,
225 description=["rm install dir", "clang"],
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000226 workdir=".",
227 env=merged_env))
Daniel Dunbar9870de32010-03-28 22:25:31 +0000228 f.addStep(WarningCountingShellCommand(name="install.clang.stage1",
229 command = ['nice', '-n', '10',
230 make, 'install-clang'],
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000231 haltOnFailure=True,
Daniel Dunbar9870de32010-03-28 22:25:31 +0000232 description=["install", "clang",
233 stage1_config],
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000234 workdir=llvm_1_objdir,
235 env=merged_env))
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000236
David Blaikiea76da842012-08-13 22:24:46 +0000237 if run_gdb or run_gcc:
238 ignores = getClangTestsIgnoresFromPath(os.path.expanduser('~/public/clang-tests'), 'clang-x86_64-darwin10')
239 install_prefix = "%%(builddir)s/%s" % llvm_1_installdir
240 if run_gdb:
241 addClangGDBTests(f, ignores, install_prefix)
242 if run_gcc:
243 addClangGCCTests(f, ignores, install_prefix)
244
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000245 if not useTwoStage:
Daniel Dunbardedf6572010-11-13 00:23:34 +0000246 if package_dst:
247 name = WithProperties(
248 "%(builddir)s/" + llvm_1_objdir +
249 "/clang-r%(got_revision)s-b%(buildnumber)s.tgz")
250 f.addStep(ShellCommand(name='pkg.tar',
251 description="tar root",
252 command=["tar", "zcvf", name, "./"],
253 workdir=llvm_1_installdir,
254 warnOnFailure=True,
255 flunkOnFailure=False,
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000256 haltOnFailure=False,
257 env=merged_env))
Daniel Dunbardedf6572010-11-13 00:23:34 +0000258 f.addStep(ShellCommand(name='pkg.upload',
Andrew Trick70fa9d22011-08-25 23:38:51 +0000259 description="upload root",
Daniel Dunbardedf6572010-11-13 00:23:34 +0000260 command=["scp", name,
261 WithProperties(
262 package_dst + "/%(buildername)s")],
263 workdir=".",
264 warnOnFailure=True,
265 flunkOnFailure=False,
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000266 haltOnFailure=False,
267 env=merged_env))
Daniel Dunbardedf6572010-11-13 00:23:34 +0000268
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000269 return f
270
271 # Clean up llvm (stage 2).
272 if clean:
273 f.addStep(ShellCommand(name="rm-llvm.obj.stage2",
274 command=["rm", "-rf", llvm_2_objdir],
275 haltOnFailure=True,
276 description=["rm build dir", "llvm", "(stage 2)"],
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000277 workdir=".",
278 env=merged_env))
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000279
280 # Configure llvm (stage 2).
281 args = base_configure_args + ["--without-llvmgcc", "--without-llvmgxx"]
Daniel Dunbar3efb7822010-02-26 19:20:00 +0000282 args.append(WithProperties("--prefix=%(builddir)s/" + llvm_2_installdir))
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000283 args += getConfigArgs(stage2_config)
Benjamin Kramer9c6fed72012-07-20 10:18:32 +0000284 local_env = dict(merged_env)
285 local_env.update({
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000286 'CC' : WithProperties("%%(builddir)s/%s/bin/clang" % llvm_1_installdir),
287 'CXX' : WithProperties("%%(builddir)s/%s/bin/clang++" % llvm_1_installdir)})
288
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000289 f.addStep(Configure(name="configure.llvm.stage2",
290 command=args,
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000291 haltOnFailure=True,
292 workdir=llvm_2_objdir,
293 description=["configure", "llvm", "(stage 2)",
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000294 stage2_config],
295 env=local_env))
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000296
297 # Build llvm (stage 2).
298 f.addStep(WarningCountingShellCommand(name="compile.llvm.stage2",
299 command=['nice', '-n', '10',
300 make, WithProperties("-j%s" % jobs)],
301 haltOnFailure=True,
302 description=["compiling", "(stage 2)",
303 stage2_config],
304 descriptionDone=["compile", "(stage 2)",
305 stage2_config],
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000306 workdir=llvm_2_objdir,
307 env=merged_env))
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000308
309 if test:
David Blaikie7e6f8a12012-08-31 20:46:27 +0000310 f.addStep(ClangTestCommand(name='check-all',
311 command=[make, "check-all", "VERBOSE=1",
Daniel Dunbar93f828a2010-06-23 17:42:14 +0000312 WithProperties("LIT_ARGS=%s" % llvmTestArgs)],
David Blaikie7e6f8a12012-08-31 20:46:27 +0000313 description=["checking"],
314 descriptionDone=["checked"],
Daniel Dunbar469e8ca2010-05-19 21:26:48 +0000315 workdir=llvm_2_objdir,
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000316 usePTY=use_pty_in_tests,
317 env=merged_env))
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000318
Daniel Dunbar3efb7822010-02-26 19:20:00 +0000319 # Install clang (stage 2).
Daniel Dunbar9870de32010-03-28 22:25:31 +0000320 f.addStep(ShellCommand(name="rm-install.clang.stage2",
321 command=["rm", "-rf", llvm_2_installdir],
322 haltOnFailure=True,
323 description=["rm install dir", "clang"],
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000324 workdir=".",
325 env=merged_env))
Daniel Dunbar3efb7822010-02-26 19:20:00 +0000326 f.addStep(WarningCountingShellCommand(name="install.clang.stage2",
327 command = ['nice', '-n', '10',
328 make, 'install-clang'],
329 haltOnFailure=True,
330 description=["install", "clang",
331 "(stage 2)"],
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000332 workdir=llvm_2_objdir,
333 env=merged_env))
Daniel Dunbar3efb7822010-02-26 19:20:00 +0000334
335 if package_dst:
336 name = WithProperties(
337 "%(builddir)s/" + llvm_2_objdir +
338 "/clang-r%(got_revision)s-b%(buildnumber)s.tgz")
339 f.addStep(ShellCommand(name='pkg.tar',
340 description="tar root",
341 command=["tar", "zcvf", name, "./"],
342 workdir=llvm_2_installdir,
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 f.addStep(ShellCommand(name='pkg.upload',
Andrew Trick70fa9d22011-08-25 23:38:51 +0000348 description="upload root",
Daniel Dunbar3efb7822010-02-26 19:20:00 +0000349 command=["scp", name,
350 WithProperties(
351 package_dst + "/%(buildername)s")],
352 workdir=".",
353 warnOnFailure=True,
354 flunkOnFailure=False,
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000355 haltOnFailure=False,
356 env=merged_env))
Daniel Dunbar3efb7822010-02-26 19:20:00 +0000357
Daniel Dunbar235aa412009-07-18 07:16:15 +0000358 return f
Daniel Dunbar44abe742009-07-19 01:59:03 +0000359
Daniel Dunbarc51a59e2010-09-23 14:57:45 +0000360def getClangMSVCBuildFactory(update=True, clean=True, vcDrive='c', jobs=1, cmake=r"cmake"):
Daniel Dunbar44abe742009-07-19 01:59:03 +0000361 f = buildbot.process.factory.BuildFactory()
362
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +0000363 if update:
Daniel Dunbar44abe742009-07-19 01:59:03 +0000364 f.addStep(SVN(name='svn-llvm',
365 mode='update', baseURL='http://llvm.org/svn/llvm-project/llvm/',
366 defaultBranch='trunk',
367 workdir='llvm'))
Daniel Dunbar44abe742009-07-19 01:59:03 +0000368 f.addStep(SVN(name='svn-clang',
Daniel Dunbar7e959c82009-09-28 04:01:19 +0000369 mode='update', baseURL='http://llvm.org/svn/llvm-project/cfe/',
Daniel Dunbar44abe742009-07-19 01:59:03 +0000370 defaultBranch='trunk',
371 workdir='llvm/tools/clang'))
David Blaikie845ae0d2012-08-10 00:51:38 +0000372 f.addStep(SVN(name='svn-clang-tools-extra',
373 mode='update', baseURL='http://llvm.org/svn/llvm-project/clang-tools-extra/',
374 defaultBranch='trunk',
375 workdir='llvm/tools/clang/tools/extra'))
Daniel Dunbar44abe742009-07-19 01:59:03 +0000376
377 # Full & fast clean.
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +0000378 if clean:
Daniel Dunbar44abe742009-07-19 01:59:03 +0000379 f.addStep(ShellCommand(name='clean-1',
380 command=['del','/s/q','build'],
Daniel Dunbar7e959c82009-09-28 04:01:19 +0000381 warnOnFailure=True,
Daniel Dunbar44abe742009-07-19 01:59:03 +0000382 description='cleaning',
383 descriptionDone='clean',
384 workdir='llvm'))
385 f.addStep(ShellCommand(name='clean-2',
386 command=['rmdir','/s/q','build'],
Daniel Dunbar7e959c82009-09-28 04:01:19 +0000387 warnOnFailure=True,
Daniel Dunbar44abe742009-07-19 01:59:03 +0000388 description='cleaning',
389 descriptionDone='clean',
390 workdir='llvm'))
391
392 # Create the project files.
Daniel Dunbar7e959c82009-09-28 04:01:19 +0000393
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +0000394 # Use batch files instead of ShellCommand directly, Windows quoting is
395 # borked. FIXME: See buildbot ticket #595 and buildbot ticket #377.
396 f.addStep(BatchFileDownload(name='cmakegen',
Daniel Dunbar06b20f12010-04-08 18:29:38 +0000397 command=[cmake,
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +0000398 "-DLLVM_TARGETS_TO_BUILD:=X86",
Daniel Dunbar1ddedce2010-09-24 19:57:34 +0000399 "-DLLVM_INCLUDE_EXAMPLES:=OFF",
400 "-DLLVM_INCLUDE_TESTS:=OFF",
401 "-DLLVM_TARGETS_TO_BUILD:=X86",
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +0000402 "-G",
403 "Visual Studio 9 2008",
404 ".."],
405 workdir="llvm\\build"))
Daniel Dunbar44abe742009-07-19 01:59:03 +0000406 f.addStep(ShellCommand(name='cmake',
407 command=['cmakegen.bat'],
Daniel Dunbar7e959c82009-09-28 04:01:19 +0000408 haltOnFailure=True,
Daniel Dunbar44abe742009-07-19 01:59:03 +0000409 description='cmake gen',
410 workdir='llvm\\build'))
411
412 # Build it.
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +0000413 f.addStep(BatchFileDownload(name='vcbuild',
414 command=[vcDrive + r""":\Program Files\Microsoft Visual Studio 9.0\VC\VCPackages\vcbuild.exe""",
415 "/M%d" % jobs,
416 "LLVM.sln",
417 "Debug|Win32"],
418 workdir="llvm\\build"))
Daniel Dunbar44abe742009-07-19 01:59:03 +0000419 f.addStep(WarningCountingShellCommand(name='vcbuild',
420 command=['vcbuild.bat'],
Daniel Dunbar7e959c82009-09-28 04:01:19 +0000421 haltOnFailure=True,
Daniel Dunbar44abe742009-07-19 01:59:03 +0000422 description='vcbuild',
423 workdir='llvm\\build',
424 warningPattern=" warning C.*:"))
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +0000425
426 # Build clang-test project.
427 f.addStep(BatchFileDownload(name='vcbuild_test',
428 command=[vcDrive + r""":\Program Files\Microsoft Visual Studio 9.0\VC\VCPackages\vcbuild.exe""",
429 "clang-test.vcproj",
430 "Debug|Win32"],
431 workdir="llvm\\build\\tools\\clang\\test"))
432 f.addStep(ClangTestCommand(name='test-clang',
433 command=["vcbuild_test.bat"],
434 workdir="llvm\\build\\tools\\clang\\test"))
435
Daniel Dunbar44abe742009-07-19 01:59:03 +0000436 return f
Daniel Dunbar22d594a2010-07-31 05:29:16 +0000437
Galina Kistanova2a97a3b2012-06-06 20:50:33 +0000438# Builds on Windows using CMake, MinGW(32|64), and no Microsoft tools.
Galina Kistanova5e97edf2012-06-19 20:10:21 +0000439def getClangMinGWBuildFactory(update=True, clean=True, jobs=6, cmake=r"cmake"):
Galina Kistanova2a97a3b2012-06-06 20:50:33 +0000440 f = buildbot.process.factory.BuildFactory()
441
442 if update:
443 f.addStep(SVN(name='svn-llvm',
444 mode='update', baseURL='http://llvm.org/svn/llvm-project/llvm/',
445 defaultBranch='trunk',
446 workdir='llvm'))
Galina Kistanova2a97a3b2012-06-06 20:50:33 +0000447 f.addStep(SVN(name='svn-clang',
448 mode='update', baseURL='http://llvm.org/svn/llvm-project/cfe/',
449 defaultBranch='trunk',
450 workdir='llvm/tools/clang'))
David Blaikie845ae0d2012-08-10 00:51:38 +0000451 f.addStep(SVN(name='svn-clang-tools-extra',
452 mode='update', baseURL='http://llvm.org/svn/llvm-project/clang-tools-extra/',
453 defaultBranch='trunk',
454 workdir='llvm/tools/clang/tools/extra'))
Galina Kistanova2a97a3b2012-06-06 20:50:33 +0000455
456 # Full & fast clean.
457 if clean:
458 # note: This command is redundant as the next command removes everything
459 f.addStep(ShellCommand(name='clean-1',
460 command=['del','/s/q','build'],
461 warnOnFailure=True,
462 description='cleaning',
463 descriptionDone='clean',
464 workdir='llvm'))
465 f.addStep(ShellCommand(name='clean-2',
466 command=['rmdir','/s/q','build'],
467 warnOnFailure=True,
468 description='cleaning',
469 descriptionDone='clean',
470 workdir='llvm'))
471
472 # Create the Makefiles.
473
474 # Use batch files instead of ShellCommand directly, Windows quoting is
475 # borked. FIXME: See buildbot ticket #595 and buildbot ticket #377.
476 f.addStep(BatchFileDownload(name='cmakegen',
477 command=[cmake,
478 "-DLLVM_TARGETS_TO_BUILD:=X86",
479 "-DLLVM_INCLUDE_EXAMPLES:=OFF",
480 "-DLLVM_INCLUDE_TESTS:=OFF",
481 "-DLLVM_TARGETS_TO_BUILD:=X86",
482 "-G",
Galina Kistanova5e97edf2012-06-19 20:10:21 +0000483 "Ninja",
Galina Kistanova2a97a3b2012-06-06 20:50:33 +0000484 ".."],
485 workdir="llvm\\build"))
486 f.addStep(ShellCommand(name='cmake',
487 command=['cmakegen.bat'],
488 haltOnFailure=True,
489 description='cmake gen',
490 workdir='llvm\\build'))
491
492 # Build it.
493 f.addStep(BatchFileDownload(name='makeall',
Galina Kistanova5e97edf2012-06-19 20:10:21 +0000494 command=["ninja", "-j", "%d" % jobs],
Galina Kistanova2a97a3b2012-06-06 20:50:33 +0000495 haltOnFailure=True,
496 workdir='llvm\\build'))
497
498 f.addStep(WarningCountingShellCommand(name='makeall',
499 command=['makeall.bat'],
500 haltOnFailure=True,
501 description='makeall',
502 workdir='llvm\\build'))
503
Galina Kistanova5e97edf2012-06-19 20:10:21 +0000504 # Build global check project (make check) (sources not checked out...).
505 if 0:
506 f.addStep(BatchFileDownload(name='makecheck',
507 command=["ninja", "check"],
508 workdir='llvm\\build'))
509 f.addStep(WarningCountingShellCommand(name='check',
510 command=['makecheck.bat'],
511 description='make check',
512 workdir='llvm\\build'))
Galina Kistanova049d76c2012-06-09 00:56:05 +0000513
514 # Build clang-test project (make clang-test).
Galina Kistanova2a97a3b2012-06-06 20:50:33 +0000515 f.addStep(BatchFileDownload(name='maketest',
Galina Kistanova5e97edf2012-06-19 20:10:21 +0000516 command=["ninja", "clang-test"],
Galina Kistanova049d76c2012-06-09 00:56:05 +0000517 workdir="llvm\\build"))
518 f.addStep(ClangTestCommand(name='clang-test',
Galina Kistanova2a97a3b2012-06-06 20:50:33 +0000519 command=["maketest.bat"],
Galina Kistanova049d76c2012-06-09 00:56:05 +0000520 workdir="llvm\\build"))
Galina Kistanova2a97a3b2012-06-06 20:50:33 +0000521
522 return f
523
Daniel Dunbar7363d032011-02-27 03:22:35 +0000524def addClangGCCTests(f, ignores={}, install_prefix="%(builddir)s/llvm.install",
525 languages = ('gcc', 'g++', 'objc', 'obj-c++')):
Daniel Dunbar22d594a2010-07-31 05:29:16 +0000526 make_vars = [WithProperties(
Daniel Dunbar2b67e8f2011-02-11 21:03:41 +0000527 'CC_UNDER_TEST=%s/bin/clang' % install_prefix),
Daniel Dunbar22d594a2010-07-31 05:29:16 +0000528 WithProperties(
Daniel Dunbar2b67e8f2011-02-11 21:03:41 +0000529 'CXX_UNDER_TEST=%s/bin/clang++' % install_prefix)]
Daniel Dunbar22d594a2010-07-31 05:29:16 +0000530 f.addStep(SVN(name='svn-clang-tests', mode='update',
531 baseURL='http://llvm.org/svn/llvm-project/clang-tests/',
532 defaultBranch='trunk', workdir='clang-tests'))
533 gcc_dg_ignores = ignores.get('gcc-4_2-testsuite', {})
Daniel Dunbar2b67e8f2011-02-11 21:03:41 +0000534 for lang in languages:
Daniel Dunbar22d594a2010-07-31 05:29:16 +0000535 f.addStep(DejaGNUCommand.DejaGNUCommand(
536 name='test-gcc-4_2-testsuite-%s' % lang,
537 command=["make", "-k", "check-%s" % lang] + make_vars,
538 description="gcc-4_2-testsuite (%s)" % lang,
539 workdir='clang-tests/gcc-4_2-testsuite',
David Dean2bd0c3a2011-10-18 16:36:28 +0000540 logfiles={ 'dg.sum' : 'obj/%s/%s.sum' % (lang, lang),
541 '%s.log' % lang : 'obj/%s/%s.log' % (lang, lang)},
Daniel Dunbar22d594a2010-07-31 05:29:16 +0000542 ignore=gcc_dg_ignores.get(lang, [])))
Daniel Dunbar2b67e8f2011-02-11 21:03:41 +0000543
Daniel Dunbar7363d032011-02-27 03:22:35 +0000544def addClangGDBTests(f, ignores={}, install_prefix="%(builddir)s/llvm.install"):
545 make_vars = [WithProperties(
546 'CC_UNDER_TEST=%s/bin/clang' % install_prefix),
547 WithProperties(
548 'CXX_UNDER_TEST=%s/bin/clang++' % install_prefix)]
549 f.addStep(SVN(name='svn-clang-tests', mode='update',
550 baseURL='http://llvm.org/svn/llvm-project/clang-tests/',
551 defaultBranch='trunk', workdir='clang-tests'))
Daniel Dunbar7363d032011-02-27 03:22:35 +0000552 f.addStep(DejaGNUCommand.DejaGNUCommand(
553 name='test-gdb-1472-testsuite',
554 command=["make", "-k", "check"] + make_vars,
555 description="gdb-1472-testsuite",
556 workdir='clang-tests/gdb-1472-testsuite',
David Blaikie7ec695f2012-10-09 22:17:09 +0000557 logfiles={ 'dg.sum' : 'obj/filtered.gdb.sum',
David Blaikie624f4392012-11-05 22:34:35 +0000558 'gdb.log' : 'obj/gdb.log' }))
Daniel Dunbar7363d032011-02-27 03:22:35 +0000559
560# FIXME: Deprecated.
561addClangTests = addClangGCCTests
562
Daniel Dunbar2b67e8f2011-02-11 21:03:41 +0000563def getClangTestsIgnoresFromPath(path, key):
564 def readList(path):
565 if not os.path.exists(path):
566 return []
567
568 f = open(path)
569 lines = [ln.strip() for ln in f]
570 f.close()
571 return lines
572
573 ignores = {}
574
575 gcc_dg_ignores = {}
576 for lang in ('gcc', 'g++', 'objc', 'obj-c++'):
577 lang_path = os.path.join(path, 'gcc-4_2-testsuite', 'expected_results',
578 key, lang)
579 gcc_dg_ignores[lang] = (
580 readList(os.path.join(lang_path, 'FAIL.txt')) +
581 readList(os.path.join(lang_path, 'UNRESOLVED.txt')) +
582 readList(os.path.join(lang_path, 'XPASS.txt')))
583 ignores['gcc-4_2-testsuite' ] = gcc_dg_ignores
584
Daniel Dunbar7363d032011-02-27 03:22:35 +0000585 ignores_path = os.path.join(path, 'gdb-1472-testsuite', 'expected_results',
586 key)
587 gdb_dg_ignores = (
588 readList(os.path.join(ignores_path, 'FAIL.txt')) +
589 readList(os.path.join(ignores_path, 'UNRESOLVED.txt')) +
590 readList(os.path.join(ignores_path, 'XPASS.txt')))
591 ignores['gdb-1472-testsuite' ] = gdb_dg_ignores
592
Daniel Dunbar2b67e8f2011-02-11 21:03:41 +0000593 return ignores