blob: 4a6229a36ae73e321f153fc368fb90e59634883f [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,
37 checkout_compiler_rt=False):
38 # Prepare environmental variables. Set here all env we want everywhere.
39 merged_env = {
40 'TERM' : 'dumb' # Make sure Clang doesn't use color escape sequences.
41 }
42 if env is not None:
43 # Overwrite pre-set items with the given ones, so user can set anything.
44 merged_env.update(env)
45
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +000046 # Don't use in-dir builds with a two stage build process.
Daniel Dunbar3efb7822010-02-26 19:20:00 +000047 inDir = not outOfDir and not useTwoStage
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +000048 if inDir:
49 llvm_srcdir = "llvm"
50 llvm_1_objdir = "llvm"
Daniel Dunbar9870de32010-03-28 22:25:31 +000051 if always_install:
52 llvm_1_installdir = "llvm.install"
53 else:
54 llvm_1_installdir = None
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +000055 else:
56 llvm_srcdir = "llvm.src"
57 llvm_1_objdir = "llvm.obj"
58 llvm_1_installdir = "llvm.install.1"
59 llvm_2_objdir = "llvm.obj.2"
Daniel Dunbar22d594a2010-07-31 05:29:16 +000060 llvm_2_installdir = "llvm.install"
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +000061
Daniel Dunbar235aa412009-07-18 07:16:15 +000062 f = buildbot.process.factory.BuildFactory()
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +000063
64 # Determine the build directory.
65 f.addStep(buildbot.steps.shell.SetProperty(name="get_builddir",
66 command=["pwd"],
67 property="builddir",
68 description="set build dir",
Galina Kistanovaf4d79352011-10-20 20:46:52 +000069 workdir=".",
70 env=merged_env))
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +000071
Daniel Dunbar06b20f12010-04-08 18:29:38 +000072 # Blow away completely, if requested.
73 if completely_clean:
74 f.addStep(ShellCommand(name="rm-llvm.src",
75 command=["rm", "-rf", llvm_srcdir],
76 haltOnFailure=True,
77 description=["rm src dir", "llvm"],
Galina Kistanovaf4d79352011-10-20 20:46:52 +000078 workdir=".",
79 env=merged_env))
Daniel Dunbar06b20f12010-04-08 18:29:38 +000080
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +000081 # Checkout sources.
Daniel Dunbar235aa412009-07-18 07:16:15 +000082 f.addStep(SVN(name='svn-llvm',
Daniel Dunbarf4e23eb2010-09-20 21:13:02 +000083 mode='update',
84 baseURL='http://llvm.org/svn/llvm-project/llvm/',
Daniel Dunbar235aa412009-07-18 07:16:15 +000085 defaultBranch='trunk',
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +000086 workdir=llvm_srcdir))
Daniel Dunbar235aa412009-07-18 07:16:15 +000087 f.addStep(SVN(name='svn-clang',
Daniel Dunbarf4e23eb2010-09-20 21:13:02 +000088 mode='update',
89 baseURL='http://llvm.org/svn/llvm-project/cfe/',
Daniel Dunbar235aa412009-07-18 07:16:15 +000090 defaultBranch='trunk',
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +000091 workdir='%s/tools/clang' % llvm_srcdir))
Daniel Dunbarf4e23eb2010-09-20 21:13:02 +000092 if checkout_compiler_rt:
93 f.addStep(SVN(name='svn-compiler-rt',
94 mode='update',
95 baseURL='http://llvm.org/svn/llvm-project/compiler-rt/',
96 defaultBranch='trunk',
Daniel Dunbareb68fd22010-09-21 05:00:06 +000097 workdir='%s/projects/compiler-rt' % llvm_srcdir))
Daniel Dunbarfa0e0222009-11-09 06:08:28 +000098
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +000099 # Clean up llvm (stage 1); unless in-dir.
100 if clean and llvm_srcdir != llvm_1_objdir:
101 f.addStep(ShellCommand(name="rm-llvm.obj.stage1",
102 command=["rm", "-rf", llvm_1_objdir],
103 haltOnFailure=True,
104 description=["rm build dir", "llvm"],
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000105 workdir=".",
106 env=merged_env))
Andrew Trick70fa9d22011-08-25 23:38:51 +0000107
Daniel Dunbarfa0e0222009-11-09 06:08:28 +0000108 # Force without llvm-gcc so we don't run afoul of Frontend test failures.
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000109 base_configure_args = [WithProperties("%%(builddir)s/%s/configure" % llvm_srcdir),
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000110 '--disable-bindings']
111 base_configure_args += extra_configure_args
Daniel Dunbarfa0e0222009-11-09 06:08:28 +0000112 if triple:
Andrew Trick70fa9d22011-08-25 23:38:51 +0000113 base_configure_args += ['--build=%s' % triple,
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000114 '--host=%s' % triple,
115 '--target=%s' % triple]
116 args = base_configure_args + ["--without-llvmgcc", "--without-llvmgxx"]
Daniel Dunbar3efb7822010-02-26 19:20:00 +0000117 args.append(WithProperties("--prefix=%%(builddir)s/%s" % llvm_1_installdir))
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000118 args += getConfigArgs(stage1_config)
119 f.addStep(Configure(command=args,
120 workdir=llvm_1_objdir,
121 description=['configuring',stage1_config],
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000122 descriptionDone=['configure',stage1_config],
123 env=merged_env))
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000124
125 # Make clean if using in-dir builds.
126 if clean and llvm_srcdir == llvm_1_objdir:
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +0000127 f.addStep(WarningCountingShellCommand(name="clean-llvm",
Daniel Dunbard20468a2009-11-24 18:27:23 +0000128 command=[make, "clean"],
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +0000129 haltOnFailure=True,
130 description="cleaning llvm",
131 descriptionDone="clean llvm",
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000132 workdir=llvm_1_objdir,
133 env=merged_env))
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000134
Daniel Dunbar7e959c82009-09-28 04:01:19 +0000135 f.addStep(WarningCountingShellCommand(name="compile",
Daniel Dunbard20468a2009-11-24 18:27:23 +0000136 command=['nice', '-n', '10',
137 make, WithProperties("-j%s" % jobs)],
Daniel Dunbar7e959c82009-09-28 04:01:19 +0000138 haltOnFailure=True,
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000139 description=["compiling", stage1_config],
140 descriptionDone=["compile", stage1_config],
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000141 workdir=llvm_1_objdir,
142 env=merged_env))
Daniel Dunbar256fed42009-11-25 21:11:08 +0000143
144 if examples:
145 f.addStep(WarningCountingShellCommand(name="compile.examples",
146 command=['nice', '-n', '10',
147 make, WithProperties("-j%s" % jobs),
148 "BUILD_EXAMPLES=1"],
149 haltOnFailure=True,
150 description=["compilinge", stage1_config, "examples"],
151 descriptionDone=["compile", stage1_config, "examples"],
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000152 workdir=llvm_1_objdir,
153 env=merged_env))
Daniel Dunbar256fed42009-11-25 21:11:08 +0000154
Daniel Dunbar93f828a2010-06-23 17:42:14 +0000155 clangTestArgs = llvmTestArgs = '-v -j %s' % jobs
Daniel Dunbarfa0e0222009-11-09 06:08:28 +0000156 if valgrind:
Daniel Dunbar89184b92010-04-18 19:09:32 +0000157 clangTestArgs += ' --vg'
Daniel Dunbara1bebce2010-03-21 01:24:00 +0000158 if valgrindLeakCheck:
159 clangTestArgs += ' --vg-leak'
Nick Lewycky8d26e472011-08-27 21:18:56 +0000160 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 +0000161 extraTestDirs = ''
162 if run_cxx_tests:
163 extraTestDirs += '%(builddir)s/llvm/tools/clang/utils/C++Tests'
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +0000164 if test:
165 f.addStep(ClangTestCommand(name='test-llvm',
Daniel Dunbar93f828a2010-06-23 17:42:14 +0000166 command=[make, "check-lit", "VERBOSE=1",
167 WithProperties("LIT_ARGS=%s" % llvmTestArgs)],
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +0000168 description=["testing", "llvm"],
169 descriptionDone=["test", "llvm"],
Daniel Dunbar469e8ca2010-05-19 21:26:48 +0000170 workdir=llvm_1_objdir,
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000171 usePTY=use_pty_in_tests,
172 env=merged_env))
Daniel Dunbar44abe742009-07-19 01:59:03 +0000173 f.addStep(ClangTestCommand(name='test-clang',
Daniel Dunbard20468a2009-11-24 18:27:23 +0000174 command=[make, 'test', WithProperties('TESTARGS=%s' % clangTestArgs),
Daniel Dunbarfa0e0222009-11-09 06:08:28 +0000175 WithProperties('EXTRA_TESTDIRS=%s' % extraTestDirs)],
Daniel Dunbar469e8ca2010-05-19 21:26:48 +0000176 workdir='%s/tools/clang' % llvm_1_objdir,
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000177 usePTY=use_pty_in_tests,
178 env=merged_env))
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000179
180 # Install llvm and clang.
181 if llvm_1_installdir:
Daniel Dunbar9870de32010-03-28 22:25:31 +0000182 f.addStep(ShellCommand(name="rm-install.clang.stage1",
183 command=["rm", "-rf", llvm_1_installdir],
184 haltOnFailure=True,
185 description=["rm install dir", "clang"],
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000186 workdir=".",
187 env=merged_env))
Daniel Dunbar9870de32010-03-28 22:25:31 +0000188 f.addStep(WarningCountingShellCommand(name="install.clang.stage1",
189 command = ['nice', '-n', '10',
190 make, 'install-clang'],
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000191 haltOnFailure=True,
Daniel Dunbar9870de32010-03-28 22:25:31 +0000192 description=["install", "clang",
193 stage1_config],
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000194 workdir=llvm_1_objdir,
195 env=merged_env))
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000196
197 if not useTwoStage:
Daniel Dunbardedf6572010-11-13 00:23:34 +0000198 if package_dst:
199 name = WithProperties(
200 "%(builddir)s/" + llvm_1_objdir +
201 "/clang-r%(got_revision)s-b%(buildnumber)s.tgz")
202 f.addStep(ShellCommand(name='pkg.tar',
203 description="tar root",
204 command=["tar", "zcvf", name, "./"],
205 workdir=llvm_1_installdir,
206 warnOnFailure=True,
207 flunkOnFailure=False,
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000208 haltOnFailure=False,
209 env=merged_env))
Daniel Dunbardedf6572010-11-13 00:23:34 +0000210 f.addStep(ShellCommand(name='pkg.upload',
Andrew Trick70fa9d22011-08-25 23:38:51 +0000211 description="upload root",
Daniel Dunbardedf6572010-11-13 00:23:34 +0000212 command=["scp", name,
213 WithProperties(
214 package_dst + "/%(buildername)s")],
215 workdir=".",
216 warnOnFailure=True,
217 flunkOnFailure=False,
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000218 haltOnFailure=False,
219 env=merged_env))
Daniel Dunbardedf6572010-11-13 00:23:34 +0000220
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000221 return f
222
223 # Clean up llvm (stage 2).
224 if clean:
225 f.addStep(ShellCommand(name="rm-llvm.obj.stage2",
226 command=["rm", "-rf", llvm_2_objdir],
227 haltOnFailure=True,
228 description=["rm build dir", "llvm", "(stage 2)"],
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000229 workdir=".",
230 env=merged_env))
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000231
232 # Configure llvm (stage 2).
233 args = base_configure_args + ["--without-llvmgcc", "--without-llvmgxx"]
Daniel Dunbar3efb7822010-02-26 19:20:00 +0000234 args.append(WithProperties("--prefix=%(builddir)s/" + llvm_2_installdir))
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000235 args += getConfigArgs(stage2_config)
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000236 local_env = dict(merged_env).update({
237 'CC' : WithProperties("%%(builddir)s/%s/bin/clang" % llvm_1_installdir),
238 'CXX' : WithProperties("%%(builddir)s/%s/bin/clang++" % llvm_1_installdir)})
239
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000240 f.addStep(Configure(name="configure.llvm.stage2",
241 command=args,
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000242 haltOnFailure=True,
243 workdir=llvm_2_objdir,
244 description=["configure", "llvm", "(stage 2)",
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000245 stage2_config],
246 env=local_env))
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000247
248 # Build llvm (stage 2).
249 f.addStep(WarningCountingShellCommand(name="compile.llvm.stage2",
250 command=['nice', '-n', '10',
251 make, WithProperties("-j%s" % jobs)],
252 haltOnFailure=True,
253 description=["compiling", "(stage 2)",
254 stage2_config],
255 descriptionDone=["compile", "(stage 2)",
256 stage2_config],
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000257 workdir=llvm_2_objdir,
258 env=merged_env))
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000259
260 if test:
261 f.addStep(ClangTestCommand(name='test-llvm',
Daniel Dunbar93f828a2010-06-23 17:42:14 +0000262 command=[make, "check-lit", "VERBOSE=1",
263 WithProperties("LIT_ARGS=%s" % llvmTestArgs)],
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000264 description=["testing", "llvm"],
265 descriptionDone=["test", "llvm"],
Daniel Dunbar469e8ca2010-05-19 21:26:48 +0000266 workdir=llvm_2_objdir,
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000267 usePTY=use_pty_in_tests,
268 env=merged_env))
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000269 f.addStep(ClangTestCommand(name='test-clang',
270 command=[make, 'test', WithProperties('TESTARGS=%s' % clangTestArgs),
271 WithProperties('EXTRA_TESTDIRS=%s' % extraTestDirs)],
Daniel Dunbar469e8ca2010-05-19 21:26:48 +0000272 workdir='%s/tools/clang' % llvm_2_objdir,
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000273 usePTY=use_pty_in_tests,
274 env=merged_env))
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000275
Daniel Dunbar3efb7822010-02-26 19:20:00 +0000276 # Install clang (stage 2).
Daniel Dunbar9870de32010-03-28 22:25:31 +0000277 f.addStep(ShellCommand(name="rm-install.clang.stage2",
278 command=["rm", "-rf", llvm_2_installdir],
279 haltOnFailure=True,
280 description=["rm install dir", "clang"],
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000281 workdir=".",
282 env=merged_env))
Daniel Dunbar3efb7822010-02-26 19:20:00 +0000283 f.addStep(WarningCountingShellCommand(name="install.clang.stage2",
284 command = ['nice', '-n', '10',
285 make, 'install-clang'],
286 haltOnFailure=True,
287 description=["install", "clang",
288 "(stage 2)"],
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000289 workdir=llvm_2_objdir,
290 env=merged_env))
Daniel Dunbar3efb7822010-02-26 19:20:00 +0000291
292 if package_dst:
293 name = WithProperties(
294 "%(builddir)s/" + llvm_2_objdir +
295 "/clang-r%(got_revision)s-b%(buildnumber)s.tgz")
296 f.addStep(ShellCommand(name='pkg.tar',
297 description="tar root",
298 command=["tar", "zcvf", name, "./"],
299 workdir=llvm_2_installdir,
300 warnOnFailure=True,
301 flunkOnFailure=False,
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000302 haltOnFailure=False,
303 env=merged_env))
Daniel Dunbar3efb7822010-02-26 19:20:00 +0000304 f.addStep(ShellCommand(name='pkg.upload',
Andrew Trick70fa9d22011-08-25 23:38:51 +0000305 description="upload root",
Daniel Dunbar3efb7822010-02-26 19:20:00 +0000306 command=["scp", name,
307 WithProperties(
308 package_dst + "/%(buildername)s")],
309 workdir=".",
310 warnOnFailure=True,
311 flunkOnFailure=False,
Galina Kistanovaf4d79352011-10-20 20:46:52 +0000312 haltOnFailure=False,
313 env=merged_env))
Daniel Dunbar3efb7822010-02-26 19:20:00 +0000314
Daniel Dunbar235aa412009-07-18 07:16:15 +0000315 return f
Daniel Dunbar44abe742009-07-19 01:59:03 +0000316
Daniel Dunbarc51a59e2010-09-23 14:57:45 +0000317def getClangMSVCBuildFactory(update=True, clean=True, vcDrive='c', jobs=1, cmake=r"cmake"):
Daniel Dunbar44abe742009-07-19 01:59:03 +0000318 f = buildbot.process.factory.BuildFactory()
319
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +0000320 if update:
Daniel Dunbar44abe742009-07-19 01:59:03 +0000321 f.addStep(SVN(name='svn-llvm',
322 mode='update', baseURL='http://llvm.org/svn/llvm-project/llvm/',
323 defaultBranch='trunk',
324 workdir='llvm'))
325
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +0000326 if update:
Daniel Dunbar44abe742009-07-19 01:59:03 +0000327 f.addStep(SVN(name='svn-clang',
Daniel Dunbar7e959c82009-09-28 04:01:19 +0000328 mode='update', baseURL='http://llvm.org/svn/llvm-project/cfe/',
Daniel Dunbar44abe742009-07-19 01:59:03 +0000329 defaultBranch='trunk',
330 workdir='llvm/tools/clang'))
331
332 # Full & fast clean.
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +0000333 if clean:
Daniel Dunbar44abe742009-07-19 01:59:03 +0000334 f.addStep(ShellCommand(name='clean-1',
335 command=['del','/s/q','build'],
Daniel Dunbar7e959c82009-09-28 04:01:19 +0000336 warnOnFailure=True,
Daniel Dunbar44abe742009-07-19 01:59:03 +0000337 description='cleaning',
338 descriptionDone='clean',
339 workdir='llvm'))
340 f.addStep(ShellCommand(name='clean-2',
341 command=['rmdir','/s/q','build'],
Daniel Dunbar7e959c82009-09-28 04:01:19 +0000342 warnOnFailure=True,
Daniel Dunbar44abe742009-07-19 01:59:03 +0000343 description='cleaning',
344 descriptionDone='clean',
345 workdir='llvm'))
346
347 # Create the project files.
Daniel Dunbar7e959c82009-09-28 04:01:19 +0000348
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +0000349 # Use batch files instead of ShellCommand directly, Windows quoting is
350 # borked. FIXME: See buildbot ticket #595 and buildbot ticket #377.
351 f.addStep(BatchFileDownload(name='cmakegen',
Daniel Dunbar06b20f12010-04-08 18:29:38 +0000352 command=[cmake,
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +0000353 "-DLLVM_TARGETS_TO_BUILD:=X86",
Daniel Dunbar1ddedce2010-09-24 19:57:34 +0000354 "-DLLVM_INCLUDE_EXAMPLES:=OFF",
355 "-DLLVM_INCLUDE_TESTS:=OFF",
356 "-DLLVM_TARGETS_TO_BUILD:=X86",
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +0000357 "-G",
358 "Visual Studio 9 2008",
359 ".."],
360 workdir="llvm\\build"))
Daniel Dunbar44abe742009-07-19 01:59:03 +0000361 f.addStep(ShellCommand(name='cmake',
362 command=['cmakegen.bat'],
Daniel Dunbar7e959c82009-09-28 04:01:19 +0000363 haltOnFailure=True,
Daniel Dunbar44abe742009-07-19 01:59:03 +0000364 description='cmake gen',
365 workdir='llvm\\build'))
366
367 # Build it.
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +0000368 f.addStep(BatchFileDownload(name='vcbuild',
369 command=[vcDrive + r""":\Program Files\Microsoft Visual Studio 9.0\VC\VCPackages\vcbuild.exe""",
370 "/M%d" % jobs,
371 "LLVM.sln",
372 "Debug|Win32"],
373 workdir="llvm\\build"))
Daniel Dunbar44abe742009-07-19 01:59:03 +0000374 f.addStep(WarningCountingShellCommand(name='vcbuild',
375 command=['vcbuild.bat'],
Daniel Dunbar7e959c82009-09-28 04:01:19 +0000376 haltOnFailure=True,
Daniel Dunbar44abe742009-07-19 01:59:03 +0000377 description='vcbuild',
378 workdir='llvm\\build',
379 warningPattern=" warning C.*:"))
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +0000380
381 # Build clang-test project.
382 f.addStep(BatchFileDownload(name='vcbuild_test',
383 command=[vcDrive + r""":\Program Files\Microsoft Visual Studio 9.0\VC\VCPackages\vcbuild.exe""",
384 "clang-test.vcproj",
385 "Debug|Win32"],
386 workdir="llvm\\build\\tools\\clang\\test"))
387 f.addStep(ClangTestCommand(name='test-clang',
388 command=["vcbuild_test.bat"],
389 workdir="llvm\\build\\tools\\clang\\test"))
390
Daniel Dunbar44abe742009-07-19 01:59:03 +0000391 return f
Daniel Dunbar22d594a2010-07-31 05:29:16 +0000392
Daniel Dunbar7363d032011-02-27 03:22:35 +0000393def addClangGCCTests(f, ignores={}, install_prefix="%(builddir)s/llvm.install",
394 languages = ('gcc', 'g++', 'objc', 'obj-c++')):
Daniel Dunbar22d594a2010-07-31 05:29:16 +0000395 make_vars = [WithProperties(
Daniel Dunbar2b67e8f2011-02-11 21:03:41 +0000396 'CC_UNDER_TEST=%s/bin/clang' % install_prefix),
Daniel Dunbar22d594a2010-07-31 05:29:16 +0000397 WithProperties(
Daniel Dunbar2b67e8f2011-02-11 21:03:41 +0000398 'CXX_UNDER_TEST=%s/bin/clang++' % install_prefix)]
Daniel Dunbar22d594a2010-07-31 05:29:16 +0000399 f.addStep(SVN(name='svn-clang-tests', mode='update',
400 baseURL='http://llvm.org/svn/llvm-project/clang-tests/',
401 defaultBranch='trunk', workdir='clang-tests'))
402 gcc_dg_ignores = ignores.get('gcc-4_2-testsuite', {})
Daniel Dunbar2b67e8f2011-02-11 21:03:41 +0000403 for lang in languages:
Daniel Dunbar22d594a2010-07-31 05:29:16 +0000404 f.addStep(DejaGNUCommand.DejaGNUCommand(
405 name='test-gcc-4_2-testsuite-%s' % lang,
406 command=["make", "-k", "check-%s" % lang] + make_vars,
407 description="gcc-4_2-testsuite (%s)" % lang,
408 workdir='clang-tests/gcc-4_2-testsuite',
David Dean2bd0c3a2011-10-18 16:36:28 +0000409 logfiles={ 'dg.sum' : 'obj/%s/%s.sum' % (lang, lang),
410 '%s.log' % lang : 'obj/%s/%s.log' % (lang, lang)},
Daniel Dunbar22d594a2010-07-31 05:29:16 +0000411 ignore=gcc_dg_ignores.get(lang, [])))
Daniel Dunbar2b67e8f2011-02-11 21:03:41 +0000412
Daniel Dunbar7363d032011-02-27 03:22:35 +0000413def addClangGDBTests(f, ignores={}, install_prefix="%(builddir)s/llvm.install"):
414 make_vars = [WithProperties(
415 'CC_UNDER_TEST=%s/bin/clang' % install_prefix),
416 WithProperties(
417 'CXX_UNDER_TEST=%s/bin/clang++' % install_prefix)]
418 f.addStep(SVN(name='svn-clang-tests', mode='update',
419 baseURL='http://llvm.org/svn/llvm-project/clang-tests/',
420 defaultBranch='trunk', workdir='clang-tests'))
421 gdb_dg_ignores = ignores.get('gdb-1472-testsuite', {})
422 f.addStep(DejaGNUCommand.DejaGNUCommand(
423 name='test-gdb-1472-testsuite',
424 command=["make", "-k", "check"] + make_vars,
425 description="gdb-1472-testsuite",
426 workdir='clang-tests/gdb-1472-testsuite',
427 logfiles={ 'dg.sum' : 'obj/gdb.sum' },
428 ignore=gdb_dg_ignores))
429
430# FIXME: Deprecated.
431addClangTests = addClangGCCTests
432
Daniel Dunbar2b67e8f2011-02-11 21:03:41 +0000433def getClangTestsIgnoresFromPath(path, key):
434 def readList(path):
435 if not os.path.exists(path):
436 return []
437
438 f = open(path)
439 lines = [ln.strip() for ln in f]
440 f.close()
441 return lines
442
443 ignores = {}
444
445 gcc_dg_ignores = {}
446 for lang in ('gcc', 'g++', 'objc', 'obj-c++'):
447 lang_path = os.path.join(path, 'gcc-4_2-testsuite', 'expected_results',
448 key, lang)
449 gcc_dg_ignores[lang] = (
450 readList(os.path.join(lang_path, 'FAIL.txt')) +
451 readList(os.path.join(lang_path, 'UNRESOLVED.txt')) +
452 readList(os.path.join(lang_path, 'XPASS.txt')))
453 ignores['gcc-4_2-testsuite' ] = gcc_dg_ignores
454
Daniel Dunbar7363d032011-02-27 03:22:35 +0000455 ignores_path = os.path.join(path, 'gdb-1472-testsuite', 'expected_results',
456 key)
457 gdb_dg_ignores = (
458 readList(os.path.join(ignores_path, 'FAIL.txt')) +
459 readList(os.path.join(ignores_path, 'UNRESOLVED.txt')) +
460 readList(os.path.join(ignores_path, 'XPASS.txt')))
461 ignores['gdb-1472-testsuite' ] = gdb_dg_ignores
462
Daniel Dunbar2b67e8f2011-02-11 21:03:41 +0000463 return ignores