summaryrefslogtreecommitdiff
path: root/site_scons/site_tools/mongo_benchmark.py
blob: c765adba744b809eee89bd5730d0ac57efb46946 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
"""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')