Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Ardupilot
GitHub Repository: Ardupilot/ardupilot
Path: blob/master/Tools/ardupilotwaf/gbenchmark.py
9726 views
1
# encoding: utf-8
2
3
# flake8: noqa
4
5
"""
6
gbenchmark is a Waf tool for benchmark builds in Ardupilot
7
"""
8
9
from waflib import Build, Context, Task
10
from waflib.Configure import conf
11
from waflib.TaskGen import feature, before_method, after_method
12
from waflib.Errors import WafError
13
14
def configure(cfg):
15
env = cfg.env
16
env.HAS_GBENCHMARK = False
17
18
if env.TOOLCHAIN != 'native':
19
cfg.msg(
20
'Gbenchmark',
21
'cross-compilation currently not supported',
22
color='YELLOW',
23
)
24
return
25
26
cfg.load('cmake')
27
28
env.GBENCHMARK_PREFIX_REL = 'gbenchmark'
29
30
bldnode = cfg.bldnode.make_node(cfg.variant)
31
prefix_node = bldnode.make_node(env.GBENCHMARK_PREFIX_REL)
32
33
env.INCLUDES_GBENCHMARK = [prefix_node.make_node('include').abspath()]
34
env.LIBPATH_GBENCHMARK = [prefix_node.make_node('lib').abspath()]
35
env.LIB_GBENCHMARK = ['benchmark']
36
37
env.append_value('GIT_SUBMODULES', 'gbenchmark')
38
env.HAS_GBENCHMARK = True
39
40
@conf
41
def libbenchmark(bld):
42
prefix_node = bld.bldnode.make_node(bld.env.GBENCHMARK_PREFIX_REL)
43
44
gbenchmark = bld.cmake(
45
name='gbenchmark',
46
cmake_src='modules/gbenchmark',
47
cmake_bld='gbenchmark_build',
48
cmake_vars=dict(
49
CMAKE_BUILD_TYPE='Release',
50
CMAKE_INSTALL_PREFIX=prefix_node.abspath(),
51
BENCHMARK_ENABLE_GTEST_TESTS='OFF',
52
BENCHMARK_ENABLE_TESTING='OFF',
53
),
54
)
55
56
prefix_node = bld.bldnode.make_node(bld.env.GBENCHMARK_PREFIX_REL)
57
output_paths = (
58
'lib/libbenchmark.a',
59
'include/benchmark/benchmark.h',
60
)
61
outputs = [prefix_node.make_node(path) for path in output_paths]
62
gbenchmark.build('install', target=outputs)
63
64
@feature('gbenchmark')
65
@before_method('process_use')
66
def append_gbenchmark_use(self):
67
self.use = self.to_list(getattr(self, 'use', []))
68
if 'GBENCHMARK' not in self.use:
69
self.use.append('GBENCHMARK')
70
71
@feature('gbenchmark')
72
@after_method('process_source')
73
def wait_for_gbenchmark_install(self):
74
gbenchmark_install = self.bld.get_tgen_by_name('gbenchmark_install')
75
gbenchmark_install.post()
76
77
for task in self.compiled_tasks:
78
task.set_run_after(gbenchmark_install.cmake_build_task)
79
task.dep_nodes.extend(gbenchmark_install.cmake_build_task.outputs)
80
81