blob: eac275a54e6ed398b517e7b77155fa74c2ee391f [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 Dunbar235aa412009-07-18 07:16:15 +000013
Daniel Dunbarfa0e0222009-11-09 06:08:28 +000014def getClangBuildFactory(triple=None, clean=True, test=True,
15 expensive_checks=False, run_cxx_tests=False, valgrind=False):
Daniel Dunbar235aa412009-07-18 07:16:15 +000016 f = buildbot.process.factory.BuildFactory()
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +000017
18 # Determine the build directory.
19 f.addStep(buildbot.steps.shell.SetProperty(name="get_builddir",
20 command=["pwd"],
21 property="builddir",
22 description="set build dir",
23 workdir="."))
24
25 # Checkout sources.
Daniel Dunbar235aa412009-07-18 07:16:15 +000026 f.addStep(SVN(name='svn-llvm',
27 mode='update', baseURL='http://llvm.org/svn/llvm-project/llvm/',
28 defaultBranch='trunk',
29 workdir='llvm'))
30 f.addStep(SVN(name='svn-clang',
Daniel Dunbar7e959c82009-09-28 04:01:19 +000031 mode='update', baseURL='http://llvm.org/svn/llvm-project/cfe/',
Daniel Dunbar235aa412009-07-18 07:16:15 +000032 defaultBranch='trunk',
33 workdir='llvm/tools/clang'))
Daniel Dunbarfa0e0222009-11-09 06:08:28 +000034
35 # Force without llvm-gcc so we don't run afoul of Frontend test failures.
36 configure_args = ["./configure", "--without-llvmgcc", "--without-llvmgxx"]
37 config_name = 'Debug'
38 if expensive_checks:
39 configure_args.append('--enable-expensive-checks')
40 config_name += '+Checks'
41 if triple:
42 configure_args += ['--build=%s' % triple,
43 '--host=%s' % triple,
44 '--target=%s' % triple]
45 f.addStep(Configure(command=configure_args,
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +000046 workdir='llvm',
Daniel Dunbarfa0e0222009-11-09 06:08:28 +000047 description=['configuring',config_name],
48 descriptionDone=['configure',config_name]))
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +000049 if clean:
50 f.addStep(WarningCountingShellCommand(name="clean-llvm",
51 command="make clean",
52 haltOnFailure=True,
53 description="cleaning llvm",
54 descriptionDone="clean llvm",
55 workdir='llvm'))
Daniel Dunbar7e959c82009-09-28 04:01:19 +000056 f.addStep(WarningCountingShellCommand(name="compile",
57 command=WithProperties("nice -n 10 make -j%(jobs)d"),
58 haltOnFailure=True,
59 description="compiling llvm & clang",
Daniel Dunbar235aa412009-07-18 07:16:15 +000060 descriptionDone="compile llvm & clang",
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +000061 workdir='llvm'))
Daniel Dunbarfa0e0222009-11-09 06:08:28 +000062 clangTestArgs = '-v'
63 if valgrind:
64 clangTestArgs += ' --vg '
65 clangTestArgs += ' --vg-arg --leak-check=no'
66 clangTestArgs += ' --vg-arg --suppressions=%(builddir)s/llvm/tools/clang/utils/valgrind/x86_64-pc-linux-gnu_gcc-4.3.3.supp'
67 extraTestDirs = ''
68 if run_cxx_tests:
69 extraTestDirs += '%(builddir)s/llvm/tools/clang/utils/C++Tests'
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +000070 if test:
71 f.addStep(ClangTestCommand(name='test-llvm',
72 command=["make", "check-lit", "VERBOSE=1"],
73 description=["testing", "llvm"],
74 descriptionDone=["test", "llvm"],
75 workdir='llvm'))
Daniel Dunbar44abe742009-07-19 01:59:03 +000076 f.addStep(ClangTestCommand(name='test-clang',
Daniel Dunbarfa0e0222009-11-09 06:08:28 +000077 command=['make', 'test', WithProperties('TESTARGS=%s' % clangTestArgs),
78 WithProperties('EXTRA_TESTDIRS=%s' % extraTestDirs)],
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +000079 workdir='llvm/tools/clang'))
Daniel Dunbar235aa412009-07-18 07:16:15 +000080 return f
Daniel Dunbar44abe742009-07-19 01:59:03 +000081
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +000082def getClangMSVCBuildFactory(update=True, clean=True, vcDrive='c', jobs=1):
Daniel Dunbar44abe742009-07-19 01:59:03 +000083 f = buildbot.process.factory.BuildFactory()
84
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +000085 if update:
Daniel Dunbar44abe742009-07-19 01:59:03 +000086 f.addStep(SVN(name='svn-llvm',
87 mode='update', baseURL='http://llvm.org/svn/llvm-project/llvm/',
88 defaultBranch='trunk',
89 workdir='llvm'))
90
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +000091 if update:
Daniel Dunbar44abe742009-07-19 01:59:03 +000092 f.addStep(SVN(name='svn-clang',
Daniel Dunbar7e959c82009-09-28 04:01:19 +000093 mode='update', baseURL='http://llvm.org/svn/llvm-project/cfe/',
Daniel Dunbar44abe742009-07-19 01:59:03 +000094 defaultBranch='trunk',
95 workdir='llvm/tools/clang'))
96
97 # Full & fast clean.
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +000098 if clean:
Daniel Dunbar44abe742009-07-19 01:59:03 +000099 f.addStep(ShellCommand(name='clean-1',
100 command=['del','/s/q','build'],
Daniel Dunbar7e959c82009-09-28 04:01:19 +0000101 warnOnFailure=True,
Daniel Dunbar44abe742009-07-19 01:59:03 +0000102 description='cleaning',
103 descriptionDone='clean',
104 workdir='llvm'))
105 f.addStep(ShellCommand(name='clean-2',
106 command=['rmdir','/s/q','build'],
Daniel Dunbar7e959c82009-09-28 04:01:19 +0000107 warnOnFailure=True,
Daniel Dunbar44abe742009-07-19 01:59:03 +0000108 description='cleaning',
109 descriptionDone='clean',
110 workdir='llvm'))
111
112 # Create the project files.
Daniel Dunbar7e959c82009-09-28 04:01:19 +0000113
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +0000114 # Use batch files instead of ShellCommand directly, Windows quoting is
115 # borked. FIXME: See buildbot ticket #595 and buildbot ticket #377.
116 f.addStep(BatchFileDownload(name='cmakegen',
117 command=[r"c:\Program Files\CMake 2.6\bin\cmake",
118 "-DLLVM_TARGETS_TO_BUILD:=X86",
119 "-G",
120 "Visual Studio 9 2008",
121 ".."],
122 workdir="llvm\\build"))
Daniel Dunbar44abe742009-07-19 01:59:03 +0000123 f.addStep(ShellCommand(name='cmake',
124 command=['cmakegen.bat'],
Daniel Dunbar7e959c82009-09-28 04:01:19 +0000125 haltOnFailure=True,
Daniel Dunbar44abe742009-07-19 01:59:03 +0000126 description='cmake gen',
127 workdir='llvm\\build'))
128
129 # Build it.
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +0000130 f.addStep(BatchFileDownload(name='vcbuild',
131 command=[vcDrive + r""":\Program Files\Microsoft Visual Studio 9.0\VC\VCPackages\vcbuild.exe""",
132 "/M%d" % jobs,
133 "LLVM.sln",
134 "Debug|Win32"],
135 workdir="llvm\\build"))
Daniel Dunbar44abe742009-07-19 01:59:03 +0000136 f.addStep(WarningCountingShellCommand(name='vcbuild',
137 command=['vcbuild.bat'],
Daniel Dunbar7e959c82009-09-28 04:01:19 +0000138 haltOnFailure=True,
Daniel Dunbar44abe742009-07-19 01:59:03 +0000139 description='vcbuild',
140 workdir='llvm\\build',
141 warningPattern=" warning C.*:"))
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +0000142
143 # Build clang-test project.
144 f.addStep(BatchFileDownload(name='vcbuild_test',
145 command=[vcDrive + r""":\Program Files\Microsoft Visual Studio 9.0\VC\VCPackages\vcbuild.exe""",
146 "clang-test.vcproj",
147 "Debug|Win32"],
148 workdir="llvm\\build\\tools\\clang\\test"))
149 f.addStep(ClangTestCommand(name='test-clang',
150 command=["vcbuild_test.bat"],
151 workdir="llvm\\build\\tools\\clang\\test"))
152
Daniel Dunbar44abe742009-07-19 01:59:03 +0000153 return f