|
@@ -15,6 +15,7 @@ import watch_dirs
|
|
class SimpleConfig(object):
|
|
class SimpleConfig(object):
|
|
def __init__(self, config):
|
|
def __init__(self, config):
|
|
self.build_config = config
|
|
self.build_config = config
|
|
|
|
+ self.maxjobs = 32 * multiprocessing.cpu_count()
|
|
|
|
|
|
def run_command(self, binary):
|
|
def run_command(self, binary):
|
|
return [binary]
|
|
return [binary]
|
|
@@ -22,17 +23,20 @@ class SimpleConfig(object):
|
|
|
|
|
|
# ValgrindConfig: compile with some CONFIG=config, but use valgrind to run
|
|
# ValgrindConfig: compile with some CONFIG=config, but use valgrind to run
|
|
class ValgrindConfig(object):
|
|
class ValgrindConfig(object):
|
|
- def __init__(self, config):
|
|
|
|
|
|
+ def __init__(self, config, tool):
|
|
self.build_config = config
|
|
self.build_config = config
|
|
|
|
+ self.tool = tool
|
|
|
|
+ self.maxjobs = 4 * multiprocessing.cpu_count()
|
|
|
|
|
|
def run_command(self, binary):
|
|
def run_command(self, binary):
|
|
- return ['valgrind', binary]
|
|
|
|
|
|
+ return ['valgrind', binary, '--tool=%s' % self.tool]
|
|
|
|
|
|
|
|
|
|
# SanConfig: compile with CONFIG=config, filter out incompatible binaries
|
|
# SanConfig: compile with CONFIG=config, filter out incompatible binaries
|
|
class SanConfig(object):
|
|
class SanConfig(object):
|
|
def __init__(self, config):
|
|
def __init__(self, config):
|
|
self.build_config = config
|
|
self.build_config = config
|
|
|
|
+ self.maxjobs = 16 * multiprocessing.cpu_count()
|
|
|
|
|
|
def run_command(self, binary):
|
|
def run_command(self, binary):
|
|
if '_ssl_' in binary:
|
|
if '_ssl_' in binary:
|
|
@@ -47,7 +51,8 @@ _CONFIGS = {
|
|
'msan': SanConfig('msan'),
|
|
'msan': SanConfig('msan'),
|
|
'asan': SanConfig('asan'),
|
|
'asan': SanConfig('asan'),
|
|
'gcov': SimpleConfig('gcov'),
|
|
'gcov': SimpleConfig('gcov'),
|
|
- 'valgrind': ValgrindConfig('dbg'),
|
|
|
|
|
|
+ 'memcheck': ValgrindConfig('dbg', 'memcheck'),
|
|
|
|
+ 'helgrind': ValgrindConfig('dbg', 'helgrind')
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -91,15 +96,18 @@ def _build_and_run(check_cancelled):
|
|
return 1
|
|
return 1
|
|
|
|
|
|
# run all the tests
|
|
# run all the tests
|
|
- if not jobset.run(itertools.ifilter(
|
|
|
|
- lambda x: x is not None, (
|
|
|
|
- config.run_command(x)
|
|
|
|
- for config in run_configs
|
|
|
|
- for filt in filters
|
|
|
|
- for x in itertools.chain.from_iterable(itertools.repeat(
|
|
|
|
- glob.glob('bins/%s/%s_test' % (
|
|
|
|
- config.build_config, filt)),
|
|
|
|
- runs_per_test)))), check_cancelled):
|
|
|
|
|
|
+ if not jobset.run(
|
|
|
|
+ itertools.ifilter(
|
|
|
|
+ lambda x: x is not None, (
|
|
|
|
+ config.run_command(x)
|
|
|
|
+ for config in run_configs
|
|
|
|
+ for filt in filters
|
|
|
|
+ for x in itertools.chain.from_iterable(itertools.repeat(
|
|
|
|
+ glob.glob('bins/%s/%s_test' % (
|
|
|
|
+ config.build_config, filt)),
|
|
|
|
+ runs_per_test)))),
|
|
|
|
+ check_cancelled,
|
|
|
|
+ maxjobs=min(c.maxjobs for c in run_configs)):
|
|
return 2
|
|
return 2
|
|
|
|
|
|
return 0
|
|
return 0
|