blob: 3171e2958331b613fe082e5c0ad6f60d1981932b [file] [log] [blame]
Galina Kistanova0035b5d2016-10-07 20:47:51 +00001from buildbot.steps.slave import RemoveDirectory
Galina Kistanova8358cdd2017-03-10 01:06:35 +00002from buildbot.process.properties import WithProperties, Property
3from buildbot.steps.shell import SetProperty
Galina Kistanova0035b5d2016-10-07 20:47:51 +00004
5from zorg.buildbot.commands.CmakeCommand import CmakeCommand
6from zorg.buildbot.commands.NinjaCommand import NinjaCommand
Galina Kistanova0035b5d2016-10-07 20:47:51 +00007
8from zorg.buildbot.conditions.FileConditions import FileDoesNotExist
9from zorg.buildbot.process.factory import LLVMBuildFactory
10
Galina Kistanova8358cdd2017-03-10 01:06:35 +000011import zorg.buildbot.builders.Util as builders_util
12
Galina Kistanova9124b832016-12-22 00:46:41 +000013def getLLVMBuildFactoryAndSVNSteps(
Galina Kistanova0035b5d2016-10-07 20:47:51 +000014 depends_on_projects = None,
15 llvm_srcdir = None,
16 obj_dir = None,
17 install_dir = None,
Galina Kistanova9124b832016-12-22 00:46:41 +000018 cleanBuildRequested = None,
Galina Kistanova0035b5d2016-10-07 20:47:51 +000019 env = None,
20 **kwargs):
21
Galina Kistanova53f05f32017-05-03 20:22:21 +000022 def cleanBuildRequestedByProperty(step):
23 return step.build.getProperty("clean")
24
Galina Kistanova0035b5d2016-10-07 20:47:51 +000025 # Set defaults
26 if not depends_on_projects:
27 depends_on_projects=['llvm', 'clang']
28
Galina Kistanova9124b832016-12-22 00:46:41 +000029 if cleanBuildRequested is None:
Galina Kistanova928ff1f2017-10-03 03:18:06 +000030 # We want a clean checkout only if requested by the property.
31 cleanBuildRequested = cleanBuildRequestedByProperty
Galina Kistanova0035b5d2016-10-07 20:47:51 +000032
33 f = LLVMBuildFactory(
34 depends_on_projects=depends_on_projects,
Galina Kistanova9124b832016-12-22 00:46:41 +000035 llvm_srcdir=llvm_srcdir or "llvm",
36 obj_dir=obj_dir or "build",
Galina Kistanova0035b5d2016-10-07 20:47:51 +000037 install_dir=install_dir,
38 cleanBuildRequested=cleanBuildRequested,
Galina Kistanova9124b832016-12-22 00:46:41 +000039 **kwargs) # Pass through all the extra arguments.
Galina Kistanova0035b5d2016-10-07 20:47:51 +000040
Galina Kistanova53f05f32017-05-03 20:22:21 +000041 # Do a clean checkout if requested by a build property.
Galina Kistanova9124b832016-12-22 00:46:41 +000042 # TODO: Some Windows slaves do not handle RemoveDirectory command well.
43 # So, consider running "rmdir /S /Q <dir>" if the build runs on Windows.
Galina Kistanova0035b5d2016-10-07 20:47:51 +000044 f.addStep(RemoveDirectory(name='clean-src-dir',
45 dir=f.llvm_srcdir,
46 haltOnFailure=False,
47 flunkOnFailure=False,
Galina Kistanova53f05f32017-05-03 20:22:21 +000048 doStepIf=cleanBuildRequestedByProperty,
Galina Kistanova0035b5d2016-10-07 20:47:51 +000049 ))
50
51 # Get the source code.
52 f.addSVNSteps()
53
Galina Kistanova9124b832016-12-22 00:46:41 +000054 return f
Galina Kistanova0035b5d2016-10-07 20:47:51 +000055
Galina Kistanova9124b832016-12-22 00:46:41 +000056def addCmakeSteps(
57 f,
58 cleanBuildRequested,
59 obj_dir,
60 install_dir = None,
61 extra_configure_args = None,
62 env = None,
63 stage_name = None,
64 **kwargs):
Galina Kistanova0035b5d2016-10-07 20:47:51 +000065
66 # Make a local copy of the configure args, as we are going to modify that.
67 if extra_configure_args:
68 cmake_args = extra_configure_args[:]
69 else:
70 cmake_args = list()
71
Galina Kistanova9124b832016-12-22 00:46:41 +000072 # This is an incremental build, unless otherwise has been requested.
73 # Remove obj and install dirs for a clean build.
74 # TODO: Some Windows slaves do not handle RemoveDirectory command well.
75 # So, consider running "rmdir /S /Q <dir>" if the build runs on Windows.
76 f.addStep(RemoveDirectory(name='clean-%s-dir' % obj_dir,
77 dir=obj_dir,
78 haltOnFailure=False,
79 flunkOnFailure=False,
80 doStepIf=cleanBuildRequested,
81 ))
82
83 if install_dir:
84 install_dir_rel = LLVMBuildFactory.pathRelativeToBuild(
85 install_dir,
86 obj_dir)
87 CmakeCommand.applyRequiredOptions(cmake_args, [
88 ('-DCMAKE_INSTALL_PREFIX=', install_dir_rel),
89 ])
90
91 f.addStep(RemoveDirectory(name='clean-%s-dir' % install_dir,
92 dir=install_dir,
93 haltOnFailure=False,
94 flunkOnFailure=False,
95 doStepIf=cleanBuildRequested,
96 ))
97
98 # Reconcile the cmake options for this build.
99
Galina Kistanova0035b5d2016-10-07 20:47:51 +0000100 # Set proper defaults.
101 CmakeCommand.applyDefaultOptions(cmake_args, [
102 ('-DCMAKE_BUILD_TYPE=', 'Release'),
103 ('-DCLANG_BUILD_EXAMPLES=', 'OFF'),
104 ('-DLLVM_BUILD_TESTS=', 'ON'),
105 ('-DLLVM_ENABLE_ASSERTIONS=', 'ON'),
106 ('-DLLVM_OPTIMIZED_TABLEGEN=', 'ON'),
Galina Kistanova958820f2017-04-29 02:38:35 +0000107 ('-DLLVM_LIT_ARGS=', '"-v"'),
Galina Kistanova0035b5d2016-10-07 20:47:51 +0000108 ])
109
110 # Create configuration files with cmake, unless this has been already done
111 # for an incremental build.
Galina Kistanova9124b832016-12-22 00:46:41 +0000112 if stage_name:
113 step_name = "cmake-configure-%s" % stage_name
114 else:
Galina Kistanova40b9ed52017-03-10 07:56:38 +0000115 stage_name = ""
Galina Kistanova9124b832016-12-22 00:46:41 +0000116 step_name = "cmake-configure"
117
118 src_dir = LLVMBuildFactory.pathRelativeToBuild(f.llvm_srcdir, obj_dir)
119
120 f.addStep(CmakeCommand(name=step_name,
121 description=["Cmake", "configure", stage_name],
Galina Kistanova0035b5d2016-10-07 20:47:51 +0000122 options=cmake_args,
123 path=src_dir,
Galina Kistanova928ff1f2017-10-03 03:18:06 +0000124 haltOnFailure=kwargs.get('haltOnFailure', True),
Galina Kistanova0035b5d2016-10-07 20:47:51 +0000125 env=env,
126 workdir=obj_dir,
Galina Kistanova0035b5d2016-10-07 20:47:51 +0000127 **kwargs # Pass through all the extra arguments.
128 ))
129
Galina Kistanova9124b832016-12-22 00:46:41 +0000130def addNinjaSteps(
131 f,
Galina Kistanova0035b5d2016-10-07 20:47:51 +0000132 obj_dir = None,
Galina Kistanova106e6cd2018-02-23 20:23:24 +0000133 targets = None,
Galina Kistanova1eeb2f12017-06-17 01:18:12 +0000134 checks = None,
Galina Kistanova182583b2017-05-08 22:55:34 +0000135 install_dir = None,
Galina Kistanova9124b832016-12-22 00:46:41 +0000136 env = None,
137 stage_name = None,
138 **kwargs):
139
140 # Build the unified tree.
141 if stage_name:
142 step_name = "%s-" % stage_name
143 else:
Galina Kistanova40b9ed52017-03-10 07:56:38 +0000144 stage_name = ""
Galina Kistanova9124b832016-12-22 00:46:41 +0000145 step_name = ""
146
147 if obj_dir is None:
148 obj_dir = f.obj_dir
149
150 f.addStep(NinjaCommand(name="build-%sunified-tree" % step_name,
Galina Kistanova106e6cd2018-02-23 20:23:24 +0000151 targets=targets,
Galina Kistanova9124b832016-12-22 00:46:41 +0000152 description=["Build", stage_name, "unified", "tree"],
Galina Kistanova928ff1f2017-10-03 03:18:06 +0000153 haltOnFailure=kwargs.get('haltOnFailure', True),
Galina Kistanova9124b832016-12-22 00:46:41 +0000154 env=env,
155 workdir=obj_dir,
156 **kwargs # Pass through all the extra arguments.
157 ))
158
Galina Kistanova1eeb2f12017-06-17 01:18:12 +0000159 # Test just built components if requested.
160 if checks:
Galina Kistanova0545e242019-05-07 04:27:19 +0000161 f.addStep(NinjaCommand(name="test-%s%s" % (step_name,"-".join(checks)),
Galina Kistanova1eeb2f12017-06-17 01:18:12 +0000162 targets=checks,
163 description=["Test", "just", "built", "components"],
Galina Kistanova928ff1f2017-10-03 03:18:06 +0000164 haltOnFailure=kwargs.get('haltOnFailure', True),
Galina Kistanova1eeb2f12017-06-17 01:18:12 +0000165 env=env,
166 workdir=obj_dir,
167 **kwargs # Pass through all the extra arguments.
168 ))
Galina Kistanova9124b832016-12-22 00:46:41 +0000169
170 # Install just built components
Galina Kistanova182583b2017-05-08 22:55:34 +0000171 if install_dir:
172 f.addStep(NinjaCommand(name="install-%sall" % step_name,
173 targets=["install"],
Galina Kistanova182583b2017-05-08 22:55:34 +0000174 description=["Install", "just", "built", "components"],
Galina Kistanova928ff1f2017-10-03 03:18:06 +0000175 haltOnFailure=kwargs.get('haltOnFailure', True),
Galina Kistanova182583b2017-05-08 22:55:34 +0000176 env=env,
177 workdir=obj_dir,
178 **kwargs # Pass through all the extra arguments.
179 ))
Galina Kistanova9124b832016-12-22 00:46:41 +0000180
181def getCmakeBuildFactory(
182 depends_on_projects = None,
183 llvm_srcdir = None,
184 obj_dir = None,
185 install_dir = None,
Galina Kistanova0035b5d2016-10-07 20:47:51 +0000186 clean = False,
187 extra_configure_args = None,
188 env = None,
189 **kwargs):
190
Galina Kistanova9124b832016-12-22 00:46:41 +0000191 # Prepare environmental variables. Set here all env we want everywhere.
192 merged_env = {
193 'TERM' : 'dumb' # Be cautious and disable color output from all tools.
194 }
195 if env is not None:
196 # Overwrite pre-set items with the given ones, so user can set anything.
197 merged_env.update(env)
198
Galina Kistanova9124b832016-12-22 00:46:41 +0000199 f = getLLVMBuildFactoryAndSVNSteps(
200 depends_on_projects=depends_on_projects,
201 llvm_srcdir=llvm_srcdir,
202 obj_dir=obj_dir,
203 install_dir=install_dir,
Galina Kistanova9124b832016-12-22 00:46:41 +0000204 **kwargs) # Pass through all the extra arguments.
205
Galina Kistanova928ff1f2017-10-03 03:18:06 +0000206 cleanBuildRequested = lambda step: step.build.getProperty("clean", default=step.build.getProperty("clean_obj")) or clean
Galina Kistanova9124b832016-12-22 00:46:41 +0000207 addCmakeSteps(
208 f,
209 cleanBuildRequested=cleanBuildRequested,
210 obj_dir=f.obj_dir,
211 install_dir=f.install_dir,
212 extra_configure_args=extra_configure_args,
213 env=env,
214 **kwargs)
215
216 return f
217
Galina Kistanova8358cdd2017-03-10 01:06:35 +0000218
Galina Kistanova9124b832016-12-22 00:46:41 +0000219def getCmakeWithNinjaBuildFactory(
220 depends_on_projects = None,
221 llvm_srcdir = None,
222 obj_dir = None,
Galina Kistanova1eeb2f12017-06-17 01:18:12 +0000223 checks = None,
Galina Kistanova9124b832016-12-22 00:46:41 +0000224 install_dir = None,
225 clean = False,
226 extra_configure_args = None,
227 env = None,
228 **kwargs):
Galina Kistanova0035b5d2016-10-07 20:47:51 +0000229
230 # Make a local copy of the configure args, as we are going to modify that.
231 if extra_configure_args:
232 cmake_args = extra_configure_args[:]
233 else:
234 cmake_args = list()
235
Galina Kistanova1eeb2f12017-06-17 01:18:12 +0000236 if checks is None:
237 checks = ['check-all']
238
Galina Kistanova0035b5d2016-10-07 20:47:51 +0000239 # Some options are required for this build no matter what.
240 CmakeCommand.applyRequiredOptions(cmake_args, [
241 ('-G', 'Ninja'),
242 ])
243
244 f = getCmakeBuildFactory(
245 depends_on_projects=depends_on_projects,
246 llvm_srcdir=llvm_srcdir,
247 obj_dir=obj_dir,
Galina Kistanova9124b832016-12-22 00:46:41 +0000248 install_dir=install_dir,
249 clean=clean,
Galina Kistanova0035b5d2016-10-07 20:47:51 +0000250 extra_configure_args=cmake_args,
251 env=env,
Galina Kistanova9124b832016-12-22 00:46:41 +0000252 **kwargs) # Pass through all the extra arguments.
Galina Kistanova0035b5d2016-10-07 20:47:51 +0000253
Galina Kistanova9124b832016-12-22 00:46:41 +0000254 addNinjaSteps(
255 f,
256 obj_dir=obj_dir,
Galina Kistanova1eeb2f12017-06-17 01:18:12 +0000257 checks=checks,
Galina Kistanova182583b2017-05-08 22:55:34 +0000258 install_dir=f.install_dir,
Galina Kistanova9124b832016-12-22 00:46:41 +0000259 env=env,
260 **kwargs)
Galina Kistanova0035b5d2016-10-07 20:47:51 +0000261
262 return f
263
Galina Kistanova8358cdd2017-03-10 01:06:35 +0000264def getCmakeWithNinjaWithMSVCBuildFactory(
265 depends_on_projects = None,
266 llvm_srcdir = None,
267 obj_dir = None,
Galina Kistanova1eeb2f12017-06-17 01:18:12 +0000268 checks = None,
Galina Kistanova8358cdd2017-03-10 01:06:35 +0000269 install_dir = None,
270 clean = False,
271 extra_configure_args = None,
272 # VS tools environment variable if using MSVC. For example,
273 # %VS140COMNTOOLS% selects the 2015 toolchain.
274 vs=None,
275 target_arch=None,
276 env = None,
277 **kwargs):
278
279 assert not env, "Can't have custom builder env vars with MSVC build"
280
281 # Make a local copy of the configure args, as we are going to modify that.
282 if extra_configure_args:
283 cmake_args = extra_configure_args[:]
284 else:
285 cmake_args = list()
286
Galina Kistanova1eeb2f12017-06-17 01:18:12 +0000287 if checks is None:
288 checks = ['check-all']
289
Galina Kistanova8358cdd2017-03-10 01:06:35 +0000290 # Set up VS environment, if appropriate.
291 if not vs:
292 # We build by Visual Studio 2015, unless otherwise is requested.
293 vs=r"""%VS140COMNTOOLS%"""
294
Galina Kistanova8358cdd2017-03-10 01:06:35 +0000295 f = getLLVMBuildFactoryAndSVNSteps(
296 depends_on_projects=depends_on_projects,
297 llvm_srcdir=llvm_srcdir,
298 obj_dir=obj_dir,
299 install_dir=install_dir,
Galina Kistanova8358cdd2017-03-10 01:06:35 +0000300 **kwargs) # Pass through all the extra arguments.
301
302 f.addStep(SetProperty(
Stella Stamenovae9bbc272018-10-26 18:17:50 +0000303 command=builders_util.getVisualStudioEnvironment(vs, target_arch),
Galina Kistanova8358cdd2017-03-10 01:06:35 +0000304 extract_fn=builders_util.extractSlaveEnvironment))
305 env = Property('slave_env')
306
307 # Some options are required for this build no matter what.
308 CmakeCommand.applyRequiredOptions(cmake_args, [
309 ('-G', 'Ninja'),
310 ])
311
Galina Kistanova928ff1f2017-10-03 03:18:06 +0000312 cleanBuildRequested = lambda step: step.build.getProperty("clean", default=step.build.getProperty("clean_obj")) or clean
313
Galina Kistanova8358cdd2017-03-10 01:06:35 +0000314 addCmakeSteps(
315 f,
Galina Kistanova928ff1f2017-10-03 03:18:06 +0000316 cleanBuildRequested=cleanBuildRequested,
Galina Kistanova8358cdd2017-03-10 01:06:35 +0000317 obj_dir=f.obj_dir,
318 install_dir=f.install_dir,
319 extra_configure_args=cmake_args,
320 env=env,
321 **kwargs)
322
323 addNinjaSteps(
324 f,
325 obj_dir=obj_dir,
Galina Kistanova1eeb2f12017-06-17 01:18:12 +0000326 checks=checks,
Galina Kistanova182583b2017-05-08 22:55:34 +0000327 install_dir=f.install_dir,
Galina Kistanova8358cdd2017-03-10 01:06:35 +0000328 env=env,
329 **kwargs)
330
331 return f
332
Galina Kistanova9124b832016-12-22 00:46:41 +0000333def getCmakeWithNinjaMultistageBuildFactory(
334 depends_on_projects = None,
335 llvm_srcdir = None,
Galina Kistanova0035b5d2016-10-07 20:47:51 +0000336 obj_dir = None,
Galina Kistanova1eeb2f12017-06-17 01:18:12 +0000337 checks = None,
Galina Kistanova9124b832016-12-22 00:46:41 +0000338 install_dir = None,
Galina Kistanova0035b5d2016-10-07 20:47:51 +0000339 clean = False,
Galina Kistanova0035b5d2016-10-07 20:47:51 +0000340 extra_configure_args = None,
341 env = None,
Galina Kistanova9124b832016-12-22 00:46:41 +0000342 stages=2,
343 stage_names=None,
Galina Kistanova0035b5d2016-10-07 20:47:51 +0000344 **kwargs):
345
Galina Kistanova9124b832016-12-22 00:46:41 +0000346 # Prepare environmental variables. Set here all env we want everywhere.
347 merged_env = {
348 'TERM' : 'dumb' # Be cautious and disable color output from all tools.
349 }
350 if env is not None:
351 # Overwrite pre-set items with the given ones, so user can set anything.
352 merged_env.update(env)
Galina Kistanova0035b5d2016-10-07 20:47:51 +0000353
354 # Make a local copy of the configure args, as we are going to modify that.
355 if extra_configure_args:
356 cmake_args = extra_configure_args[:]
357 else:
358 cmake_args = list()
359
Galina Kistanova9124b832016-12-22 00:46:41 +0000360 assert stages > 1, "It should be at least 2 stages in a multistage build."
361 if stage_names is None:
362 stage_names = list()
363 for i in range(1, stages + 1):
364 stage_names.append("stage%s" % i)
365 else:
366 assert len(stage_names) == stages, "Please specify names for none or all of the requested stages."
367
368 if obj_dir is None:
369 obj_dir = "build"
370 if install_dir is None:
371 install_dir = "install"
372
Galina Kistanova1eeb2f12017-06-17 01:18:12 +0000373 if checks is None:
374 checks = ['check-all']
375
Galina Kistanova9124b832016-12-22 00:46:41 +0000376 stage_objdirs = list()
377 stage_installdirs = list()
378 for s in stage_names:
379 stage_objdirs.append("%s/%s" % (obj_dir, s))
380 stage_installdirs.append("%s/%s" % (install_dir, s))
381
Galina Kistanova9124b832016-12-22 00:46:41 +0000382 f = getLLVMBuildFactoryAndSVNSteps(
383 depends_on_projects=depends_on_projects,
384 llvm_srcdir=llvm_srcdir,
385 obj_dir=obj_dir,
386 install_dir=install_dir,
Galina Kistanova9124b832016-12-22 00:46:41 +0000387 env=env,
388 stage_objdirs=stage_objdirs,
389 stage_installdirs=stage_installdirs,
390 stage_names=stage_names,
391 **kwargs) # Pass through all the extra arguments.
392
Galina Kistanova0035b5d2016-10-07 20:47:51 +0000393 # Set proper defaults.
394 CmakeCommand.applyDefaultOptions(cmake_args, [
Galina Kistanova9124b832016-12-22 00:46:41 +0000395 ('-DCMAKE_BUILD_TYPE=', 'Release'),
Galina Kistanova9124b832016-12-22 00:46:41 +0000396 ('-DLLVM_BUILD_TESTS=', 'ON'),
397 ('-DLLVM_ENABLE_ASSERTIONS=', 'OFF'),
398 ('-DLLVM_OPTIMIZED_TABLEGEN=', 'ON'),
Galina Kistanova0035b5d2016-10-07 20:47:51 +0000399 ])
400
Galina Kistanova19bb1832018-02-12 18:03:32 +0000401 if 'clang' in depends_on_projects:
402 CmakeCommand.applyDefaultOptions(cmake_args, [
403 ('-DCLANG_BUILD_EXAMPLES=', 'OFF'),
404 ])
405
Galina Kistanova0035b5d2016-10-07 20:47:51 +0000406 # Some options are required for this build no matter what.
407 CmakeCommand.applyRequiredOptions(cmake_args, [
Galina Kistanova9124b832016-12-22 00:46:41 +0000408 ('-G', 'Ninja'),
Galina Kistanova0035b5d2016-10-07 20:47:51 +0000409 ])
410
Galina Kistanova9124b832016-12-22 00:46:41 +0000411 # The stage 1 is special, though. We use the system compiler and
Galina Kistanova9975c382017-01-03 04:10:02 +0000412 # do incremental build, unless a clean one has been requested.
Galina Kistanova9124b832016-12-22 00:46:41 +0000413 cmake_args_stage1 = cmake_args[:]
414 CmakeCommand.applyDefaultOptions(cmake_args_stage1, [
415 # Do not expect warning free build by the system toolchain.
416 ('-DLLVM_ENABLE_WERROR=', 'OFF'),
417 ])
Galina Kistanova0035b5d2016-10-07 20:47:51 +0000418
Galina Kistanova928ff1f2017-10-03 03:18:06 +0000419 cleanBuildRequested = lambda step: step.build.getProperty("clean", default=step.build.getProperty("clean_obj")) or clean
420
Galina Kistanova9124b832016-12-22 00:46:41 +0000421 addCmakeSteps(
422 f,
Galina Kistanova928ff1f2017-10-03 03:18:06 +0000423 cleanBuildRequested=cleanBuildRequested,
Galina Kistanova9124b832016-12-22 00:46:41 +0000424 obj_dir=stage_objdirs[0],
425 install_dir=stage_installdirs[0],
426 extra_configure_args=cmake_args_stage1,
427 env=env,
428 stage_name=stage_names[0],
429 **kwargs)
Galina Kistanova0035b5d2016-10-07 20:47:51 +0000430
Galina Kistanova9124b832016-12-22 00:46:41 +0000431 addNinjaSteps(
432 f,
433 obj_dir=stage_objdirs[0],
Galina Kistanova1eeb2f12017-06-17 01:18:12 +0000434 checks=checks,
Galina Kistanova182583b2017-05-08 22:55:34 +0000435 install_dir=stage_installdirs[0],
Galina Kistanova9124b832016-12-22 00:46:41 +0000436 env=env,
437 stage_name=stage_names[0],
438 **kwargs)
Galina Kistanova0035b5d2016-10-07 20:47:51 +0000439
Galina Kistanova9124b832016-12-22 00:46:41 +0000440 # Build the rest stage by stage, using just built compiler to compile
441 # the next stage.
442 CmakeCommand.applyDefaultOptions(cmake_args, [
Galina Kistanova9975c382017-01-03 04:10:02 +0000443 # We should be warnings free when use just built compiler.
Galina Kistanova9124b832016-12-22 00:46:41 +0000444 ('-DLLVM_ENABLE_WERROR=', 'ON'),
445 ])
446 # If we build LLD, we would link with LLD.
447 # Otherwise we link with a system linker.
448 if 'lld' in f.depends_on_projects:
449 CmakeCommand.applyDefaultOptions(cmake_args, [
450 ('-DLLVM_ENABLE_LLD=', 'ON'),
451 ])
452
453 for stage_idx in range(1, stages):
454
Galina Kistanova9975c382017-01-03 04:10:02 +0000455 # Directories to use in this stage.
Galina Kistanova9124b832016-12-22 00:46:41 +0000456 obj_dir = f.stage_objdirs[stage_idx]
457 src_dir = LLVMBuildFactory.pathRelativeToBuild(f.llvm_srcdir, obj_dir)
458 install_dir = LLVMBuildFactory.pathRelativeToBuild(f.stage_installdirs[stage_idx], obj_dir)
459 staged_install = f.stage_installdirs[stage_idx - 1]
460
Galina Kistanova9975c382017-01-03 04:10:02 +0000461 # Configure the compiler to use in this stage.
Galina Kistanova9124b832016-12-22 00:46:41 +0000462 cmake_args_stageN = cmake_args[:]
463 CmakeCommand.applyRequiredOptions(cmake_args_stageN, [
464 ('-DCMAKE_INSTALL_PREFIX=', install_dir),
465 ])
466 cmake_args_stageN.append(
467 WithProperties(
468 "-DCMAKE_CXX_COMPILER=%(workdir)s/" + staged_install + "/bin/clang++"
469 ))
470 cmake_args_stageN.append(
471 WithProperties(
472 "-DCMAKE_C_COMPILER=%(workdir)s/" + staged_install + "/bin/clang"
473 ))
474
475 addCmakeSteps(
476 f,
477 True, # We always do a clean build for the staged builds.
478 obj_dir=stage_objdirs[stage_idx],
479 install_dir=stage_installdirs[stage_idx],
480 extra_configure_args=cmake_args_stageN,
481 env=env,
482 stage_name=stage_names[stage_idx],
483 **kwargs)
484
485 addNinjaSteps(
486 f,
487 obj_dir=stage_objdirs[stage_idx],
Galina Kistanova1eeb2f12017-06-17 01:18:12 +0000488 checks=checks,
Galina Kistanova182583b2017-05-08 22:55:34 +0000489 install_dir=stage_installdirs[stage_idx],
Galina Kistanova9124b832016-12-22 00:46:41 +0000490 env=env,
491 stage_name=stage_names[stage_idx],
492 **kwargs)
Galina Kistanova0035b5d2016-10-07 20:47:51 +0000493
494 return f