@ -6,37 +6,10 @@ gbenchmark is a Waf tool for benchmark builds in Ardupilot
@@ -6,37 +6,10 @@ 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_cmake ( ctx , bldnode ) :
env = ctx . env
my_build_node = bldnode . find_dir ( env . GBENCHMARK_BUILD_REL )
if not my_build_node :
bldnode . make_node ( env . GBENCHMARK_BUILD_REL ) . mkdir ( )
prefix_node = bldnode . make_node ( env . GBENCHMARK_PREFIX_REL )
cmake_vars = {
' CMAKE_BUILD_TYPE ' : ' Release ' ,
' CMAKE_INSTALL_PREFIX:PATH ' : prefix_node . abspath ( ) ,
}
cmake_vars = ' ' . join ( " -D %s = ' %s ' " % v for v in cmake_vars . items ( ) )
cmd = ' %s %s %s %s ' % (
env . CMAKE [ 0 ] ,
env . GBENCHMARK_SRC ,
cmake_vars ,
env . GBENCHMARK_GENERATOR_OPTION
)
ctx . cmd_and_log (
cmd ,
cwd = env . GBENCHMARK_BUILD ,
quiet = Context . BOTH ,
)
def configure ( cfg ) :
env = cfg . env
env . HAS_GBENCHMARK = False
@ -49,30 +22,12 @@ def configure(cfg):
@@ -49,30 +22,12 @@ def configure(cfg):
)
return
cfg . find_program ( ' cmake ' , mandatory = False )
if not env . CMAKE :
return
env . GBENCHMARK_CMAKE_GENERATOR = None
cfg . find_program ( [ ' ninja ' , ' ninja-build ' ] , var = ' NINJA ' , mandatory = False )
if env . NINJA :
env . GBENCHMARK_CMAKE_GENERATOR = ' Ninja '
cfg . load ( ' cmake ' )
env . GBENCHMARK_GENERATOR_OPTION = ' '
if env . GBENCHMARK_CMAKE_GENERATOR :
env . GBENCHMARK_GENERATOR_OPTION = ' -G %s ' % env . GBENCHMARK_CMAKE_GENERATOR
env . GBENCHMARK_PREFIX_REL = ' gbenchmark '
bldnode = cfg . bldnode . make_node ( cfg . variant )
prefix_node = bldnode . make_node ( ' gbenchmark ' )
my_build_node = bldnode . make_node ( ' gbenchmark_build ' )
my_src_node = cfg . srcnode . make_node ( ' modules/gbenchmark ' )
env . GBENCHMARK_PREFIX_REL = prefix_node . path_from ( bldnode )
env . GBENCHMARK_BUILD = my_build_node . abspath ( )
env . GBENCHMARK_BUILD_REL = my_build_node . path_from ( bldnode )
env . GBENCHMARK_SRC = my_src_node . abspath ( )
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 ( ) ]
@ -81,57 +36,32 @@ def configure(cfg):
@@ -81,57 +36,32 @@ def configure(cfg):
env . append_value ( ' GIT_SUBMODULES ' , ' gbenchmark ' )
env . HAS_GBENCHMARK = True
class gbenchmark_build ( Task . Task ) :
def __init__ ( self , * k , * * kw ) :
super ( gbenchmark_build , self ) . __init__ ( * k , * * kw )
bldnode = self . generator . bld . bldnode
output_list = [
' %s / %s ' % ( self . env . GBENCHMARK_PREFIX_REL , path )
for path in (
' include/benchmark/benchmark.h ' ,
' include/benchmark/macros.h ' ,
' include/benchmark/benchmark_api.h ' ,
' include/benchmark/reporter.h ' ,
' lib/libbenchmark.a ' ,
)
]
self . outputs . extend ( [ bldnode . make_node ( f ) for f in output_list ] )
def run ( self ) :
bld = self . generator . bld
cmds = [ ]
try :
# Generate build system first, if necessary
my_build_node = bld . bldnode . find_dir ( self . env . GBENCHMARK_BUILD_REL )
if not ( my_build_node and my_build_node . find_resource ( ' CMakeCache.txt ' ) ) :
_configure_cmake ( bld , bld . bldnode )
# Build gbenchmark
cmd = ' %s --build %s --target install ' % (
self . env . CMAKE [ 0 ] ,
self . env . GBENCHMARK_BUILD
)
bld . cmd_and_log (
cmd ,
cwd = self . env . GBENCHMARK_BUILD ,
quiet = Context . BOTH ,
)
return 0
except WafError as e :
print ( e )
if hasattr ( e , ' stderr ' ) :
print ( ' ' )
print ( e . stderr )
return 1
def __str__ ( self ) :
return ' Google Benchmark '
gbenchmark_build = Task . always_run ( Task . update_outputs ( gbenchmark_build ) )
build_task = None
@conf
def libbenchmark ( bld ) :
prefix_node = bld . bldnode . make_node ( bld . env . GBENCHMARK_PREFIX_REL )
gbenchmark_cmake = bld (
features = ' cmake_configure ' ,
cmake_src = ' modules/gbenchmark ' ,
cmake_bld = ' gbenchmark_build ' ,
name = ' gbenchmark ' ,
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_cmake . cmake_build ( ' install ' , target = outputs )
@feature ( ' gbenchmark ' )
@before_method ( ' process_use ' )
@ -142,12 +72,10 @@ def append_gbenchmark_use(self):
@@ -142,12 +72,10 @@ def append_gbenchmark_use(self):
@feature ( ' gbenchmark ' )
@after_method ( ' process_source ' )
def wait_for_gbenchmark_build ( self ) :
global build_task
if not build_task :
build_task = self . create_task ( ' gbenchmark_build ' )
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 ( build_task )
task . dep_nodes . extend ( build_task . outputs )
task . set_run_after ( gbenchmark_install . cmake_ build_task)
task . dep_nodes . extend ( gbenchmark_install . cmake_ build_task. outputs )