mirror of https://github.com/ArduPilot/ardupilot
80 lines
2.3 KiB
Python
80 lines
2.3 KiB
Python
#!/usr/bin/env python
|
|
# encoding: utf-8
|
|
|
|
"""
|
|
gbenchmark is a Waf tool for benchmark builds in Ardupilot
|
|
"""
|
|
|
|
from waflib import Build, Context, Task
|
|
from waflib.Configure import conf
|
|
from waflib.TaskGen import feature, before_method, after_method
|
|
from waflib.Errors import WafError
|
|
|
|
def configure(cfg):
|
|
env = cfg.env
|
|
env.HAS_GBENCHMARK = False
|
|
|
|
if env.TOOLCHAIN != 'native':
|
|
cfg.msg(
|
|
'Gbenchmark',
|
|
'cross-compilation currently not supported',
|
|
color='YELLOW',
|
|
)
|
|
return
|
|
|
|
cfg.load('cmake')
|
|
|
|
env.GBENCHMARK_PREFIX_REL = 'gbenchmark'
|
|
|
|
bldnode = cfg.bldnode.make_node(cfg.variant)
|
|
prefix_node = bldnode.make_node(env.GBENCHMARK_PREFIX_REL)
|
|
|
|
env.INCLUDES_GBENCHMARK = [prefix_node.make_node('include').abspath()]
|
|
env.LIBPATH_GBENCHMARK = [prefix_node.make_node('lib').abspath()]
|
|
env.LIB_GBENCHMARK = ['benchmark']
|
|
|
|
env.append_value('GIT_SUBMODULES', 'gbenchmark')
|
|
env.HAS_GBENCHMARK = True
|
|
|
|
@conf
|
|
def libbenchmark(bld):
|
|
prefix_node = bld.bldnode.make_node(bld.env.GBENCHMARK_PREFIX_REL)
|
|
|
|
gbenchmark = bld.cmake(
|
|
name='gbenchmark',
|
|
cmake_src='modules/gbenchmark',
|
|
cmake_bld='gbenchmark_build',
|
|
cmake_vars=dict(
|
|
CMAKE_BUILD_TYPE='Release',
|
|
CMAKE_INSTALL_PREFIX=prefix_node.abspath(),
|
|
),
|
|
)
|
|
|
|
prefix_node = bld.bldnode.make_node(bld.env.GBENCHMARK_PREFIX_REL)
|
|
output_paths = (
|
|
'lib/libbenchmark.a',
|
|
'include/benchmark/benchmark.h',
|
|
'include/benchmark/macros.h',
|
|
'include/benchmark/benchmark_api.h',
|
|
'include/benchmark/reporter.h',
|
|
)
|
|
outputs = [prefix_node.make_node(path) for path in output_paths]
|
|
gbenchmark.build('install', target=outputs)
|
|
|
|
@feature('gbenchmark')
|
|
@before_method('process_use')
|
|
def append_gbenchmark_use(self):
|
|
self.use = self.to_list(getattr(self, 'use', []))
|
|
if 'GBENCHMARK' not in self.use:
|
|
self.use.append('GBENCHMARK')
|
|
|
|
@feature('gbenchmark')
|
|
@after_method('process_source')
|
|
def wait_for_gbenchmark_install(self):
|
|
gbenchmark_install = self.bld.get_tgen_by_name('gbenchmark_install')
|
|
gbenchmark_install.post()
|
|
|
|
for task in self.compiled_tasks:
|
|
task.set_run_after(gbenchmark_install.cmake_build_task)
|
|
task.dep_nodes.extend(gbenchmark_install.cmake_build_task.outputs)
|