blob: f566dc223f7041d9b4affebec4c119cddee4f32f [file] [log] [blame]
Galina Kistanovac270add2014-12-12 22:56:29 +00001from buildbot.process.properties import WithProperties
Galina Kistanovac270add2014-12-12 22:56:29 +00002
Galina Kistanova7e8e3152017-05-03 20:25:23 +00003from zorg.buildbot.builders import UnifiedTreeBuilder
4from zorg.buildbot.commands.CmakeCommand import CmakeCommand
5from zorg.buildbot.commands.NinjaCommand import NinjaCommand
Galina Kistanovac270add2014-12-12 22:56:29 +00006from zorg.buildbot.commands.LitTestCommand import LitTestCommand
7
Galina Kistanovac270add2014-12-12 22:56:29 +00008def getABITestsuitBuildFactory(
Galina Kistanova7e8e3152017-05-03 20:25:23 +00009 clean = True,
10 depends_on_projects = None,
11 extra_configure_args = None, # Extra CMake args for all stages.
12 jobs = None, # Restrict a degree of parallelism if needed.
13 env = None, # Environmental variables for all steps.
14 **kwargs):
Galina Kistanovac270add2014-12-12 22:56:29 +000015
16 # Prepare environmental variables. Set here all env we want for all steps.
17 merged_env = {
18 'TERM' : 'dumb' # Make sure Clang doesn't use color escape sequences.
19 }
20 if env is not None:
21 # Overwrite pre-set items with the given ones, so user can set anything.
22 merged_env.update(env)
23
Galina Kistanova7e8e3152017-05-03 20:25:23 +000024 if depends_on_projects:
25 depends_on_projects = list(depends_on_projects)
Galina Kistanova9b96b682015-06-28 04:34:05 +000026 else:
Galina Kistanova7e8e3152017-05-03 20:25:23 +000027 depends_on_projects = ['llvm', 'clang', 'clang-tools-extra', 'compiler-rt', 'lld']
Galina Kistanova9b96b682015-06-28 04:34:05 +000028
Galina Kistanova7e8e3152017-05-03 20:25:23 +000029 if extra_configure_args is None:
30 cmake_args = list()
31 else:
32 cmake_args = list(extra_configure_args)
33
34 # Some options are required for this build no matter what.
35 CmakeCommand.applyRequiredOptions(cmake_args, [
36 ('-G', 'Ninja'),
37 ])
38
Galina Kistanovaacc54462019-10-18 00:42:03 +000039 cleanBuildRequested = lambda step: step.build.getProperty("clean", default=step.build.getProperty("clean_obj")) or clean
40
41 f = UnifiedTreeBuilder.getLLVMBuildFactoryAndPrepareForSourcecodeSteps(
Galina Kistanova7e8e3152017-05-03 20:25:23 +000042 depends_on_projects=depends_on_projects,
43 llvm_srcdir="llvm",
44 obj_dir="build",
Galina Kistanovaacc54462019-10-18 00:42:03 +000045 cleanBuildRequested=cleanBuildRequested,
Galina Kistanovac270add2014-12-12 22:56:29 +000046 env=merged_env,
Galina Kistanova7e8e3152017-05-03 20:25:23 +000047 **kwargs) # Pass through all the extra arguments.
48
Galina Kistanova133fa9a2019-10-17 04:55:18 +000049 # Consume is_legacy_mode if given.
50 # TODO: Remove this once legacy mode gets dropped.
51 kwargs.pop('is_legacy_mode', None)
Galina Kistanova7e8e3152017-05-03 20:25:23 +000052
Galina Kistanovaacc54462019-10-18 00:42:03 +000053 # First of all, we shall checkout the latest test-suite.
54 f.addGetSourcecodeForProject(
55 project='test-suite',
56 src_dir='test-suite',
57 alwaysUseLatest=True,
58 **kwargs)
59
60 # Then get the LLVM source code revision this particular build is for.
61 f.addGetSourcecodeSteps(**kwargs)
62
63 UnifiedTreeBuilder.addCmakeSteps(
64 f,
65 cleanBuildRequested=cleanBuildRequested,
66 obj_dir=f.obj_dir,
67 extra_configure_args=extra_configure_args,
68 env=env,
69 **kwargs)
70
Galina Kistanova7e8e3152017-05-03 20:25:23 +000071 f.addStep(NinjaCommand(name="build-unified-tree",
Galina Kistanova10e59b92017-05-08 19:00:01 +000072 haltOnFailure=True,
Galina Kistanova7e8e3152017-05-03 20:25:23 +000073 description=["Build", "unified", "tree"],
74 env=merged_env,
75 workdir=f.obj_dir,
76 **kwargs # Pass through all the extra arguments.
77 ))
Galina Kistanovac270add2014-12-12 22:56:29 +000078
Galina Kistanovac270add2014-12-12 22:56:29 +000079 # Run the ABI test.
80 abi_test_env = {
Galina Kistanova7e8e3152017-05-03 20:25:23 +000081 'PYTHONPATH' : WithProperties("%(workdir)s/" + f.llvm_srcdir + "/utils/lit:${PYTHONPATH}"),
82 'PATH' : WithProperties("%(workdir)s/" + f.obj_dir + "/bin:${PATH}"),
Galina Kistanovac270add2014-12-12 22:56:29 +000083 }
84 merged_env.update(abi_test_env)
85
86 abi_test_cmd = ["python", "linux-x86.py", "clang", "test", "-v"]
87 if jobs:
Galina Kistanova7e8e3152017-05-03 20:25:23 +000088 abi_test_cmd.append("-j" + str(jobs))
Galina Kistanovac270add2014-12-12 22:56:29 +000089
90 f.addStep(LitTestCommand(name='abi-test-suite',
91 command=abi_test_cmd,
92 description=["running", "ABI", "test-suite"],
93 descriptionDone=["ABI", "test-suite", "completed"],
94 workdir='test-suite/ABI-Testsuite',
95 env=merged_env))
96
97 return f