blob: 51f264f05ec2488ad397a8ceee28861faa81c4bb [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 Dunbar8a89a6f2009-11-25 04:27:32 +000014from Util import getConfigArgs
15
16def getClangBuildFactory(triple=None, clean=True, test=True, run_cxx_tests=False,
17 valgrind=False, useTwoStage=False,
18 make='make', jobs="%(jobs)s",
19 stage1_config='Debug', stage2_config='Release',
20 extra_configure_args=[]):
21 # Don't use in-dir builds with a two stage build process.
22 inDir = not useTwoStage
23 if inDir:
24 llvm_srcdir = "llvm"
25 llvm_1_objdir = "llvm"
26 llvm_1_installdir = None
27 else:
28 llvm_srcdir = "llvm.src"
29 llvm_1_objdir = "llvm.obj"
30 llvm_1_installdir = "llvm.install.1"
31 llvm_2_objdir = "llvm.obj.2"
32
Daniel Dunbar235aa412009-07-18 07:16:15 +000033 f = buildbot.process.factory.BuildFactory()
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +000034
35 # Determine the build directory.
36 f.addStep(buildbot.steps.shell.SetProperty(name="get_builddir",
37 command=["pwd"],
38 property="builddir",
39 description="set build dir",
40 workdir="."))
41
42 # Checkout sources.
Daniel Dunbar235aa412009-07-18 07:16:15 +000043 f.addStep(SVN(name='svn-llvm',
44 mode='update', baseURL='http://llvm.org/svn/llvm-project/llvm/',
45 defaultBranch='trunk',
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +000046 workdir=llvm_srcdir))
Daniel Dunbar235aa412009-07-18 07:16:15 +000047 f.addStep(SVN(name='svn-clang',
Daniel Dunbar7e959c82009-09-28 04:01:19 +000048 mode='update', baseURL='http://llvm.org/svn/llvm-project/cfe/',
Daniel Dunbar235aa412009-07-18 07:16:15 +000049 defaultBranch='trunk',
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +000050 workdir='%s/tools/clang' % llvm_srcdir))
Daniel Dunbarfa0e0222009-11-09 06:08:28 +000051
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +000052 # Clean up llvm (stage 1); unless in-dir.
53 if clean and llvm_srcdir != llvm_1_objdir:
54 f.addStep(ShellCommand(name="rm-llvm.obj.stage1",
55 command=["rm", "-rf", llvm_1_objdir],
56 haltOnFailure=True,
57 description=["rm build dir", "llvm"],
58 workdir="."))
59
Daniel Dunbarfa0e0222009-11-09 06:08:28 +000060 # Force without llvm-gcc so we don't run afoul of Frontend test failures.
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +000061 base_configure_args = [WithProperties("%%(builddir)s/%s/configure" % llvm_srcdir),
62 WithProperties("--prefix=%%(builddir)s/%s" % llvm_1_installdir),
63 '--disable-bindings']
64 base_configure_args += extra_configure_args
Daniel Dunbarfa0e0222009-11-09 06:08:28 +000065 if triple:
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +000066 base_configure_args += ['--build=%s' % triple,
67 '--host=%s' % triple,
68 '--target=%s' % triple]
69 args = base_configure_args + ["--without-llvmgcc", "--without-llvmgxx"]
70 args += getConfigArgs(stage1_config)
71 f.addStep(Configure(command=args,
72 workdir=llvm_1_objdir,
73 description=['configuring',stage1_config],
74 descriptionDone=['configure',stage1_config]))
75
76 # Make clean if using in-dir builds.
77 if clean and llvm_srcdir == llvm_1_objdir:
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +000078 f.addStep(WarningCountingShellCommand(name="clean-llvm",
Daniel Dunbard20468a2009-11-24 18:27:23 +000079 command=[make, "clean"],
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +000080 haltOnFailure=True,
81 description="cleaning llvm",
82 descriptionDone="clean llvm",
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +000083 workdir=llvm_1_objdir))
84
Daniel Dunbar7e959c82009-09-28 04:01:19 +000085 f.addStep(WarningCountingShellCommand(name="compile",
Daniel Dunbard20468a2009-11-24 18:27:23 +000086 command=['nice', '-n', '10',
87 make, WithProperties("-j%s" % jobs)],
Daniel Dunbar7e959c82009-09-28 04:01:19 +000088 haltOnFailure=True,
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +000089 description=["compiling", stage1_config],
90 descriptionDone=["compile", stage1_config],
91 workdir=llvm_1_objdir))
Daniel Dunbarfa0e0222009-11-09 06:08:28 +000092 clangTestArgs = '-v'
93 if valgrind:
94 clangTestArgs += ' --vg '
95 clangTestArgs += ' --vg-arg --leak-check=no'
96 clangTestArgs += ' --vg-arg --suppressions=%(builddir)s/llvm/tools/clang/utils/valgrind/x86_64-pc-linux-gnu_gcc-4.3.3.supp'
97 extraTestDirs = ''
98 if run_cxx_tests:
99 extraTestDirs += '%(builddir)s/llvm/tools/clang/utils/C++Tests'
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +0000100 if test:
101 f.addStep(ClangTestCommand(name='test-llvm',
Daniel Dunbard20468a2009-11-24 18:27:23 +0000102 command=[make, "check-lit", "VERBOSE=1"],
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +0000103 description=["testing", "llvm"],
104 descriptionDone=["test", "llvm"],
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000105 workdir=llvm_1_objdir))
Daniel Dunbar44abe742009-07-19 01:59:03 +0000106 f.addStep(ClangTestCommand(name='test-clang',
Daniel Dunbard20468a2009-11-24 18:27:23 +0000107 command=[make, 'test', WithProperties('TESTARGS=%s' % clangTestArgs),
Daniel Dunbarfa0e0222009-11-09 06:08:28 +0000108 WithProperties('EXTRA_TESTDIRS=%s' % extraTestDirs)],
Daniel Dunbar8a89a6f2009-11-25 04:27:32 +0000109 workdir='%s/tools/clang' % llvm_1_objdir))
110
111 # Install llvm and clang.
112 if llvm_1_installdir:
113 f.addStep(WarningCountingShellCommand(name="install.llvm.1",
114 command=['nice', '-n', '10',
115 make, WithProperties("-j%s" % jobs),
116 'install'],
117 haltOnFailure=True,
118 description=["install", "llvm & clang"],
119 workdir=llvm_1_objdir))
120
121 if not useTwoStage:
122 return f
123
124 # Clean up llvm (stage 2).
125 if clean:
126 f.addStep(ShellCommand(name="rm-llvm.obj.stage2",
127 command=["rm", "-rf", llvm_2_objdir],
128 haltOnFailure=True,
129 description=["rm build dir", "llvm", "(stage 2)"],
130 workdir="."))
131
132 # Configure llvm (stage 2).
133 args = base_configure_args + ["--without-llvmgcc", "--without-llvmgxx"]
134 args += getConfigArgs(stage2_config)
135 f.addStep(Configure(name="configure.llvm.stage2",
136 command=args,
137 env={'CC' : WithProperties("%%(builddir)s/%s/bin/clang" % llvm_1_installdir),
138 'CXX' : WithProperties("%%(builddir)s/%s/bin/clang++" % llvm_1_installdir),},
139 haltOnFailure=True,
140 workdir=llvm_2_objdir,
141 description=["configure", "llvm", "(stage 2)",
142 stage2_config]))
143
144 # Build llvm (stage 2).
145 f.addStep(WarningCountingShellCommand(name="compile.llvm.stage2",
146 command=['nice', '-n', '10',
147 make, WithProperties("-j%s" % jobs)],
148 haltOnFailure=True,
149 description=["compiling", "(stage 2)",
150 stage2_config],
151 descriptionDone=["compile", "(stage 2)",
152 stage2_config],
153 workdir=llvm_2_objdir))
154
155 if test:
156 f.addStep(ClangTestCommand(name='test-llvm',
157 command=[make, "check-lit", "VERBOSE=1"],
158 description=["testing", "llvm"],
159 descriptionDone=["test", "llvm"],
160 workdir=llvm_2_objdir))
161 f.addStep(ClangTestCommand(name='test-clang',
162 command=[make, 'test', WithProperties('TESTARGS=%s' % clangTestArgs),
163 WithProperties('EXTRA_TESTDIRS=%s' % extraTestDirs)],
164 workdir='%s/tools/clang' % llvm_2_objdir))
165
Daniel Dunbar235aa412009-07-18 07:16:15 +0000166 return f
Daniel Dunbar44abe742009-07-19 01:59:03 +0000167
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +0000168def getClangMSVCBuildFactory(update=True, clean=True, vcDrive='c', jobs=1):
Daniel Dunbar44abe742009-07-19 01:59:03 +0000169 f = buildbot.process.factory.BuildFactory()
170
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +0000171 if update:
Daniel Dunbar44abe742009-07-19 01:59:03 +0000172 f.addStep(SVN(name='svn-llvm',
173 mode='update', baseURL='http://llvm.org/svn/llvm-project/llvm/',
174 defaultBranch='trunk',
175 workdir='llvm'))
176
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +0000177 if update:
Daniel Dunbar44abe742009-07-19 01:59:03 +0000178 f.addStep(SVN(name='svn-clang',
Daniel Dunbar7e959c82009-09-28 04:01:19 +0000179 mode='update', baseURL='http://llvm.org/svn/llvm-project/cfe/',
Daniel Dunbar44abe742009-07-19 01:59:03 +0000180 defaultBranch='trunk',
181 workdir='llvm/tools/clang'))
182
183 # Full & fast clean.
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +0000184 if clean:
Daniel Dunbar44abe742009-07-19 01:59:03 +0000185 f.addStep(ShellCommand(name='clean-1',
186 command=['del','/s/q','build'],
Daniel Dunbar7e959c82009-09-28 04:01:19 +0000187 warnOnFailure=True,
Daniel Dunbar44abe742009-07-19 01:59:03 +0000188 description='cleaning',
189 descriptionDone='clean',
190 workdir='llvm'))
191 f.addStep(ShellCommand(name='clean-2',
192 command=['rmdir','/s/q','build'],
Daniel Dunbar7e959c82009-09-28 04:01:19 +0000193 warnOnFailure=True,
Daniel Dunbar44abe742009-07-19 01:59:03 +0000194 description='cleaning',
195 descriptionDone='clean',
196 workdir='llvm'))
197
198 # Create the project files.
Daniel Dunbar7e959c82009-09-28 04:01:19 +0000199
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +0000200 # Use batch files instead of ShellCommand directly, Windows quoting is
201 # borked. FIXME: See buildbot ticket #595 and buildbot ticket #377.
202 f.addStep(BatchFileDownload(name='cmakegen',
203 command=[r"c:\Program Files\CMake 2.6\bin\cmake",
204 "-DLLVM_TARGETS_TO_BUILD:=X86",
205 "-G",
206 "Visual Studio 9 2008",
207 ".."],
208 workdir="llvm\\build"))
Daniel Dunbar44abe742009-07-19 01:59:03 +0000209 f.addStep(ShellCommand(name='cmake',
210 command=['cmakegen.bat'],
Daniel Dunbar7e959c82009-09-28 04:01:19 +0000211 haltOnFailure=True,
Daniel Dunbar44abe742009-07-19 01:59:03 +0000212 description='cmake gen',
213 workdir='llvm\\build'))
214
215 # Build it.
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +0000216 f.addStep(BatchFileDownload(name='vcbuild',
217 command=[vcDrive + r""":\Program Files\Microsoft Visual Studio 9.0\VC\VCPackages\vcbuild.exe""",
218 "/M%d" % jobs,
219 "LLVM.sln",
220 "Debug|Win32"],
221 workdir="llvm\\build"))
Daniel Dunbar44abe742009-07-19 01:59:03 +0000222 f.addStep(WarningCountingShellCommand(name='vcbuild',
223 command=['vcbuild.bat'],
Daniel Dunbar7e959c82009-09-28 04:01:19 +0000224 haltOnFailure=True,
Daniel Dunbar44abe742009-07-19 01:59:03 +0000225 description='vcbuild',
226 workdir='llvm\\build',
227 warningPattern=" warning C.*:"))
Daniel Dunbarb51f6ab2009-11-09 03:09:23 +0000228
229 # Build clang-test project.
230 f.addStep(BatchFileDownload(name='vcbuild_test',
231 command=[vcDrive + r""":\Program Files\Microsoft Visual Studio 9.0\VC\VCPackages\vcbuild.exe""",
232 "clang-test.vcproj",
233 "Debug|Win32"],
234 workdir="llvm\\build\\tools\\clang\\test"))
235 f.addStep(ClangTestCommand(name='test-clang',
236 command=["vcbuild_test.bat"],
237 workdir="llvm\\build\\tools\\clang\\test"))
238
Daniel Dunbar44abe742009-07-19 01:59:03 +0000239 return f