[dpdk-dev,4/6] examples: allow building all examples as part of meson build

Message ID 20180329135436.92878-5-bruce.richardson@intel.com (mailing list archive)
State Accepted, archived
Delegated to: Bruce Richardson
Headers

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/Intel-compilation fail Compilation issues

Commit Message

Bruce Richardson March 29, 2018, 1:54 p.m. UTC
  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>
---
 examples/meson.build | 45 ++++++++++++++++++++++++++++++++-------------
 1 file changed, 32 insertions(+), 13 deletions(-)
  

Patch

diff --git a/examples/meson.build b/examples/meson.build
index 2c6b3f889..16c3ab005 100644
--- a/examples/meson.build
+++ b/examples/meson.build
@@ -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