From 22f0b6f7885860dae570c489001ea748e1f815d8 Mon Sep 17 00:00:00 2001 From: Michael Kruse Date: Wed, 5 Nov 2025 15:25:09 +0100 Subject: [PATCH 1/5] Trying out new scripted builder cleanup testbot: undo cleanup --- buildbot/osuosl/master/config/builders.py | 25 +----- zorg/buildbot/builders/ScriptedBuilder.py | 103 ++++++++++++++++++++++ 2 files changed, 106 insertions(+), 22 deletions(-) create mode 100644 zorg/buildbot/builders/ScriptedBuilder.py diff --git a/buildbot/osuosl/master/config/builders.py b/buildbot/osuosl/master/config/builders.py index 23fc7585d..ce1c3c926 100644 --- a/buildbot/osuosl/master/config/builders.py +++ b/buildbot/osuosl/master/config/builders.py @@ -3,6 +3,7 @@ from buildbot.plugins import util, steps from zorg.buildbot.builders import ClangBuilder +from zorg.buildbot.builders import ScriptedBuilder from zorg.buildbot.builders import FlangBuilder from zorg.buildbot.builders import PollyBuilder from zorg.buildbot.builders import LLDBBuilder @@ -1310,28 +1311,8 @@ def collapseRequestsDoxygen(master, builder, req1, req2): 'tags' : ["polly"], 'workernames' : ["polly-x86_64-fdcserver", "minipc-1050ti-linux"], 'builddir': "polly-x86_64-linux-test-suite", - 'factory' : PollyBuilder.getPollyBuildFactory( - clean=False, - install=False, - make='ninja', - extraCmakeArgs=[ - "-G", "Ninja", - "-DCMAKE_C_COMPILER_LAUNCHER=ccache", - "-DCMAKE_CXX_COMPILER_LAUNCHER=ccache", - "-DLLVM_ENABLE_ASSERTIONS=True", - "-DLLVM_TARGETS_TO_BUILD='X86;NVPTX'", - "-DCLANG_ENABLE_ARCMT=OFF", - "-DCLANG_ENABLE_STATIC_ANALYZER=OFF", - "-DCLANG_ENABLE_OBJC_REWRITER=OFF" - ], - testsuite=True, - extraTestsuiteCmakeArgs=[ - "-G", "Ninja", - "-DTEST_SUITE_COLLECT_COMPILE_TIME=OFF", - "-DTEST_SUITE_COLLECT_STATS=OFF", - "-DTEST_SUITE_COLLECT_CODE_SIZE=OFF", - util.Interpolate("-DTEST_SUITE_EXTERNALS_DIR=%(prop:builddir)s/../../test-suite-externals"), - ] + 'factory' : ScriptedBuilder.getScriptedBuildFactory( + "polly/.buildbot/polly-x86_64-linux-test-suite.py" )}, # AOSP builders. diff --git a/zorg/buildbot/builders/ScriptedBuilder.py b/zorg/buildbot/builders/ScriptedBuilder.py new file mode 100644 index 000000000..c5f57b5a9 --- /dev/null +++ b/zorg/buildbot/builders/ScriptedBuilder.py @@ -0,0 +1,103 @@ +from buildbot.plugins import util +from buildbot.steps.shell import SetProperty +from zorg.buildbot.commands.AnnotatedCommand import AnnotatedCommand +from zorg.buildbot.process.factory import LLVMBuildFactory +from buildbot.steps.shell import ShellCommand, WarningCountingShellCommand +from buildbot.plugins import steps, util +from zorg.buildbot.commands.LitTestCommand import LitTestCommand +from zorg.buildbot.process.factory import LLVMBuildFactory +import os + +def getScriptedBuildFactory(scriptpath, *scriptargs, clean=False, + depends_on_projects=None, + env=None, + extra_args=None, + timeout=1200, + #checkout_llvm_sources=True, + script_interpreter="python", + warnOnWarnings=False, **kwargs): + + llvm_srcdir = "llvm.src" + venvpath = "bbenv" + + # If true, clean everything, including source dirs + def cleanBuildRequested(step): + return step.build.getProperty("clean") + # If true, clean build products; implied if cleanBuildRequested is true + def cleanObjRequested(step): + return cleanBuildRequested(step) or clean or step.build.getProperty("clean_obj") + + if depends_on_projects is None: + depends_on_projects = [ + "llvm", + "clang", + "compiler-rt", + "libcxx", + "libcxxabi", + "libunwind", + "lld"] + + + f = LLVMBuildFactory( + depends_on_projects=depends_on_projects, + clean=clean, + llvm_srcdir=llvm_srcdir, + cleanBuildRequested=cleanBuildRequested ) + + f.addStep(steps.RemoveDirectory(name='clean-src-dir', + dir=f.monorepo_dir, + warnOnFailure=True, + doStepIf=cleanBuildRequested)) + + f.addStep(steps.RemoveDirectory(name='clean-venv-dir', + dir=venvpath, + warnOnFailure=True, + doStepIf=cleanBuildRequested)) + + # Get the source code. + f.addGetSourcecodeSteps(**kwargs) + + if clean: + f.addStep(SetProperty(property='clean', command='echo 1')) + + # We normally use the clean property to indicate that we want a + # clean build, but AnnotatedCommand uses the clobber property + # instead. Therefore, set clobber if clean is set to a truthy + # value. This will cause AnnotatedCommand to set + # BUILDBOT_CLOBBER=1 in the environment, which is how we + # communicate to the script that we need a clean build. + f.addStep(SetProperty( + property='clobber', + command='echo 1', + doStepIf=cleanObjRequested)) + + merged_env = { + 'TERM': 'dumb' # Be cautious and disable color output from all tools. + } + if env is not None: + # Overwrite pre-set items with the given ones, so user can set + # anything. + merged_env.update(env) + + + f.addStep(ShellCommand( + # name="create-venv", + command=[script_interpreter, "-m", "venv", venvpath], # " --upgrade", "--upgrade-deps", + # description="Create a venv" + )) + venv_interpreter = os.path.join(venvpath, 'bin', 'python') + + extra_args_with_props = [util.Interpolate(arg) for arg in scriptargs] + + command = [venv_interpreter, os.path.join('..', f.monorepo_dir, scriptpath)] # relative to build path + command += extra_args_with_props + + f.addStep(AnnotatedCommand(name="annotate", + description="annotate", + timeout=timeout, + haltOnFailure=True, + warnOnWarnings=warnOnWarnings, + command=command, + env=merged_env)) + + return f From d398631d04c6da118730e3f8262efab7fd92aa26 Mon Sep 17 00:00:00 2001 From: Michael Kruse Date: Fri, 7 Nov 2025 22:24:30 +0100 Subject: [PATCH 2/5] Organize clobber --- buildbot/osuosl/master/config/builders.py | 11 +-- zorg/buildbot/builders/ScriptedBuilder.py | 87 +++++++++++++---------- 2 files changed, 54 insertions(+), 44 deletions(-) diff --git a/buildbot/osuosl/master/config/builders.py b/buildbot/osuosl/master/config/builders.py index ce1c3c926..b564ba7ca 100644 --- a/buildbot/osuosl/master/config/builders.py +++ b/buildbot/osuosl/master/config/builders.py @@ -1312,7 +1312,8 @@ def collapseRequestsDoxygen(master, builder, req1, req2): 'workernames' : ["polly-x86_64-fdcserver", "minipc-1050ti-linux"], 'builddir': "polly-x86_64-linux-test-suite", 'factory' : ScriptedBuilder.getScriptedBuildFactory( - "polly/.buildbot/polly-x86_64-linux-test-suite.py" + "polly/.buildbot/polly-x86_64-linux-test-suite.py", + depends_on_projects=["llvm", "clang", "polly"] )}, # AOSP builders. @@ -1443,11 +1444,11 @@ def collapseRequestsDoxygen(master, builder, req1, req2): "CMAKE_CXX_FLAGS" : "-D__OPTIMIZE__", "CMAKE_MSVC_RUNTIME_LIBRARY" : "MultiThreadedDLL", - "LLVM_ENABLE_ASSERTIONS" : "ON", + "LLVM_ENABLE_ASSERTIONS" : "ON", "LLVM_INCLUDE_BENCHMARKS" : "OFF", "LLVM_PARALLEL_LINK_JOBS" : 8, "LLVM_LIT_ARGS" : "-v -vv --threads=32 --time-tests", - + "LLDB_ENFORCE_STRICT_TEST_REQUIREMENTS" : "ON", "LLDB_ENABLE_SWIG" : "ON ", "LLDB_ENABLE_LIBEDIT" : "OFF", @@ -3546,7 +3547,7 @@ def collapseRequestsDoxygen(master, builder, req1, req2): checkout_llvm_sources=False, script_interpreter=None, clean=True)}, - + # Builders that test the premerge configuration # These builders are specifically for running the premerge configuration # postcommit (after changes have landed in main). The configuration for @@ -3920,7 +3921,7 @@ def collapseRequestsDoxygen(master, builder, req1, req2): env = lldb_remote_linux_env.copy(), ) }, - + # PtrAuth (PAuth) builders. {'name' : "llvm-clang-ubuntu-x-aarch64-pauth", 'tags' : ["clang", "llvm", "lld", "clang-tools-extra", "compiler-rt", "libc++", "libc++abi", "libunwind", "cross", "aarch64", "pauth", "ptrauth"], diff --git a/zorg/buildbot/builders/ScriptedBuilder.py b/zorg/buildbot/builders/ScriptedBuilder.py index c5f57b5a9..6e20958e8 100644 --- a/zorg/buildbot/builders/ScriptedBuilder.py +++ b/zorg/buildbot/builders/ScriptedBuilder.py @@ -8,57 +8,62 @@ from zorg.buildbot.process.factory import LLVMBuildFactory import os -def getScriptedBuildFactory(scriptpath, *scriptargs, clean=False, - depends_on_projects=None, + +def getScriptedBuildFactory(scriptpath, *scriptargs, depends_on_projects, always_clobber=False, env=None, extra_args=None, timeout=1200, - #checkout_llvm_sources=True, script_interpreter="python", warnOnWarnings=False, **kwargs): + assert scriptpath, "Must specify a script the worker is going to execute" + assert depends_on_projects, "Must specify a set of projects; any change one of those projects will trigger a worker run" + llvm_srcdir = "llvm.src" venvpath = "bbenv" + workdir = "workdir" + # If true, clean everything, including source dirs def cleanBuildRequested(step): return step.build.getProperty("clean") + # If true, clean build products; implied if cleanBuildRequested is true - def cleanObjRequested(step): - return cleanBuildRequested(step) or clean or step.build.getProperty("clean_obj") + def clobberRequested(step): + return cleanBuildRequested(step) or always_clobber or step.build.getProperty("clean_obj") - if depends_on_projects is None: - depends_on_projects = [ - "llvm", - "clang", - "compiler-rt", - "libcxx", - "libcxxabi", - "libunwind", - "lld"] + f.addStep(steps.RemoveDirectory(name='clean-srcdir', + dir=f.monorepo_dir, + warnOnFailure=True, + doStepIf=cleanBuildRequested)) + + + f.addStep(steps.RemoveDirectory(name='clobber-workdir', + dir=f.monorepo_dir, + warnOnFailure=True, + doStepIf=clobberRequested)) + + #f.addStep(steps.RemoveDirectory(name='clean-venv-dir', + # dir=venvpath, + # warnOnFailure=True, + # doStepIf=cleanBuildRequested)) f = LLVMBuildFactory( - depends_on_projects=depends_on_projects, - clean=clean, + depends_on_projects=depends_on_projects, + clean=always_clobber, llvm_srcdir=llvm_srcdir, - cleanBuildRequested=cleanBuildRequested ) + cleanBuildRequested=cleanBuildRequested) - f.addStep(steps.RemoveDirectory(name='clean-src-dir', - dir=f.monorepo_dir, - warnOnFailure=True, - doStepIf=cleanBuildRequested)) - f.addStep(steps.RemoveDirectory(name='clean-venv-dir', - dir=venvpath, - warnOnFailure=True, - doStepIf=cleanBuildRequested)) # Get the source code. f.addGetSourcecodeSteps(**kwargs) - if clean: - f.addStep(SetProperty(property='clean', command='echo 1')) + + #if always_clobber: + # f.addStep(SetProperty(property='clean', command='echo 1', doStepIf=cleanBuildRequested)) + # We normally use the clean property to indicate that we want a # clean build, but AnnotatedCommand uses the clobber property @@ -66,10 +71,11 @@ def cleanObjRequested(step): # value. This will cause AnnotatedCommand to set # BUILDBOT_CLOBBER=1 in the environment, which is how we # communicate to the script that we need a clean build. - f.addStep(SetProperty( - property='clobber', - command='echo 1', - doStepIf=cleanObjRequested)) + #f.addStep(SetProperty( + # property='clobber', + # command='echo 1', + # doStepIf=clobberRequested)) + merged_env = { 'TERM': 'dumb' # Be cautious and disable color output from all tools. @@ -80,20 +86,23 @@ def cleanObjRequested(step): merged_env.update(env) - f.addStep(ShellCommand( - # name="create-venv", - command=[script_interpreter, "-m", "venv", venvpath], # " --upgrade", "--upgrade-deps", - # description="Create a venv" - )) - venv_interpreter = os.path.join(venvpath, 'bin', 'python') + + #f.addStep(ShellCommand( + # # name="create-venv", + # command=[script_interpreter, "-m", "venv", venvpath], # " --upgrade", "--upgrade-deps", + # # description="Create a venv" + #)) + #venv_interpreter = os.path.join(venvpath, 'bin', 'python') extra_args_with_props = [util.Interpolate(arg) for arg in scriptargs] - command = [venv_interpreter, os.path.join('..', f.monorepo_dir, scriptpath)] # relative to build path + command = [script_interpreter, os.path.join( f.monorepo_dir, scriptpath), f'--workdir={workdir}'] # relative to build path + if always_clobber: + command += ['--clobber'] command += extra_args_with_props f.addStep(AnnotatedCommand(name="annotate", - description="annotate", + description="Run build script", timeout=timeout, haltOnFailure=True, warnOnWarnings=warnOnWarnings, From 2ea355d37088e449a24ebdac99c91ad803bd9b4c Mon Sep 17 00:00:00 2001 From: Michael Kruse Date: Sat, 8 Nov 2025 00:12:04 +0000 Subject: [PATCH 3/5] fixes --- buildbot/osuosl/master/config/builders.py | 2 +- zorg/buildbot/builders/ScriptedBuilder.py | 18 +++++++++--------- zorg/buildbot/commands/AnnotatedCommand.py | 2 ++ 3 files changed, 12 insertions(+), 10 deletions(-) diff --git a/buildbot/osuosl/master/config/builders.py b/buildbot/osuosl/master/config/builders.py index b564ba7ca..63eea7837 100644 --- a/buildbot/osuosl/master/config/builders.py +++ b/buildbot/osuosl/master/config/builders.py @@ -1313,7 +1313,7 @@ def collapseRequestsDoxygen(master, builder, req1, req2): 'builddir': "polly-x86_64-linux-test-suite", 'factory' : ScriptedBuilder.getScriptedBuildFactory( "polly/.buildbot/polly-x86_64-linux-test-suite.py", - depends_on_projects=["llvm", "clang", "polly"] + depends_on_projects=["llvm", "clang", "polly"], )}, # AOSP builders. diff --git a/zorg/buildbot/builders/ScriptedBuilder.py b/zorg/buildbot/builders/ScriptedBuilder.py index 6e20958e8..e1f590889 100644 --- a/zorg/buildbot/builders/ScriptedBuilder.py +++ b/zorg/buildbot/builders/ScriptedBuilder.py @@ -20,7 +20,7 @@ def getScriptedBuildFactory(scriptpath, *scriptargs, depends_on_projects, always assert depends_on_projects, "Must specify a set of projects; any change one of those projects will trigger a worker run" llvm_srcdir = "llvm.src" - venvpath = "bbenv" + #venvpath = "bbenv" workdir = "workdir" @@ -32,6 +32,12 @@ def cleanBuildRequested(step): def clobberRequested(step): return cleanBuildRequested(step) or always_clobber or step.build.getProperty("clean_obj") + f = LLVMBuildFactory( + depends_on_projects=depends_on_projects, + llvm_srcdir=llvm_srcdir) + + + f.addStep(steps.RemoveDirectory(name='clean-srcdir', dir=f.monorepo_dir, warnOnFailure=True, @@ -49,11 +55,6 @@ def clobberRequested(step): # doStepIf=cleanBuildRequested)) - f = LLVMBuildFactory( - depends_on_projects=depends_on_projects, - clean=always_clobber, - llvm_srcdir=llvm_srcdir, - cleanBuildRequested=cleanBuildRequested) @@ -94,12 +95,11 @@ def clobberRequested(step): #)) #venv_interpreter = os.path.join(venvpath, 'bin', 'python') - extra_args_with_props = [util.Interpolate(arg) for arg in scriptargs] - command = [script_interpreter, os.path.join( f.monorepo_dir, scriptpath), f'--workdir={workdir}'] # relative to build path + command = [script_interpreter, os.path.join('..', f.monorepo_dir, scriptpath), f'--workdir=.'] # relative to build path if always_clobber: command += ['--clobber'] - command += extra_args_with_props + command += [util.Interpolate(arg) for arg in scriptargs] f.addStep(AnnotatedCommand(name="annotate", description="Run build script", diff --git a/zorg/buildbot/commands/AnnotatedCommand.py b/zorg/buildbot/commands/AnnotatedCommand.py index d21f16746..5d91c2fd6 100644 --- a/zorg/buildbot/commands/AnnotatedCommand.py +++ b/zorg/buildbot/commands/AnnotatedCommand.py @@ -324,6 +324,8 @@ def __init__(self, **kwargs): 'BUILDBOT_BRANCH': util.Interpolate('%(prop:branch:-None)s'), 'BUILDBOT_BUILDERNAME': util.Interpolate('%(prop:buildername:-None)s'), 'BUILDBOT_BUILDNUMBER': util.Interpolate('%(prop:buildnumber:-None)s'), + 'BUILDBOT_CLEAN': util.Interpolate('%(prop:clean:-)s'), + 'BUILDBOT_CLEAN_OBJ': util.Interpolate('%(prop:clean_obj:-)s'), 'BUILDBOT_CLOBBER': util.Interpolate('%(prop:clobber:+1)s'), 'BUILDBOT_GOT_REVISION': util.Interpolate('%(prop:got_revision:-None)s'), 'BUILDBOT_REVISION': util.Interpolate('%(prop:revision:-None)s'), From 15b1219d7ccbd5ff23ecd6a64c909cc668acc79c Mon Sep 17 00:00:00 2001 From: Michael Kruse Date: Sat, 8 Nov 2025 00:14:37 +0000 Subject: [PATCH 4/5] new dir structure --- buildbot/osuosl/master/config/builders.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/buildbot/osuosl/master/config/builders.py b/buildbot/osuosl/master/config/builders.py index 63eea7837..24423665c 100644 --- a/buildbot/osuosl/master/config/builders.py +++ b/buildbot/osuosl/master/config/builders.py @@ -1312,7 +1312,7 @@ def collapseRequestsDoxygen(master, builder, req1, req2): 'workernames' : ["polly-x86_64-fdcserver", "minipc-1050ti-linux"], 'builddir': "polly-x86_64-linux-test-suite", 'factory' : ScriptedBuilder.getScriptedBuildFactory( - "polly/.buildbot/polly-x86_64-linux-test-suite.py", + "polly/ci/polly-x86_64-linux-test-suite.py", depends_on_projects=["llvm", "clang", "polly"], )}, From 835863fa059de1c7d5d7d66b79bf07f8af05d1ab Mon Sep 17 00:00:00 2001 From: Michael Kruse Date: Mon, 10 Nov 2025 01:57:07 +0100 Subject: [PATCH 5/5] cleanup --- buildbot/osuosl/master/config/builders.py | 10 +- zorg/buildbot/builders/ScriptedBuilder.py | 149 +++++++++------------- 2 files changed, 63 insertions(+), 96 deletions(-) diff --git a/buildbot/osuosl/master/config/builders.py b/buildbot/osuosl/master/config/builders.py index 24423665c..3ec91f1fc 100644 --- a/buildbot/osuosl/master/config/builders.py +++ b/buildbot/osuosl/master/config/builders.py @@ -3,7 +3,6 @@ from buildbot.plugins import util, steps from zorg.buildbot.builders import ClangBuilder -from zorg.buildbot.builders import ScriptedBuilder from zorg.buildbot.builders import FlangBuilder from zorg.buildbot.builders import PollyBuilder from zorg.buildbot.builders import LLDBBuilder @@ -20,6 +19,7 @@ from zorg.buildbot.builders import TestSuiteBuilder from zorg.buildbot.builders import BOLTBuilder from zorg.buildbot.builders import DebugifyBuilder +from zorg.buildbot.builders import ScriptedBuilder from zorg.buildbot.builders import HtmlDocsBuilder from zorg.buildbot.builders import DoxygenDocsBuilder @@ -1444,11 +1444,11 @@ def collapseRequestsDoxygen(master, builder, req1, req2): "CMAKE_CXX_FLAGS" : "-D__OPTIMIZE__", "CMAKE_MSVC_RUNTIME_LIBRARY" : "MultiThreadedDLL", - "LLVM_ENABLE_ASSERTIONS" : "ON", + "LLVM_ENABLE_ASSERTIONS" : "ON", "LLVM_INCLUDE_BENCHMARKS" : "OFF", "LLVM_PARALLEL_LINK_JOBS" : 8, "LLVM_LIT_ARGS" : "-v -vv --threads=32 --time-tests", - + "LLDB_ENFORCE_STRICT_TEST_REQUIREMENTS" : "ON", "LLDB_ENABLE_SWIG" : "ON ", "LLDB_ENABLE_LIBEDIT" : "OFF", @@ -3547,7 +3547,7 @@ def collapseRequestsDoxygen(master, builder, req1, req2): checkout_llvm_sources=False, script_interpreter=None, clean=True)}, - + # Builders that test the premerge configuration # These builders are specifically for running the premerge configuration # postcommit (after changes have landed in main). The configuration for @@ -3921,7 +3921,7 @@ def collapseRequestsDoxygen(master, builder, req1, req2): env = lldb_remote_linux_env.copy(), ) }, - + # PtrAuth (PAuth) builders. {'name' : "llvm-clang-ubuntu-x-aarch64-pauth", 'tags' : ["clang", "llvm", "lld", "clang-tools-extra", "compiler-rt", "libc++", "libc++abi", "libunwind", "cross", "aarch64", "pauth", "ptrauth"], diff --git a/zorg/buildbot/builders/ScriptedBuilder.py b/zorg/buildbot/builders/ScriptedBuilder.py index e1f590889..2b2193e19 100644 --- a/zorg/buildbot/builders/ScriptedBuilder.py +++ b/zorg/buildbot/builders/ScriptedBuilder.py @@ -1,112 +1,79 @@ -from buildbot.plugins import util -from buildbot.steps.shell import SetProperty -from zorg.buildbot.commands.AnnotatedCommand import AnnotatedCommand -from zorg.buildbot.process.factory import LLVMBuildFactory -from buildbot.steps.shell import ShellCommand, WarningCountingShellCommand -from buildbot.plugins import steps, util -from zorg.buildbot.commands.LitTestCommand import LitTestCommand -from zorg.buildbot.process.factory import LLVMBuildFactory import os +from buildbot.plugins import steps, util + +from zorg.buildbot.commands.AnnotatedCommand import AnnotatedCommand +from zorg.buildbot.process.factory import LLVMBuildFactory -def getScriptedBuildFactory(scriptpath, *scriptargs, depends_on_projects, always_clobber=False, - env=None, - extra_args=None, - timeout=1200, - script_interpreter="python", - warnOnWarnings=False, **kwargs): +def getScriptedBuildFactory( + scriptpath, + *scriptargs, + depends_on_projects, + env=None, + timeout=1200, + script_interpreter="python", + warnOnWarnings=False, + **kwargs, +): assert scriptpath, "Must specify a script the worker is going to execute" - assert depends_on_projects, "Must specify a set of projects; any change one of those projects will trigger a worker run" + assert ( + depends_on_projects + ), "Must specify a set of projects; any change one of those projects will trigger a worker run" llvm_srcdir = "llvm.src" - #venvpath = "bbenv" - workdir = "workdir" - # If true, clean everything, including source dirs def cleanBuildRequested(step): return step.build.getProperty("clean") - # If true, clean build products; implied if cleanBuildRequested is true - def clobberRequested(step): - return cleanBuildRequested(step) or always_clobber or step.build.getProperty("clean_obj") - f = LLVMBuildFactory( - depends_on_projects=depends_on_projects, - llvm_srcdir=llvm_srcdir) - - - - f.addStep(steps.RemoveDirectory(name='clean-srcdir', - dir=f.monorepo_dir, - warnOnFailure=True, - doStepIf=cleanBuildRequested)) - - - f.addStep(steps.RemoveDirectory(name='clobber-workdir', - dir=f.monorepo_dir, - warnOnFailure=True, - doStepIf=clobberRequested)) - - #f.addStep(steps.RemoveDirectory(name='clean-venv-dir', - # dir=venvpath, - # warnOnFailure=True, - # doStepIf=cleanBuildRequested)) - - - - - - # Get the source code. + depends_on_projects=depends_on_projects, llvm_srcdir=llvm_srcdir + ) + + # When cleaning, delete the source directory; everything should be deleted + # by the build script itself. + f.addStep( + steps.RemoveDirectory( + name="clean-srcdir", + dir=f.monorepo_dir, + warnOnFailure=True, + doStepIf=cleanBuildRequested, + ) + ) + + # Checkout the llvm-project repository f.addGetSourcecodeSteps(**kwargs) + # Prepare running the build script + command = [ + script_interpreter, + os.path.join( + "..", f.monorepo_dir, scriptpath + ), # Location of the build script is relative to the llvm-project checkout + f"--workdir=.", # AnnotatedCommand executes the script with build/ as cwd + ] - #if always_clobber: - # f.addStep(SetProperty(property='clean', command='echo 1', doStepIf=cleanBuildRequested)) - - - # We normally use the clean property to indicate that we want a - # clean build, but AnnotatedCommand uses the clobber property - # instead. Therefore, set clobber if clean is set to a truthy - # value. This will cause AnnotatedCommand to set - # BUILDBOT_CLOBBER=1 in the environment, which is how we - # communicate to the script that we need a clean build. - #f.addStep(SetProperty( - # property='clobber', - # command='echo 1', - # doStepIf=clobberRequested)) - + # Add any user-defined command line switches + command += [util.Interpolate(arg) for arg in scriptargs] merged_env = { - 'TERM': 'dumb' # Be cautious and disable color output from all tools. + "TERM": "dumb" # Be cautious and disable color output from all tools. } - if env is not None: - # Overwrite pre-set items with the given ones, so user can set - # anything. - merged_env.update(env) - - - - #f.addStep(ShellCommand( - # # name="create-venv", - # command=[script_interpreter, "-m", "venv", venvpath], # " --upgrade", "--upgrade-deps", - # # description="Create a venv" - #)) - #venv_interpreter = os.path.join(venvpath, 'bin', 'python') - - - command = [script_interpreter, os.path.join('..', f.monorepo_dir, scriptpath), f'--workdir=.'] # relative to build path - if always_clobber: - command += ['--clobber'] - command += [util.Interpolate(arg) for arg in scriptargs] - - f.addStep(AnnotatedCommand(name="annotate", - description="Run build script", - timeout=timeout, - haltOnFailure=True, - warnOnWarnings=warnOnWarnings, - command=command, - env=merged_env)) + for k, v in env or {}: + # Overwrite pre-set items with the given ones, so user can set anything. + merged_env[k] = util.Interpolate(v) + + f.addStep( + AnnotatedCommand( + name="annotate", + description="Run build script", + timeout=timeout, + haltOnFailure=True, + warnOnWarnings=warnOnWarnings, + command=command, + env=merged_env, + ) + ) return f