* [dpdk-dev] [PATCH] install: fix flattening of examples directory @ 2020-11-10 17:08 Bruce Richardson 2020-11-10 17:09 ` Bruce Richardson ` (4 more replies) 0 siblings, 5 replies; 27+ messages in thread From: Bruce Richardson @ 2020-11-10 17:08 UTC (permalink / raw) To: dev; +Cc: david.marchand, Bruce Richardson, stable By installing the examples one-by-one in a loop in the examples meson.build file we effectively flatted out the structure of the examples folder and omitted some common and shared subfolders that were never directly built. Instead, we can remove the loop and just have the whole "examples" folder installed as-is in a single statement, preserving its directory structure, and thereby fixing the build of a number of the examples. Fixes: 2daf565f91b5 ("examples: install as part of ninja install") Cc: stable@dpdk.org Signed-off-by: Bruce Richardson <bruce.richardson@intel.com> --- examples/meson.build | 7 ------- meson.build | 3 +++ 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/examples/meson.build b/examples/meson.build index f17995532..46ec80919 100644 --- a/examples/meson.build +++ b/examples/meson.build @@ -47,13 +47,6 @@ all_examples = [ 'vm_power_manager/guest_cli', 'vmdq', 'vmdq_dcb', ] -# install all example code on install - irrespective of whether the example in -# question is to be built as part of this build or not. -foreach ex:all_examples - install_subdir(ex, - install_dir: get_option('datadir') + '/dpdk/examples', - exclude_files: 'meson.build') -endforeach if get_option('examples') == '' subdir_done() diff --git a/meson.build b/meson.build index 61d9a4f5f..45d974cd2 100644 --- a/meson.build +++ b/meson.build @@ -59,6 +59,9 @@ subdir('doc') # build any examples explicitly requested - useful for developers - and # install any example code into the appropriate install path subdir('examples') +install_subdir('examples', + install_dir: get_option('datadir') + '/dpdk', + exclude_files: 'meson.build') # build kernel modules if enabled if get_option('enable_kmods') -- 2.25.1 ^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: [dpdk-dev] [PATCH] install: fix flattening of examples directory 2020-11-10 17:08 [dpdk-dev] [PATCH] install: fix flattening of examples directory Bruce Richardson @ 2020-11-10 17:09 ` Bruce Richardson 2020-11-10 17:14 ` David Marchand 2020-11-10 17:33 ` [dpdk-dev] [dpdk-stable] " David Marchand ` (3 subsequent siblings) 4 siblings, 1 reply; 27+ messages in thread From: Bruce Richardson @ 2020-11-10 17:09 UTC (permalink / raw) To: dev; +Cc: david.marchand, stable Using correct address for David. :-( On Tue, Nov 10, 2020 at 05:08:09PM +0000, Bruce Richardson wrote: > By installing the examples one-by-one in a loop in the examples > meson.build file we effectively flatted out the structure of the examples > folder and omitted some common and shared subfolders that were never > directly built. Instead, we can remove the loop and just have the whole > "examples" folder installed as-is in a single statement, preserving its > directory structure, and thereby fixing the build of a number of the > examples. > > Fixes: 2daf565f91b5 ("examples: install as part of ninja install") > Cc: stable@dpdk.org > > Signed-off-by: Bruce Richardson <bruce.richardson@intel.com> > --- > examples/meson.build | 7 ------- > meson.build | 3 +++ > 2 files changed, 3 insertions(+), 7 deletions(-) > > diff --git a/examples/meson.build b/examples/meson.build > index f17995532..46ec80919 100644 > --- a/examples/meson.build > +++ b/examples/meson.build > @@ -47,13 +47,6 @@ all_examples = [ > 'vm_power_manager/guest_cli', > 'vmdq', 'vmdq_dcb', > ] > -# install all example code on install - irrespective of whether the example in > -# question is to be built as part of this build or not. > -foreach ex:all_examples > - install_subdir(ex, > - install_dir: get_option('datadir') + '/dpdk/examples', > - exclude_files: 'meson.build') > -endforeach > > if get_option('examples') == '' > subdir_done() > diff --git a/meson.build b/meson.build > index 61d9a4f5f..45d974cd2 100644 > --- a/meson.build > +++ b/meson.build > @@ -59,6 +59,9 @@ subdir('doc') > # build any examples explicitly requested - useful for developers - and > # install any example code into the appropriate install path > subdir('examples') > +install_subdir('examples', > + install_dir: get_option('datadir') + '/dpdk', > + exclude_files: 'meson.build') > > # build kernel modules if enabled > if get_option('enable_kmods') > -- > 2.25.1 > ^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: [dpdk-dev] [PATCH] install: fix flattening of examples directory 2020-11-10 17:09 ` Bruce Richardson @ 2020-11-10 17:14 ` David Marchand 0 siblings, 0 replies; 27+ messages in thread From: David Marchand @ 2020-11-10 17:14 UTC (permalink / raw) To: Bruce Richardson; +Cc: dev, dpdk stable On Tue, Nov 10, 2020 at 6:09 PM Bruce Richardson <bruce.richardson@intel.com> wrote: > > Using correct address for David. :-( A clone @intel.com would sure be helpful :-). -- David Marchand ^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: [dpdk-dev] [dpdk-stable] [PATCH] install: fix flattening of examples directory 2020-11-10 17:08 [dpdk-dev] [PATCH] install: fix flattening of examples directory Bruce Richardson 2020-11-10 17:09 ` Bruce Richardson @ 2020-11-10 17:33 ` David Marchand 2020-11-10 17:42 ` Bruce Richardson 2020-11-11 15:56 ` [dpdk-dev] [PATCH v2 1/2] examples: fix flattening directory layout on install Bruce Richardson ` (2 subsequent siblings) 4 siblings, 1 reply; 27+ messages in thread From: David Marchand @ 2020-11-10 17:33 UTC (permalink / raw) To: Bruce Richardson; +Cc: dev, dpdk stable, Thomas Monjalon On Tue, Nov 10, 2020 at 6:08 PM Bruce Richardson <bruce.richardson@intel.com> wrote: > > By installing the examples one-by-one in a loop in the examples > meson.build file we effectively flatted out the structure of the examples flattened* > folder and omitted some common and shared subfolders that were never > directly built. Instead, we can remove the loop and just have the whole > "examples" folder installed as-is in a single statement, preserving its > directory structure, and thereby fixing the build of a number of the > examples. It seems wrong to provide all examples without looking at all_examples. We would provide examples that can't link against the available dpdk libraries. -- David Marchand ^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: [dpdk-dev] [dpdk-stable] [PATCH] install: fix flattening of examples directory 2020-11-10 17:33 ` [dpdk-dev] [dpdk-stable] " David Marchand @ 2020-11-10 17:42 ` Bruce Richardson 0 siblings, 0 replies; 27+ messages in thread From: Bruce Richardson @ 2020-11-10 17:42 UTC (permalink / raw) To: David Marchand; +Cc: dev, dpdk stable, Thomas Monjalon On Tue, Nov 10, 2020 at 06:33:03PM +0100, David Marchand wrote: > On Tue, Nov 10, 2020 at 6:08 PM Bruce Richardson > <bruce.richardson@intel.com> wrote: > > > > By installing the examples one-by-one in a loop in the examples > > meson.build file we effectively flatted out the structure of the examples > > flattened* > > > folder and omitted some common and shared subfolders that were never > > directly built. Instead, we can remove the loop and just have the whole > > "examples" folder installed as-is in a single statement, preserving its > > directory structure, and thereby fixing the build of a number of the > > examples. > > It seems wrong to provide all examples without looking at all_examples. > We would provide examples that can't link against the available dpdk libraries. > Yes, let me think on this a bit about what is best to do, or how to manage it. I'll try and get a v2 tomorrow. For older releases with "make" buildsystem, did we provide an installation method for examples, because I can't think of how we handled this fact there? ^ permalink raw reply [flat|nested] 27+ messages in thread
* [dpdk-dev] [PATCH v2 1/2] examples: fix flattening directory layout on install 2020-11-10 17:08 [dpdk-dev] [PATCH] install: fix flattening of examples directory Bruce Richardson 2020-11-10 17:09 ` Bruce Richardson 2020-11-10 17:33 ` [dpdk-dev] [dpdk-stable] " David Marchand @ 2020-11-11 15:56 ` Bruce Richardson 2020-11-11 15:56 ` [dpdk-dev] [PATCH v2 2/2] examples: skip installing unbuildable examples Bruce Richardson 2020-11-11 17:48 ` [dpdk-dev] [PATCH v3 1/4] examples: fix flattening directory layout on install Bruce Richardson 2020-11-12 9:41 ` [dpdk-dev] [PATCH v4 0/4] improve examples installation Bruce Richardson 4 siblings, 1 reply; 27+ messages in thread From: Bruce Richardson @ 2020-11-11 15:56 UTC (permalink / raw) To: dev; +Cc: david.marchand, Bruce Richardson, stable By installing the examples one-by-one in a loop in the examples meson.build file we effectively flattened out the structure of the examples folder and omitted some common and shared subfolders that were never directly built. Instead, we can remove the loop and just have the whole "examples" folder installed as-is in a single statement, preserving its directory structure, and thereby fixing the build of a number of the examples. Fixes: 2daf565f91b5 ("examples: install as part of ninja install") Cc: stable@dpdk.org Signed-off-by: Bruce Richardson <bruce.richardson@intel.com> --- examples/meson.build | 7 ------- meson.build | 3 +++ 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/examples/meson.build b/examples/meson.build index f179955325..46ec80919e 100644 --- a/examples/meson.build +++ b/examples/meson.build @@ -47,13 +47,6 @@ all_examples = [ 'vm_power_manager/guest_cli', 'vmdq', 'vmdq_dcb', ] -# install all example code on install - irrespective of whether the example in -# question is to be built as part of this build or not. -foreach ex:all_examples - install_subdir(ex, - install_dir: get_option('datadir') + '/dpdk/examples', - exclude_files: 'meson.build') -endforeach if get_option('examples') == '' subdir_done() diff --git a/meson.build b/meson.build index 61d9a4f5fa..45d974cd2c 100644 --- a/meson.build +++ b/meson.build @@ -59,6 +59,9 @@ subdir('doc') # build any examples explicitly requested - useful for developers - and # install any example code into the appropriate install path subdir('examples') +install_subdir('examples', + install_dir: get_option('datadir') + '/dpdk', + exclude_files: 'meson.build') # build kernel modules if enabled if get_option('enable_kmods') -- 2.25.1 ^ permalink raw reply [flat|nested] 27+ messages in thread
* [dpdk-dev] [PATCH v2 2/2] examples: skip installing unbuildable examples 2020-11-11 15:56 ` [dpdk-dev] [PATCH v2 1/2] examples: fix flattening directory layout on install Bruce Richardson @ 2020-11-11 15:56 ` Bruce Richardson 2020-11-11 17:33 ` Bruce Richardson 0 siblings, 1 reply; 27+ messages in thread From: Bruce Richardson @ 2020-11-11 15:56 UTC (permalink / raw) To: dev; +Cc: david.marchand, Bruce Richardson Rather than just installing all examples, we can use the build checks to filter out any examples that are missing dependencies or are otherwise unbuildable on the current system. Signed-off-by: Bruce Richardson <bruce.richardson@intel.com> --- examples/meson.build | 54 +++++++++++++++++++++++++++----------------- meson.build | 2 ++ 2 files changed, 35 insertions(+), 21 deletions(-) diff --git a/examples/meson.build b/examples/meson.build index 46ec80919e..9d268c9786 100644 --- a/examples/meson.build +++ b/examples/meson.build @@ -48,15 +48,11 @@ all_examples = [ 'vmdq', 'vmdq_dcb', ] -if get_option('examples') == '' - subdir_done() -endif - if get_option('examples').to_lower() == 'all' - examples = all_examples + requested_examples = all_examples allow_skips = true # don't flag an error if we can't build an app else - examples = get_option('examples').split(',') + requested_examples = get_option('examples').split(',') allow_skips = false # error out if we can't build a requested app endif default_cflags = machine_args @@ -64,7 +60,9 @@ if cc.has_argument('-Wno-format-truncation') default_cflags += '-Wno-format-truncation' endif -foreach example: examples +# iterate through all examples to see what we need to install +# only actually build requested ones +foreach example: all_examples name = example.split('/')[-1] build = true sources = [] @@ -81,22 +79,36 @@ foreach example: examples foreach d:deps var_name = get_option('default_library') + '_rte_' + d if not is_variable(var_name) - error('Missing dependency "@0@" for example "@1@"'.format(d, name)) + message('Missing dependency "@0@" for example "@1@"'.format(d, name)) + build = false + else + dep_objs += [get_variable(var_name)] endif - dep_objs += [get_variable(var_name)] endforeach - if allow_experimental_apis - cflags += '-DALLOW_EXPERIMENTAL_API' + endif # build + + if not build + # exclude based on top-level directory only + dir = example.split('/')[0] + dpdk_examples_exclude += dir + message('Excluding example directory "@0@" from install'.format(dir)) + endif + + if requested_examples.contains(example) + if build + if allow_experimental_apis + cflags += '-DALLOW_EXPERIMENTAL_API' + endif + executable('dpdk-' + name, sources, + include_directories: includes, + link_whole: link_whole_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: link_whole_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 endforeach diff --git a/meson.build b/meson.build index 45d974cd2c..559a9d2f1b 100644 --- a/meson.build +++ b/meson.build @@ -58,9 +58,11 @@ subdir('doc') # build any examples explicitly requested - useful for developers - and # install any example code into the appropriate install path +dpdk_examples_exclude = [] subdir('examples') install_subdir('examples', install_dir: get_option('datadir') + '/dpdk', + exclude_directories: dpdk_examples_exclude, exclude_files: 'meson.build') # build kernel modules if enabled -- 2.25.1 ^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: [dpdk-dev] [PATCH v2 2/2] examples: skip installing unbuildable examples 2020-11-11 15:56 ` [dpdk-dev] [PATCH v2 2/2] examples: skip installing unbuildable examples Bruce Richardson @ 2020-11-11 17:33 ` Bruce Richardson 2020-11-12 9:14 ` David Marchand 0 siblings, 1 reply; 27+ messages in thread From: Bruce Richardson @ 2020-11-11 17:33 UTC (permalink / raw) To: dev; +Cc: david.marchand On Wed, Nov 11, 2020 at 03:56:47PM +0000, Bruce Richardson wrote: > Rather than just installing all examples, we can use the build checks to > filter out any examples that are missing dependencies or are otherwise > unbuildable on the current system. > > Signed-off-by: Bruce Richardson <bruce.richardson@intel.com> > --- > examples/meson.build | 54 +++++++++++++++++++++++++++----------------- > meson.build | 2 ++ > 2 files changed, 35 insertions(+), 21 deletions(-) > This seems to have broken the windows builds because we now process all the examples meson.build file, even if not asked to build them. l2fwd-keepalive has a mandatory, unconditional dependency on librt, which needs to be made optional. Based on that, V3 pending... ^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: [dpdk-dev] [PATCH v2 2/2] examples: skip installing unbuildable examples 2020-11-11 17:33 ` Bruce Richardson @ 2020-11-12 9:14 ` David Marchand 2020-11-12 9:24 ` Bruce Richardson 0 siblings, 1 reply; 27+ messages in thread From: David Marchand @ 2020-11-12 9:14 UTC (permalink / raw) To: Bruce Richardson; +Cc: dev On Wed, Nov 11, 2020 at 6:33 PM Bruce Richardson <bruce.richardson@intel.com> wrote: > > On Wed, Nov 11, 2020 at 03:56:47PM +0000, Bruce Richardson wrote: > > Rather than just installing all examples, we can use the build checks to > > filter out any examples that are missing dependencies or are otherwise > > unbuildable on the current system. > > > > Signed-off-by: Bruce Richardson <bruce.richardson@intel.com> > > --- > > examples/meson.build | 54 +++++++++++++++++++++++++++----------------- > > meson.build | 2 ++ > > 2 files changed, 35 insertions(+), 21 deletions(-) > > > This seems to have broken the windows builds because we now process all the > examples meson.build file, even if not asked to build them. l2fwd-keepalive > has a mandatory, unconditional dependency on librt, which needs to be made > optional. > > Based on that, V3 pending... Strange, the v3 patches 2 and 3 linked to the v2 series. As far as I can see, the lab only tested the v3 series with patches 84029 and 30, so the error on Windows is still reported. -- David Marchand ^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: [dpdk-dev] [PATCH v2 2/2] examples: skip installing unbuildable examples 2020-11-12 9:14 ` David Marchand @ 2020-11-12 9:24 ` Bruce Richardson 2020-11-12 9:27 ` David Marchand 0 siblings, 1 reply; 27+ messages in thread From: Bruce Richardson @ 2020-11-12 9:24 UTC (permalink / raw) To: David Marchand; +Cc: dev On Thu, Nov 12, 2020 at 10:14:23AM +0100, David Marchand wrote: > On Wed, Nov 11, 2020 at 6:33 PM Bruce Richardson > <bruce.richardson@intel.com> wrote: > > > > On Wed, Nov 11, 2020 at 03:56:47PM +0000, Bruce Richardson wrote: > > > Rather than just installing all examples, we can use the build checks to > > > filter out any examples that are missing dependencies or are otherwise > > > unbuildable on the current system. > > > > > > Signed-off-by: Bruce Richardson <bruce.richardson@intel.com> > > > --- > > > examples/meson.build | 54 +++++++++++++++++++++++++++----------------- > > > meson.build | 2 ++ > > > 2 files changed, 35 insertions(+), 21 deletions(-) > > > > > This seems to have broken the windows builds because we now process all the > > examples meson.build file, even if not asked to build them. l2fwd-keepalive > > has a mandatory, unconditional dependency on librt, which needs to be made > > optional. > > > > Based on that, V3 pending... > > Strange, the v3 patches 2 and 3 linked to the v2 series. > As far as I can see, the lab only tested the v3 series with patches > 84029 and 30, so the error on Windows is still reported. > > -- > David Marchand > Yes, I see that in patchwork, and it's a bit strange. The emails seem correctly threaded to me in my mail client though. I'll resubmit as v4 with a cover letter to see if that allows the CI to run properly. /Bruce ^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: [dpdk-dev] [PATCH v2 2/2] examples: skip installing unbuildable examples 2020-11-12 9:24 ` Bruce Richardson @ 2020-11-12 9:27 ` David Marchand 2020-11-12 9:35 ` Bruce Richardson 0 siblings, 1 reply; 27+ messages in thread From: David Marchand @ 2020-11-12 9:27 UTC (permalink / raw) To: Bruce Richardson; +Cc: dev On Thu, Nov 12, 2020 at 10:25 AM Bruce Richardson <bruce.richardson@intel.com> wrote: > > Strange, the v3 patches 2 and 3 linked to the v2 series. > > As far as I can see, the lab only tested the v3 series with patches > > 84029 and 30, so the error on Windows is still reported. > > > > -- > > David Marchand > > > Yes, I see that in patchwork, and it's a bit strange. The emails seem > correctly threaded to me in my mail client though. Yes, it looks correct to me too.. > I'll resubmit as v4 with a cover letter to see if that allows the CI to run > properly. I don't think the cover letter matters.. but let's see how it behaves. Thanks Bruce. -- David Marchand ^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: [dpdk-dev] [PATCH v2 2/2] examples: skip installing unbuildable examples 2020-11-12 9:27 ` David Marchand @ 2020-11-12 9:35 ` Bruce Richardson 0 siblings, 0 replies; 27+ messages in thread From: Bruce Richardson @ 2020-11-12 9:35 UTC (permalink / raw) To: David Marchand; +Cc: dev On Thu, Nov 12, 2020 at 10:27:09AM +0100, David Marchand wrote: > On Thu, Nov 12, 2020 at 10:25 AM Bruce Richardson > <bruce.richardson@intel.com> wrote: > > > Strange, the v3 patches 2 and 3 linked to the v2 series. > > > As far as I can see, the lab only tested the v3 series with patches > > > 84029 and 30, so the error on Windows is still reported. > > > > > > -- > > > David Marchand > > > > > Yes, I see that in patchwork, and it's a bit strange. The emails seem > > correctly threaded to me in my mail client though. > > Yes, it looks correct to me too.. > > > I'll resubmit as v4 with a cover letter to see if that allows the CI to run > > properly. > > I don't think the cover letter matters.. but let's see how it behaves. > It shouldn't matter, I agree, but I'm leaving nothing to chance on this :-) ^ permalink raw reply [flat|nested] 27+ messages in thread
* [dpdk-dev] [PATCH v3 1/4] examples: fix flattening directory layout on install 2020-11-10 17:08 [dpdk-dev] [PATCH] install: fix flattening of examples directory Bruce Richardson ` (2 preceding siblings ...) 2020-11-11 15:56 ` [dpdk-dev] [PATCH v2 1/2] examples: fix flattening directory layout on install Bruce Richardson @ 2020-11-11 17:48 ` Bruce Richardson 2020-11-11 17:48 ` [dpdk-dev] [PATCH v3 2/4] examples/l2fwd-keepalive: skip build when no librt Bruce Richardson ` (2 more replies) 2020-11-12 9:41 ` [dpdk-dev] [PATCH v4 0/4] improve examples installation Bruce Richardson 4 siblings, 3 replies; 27+ messages in thread From: Bruce Richardson @ 2020-11-11 17:48 UTC (permalink / raw) To: dev; +Cc: david.marchand, Bruce Richardson, stable By installing the examples one-by-one in a loop in the examples meson.build file we effectively flattened out the structure of the examples folder and omitted some common and shared subfolders that were never directly built. Instead, we can remove the loop and just have the whole "examples" folder installed as-is in a single statement, preserving its directory structure, and thereby fixing the build of a number of the examples. Fixes: 2daf565f91b5 ("examples: install as part of ninja install") Cc: stable@dpdk.org Signed-off-by: Bruce Richardson <bruce.richardson@intel.com> --- examples/meson.build | 7 ------- meson.build | 3 +++ 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/examples/meson.build b/examples/meson.build index f17995532..46ec80919 100644 --- a/examples/meson.build +++ b/examples/meson.build @@ -47,13 +47,6 @@ all_examples = [ 'vm_power_manager/guest_cli', 'vmdq', 'vmdq_dcb', ] -# install all example code on install - irrespective of whether the example in -# question is to be built as part of this build or not. -foreach ex:all_examples - install_subdir(ex, - install_dir: get_option('datadir') + '/dpdk/examples', - exclude_files: 'meson.build') -endforeach if get_option('examples') == '' subdir_done() diff --git a/meson.build b/meson.build index 61d9a4f5f..45d974cd2 100644 --- a/meson.build +++ b/meson.build @@ -59,6 +59,9 @@ subdir('doc') # build any examples explicitly requested - useful for developers - and # install any example code into the appropriate install path subdir('examples') +install_subdir('examples', + install_dir: get_option('datadir') + '/dpdk', + exclude_files: 'meson.build') # build kernel modules if enabled if get_option('enable_kmods') -- 2.25.1 ^ permalink raw reply [flat|nested] 27+ messages in thread
* [dpdk-dev] [PATCH v3 2/4] examples/l2fwd-keepalive: skip build when no librt 2020-11-11 17:48 ` [dpdk-dev] [PATCH v3 1/4] examples: fix flattening directory layout on install Bruce Richardson @ 2020-11-11 17:48 ` Bruce Richardson 2020-11-11 17:48 ` [dpdk-dev] [PATCH v3 3/4] examples: stop processing build file if build is impossible Bruce Richardson 2020-11-11 17:48 ` [dpdk-dev] [PATCH v3 4/4] examples: skip installing unbuildable examples Bruce Richardson 2 siblings, 0 replies; 27+ messages in thread From: Bruce Richardson @ 2020-11-11 17:48 UTC (permalink / raw) To: dev; +Cc: david.marchand, Bruce Richardson, stable When librt is not present on a system, processing the meson.build file for this example application causes an error. Make the library non-mandatory and just mark the example as unbuildable if it is not present. Fixes: 89f0711f9ddf ("examples: build some samples with meson") Cc: stable@dpdk.org Signed-off-by: Bruce Richardson <bruce.richardson@intel.com> --- examples/l2fwd-keepalive/meson.build | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/examples/l2fwd-keepalive/meson.build b/examples/l2fwd-keepalive/meson.build index d678a8ddd..a56d67967 100644 --- a/examples/l2fwd-keepalive/meson.build +++ b/examples/l2fwd-keepalive/meson.build @@ -7,7 +7,13 @@ # DPDK instance, use 'make' allow_experimental_apis = true -ext_deps += cc.find_library('rt') +librt = cc.find_library('rt', required: false) +if not librt.found() + build = false + subdir_done() +endif + +ext_deps += librt deps += 'timer' sources = files( 'main.c', 'shm.c' -- 2.25.1 ^ permalink raw reply [flat|nested] 27+ messages in thread
* [dpdk-dev] [PATCH v3 3/4] examples: stop processing build file if build is impossible 2020-11-11 17:48 ` [dpdk-dev] [PATCH v3 1/4] examples: fix flattening directory layout on install Bruce Richardson 2020-11-11 17:48 ` [dpdk-dev] [PATCH v3 2/4] examples/l2fwd-keepalive: skip build when no librt Bruce Richardson @ 2020-11-11 17:48 ` Bruce Richardson 2020-11-11 17:48 ` [dpdk-dev] [PATCH v3 4/4] examples: skip installing unbuildable examples Bruce Richardson 2 siblings, 0 replies; 27+ messages in thread From: Bruce Richardson @ 2020-11-11 17:48 UTC (permalink / raw) To: dev; +Cc: david.marchand, Bruce Richardson Once it has been determined that an example cannot be built, there is little point in continuing to process the meson.build file for that example, so we can use subdir_done() to return to the calling file. This can potentially prevent problems where later statement in the file may cause an error on systems where the app cannot be built, e.g. on Windows or FreeBSD. Signed-off-by: Bruce Richardson <bruce.richardson@intel.com> --- examples/distributor/meson.build | 3 +++ examples/ethtool/meson.build | 4 ++++ examples/ioat/meson.build | 3 +++ examples/ip_pipeline/meson.build | 4 ++++ examples/kni/meson.build | 4 ++++ examples/l2fwd-cat/meson.build | 4 ++++ examples/ntb/meson.build | 2 ++ examples/performance-thread/l3fwd-thread/meson.build | 4 ++++ examples/performance-thread/pthread_shim/meson.build | 4 ++++ examples/pipeline/meson.build | 4 ++++ examples/vdpa/meson.build | 2 ++ examples/vhost/meson.build | 2 ++ examples/vhost_blk/meson.build | 2 ++ examples/vhost_crypto/meson.build | 4 ++++ 14 files changed, 46 insertions(+) diff --git a/examples/distributor/meson.build b/examples/distributor/meson.build index 5244cd4ff..d8dbc235f 100644 --- a/examples/distributor/meson.build +++ b/examples/distributor/meson.build @@ -8,6 +8,9 @@ # require the power library build = dpdk_conf.has('RTE_LIB_POWER') +if not build + subdir_done() +endif allow_experimental_apis = true deps += ['distributor', 'power'] diff --git a/examples/ethtool/meson.build b/examples/ethtool/meson.build index cc8edac3d..4d08bc4c5 100644 --- a/examples/ethtool/meson.build +++ b/examples/ethtool/meson.build @@ -7,6 +7,10 @@ # DPDK instance, use 'make' build = is_linux +if not build + subdir_done() +endif + sources = files('lib/rte_ethtool.c', 'ethtool-app/ethapp.c', 'ethtool-app/main.c') diff --git a/examples/ioat/meson.build b/examples/ioat/meson.build index 6afbaa680..e348196ba 100644 --- a/examples/ioat/meson.build +++ b/examples/ioat/meson.build @@ -8,6 +8,9 @@ allow_experimental_apis = true build = dpdk_conf.has('RTE_RAW_IOAT') +if not build + subdir_done() +endif deps += ['raw_ioat'] diff --git a/examples/ip_pipeline/meson.build b/examples/ip_pipeline/meson.build index 664223c97..945e28b58 100644 --- a/examples/ip_pipeline/meson.build +++ b/examples/ip_pipeline/meson.build @@ -7,6 +7,10 @@ # DPDK instance, use 'make' build = cc.has_header('sys/epoll.h') +if not build + subdir_done() +endif + deps += ['pipeline', 'bus_pci'] allow_experimental_apis = true sources = files( diff --git a/examples/kni/meson.build b/examples/kni/meson.build index 58639b139..e119eebab 100644 --- a/examples/kni/meson.build +++ b/examples/kni/meson.build @@ -8,6 +8,10 @@ # this app can be built if-and-only-if KNI library is buildable build = dpdk_conf.has('RTE_LIB_KNI') +if not build + subdir_done() +endif + deps += ['kni', 'bus_pci'] sources = files( 'main.c' diff --git a/examples/l2fwd-cat/meson.build b/examples/l2fwd-cat/meson.build index 2bed18e74..60169bcbd 100644 --- a/examples/l2fwd-cat/meson.build +++ b/examples/l2fwd-cat/meson.build @@ -8,6 +8,10 @@ pqos = cc.find_library('pqos', required: false) build = pqos.found() +if not build + subdir_done() +endif + ext_deps += pqos allow_experimental_apis = true cflags += '-I/usr/local/include' # assume pqos lib installed in /usr/local diff --git a/examples/ntb/meson.build b/examples/ntb/meson.build index b0201f68b..02be9fc80 100644 --- a/examples/ntb/meson.build +++ b/examples/ntb/meson.build @@ -9,7 +9,9 @@ allow_experimental_apis = true if not is_linux build = false + subdir_done() endif + deps += 'rawdev' cflags += ['-D_FILE_OFFSET_BITS=64'] sources = files( diff --git a/examples/performance-thread/l3fwd-thread/meson.build b/examples/performance-thread/l3fwd-thread/meson.build index 99de24be7..4858b201e 100644 --- a/examples/performance-thread/l3fwd-thread/meson.build +++ b/examples/performance-thread/l3fwd-thread/meson.build @@ -7,6 +7,10 @@ # DPDK instance, use 'make' build = dpdk_conf.has('RTE_ARCH_X86_64') +if not build + subdir_done() +endif + deps += ['timer', 'lpm'] allow_experimental_apis = true diff --git a/examples/performance-thread/pthread_shim/meson.build b/examples/performance-thread/pthread_shim/meson.build index 26ef78635..d49979930 100644 --- a/examples/performance-thread/pthread_shim/meson.build +++ b/examples/performance-thread/pthread_shim/meson.build @@ -7,6 +7,10 @@ # DPDK instance, use 'make' build = dpdk_conf.has('RTE_ARCH_X86_64') or dpdk_conf.has('RTE_ARCH_ARM64') +if not build + subdir_done() +endif + deps += ['timer'] allow_experimental_apis = true diff --git a/examples/pipeline/meson.build b/examples/pipeline/meson.build index e47d483de..4f5925d7c 100644 --- a/examples/pipeline/meson.build +++ b/examples/pipeline/meson.build @@ -7,6 +7,10 @@ # DPDK instance, use 'make' build = cc.has_header('sys/epoll.h') +if not build + subdir_done() +endif + deps += ['pipeline', 'bus_pci'] allow_experimental_apis = true sources = files( diff --git a/examples/vdpa/meson.build b/examples/vdpa/meson.build index 73f129cd9..26f6089c9 100644 --- a/examples/vdpa/meson.build +++ b/examples/vdpa/meson.build @@ -8,7 +8,9 @@ if not is_linux build = false + subdir_done() endif + deps += 'vhost' allow_experimental_apis = true sources = files( diff --git a/examples/vhost/meson.build b/examples/vhost/meson.build index 24f1f7131..7e5b9d938 100644 --- a/examples/vhost/meson.build +++ b/examples/vhost/meson.build @@ -8,7 +8,9 @@ if not is_linux build = false + subdir_done() endif + deps += 'vhost' allow_experimental_apis = true sources = files( diff --git a/examples/vhost_blk/meson.build b/examples/vhost_blk/meson.build index 857367192..354ba0584 100644 --- a/examples/vhost_blk/meson.build +++ b/examples/vhost_blk/meson.build @@ -8,10 +8,12 @@ if not is_linux build = false + subdir_done() endif if not cc.has_header('linux/virtio_blk.h') build = false + subdir_done() endif deps += 'vhost' diff --git a/examples/vhost_crypto/meson.build b/examples/vhost_crypto/meson.build index b2c125e2f..403f21098 100644 --- a/examples/vhost_crypto/meson.build +++ b/examples/vhost_crypto/meson.build @@ -7,6 +7,10 @@ # DPDK instance, use 'make' build = dpdk_conf.has('RTE_LIB_VHOST') +if not build + subdir_done() +endif + allow_experimental_apis = true deps += ['vhost', 'cryptodev'] sources = files( -- 2.25.1 ^ permalink raw reply [flat|nested] 27+ messages in thread
* [dpdk-dev] [PATCH v3 4/4] examples: skip installing unbuildable examples 2020-11-11 17:48 ` [dpdk-dev] [PATCH v3 1/4] examples: fix flattening directory layout on install Bruce Richardson 2020-11-11 17:48 ` [dpdk-dev] [PATCH v3 2/4] examples/l2fwd-keepalive: skip build when no librt Bruce Richardson 2020-11-11 17:48 ` [dpdk-dev] [PATCH v3 3/4] examples: stop processing build file if build is impossible Bruce Richardson @ 2020-11-11 17:48 ` Bruce Richardson 2 siblings, 0 replies; 27+ messages in thread From: Bruce Richardson @ 2020-11-11 17:48 UTC (permalink / raw) To: dev; +Cc: david.marchand, Bruce Richardson Rather than just installing all examples, we can use the build checks to filter out any examples that are missing dependencies or are otherwise unbuildable on the current system. Signed-off-by: Bruce Richardson <bruce.richardson@intel.com> --- examples/meson.build | 54 +++++++++++++++++++++++++++----------------- meson.build | 2 ++ 2 files changed, 35 insertions(+), 21 deletions(-) diff --git a/examples/meson.build b/examples/meson.build index 46ec80919..9d268c978 100644 --- a/examples/meson.build +++ b/examples/meson.build @@ -48,15 +48,11 @@ all_examples = [ 'vmdq', 'vmdq_dcb', ] -if get_option('examples') == '' - subdir_done() -endif - if get_option('examples').to_lower() == 'all' - examples = all_examples + requested_examples = all_examples allow_skips = true # don't flag an error if we can't build an app else - examples = get_option('examples').split(',') + requested_examples = get_option('examples').split(',') allow_skips = false # error out if we can't build a requested app endif default_cflags = machine_args @@ -64,7 +60,9 @@ if cc.has_argument('-Wno-format-truncation') default_cflags += '-Wno-format-truncation' endif -foreach example: examples +# iterate through all examples to see what we need to install +# only actually build requested ones +foreach example: all_examples name = example.split('/')[-1] build = true sources = [] @@ -81,22 +79,36 @@ foreach example: examples foreach d:deps var_name = get_option('default_library') + '_rte_' + d if not is_variable(var_name) - error('Missing dependency "@0@" for example "@1@"'.format(d, name)) + message('Missing dependency "@0@" for example "@1@"'.format(d, name)) + build = false + else + dep_objs += [get_variable(var_name)] endif - dep_objs += [get_variable(var_name)] endforeach - if allow_experimental_apis - cflags += '-DALLOW_EXPERIMENTAL_API' + endif # build + + if not build + # exclude based on top-level directory only + dir = example.split('/')[0] + dpdk_examples_exclude += dir + message('Excluding example directory "@0@" from install'.format(dir)) + endif + + if requested_examples.contains(example) + if build + if allow_experimental_apis + cflags += '-DALLOW_EXPERIMENTAL_API' + endif + executable('dpdk-' + name, sources, + include_directories: includes, + link_whole: link_whole_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: link_whole_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 endforeach diff --git a/meson.build b/meson.build index 45d974cd2..559a9d2f1 100644 --- a/meson.build +++ b/meson.build @@ -58,9 +58,11 @@ subdir('doc') # build any examples explicitly requested - useful for developers - and # install any example code into the appropriate install path +dpdk_examples_exclude = [] subdir('examples') install_subdir('examples', install_dir: get_option('datadir') + '/dpdk', + exclude_directories: dpdk_examples_exclude, exclude_files: 'meson.build') # build kernel modules if enabled -- 2.25.1 ^ permalink raw reply [flat|nested] 27+ messages in thread
* [dpdk-dev] [PATCH v4 0/4] improve examples installation 2020-11-10 17:08 [dpdk-dev] [PATCH] install: fix flattening of examples directory Bruce Richardson ` (3 preceding siblings ...) 2020-11-11 17:48 ` [dpdk-dev] [PATCH v3 1/4] examples: fix flattening directory layout on install Bruce Richardson @ 2020-11-12 9:41 ` Bruce Richardson 2020-11-12 9:41 ` [dpdk-dev] [PATCH v4 1/4] examples: fix flattening directory layout on install Bruce Richardson ` (5 more replies) 4 siblings, 6 replies; 27+ messages in thread From: Bruce Richardson @ 2020-11-12 9:41 UTC (permalink / raw) To: dev; +Cc: david.marchand, Bruce Richardson This patch improves the installation of the examples when "ninja install" is run. It removes issues with the directory structure being flattened out, and removes from the install list any examples that are not buildable with built DPDK code. V4: resubmit v3 to retest in CI hopefully with proper patch tracking V3: fix issues with building on Windows V2: add support for filtering examples that won't build Bruce Richardson (4): examples: fix flattening directory layout on install examples/l2fwd-keepalive: skip build when no librt examples: stop processing build file if build is impossible examples: skip installing unbuildable examples examples/distributor/meson.build | 3 + examples/ethtool/meson.build | 4 ++ examples/ioat/meson.build | 3 + examples/ip_pipeline/meson.build | 4 ++ examples/kni/meson.build | 4 ++ examples/l2fwd-cat/meson.build | 4 ++ examples/l2fwd-keepalive/meson.build | 8 ++- examples/meson.build | 61 ++++++++++--------- examples/ntb/meson.build | 2 + .../l3fwd-thread/meson.build | 4 ++ .../pthread_shim/meson.build | 4 ++ examples/pipeline/meson.build | 4 ++ examples/vdpa/meson.build | 2 + examples/vhost/meson.build | 2 + examples/vhost_blk/meson.build | 2 + examples/vhost_crypto/meson.build | 4 ++ meson.build | 5 ++ 17 files changed, 91 insertions(+), 29 deletions(-) -- 2.25.1 ^ permalink raw reply [flat|nested] 27+ messages in thread
* [dpdk-dev] [PATCH v4 1/4] examples: fix flattening directory layout on install 2020-11-12 9:41 ` [dpdk-dev] [PATCH v4 0/4] improve examples installation Bruce Richardson @ 2020-11-12 9:41 ` Bruce Richardson 2020-11-12 9:41 ` [dpdk-dev] [PATCH v4 2/4] examples/l2fwd-keepalive: skip build when no librt Bruce Richardson ` (4 subsequent siblings) 5 siblings, 0 replies; 27+ messages in thread From: Bruce Richardson @ 2020-11-12 9:41 UTC (permalink / raw) To: dev; +Cc: david.marchand, Bruce Richardson, stable By installing the examples one-by-one in a loop in the examples meson.build file we effectively flattened out the structure of the examples folder and omitted some common and shared subfolders that were never directly built. Instead, we can remove the loop and just have the whole "examples" folder installed as-is in a single statement, preserving its directory structure, and thereby fixing the build of a number of the examples. Fixes: 2daf565f91b5 ("examples: install as part of ninja install") Cc: stable@dpdk.org Signed-off-by: Bruce Richardson <bruce.richardson@intel.com> --- examples/meson.build | 7 ------- meson.build | 3 +++ 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/examples/meson.build b/examples/meson.build index f17995532..46ec80919 100644 --- a/examples/meson.build +++ b/examples/meson.build @@ -47,13 +47,6 @@ all_examples = [ 'vm_power_manager/guest_cli', 'vmdq', 'vmdq_dcb', ] -# install all example code on install - irrespective of whether the example in -# question is to be built as part of this build or not. -foreach ex:all_examples - install_subdir(ex, - install_dir: get_option('datadir') + '/dpdk/examples', - exclude_files: 'meson.build') -endforeach if get_option('examples') == '' subdir_done() diff --git a/meson.build b/meson.build index 61d9a4f5f..45d974cd2 100644 --- a/meson.build +++ b/meson.build @@ -59,6 +59,9 @@ subdir('doc') # build any examples explicitly requested - useful for developers - and # install any example code into the appropriate install path subdir('examples') +install_subdir('examples', + install_dir: get_option('datadir') + '/dpdk', + exclude_files: 'meson.build') # build kernel modules if enabled if get_option('enable_kmods') -- 2.25.1 ^ permalink raw reply [flat|nested] 27+ messages in thread
* [dpdk-dev] [PATCH v4 2/4] examples/l2fwd-keepalive: skip build when no librt 2020-11-12 9:41 ` [dpdk-dev] [PATCH v4 0/4] improve examples installation Bruce Richardson 2020-11-12 9:41 ` [dpdk-dev] [PATCH v4 1/4] examples: fix flattening directory layout on install Bruce Richardson @ 2020-11-12 9:41 ` Bruce Richardson 2020-11-12 9:41 ` [dpdk-dev] [PATCH v4 3/4] examples: stop processing build file if build is impossible Bruce Richardson ` (3 subsequent siblings) 5 siblings, 0 replies; 27+ messages in thread From: Bruce Richardson @ 2020-11-12 9:41 UTC (permalink / raw) To: dev; +Cc: david.marchand, Bruce Richardson, stable When librt is not present on a system, processing the meson.build file for this example application causes an error. Make the library non-mandatory and just mark the example as unbuildable if it is not present. Fixes: 89f0711f9ddf ("examples: build some samples with meson") Cc: stable@dpdk.org Signed-off-by: Bruce Richardson <bruce.richardson@intel.com> --- examples/l2fwd-keepalive/meson.build | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/examples/l2fwd-keepalive/meson.build b/examples/l2fwd-keepalive/meson.build index d678a8ddd..a56d67967 100644 --- a/examples/l2fwd-keepalive/meson.build +++ b/examples/l2fwd-keepalive/meson.build @@ -7,7 +7,13 @@ # DPDK instance, use 'make' allow_experimental_apis = true -ext_deps += cc.find_library('rt') +librt = cc.find_library('rt', required: false) +if not librt.found() + build = false + subdir_done() +endif + +ext_deps += librt deps += 'timer' sources = files( 'main.c', 'shm.c' -- 2.25.1 ^ permalink raw reply [flat|nested] 27+ messages in thread
* [dpdk-dev] [PATCH v4 3/4] examples: stop processing build file if build is impossible 2020-11-12 9:41 ` [dpdk-dev] [PATCH v4 0/4] improve examples installation Bruce Richardson 2020-11-12 9:41 ` [dpdk-dev] [PATCH v4 1/4] examples: fix flattening directory layout on install Bruce Richardson 2020-11-12 9:41 ` [dpdk-dev] [PATCH v4 2/4] examples/l2fwd-keepalive: skip build when no librt Bruce Richardson @ 2020-11-12 9:41 ` Bruce Richardson 2020-11-12 9:41 ` [dpdk-dev] [PATCH v4 4/4] examples: skip installing unbuildable examples Bruce Richardson ` (2 subsequent siblings) 5 siblings, 0 replies; 27+ messages in thread From: Bruce Richardson @ 2020-11-12 9:41 UTC (permalink / raw) To: dev; +Cc: david.marchand, Bruce Richardson Once it has been determined that an example cannot be built, there is little point in continuing to process the meson.build file for that example, so we can use subdir_done() to return to the calling file. This can potentially prevent problems where later statement in the file may cause an error on systems where the app cannot be built, e.g. on Windows or FreeBSD. Signed-off-by: Bruce Richardson <bruce.richardson@intel.com> --- examples/distributor/meson.build | 3 +++ examples/ethtool/meson.build | 4 ++++ examples/ioat/meson.build | 3 +++ examples/ip_pipeline/meson.build | 4 ++++ examples/kni/meson.build | 4 ++++ examples/l2fwd-cat/meson.build | 4 ++++ examples/ntb/meson.build | 2 ++ examples/performance-thread/l3fwd-thread/meson.build | 4 ++++ examples/performance-thread/pthread_shim/meson.build | 4 ++++ examples/pipeline/meson.build | 4 ++++ examples/vdpa/meson.build | 2 ++ examples/vhost/meson.build | 2 ++ examples/vhost_blk/meson.build | 2 ++ examples/vhost_crypto/meson.build | 4 ++++ 14 files changed, 46 insertions(+) diff --git a/examples/distributor/meson.build b/examples/distributor/meson.build index 5244cd4ff..d8dbc235f 100644 --- a/examples/distributor/meson.build +++ b/examples/distributor/meson.build @@ -8,6 +8,9 @@ # require the power library build = dpdk_conf.has('RTE_LIB_POWER') +if not build + subdir_done() +endif allow_experimental_apis = true deps += ['distributor', 'power'] diff --git a/examples/ethtool/meson.build b/examples/ethtool/meson.build index cc8edac3d..4d08bc4c5 100644 --- a/examples/ethtool/meson.build +++ b/examples/ethtool/meson.build @@ -7,6 +7,10 @@ # DPDK instance, use 'make' build = is_linux +if not build + subdir_done() +endif + sources = files('lib/rte_ethtool.c', 'ethtool-app/ethapp.c', 'ethtool-app/main.c') diff --git a/examples/ioat/meson.build b/examples/ioat/meson.build index 6afbaa680..e348196ba 100644 --- a/examples/ioat/meson.build +++ b/examples/ioat/meson.build @@ -8,6 +8,9 @@ allow_experimental_apis = true build = dpdk_conf.has('RTE_RAW_IOAT') +if not build + subdir_done() +endif deps += ['raw_ioat'] diff --git a/examples/ip_pipeline/meson.build b/examples/ip_pipeline/meson.build index 664223c97..945e28b58 100644 --- a/examples/ip_pipeline/meson.build +++ b/examples/ip_pipeline/meson.build @@ -7,6 +7,10 @@ # DPDK instance, use 'make' build = cc.has_header('sys/epoll.h') +if not build + subdir_done() +endif + deps += ['pipeline', 'bus_pci'] allow_experimental_apis = true sources = files( diff --git a/examples/kni/meson.build b/examples/kni/meson.build index 58639b139..e119eebab 100644 --- a/examples/kni/meson.build +++ b/examples/kni/meson.build @@ -8,6 +8,10 @@ # this app can be built if-and-only-if KNI library is buildable build = dpdk_conf.has('RTE_LIB_KNI') +if not build + subdir_done() +endif + deps += ['kni', 'bus_pci'] sources = files( 'main.c' diff --git a/examples/l2fwd-cat/meson.build b/examples/l2fwd-cat/meson.build index 2bed18e74..60169bcbd 100644 --- a/examples/l2fwd-cat/meson.build +++ b/examples/l2fwd-cat/meson.build @@ -8,6 +8,10 @@ pqos = cc.find_library('pqos', required: false) build = pqos.found() +if not build + subdir_done() +endif + ext_deps += pqos allow_experimental_apis = true cflags += '-I/usr/local/include' # assume pqos lib installed in /usr/local diff --git a/examples/ntb/meson.build b/examples/ntb/meson.build index b0201f68b..02be9fc80 100644 --- a/examples/ntb/meson.build +++ b/examples/ntb/meson.build @@ -9,7 +9,9 @@ allow_experimental_apis = true if not is_linux build = false + subdir_done() endif + deps += 'rawdev' cflags += ['-D_FILE_OFFSET_BITS=64'] sources = files( diff --git a/examples/performance-thread/l3fwd-thread/meson.build b/examples/performance-thread/l3fwd-thread/meson.build index 99de24be7..4858b201e 100644 --- a/examples/performance-thread/l3fwd-thread/meson.build +++ b/examples/performance-thread/l3fwd-thread/meson.build @@ -7,6 +7,10 @@ # DPDK instance, use 'make' build = dpdk_conf.has('RTE_ARCH_X86_64') +if not build + subdir_done() +endif + deps += ['timer', 'lpm'] allow_experimental_apis = true diff --git a/examples/performance-thread/pthread_shim/meson.build b/examples/performance-thread/pthread_shim/meson.build index 26ef78635..d49979930 100644 --- a/examples/performance-thread/pthread_shim/meson.build +++ b/examples/performance-thread/pthread_shim/meson.build @@ -7,6 +7,10 @@ # DPDK instance, use 'make' build = dpdk_conf.has('RTE_ARCH_X86_64') or dpdk_conf.has('RTE_ARCH_ARM64') +if not build + subdir_done() +endif + deps += ['timer'] allow_experimental_apis = true diff --git a/examples/pipeline/meson.build b/examples/pipeline/meson.build index e47d483de..4f5925d7c 100644 --- a/examples/pipeline/meson.build +++ b/examples/pipeline/meson.build @@ -7,6 +7,10 @@ # DPDK instance, use 'make' build = cc.has_header('sys/epoll.h') +if not build + subdir_done() +endif + deps += ['pipeline', 'bus_pci'] allow_experimental_apis = true sources = files( diff --git a/examples/vdpa/meson.build b/examples/vdpa/meson.build index 73f129cd9..26f6089c9 100644 --- a/examples/vdpa/meson.build +++ b/examples/vdpa/meson.build @@ -8,7 +8,9 @@ if not is_linux build = false + subdir_done() endif + deps += 'vhost' allow_experimental_apis = true sources = files( diff --git a/examples/vhost/meson.build b/examples/vhost/meson.build index 24f1f7131..7e5b9d938 100644 --- a/examples/vhost/meson.build +++ b/examples/vhost/meson.build @@ -8,7 +8,9 @@ if not is_linux build = false + subdir_done() endif + deps += 'vhost' allow_experimental_apis = true sources = files( diff --git a/examples/vhost_blk/meson.build b/examples/vhost_blk/meson.build index 857367192..354ba0584 100644 --- a/examples/vhost_blk/meson.build +++ b/examples/vhost_blk/meson.build @@ -8,10 +8,12 @@ if not is_linux build = false + subdir_done() endif if not cc.has_header('linux/virtio_blk.h') build = false + subdir_done() endif deps += 'vhost' diff --git a/examples/vhost_crypto/meson.build b/examples/vhost_crypto/meson.build index b2c125e2f..403f21098 100644 --- a/examples/vhost_crypto/meson.build +++ b/examples/vhost_crypto/meson.build @@ -7,6 +7,10 @@ # DPDK instance, use 'make' build = dpdk_conf.has('RTE_LIB_VHOST') +if not build + subdir_done() +endif + allow_experimental_apis = true deps += ['vhost', 'cryptodev'] sources = files( -- 2.25.1 ^ permalink raw reply [flat|nested] 27+ messages in thread
* [dpdk-dev] [PATCH v4 4/4] examples: skip installing unbuildable examples 2020-11-12 9:41 ` [dpdk-dev] [PATCH v4 0/4] improve examples installation Bruce Richardson ` (2 preceding siblings ...) 2020-11-12 9:41 ` [dpdk-dev] [PATCH v4 3/4] examples: stop processing build file if build is impossible Bruce Richardson @ 2020-11-12 9:41 ` Bruce Richardson 2020-11-12 17:06 ` Thomas Monjalon 2020-11-12 11:14 ` [dpdk-dev] [PATCH v4 0/4] improve examples installation David Marchand 2020-11-12 18:36 ` Thomas Monjalon 5 siblings, 1 reply; 27+ messages in thread From: Bruce Richardson @ 2020-11-12 9:41 UTC (permalink / raw) To: dev; +Cc: david.marchand, Bruce Richardson Rather than just installing all examples, we can use the build checks to filter out any examples that are missing dependencies or are otherwise unbuildable on the current system. Signed-off-by: Bruce Richardson <bruce.richardson@intel.com> --- examples/meson.build | 54 +++++++++++++++++++++++++++----------------- meson.build | 2 ++ 2 files changed, 35 insertions(+), 21 deletions(-) diff --git a/examples/meson.build b/examples/meson.build index 46ec80919..9d268c978 100644 --- a/examples/meson.build +++ b/examples/meson.build @@ -48,15 +48,11 @@ all_examples = [ 'vmdq', 'vmdq_dcb', ] -if get_option('examples') == '' - subdir_done() -endif - if get_option('examples').to_lower() == 'all' - examples = all_examples + requested_examples = all_examples allow_skips = true # don't flag an error if we can't build an app else - examples = get_option('examples').split(',') + requested_examples = get_option('examples').split(',') allow_skips = false # error out if we can't build a requested app endif default_cflags = machine_args @@ -64,7 +60,9 @@ if cc.has_argument('-Wno-format-truncation') default_cflags += '-Wno-format-truncation' endif -foreach example: examples +# iterate through all examples to see what we need to install +# only actually build requested ones +foreach example: all_examples name = example.split('/')[-1] build = true sources = [] @@ -81,22 +79,36 @@ foreach example: examples foreach d:deps var_name = get_option('default_library') + '_rte_' + d if not is_variable(var_name) - error('Missing dependency "@0@" for example "@1@"'.format(d, name)) + message('Missing dependency "@0@" for example "@1@"'.format(d, name)) + build = false + else + dep_objs += [get_variable(var_name)] endif - dep_objs += [get_variable(var_name)] endforeach - if allow_experimental_apis - cflags += '-DALLOW_EXPERIMENTAL_API' + endif # build + + if not build + # exclude based on top-level directory only + dir = example.split('/')[0] + dpdk_examples_exclude += dir + message('Excluding example directory "@0@" from install'.format(dir)) + endif + + if requested_examples.contains(example) + if build + if allow_experimental_apis + cflags += '-DALLOW_EXPERIMENTAL_API' + endif + executable('dpdk-' + name, sources, + include_directories: includes, + link_whole: link_whole_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: link_whole_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 endforeach diff --git a/meson.build b/meson.build index 45d974cd2..559a9d2f1 100644 --- a/meson.build +++ b/meson.build @@ -58,9 +58,11 @@ subdir('doc') # build any examples explicitly requested - useful for developers - and # install any example code into the appropriate install path +dpdk_examples_exclude = [] subdir('examples') install_subdir('examples', install_dir: get_option('datadir') + '/dpdk', + exclude_directories: dpdk_examples_exclude, exclude_files: 'meson.build') # build kernel modules if enabled -- 2.25.1 ^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: [dpdk-dev] [PATCH v4 4/4] examples: skip installing unbuildable examples 2020-11-12 9:41 ` [dpdk-dev] [PATCH v4 4/4] examples: skip installing unbuildable examples Bruce Richardson @ 2020-11-12 17:06 ` Thomas Monjalon 0 siblings, 0 replies; 27+ messages in thread From: Thomas Monjalon @ 2020-11-12 17:06 UTC (permalink / raw) To: Bruce Richardson; +Cc: dev, david.marchand 12/11/2020 10:41, Bruce Richardson: > Rather than just installing all examples, we can use the build checks to > filter out any examples that are missing dependencies or are otherwise > unbuildable on the current system. > > Signed-off-by: Bruce Richardson <bruce.richardson@intel.com> This patch does not say why unbuildable examples should not be installed? ^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: [dpdk-dev] [PATCH v4 0/4] improve examples installation 2020-11-12 9:41 ` [dpdk-dev] [PATCH v4 0/4] improve examples installation Bruce Richardson ` (3 preceding siblings ...) 2020-11-12 9:41 ` [dpdk-dev] [PATCH v4 4/4] examples: skip installing unbuildable examples Bruce Richardson @ 2020-11-12 11:14 ` David Marchand 2020-11-12 11:38 ` Bruce Richardson 2020-11-12 18:36 ` Thomas Monjalon 5 siblings, 1 reply; 27+ messages in thread From: David Marchand @ 2020-11-12 11:14 UTC (permalink / raw) To: Bruce Richardson; +Cc: dev, Thomas Monjalon On Thu, Nov 12, 2020 at 10:42 AM Bruce Richardson <bruce.richardson@intel.com> wrote: > > This patch improves the installation of the examples when "ninja install" is > run. It removes issues with the directory structure being flattened out, and > removes from the install list any examples that are not buildable with built > DPDK code. > > V4: resubmit v3 to retest in CI hopefully with proper patch tracking > > V3: fix issues with building on Windows > > V2: add support for filtering examples that won't build > > Bruce Richardson (4): > examples: fix flattening directory layout on install > examples/l2fwd-keepalive: skip build when no librt > examples: stop processing build file if build is impossible > examples: skip installing unbuildable examples Thanks Bruce. This series looks good to me. My only comment is about vm_power_manager which won't build without the internal librte_power header. It builds fine with meson, because I guess meson pulls this library directory into the include flags of the example, but it won't build outside. We can skip it in devtools/test-meson-builds.sh but, on the other hand, I would exclude it from installing until it is fixed (in a future release). -- David Marchand ^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: [dpdk-dev] [PATCH v4 0/4] improve examples installation 2020-11-12 11:14 ` [dpdk-dev] [PATCH v4 0/4] improve examples installation David Marchand @ 2020-11-12 11:38 ` Bruce Richardson 2020-11-12 13:48 ` David Marchand 0 siblings, 1 reply; 27+ messages in thread From: Bruce Richardson @ 2020-11-12 11:38 UTC (permalink / raw) To: David Marchand; +Cc: dev, Thomas Monjalon On Thu, Nov 12, 2020 at 12:14:27PM +0100, David Marchand wrote: > On Thu, Nov 12, 2020 at 10:42 AM Bruce Richardson > <bruce.richardson@intel.com> wrote: > > > > This patch improves the installation of the examples when "ninja install" is > > run. It removes issues with the directory structure being flattened out, and > > removes from the install list any examples that are not buildable with built > > DPDK code. > > > > V4: resubmit v3 to retest in CI hopefully with proper patch tracking > > > > V3: fix issues with building on Windows > > > > V2: add support for filtering examples that won't build > > > > Bruce Richardson (4): > > examples: fix flattening directory layout on install > > examples/l2fwd-keepalive: skip build when no librt > > examples: stop processing build file if build is impossible > > examples: skip installing unbuildable examples > > Thanks Bruce. > This series looks good to me. > > My only comment is about vm_power_manager which won't build without > the internal librte_power header. > It builds fine with meson, because I guess meson pulls this library > directory into the include flags of the example, but it won't build > outside. > > We can skip it in devtools/test-meson-builds.sh but, on the other > hand, I would exclude it from installing until it is fixed (in a > future release). > Yes, good point. Rather than adding special logic for it, I think we just add it in the initialization of the exclusion array in patch 4, i.e. -dpdk_examples_exclude = []$ +dpdk_examples_exclude = ['vm_power_manager'] Can this be done on apply, or do you want a v5 for it? /Bruce ^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: [dpdk-dev] [PATCH v4 0/4] improve examples installation 2020-11-12 11:38 ` Bruce Richardson @ 2020-11-12 13:48 ` David Marchand 2020-11-12 14:57 ` Bruce Richardson 0 siblings, 1 reply; 27+ messages in thread From: David Marchand @ 2020-11-12 13:48 UTC (permalink / raw) To: Bruce Richardson; +Cc: dev, Thomas Monjalon On Thu, Nov 12, 2020 at 12:38 PM Bruce Richardson <bruce.richardson@intel.com> wrote: > > My only comment is about vm_power_manager which won't build without > > the internal librte_power header. > > It builds fine with meson, because I guess meson pulls this library > > directory into the include flags of the example, but it won't build > > outside. > > > > We can skip it in devtools/test-meson-builds.sh but, on the other > > hand, I would exclude it from installing until it is fixed (in a > > future release). > > > Yes, good point. > Rather than adding special logic for it, I think we just add it in the > initialization of the exclusion array in patch 4, i.e. > > -dpdk_examples_exclude = []$ > +dpdk_examples_exclude = ['vm_power_manager'] > > Can this be done on apply, or do you want a v5 for it? CI is happy with v4. I tested this additional change, lgtm too. I would add something in the commitlog to give some context: """ vm_power_manager relies on an internal header and can't build outside the dpdk tree. Hence, it is still built with meson but it is excluded from install examples until it has been fixed. """ WDYT? -- David Marchand ^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: [dpdk-dev] [PATCH v4 0/4] improve examples installation 2020-11-12 13:48 ` David Marchand @ 2020-11-12 14:57 ` Bruce Richardson 0 siblings, 0 replies; 27+ messages in thread From: Bruce Richardson @ 2020-11-12 14:57 UTC (permalink / raw) To: David Marchand; +Cc: dev, Thomas Monjalon On Thu, Nov 12, 2020 at 02:48:52PM +0100, David Marchand wrote: > On Thu, Nov 12, 2020 at 12:38 PM Bruce Richardson > <bruce.richardson@intel.com> wrote: > > > My only comment is about vm_power_manager which won't build without > > > the internal librte_power header. > > > It builds fine with meson, because I guess meson pulls this library > > > directory into the include flags of the example, but it won't build > > > outside. > > > > > > We can skip it in devtools/test-meson-builds.sh but, on the other > > > hand, I would exclude it from installing until it is fixed (in a > > > future release). > > > > > Yes, good point. > > Rather than adding special logic for it, I think we just add it in the > > initialization of the exclusion array in patch 4, i.e. > > > > -dpdk_examples_exclude = []$ > > +dpdk_examples_exclude = ['vm_power_manager'] > > > > Can this be done on apply, or do you want a v5 for it? > > CI is happy with v4. > > I tested this additional change, lgtm too. > I would add something in the commitlog to give some context: > > """ > vm_power_manager relies on an internal header and can't build outside > the dpdk tree. > Hence, it is still built with meson but it is excluded from install > examples until it has been fixed. > """ > > WDYT? > LGTM ^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: [dpdk-dev] [PATCH v4 0/4] improve examples installation 2020-11-12 9:41 ` [dpdk-dev] [PATCH v4 0/4] improve examples installation Bruce Richardson ` (4 preceding siblings ...) 2020-11-12 11:14 ` [dpdk-dev] [PATCH v4 0/4] improve examples installation David Marchand @ 2020-11-12 18:36 ` Thomas Monjalon 5 siblings, 0 replies; 27+ messages in thread From: Thomas Monjalon @ 2020-11-12 18:36 UTC (permalink / raw) To: Bruce Richardson; +Cc: dev, david.marchand 12/11/2020 10:41, Bruce Richardson: > This patch improves the installation of the examples when "ninja install" is > run. It removes issues with the directory structure being flattened out, and > removes from the install list any examples that are not buildable with built > DPDK code. > > V4: resubmit v3 to retest in CI hopefully with proper patch tracking > > V3: fix issues with building on Windows > > V2: add support for filtering examples that won't build > > Bruce Richardson (4): > examples: fix flattening directory layout on install > examples/l2fwd-keepalive: skip build when no librt > examples: stop processing build file if build is impossible > examples: skip installing unbuildable examples Applied without last patch, thanks. After offline discussions with Bruce and David, the decision is to rework the patch 4 as part of another series that David is preparing. In short: we keep the option to install all examples and add a new option to install only buildable examples. ^ permalink raw reply [flat|nested] 27+ messages in thread
end of thread, other threads:[~2020-11-12 18:36 UTC | newest] Thread overview: 27+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2020-11-10 17:08 [dpdk-dev] [PATCH] install: fix flattening of examples directory Bruce Richardson 2020-11-10 17:09 ` Bruce Richardson 2020-11-10 17:14 ` David Marchand 2020-11-10 17:33 ` [dpdk-dev] [dpdk-stable] " David Marchand 2020-11-10 17:42 ` Bruce Richardson 2020-11-11 15:56 ` [dpdk-dev] [PATCH v2 1/2] examples: fix flattening directory layout on install Bruce Richardson 2020-11-11 15:56 ` [dpdk-dev] [PATCH v2 2/2] examples: skip installing unbuildable examples Bruce Richardson 2020-11-11 17:33 ` Bruce Richardson 2020-11-12 9:14 ` David Marchand 2020-11-12 9:24 ` Bruce Richardson 2020-11-12 9:27 ` David Marchand 2020-11-12 9:35 ` Bruce Richardson 2020-11-11 17:48 ` [dpdk-dev] [PATCH v3 1/4] examples: fix flattening directory layout on install Bruce Richardson 2020-11-11 17:48 ` [dpdk-dev] [PATCH v3 2/4] examples/l2fwd-keepalive: skip build when no librt Bruce Richardson 2020-11-11 17:48 ` [dpdk-dev] [PATCH v3 3/4] examples: stop processing build file if build is impossible Bruce Richardson 2020-11-11 17:48 ` [dpdk-dev] [PATCH v3 4/4] examples: skip installing unbuildable examples Bruce Richardson 2020-11-12 9:41 ` [dpdk-dev] [PATCH v4 0/4] improve examples installation Bruce Richardson 2020-11-12 9:41 ` [dpdk-dev] [PATCH v4 1/4] examples: fix flattening directory layout on install Bruce Richardson 2020-11-12 9:41 ` [dpdk-dev] [PATCH v4 2/4] examples/l2fwd-keepalive: skip build when no librt Bruce Richardson 2020-11-12 9:41 ` [dpdk-dev] [PATCH v4 3/4] examples: stop processing build file if build is impossible Bruce Richardson 2020-11-12 9:41 ` [dpdk-dev] [PATCH v4 4/4] examples: skip installing unbuildable examples Bruce Richardson 2020-11-12 17:06 ` Thomas Monjalon 2020-11-12 11:14 ` [dpdk-dev] [PATCH v4 0/4] improve examples installation David Marchand 2020-11-12 11:38 ` Bruce Richardson 2020-11-12 13:48 ` David Marchand 2020-11-12 14:57 ` Bruce Richardson 2020-11-12 18:36 ` Thomas Monjalon
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).