mirror of
https://github.com/mongodb/mongo.git
synced 2024-11-30 00:56:44 +01:00
76 lines
2.3 KiB
Python
76 lines
2.3 KiB
Python
"""Pseudo-builders for building and registering benchmarks.
|
|
"""
|
|
import os
|
|
from SCons.Script import Action
|
|
|
|
def exists(env):
|
|
return True
|
|
|
|
_benchmarks = []
|
|
def register_benchmark(env, test):
|
|
_benchmarks.append(test.path)
|
|
env.Alias('$BENCHMARK_ALIAS', test)
|
|
|
|
def benchmark_list_builder_action(env, target, source):
|
|
ofile = open(str(target[0]), 'w')
|
|
try:
|
|
for s in _benchmarks:
|
|
print('\t' + str(s))
|
|
ofile.write('%s\n' % s)
|
|
finally:
|
|
ofile.close()
|
|
|
|
def build_benchmark(env, target, source, **kwargs):
|
|
|
|
bmEnv = env.Clone()
|
|
bmEnv.InjectThirdParty(libraries=['benchmark'])
|
|
|
|
if bmEnv.TargetOSIs('windows'):
|
|
bmEnv.Append(LIBS=["ShLwApi.lib"])
|
|
|
|
libdeps = kwargs.get('LIBDEPS', [])
|
|
libdeps.append('$BUILD_DIR/mongo/unittest/benchmark_main')
|
|
|
|
kwargs['LIBDEPS'] = libdeps
|
|
kwargs['INSTALL_ALIAS'] = ['benchmarks']
|
|
|
|
benchmark_test_components = {'tests', 'benchmarks'}
|
|
if (
|
|
'AIB_COMPONENT' in kwargs
|
|
and not kwargs['AIB_COMPONENT'].endswith('-benchmark')
|
|
):
|
|
kwargs['AIB_COMPONENT'] += '-benchmark'
|
|
|
|
if 'AIB_COMPONENTS_EXTRA' in kwargs:
|
|
benchmark_test_components = set(kwargs['AIB_COMPONENTS_EXTRA']).union(benchmark_test_components)
|
|
|
|
kwargs['AIB_COMPONENTS_EXTRA'] = benchmark_test_components
|
|
|
|
result = bmEnv.Program(target, source, **kwargs)
|
|
bmEnv.RegisterBenchmark(result[0])
|
|
hygienic = bmEnv.GetOption('install-mode') == 'hygienic'
|
|
if not hygienic:
|
|
installed_test = bmEnv.Install("#/build/benchmark/", result[0])
|
|
env.Command(
|
|
target="#@{}".format(os.path.basename(installed_test[0].path)),
|
|
source=installed_test,
|
|
action="${SOURCES[0]}"
|
|
)
|
|
else:
|
|
test_bin_name = os.path.basename(result[0].path)
|
|
env.Command(
|
|
target="#@{}".format(test_bin_name),
|
|
source=["$PREFIX_BINDIR/{}".format(test_bin_name)],
|
|
action="${SOURCES[0]}"
|
|
)
|
|
|
|
return result
|
|
|
|
|
|
def generate(env):
|
|
env.Command('$BENCHMARK_LIST', env.Value(_benchmarks),
|
|
Action(benchmark_list_builder_action, "Generating $TARGET"))
|
|
env.AddMethod(register_benchmark, 'RegisterBenchmark')
|
|
env.AddMethod(build_benchmark, 'Benchmark')
|
|
env.Alias('$BENCHMARK_ALIAS', '$BENCHMARK_LIST')
|