examples: allow building all as part of meson build

To test building all relevant example applications as part of a build, we
add support for the "all" keyword to be passed to the "examples" build
option. Since not all examples can actually be built on all systems,
we also add support for the "build" option inside the sub-dirs. However,
in case where "all" is not used, and a particular example is requested
to be built, we will error out if building the requested app is not
possible.

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Tested-by: Harry van Haaren <harry.van.haaren@intel.com>
This commit is contained in:
Bruce Richardson 2018-03-29 14:54:34 +01:00
parent 4f49c9f5be
commit 038e5ecc76

View File

@ -7,8 +7,20 @@ if get_option('default_library') == 'static'
endif
execinfo = cc.find_library('execinfo', required: false)
foreach example: get_option('examples').split(',')
allow_skips = true # don't flag an error if we can't build an app
if get_option('examples').to_lower() == 'all'
dirs = run_command('sh', '-c',
'cd $MESON_SOURCE_ROOT/$MESON_SUBDIR && for d in * ; do if [ -d $d ] ; then echo $d ; fi ; done')
examples = dirs.stdout().split()
else
examples = get_option('examples').split(',')
allow_skips = false # error out if we can't build a requested app
endif
foreach example: examples
name = example
build = true
sources = []
allow_experimental_apis = false
cflags = machine_args
@ -17,17 +29,24 @@ foreach example: get_option('examples').split(',')
deps = ['eal', 'mempool', 'net', 'mbuf', 'ethdev', 'cmdline']
subdir(example)
dep_objs = ext_deps
foreach d:deps
dep_objs += [get_variable(get_option('default_library') + '_rte_' + d)]
endforeach
if allow_experimental_apis
cflags += '-DALLOW_EXPERIMENTAL_API'
if build
dep_objs = ext_deps
foreach d:deps
dep_objs += [get_variable(
get_option('default_library') + '_rte_' + d)]
endforeach
if allow_experimental_apis
cflags += '-DALLOW_EXPERIMENTAL_API'
endif
executable('dpdk-' + name, sources,
include_directories: includes,
link_whole: driver_libs,
link_args: dpdk_extra_ldflags,
c_args: cflags,
dependencies: dep_objs)
elif not allow_skips
error('Cannot build requested example "' + name + '"')
else
message('Skipping example "' + name + '"')
endif
executable('dpdk-' + name, sources,
include_directories: includes,
link_whole: driver_libs,
link_args: dpdk_extra_ldflags,
c_args: cflags,
dependencies: dep_objs)
endforeach