blob: 585857c39b533cc3c327d42e83c84d3fda770332 [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 Kistanova1eeb2f12017-06-17 01:18:12 +0000133 checks = None,
Galina Kistanova182583b2017-05-08 22:55:34 +0000134 install_dir = None,
Galina Kistanova9124b832016-12-22 00:46:41 +0000135 env = None,
136 stage_name = None,
137 **kwargs):
138
139 # Build the unified tree.
140 if stage_name:
141 step_name = "%s-" % stage_name
142 else:
Galina Kistanova40b9ed52017-03-10 07:56:38 +0000143 stage_name = ""
Galina Kistanova9124b832016-12-22 00:46:41 +0000144 step_name = ""
145
146 if obj_dir is None:
147 obj_dir = f.obj_dir
148
149 f.addStep(NinjaCommand(name="build-%sunified-tree" % step_name,
Galina Kistanova9124b832016-12-22 00:46:41 +0000150 description=["Build", stage_name, "unified", "tree"],
Galina Kistanova928ff1f2017-10-03 03:18:06 +0000151 haltOnFailure=kwargs.get('haltOnFailure', True),
Galina Kistanova9124b832016-12-22 00:46:41 +0000152 env=env,
153 workdir=obj_dir,
154 **kwargs # Pass through all the extra arguments.
155 ))
156
Galina Kistanova1eeb2f12017-06-17 01:18:12 +0000157 # Test just built components if requested.
158 if checks:
159 f.addStep(NinjaCommand(name="test-%scheck-all" % step_name,
160 targets=checks,
161 description=["Test", "just", "built", "components"],
Galina Kistanova928ff1f2017-10-03 03:18:06 +0000162 haltOnFailure=kwargs.get('haltOnFailure', True),
Galina Kistanova1eeb2f12017-06-17 01:18:12 +0000163 env=env,
164 workdir=obj_dir,
165 **kwargs # Pass through all the extra arguments.
166 ))
Galina Kistanova9124b832016-12-22 00:46:41 +0000167
168 # Install just built components
Galina Kistanova182583b2017-05-08 22:55:34 +0000169 if install_dir:
170 f.addStep(NinjaCommand(name="install-%sall" % step_name,
171 targets=["install"],
Galina Kistanova182583b2017-05-08 22:55:34 +0000172 description=["Install", "just", "built", "components"],
Galina Kistanova928ff1f2017-10-03 03:18:06 +0000173 haltOnFailure=kwargs.get('haltOnFailure', True),
Galina Kistanova182583b2017-05-08 22:55:34 +0000174 env=env,
175 workdir=obj_dir,
176 **kwargs # Pass through all the extra arguments.
177 ))
Galina Kistanova9124b832016-12-22 00:46:41 +0000178
179def getCmakeBuildFactory(
180 depends_on_projects = None,
181 llvm_srcdir = None,
182 obj_dir = None,
183 install_dir = None,
Galina Kistanova0035b5d2016-10-07 20:47:51 +0000184 clean = False,
185 extra_configure_args = None,
186 env = None,
187 **kwargs):
188
Galina Kistanova9124b832016-12-22 00:46:41 +0000189 # Prepare environmental variables. Set here all env we want everywhere.
190 merged_env = {
191 'TERM' : 'dumb' # Be cautious and disable color output from all tools.
192 }
193 if env is not None:
194 # Overwrite pre-set items with the given ones, so user can set anything.
195 merged_env.update(env)
196
Galina Kistanova9124b832016-12-22 00:46:41 +0000197 f = getLLVMBuildFactoryAndSVNSteps(
198 depends_on_projects=depends_on_projects,
199 llvm_srcdir=llvm_srcdir,
200 obj_dir=obj_dir,
201 install_dir=install_dir,
Galina Kistanova9124b832016-12-22 00:46:41 +0000202 **kwargs) # Pass through all the extra arguments.
203
Galina Kistanova928ff1f2017-10-03 03:18:06 +0000204 cleanBuildRequested = lambda step: step.build.getProperty("clean", default=step.build.getProperty("clean_obj")) or clean
Galina Kistanova9124b832016-12-22 00:46:41 +0000205 addCmakeSteps(
206 f,
207 cleanBuildRequested=cleanBuildRequested,
208 obj_dir=f.obj_dir,
209 install_dir=f.install_dir,
210 extra_configure_args=extra_configure_args,
211 env=env,
212 **kwargs)
213
214 return f
215
Galina Kistanova8358cdd2017-03-10 01:06:35 +0000216
Galina Kistanova9124b832016-12-22 00:46:41 +0000217def getCmakeWithNinjaBuildFactory(
218 depends_on_projects = None,
219 llvm_srcdir = None,
220 obj_dir = None,
Galina Kistanova1eeb2f12017-06-17 01:18:12 +0000221 checks = None,
Galina Kistanova9124b832016-12-22 00:46:41 +0000222 install_dir = None,
223 clean = False,
224 extra_configure_args = None,
225 env = None,
226 **kwargs):
Galina Kistanova0035b5d2016-10-07 20:47:51 +0000227
228 # Make a local copy of the configure args, as we are going to modify that.
229 if extra_configure_args:
230 cmake_args = extra_configure_args[:]
231 else:
232 cmake_args = list()
233
Galina Kistanova1eeb2f12017-06-17 01:18:12 +0000234 if checks is None:
235 checks = ['check-all']
236
Galina Kistanova0035b5d2016-10-07 20:47:51 +0000237 # Some options are required for this build no matter what.
238 CmakeCommand.applyRequiredOptions(cmake_args, [
239 ('-G', 'Ninja'),
240 ])
241
242 f = getCmakeBuildFactory(
243 depends_on_projects=depends_on_projects,
244 llvm_srcdir=llvm_srcdir,
245 obj_dir=obj_dir,
Galina Kistanova9124b832016-12-22 00:46:41 +0000246 install_dir=install_dir,
247 clean=clean,
Galina Kistanova0035b5d2016-10-07 20:47:51 +0000248 extra_configure_args=cmake_args,
249 env=env,
Galina Kistanova9124b832016-12-22 00:46:41 +0000250 **kwargs) # Pass through all the extra arguments.
Galina Kistanova0035b5d2016-10-07 20:47:51 +0000251
Galina Kistanova9124b832016-12-22 00:46:41 +0000252 addNinjaSteps(
253 f,
254 obj_dir=obj_dir,
Galina Kistanova1eeb2f12017-06-17 01:18:12 +0000255 checks=checks,
Galina Kistanova182583b2017-05-08 22:55:34 +0000256 install_dir=f.install_dir,
Galina Kistanova9124b832016-12-22 00:46:41 +0000257 env=env,
258 **kwargs)
Galina Kistanova0035b5d2016-10-07 20:47:51 +0000259
260 return f
261
Galina Kistanova8358cdd2017-03-10 01:06:35 +0000262def getCmakeWithNinjaWithMSVCBuildFactory(
263 depends_on_projects = None,
264 llvm_srcdir = None,
265 obj_dir = None,
Galina Kistanova1eeb2f12017-06-17 01:18:12 +0000266 checks = None,
Galina Kistanova8358cdd2017-03-10 01:06:35 +0000267 install_dir = None,
268 clean = False,
269 extra_configure_args = None,
270 # VS tools environment variable if using MSVC. For example,
271 # %VS140COMNTOOLS% selects the 2015 toolchain.
272 vs=None,
273 target_arch=None,
274 env = None,
275 **kwargs):
276
277 assert not env, "Can't have custom builder env vars with MSVC build"
278
279 # Make a local copy of the configure args, as we are going to modify that.
280 if extra_configure_args:
281 cmake_args = extra_configure_args[:]
282 else:
283 cmake_args = list()
284
Galina Kistanova1eeb2f12017-06-17 01:18:12 +0000285 if checks is None:
286 checks = ['check-all']
287
Galina Kistanova8358cdd2017-03-10 01:06:35 +0000288 # Set up VS environment, if appropriate.
289 if not vs:
290 # We build by Visual Studio 2015, unless otherwise is requested.
291 vs=r"""%VS140COMNTOOLS%"""
292
Galina Kistanova8358cdd2017-03-10 01:06:35 +0000293 f = getLLVMBuildFactoryAndSVNSteps(
294 depends_on_projects=depends_on_projects,
295 llvm_srcdir=llvm_srcdir,
296 obj_dir=obj_dir,
297 install_dir=install_dir,
Galina Kistanova8358cdd2017-03-10 01:06:35 +0000298 **kwargs) # Pass through all the extra arguments.
299
300 f.addStep(SetProperty(
301 command=builders_util.getVisualStudioEnvironment(vs, target_arch),
302 extract_fn=builders_util.extractSlaveEnvironment))
303 env = Property('slave_env')
304
305 # Some options are required for this build no matter what.
306 CmakeCommand.applyRequiredOptions(cmake_args, [
307 ('-G', 'Ninja'),
308 ])
309
Galina Kistanova928ff1f2017-10-03 03:18:06 +0000310 cleanBuildRequested = lambda step: step.build.getProperty("clean", default=step.build.getProperty("clean_obj")) or clean
311
Galina Kistanova8358cdd2017-03-10 01:06:35 +0000312 addCmakeSteps(
313 f,
Galina Kistanova928ff1f2017-10-03 03:18:06 +0000314 cleanBuildRequested=cleanBuildRequested,
Galina Kistanova8358cdd2017-03-10 01:06:35 +0000315 obj_dir=f.obj_dir,
316 install_dir=f.install_dir,
317 extra_configure_args=cmake_args,
318 env=env,
319 **kwargs)
320
321 addNinjaSteps(
322 f,
323 obj_dir=obj_dir,
Galina Kistanova1eeb2f12017-06-17 01:18:12 +0000324 checks=checks,
Galina Kistanova182583b2017-05-08 22:55:34 +0000325 install_dir=f.install_dir,
Galina Kistanova8358cdd2017-03-10 01:06:35 +0000326 env=env,
327 **kwargs)
328
329 return f
330
Galina Kistanova9124b832016-12-22 00:46:41 +0000331def getCmakeWithNinjaMultistageBuildFactory(
332 depends_on_projects = None,
333 llvm_srcdir = None,
Galina Kistanova0035b5d2016-10-07 20:47:51 +0000334 obj_dir = None,
Galina Kistanova1eeb2f12017-06-17 01:18:12 +0000335 checks = None,
Galina Kistanova9124b832016-12-22 00:46:41 +0000336 install_dir = None,
Galina Kistanova0035b5d2016-10-07 20:47:51 +0000337 clean = False,
Galina Kistanova0035b5d2016-10-07 20:47:51 +0000338 extra_configure_args = None,
339 env = None,
Galina Kistanova9124b832016-12-22 00:46:41 +0000340 stages=2,
341 stage_names=None,
Galina Kistanova0035b5d2016-10-07 20:47:51 +0000342 **kwargs):
343
Galina Kistanova9124b832016-12-22 00:46:41 +0000344 # Prepare environmental variables. Set here all env we want everywhere.
345 merged_env = {
346 'TERM' : 'dumb' # Be cautious and disable color output from all tools.
347 }
348 if env is not None:
349 # Overwrite pre-set items with the given ones, so user can set anything.
350 merged_env.update(env)
Galina Kistanova0035b5d2016-10-07 20:47:51 +0000351
352 # Make a local copy of the configure args, as we are going to modify that.
353 if extra_configure_args:
354 cmake_args = extra_configure_args[:]
355 else:
356 cmake_args = list()
357
Galina Kistanova9124b832016-12-22 00:46:41 +0000358 assert stages > 1, "It should be at least 2 stages in a multistage build."
359 if stage_names is None:
360 stage_names = list()
361 for i in range(1, stages + 1):
362 stage_names.append("stage%s" % i)
363 else:
364 assert len(stage_names) == stages, "Please specify names for none or all of the requested stages."
365
366 if obj_dir is None:
367 obj_dir = "build"
368 if install_dir is None:
369 install_dir = "install"
370
Galina Kistanova1eeb2f12017-06-17 01:18:12 +0000371 if checks is None:
372 checks = ['check-all']
373
Galina Kistanova9124b832016-12-22 00:46:41 +0000374 stage_objdirs = list()
375 stage_installdirs = list()
376 for s in stage_names:
377 stage_objdirs.append("%s/%s" % (obj_dir, s))
378 stage_installdirs.append("%s/%s" % (install_dir, s))
379
Galina Kistanova9124b832016-12-22 00:46:41 +0000380 f = getLLVMBuildFactoryAndSVNSteps(
381 depends_on_projects=depends_on_projects,
382 llvm_srcdir=llvm_srcdir,
383 obj_dir=obj_dir,
384 install_dir=install_dir,
Galina Kistanova9124b832016-12-22 00:46:41 +0000385 env=env,
386 stage_objdirs=stage_objdirs,
387 stage_installdirs=stage_installdirs,
388 stage_names=stage_names,
389 **kwargs) # Pass through all the extra arguments.
390
Galina Kistanova0035b5d2016-10-07 20:47:51 +0000391 # Set proper defaults.
392 CmakeCommand.applyDefaultOptions(cmake_args, [
Galina Kistanova9124b832016-12-22 00:46:41 +0000393 ('-DCMAKE_BUILD_TYPE=', 'Release'),
Galina Kistanova9124b832016-12-22 00:46:41 +0000394 ('-DLLVM_BUILD_TESTS=', 'ON'),
395 ('-DLLVM_ENABLE_ASSERTIONS=', 'OFF'),
396 ('-DLLVM_OPTIMIZED_TABLEGEN=', 'ON'),
Galina Kistanova0035b5d2016-10-07 20:47:51 +0000397 ])
398
Galina Kistanova19bb1832018-02-12 18:03:32 +0000399 if 'clang' in depends_on_projects:
400 CmakeCommand.applyDefaultOptions(cmake_args, [
401 ('-DCLANG_BUILD_EXAMPLES=', 'OFF'),
402 ])
403
Galina Kistanova0035b5d2016-10-07 20:47:51 +0000404 # Some options are required for this build no matter what.
405 CmakeCommand.applyRequiredOptions(cmake_args, [
Galina Kistanova9124b832016-12-22 00:46:41 +0000406 ('-G', 'Ninja'),
Galina Kistanova0035b5d2016-10-07 20:47:51 +0000407 ])
408
Galina Kistanova9124b832016-12-22 00:46:41 +0000409 # The stage 1 is special, though. We use the system compiler and
Galina Kistanova9975c382017-01-03 04:10:02 +0000410 # do incremental build, unless a clean one has been requested.
Galina Kistanova9124b832016-12-22 00:46:41 +0000411 cmake_args_stage1 = cmake_args[:]
412 CmakeCommand.applyDefaultOptions(cmake_args_stage1, [
413 # Do not expect warning free build by the system toolchain.
414 ('-DLLVM_ENABLE_WERROR=', 'OFF'),
415 ])
Galina Kistanova0035b5d2016-10-07 20:47:51 +0000416
Galina Kistanova928ff1f2017-10-03 03:18:06 +0000417 cleanBuildRequested = lambda step: step.build.getProperty("clean", default=step.build.getProperty("clean_obj")) or clean
418
Galina Kistanova9124b832016-12-22 00:46:41 +0000419 addCmakeSteps(
420 f,
Galina Kistanova928ff1f2017-10-03 03:18:06 +0000421 cleanBuildRequested=cleanBuildRequested,
Galina Kistanova9124b832016-12-22 00:46:41 +0000422 obj_dir=stage_objdirs[0],
423 install_dir=stage_installdirs[0],
424 extra_configure_args=cmake_args_stage1,
425 env=env,
426 stage_name=stage_names[0],
427 **kwargs)
Galina Kistanova0035b5d2016-10-07 20:47:51 +0000428
Galina Kistanova9124b832016-12-22 00:46:41 +0000429 addNinjaSteps(
430 f,
431 obj_dir=stage_objdirs[0],
Galina Kistanova1eeb2f12017-06-17 01:18:12 +0000432 checks=checks,
Galina Kistanova182583b2017-05-08 22:55:34 +0000433 install_dir=stage_installdirs[0],
Galina Kistanova9124b832016-12-22 00:46:41 +0000434 env=env,
435 stage_name=stage_names[0],
436 **kwargs)
Galina Kistanova0035b5d2016-10-07 20:47:51 +0000437
Galina Kistanova9124b832016-12-22 00:46:41 +0000438 # Build the rest stage by stage, using just built compiler to compile
439 # the next stage.
440 CmakeCommand.applyDefaultOptions(cmake_args, [
Galina Kistanova9975c382017-01-03 04:10:02 +0000441 # We should be warnings free when use just built compiler.
Galina Kistanova9124b832016-12-22 00:46:41 +0000442 ('-DLLVM_ENABLE_WERROR=', 'ON'),
443 ])
444 # If we build LLD, we would link with LLD.
445 # Otherwise we link with a system linker.
446 if 'lld' in f.depends_on_projects:
447 CmakeCommand.applyDefaultOptions(cmake_args, [
448 ('-DLLVM_ENABLE_LLD=', 'ON'),
449 ])
450
451 for stage_idx in range(1, stages):
452
Galina Kistanova9975c382017-01-03 04:10:02 +0000453 # Directories to use in this stage.
Galina Kistanova9124b832016-12-22 00:46:41 +0000454 obj_dir = f.stage_objdirs[stage_idx]
455 src_dir = LLVMBuildFactory.pathRelativeToBuild(f.llvm_srcdir, obj_dir)
456 install_dir = LLVMBuildFactory.pathRelativeToBuild(f.stage_installdirs[stage_idx], obj_dir)
457 staged_install = f.stage_installdirs[stage_idx - 1]
458
Galina Kistanova9975c382017-01-03 04:10:02 +0000459 # Configure the compiler to use in this stage.
Galina Kistanova9124b832016-12-22 00:46:41 +0000460 cmake_args_stageN = cmake_args[:]
461 CmakeCommand.applyRequiredOptions(cmake_args_stageN, [
462 ('-DCMAKE_INSTALL_PREFIX=', install_dir),
463 ])
464 cmake_args_stageN.append(
465 WithProperties(
466 "-DCMAKE_CXX_COMPILER=%(workdir)s/" + staged_install + "/bin/clang++"
467 ))
468 cmake_args_stageN.append(
469 WithProperties(
470 "-DCMAKE_C_COMPILER=%(workdir)s/" + staged_install + "/bin/clang"
471 ))
472
473 addCmakeSteps(
474 f,
475 True, # We always do a clean build for the staged builds.
476 obj_dir=stage_objdirs[stage_idx],
477 install_dir=stage_installdirs[stage_idx],
478 extra_configure_args=cmake_args_stageN,
479 env=env,
480 stage_name=stage_names[stage_idx],
481 **kwargs)
482
483 addNinjaSteps(
484 f,
485 obj_dir=stage_objdirs[stage_idx],
Galina Kistanova1eeb2f12017-06-17 01:18:12 +0000486 checks=checks,
Galina Kistanova182583b2017-05-08 22:55:34 +0000487 install_dir=stage_installdirs[stage_idx],
Galina Kistanova9124b832016-12-22 00:46:41 +0000488 env=env,
489 stage_name=stage_names[stage_idx],
490 **kwargs)
Galina Kistanova0035b5d2016-10-07 20:47:51 +0000491
492 return f