Galina Kistanova | c270add | 2014-12-12 22:56:29 +0000 | [diff] [blame] | 1 | from buildbot.process.properties import WithProperties |
Galina Kistanova | c270add | 2014-12-12 22:56:29 +0000 | [diff] [blame] | 2 | |
Galina Kistanova | 7e8e315 | 2017-05-03 20:25:23 +0000 | [diff] [blame] | 3 | from zorg.buildbot.builders import UnifiedTreeBuilder |
| 4 | from zorg.buildbot.commands.CmakeCommand import CmakeCommand |
| 5 | from zorg.buildbot.commands.NinjaCommand import NinjaCommand |
Galina Kistanova | c270add | 2014-12-12 22:56:29 +0000 | [diff] [blame] | 6 | from zorg.buildbot.commands.LitTestCommand import LitTestCommand |
| 7 | |
Galina Kistanova | c270add | 2014-12-12 22:56:29 +0000 | [diff] [blame] | 8 | def getABITestsuitBuildFactory( |
Galina Kistanova | 7e8e315 | 2017-05-03 20:25:23 +0000 | [diff] [blame] | 9 | 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 Kistanova | c270add | 2014-12-12 22:56:29 +0000 | [diff] [blame] | 15 | |
| 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 Kistanova | 7e8e315 | 2017-05-03 20:25:23 +0000 | [diff] [blame] | 24 | if depends_on_projects: |
| 25 | depends_on_projects = list(depends_on_projects) |
Galina Kistanova | 9b96b68 | 2015-06-28 04:34:05 +0000 | [diff] [blame] | 26 | else: |
Galina Kistanova | 7e8e315 | 2017-05-03 20:25:23 +0000 | [diff] [blame] | 27 | depends_on_projects = ['llvm', 'clang', 'clang-tools-extra', 'compiler-rt', 'lld'] |
Galina Kistanova | 9b96b68 | 2015-06-28 04:34:05 +0000 | [diff] [blame] | 28 | |
Galina Kistanova | 7e8e315 | 2017-05-03 20:25:23 +0000 | [diff] [blame] | 29 | 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 Kistanova | acc5446 | 2019-10-18 00:42:03 +0000 | [diff] [blame^] | 39 | cleanBuildRequested = lambda step: step.build.getProperty("clean", default=step.build.getProperty("clean_obj")) or clean |
| 40 | |
| 41 | f = UnifiedTreeBuilder.getLLVMBuildFactoryAndPrepareForSourcecodeSteps( |
Galina Kistanova | 7e8e315 | 2017-05-03 20:25:23 +0000 | [diff] [blame] | 42 | depends_on_projects=depends_on_projects, |
| 43 | llvm_srcdir="llvm", |
| 44 | obj_dir="build", |
Galina Kistanova | acc5446 | 2019-10-18 00:42:03 +0000 | [diff] [blame^] | 45 | cleanBuildRequested=cleanBuildRequested, |
Galina Kistanova | c270add | 2014-12-12 22:56:29 +0000 | [diff] [blame] | 46 | env=merged_env, |
Galina Kistanova | 7e8e315 | 2017-05-03 20:25:23 +0000 | [diff] [blame] | 47 | **kwargs) # Pass through all the extra arguments. |
| 48 | |
Galina Kistanova | 133fa9a | 2019-10-17 04:55:18 +0000 | [diff] [blame] | 49 | # Consume is_legacy_mode if given. |
| 50 | # TODO: Remove this once legacy mode gets dropped. |
| 51 | kwargs.pop('is_legacy_mode', None) |
Galina Kistanova | 7e8e315 | 2017-05-03 20:25:23 +0000 | [diff] [blame] | 52 | |
Galina Kistanova | acc5446 | 2019-10-18 00:42:03 +0000 | [diff] [blame^] | 53 | # 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 Kistanova | 7e8e315 | 2017-05-03 20:25:23 +0000 | [diff] [blame] | 71 | f.addStep(NinjaCommand(name="build-unified-tree", |
Galina Kistanova | 10e59b9 | 2017-05-08 19:00:01 +0000 | [diff] [blame] | 72 | haltOnFailure=True, |
Galina Kistanova | 7e8e315 | 2017-05-03 20:25:23 +0000 | [diff] [blame] | 73 | description=["Build", "unified", "tree"], |
| 74 | env=merged_env, |
| 75 | workdir=f.obj_dir, |
| 76 | **kwargs # Pass through all the extra arguments. |
| 77 | )) |
Galina Kistanova | c270add | 2014-12-12 22:56:29 +0000 | [diff] [blame] | 78 | |
Galina Kistanova | c270add | 2014-12-12 22:56:29 +0000 | [diff] [blame] | 79 | # Run the ABI test. |
| 80 | abi_test_env = { |
Galina Kistanova | 7e8e315 | 2017-05-03 20:25:23 +0000 | [diff] [blame] | 81 | 'PYTHONPATH' : WithProperties("%(workdir)s/" + f.llvm_srcdir + "/utils/lit:${PYTHONPATH}"), |
| 82 | 'PATH' : WithProperties("%(workdir)s/" + f.obj_dir + "/bin:${PATH}"), |
Galina Kistanova | c270add | 2014-12-12 22:56:29 +0000 | [diff] [blame] | 83 | } |
| 84 | merged_env.update(abi_test_env) |
| 85 | |
| 86 | abi_test_cmd = ["python", "linux-x86.py", "clang", "test", "-v"] |
| 87 | if jobs: |
Galina Kistanova | 7e8e315 | 2017-05-03 20:25:23 +0000 | [diff] [blame] | 88 | abi_test_cmd.append("-j" + str(jobs)) |
Galina Kistanova | c270add | 2014-12-12 22:56:29 +0000 | [diff] [blame] | 89 | |
| 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 |