|
|
|
@ -15,6 +15,7 @@ import watch_dirs |
|
|
|
|
class SimpleConfig(object): |
|
|
|
|
def __init__(self, config): |
|
|
|
|
self.build_config = config |
|
|
|
|
self.maxjobs = 32 * multiprocessing.cpu_count() |
|
|
|
|
|
|
|
|
|
def run_command(self, binary): |
|
|
|
|
return [binary] |
|
|
|
@ -22,11 +23,13 @@ class SimpleConfig(object): |
|
|
|
|
|
|
|
|
|
# ValgrindConfig: compile with some CONFIG=config, but use valgrind to run |
|
|
|
|
class ValgrindConfig(object): |
|
|
|
|
def __init__(self, config): |
|
|
|
|
def __init__(self, config, tool): |
|
|
|
|
self.build_config = config |
|
|
|
|
self.tool = tool |
|
|
|
|
self.maxjobs = 4 * multiprocessing.cpu_count() |
|
|
|
|
|
|
|
|
|
def run_command(self, binary): |
|
|
|
|
return ['valgrind', binary] |
|
|
|
|
return ['valgrind', binary, '--tool=%s' % self.tool] |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# different configurations we can run under |
|
|
|
@ -37,7 +40,8 @@ _CONFIGS = { |
|
|
|
|
'msan': SimpleConfig('msan'), |
|
|
|
|
'asan': SimpleConfig('asan'), |
|
|
|
|
'gcov': SimpleConfig('gcov'), |
|
|
|
|
'valgrind': ValgrindConfig('dbg'), |
|
|
|
|
'memcheck': ValgrindConfig('dbg', 'memcheck'), |
|
|
|
|
'helgrind': ValgrindConfig('dbg', 'helgrind') |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -81,14 +85,18 @@ def _build_and_run(check_cancelled): |
|
|
|
|
return 1 |
|
|
|
|
|
|
|
|
|
# run all the tests |
|
|
|
|
if not jobset.run(( |
|
|
|
|
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 0 |
|
|
|
|