Removed unused code from LLDBBuilder.
diff --git a/zorg/buildbot/builders/LLDBBuilder.py b/zorg/buildbot/builders/LLDBBuilder.py
index df6e785..3850a71 100644
--- a/zorg/buildbot/builders/LLDBBuilder.py
+++ b/zorg/buildbot/builders/LLDBBuilder.py
@@ -1,52 +1,13 @@
-import os
-import json
-import collections
-import buildbot
-import buildbot.process.factory
-from buildbot.steps.source import SVN
-from buildbot.steps.shell import Configure, SetProperty
+from buildbot.steps.shell import SetProperty
from buildbot.steps.shell import ShellCommand, WarningCountingShellCommand
from buildbot.steps.slave import RemoveDirectory
from buildbot.process.properties import WithProperties, Property
-from buildbot.steps import trigger
-from zorg.buildbot.commands.LitTestCommand import LitTestCommand
+
from zorg.buildbot.commands.CmakeCommand import CmakeCommand
-from zorg.buildbot.conditions.FileConditions import FileDoesNotExist
from zorg.buildbot.builders.Util import getVisualStudioEnvironment
from zorg.buildbot.builders.Util import extractSlaveEnvironment
from zorg.buildbot.process.factory import LLVMBuildFactory
-# We *must* checkout at least Clang, LLVM, and LLDB. Also check out LLD since
-# it is needed to run the LLDB test suite.
-def getLLDBSource(f,llvmTopDir='llvm'):
- f.addStep(SVN(name='svn-llvm',
- mode='update', baseURL='http://llvm.org/svn/llvm-project/llvm/',
- defaultBranch='trunk',
- workdir=llvmTopDir))
- f.addStep(SVN(name='svn-clang',
- mode='update', baseURL='http://llvm.org/svn/llvm-project/cfe/',
- defaultBranch='trunk',
- workdir='%s/tools/clang' % llvmTopDir))
- f.addStep(SVN(name='svn-lld',
- mode='update', baseURL='http://llvm.org/svn/llvm-project/lld/',
- defaultBranch='trunk',
- workdir='%s/tools/lld' % llvmTopDir))
- f.addStep(SVN(name='svn-lldb',
- mode='update', baseURL='http://llvm.org/svn/llvm-project/lldb/',
- defaultBranch='trunk',
- workdir='%s/tools/lldb' % llvmTopDir))
- return f
-
-# Clean SVN source tree
-# SVN doesn't provide build-in commands to remove all untracked files
-# List all untracked files, and remove one by one
-def cleanSVNSourceTree(f, srcdir='llvm'):
- f.addStep(ShellCommand(name='clean svn source %s' % srcdir,
- command="svn status --no-ignore | grep '^[I?]' | cut -c 9- | while IFS= read -r f; do echo \"$f\"; rm -rf \"$f\"; done",
- description="clean SVN source tree",
- workdir='%s' % srcdir))
- return f
-
# CMake builds
def getLLDBCMakeBuildFactory(
clean=False,
@@ -147,863 +108,3 @@
env=Property('slave_env')))
return f
-
-def getLLDBBuildFactory(
- triple,
- useTwoStage=False,
- make='make',
- jobs='%(jobs)s',
- extra_configure_args=[],
- env={},
- *args,
- **kwargs):
-
- llvm_srcdir = "llvm.src"
- llvm_objdir = "llvm.obj"
-
- f = buildbot.process.factory.BuildFactory()
-
- # Determine the build directory.
- f.addStep(SetProperty(name="get_builddir",
- command=["pwd"],
- property="builddir",
- description="set build dir",
- workdir="."))
-
- # Find out what version of llvm and clang are needed to build this version
- # of lldb. Right now we will assume they use the same version.
- # XXX - could this be done directly on the master instead of the slave?
- f.addStep(SetProperty(command='svn cat http://llvm.org/svn/llvm-project/lldb/trunk/scripts/build-llvm.pl | grep ^our.*llvm_revision | cut -d \\" -f 2',
- property='llvmrev'))
-
- # The SVN build step provides no mechanism to check out a specific revision
- # based on a property, so just run the commands directly here.
-
- svn_co = ['svn', 'checkout', '--force']
- svn_co += ['--revision', WithProperties('%(llvmrev)s')]
-
- # build llvm svn checkout command
- svn_co_llvm = svn_co + \
- [WithProperties('http://llvm.org/svn/llvm-project/llvm/trunk@%(llvmrev)s'),
- llvm_srcdir]
- # build clang svn checkout command
- svn_co_clang = svn_co + \
- [WithProperties('http://llvm.org/svn/llvm-project/cfe/trunk@%(llvmrev)s'),
- '%s/tools/clang' % llvm_srcdir]
-
- f.addStep(ShellCommand(name='svn-llvm',
- command=svn_co_llvm,
- haltOnFailure=True,
- workdir='.'))
- f.addStep(ShellCommand(name='svn-clang',
- command=svn_co_clang,
- haltOnFailure=True,
- workdir='.'))
-
- f.addStep(SVN(name='svn-lldb',
- mode='update',
- baseURL='http://llvm.org/svn/llvm-project/lldb/',
- defaultBranch='trunk',
- always_purge=True,
- workdir='%s/tools/lldb' % llvm_srcdir))
-
- # Run configure
- config_args = [WithProperties("%%(builddir)s/%s/configure" % llvm_srcdir),
- "--disable-bindings",
- "--without-llvmgcc",
- "--without-llvmgxx",
- ]
- if triple:
- config_args += ['--build=%s' % triple]
- config_args += extra_configure_args
-
- f.addStep(Configure(name='configure',
- command=config_args,
- env=env,
- workdir=llvm_objdir))
-
- f.addStep(WarningCountingShellCommand(name="compile",
- command=['nice', '-n', '10',
- make, WithProperties("-j%s" % jobs)],
- env=env,
- haltOnFailure=True,
- workdir=llvm_objdir))
-
- # Test.
- f.addStep(LitTestCommand(name="test lldb",
- command=['nice', '-n', '10',
- make],
- description="test lldb",
- env=env,
- workdir='%s/tools/lldb/test' % llvm_objdir))
-
- return f
-# Add test steps from list of compilers and archs
-def getLLDBTestSteps(f,
- bindir,
- test_archs,
- test_compilers,
- remote_platform=None,
- remote_host=None,
- remote_port=None,
- remote_dir=None,
- env=None):
- # Skip test steps if no test compiler or arch is specified
- if None in (test_archs, test_compilers):
- return f
- llvm_srcdir = "llvm"
- llvm_builddir = "build"
- if env is None:
- env = {}
- flunkTestFailure = True
- extraTestFlag = ''
- # TODO: for now, run tests with 8 threads and without mi tests on android
- # come back when those issues are addressed
- testenv=dict(env)
- for compiler in test_compilers:
- # find full path for top of tree clang
- if compiler=='totclang':
- compilerPath=bindir + '/clang'
- elif remote_platform is 'android':
- compilerPath = os.path.join('%(toolchain_test)s', 'bin', compiler)
- else:
- compilerPath = compiler
- for arch in test_archs:
- DOTEST_OPTS=''.join(['--executable ' + bindir + '/lldb ',
- '--filecheck ' + bindir + '/FileCheck ',
- '-A %s ' % arch,
- '-C %s ' % compilerPath,
- '-s lldb-test-traces-%s-%s ' % (compiler, arch),
- '-u CXXFLAGS ',
- '-u CFLAGS ',
- '--channel ',
- '"gdb-remote packets" ',
- '--channel ',
- '"lldb all"'])
- testname = "local"
- if remote_platform is not None:
- urlStr='connect://%(remote_host)s:%(remote_port)s'
- if remote_platform is 'android':
- #i386/x86_64 are the only android archs that are expected to pass at this time
- flunkTestFailure = arch in ('i386', 'x86_64')
- testenv['LLDB_TEST_THREADS'] = '8'
- extraTestFlag = ' -m'
- urlStr = 'adb://%(deviceid)s:%(remote_port)s'
- # for Android, remove all forwarded ports before running test
- # it is noticed that forwarded socket connections were not cleaned for certain crashed tests
- # clean it here to avoid too many "LISTEN" ports left on slave
- f.addStep(ShellCommand(name="remove port forwarding %s" % arch,
- command=['adb',
- 'forward',
- '--remove-all'],
- description="Remove port forwarding",
- env=env,
- haltOnFailure=False,
- workdir='%s' % llvm_builddir))
- DOTEST_OPTS += ''.join([' --platform-name remote-' + remote_platform,
- ' --platform-url ' + urlStr,
- ' --platform-working-dir %(remote_dir)s',
- ' --env OS=' + remote_platform.title()])
- testname = "remote-" + remote_platform
- DOTEST_OPTS += extraTestFlag
- f.addStep(LitTestCommand(name="test lldb %s (%s-%s)" % (testname, compiler, arch),
- command=['../%s/tools/lldb/test/dosep.py' % llvm_srcdir,
- '--options',
- WithProperties(DOTEST_OPTS)],
- description="test lldb",
- parseSummaryOnly=True,
- flunkOnFailure=flunkTestFailure,
- warnOnFailure=flunkTestFailure,
- workdir='%s' % llvm_builddir,
- timeout=1800,
- env=testenv))
- f=cleanSVNSourceTree(f, '%s/tools/lldb/test' % llvm_srcdir)
- return f
-
-# Define a structure to describe remote target
-# For example, RemoteConfig('linux','x86_64',['gcc4.8.2','clang'],['i386'])
-RemoteConfig = collections.namedtuple("RemoteConfig", ["platform", "host_arch", "test_compilers", "test_archs"])
-
-# Add steps to run lldb test on remote target
-def getLLDBRemoteTestSteps(f,
- bindir,
- build_type,
- remote_config,
- env):
- if None in (remote_config.test_archs, remote_config.test_compilers):
- return f
- # only supports linux and android as remote target at this time
- if remote_config.platform not in ('linux', 'android'):
- return f
- llvm_srcdir = "llvm"
- llvm_builddir = "build"
- stepDesc = remote_config.platform + "-" + remote_config.host_arch
- # get hostname
- slave_hostname = None
- f.addStep(SetProperty(name="get hostname",
- command=["hostname"],
- property="slave_hostname",
- description="set slave hostname",
- workdir="."))
- # get configuration of remote target
- # config file should be placed under builddir on builder machine
- # file name: remote_cfg.json
- # content: json format with keys [remote_platform]-[remote_arch]
- # the value for each key defines "remote_host", "remote_port", "remote_dir", "toolchain", "deviceId"
- # example: {"android-i386": {"remote_host":"localhost",
- # "remote_port":"5430",
- # "remote_dir":"/data/local/tmp/lldb",
- # "toolchain_build":"/home/lldb_build/Toolchains/i386-android-toolchain-21",
- # "toolchain_test":"/home/lldb_build/Toolchains/i386-android-toolchain-16",
- # "deviceid":"XXXXXXX"},
-
- def getRemoteCfg(rc, stdout, stderr):
- return json.loads(stdout)[stepDesc]
- f.addStep(SetProperty(name="get remote target " + stepDesc,
- command="cat remote_cfg.json",
- extract_fn=getRemoteCfg,
- description="get remote target",
- workdir="."))
- # rsync
- if remote_config.platform is 'linux':
- shellcmd = ['ssh',
- WithProperties('%(remote_host)s')]
- hostname = '%(slave_hostname)s'
- launchcmd = shellcmd + ['screen', '-d', '-m']
- terminatecmd = shellcmd + ['pkill', 'lldb-server']
- cleandircmd = WithProperties('ssh %(remote_host)s rm -r %(remote_dir)s/*')
- f.addStep(ShellCommand(name="rsync lldb-server",
- command=['rsync',
- '-havL',
- 'bin/lldb-server',
- WithProperties('%(remote_host)s:%(remote_dir)s')],
- description="rsync lldb-server " + stepDesc,
- haltOnFailure=True,
- env=env,
- workdir='%s' % llvm_builddir))
- f.addStep(ShellCommand(name="rsync python2.7",
- command=['rsync',
- '-havL',
- 'lib/python2.7',
- WithProperties('%(remote_host)s:%(remote_dir)s')],
- description="rsync python2.7 " + stepDesc,
- haltOnFailure=True,
- env=env,
- workdir='%s' % llvm_builddir))
- elif remote_config.platform is 'android':
- shellcmd = ['adb',
- '-s',
- WithProperties('%(deviceid)s'),
- 'shell']
- hostname = '127.0.0.1'
- launchcmd = ['screen', '-d', '-m'] + shellcmd + [WithProperties("TMPDIR=%(remote_dir)s/tmp")]
- terminatecmd = 'ps | grep lldb-server | awk \'{print $2}\' | xargs'
- terminatecmd = WithProperties('adb -s %(deviceid)s shell ' + terminatecmd + ' adb -s %(deviceid)s shell kill')
- cleandircmd = WithProperties('adb -s %(deviceid)s shell rm -rf %(remote_dir)s/*')
- # compile lldb-server for target platform
- f = getLLDBCmakeAndCompileSteps(f,
- 'gcc',
- build_type,
- ['lldb-server'],
- bindir,
- remote_config.platform,
- remote_config.host_arch,
- env)
-
- f.addStep(ShellCommand(name="adb push lldb-server " + stepDesc,
- command=['adb',
- '-s',
- WithProperties('%(deviceid)s'),
- 'push',
- remote_config.platform+'-' + remote_config.host_arch + '/bin/lldb-server',
- WithProperties('%(remote_dir)s/')],
- description="lldb-server",
- env=env,
- haltOnFailure=True,
- workdir='%s' % llvm_builddir))
- f.addStep(ShellCommand(name="Build fingerprint " + stepDesc,
- command=['adb',
- '-s',
- WithProperties('%(deviceid)s'),
- 'shell',
- 'getprop',
- 'ro.build.fingerprint'],
- description="get build fingerprint",
- env=env,
- haltOnFailure=False,
- workdir='%s' % llvm_builddir))
- # launch lldb-server
- f.addStep(ShellCommand(name="launch lldb-server " + stepDesc,
- command=launchcmd +
- [WithProperties('%(remote_dir)s/lldb-server'),
- 'platform',
- '--listen',
- WithProperties(hostname + ':%(remote_port)s'),
- '--server'],
- description="launch lldb-server on remote host",
- env=env,
- haltOnFailure=True,
- workdir='%s' % llvm_builddir))
- # test steps
- f = getLLDBTestSteps(f,
- bindir,
- remote_config.test_archs,
- remote_config.test_compilers,
- remote_config.platform,
- '%(remote_host)s',
- '%(remote_port)s',
- '%(remote_dir)s',
- env)
- # terminate lldb-server on remote host
- f.addStep(ShellCommand(name="terminate lldb-server " + stepDesc,
- command=terminatecmd,
- description="terminate lldb-server",
- env=env,
- workdir='%s' % llvm_builddir))
- # clean remote test directory
- f.addStep(ShellCommand(name="clean remote dir " + stepDesc,
- command=cleandircmd,
- description="clean remote dir",
- env=env))
- return f
-
-# Cmake bulid on Ubuntu
-# Build command sequence - cmake, ninja, ./dosep
-# Note: If test_archs or test_compilers is not specified, lldb-test will not be added to build factory
-def getLLDBUbuntuCMakeBuildFactory(build_compiler,
- build_type,
- local_test_archs=None,
- local_test_compilers=None,
- remote_configs=None,
- jobs='%(jobs)s',
- env=None):
- """Generate factory steps for ubuntu cmake builder
-
- Arguments:
- build_compiler -- string of compile name, example 'clang',
- the compiler will be used to build binaries for host platform
- build_type -- 'Debug' or 'Release',
- used to define build type for host platform as well as remote platform if any
- local_test_archs -- list of architectures, example ['i386','x86_64'],
- defines architectures to run local tests against, if None, local tests won't be executed
- local_test_compiler -- list of compilers, example ['clang','gcc4.8.2'],
- definds compilers to run local tests with, if None, local tests won't be executed
- remote_configs -- list of RemoteConfig objects, example [RemoteConfig(...)], if None, remote tests won't be executed
- jobs -- number of threads for compilation step, example 40
- default value is jobs number defined during slave creation
- env -- environment variables passed to shell commands
-
- """
- if env is None:
- env = {}
-
- llvm_srcdir = "llvm"
- llvm_builddir = "build"
- bindir='%(builddir)s/' + llvm_builddir + '/bin'
-
- f = buildbot.process.factory.BuildFactory()
-
- # Determine the build directory.
- f.addStep(SetProperty(name="get_builddir",
- command=["pwd"],
- property="builddir",
- description="set build dir",
- workdir="."))
- # Determine the binary directory of *-tblgen.
- f.addStep(SetProperty(name="get tblgen dir",
- command=["echo", WithProperties(bindir)],
- property="tblgen_bindir",
- description="set tblgen dir",
- workdir="."))
- # Get source code
- f = getLLDBSource(f,llvm_srcdir)
-
- # Clean Build Folder
- f.addStep(ShellCommand(name="clean",
- command="rm -rf *",
- description="clear build folder",
- env=env,
- workdir='%s' % llvm_builddir))
-
- f = getLLDBCmakeAndCompileSteps(f,
- build_compiler,
- build_type,
- [],
- bindir,
- 'linux',
- 'x86_64',
- env)
-
- # TODO: it will be good to check that architectures listed in test_archs are compatible with host architecture
- # For now, the caller of this function should make sure that each target architecture is supported by builder machine
-
- # Add local test steps
- f = getLLDBTestSteps(f,
- bindir,
- local_test_archs,
- local_test_compilers)
- # Remote test steps
- if remote_configs is not None:
- for config in remote_configs:
- f = getLLDBRemoteTestSteps(f,
- bindir,
- build_type,
- config,
- env)
- # archive test traces
- f = archiveLLDBTestTraces(f, "build/lldb-test-traces-*")
- return f
-
-# zip and upload test traces to google storage
-def archiveLLDBTestTraces(f, test_trace):
- f.addStep(ShellCommand(name="compress test traces",
- command=WithProperties("zip -r build-%(buildnumber)s " + test_trace),
- description="zip",
- haltOnFailure=False,
- flunkOnFailure=False,
- workdir='.'))
- f.addStep(ShellCommand(name="upload test traces",
- command=['gsutil',
- 'mv',
- WithProperties('build-%(buildnumber)s.zip'),
- WithProperties('gs://lldb_test_traces/%(buildername)s/')],
- description="upload to Google Storage",
- haltOnFailure=False,
- flunkOnFailure=False,
- workdir='.'))
- return f
-
-# for cmake and compile
-def getLLDBCmakeAndCompileSteps(f,
- build_compiler,
- build_type,
- ninja_target,
- bindir,
- target_platform,
- target_arch,
- env=None):
-
- if env is None:
- env={}
- llvm_builddir = 'build'
- if target_platform is 'android':
- llvm_builddir = 'build/android-' + target_arch
- # Configure
- f = getLLDBCMakeStep(f,
- build_compiler,
- build_type,
- bindir,
- target_platform,
- target_arch,
- env)
- # Compile
- f.addStep(WarningCountingShellCommand(name='ninja-%s-%s'%(target_platform, target_arch),
- command=['nice','-n', '10',
- 'ninja',
- WithProperties('-j%(jobs)s')] + ninja_target,
- env=env,
- haltOnFailure=True,
- workdir=llvm_builddir))
- return f
-
-def getLLDBCMakeStep(f,
- build_compiler,
- build_type,
- bindir,
- target_platform,
- target_arch,
- env=None):
- if target_platform is 'linux':
- return getLLDBLinuxCMakeStep(f,
- build_compiler,
- build_type,
- target_arch,
- env)
- elif target_platform is 'android':
- return getLLDBAndroidCMakeStep(f,
- build_compiler,
- build_type,
- bindir,
- target_arch,
- env)
-
-def getCCompilerCmd(compiler):
- if compiler == "clang":
- return "clang"
- elif compiler == "gcc":
- return "gcc"
-
-def getCxxCompilerCmd(compiler):
- if compiler == "clang":
- return "clang++"
- elif compiler == "gcc":
- return "g++"
-
-def getLLDBLinuxCMakeStep(f,
- build_compiler,
- build_type,
- target_arch,
- env=None):
- if env is None:
- env = {}
- llvm_srcdir = 'llvm'
- llvm_builddir = 'build'
- # Construct cmake
- cmake_args = ["cmake", "-GNinja"]
- cmake_args.append(WithProperties("-DCMAKE_BUILD_TYPE=%s" % build_type))
- cmake_args.append(WithProperties('%(builddir)s/' + llvm_srcdir))
- cmake_args.append("-DCMAKE_C_COMPILER=%s" % getCCompilerCmd(build_compiler))
- cmake_args.append("-DCMAKE_CXX_COMPILER=%s" % getCxxCompilerCmd(build_compiler))
-
- f.addStep(Configure(name='cmake-linux-%s' % (target_arch),
- command=cmake_args,
- env=env,
- haltOnFailure=True,
- workdir=llvm_builddir))
- return f
-
-def getLLDBAndroidCMakeStep(f,
- build_compiler,
- build_type,
- bindir,
- target_arch,
- env):
- if env is None:
- env = {}
- llvm_srcdir = 'llvm'
- llvm_builddir = 'build/android-' + target_arch
- abiMap={
- 'i386':'x86',
- 'arm':'armeabi',
- 'aarch64':'aarch64'
- }
- # Construct cmake
- cmake_args = ["cmake", "-GNinja"]
- cmake_args.append(WithProperties("-DCMAKE_BUILD_TYPE=%s" % build_type))
- cmake_args.append(WithProperties('%(builddir)s/' + llvm_srcdir))
- cmake_args.append(WithProperties('-DCMAKE_TOOLCHAIN_FILE=' + '%(builddir)s/' + llvm_srcdir + '/tools/lldb/cmake/platforms/Android.cmake'))
- cmake_args.append(WithProperties('-DANDROID_TOOLCHAIN_DIR=' + '%(toolchain_build)s'))
- cmake_args.append('-DANDROID_ABI=' + abiMap[target_arch])
- cmake_args.append('-DCMAKE_CXX_COMPILER_VERSION=4.9')
- cmake_args.append('-DLLVM_TARGET_ARCH=' + target_arch)
- cmake_args.append('-DLLVM_HOST_TRIPLE=' + target_arch + '-unknown-linux-android')
- cmake_args.append(WithProperties('-DLLVM_TABLEGEN=%(tblgen_bindir)s/llvm-tblgen'))
- cmake_args.append(WithProperties('-DCLANG_TABLEGEN=%(tblgen_bindir)s/clang-tblgen'))
-
- f.addStep(Configure(name='cmake-android-%s' % target_arch,
- command=cmake_args,
- env=env,
- haltOnFailure=True,
- workdir=llvm_builddir))
- return f
-# Set symbolic links, so the folder structure will be llvm, llvm/tools/clang, llvm/tools/lldb
-def getSymbLinkSteps(f, lldb_srcdir):
- f.addStep(ShellCommand(name='set symbolic link clang',
- command=['ln', '-nfs',
- WithProperties('%(builddir)s/' + lldb_srcdir + '/llvm/tools/clang'),
- 'clang'],
- workdir=WithProperties('%(builddir)s')))
- f.addStep(ShellCommand(name='set symbolic link lldb',
- command=['ln', '-nfs',
- WithProperties('%(builddir)s/' + lldb_srcdir),
- lldb_srcdir + '/llvm/tools/lldb'],
- workdir=WithProperties('%(builddir)s')))
- f.addStep(ShellCommand(name='set symbolic link llvm',
- command=['ln', '-nfs',
- WithProperties('%(builddir)s/' + lldb_srcdir + '/llvm'),
- 'llvm'],
- workdir=WithProperties('%(builddir)s')))
- return f
-
-def getLLDBxcodebuildFactory(use_cc=None,
- build_type='Debug',
- remote_configs=None,
- env=None):
- if env is None:
- env = {}
- f = buildbot.process.factory.BuildFactory()
- f.addStep(SetProperty(name='get_builddir',
- command=['pwd'],
- property='builddir',
- description='set build dir',
- workdir='.'))
- lldb_srcdir = 'lldb'
- OBJROOT='%(builddir)s/' + lldb_srcdir + '/build'
- f.addStep(SetProperty(name='get_bindir',
- command=['echo',
- WithProperties('%(builddir)s/' + lldb_srcdir + '/build/' + build_type)],
- property='lldb_bindir',
- description='set bin dir',
- workdir='.'))
- # cleaning out the build directory is vital for codesigning.
- f.addStep(ShellCommand(name='clean.lldb-buid',
- command=['rm', '-rf', WithProperties(OBJROOT)],
- haltOnFailure=True,
- workdir=WithProperties('%(builddir)s')))
- f.addStep(ShellCommand(name='clean.llvm-buid',
- command=['rm', '-rf', '%s/llvm-build' % lldb_srcdir ],
- haltOnFailure=True,
- workdir=WithProperties('%(builddir)s')))
- f.addStep(ShellCommand(name='clean.test trace',
- command='rm -rf build/*',
- haltOnFailure=False,
- flunkOnFailure=False,
- workdir='.'))
- # Remove symbolic link to lldb, otherwise xcodebuild will have circular dependency
- f.addStep(ShellCommand(name='remove symbolic link lldb',
- command=['rm',
- lldb_srcdir + '/llvm/tools/lldb'],
- haltOnFailure=False,
- flunkOnFailure=False,
- workdir=WithProperties('%(builddir)s')))
- f.addStep(SVN(name='svn-lldb',
- mode='update',
- baseURL='http://llvm.org/svn/llvm-project/lldb/',
- defaultBranch='trunk',
- workdir=lldb_srcdir))
- f.addStep(SVN(name='svn-llvm',
- mode='update',
- baseURL='http://llvm.org/svn/llvm-project/llvm/',
- defaultBranch='trunk',
- workdir='%s/llvm' % lldb_srcdir))
- f.addStep(SVN(name='svn-clang',
- mode='update',
- baseURL='http://llvm.org/svn/llvm-project/cfe/',
- defaultBranch='trunk',
- workdir='%s/llvm/tools/clang' % lldb_srcdir))
-# setup keychain for codesign
-# In order for the codesigning to work inside of buildbot, security must be
-# called to unlock the keychain, which requires a password.
-# I've set up a special keychain for this purpose, so as to not compromise
-# the login password of the buildslave.
-# This means I have to set the special keychain as the default and unlock it
-# prior to building the sources.
- f.addStep(ShellCommand(name='check.keychain',
- command=['security', 'default-keychain'],
- haltOnFailure=True,
- workdir=WithProperties('%(builddir)s')))
- f.addStep(ShellCommand(name='find.certificate',
- command=['security', 'find-certificate', '-c',
- 'lldb_codesign'],
- haltOnFailure=True,
- workdir=WithProperties('%(builddir)s')))
-# Building the sources
-#
- buildcmd = ' '.join(['xcrun',
- 'xcodebuild',
- '-target',
- 'desktop',
- '-configuration',
- build_type,
- 'SYMROOT=' + OBJROOT,
- 'OBJROOT=' + OBJROOT])
- f.addStep(ShellCommand(name='lldb-build',
- command=WithProperties(buildcmd + " || " + buildcmd),
- haltOnFailure=True,
- workdir=lldb_srcdir))
-
-# Testing
-#
- if not use_cc:
- use_cc = '/Applications/Xcode.app/Contents/Developer/Toolchains/'
- use_cc += 'XcodeDefault.xctoolchain/usr/bin/clang'
- f.addStep(SetProperty(name='set.cc',
- command=['xcrun', '-find', 'clang'],
- property='use_cc',
- description='set cc',
- workdir=lldb_srcdir))
- else:
- f.addStep(SetProperty(name='set.cc',
- command=['echo', use_cc],
- property='use_cc',
- description='set cc',
- workdir=lldb_srcdir))
- DOTEST_OPTS = ' '.join(['--executable',
- '%(lldb_bindir)s/lldb',
- '--filecheck',
- '%(lldb_bindir)s/FileCheck',
- '--framework', '%(lldb_bindir)s/LLDB.framework',
- '-A', 'x86_64',
- '-C', 'clang',
- '-s', '../../build/lldb-test-traces'])
- f.addStep(LitTestCommand(name='lldb-test',
- command=['./dosep.py',
- '--options',
- WithProperties(DOTEST_OPTS)],
- haltOnFailure=False,
- workdir='%s/test' % lldb_srcdir,
- env={'DYLD_FRAMEWORK_PATH' : WithProperties('%(lldb_bindir)s')}))
-# Remote test steps
- if remote_configs is not None:
- # Source structure to use cmake command
- f.addStep(SetProperty(name='get tblgen bindir',
- command=['echo',
- WithProperties('%(builddir)s/' + lldb_srcdir + '/llvm-build/Release+Asserts/x86_64/Release+Asserts/bin')],
- property='tblgen_bindir',
- description='set tblgen binaries dir',
- workdir='.'))
- f = getSymbLinkSteps(f, lldb_srcdir)
- for config in remote_configs:
- f = getLLDBRemoteTestSteps(f,
- '%(lldb_bindir)s',
- build_type,
- config,
- env={'DYLD_FRAMEWORK_PATH' : WithProperties('%(lldb_bindir)s')})
-# Compress and upload test log
- f = archiveLLDBTestTraces(f, "build/lldb-test-traces*")
-
-# Results go in a directory coded named according to the date and time of the test run, e.g.:
-#
-# 2012-10-16-11_26_48/Failure-x86_64-_Applications_Xcode.app_Contents_Developer_Toolchains_XcodeDefault.xctoolchain_usr_bin_clang-TestLogging.LogTestCase.test_with_dsym.log
-#
-# Possible results are ExpectedFailure, Failure, SkippedTest, UnexpectedSuccess, and Error. return f
- return f
-
-def getShellCommandStep(f,
- name,
- command,
- description="",
- flunkOnFailure=True,
- haltOnFailure=True,
- alwaysRun=False,
- workdir='scripts',
- env=None):
- if env is None:
- env = {}
- f.addStep(ShellCommand(name=name,
- command=command,
- description=description,
- env=env,
- flunkOnFailure=flunkOnFailure,
- haltOnFailure=haltOnFailure,
- alwaysRun=alwaysRun,
- workdir=workdir))
-
-# get configuration of tests
-# config file should be placed under builddir on builder machine
-# file name: test_cfg.json
-# content: json format with keys test[num]:target-compiler-architecture
-# example: {"test1":"android-gcc4.9-i386",
-# "test2":"local-clang-x86",
-# "test3":"local-clang-i386"}
-def getTestConfig(f):
- def getRemoteCfg(rc, stdout, stderr):
- return json.loads(stdout)
- f.addStep(SetProperty(name="get test config",
- command="cat test_cfg.json",
- extract_fn=getRemoteCfg,
- description="get remote target",
- workdir="scripts"))
- return f
-def getTestSteps(f, scriptExt, pathSep):
- # buildbot doesn't support dynamic step creation, so create 9 test steps as place holder
- # then each builder will define available tests in test_cfg.json
- # if there're less than 9 tests defined on certain builder, extra steps will be skipped and hidden from test details view
- # **hide step is not supported by buildbot 0.8.5
- # flunkOnFailure only takes boolean value, and cannot take configurable property.
- # workaround: don't flunk the last three tests
- # put non flunkable tests at the last three, test7, test8, test9
- getTestConfig(f)
- for x in range(1, 10):
- test='test'+str(x)
- f.addStep(LitTestCommand(name=test,
- command=[pathSep + 'test' + scriptExt,
- Property(test)],
- description=["testing"],
- descriptionDone=[WithProperties('%('+test+':-)s')],
- doStepIf=lambda step: step.build.hasProperty(step.name),
- flunkOnFailure=(x<7),
- warnOnFailure=(x<7),
- workdir='scripts'))
-
-def getLLDBScriptCommandsFactory(
- downloadBinary=True,
- buildAndroid=False,
- runTest=True,
- scriptExt='.sh',
- extra_cmake_args=None,
- depends_on_projects=None,
- ):
- if scriptExt is '.bat':
- pathSep = '.\\'
- else:
- pathSep = './'
-
- if extra_cmake_args is None:
- extra_cmake_args = []
-
- if depends_on_projects is None:
- f = buildbot.process.factory.BuildFactory()
- else:
- f = LLVMBuildFactory(
- depends_on_projects=depends_on_projects)
-
- # Update scripts
- getShellCommandStep(f, name='update scripts',
- command=['updateScripts' + scriptExt])
-
- # Acquire lock
- if downloadBinary:
- getShellCommandStep(f, name='acquire lock',
- command=[pathSep + 'acquireLock' + scriptExt,
- 'totBuild'],
- description='get')
-
- # Checkout source code
- getShellCommandStep(f, name='checkout source code',
- command=[pathSep + 'checkoutSource' + scriptExt,
- WithProperties('%(revision)s')])
-
- # Set source revision
- f.addStep(SetProperty(name="set revision",
- command=[pathSep + 'getRevision' + scriptExt],
- property="got_revision",
- workdir="scripts"))
-
- # Configure
- getShellCommandStep(f, name='cmake local',
- command=[pathSep + 'cmake' + scriptExt] + extra_cmake_args)
-
- # Build
- getShellCommandStep(f, name='ninja build local',
- command=[pathSep + 'buildLocal' + scriptExt])
- if buildAndroid:
- getShellCommandStep(f, name='build android',
- command=[pathSep + 'buildAndroid' + scriptExt])
-
- # Get lldb-server binaries
- if downloadBinary:
- getShellCommandStep(f, name='get lldb-server binaries',
- command=[pathSep + 'downloadBinaries' + scriptExt,
- WithProperties('%(got_revision)s')])
-
- # Test
- if runTest:
- f.addStep(LitTestCommand(name="run unit tests",
- command=[pathSep + 'testUnit' + scriptExt],
- description=["testing"],
- descriptionDone=["unit test"],
- workdir='scripts'))
- getTestSteps(f, scriptExt, pathSep)
- # upload test traces
- getShellCommandStep(f, name='upload test traces',
- command=[pathSep + 'uploadTestTrace' + scriptExt,
- WithProperties('%(buildnumber)s'),
- WithProperties('%(buildername)s')],
- flunkOnFailure=False)
-
- # Upload lldb-server binaries and trigger android builders
- if buildAndroid:
- getShellCommandStep(f, name='upload lldb-server binaries',
- command=[pathSep + 'uploadBinaries' + scriptExt])
- f.addStep(trigger.Trigger(schedulerNames=['lldb_android_scheduler'],
- updateSourceStamp=False,
- waitForFinish=False))
- # Release lock
- if downloadBinary:
- getShellCommandStep(f, name='release lock',
- command=[pathSep + 'releaseLock' + scriptExt,
- 'totBuild'],
- description='release',
- alwaysRun=True)
- return f