DPDK patches and discussions
 help / color / mirror / Atom feed
* [PATCH] build: output a dependency log in build directory
@ 2024-07-30 14:55 Bruce Richardson
  2024-07-31  9:07 ` Konstantin Ananyev
                   ` (3 more replies)
  0 siblings, 4 replies; 54+ messages in thread
From: Bruce Richardson @ 2024-07-30 14:55 UTC (permalink / raw)
  To: dev; +Cc: anatoly.burakov, Bruce Richardson

As meson processes our DPDK source tree it manages dependencies
specified by each individual driver. To enable future analysis of the
dependency links between components, log the dependencies of each DPDK
component as it gets processed. This could potentially allow other tools
to automatically enable or disable components based on the desired end
components to be built, e.g. if the user requests net/ice, ensure that
common/iavf is also enabled in the drivers.

The output file produced is in "dot" or "graphviz" format, which allows
producing a graphical representation of the DPDK dependency tree if so
desired. For example: "dot -Tpng -O build/deps.dot" to produce the
image file "build/deps.dot.png".

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
---
 app/meson.build        |  1 +
 buildtools/log-deps.py | 43 ++++++++++++++++++++++++++++++++++++++++++
 buildtools/meson.build |  2 ++
 drivers/meson.build    |  1 +
 lib/meson.build        |  1 +
 5 files changed, 48 insertions(+)
 create mode 100644 buildtools/log-deps.py

diff --git a/app/meson.build b/app/meson.build
index 5b2c80c7a1..6afa457f4c 100644
--- a/app/meson.build
+++ b/app/meson.build
@@ -76,6 +76,7 @@ foreach app:apps
 
     if build
         subdir(name)
+        run_command([log_deps_cmd, name, deps])
         if not build and require_apps
             error('Cannot build explicitly requested app "@0@".\n'.format(name)
                   + '\tReason: ' + reason)
diff --git a/buildtools/log-deps.py b/buildtools/log-deps.py
new file mode 100644
index 0000000000..a4331fa15b
--- /dev/null
+++ b/buildtools/log-deps.py
@@ -0,0 +1,43 @@
+#! /usr/bin/env python3
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright(c) 2024 Intel Corporation
+
+"""Utility script to build up a list of dependencies from meson."""
+
+import os
+import sys
+
+
+def file_to_list(filename):
+    """Read file into a list of strings."""
+    with open(filename) as f:
+        return f.readlines()
+
+
+def list_to_file(filename, lines):
+    """Write a list of strings out to a file."""
+    with open(filename, 'w') as f:
+        f.writelines(lines)
+
+
+depsfile = f'{os.environ["MESON_BUILD_ROOT"]}/deps.dot'
+
+# to reset the deps file on each build, the script is called without any params
+if len(sys.argv) == 1:
+    os.remove(depsfile)
+    sys.exit(0)
+
+try:
+    contents = file_to_list(depsfile)
+except FileNotFoundError:
+    contents = ['digraph {\n', '}\n']
+
+component = sys.argv[1]
+if len(sys.argv) > 2:
+    contents[-1] = f'"{component}" -> {{ "{"\", \"".join(sys.argv[2:])}" }}\n'
+else:
+    contents[-1] = f'"{component}"\n'
+
+contents.append('}\n')
+
+list_to_file(depsfile, contents)
diff --git a/buildtools/meson.build b/buildtools/meson.build
index 3adf34e1a8..332f0f3d38 100644
--- a/buildtools/meson.build
+++ b/buildtools/meson.build
@@ -24,6 +24,8 @@ get_numa_count_cmd = py3 + files('get-numa-count.py')
 get_test_suites_cmd = py3 + files('get-test-suites.py')
 has_hugepages_cmd = py3 + files('has-hugepages.py')
 cmdline_gen_cmd = py3 + files('dpdk-cmdline-gen.py')
+log_deps_cmd = py3 + files('log-deps.py')
+run_command(log_deps_cmd)  # call with no parameters to reset the file
 
 # install any build tools that end-users might want also
 install_data([
diff --git a/drivers/meson.build b/drivers/meson.build
index 66931d4241..44935e067c 100644
--- a/drivers/meson.build
+++ b/drivers/meson.build
@@ -154,6 +154,7 @@ foreach subpath:subdirs
         if build
             # pull in driver directory which should update all the local variables
             subdir(drv_path)
+            run_command([log_deps_cmd, drv_path.underscorify(), deps])
 
             if dpdk_conf.get('RTE_IOVA_IN_MBUF') == 0 and require_iova_in_mbuf
                 build = false
diff --git a/lib/meson.build b/lib/meson.build
index 162287753f..da2815465f 100644
--- a/lib/meson.build
+++ b/lib/meson.build
@@ -160,6 +160,7 @@ foreach l:libraries
 
     if build
         subdir(l)
+        run_command([log_deps_cmd, l, deps])
         if not build and require_libs
             error('Cannot build explicitly requested lib "@0@".\n'.format(name)
                     +'\tReason: ' + reason)
-- 
2.43.0


^ permalink raw reply	[flat|nested] 54+ messages in thread

* RE: [PATCH] build: output a dependency log in build directory
  2024-07-30 14:55 [PATCH] build: output a dependency log in build directory Bruce Richardson
@ 2024-07-31  9:07 ` Konstantin Ananyev
  2024-07-31 10:17 ` Ferruh Yigit
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 54+ messages in thread
From: Konstantin Ananyev @ 2024-07-31  9:07 UTC (permalink / raw)
  To: Bruce Richardson, dev; +Cc: anatoly.burakov


> As meson processes our DPDK source tree it manages dependencies
> specified by each individual driver. To enable future analysis of the
> dependency links between components, log the dependencies of each DPDK
> component as it gets processed. This could potentially allow other tools
> to automatically enable or disable components based on the desired end
> components to be built, e.g. if the user requests net/ice, ensure that
> common/iavf is also enabled in the drivers.
> 
> The output file produced is in "dot" or "graphviz" format, which allows
> producing a graphical representation of the DPDK dependency tree if so
> desired. For example: "dot -Tpng -O build/deps.dot" to produce the
> image file "build/deps.dot.png".
> 
> Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>

I think it is a great idea.
Acked-by: Konstantin Ananyev <konstantin.ananyev@huawei.com>

> ---
>  app/meson.build        |  1 +
>  buildtools/log-deps.py | 43 ++++++++++++++++++++++++++++++++++++++++++
>  buildtools/meson.build |  2 ++
>  drivers/meson.build    |  1 +
>  lib/meson.build        |  1 +
>  5 files changed, 48 insertions(+)
>  create mode 100644 buildtools/log-deps.py
> 
> diff --git a/app/meson.build b/app/meson.build
> index 5b2c80c7a1..6afa457f4c 100644
> --- a/app/meson.build
> +++ b/app/meson.build
> @@ -76,6 +76,7 @@ foreach app:apps
> 
>      if build
>          subdir(name)
> +        run_command([log_deps_cmd, name, deps])
>          if not build and require_apps
>              error('Cannot build explicitly requested app "@0@".\n'.format(name)
>                    + '\tReason: ' + reason)
> diff --git a/buildtools/log-deps.py b/buildtools/log-deps.py
> new file mode 100644
> index 0000000000..a4331fa15b
> --- /dev/null
> +++ b/buildtools/log-deps.py
> @@ -0,0 +1,43 @@
> +#! /usr/bin/env python3
> +# SPDX-License-Identifier: BSD-3-Clause
> +# Copyright(c) 2024 Intel Corporation
> +
> +"""Utility script to build up a list of dependencies from meson."""
> +
> +import os
> +import sys
> +
> +
> +def file_to_list(filename):
> +    """Read file into a list of strings."""
> +    with open(filename) as f:
> +        return f.readlines()
> +
> +
> +def list_to_file(filename, lines):
> +    """Write a list of strings out to a file."""
> +    with open(filename, 'w') as f:
> +        f.writelines(lines)
> +
> +
> +depsfile = f'{os.environ["MESON_BUILD_ROOT"]}/deps.dot'
> +
> +# to reset the deps file on each build, the script is called without any params
> +if len(sys.argv) == 1:
> +    os.remove(depsfile)
> +    sys.exit(0)
> +
> +try:
> +    contents = file_to_list(depsfile)
> +except FileNotFoundError:
> +    contents = ['digraph {\n', '}\n']
> +
> +component = sys.argv[1]
> +if len(sys.argv) > 2:
> +    contents[-1] = f'"{component}" -> {{ "{"\", \"".join(sys.argv[2:])}" }}\n'
> +else:
> +    contents[-1] = f'"{component}"\n'
> +
> +contents.append('}\n')
> +
> +list_to_file(depsfile, contents)
> diff --git a/buildtools/meson.build b/buildtools/meson.build
> index 3adf34e1a8..332f0f3d38 100644
> --- a/buildtools/meson.build
> +++ b/buildtools/meson.build
> @@ -24,6 +24,8 @@ get_numa_count_cmd = py3 + files('get-numa-count.py')
>  get_test_suites_cmd = py3 + files('get-test-suites.py')
>  has_hugepages_cmd = py3 + files('has-hugepages.py')
>  cmdline_gen_cmd = py3 + files('dpdk-cmdline-gen.py')
> +log_deps_cmd = py3 + files('log-deps.py')
> +run_command(log_deps_cmd)  # call with no parameters to reset the file
> 
>  # install any build tools that end-users might want also
>  install_data([
> diff --git a/drivers/meson.build b/drivers/meson.build
> index 66931d4241..44935e067c 100644
> --- a/drivers/meson.build
> +++ b/drivers/meson.build
> @@ -154,6 +154,7 @@ foreach subpath:subdirs
>          if build
>              # pull in driver directory which should update all the local variables
>              subdir(drv_path)
> +            run_command([log_deps_cmd, drv_path.underscorify(), deps])
> 
>              if dpdk_conf.get('RTE_IOVA_IN_MBUF') == 0 and require_iova_in_mbuf
>                  build = false
> diff --git a/lib/meson.build b/lib/meson.build
> index 162287753f..da2815465f 100644
> --- a/lib/meson.build
> +++ b/lib/meson.build
> @@ -160,6 +160,7 @@ foreach l:libraries
> 
>      if build
>          subdir(l)
> +        run_command([log_deps_cmd, l, deps])
>          if not build and require_libs
>              error('Cannot build explicitly requested lib "@0@".\n'.format(name)
>                      +'\tReason: ' + reason)
> --
> 2.43.0


^ permalink raw reply	[flat|nested] 54+ messages in thread

* Re: [PATCH] build: output a dependency log in build directory
  2024-07-30 14:55 [PATCH] build: output a dependency log in build directory Bruce Richardson
  2024-07-31  9:07 ` Konstantin Ananyev
@ 2024-07-31 10:17 ` Ferruh Yigit
  2024-07-31 10:27   ` Bruce Richardson
  2024-08-02 12:44 ` [PATCH v2 0/7] record and rework component dependencies Bruce Richardson
  2024-09-04 15:08 ` [PATCH v3 0/8] " Anatoly Burakov
  3 siblings, 1 reply; 54+ messages in thread
From: Ferruh Yigit @ 2024-07-31 10:17 UTC (permalink / raw)
  To: Bruce Richardson, dev; +Cc: anatoly.burakov

On 7/30/2024 3:55 PM, Bruce Richardson wrote:
> As meson processes our DPDK source tree it manages dependencies
> specified by each individual driver. To enable future analysis of the
> dependency links between components, log the dependencies of each DPDK
> component as it gets processed. This could potentially allow other tools
> to automatically enable or disable components based on the desired end
> components to be built, e.g. if the user requests net/ice, ensure that
> common/iavf is also enabled in the drivers.
> 
> The output file produced is in "dot" or "graphviz" format, which allows
> producing a graphical representation of the DPDK dependency tree if so
> desired. For example: "dot -Tpng -O build/deps.dot" to produce the
> image file "build/deps.dot.png".
> 
> Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
>

I tested it quickly, good to have this dependency list, at least it
makes some duplicated dependencies obvious from .dot file.

But generated dependency graph is too large to be useful, does it make
sense to have a new meson option that control this dependency generation:
-Dgenerate_deps=apps
-Dgenerate_deps=libs
-Dgenerate_deps=drivers
-Dgenerate_deps=all

Not sure about what should be the default option,
as this is not always required/used, disabling this option by default
saves unnecessary work,
but disabling it by default may cause not noticing when it is broken,
perhaps this can be addressed by adding this option to
'devtools/test-meson-builds.sh'.

btw, it generates following warning:

WARNING: You should add the boolean check kwarg to the run_command call.


         It currently defaults to false,


         but it will default to true in future releases of meson.


         See also: https://github.com/mesonbuild/meson/issues/9300


> ---
>  app/meson.build        |  1 +
>  buildtools/log-deps.py | 43 ++++++++++++++++++++++++++++++++++++++++++
>  buildtools/meson.build |  2 ++
>  drivers/meson.build    |  1 +
>  lib/meson.build        |  1 +
>  5 files changed, 48 insertions(+)
>  create mode 100644 buildtools/log-deps.py
> 
> diff --git a/app/meson.build b/app/meson.build
> index 5b2c80c7a1..6afa457f4c 100644
> --- a/app/meson.build
> +++ b/app/meson.build
> @@ -76,6 +76,7 @@ foreach app:apps
>  
>      if build
>          subdir(name)
> +        run_command([log_deps_cmd, name, deps])
>          if not build and require_apps
>              error('Cannot build explicitly requested app "@0@".\n'.format(name)
>                    + '\tReason: ' + reason)
> diff --git a/buildtools/log-deps.py b/buildtools/log-deps.py
> new file mode 100644
> index 0000000000..a4331fa15b
> --- /dev/null
> +++ b/buildtools/log-deps.py
> @@ -0,0 +1,43 @@
> +#! /usr/bin/env python3
> +# SPDX-License-Identifier: BSD-3-Clause
> +# Copyright(c) 2024 Intel Corporation
> +
> +"""Utility script to build up a list of dependencies from meson."""
> +
> +import os
> +import sys
> +
> +
> +def file_to_list(filename):
> +    """Read file into a list of strings."""
> +    with open(filename) as f:
> +        return f.readlines()
> +
> +
> +def list_to_file(filename, lines):
> +    """Write a list of strings out to a file."""
> +    with open(filename, 'w') as f:
> +        f.writelines(lines)
> +
> +
> +depsfile = f'{os.environ["MESON_BUILD_ROOT"]}/deps.dot'
> +
> +# to reset the deps file on each build, the script is called without any params
> +if len(sys.argv) == 1:
> +    os.remove(depsfile)
> +    sys.exit(0)
> +
> +try:
> +    contents = file_to_list(depsfile)
> +except FileNotFoundError:
> +    contents = ['digraph {\n', '}\n']
> +
> +component = sys.argv[1]
> +if len(sys.argv) > 2:
> +    contents[-1] = f'"{component}" -> {{ "{"\", \"".join(sys.argv[2:])}" }}\n'
> +else:
> +    contents[-1] = f'"{component}"\n'
> +
> +contents.append('}\n')
> +
> +list_to_file(depsfile, contents)
> diff --git a/buildtools/meson.build b/buildtools/meson.build
> index 3adf34e1a8..332f0f3d38 100644
> --- a/buildtools/meson.build
> +++ b/buildtools/meson.build
> @@ -24,6 +24,8 @@ get_numa_count_cmd = py3 + files('get-numa-count.py')
>  get_test_suites_cmd = py3 + files('get-test-suites.py')
>  has_hugepages_cmd = py3 + files('has-hugepages.py')
>  cmdline_gen_cmd = py3 + files('dpdk-cmdline-gen.py')
> +log_deps_cmd = py3 + files('log-deps.py')
> +run_command(log_deps_cmd)  # call with no parameters to reset the file
>  
>  # install any build tools that end-users might want also
>  install_data([
> diff --git a/drivers/meson.build b/drivers/meson.build
> index 66931d4241..44935e067c 100644
> --- a/drivers/meson.build
> +++ b/drivers/meson.build
> @@ -154,6 +154,7 @@ foreach subpath:subdirs
>          if build
>              # pull in driver directory which should update all the local variables
>              subdir(drv_path)
> +            run_command([log_deps_cmd, drv_path.underscorify(), deps])
>  
>              if dpdk_conf.get('RTE_IOVA_IN_MBUF') == 0 and require_iova_in_mbuf
>                  build = false
> diff --git a/lib/meson.build b/lib/meson.build
> index 162287753f..da2815465f 100644
> --- a/lib/meson.build
> +++ b/lib/meson.build
> @@ -160,6 +160,7 @@ foreach l:libraries
>  
>      if build
>          subdir(l)
> +        run_command([log_deps_cmd, l, deps])
>          if not build and require_libs
>              error('Cannot build explicitly requested lib "@0@".\n'.format(name)
>                      +'\tReason: ' + reason)


^ permalink raw reply	[flat|nested] 54+ messages in thread

* Re: [PATCH] build: output a dependency log in build directory
  2024-07-31 10:17 ` Ferruh Yigit
@ 2024-07-31 10:27   ` Bruce Richardson
  0 siblings, 0 replies; 54+ messages in thread
From: Bruce Richardson @ 2024-07-31 10:27 UTC (permalink / raw)
  To: Ferruh Yigit; +Cc: dev, anatoly.burakov

On Wed, Jul 31, 2024 at 11:17:54AM +0100, Ferruh Yigit wrote:
> On 7/30/2024 3:55 PM, Bruce Richardson wrote:
> > As meson processes our DPDK source tree it manages dependencies
> > specified by each individual driver. To enable future analysis of the
> > dependency links between components, log the dependencies of each DPDK
> > component as it gets processed. This could potentially allow other tools
> > to automatically enable or disable components based on the desired end
> > components to be built, e.g. if the user requests net/ice, ensure that
> > common/iavf is also enabled in the drivers.
> > 
> > The output file produced is in "dot" or "graphviz" format, which allows
> > producing a graphical representation of the DPDK dependency tree if so
> > desired. For example: "dot -Tpng -O build/deps.dot" to produce the
> > image file "build/deps.dot.png".
> > 
> > Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
> >
> 
> I tested it quickly, good to have this dependency list, at least it
> makes some duplicated dependencies obvious from .dot file.
> 
> But generated dependency graph is too large to be useful, does it make
> sense to have a new meson option that control this dependency generation:
> -Dgenerate_deps=apps
> -Dgenerate_deps=libs
> -Dgenerate_deps=drivers
> -Dgenerate_deps=all
> 

I had indeed noticed that. Right now I'm focused on cutting down our
dependency lists to make things more manageable - I have a script to
automate the identification of excess dependencies and I already have a
patch for cleaning up the libraries to a minimal dependency set.

I also think having separate drivers and libraries charts could be useful I
wouldn't want to add a build option for it though - it's not something that
should be necessary. Instead, I will look at other options, perhaps even
doing multiple dependency files - they don't seem to slow meson down, so
why not always do them all.

> Not sure about what should be the default option,
> as this is not always required/used, disabling this option by default
> saves unnecessary work,
> but disabling it by default may cause not noticing when it is broken,
> perhaps this can be addressed by adding this option to
> 'devtools/test-meson-builds.sh'.
> 
> btw, it generates following warning:

Oops - will look to fix in V2.

/Bruce

^ permalink raw reply	[flat|nested] 54+ messages in thread

* [PATCH v2 0/7] record and rework component dependencies
  2024-07-30 14:55 [PATCH] build: output a dependency log in build directory Bruce Richardson
  2024-07-31  9:07 ` Konstantin Ananyev
  2024-07-31 10:17 ` Ferruh Yigit
@ 2024-08-02 12:44 ` Bruce Richardson
  2024-08-02 12:44   ` [PATCH v2 1/7] build: output a dependency log in build directory Bruce Richardson
                     ` (9 more replies)
  2024-09-04 15:08 ` [PATCH v3 0/8] " Anatoly Burakov
  3 siblings, 10 replies; 54+ messages in thread
From: Bruce Richardson @ 2024-08-02 12:44 UTC (permalink / raw)
  To: dev; +Cc: ferruh.yigit, konstantin.ananyev, anatoly.burakov, Bruce Richardson

As part of the meson build, we can record the dependencies for each
component as we process it, logging them to a file. This file can be
used as input to a number of other scripts and tools, for example, to
graph the dependencies, or to allow higher-level build-config tools to
automatically enable component requirements, etc.

The first patch of this set generates the basic dependency tree. The
second patch does some processing of that dependency tree to identify
cases where dependencies are being unnecessarily specified. Reducing
these makes it easier to have readable dependency graphs in future,
without affecting the build.

The following 4 patches are based on the output of the second patch, and
greatly cut down the number of direct dependency links between
components. Even with the cut-down dependencies, the full dependency
graph is nigh-unreadable, so the final patch adds a new script to
generate dependency tree subgraphs, creating dot files for e.g. the
dependencies of a particular component, or a component class such as
mempool drivers.

Bruce Richardson (7):
  build: output a dependency log in build directory
  devtools: add script to flag unneeded dependencies
  build: remove kvargs from driver class dependencies
  build: reduce library dependencies
  build: reduce driver dependencies
  build: reduce app dependencies
  devtools: add script to generate DPDK dependency graphs

 app/dumpcap/meson.build                    |   2 +-
 app/graph/meson.build                      |   2 +-
 app/meson.build                            |   1 +
 app/pdump/meson.build                      |   2 +-
 app/proc-info/meson.build                  |   2 +-
 app/test-crypto-perf/meson.build           |   2 +-
 app/test-fib/meson.build                   |   2 +-
 app/test-sad/meson.build                   |   2 +-
 app/test/meson.build                       |   2 +-
 buildtools/log-deps.py                     |  43 +++++++
 buildtools/meson.build                     |   2 +
 devtools/draw-dependency-graphs.py         | 136 +++++++++++++++++++++
 devtools/find-duplicate-deps.py            |  53 ++++++++
 drivers/baseband/fpga_5gnr_fec/meson.build |   2 +-
 drivers/baseband/fpga_lte_fec/meson.build  |   2 +-
 drivers/baseband/la12xx/meson.build        |   2 +-
 drivers/baseband/null/meson.build          |   2 +-
 drivers/baseband/turbo_sw/meson.build      |   2 +-
 drivers/bus/auxiliary/meson.build          |   2 -
 drivers/bus/dpaa/meson.build               |   2 +-
 drivers/bus/fslmc/meson.build              |   2 +-
 drivers/bus/ifpga/meson.build              |   2 +-
 drivers/bus/pci/meson.build                |   4 +-
 drivers/bus/platform/meson.build           |   1 -
 drivers/bus/uacce/meson.build              |   2 -
 drivers/bus/vdev/meson.build               |   2 -
 drivers/common/cnxk/meson.build            |   4 +-
 drivers/common/cpt/meson.build             |   2 +-
 drivers/common/idpf/meson.build            |   2 +-
 drivers/common/mlx5/meson.build            |   2 +-
 drivers/compress/mlx5/meson.build          |   2 +-
 drivers/compress/nitrox/meson.build        |   2 +-
 drivers/compress/octeontx/meson.build      |   2 +-
 drivers/crypto/bcmfs/meson.build           |   2 +-
 drivers/crypto/cnxk/meson.build            |   2 +-
 drivers/crypto/dpaa_sec/meson.build        |   2 +-
 drivers/crypto/ipsec_mb/meson.build        |   2 +-
 drivers/crypto/mlx5/meson.build            |   2 +-
 drivers/crypto/nitrox/meson.build          |   2 +-
 drivers/dma/cnxk/meson.build               |   2 +-
 drivers/dma/dpaa/meson.build               |   2 +-
 drivers/dma/dpaa2/meson.build              |   2 +-
 drivers/dma/odm/meson.build                |   2 +-
 drivers/dma/skeleton/meson.build           |   2 +-
 drivers/event/cnxk/meson.build             |   2 +-
 drivers/event/dlb2/meson.build             |   2 +-
 drivers/event/dpaa2/meson.build            |   2 +-
 drivers/event/meson.build                  |   2 +-
 drivers/event/octeontx/meson.build         |   3 +-
 drivers/event/sw/meson.build               |   2 +-
 drivers/mempool/cnxk/meson.build           |   2 +-
 drivers/mempool/dpaa/meson.build           |   2 +-
 drivers/mempool/dpaa2/meson.build          |   2 +-
 drivers/mempool/octeontx/meson.build       |   2 +-
 drivers/meson.build                        |   1 +
 drivers/net/cnxk/meson.build               |   3 +-
 drivers/net/iavf/meson.build               |   2 +-
 drivers/net/ice/meson.build                |   2 +-
 drivers/net/mana/meson.build               |   2 +-
 drivers/net/meson.build                    |   2 +-
 drivers/net/mlx5/meson.build               |   2 +-
 drivers/net/sfc/meson.build                |   2 +-
 drivers/net/softnic/meson.build            |   2 +-
 drivers/raw/cnxk_bphy/meson.build          |   2 +-
 drivers/raw/cnxk_gpio/meson.build          |   2 +-
 drivers/raw/ntb/meson.build                |   2 +-
 drivers/raw/skeleton/meson.build           |   2 +-
 drivers/regex/meson.build                  |   2 +-
 drivers/regex/mlx5/meson.build             |   2 +-
 drivers/vdpa/ifc/meson.build               |   2 +-
 drivers/vdpa/meson.build                   |   3 +-
 drivers/vdpa/mlx5/meson.build              |   2 +-
 drivers/vdpa/sfc/meson.build               |   2 +-
 lib/argparse/meson.build                   |   2 +-
 lib/bbdev/meson.build                      |   2 +-
 lib/bitratestats/meson.build               |   2 +-
 lib/bpf/meson.build                        |   2 +-
 lib/cmdline/meson.build                    |   2 +-
 lib/compressdev/meson.build                |   2 +-
 lib/cryptodev/meson.build                  |   2 +-
 lib/dispatcher/meson.build                 |   2 +-
 lib/distributor/meson.build                |   2 +-
 lib/dmadev/meson.build                     |   2 -
 lib/eal/meson.build                        |   5 +-
 lib/efd/meson.build                        |   2 +-
 lib/ethdev/meson.build                     |   2 +-
 lib/eventdev/meson.build                   |   3 +-
 lib/fib/meson.build                        |   2 +-
 lib/gpudev/meson.build                     |   2 +-
 lib/graph/meson.build                      |   2 +-
 lib/gro/meson.build                        |   2 +-
 lib/gso/meson.build                        |   2 +-
 lib/hash/meson.build                       |   4 +-
 lib/ip_frag/meson.build                    |   2 +-
 lib/ipsec/meson.build                      |   2 +-
 lib/kvargs/meson.build                     |   2 +-
 lib/latencystats/meson.build               |   2 +-
 lib/lpm/meson.build                        |   3 +-
 lib/mbuf/meson.build                       |   2 +-
 lib/member/meson.build                     |   2 +-
 lib/mempool/meson.build                    |   2 +-
 lib/meson.build                            |   1 +
 lib/metrics/meson.build                    |   2 +-
 lib/mldev/meson.build                      |   2 +-
 lib/net/meson.build                        |   2 +-
 lib/node/meson.build                       |   2 +-
 lib/pcapng/meson.build                     |   2 +-
 lib/pdcp/meson.build                       |   2 +-
 lib/pdump/meson.build                      |   2 +-
 lib/pipeline/meson.build                   |   2 +-
 lib/port/meson.build                       |   2 +-
 lib/power/meson.build                      |   2 +-
 lib/rawdev/meson.build                     |   2 -
 lib/rcu/meson.build                        |   2 +-
 lib/regexdev/meson.build                   |   2 +-
 lib/reorder/meson.build                    |   2 +-
 lib/rib/meson.build                        |   2 +-
 lib/ring/meson.build                       |   1 -
 lib/sched/meson.build                      |   2 +-
 lib/security/meson.build                   |   2 +-
 lib/table/meson.build                      |   2 +-
 lib/telemetry/meson.build                  |   2 +-
 lib/vhost/meson.build                      |   2 +-
 123 files changed, 347 insertions(+), 134 deletions(-)
 create mode 100644 buildtools/log-deps.py
 create mode 100755 devtools/draw-dependency-graphs.py
 create mode 100755 devtools/find-duplicate-deps.py

--
2.43.0


^ permalink raw reply	[flat|nested] 54+ messages in thread

* [PATCH v2 1/7] build: output a dependency log in build directory
  2024-08-02 12:44 ` [PATCH v2 0/7] record and rework component dependencies Bruce Richardson
@ 2024-08-02 12:44   ` Bruce Richardson
  2024-09-02 14:34     ` Burakov, Anatoly
  2024-08-02 12:44   ` [PATCH v2 2/7] devtools: add script to flag unneeded dependencies Bruce Richardson
                     ` (8 subsequent siblings)
  9 siblings, 1 reply; 54+ messages in thread
From: Bruce Richardson @ 2024-08-02 12:44 UTC (permalink / raw)
  To: dev; +Cc: ferruh.yigit, konstantin.ananyev, anatoly.burakov, Bruce Richardson

As meson processes our DPDK source tree it manages dependencies
specified by each individual driver. To enable future analysis of the
dependency links between components, log the dependencies of each DPDK
component as it gets processed. This could potentially allow other tools
to automatically enable or disable components based on the desired end
components to be built, e.g. if the user requests net/ice, ensure that
common/iavf is also enabled in the drivers.

The output file produced is in "dot" or "graphviz" format, which allows
producing a graphical representation of the DPDK dependency tree if so
desired. For example: "dot -Tpng -O build/deps.dot" to produce the
image file "build/deps.dot.png".

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Acked-by: Konstantin Ananyev <konstantin.ananyev@huawei.com>

---
 app/meson.build        |  1 +
 buildtools/log-deps.py | 43 ++++++++++++++++++++++++++++++++++++++++++
 buildtools/meson.build |  2 ++
 drivers/meson.build    |  1 +
 lib/meson.build        |  1 +
 5 files changed, 48 insertions(+)
 create mode 100644 buildtools/log-deps.py

diff --git a/app/meson.build b/app/meson.build
index 5b2c80c7a1..837a57ad0a 100644
--- a/app/meson.build
+++ b/app/meson.build
@@ -76,6 +76,7 @@ foreach app:apps

     if build
         subdir(name)
+        run_command([log_deps_cmd, 'dpdk-' + name, deps], check: false)
         if not build and require_apps
             error('Cannot build explicitly requested app "@0@".\n'.format(name)
                   + '\tReason: ' + reason)
diff --git a/buildtools/log-deps.py b/buildtools/log-deps.py
new file mode 100644
index 0000000000..a4331fa15b
--- /dev/null
+++ b/buildtools/log-deps.py
@@ -0,0 +1,43 @@
+#! /usr/bin/env python3
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright(c) 2024 Intel Corporation
+
+"""Utility script to build up a list of dependencies from meson."""
+
+import os
+import sys
+
+
+def file_to_list(filename):
+    """Read file into a list of strings."""
+    with open(filename) as f:
+        return f.readlines()
+
+
+def list_to_file(filename, lines):
+    """Write a list of strings out to a file."""
+    with open(filename, 'w') as f:
+        f.writelines(lines)
+
+
+depsfile = f'{os.environ["MESON_BUILD_ROOT"]}/deps.dot'
+
+# to reset the deps file on each build, the script is called without any params
+if len(sys.argv) == 1:
+    os.remove(depsfile)
+    sys.exit(0)
+
+try:
+    contents = file_to_list(depsfile)
+except FileNotFoundError:
+    contents = ['digraph {\n', '}\n']
+
+component = sys.argv[1]
+if len(sys.argv) > 2:
+    contents[-1] = f'"{component}" -> {{ "{"\", \"".join(sys.argv[2:])}" }}\n'
+else:
+    contents[-1] = f'"{component}"\n'
+
+contents.append('}\n')
+
+list_to_file(depsfile, contents)
diff --git a/buildtools/meson.build b/buildtools/meson.build
index 3adf34e1a8..e2ba9d0ad4 100644
--- a/buildtools/meson.build
+++ b/buildtools/meson.build
@@ -24,6 +24,8 @@ get_numa_count_cmd = py3 + files('get-numa-count.py')
 get_test_suites_cmd = py3 + files('get-test-suites.py')
 has_hugepages_cmd = py3 + files('has-hugepages.py')
 cmdline_gen_cmd = py3 + files('dpdk-cmdline-gen.py')
+log_deps_cmd = py3 + files('log-deps.py')
+run_command(log_deps_cmd, check: false)  # call with no parameters to reset the file

 # install any build tools that end-users might want also
 install_data([
diff --git a/drivers/meson.build b/drivers/meson.build
index 66931d4241..d56308f1c1 100644
--- a/drivers/meson.build
+++ b/drivers/meson.build
@@ -154,6 +154,7 @@ foreach subpath:subdirs
         if build
             # pull in driver directory which should update all the local variables
             subdir(drv_path)
+            run_command([log_deps_cmd, class + '_' + name, deps], check: false)

             if dpdk_conf.get('RTE_IOVA_IN_MBUF') == 0 and require_iova_in_mbuf
                 build = false
diff --git a/lib/meson.build b/lib/meson.build
index 162287753f..106c2a947c 100644
--- a/lib/meson.build
+++ b/lib/meson.build
@@ -160,6 +160,7 @@ foreach l:libraries

     if build
         subdir(l)
+        run_command([log_deps_cmd, l, deps], check: false)
         if not build and require_libs
             error('Cannot build explicitly requested lib "@0@".\n'.format(name)
                     +'\tReason: ' + reason)
--
2.43.0


^ permalink raw reply	[flat|nested] 54+ messages in thread

* [PATCH v2 2/7] devtools: add script to flag unneeded dependencies
  2024-08-02 12:44 ` [PATCH v2 0/7] record and rework component dependencies Bruce Richardson
  2024-08-02 12:44   ` [PATCH v2 1/7] build: output a dependency log in build directory Bruce Richardson
@ 2024-08-02 12:44   ` Bruce Richardson
  2024-08-02 12:44   ` [PATCH v2 3/7] build: remove kvargs from driver class dependencies Bruce Richardson
                     ` (7 subsequent siblings)
  9 siblings, 0 replies; 54+ messages in thread
From: Bruce Richardson @ 2024-08-02 12:44 UTC (permalink / raw)
  To: dev; +Cc: ferruh.yigit, konstantin.ananyev, anatoly.burakov, Bruce Richardson

While not a serious problem, DPDK components often list more
dependencies than are actually necessary to build, due to the use of
recursive dependencies. In extreme cases, such as with core libraries,
this can lead to longer configuration times due to meson having to
deduplicate long lists of dependencies. Therefore we can add a script to
identify when a component has got unnecessary dependencies listed.

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
---
 devtools/find-duplicate-deps.py | 53 +++++++++++++++++++++++++++++++++
 1 file changed, 53 insertions(+)
 create mode 100755 devtools/find-duplicate-deps.py

diff --git a/devtools/find-duplicate-deps.py b/devtools/find-duplicate-deps.py
new file mode 100755
index 0000000000..b1eacf21ce
--- /dev/null
+++ b/devtools/find-duplicate-deps.py
@@ -0,0 +1,53 @@
+#! /usr/bin/env python3
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright(c) 2024 Intel Corporation
+
+"""Identify any superfluous dependencies listed in DPDK deps graph."""
+
+import sys
+
+all_deps = {}
+
+
+class dep:
+    """Holds a component and its dependencies."""
+
+    def __init__(self, name, dep_names):
+        """Create and process a component and its deps."""
+        self.name = name.strip('" ')
+        self.base_deps = [all_deps[dn.strip('" ')] for dn in dep_names]
+        self.recursive_deps = []
+        for d in self.base_deps:
+            self.recursive_deps.extend(d.base_deps)
+            self.recursive_deps.extend(d.recursive_deps)
+        self.extra_deps = []
+        for d in self.base_deps:
+            if d in self.recursive_deps:
+                self.extra_deps.append(d.name)
+        if self.extra_deps:
+            print(f'{self.name}: extra deps {self.extra_deps}')
+
+    def dict_add(self, d):
+        """Add this object to a dictionary by name."""
+        d[self.name] = self
+
+
+def main(argv):
+    """Read the dependency tree from a dot file and process it."""
+    if len(argv) != 2:
+        print(f'Usage: {argv[0]} <build-directory>/deps.dot', file=sys.stderr)
+        sys.exit(1)
+
+    with open(argv[1]) as f:
+        for ln in f.readlines():
+            ln = ln.strip()
+            if '->' in ln:
+                name, deps = ln.split('->')
+                deps = deps.strip(' {}')
+                dep(name, deps.split(',')).dict_add(all_deps)
+            elif ln.startswith('"') and ln.endswith('"'):
+                dep(ln.strip('"'), []).dict_add(all_deps)
+
+
+if __name__ == '__main__':
+    main(sys.argv)
-- 
2.43.0


^ permalink raw reply	[flat|nested] 54+ messages in thread

* [PATCH v2 3/7] build: remove kvargs from driver class dependencies
  2024-08-02 12:44 ` [PATCH v2 0/7] record and rework component dependencies Bruce Richardson
  2024-08-02 12:44   ` [PATCH v2 1/7] build: output a dependency log in build directory Bruce Richardson
  2024-08-02 12:44   ` [PATCH v2 2/7] devtools: add script to flag unneeded dependencies Bruce Richardson
@ 2024-08-02 12:44   ` Bruce Richardson
  2024-08-02 12:44   ` [PATCH v2 4/7] build: reduce library dependencies Bruce Richardson
                     ` (6 subsequent siblings)
  9 siblings, 0 replies; 54+ messages in thread
From: Bruce Richardson @ 2024-08-02 12:44 UTC (permalink / raw)
  To: dev; +Cc: ferruh.yigit, konstantin.ananyev, anatoly.burakov, Bruce Richardson

The kvargs library is used by EAL, and therefore is implicitly a
dependency of every DPDK driver. Remove it from the minimum set of
dependencies for each driver class as it's unnecessary to call it out
there.

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
---
 drivers/event/meson.build | 2 +-
 drivers/net/meson.build   | 2 +-
 drivers/regex/meson.build | 2 +-
 drivers/vdpa/meson.build  | 2 +-
 4 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/event/meson.build b/drivers/event/meson.build
index d6706b57f7..2708833adf 100644
--- a/drivers/event/meson.build
+++ b/drivers/event/meson.build
@@ -19,4 +19,4 @@ if not (toolchain == 'gcc' and cc.version().version_compare('<4.8.6') and
         dpdk_conf.has('RTE_ARCH_ARM64'))
     drivers += 'octeontx'
 endif
-std_deps = ['eventdev', 'kvargs']
+std_deps = ['eventdev']
diff --git a/drivers/net/meson.build b/drivers/net/meson.build
index fb6d34b782..ebd12364df 100644
--- a/drivers/net/meson.build
+++ b/drivers/net/meson.build
@@ -63,6 +63,6 @@ drivers = [
         'virtio',
         'vmxnet3',
 ]
-std_deps = ['ethdev', 'kvargs'] # 'ethdev' also pulls in mbuf, net, eal etc
+std_deps = ['ethdev']           # 'ethdev' also pulls in mbuf, net, eal etc
 std_deps += ['bus_pci']         # very many PMDs depend on PCI, so make std
 std_deps += ['bus_vdev']        # same with vdev bus
diff --git a/drivers/regex/meson.build b/drivers/regex/meson.build
index ff2a8fea89..10192e7c77 100644
--- a/drivers/regex/meson.build
+++ b/drivers/regex/meson.build
@@ -5,4 +5,4 @@ drivers = [
         'mlx5',
         'cn9k',
 ]
-std_deps = ['ethdev', 'kvargs', 'regexdev'] # 'ethdev' also pulls in mbuf, net, eal etc
+std_deps = ['ethdev', 'regexdev'] # 'ethdev' also pulls in mbuf, net, eal etc
diff --git a/drivers/vdpa/meson.build b/drivers/vdpa/meson.build
index 896e8e0304..e01c277b9e 100644
--- a/drivers/vdpa/meson.build
+++ b/drivers/vdpa/meson.build
@@ -11,5 +11,5 @@ drivers = [
         'nfp',
         'sfc',
 ]
-std_deps = ['bus_pci', 'kvargs']
+std_deps = ['bus_pci']
 std_deps += ['vhost']
-- 
2.43.0


^ permalink raw reply	[flat|nested] 54+ messages in thread

* [PATCH v2 4/7] build: reduce library dependencies
  2024-08-02 12:44 ` [PATCH v2 0/7] record and rework component dependencies Bruce Richardson
                     ` (2 preceding siblings ...)
  2024-08-02 12:44   ` [PATCH v2 3/7] build: remove kvargs from driver class dependencies Bruce Richardson
@ 2024-08-02 12:44   ` Bruce Richardson
  2024-08-02 12:44   ` [PATCH v2 5/7] build: reduce driver dependencies Bruce Richardson
                     ` (5 subsequent siblings)
  9 siblings, 0 replies; 54+ messages in thread
From: Bruce Richardson @ 2024-08-02 12:44 UTC (permalink / raw)
  To: dev; +Cc: ferruh.yigit, konstantin.ananyev, anatoly.burakov, Bruce Richardson

Rather than having each library depend up on EAL + any extra libs, we
can take advantage of recursive dependency support in meson and
just assign the dependencies of each directory directly, rather than
appending to the array. For libraries which only depend upon EAL, keep
that as a default, but for libraries which depend upon even a single
extra lib, that EAL dependency is unnecessary.

Going further, we can identify using the find_duplicate_deps.py script
any unnecessary deps in each library's list, and remove them to slim the
dependency tree down.

Reducing number of dependencies means that meson
takes less time processing and deduplicating the dependency tree for
each component, and also shrinks the dependency graph for DPDK itself.

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
---
 lib/argparse/meson.build     | 2 +-
 lib/bbdev/meson.build        | 2 +-
 lib/bitratestats/meson.build | 2 +-
 lib/bpf/meson.build          | 2 +-
 lib/cmdline/meson.build      | 2 +-
 lib/compressdev/meson.build  | 2 +-
 lib/cryptodev/meson.build    | 2 +-
 lib/dispatcher/meson.build   | 2 +-
 lib/distributor/meson.build  | 2 +-
 lib/dmadev/meson.build       | 2 --
 lib/eal/meson.build          | 5 +----
 lib/efd/meson.build          | 2 +-
 lib/ethdev/meson.build       | 2 +-
 lib/eventdev/meson.build     | 3 +--
 lib/fib/meson.build          | 2 +-
 lib/gpudev/meson.build       | 2 +-
 lib/graph/meson.build        | 2 +-
 lib/gro/meson.build          | 2 +-
 lib/gso/meson.build          | 2 +-
 lib/hash/meson.build         | 4 +---
 lib/ip_frag/meson.build      | 2 +-
 lib/ipsec/meson.build        | 2 +-
 lib/kvargs/meson.build       | 2 +-
 lib/latencystats/meson.build | 2 +-
 lib/lpm/meson.build          | 3 +--
 lib/mbuf/meson.build         | 2 +-
 lib/member/meson.build       | 2 +-
 lib/mempool/meson.build      | 2 +-
 lib/metrics/meson.build      | 2 +-
 lib/mldev/meson.build        | 2 +-
 lib/net/meson.build          | 2 +-
 lib/node/meson.build         | 2 +-
 lib/pcapng/meson.build       | 2 +-
 lib/pdcp/meson.build         | 2 +-
 lib/pdump/meson.build        | 2 +-
 lib/pipeline/meson.build     | 2 +-
 lib/port/meson.build         | 2 +-
 lib/power/meson.build        | 2 +-
 lib/rawdev/meson.build       | 2 --
 lib/rcu/meson.build          | 2 +-
 lib/regexdev/meson.build     | 2 +-
 lib/reorder/meson.build      | 2 +-
 lib/rib/meson.build          | 2 +-
 lib/ring/meson.build         | 1 -
 lib/sched/meson.build        | 2 +-
 lib/security/meson.build     | 2 +-
 lib/table/meson.build        | 2 +-
 lib/telemetry/meson.build    | 2 +-
 lib/vhost/meson.build        | 2 +-
 49 files changed, 46 insertions(+), 58 deletions(-)

diff --git a/lib/argparse/meson.build b/lib/argparse/meson.build
index 8ab4c408ee..5d602c1f2a 100644
--- a/lib/argparse/meson.build
+++ b/lib/argparse/meson.build
@@ -10,4 +10,4 @@ endif
 sources = files('rte_argparse.c')
 headers = files('rte_argparse.h')
 
-deps += ['log']
+deps = ['log']
diff --git a/lib/bbdev/meson.build b/lib/bbdev/meson.build
index 07685e7578..2e68aa7873 100644
--- a/lib/bbdev/meson.build
+++ b/lib/bbdev/meson.build
@@ -11,4 +11,4 @@ sources = files('rte_bbdev.c')
 headers = files('rte_bbdev.h',
         'rte_bbdev_pmd.h',
         'rte_bbdev_op.h')
-deps += ['mbuf']
+deps = ['mbuf']
diff --git a/lib/bitratestats/meson.build b/lib/bitratestats/meson.build
index ede7e0a579..8defcd53bf 100644
--- a/lib/bitratestats/meson.build
+++ b/lib/bitratestats/meson.build
@@ -3,4 +3,4 @@
 
 sources = files('rte_bitrate.c')
 headers = files('rte_bitrate.h')
-deps += ['ethdev', 'metrics']
+deps = ['metrics']
diff --git a/lib/bpf/meson.build b/lib/bpf/meson.build
index aa258a9061..82127bc657 100644
--- a/lib/bpf/meson.build
+++ b/lib/bpf/meson.build
@@ -31,7 +31,7 @@ headers = files('bpf_def.h',
         'rte_bpf.h',
         'rte_bpf_ethdev.h')
 
-deps += ['mbuf', 'net', 'ethdev']
+deps = ['ethdev']
 
 dep = dependency('libelf', required: false, method: 'pkg-config')
 if dep.found()
diff --git a/lib/cmdline/meson.build b/lib/cmdline/meson.build
index 63fb69100d..4451f3da29 100644
--- a/lib/cmdline/meson.build
+++ b/lib/cmdline/meson.build
@@ -31,4 +31,4 @@ else
     sources += files('cmdline_os_unix.c')
 endif
 
-deps += ['net']
+deps = ['net']
diff --git a/lib/compressdev/meson.build b/lib/compressdev/meson.build
index c80295dc0d..4b86955baf 100644
--- a/lib/compressdev/meson.build
+++ b/lib/compressdev/meson.build
@@ -16,4 +16,4 @@ driver_sdk_headers = files(
         'rte_compressdev_pmd.h',
         'rte_compressdev_internal.h',
     )
-deps += ['kvargs', 'mbuf']
+deps = ['mbuf']
diff --git a/lib/cryptodev/meson.build b/lib/cryptodev/meson.build
index 4734acf321..74e42ac700 100644
--- a/lib/cryptodev/meson.build
+++ b/lib/cryptodev/meson.build
@@ -20,4 +20,4 @@ driver_sdk_headers += files(
         'cryptodev_pmd.h',
 )
 
-deps += ['kvargs', 'mbuf', 'rcu', 'telemetry']
+deps = ['mbuf', 'rcu']
diff --git a/lib/dispatcher/meson.build b/lib/dispatcher/meson.build
index ffaef26a6d..4dc1759951 100644
--- a/lib/dispatcher/meson.build
+++ b/lib/dispatcher/meson.build
@@ -10,4 +10,4 @@ endif
 sources = files('rte_dispatcher.c')
 headers = files('rte_dispatcher.h')
 
-deps += ['eventdev']
+deps = ['eventdev']
diff --git a/lib/distributor/meson.build b/lib/distributor/meson.build
index 24988c5827..ba43273bc3 100644
--- a/lib/distributor/meson.build
+++ b/lib/distributor/meson.build
@@ -14,4 +14,4 @@ else
     sources += files('rte_distributor_match_generic.c')
 endif
 headers = files('rte_distributor.h')
-deps += ['mbuf']
+deps = ['mbuf']
diff --git a/lib/dmadev/meson.build b/lib/dmadev/meson.build
index e66dcb66b0..70b375f1cb 100644
--- a/lib/dmadev/meson.build
+++ b/lib/dmadev/meson.build
@@ -11,5 +11,3 @@ sources = files('rte_dmadev.c', 'rte_dmadev_trace_points.c')
 headers = files('rte_dmadev.h')
 indirect_headers += files('rte_dmadev_core.h', 'rte_dmadev_trace_fp.h')
 driver_sdk_headers += files('rte_dmadev_pmd.h')
-
-deps += ['telemetry']
diff --git a/lib/eal/meson.build b/lib/eal/meson.build
index e1d6c4cf17..d25443d097 100644
--- a/lib/eal/meson.build
+++ b/lib/eal/meson.build
@@ -14,10 +14,7 @@ subdir(exec_env)
 
 subdir(arch_subdir)
 
-deps += ['log', 'kvargs']
-if not is_windows
-    deps += ['telemetry']
-endif
+deps = ['kvargs', 'telemetry']
 if dpdk_conf.has('RTE_USE_LIBBSD')
     ext_deps += libbsd
 endif
diff --git a/lib/efd/meson.build b/lib/efd/meson.build
index 343f14e1f3..da0ee7f803 100644
--- a/lib/efd/meson.build
+++ b/lib/efd/meson.build
@@ -9,4 +9,4 @@ endif
 
 sources = files('rte_efd.c')
 headers = files('rte_efd.h')
-deps += ['ring', 'hash']
+deps = ['hash']
diff --git a/lib/ethdev/meson.build b/lib/ethdev/meson.build
index f1d2586591..fc53a9c309 100644
--- a/lib/ethdev/meson.build
+++ b/lib/ethdev/meson.build
@@ -53,7 +53,7 @@ if is_linux
     )
 endif
 
-deps += ['net', 'kvargs', 'meter', 'telemetry']
+deps = ['net', 'meter']
 
 if is_freebsd
     annotate_locks = false
diff --git a/lib/eventdev/meson.build b/lib/eventdev/meson.build
index a04bb86f0f..237df998ce 100644
--- a/lib/eventdev/meson.build
+++ b/lib/eventdev/meson.build
@@ -38,5 +38,4 @@ driver_sdk_headers += files(
         'event_timer_adapter_pmd.h',
 )
 
-deps += ['ring', 'ethdev', 'hash', 'mempool', 'mbuf', 'timer', 'cryptodev', 'dmadev']
-deps += ['telemetry']
+deps = ['ethdev', 'hash', 'timer', 'cryptodev', 'dmadev']
diff --git a/lib/fib/meson.build b/lib/fib/meson.build
index 6795f41a0a..9ba8e50fe0 100644
--- a/lib/fib/meson.build
+++ b/lib/fib/meson.build
@@ -10,7 +10,7 @@ endif
 
 sources = files('rte_fib.c', 'rte_fib6.c', 'dir24_8.c', 'trie.c')
 headers = files('rte_fib.h', 'rte_fib6.h')
-deps += ['rib']
+deps = ['rib']
 
 # compile AVX512 version if:
 # we are building 64-bit binary AND binutils can generate proper code
diff --git a/lib/gpudev/meson.build b/lib/gpudev/meson.build
index d21fadc052..5d883b85a1 100644
--- a/lib/gpudev/meson.build
+++ b/lib/gpudev/meson.build
@@ -13,4 +13,4 @@ sources = files(
         'gpudev.c',
 )
 
-deps += ['mbuf']
+deps = ['mbuf']
diff --git a/lib/graph/meson.build b/lib/graph/meson.build
index 0cb15442ab..f58f107d52 100644
--- a/lib/graph/meson.build
+++ b/lib/graph/meson.build
@@ -25,4 +25,4 @@ indirect_headers += files(
         'rte_graph_worker_common.h',
 )
 
-deps += ['eal', 'pcapng', 'mempool', 'ring']
+deps = ['pcapng']
diff --git a/lib/gro/meson.build b/lib/gro/meson.build
index dbce05220d..c6de6ceebc 100644
--- a/lib/gro/meson.build
+++ b/lib/gro/meson.build
@@ -10,4 +10,4 @@ sources = files(
         'gro_vxlan_udp4.c',
 )
 headers = files('rte_gro.h')
-deps += ['ethdev']
+deps = ['ethdev']
diff --git a/lib/gso/meson.build b/lib/gso/meson.build
index 622411df8f..bc99109933 100644
--- a/lib/gso/meson.build
+++ b/lib/gso/meson.build
@@ -10,4 +10,4 @@ sources = files(
         'rte_gso.c',
 )
 headers = files('rte_gso.h')
-deps += ['ethdev']
+deps = ['ethdev']
diff --git a/lib/hash/meson.build b/lib/hash/meson.build
index 277eb9fa93..74b81397f9 100644
--- a/lib/hash/meson.build
+++ b/lib/hash/meson.build
@@ -25,6 +25,4 @@ sources = files(
         'rte_thash_gfni.c',
 )
 
-deps += ['net']
-deps += ['ring']
-deps += ['rcu']
+deps = ['net', 'rcu']
diff --git a/lib/ip_frag/meson.build b/lib/ip_frag/meson.build
index ea2de09f75..cacf391460 100644
--- a/lib/ip_frag/meson.build
+++ b/lib/ip_frag/meson.build
@@ -10,4 +10,4 @@ sources = files(
         'ip_frag_internal.c',
 )
 headers = files('rte_ip_frag.h')
-deps += ['ethdev', 'hash']
+deps = ['ethdev', 'hash']
diff --git a/lib/ipsec/meson.build b/lib/ipsec/meson.build
index 5c5a4aae78..7abbac5b6a 100644
--- a/lib/ipsec/meson.build
+++ b/lib/ipsec/meson.build
@@ -14,6 +14,6 @@ sources = files('esp_inb.c', 'esp_outb.c',
 headers = files('rte_ipsec.h', 'rte_ipsec_sa.h', 'rte_ipsec_sad.h')
 indirect_headers += files('rte_ipsec_group.h')
 
-deps += ['mbuf', 'net', 'cryptodev', 'security', 'hash', 'telemetry']
+deps = ['security', 'hash']
 
 annotate_locks = false
diff --git a/lib/kvargs/meson.build b/lib/kvargs/meson.build
index 7eae744a8f..7282b0ff8d 100644
--- a/lib/kvargs/meson.build
+++ b/lib/kvargs/meson.build
@@ -1,6 +1,6 @@
 # SPDX-License-Identifier: BSD-3-Clause
 # Copyright(c) 2017 Intel Corporation
 
-deps += 'log'
+deps = ['log']
 sources = files('rte_kvargs.c')
 headers = files('rte_kvargs.h')
diff --git a/lib/latencystats/meson.build b/lib/latencystats/meson.build
index 286558dd79..f8b9a8aeec 100644
--- a/lib/latencystats/meson.build
+++ b/lib/latencystats/meson.build
@@ -3,4 +3,4 @@
 
 sources = files('rte_latencystats.c')
 headers = files('rte_latencystats.h')
-deps += ['metrics', 'ethdev']
+deps = ['metrics']
diff --git a/lib/lpm/meson.build b/lib/lpm/meson.build
index ae30f80b69..5031b085c4 100644
--- a/lib/lpm/meson.build
+++ b/lib/lpm/meson.build
@@ -18,5 +18,4 @@ indirect_headers += files(
         'rte_lpm_sse.h',
         'rte_lpm_sve.h',
 )
-deps += ['hash']
-deps += ['rcu']
+deps = ['hash']
diff --git a/lib/mbuf/meson.build b/lib/mbuf/meson.build
index 2cee9057a5..22f5a3038b 100644
--- a/lib/mbuf/meson.build
+++ b/lib/mbuf/meson.build
@@ -20,4 +20,4 @@ headers = files(
         'rte_mbuf_pool_ops.h',
         'rte_mbuf_dyn.h',
 )
-deps += ['mempool']
+deps = ['mempool']
diff --git a/lib/member/meson.build b/lib/member/meson.build
index 02ef59795e..b951aa566e 100644
--- a/lib/member/meson.build
+++ b/lib/member/meson.build
@@ -16,7 +16,7 @@ sources = files(
         'rte_member_vbf.c',
 )
 
-deps += ['hash', 'ring']
+deps = ['hash']
 
 # compile AVX512 version if:
 if dpdk_conf.has('RTE_ARCH_X86_64') and binutils_ok
diff --git a/lib/mempool/meson.build b/lib/mempool/meson.build
index acce66cb97..25b26a50fa 100644
--- a/lib/mempool/meson.build
+++ b/lib/mempool/meson.build
@@ -25,4 +25,4 @@ headers = files(
         'rte_mempool.h',
         'rte_mempool_trace_fp.h',
 )
-deps += ['ring', 'telemetry']
+deps = ['ring']
diff --git a/lib/metrics/meson.build b/lib/metrics/meson.build
index 8c1c4b4b49..5165967646 100644
--- a/lib/metrics/meson.build
+++ b/lib/metrics/meson.build
@@ -8,4 +8,4 @@ if dpdk_conf.has('RTE_HAS_JANSSON')
     ext_deps += jansson_dep
 endif
 
-deps += ['ethdev', 'telemetry']
+deps = ['ethdev']
diff --git a/lib/mldev/meson.build b/lib/mldev/meson.build
index 2c933baad6..6069fff1f0 100644
--- a/lib/mldev/meson.build
+++ b/lib/mldev/meson.build
@@ -41,7 +41,7 @@ driver_sdk_headers += files(
         'mldev_utils.h',
 )
 
-deps += ['mempool', 'mbuf']
+deps = ['mbuf']
 
 if get_option('buildtype').contains('debug')
         cflags += [ '-DRTE_LIBRTE_ML_DEV_DEBUG' ]
diff --git a/lib/net/meson.build b/lib/net/meson.build
index 0b69138949..2cb511f046 100644
--- a/lib/net/meson.build
+++ b/lib/net/meson.build
@@ -34,7 +34,7 @@ sources = files(
         'rte_net.c',
         'rte_net_crc.c',
 )
-deps += ['mbuf']
+deps = ['mbuf']
 
 if dpdk_conf.has('RTE_ARCH_X86_64')
     net_crc_sse42_cpu_support = (cc.get_define('__PCLMUL__', args: machine_args) != '')
diff --git a/lib/node/meson.build b/lib/node/meson.build
index 0bed97a96c..368ce1dc63 100644
--- a/lib/node/meson.build
+++ b/lib/node/meson.build
@@ -34,4 +34,4 @@ headers = files(
 
 # Strict-aliasing rules are violated by uint8_t[] to context size casts.
 cflags += '-fno-strict-aliasing'
-deps += ['graph', 'mbuf', 'lpm', 'ethdev', 'mempool', 'cryptodev', 'ip_frag']
+deps = ['graph', 'lpm', 'cryptodev', 'ip_frag']
diff --git a/lib/pcapng/meson.build b/lib/pcapng/meson.build
index 4549925d41..e8f059a9b0 100644
--- a/lib/pcapng/meson.build
+++ b/lib/pcapng/meson.build
@@ -4,4 +4,4 @@
 sources = files('rte_pcapng.c')
 headers = files('rte_pcapng.h')
 
-deps += ['ethdev']
+deps = ['ethdev']
diff --git a/lib/pdcp/meson.build b/lib/pdcp/meson.build
index f4f9246bcb..f6f3d6237a 100644
--- a/lib/pdcp/meson.build
+++ b/lib/pdcp/meson.build
@@ -18,4 +18,4 @@ sources = files(
 headers = files('rte_pdcp.h')
 indirect_headers += files('rte_pdcp_group.h')
 
-deps += ['mbuf', 'net', 'cryptodev', 'security', 'reorder']
+deps = ['security', 'reorder']
diff --git a/lib/pdump/meson.build b/lib/pdump/meson.build
index da8d51b616..23d7db794b 100644
--- a/lib/pdump/meson.build
+++ b/lib/pdump/meson.build
@@ -9,4 +9,4 @@ endif
 
 sources = files('rte_pdump.c')
 headers = files('rte_pdump.h')
-deps += ['ethdev', 'bpf', 'pcapng']
+deps = ['bpf', 'pcapng']
diff --git a/lib/pipeline/meson.build b/lib/pipeline/meson.build
index fd5e0dc6bb..f08eca70d1 100644
--- a/lib/pipeline/meson.build
+++ b/lib/pipeline/meson.build
@@ -25,4 +25,4 @@ headers = files(
         'rte_swx_extern.h',
         'rte_swx_ctl.h',
 )
-deps += ['port', 'table', 'meter', 'sched', 'cryptodev', 'ipsec']
+deps = ['table', 'ipsec']
diff --git a/lib/port/meson.build b/lib/port/meson.build
index b597772872..0524c3c049 100644
--- a/lib/port/meson.build
+++ b/lib/port/meson.build
@@ -40,7 +40,7 @@ headers = files(
         'rte_swx_port_ring.h',
         'rte_swx_port_source_sink.h',
 )
-deps += ['ethdev', 'sched', 'ip_frag', 'cryptodev', 'eventdev']
+deps = ['sched', 'ip_frag', 'eventdev']
 
 if dpdk_conf.has('RTE_HAS_LIBPCAP')
     dpdk_conf.set('RTE_PORT_PCAP', 1)
diff --git a/lib/power/meson.build b/lib/power/meson.build
index b8426589b2..190bbf90a2 100644
--- a/lib/power/meson.build
+++ b/lib/power/meson.build
@@ -33,4 +33,4 @@ headers = files(
 if cc.has_argument('-Wno-cast-qual')
     cflags += '-Wno-cast-qual'
 endif
-deps += ['timer', 'ethdev']
+deps = ['timer', 'ethdev']
diff --git a/lib/rawdev/meson.build b/lib/rawdev/meson.build
index 7dfc3d5cf9..8841f003d7 100644
--- a/lib/rawdev/meson.build
+++ b/lib/rawdev/meson.build
@@ -9,5 +9,3 @@ endif
 
 sources = files('rte_rawdev.c')
 headers = files('rte_rawdev.h', 'rte_rawdev_pmd.h')
-
-deps += ['telemetry']
diff --git a/lib/rcu/meson.build b/lib/rcu/meson.build
index 71143f5210..b78f46fad7 100644
--- a/lib/rcu/meson.build
+++ b/lib/rcu/meson.build
@@ -10,4 +10,4 @@ endif
 sources = files('rte_rcu_qsbr.c')
 headers = files('rte_rcu_qsbr.h')
 
-deps += ['ring']
+deps = ['ring']
diff --git a/lib/regexdev/meson.build b/lib/regexdev/meson.build
index 426e764ece..3e20fa387d 100644
--- a/lib/regexdev/meson.build
+++ b/lib/regexdev/meson.build
@@ -10,4 +10,4 @@ endif
 sources = files('rte_regexdev.c')
 headers = files('rte_regexdev.h', 'rte_regexdev_driver.h')
 indirect_headers += files('rte_regexdev_core.h')
-deps += ['mbuf']
+deps = ['mbuf']
diff --git a/lib/reorder/meson.build b/lib/reorder/meson.build
index 03aed53d90..1e088a7d97 100644
--- a/lib/reorder/meson.build
+++ b/lib/reorder/meson.build
@@ -3,4 +3,4 @@
 
 sources = files('rte_reorder.c')
 headers = files('rte_reorder.h')
-deps += ['mbuf']
+deps = ['mbuf']
diff --git a/lib/rib/meson.build b/lib/rib/meson.build
index 7bacbb4535..2085beb444 100644
--- a/lib/rib/meson.build
+++ b/lib/rib/meson.build
@@ -4,4 +4,4 @@
 
 sources = files('rte_rib.c', 'rte_rib6.c')
 headers = files('rte_rib.h', 'rte_rib6.h')
-deps += ['mempool']
+deps = ['mempool']
diff --git a/lib/ring/meson.build b/lib/ring/meson.build
index 7fca958ed7..c20685c689 100644
--- a/lib/ring/meson.build
+++ b/lib/ring/meson.build
@@ -18,4 +18,3 @@ indirect_headers += files (
         'rte_ring_rts.h',
         'rte_ring_rts_elem_pvt.h',
 )
-deps += ['telemetry']
diff --git a/lib/sched/meson.build b/lib/sched/meson.build
index df75db51ed..7ca8ec09df 100644
--- a/lib/sched/meson.build
+++ b/lib/sched/meson.build
@@ -15,4 +15,4 @@ headers = files(
         'rte_sched_common.h',
         'rte_pie.h',
 )
-deps += ['mbuf', 'meter']
+deps = ['mbuf', 'meter']
diff --git a/lib/security/meson.build b/lib/security/meson.build
index 1034a7a299..e4545a8c72 100644
--- a/lib/security/meson.build
+++ b/lib/security/meson.build
@@ -3,4 +3,4 @@
 
 sources = files('rte_security.c')
 headers = files('rte_security.h', 'rte_security_driver.h')
-deps += ['mempool', 'cryptodev', 'net']
+deps = ['cryptodev', 'net']
diff --git a/lib/table/meson.build b/lib/table/meson.build
index 9b3d9ac759..78d7e87eab 100644
--- a/lib/table/meson.build
+++ b/lib/table/meson.build
@@ -39,7 +39,7 @@ headers = files(
         'rte_table_lpm_ipv6.h',
         'rte_table_stub.h',
 )
-deps += ['mbuf', 'port', 'lpm', 'hash', 'acl']
+deps = ['port', 'lpm', 'acl']
 
 indirect_headers += files(
         'rte_lru_arm64.h',
diff --git a/lib/telemetry/meson.build b/lib/telemetry/meson.build
index 489d000047..3e3a2cfc32 100644
--- a/lib/telemetry/meson.build
+++ b/lib/telemetry/meson.build
@@ -1,7 +1,7 @@
 # SPDX-License-Identifier: BSD-3-Clause
 # Copyright(c) 2018 Intel Corporation
 
-deps += 'log'
+deps = ['log']
 sources = files('telemetry.c', 'telemetry_data.c', 'telemetry_legacy.c')
 headers = files('rte_telemetry.h')
 includes += include_directories('../metrics')
diff --git a/lib/vhost/meson.build b/lib/vhost/meson.build
index 41b622a9be..51bbd87397 100644
--- a/lib/vhost/meson.build
+++ b/lib/vhost/meson.build
@@ -42,4 +42,4 @@ headers = files(
 driver_sdk_headers = files(
         'vdpa_driver.h',
 )
-deps += ['ethdev', 'cryptodev', 'hash', 'pci', 'dmadev']
+deps = ['ethdev', 'cryptodev', 'hash', 'pci', 'dmadev']
-- 
2.43.0


^ permalink raw reply	[flat|nested] 54+ messages in thread

* [PATCH v2 5/7] build: reduce driver dependencies
  2024-08-02 12:44 ` [PATCH v2 0/7] record and rework component dependencies Bruce Richardson
                     ` (3 preceding siblings ...)
  2024-08-02 12:44   ` [PATCH v2 4/7] build: reduce library dependencies Bruce Richardson
@ 2024-08-02 12:44   ` Bruce Richardson
  2024-08-02 12:44   ` [PATCH v2 6/7] build: reduce app dependencies Bruce Richardson
                     ` (4 subsequent siblings)
  9 siblings, 0 replies; 54+ messages in thread
From: Bruce Richardson @ 2024-08-02 12:44 UTC (permalink / raw)
  To: dev; +Cc: ferruh.yigit, konstantin.ananyev, anatoly.burakov, Bruce Richardson

Remove any unnecessary dependencies from the driver dependency lists.
This will give each driver a near-minimum set of required dependencies.

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
---
 drivers/baseband/fpga_5gnr_fec/meson.build | 2 +-
 drivers/baseband/fpga_lte_fec/meson.build  | 2 +-
 drivers/baseband/la12xx/meson.build        | 2 +-
 drivers/baseband/null/meson.build          | 2 +-
 drivers/baseband/turbo_sw/meson.build      | 2 +-
 drivers/bus/auxiliary/meson.build          | 2 --
 drivers/bus/dpaa/meson.build               | 2 +-
 drivers/bus/fslmc/meson.build              | 2 +-
 drivers/bus/ifpga/meson.build              | 2 +-
 drivers/bus/pci/meson.build                | 4 +---
 drivers/bus/platform/meson.build           | 1 -
 drivers/bus/uacce/meson.build              | 2 --
 drivers/bus/vdev/meson.build               | 2 --
 drivers/common/cnxk/meson.build            | 4 ++--
 drivers/common/cpt/meson.build             | 2 +-
 drivers/common/idpf/meson.build            | 2 +-
 drivers/common/mlx5/meson.build            | 2 +-
 drivers/compress/mlx5/meson.build          | 2 +-
 drivers/compress/nitrox/meson.build        | 2 +-
 drivers/compress/octeontx/meson.build      | 2 +-
 drivers/crypto/bcmfs/meson.build           | 2 +-
 drivers/crypto/cnxk/meson.build            | 2 +-
 drivers/crypto/dpaa_sec/meson.build        | 2 +-
 drivers/crypto/ipsec_mb/meson.build        | 2 +-
 drivers/crypto/mlx5/meson.build            | 2 +-
 drivers/crypto/nitrox/meson.build          | 2 +-
 drivers/dma/cnxk/meson.build               | 2 +-
 drivers/dma/dpaa/meson.build               | 2 +-
 drivers/dma/dpaa2/meson.build              | 2 +-
 drivers/dma/odm/meson.build                | 2 +-
 drivers/dma/skeleton/meson.build           | 2 +-
 drivers/event/cnxk/meson.build             | 2 +-
 drivers/event/dlb2/meson.build             | 2 +-
 drivers/event/dpaa2/meson.build            | 2 +-
 drivers/event/octeontx/meson.build         | 3 +--
 drivers/event/sw/meson.build               | 2 +-
 drivers/mempool/cnxk/meson.build           | 2 +-
 drivers/mempool/dpaa/meson.build           | 2 +-
 drivers/mempool/dpaa2/meson.build          | 2 +-
 drivers/mempool/octeontx/meson.build       | 2 +-
 drivers/net/cnxk/meson.build               | 3 +--
 drivers/net/iavf/meson.build               | 2 +-
 drivers/net/ice/meson.build                | 2 +-
 drivers/net/mana/meson.build               | 2 +-
 drivers/net/mlx5/meson.build               | 2 +-
 drivers/net/sfc/meson.build                | 2 +-
 drivers/net/softnic/meson.build            | 2 +-
 drivers/raw/cnxk_bphy/meson.build          | 2 +-
 drivers/raw/cnxk_gpio/meson.build          | 2 +-
 drivers/raw/ntb/meson.build                | 2 +-
 drivers/raw/skeleton/meson.build           | 2 +-
 drivers/regex/mlx5/meson.build             | 2 +-
 drivers/vdpa/ifc/meson.build               | 2 +-
 drivers/vdpa/meson.build                   | 3 +--
 drivers/vdpa/mlx5/meson.build              | 2 +-
 drivers/vdpa/sfc/meson.build               | 2 +-
 56 files changed, 53 insertions(+), 65 deletions(-)

diff --git a/drivers/baseband/fpga_5gnr_fec/meson.build b/drivers/baseband/fpga_5gnr_fec/meson.build
index c3678d23eb..31b9e92fbb 100644
--- a/drivers/baseband/fpga_5gnr_fec/meson.build
+++ b/drivers/baseband/fpga_5gnr_fec/meson.build
@@ -1,7 +1,7 @@
 # SPDX-License-Identifier: BSD-3-Clause
 # Copyright(c) 2020 Intel Corporation
 
-deps += ['bus_vdev', 'ring', 'pci', 'bus_pci']
+deps += ['bus_vdev', 'bus_pci']
 
 sources = files('rte_fpga_5gnr_fec.c')
 
diff --git a/drivers/baseband/fpga_lte_fec/meson.build b/drivers/baseband/fpga_lte_fec/meson.build
index 14e07826ef..fbf24755db 100644
--- a/drivers/baseband/fpga_lte_fec/meson.build
+++ b/drivers/baseband/fpga_lte_fec/meson.build
@@ -1,5 +1,5 @@
 # SPDX-License-Identifier: BSD-3-Clause
 # Copyright(c) 2019 Intel Corporation
 
-deps += ['bus_vdev', 'ring', 'pci', 'bus_pci']
+deps += ['bus_vdev', 'bus_pci']
 sources = files('fpga_lte_fec.c')
diff --git a/drivers/baseband/la12xx/meson.build b/drivers/baseband/la12xx/meson.build
index 7b7e41c961..e1dbdd0fa7 100644
--- a/drivers/baseband/la12xx/meson.build
+++ b/drivers/baseband/la12xx/meson.build
@@ -1,6 +1,6 @@
 # SPDX-License-Identifier: BSD-3-Clause
 # Copyright 2020-2021 NXP
 
-deps += ['bus_vdev', 'ring']
+deps += ['bus_vdev']
 
 sources = files('bbdev_la12xx.c')
diff --git a/drivers/baseband/null/meson.build b/drivers/baseband/null/meson.build
index 22863f0bd8..716d6c6fdb 100644
--- a/drivers/baseband/null/meson.build
+++ b/drivers/baseband/null/meson.build
@@ -1,5 +1,5 @@
 # SPDX-License-Identifier: BSD-3-Clause
 # Copyright(c) 2018 Luca Boccassi <bluca@debian.org>
 
-deps += ['bus_vdev', 'ring']
+deps += ['bus_vdev']
 sources = files('bbdev_null.c')
diff --git a/drivers/baseband/turbo_sw/meson.build b/drivers/baseband/turbo_sw/meson.build
index a9035a753e..ac18e8a9b6 100644
--- a/drivers/baseband/turbo_sw/meson.build
+++ b/drivers/baseband/turbo_sw/meson.build
@@ -26,5 +26,5 @@ if dep_dec5g.found()
     cflags += ['-DRTE_BBDEV_SDK_AVX512']
 endif
 
-deps += ['bus_vdev', 'ring']
+deps += ['bus_vdev']
 sources = files('bbdev_turbo_software.c')
diff --git a/drivers/bus/auxiliary/meson.build b/drivers/bus/auxiliary/meson.build
index 10468fd130..a113f11743 100644
--- a/drivers/bus/auxiliary/meson.build
+++ b/drivers/bus/auxiliary/meson.build
@@ -13,5 +13,3 @@ if is_linux
 endif
 
 require_iova_in_mbuf = false
-
-deps += ['kvargs']
diff --git a/drivers/bus/dpaa/meson.build b/drivers/bus/dpaa/meson.build
index 114e0a2265..d0ae5a9ff0 100644
--- a/drivers/bus/dpaa/meson.build
+++ b/drivers/bus/dpaa/meson.build
@@ -6,7 +6,7 @@ if not is_linux
     reason = 'only supported on Linux'
 endif
 
-deps += ['common_dpaax', 'eventdev']
+deps = ['common_dpaax', 'eventdev']
 sources = files(
         'base/fman/fman.c',
         'base/fman/fman_hw.c',
diff --git a/drivers/bus/fslmc/meson.build b/drivers/bus/fslmc/meson.build
index 162ca286fe..989a47c7a0 100644
--- a/drivers/bus/fslmc/meson.build
+++ b/drivers/bus/fslmc/meson.build
@@ -6,7 +6,7 @@ if not is_linux
     reason = 'only supported on Linux'
 endif
 
-deps += ['common_dpaax', 'eventdev', 'kvargs']
+deps = ['common_dpaax', 'eventdev']
 sources = files(
         'fslmc_bus.c',
         'fslmc_vfio.c',
diff --git a/drivers/bus/ifpga/meson.build b/drivers/bus/ifpga/meson.build
index dedc94db2d..e87b08eaf4 100644
--- a/drivers/bus/ifpga/meson.build
+++ b/drivers/bus/ifpga/meson.build
@@ -7,6 +7,6 @@ if is_windows
     subdir_done()
 endif
 
-deps += ['pci', 'kvargs', 'rawdev']
+deps = ['pci', 'rawdev']
 driver_sdk_headers += files('bus_ifpga_driver.h')
 sources = files('ifpga_bus.c')
diff --git a/drivers/bus/pci/meson.build b/drivers/bus/pci/meson.build
index fede114dc7..776c3d1550 100644
--- a/drivers/bus/pci/meson.build
+++ b/drivers/bus/pci/meson.build
@@ -1,7 +1,7 @@
 # SPDX-License-Identifier: BSD-3-Clause
 # Copyright(c) 2017 Intel Corporation
 
-deps += ['pci']
+deps = ['pci']
 headers = files('rte_bus_pci.h')
 driver_sdk_headers = files('bus_pci_driver.h')
 sources = files('pci_common.c',
@@ -31,5 +31,3 @@ if is_windows
 endif
 
 require_iova_in_mbuf = false
-
-deps += ['kvargs']
diff --git a/drivers/bus/platform/meson.build b/drivers/bus/platform/meson.build
index 8633cc4e75..2039c23ac6 100644
--- a/drivers/bus/platform/meson.build
+++ b/drivers/bus/platform/meson.build
@@ -10,7 +10,6 @@ endif
 
 require_iova_in_mbuf = false
 
-deps += ['kvargs']
 sources = files(
         'platform_params.c',
         'platform.c',
diff --git a/drivers/bus/uacce/meson.build b/drivers/bus/uacce/meson.build
index a659d65f23..130148a315 100644
--- a/drivers/bus/uacce/meson.build
+++ b/drivers/bus/uacce/meson.build
@@ -8,5 +8,3 @@ endif
 
 sources = files('uacce.c')
 driver_sdk_headers += files('bus_uacce_driver.h')
-
-deps += ['kvargs']
diff --git a/drivers/bus/vdev/meson.build b/drivers/bus/vdev/meson.build
index 50f0c8918d..24993c88a3 100644
--- a/drivers/bus/vdev/meson.build
+++ b/drivers/bus/vdev/meson.build
@@ -9,5 +9,3 @@ headers = files('rte_bus_vdev.h')
 driver_sdk_headers = files('bus_vdev_driver.h')
 
 require_iova_in_mbuf = false
-
-deps += ['kvargs']
diff --git a/drivers/common/cnxk/meson.build b/drivers/common/cnxk/meson.build
index e0e4600989..8ff080ee19 100644
--- a/drivers/common/cnxk/meson.build
+++ b/drivers/common/cnxk/meson.build
@@ -8,7 +8,7 @@ if not is_linux or not dpdk_conf.get('RTE_ARCH_64')
     subdir_done()
 endif
 
-deps = ['eal', 'pci', 'bus_pci', 'mbuf', 'security']
+deps = ['bus_pci', 'security']
 sources = files(
         'roc_ae.c',
         'roc_aes.c',
@@ -91,7 +91,7 @@ sources += files('cnxk_telemetry_bphy.c',
                  'cnxk_telemetry_sso.c',
 )
 
-deps += ['bus_pci', 'net', 'telemetry']
+deps += ['bus_pci']
 
 require_iova_in_mbuf = false
 
diff --git a/drivers/common/cpt/meson.build b/drivers/common/cpt/meson.build
index c09824a651..a4b000dc37 100644
--- a/drivers/common/cpt/meson.build
+++ b/drivers/common/cpt/meson.build
@@ -9,5 +9,5 @@ endif
 
 sources = files('cpt_fpm_tables.c', 'cpt_pmd_ops_helper.c')
 
-deps = ['kvargs', 'pci', 'cryptodev']
+deps = ['pci', 'cryptodev']
 includes += include_directories('../../crypto/octeontx')
diff --git a/drivers/common/idpf/meson.build b/drivers/common/idpf/meson.build
index 80c8906f80..adf5430487 100644
--- a/drivers/common/idpf/meson.build
+++ b/drivers/common/idpf/meson.build
@@ -7,7 +7,7 @@ endif
 
 includes += include_directories('../iavf')
 
-deps += ['mbuf']
+deps = ['mbuf']
 
 sources = files(
         'idpf_common_device.c',
diff --git a/drivers/common/mlx5/meson.build b/drivers/common/mlx5/meson.build
index 1eefc02f06..b94c956495 100644
--- a/drivers/common/mlx5/meson.build
+++ b/drivers/common/mlx5/meson.build
@@ -12,7 +12,7 @@ if is_windows and not is_ms_linker and not meson.is_cross_build()
     subdir_done()
 endif
 
-deps += ['hash', 'pci', 'bus_pci', 'bus_auxiliary', 'net', 'eal', 'kvargs']
+deps += ['hash', 'bus_pci', 'bus_auxiliary']
 sources += files(
         'mlx5_devx_cmds.c',
         'mlx5_common.c',
diff --git a/drivers/compress/mlx5/meson.build b/drivers/compress/mlx5/meson.build
index 26a0e0cd09..ddb9e0f82c 100644
--- a/drivers/compress/mlx5/meson.build
+++ b/drivers/compress/mlx5/meson.build
@@ -7,7 +7,7 @@ if not is_linux
     subdir_done()
 endif
 
-deps += ['common_mlx5', 'eal', 'compressdev']
+deps += ['common_mlx5', 'compressdev']
 if not dpdk_conf.has('RTE_COMMON_MLX5')
     # avoid referencing undefined variables from common/mlx5
     subdir_done()
diff --git a/drivers/compress/nitrox/meson.build b/drivers/compress/nitrox/meson.build
index 1becc66912..c3db4ac2bb 100644
--- a/drivers/compress/nitrox/meson.build
+++ b/drivers/compress/nitrox/meson.build
@@ -6,7 +6,7 @@ if not is_linux
     reason = 'only supported on Linux'
 endif
 
-deps += ['common_nitrox', 'bus_pci', 'compressdev']
+deps += ['common_nitrox', 'compressdev']
 
 sources += files(
         'nitrox_comp.c',
diff --git a/drivers/compress/octeontx/meson.build b/drivers/compress/octeontx/meson.build
index 16f973f4d7..0ccde449e8 100644
--- a/drivers/compress/octeontx/meson.build
+++ b/drivers/compress/octeontx/meson.build
@@ -9,7 +9,7 @@ endif
 
 sources = files('otx_zip.c', 'otx_zip_pmd.c')
 includes += include_directories('include')
-deps += ['mempool_octeontx', 'bus_pci']
+deps += ['mempool_octeontx']
 ext_deps += dep
 
 require_iova_in_mbuf = false
diff --git a/drivers/crypto/bcmfs/meson.build b/drivers/crypto/bcmfs/meson.build
index 5842f83a3b..678bab7398 100644
--- a/drivers/crypto/bcmfs/meson.build
+++ b/drivers/crypto/bcmfs/meson.build
@@ -9,7 +9,7 @@ if is_windows
     subdir_done()
 endif
 
-deps += ['eal', 'bus_vdev']
+deps += ['bus_vdev']
 sources = files(
         'bcmfs_logs.c',
         'bcmfs_device.c',
diff --git a/drivers/crypto/cnxk/meson.build b/drivers/crypto/cnxk/meson.build
index aa840fb7bb..c5a5725e1a 100644
--- a/drivers/crypto/cnxk/meson.build
+++ b/drivers/crypto/cnxk/meson.build
@@ -25,7 +25,7 @@ sources = files(
 )
 
 headers = files('rte_pmd_cnxk_crypto.h')
-deps += ['bus_pci', 'common_cnxk', 'security', 'eventdev']
+deps += ['common_cnxk', 'eventdev']
 includes += include_directories('../../../lib/net', '../../event/cnxk')
 
 if get_option('buildtype').contains('debug')
diff --git a/drivers/crypto/dpaa_sec/meson.build b/drivers/crypto/dpaa_sec/meson.build
index f87ad6c7e7..9efac952c4 100644
--- a/drivers/crypto/dpaa_sec/meson.build
+++ b/drivers/crypto/dpaa_sec/meson.build
@@ -6,7 +6,7 @@ if not is_linux
     reason = 'only supported on Linux'
 endif
 
-deps += ['bus_dpaa', 'mempool_dpaa', 'security']
+deps += ['mempool_dpaa', 'security']
 sources = files('dpaa_sec.c', 'dpaa_sec_raw_dp.c')
 
 includes += include_directories('../../bus/dpaa/include')
diff --git a/drivers/crypto/ipsec_mb/meson.build b/drivers/crypto/ipsec_mb/meson.build
index 87bf965554..739cbd1b6e 100644
--- a/drivers/crypto/ipsec_mb/meson.build
+++ b/drivers/crypto/ipsec_mb/meson.build
@@ -45,5 +45,5 @@ sources = files(
         'pmd_snow3g.c',
         'pmd_zuc.c',
 )
-deps += ['bus_vdev', 'net', 'security']
+deps += ['bus_vdev', 'security']
 require_iova_in_mbuf = false
diff --git a/drivers/crypto/mlx5/meson.build b/drivers/crypto/mlx5/meson.build
index d7bc8ec967..595053d8cd 100644
--- a/drivers/crypto/mlx5/meson.build
+++ b/drivers/crypto/mlx5/meson.build
@@ -7,7 +7,7 @@ if not (is_linux or is_windows)
     subdir_done()
 endif
 
-deps += ['common_mlx5', 'eal', 'cryptodev']
+deps += ['common_mlx5', 'cryptodev']
 if not dpdk_conf.has('RTE_COMMON_MLX5')
     # avoid referencing undefined variables from common/mlx5
     subdir_done()
diff --git a/drivers/crypto/nitrox/meson.build b/drivers/crypto/nitrox/meson.build
index f8887713d2..85e3ca2b28 100644
--- a/drivers/crypto/nitrox/meson.build
+++ b/drivers/crypto/nitrox/meson.build
@@ -6,7 +6,7 @@ if not is_linux
     reason = 'only supported on Linux'
 endif
 
-deps += ['common_nitrox', 'bus_pci', 'cryptodev']
+deps += ['common_nitrox', 'cryptodev']
 
 sources += files(
         'nitrox_sym.c',
diff --git a/drivers/dma/cnxk/meson.build b/drivers/dma/cnxk/meson.build
index 8ccc1c2cb7..738774d542 100644
--- a/drivers/dma/cnxk/meson.build
+++ b/drivers/dma/cnxk/meson.build
@@ -12,7 +12,7 @@ driver_sdk_headers = files(
         'cnxk_dma_event_dp.h',
 )
 
-deps += ['bus_pci', 'common_cnxk', 'dmadev', 'eventdev']
+deps += ['common_cnxk', 'eventdev']
 
 includes += include_directories('../../event/cnxk')
 
diff --git a/drivers/dma/dpaa/meson.build b/drivers/dma/dpaa/meson.build
index c31a6d91fe..fec4a45767 100644
--- a/drivers/dma/dpaa/meson.build
+++ b/drivers/dma/dpaa/meson.build
@@ -6,7 +6,7 @@ if not is_linux
     reason = 'only supported on linux'
 endif
 
-deps += ['dmadev', 'bus_dpaa']
+deps += ['bus_dpaa']
 sources = files('dpaa_qdma.c')
 
 if cc.has_argument('-Wno-pointer-arith')
diff --git a/drivers/dma/dpaa2/meson.build b/drivers/dma/dpaa2/meson.build
index a99151e2a5..2b5b76ec5f 100644
--- a/drivers/dma/dpaa2/meson.build
+++ b/drivers/dma/dpaa2/meson.build
@@ -8,7 +8,7 @@ endif
 
 build = dpdk_conf.has('RTE_MEMPOOL_DPAA2')
 reason = 'missing dependency, DPDK DPAA2 mempool driver'
-deps += ['dmadev', 'bus_fslmc', 'mempool_dpaa2', 'ring', 'kvargs']
+deps += ['mempool_dpaa2']
 sources = files('dpaa2_qdma.c')
 
 if cc.has_argument('-Wno-pointer-arith')
diff --git a/drivers/dma/odm/meson.build b/drivers/dma/odm/meson.build
index d597762d37..959e7e685d 100644
--- a/drivers/dma/odm/meson.build
+++ b/drivers/dma/odm/meson.build
@@ -7,7 +7,7 @@ if not is_linux or not dpdk_conf.get('RTE_ARCH_64')
     subdir_done()
 endif
 
-deps += ['bus_pci', 'dmadev', 'eal', 'mempool', 'pci']
+deps += ['bus_pci', 'dmadev', 'mempool']
 
 sources = files('odm_dmadev.c', 'odm.c')
 
diff --git a/drivers/dma/skeleton/meson.build b/drivers/dma/skeleton/meson.build
index 77055683ad..0d703a36eb 100644
--- a/drivers/dma/skeleton/meson.build
+++ b/drivers/dma/skeleton/meson.build
@@ -1,7 +1,7 @@
 # SPDX-License-Identifier: BSD-3-Clause
 # Copyright(c) 2021 HiSilicon Limited
 
-deps += ['dmadev', 'kvargs', 'ring', 'bus_vdev']
+deps += ['dmadev', 'ring', 'bus_vdev']
 sources = files(
         'skeleton_dmadev.c',
 )
diff --git a/drivers/event/cnxk/meson.build b/drivers/event/cnxk/meson.build
index e0e350570d..b365fff0cb 100644
--- a/drivers/event/cnxk/meson.build
+++ b/drivers/event/cnxk/meson.build
@@ -337,7 +337,7 @@ foreach flag: extra_flags
 endforeach
 
 headers = files('rte_pmd_cnxk_eventdev.h')
-deps += ['bus_pci', 'common_cnxk', 'net_cnxk', 'crypto_cnxk', 'dma_cnxk']
+deps += ['net_cnxk', 'crypto_cnxk', 'dma_cnxk']
 
 require_iova_in_mbuf = false
 
diff --git a/drivers/event/dlb2/meson.build b/drivers/event/dlb2/meson.build
index 515d1795fe..217abc174d 100644
--- a/drivers/event/dlb2/meson.build
+++ b/drivers/event/dlb2/meson.build
@@ -67,4 +67,4 @@ endif
 
 headers = files('rte_pmd_dlb2.h')
 
-deps += ['mbuf', 'mempool', 'ring', 'pci', 'bus_pci']
+deps += ['bus_pci']
diff --git a/drivers/event/dpaa2/meson.build b/drivers/event/dpaa2/meson.build
index dd5063af43..7dae1da32b 100644
--- a/drivers/event/dpaa2/meson.build
+++ b/drivers/event/dpaa2/meson.build
@@ -5,7 +5,7 @@ if not is_linux
     build = false
     reason = 'only supported on Linux'
 endif
-deps += ['bus_vdev', 'net_dpaa2', 'crypto_dpaa2_sec']
+deps += ['net_dpaa2', 'crypto_dpaa2_sec']
 sources = files(
         'dpaa2_hw_dpcon.c',
         'dpaa2_eventdev.c',
diff --git a/drivers/event/octeontx/meson.build b/drivers/event/octeontx/meson.build
index eb17e059d8..1227b2e18d 100644
--- a/drivers/event/octeontx/meson.build
+++ b/drivers/event/octeontx/meson.build
@@ -17,5 +17,4 @@ sources = files(
         'timvf_probe.c',
 )
 
-deps += ['common_octeontx', 'mempool_octeontx', 'bus_vdev', 'net_octeontx']
-deps += ['crypto_octeontx']
+deps = ['net_octeontx', 'crypto_octeontx']
diff --git a/drivers/event/sw/meson.build b/drivers/event/sw/meson.build
index 3a3ebd72a3..450969aa7a 100644
--- a/drivers/event/sw/meson.build
+++ b/drivers/event/sw/meson.build
@@ -8,5 +8,5 @@ sources = files(
         'sw_evdev_xstats.c',
         'sw_evdev.c',
 )
-deps += ['hash', 'bus_vdev']
+deps += ['bus_vdev']
 require_iova_in_mbuf = false
diff --git a/drivers/mempool/cnxk/meson.build b/drivers/mempool/cnxk/meson.build
index e388cce26a..7bbed325df 100644
--- a/drivers/mempool/cnxk/meson.build
+++ b/drivers/mempool/cnxk/meson.build
@@ -18,5 +18,5 @@ sources = files(
 )
 
 headers = files('rte_pmd_cnxk_mempool.h')
-deps += ['eal', 'mbuf', 'kvargs', 'bus_pci', 'common_cnxk', 'mempool']
+deps = ['common_cnxk']
 require_iova_in_mbuf = false
diff --git a/drivers/mempool/dpaa/meson.build b/drivers/mempool/dpaa/meson.build
index c4e9994b83..39fc312344 100644
--- a/drivers/mempool/dpaa/meson.build
+++ b/drivers/mempool/dpaa/meson.build
@@ -6,5 +6,5 @@ if not is_linux
     reason = 'only supported on Linux'
 endif
 
-deps += ['bus_dpaa']
+deps = ['bus_dpaa']
 sources = files('dpaa_mempool.c')
diff --git a/drivers/mempool/dpaa2/meson.build b/drivers/mempool/dpaa2/meson.build
index 3d16d44158..0099b20b97 100644
--- a/drivers/mempool/dpaa2/meson.build
+++ b/drivers/mempool/dpaa2/meson.build
@@ -6,7 +6,7 @@ if not is_linux
     reason = 'only supported on Linux'
 endif
 
-deps += ['bus_fslmc']
+deps = ['bus_fslmc']
 sources = files('dpaa2_hw_mempool.c')
 
 headers = files('rte_dpaa2_mempool.h')
diff --git a/drivers/mempool/octeontx/meson.build b/drivers/mempool/octeontx/meson.build
index 3ccecac75d..f97bcf4a5a 100644
--- a/drivers/mempool/octeontx/meson.build
+++ b/drivers/mempool/octeontx/meson.build
@@ -12,6 +12,6 @@ sources = files(
         'rte_mempool_octeontx.c',
 )
 
-deps += ['mbuf', 'bus_pci', 'common_octeontx']
+deps = ['mbuf', 'bus_pci', 'common_octeontx']
 
 require_iova_in_mbuf = false
diff --git a/drivers/net/cnxk/meson.build b/drivers/net/cnxk/meson.build
index 7bce80098a..f2f8f60f83 100644
--- a/drivers/net/cnxk/meson.build
+++ b/drivers/net/cnxk/meson.build
@@ -231,8 +231,7 @@ sources += files(
 endif
 endif
 
-deps += ['bus_pci', 'cryptodev', 'eventdev', 'security']
-deps += ['common_cnxk', 'mempool_cnxk']
+deps = ['eventdev', 'mempool_cnxk']
 
 # Allow implicit vector conversions and strict aliasing warning
 extra_flags = ['-flax-vector-conversions', '-Wno-strict-aliasing']
diff --git a/drivers/net/iavf/meson.build b/drivers/net/iavf/meson.build
index 83aebd5596..a96d9c0bc0 100644
--- a/drivers/net/iavf/meson.build
+++ b/drivers/net/iavf/meson.build
@@ -11,7 +11,7 @@ includes += include_directories('../../common/iavf')
 
 testpmd_sources = files('iavf_testpmd.c')
 
-deps += ['common_iavf', 'security', 'cryptodev']
+deps += ['common_iavf', 'security']
 
 sources = files(
         'iavf_ethdev.c',
diff --git a/drivers/net/ice/meson.build b/drivers/net/ice/meson.build
index b7f2188e62..99344211cb 100644
--- a/drivers/net/ice/meson.build
+++ b/drivers/net/ice/meson.build
@@ -18,7 +18,7 @@ sources = files(
 
 testpmd_sources = files('ice_testpmd.c')
 
-deps += ['hash', 'net', 'common_iavf']
+deps += ['hash', 'common_iavf']
 includes += include_directories('base', '../../common/iavf')
 
 if arch_subdir == 'x86'
diff --git a/drivers/net/mana/meson.build b/drivers/net/mana/meson.build
index 2d72eca5a8..c97f117fd7 100644
--- a/drivers/net/mana/meson.build
+++ b/drivers/net/mana/meson.build
@@ -7,7 +7,7 @@ if not is_linux or not dpdk_conf.has('RTE_ARCH_X86')
     subdir_done()
 endif
 
-deps += ['pci', 'bus_pci', 'net', 'eal', 'kvargs']
+deps += ['bus_pci']
 
 sources += files(
         'gdma.c',
diff --git a/drivers/net/mlx5/meson.build b/drivers/net/mlx5/meson.build
index b279ddf47c..ec679d11ab 100644
--- a/drivers/net/mlx5/meson.build
+++ b/drivers/net/mlx5/meson.build
@@ -8,7 +8,7 @@ if not (is_linux or is_windows)
     subdir_done()
 endif
 
-deps += ['hash', 'common_mlx5']
+deps += ['common_mlx5']
 if not dpdk_conf.has('RTE_COMMON_MLX5')
     # avoid referencing undefined variables from common/mlx5
     subdir_done()
diff --git a/drivers/net/sfc/meson.build b/drivers/net/sfc/meson.build
index 5adde68517..820ee6c91e 100644
--- a/drivers/net/sfc/meson.build
+++ b/drivers/net/sfc/meson.build
@@ -71,7 +71,7 @@ if not cc.links(atomic_check_code)
     ext_deps += libatomic_dep
 endif
 
-deps += ['common_sfc_efx', 'bus_pci', 'hash']
+deps += ['common_sfc_efx', 'hash']
 sources = files(
         'sfc_ethdev.c',
         'sfc_kvargs.c',
diff --git a/drivers/net/softnic/meson.build b/drivers/net/softnic/meson.build
index 5dfbd16c77..1529ef38f9 100644
--- a/drivers/net/softnic/meson.build
+++ b/drivers/net/softnic/meson.build
@@ -15,4 +15,4 @@ sources = files(
         'rte_eth_softnic_swq.c',
         'rte_eth_softnic_thread.c',
 )
-deps += ['pipeline', 'port', 'table']
+deps += ['pipeline']
diff --git a/drivers/raw/cnxk_bphy/meson.build b/drivers/raw/cnxk_bphy/meson.build
index bb5d2ffb80..b38b071697 100644
--- a/drivers/raw/cnxk_bphy/meson.build
+++ b/drivers/raw/cnxk_bphy/meson.build
@@ -2,7 +2,7 @@
 # Copyright(C) 2021 Marvell.
 #
 
-deps += ['bus_pci', 'common_cnxk', 'rawdev']
+deps += ['common_cnxk', 'rawdev']
 sources = files(
         'cnxk_bphy.c',
         'cnxk_bphy_cgx.c',
diff --git a/drivers/raw/cnxk_gpio/meson.build b/drivers/raw/cnxk_gpio/meson.build
index 9d9a527392..6d17fe573f 100644
--- a/drivers/raw/cnxk_gpio/meson.build
+++ b/drivers/raw/cnxk_gpio/meson.build
@@ -2,7 +2,7 @@
 # Copyright(C) 2021 Marvell.
 #
 
-deps += ['bus_vdev', 'common_cnxk', 'rawdev', 'kvargs']
+deps += ['bus_vdev', 'common_cnxk', 'rawdev']
 sources = files(
         'cnxk_gpio.c',
         'cnxk_gpio_irq.c',
diff --git a/drivers/raw/ntb/meson.build b/drivers/raw/ntb/meson.build
index 9096f2b25a..8f79d3b16a 100644
--- a/drivers/raw/ntb/meson.build
+++ b/drivers/raw/ntb/meson.build
@@ -1,7 +1,7 @@
 # SPDX-License-Identifier: BSD-3-Clause
 # Copyright(c) 2019 Intel Corporation.
 
-deps += ['rawdev', 'mbuf', 'mempool', 'pci', 'bus_pci']
+deps += ['rawdev', 'mbuf', 'bus_pci']
 sources = files('ntb.c',
                 'ntb_hw_intel.c')
 headers = files('rte_pmd_ntb.h')
diff --git a/drivers/raw/skeleton/meson.build b/drivers/raw/skeleton/meson.build
index 9d5fcf6514..7d76fe71b3 100644
--- a/drivers/raw/skeleton/meson.build
+++ b/drivers/raw/skeleton/meson.build
@@ -1,7 +1,7 @@
 # SPDX-License-Identifier: BSD-3-Clause
 # Copyright 2018 NXP
 
-deps += ['rawdev', 'kvargs', 'mbuf', 'bus_vdev']
+deps += ['rawdev', 'mbuf', 'bus_vdev']
 sources = files(
         'skeleton_rawdev.c',
         'skeleton_rawdev_test.c',
diff --git a/drivers/regex/mlx5/meson.build b/drivers/regex/mlx5/meson.build
index 6070b37501..f75bf2e084 100644
--- a/drivers/regex/mlx5/meson.build
+++ b/drivers/regex/mlx5/meson.build
@@ -7,7 +7,7 @@ if not is_linux
     subdir_done()
 endif
 
-deps += ['common_mlx5', 'eal']
+deps += ['common_mlx5']
 if not dpdk_conf.has('RTE_COMMON_MLX5')
     # avoid referencing undefined variables from common/mlx5
     subdir_done()
diff --git a/drivers/vdpa/ifc/meson.build b/drivers/vdpa/ifc/meson.build
index f78d36a715..f4ed4f491f 100644
--- a/drivers/vdpa/ifc/meson.build
+++ b/drivers/vdpa/ifc/meson.build
@@ -1,6 +1,6 @@
 # SPDX-License-Identifier: BSD-3-Clause
 # Copyright(c) 2018 Intel Corporation
 
-deps += 'vhost'
+deps += 'bus_pci'
 sources = files('ifcvf_vdpa.c', 'base/ifcvf.c')
 includes += include_directories('base')
diff --git a/drivers/vdpa/meson.build b/drivers/vdpa/meson.build
index e01c277b9e..747cdc7c55 100644
--- a/drivers/vdpa/meson.build
+++ b/drivers/vdpa/meson.build
@@ -11,5 +11,4 @@ drivers = [
         'nfp',
         'sfc',
 ]
-std_deps = ['bus_pci']
-std_deps += ['vhost']
+std_deps = ['vhost']
diff --git a/drivers/vdpa/mlx5/meson.build b/drivers/vdpa/mlx5/meson.build
index e224d1bcc9..1263ac43a4 100644
--- a/drivers/vdpa/mlx5/meson.build
+++ b/drivers/vdpa/mlx5/meson.build
@@ -7,7 +7,7 @@ if not is_linux
     subdir_done()
 endif
 
-deps += ['hash', 'common_mlx5', 'vhost', 'pci', 'eal', 'sched']
+deps += ['common_mlx5', 'vhost', 'sched']
 if not dpdk_conf.has('RTE_COMMON_MLX5')
     # avoid referencing undefined variables from common/mlx5
     subdir_done()
diff --git a/drivers/vdpa/sfc/meson.build b/drivers/vdpa/sfc/meson.build
index 933f3f18f3..465ca9f220 100644
--- a/drivers/vdpa/sfc/meson.build
+++ b/drivers/vdpa/sfc/meson.build
@@ -16,7 +16,7 @@ foreach flag: extra_flags
     endif
 endforeach
 
-deps += ['common_sfc_efx', 'bus_pci']
+deps += ['common_sfc_efx']
 sources = files(
         'sfc_vdpa.c',
         'sfc_vdpa_hw.c',
-- 
2.43.0


^ permalink raw reply	[flat|nested] 54+ messages in thread

* [PATCH v2 6/7] build: reduce app dependencies
  2024-08-02 12:44 ` [PATCH v2 0/7] record and rework component dependencies Bruce Richardson
                     ` (4 preceding siblings ...)
  2024-08-02 12:44   ` [PATCH v2 5/7] build: reduce driver dependencies Bruce Richardson
@ 2024-08-02 12:44   ` Bruce Richardson
  2024-08-02 12:44   ` [PATCH v2 7/7] devtools: add script to generate DPDK dependency graphs Bruce Richardson
                     ` (3 subsequent siblings)
  9 siblings, 0 replies; 54+ messages in thread
From: Bruce Richardson @ 2024-08-02 12:44 UTC (permalink / raw)
  To: dev; +Cc: ferruh.yigit, konstantin.ananyev, anatoly.burakov, Bruce Richardson

Remove any unnecessary dependencies from the app dependency lists.
This will give each app a near-minimum set of required dependencies.

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
---
 app/dumpcap/meson.build          | 2 +-
 app/graph/meson.build            | 2 +-
 app/pdump/meson.build            | 2 +-
 app/proc-info/meson.build        | 2 +-
 app/test-crypto-perf/meson.build | 2 +-
 app/test-fib/meson.build         | 2 +-
 app/test-sad/meson.build         | 2 +-
 app/test/meson.build             | 2 +-
 8 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/app/dumpcap/meson.build b/app/dumpcap/meson.build
index 69c016c780..6204cf051a 100644
--- a/app/dumpcap/meson.build
+++ b/app/dumpcap/meson.build
@@ -14,4 +14,4 @@ endif
 
 ext_deps += pcap_dep
 sources = files('main.c')
-deps += ['ethdev', 'pdump', 'pcapng', 'bpf']
+deps += ['pdump']
diff --git a/app/graph/meson.build b/app/graph/meson.build
index 6dc54d5ee6..9c4cd080d9 100644
--- a/app/graph/meson.build
+++ b/app/graph/meson.build
@@ -9,7 +9,7 @@ if not build
     subdir_done()
 endif
 
-deps += ['graph', 'eal', 'lpm', 'ethdev', 'node', 'cmdline']
+deps += ['node', 'cmdline']
 sources = files(
         'cli.c',
         'conn.c',
diff --git a/app/pdump/meson.build b/app/pdump/meson.build
index fb282bba1f..a10f9d6124 100644
--- a/app/pdump/meson.build
+++ b/app/pdump/meson.build
@@ -8,4 +8,4 @@ if is_windows
 endif
 
 sources = files('main.c')
-deps += ['ethdev', 'kvargs', 'pdump']
+deps += ['pdump']
diff --git a/app/proc-info/meson.build b/app/proc-info/meson.build
index 4f83f29a64..b309109291 100644
--- a/app/proc-info/meson.build
+++ b/app/proc-info/meson.build
@@ -8,7 +8,7 @@ if is_windows
 endif
 
 sources = files('main.c')
-deps += ['ethdev', 'security', 'eventdev']
+deps += ['security', 'eventdev']
 if dpdk_conf.has('RTE_LIB_METRICS')
     deps += 'metrics'
 endif
diff --git a/app/test-crypto-perf/meson.build b/app/test-crypto-perf/meson.build
index 7b02b518f0..51794521fb 100644
--- a/app/test-crypto-perf/meson.build
+++ b/app/test-crypto-perf/meson.build
@@ -19,7 +19,7 @@ sources = files(
         'cperf_test_verify.c',
         'main.c',
 )
-deps += ['cryptodev', 'net', 'security']
+deps += ['cryptodev']
 if dpdk_conf.has('RTE_CRYPTO_SCHEDULER')
     deps += 'crypto_scheduler'
 endif
diff --git a/app/test-fib/meson.build b/app/test-fib/meson.build
index eb36772cf3..25e2ea1a1d 100644
--- a/app/test-fib/meson.build
+++ b/app/test-fib/meson.build
@@ -8,4 +8,4 @@ if is_windows
 endif
 
 sources = files('main.c')
-deps += ['fib', 'lpm', 'net']
+deps += ['fib', 'lpm']
diff --git a/app/test-sad/meson.build b/app/test-sad/meson.build
index a50616a9c7..414e2a05cb 100644
--- a/app/test-sad/meson.build
+++ b/app/test-sad/meson.build
@@ -8,4 +8,4 @@ if is_windows
 endif
 
 sources = files('main.c')
-deps += ['ipsec', 'net']
+deps += ['ipsec']
diff --git a/app/test/meson.build b/app/test/meson.build
index e29258e6ec..027008e047 100644
--- a/app/test/meson.build
+++ b/app/test/meson.build
@@ -2,7 +2,7 @@
 # Copyright(c) 2017-2023 Intel Corporation
 
 # the main test files [test.c and commands.c] relies on these libraries
-deps += ['cmdline', 'ring', 'mempool', 'mbuf']
+deps += ['cmdline']
 sources += files('commands.c', 'test.c')
 
 # optional dependencies: some files may use these - and so we should link them in -
-- 
2.43.0


^ permalink raw reply	[flat|nested] 54+ messages in thread

* [PATCH v2 7/7] devtools: add script to generate DPDK dependency graphs
  2024-08-02 12:44 ` [PATCH v2 0/7] record and rework component dependencies Bruce Richardson
                     ` (5 preceding siblings ...)
  2024-08-02 12:44   ` [PATCH v2 6/7] build: reduce app dependencies Bruce Richardson
@ 2024-08-02 12:44   ` Bruce Richardson
  2024-08-02 13:29   ` [PATCH v2 0/7] record and rework component dependencies Morten Brørup
                     ` (2 subsequent siblings)
  9 siblings, 0 replies; 54+ messages in thread
From: Bruce Richardson @ 2024-08-02 12:44 UTC (permalink / raw)
  To: dev; +Cc: ferruh.yigit, konstantin.ananyev, anatoly.burakov, Bruce Richardson

Rather than the single monolithic graph that would be output from the
deps.dot file in a build directory, we can post-process that to generate
simpler graphs for different tasks. This new "draw_dependency_graphs"
script takes the "deps.dot" as input and generates an output file that
has the nodes categorized, filtering them based off the requested node
or category. For example, use "--component net_ice" to show the
dependency tree from that driver, or "--category lib" to show just the
library dependency tree.

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
---
 devtools/draw-dependency-graphs.py | 136 +++++++++++++++++++++++++++++
 1 file changed, 136 insertions(+)
 create mode 100755 devtools/draw-dependency-graphs.py

diff --git a/devtools/draw-dependency-graphs.py b/devtools/draw-dependency-graphs.py
new file mode 100755
index 0000000000..826d89d5ce
--- /dev/null
+++ b/devtools/draw-dependency-graphs.py
@@ -0,0 +1,136 @@
+#! /usr/bin/env python3
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright(c) 2024 Intel Corporation
+
+import argparse
+import ast
+
+
+driver_classes = [
+    "baseband",
+    "bus",
+    "common",
+    "compress",
+    "crypto",
+    "dma",
+    "event",
+    "gpu",
+    "mempool",
+    "ml",
+    "net",
+    "raw",
+    "regex",
+    "vdpa",
+]
+
+
+def component_type(name: str):
+    if name.startswith("dpdk-"):
+        return "app"
+
+    nameparts = name.split("_", 1)
+    if len(nameparts) > 1 and nameparts[0] in driver_classes:
+        return f"drivers/{nameparts[0]}"
+
+    return "lib"
+
+
+def read_deps_list(lines: list[str]):
+    deps_data = {}
+    for ln in lines:
+        if ln.startswith("digraph") or ln == "}":
+            continue
+
+        if "->" in ln:
+            component, deps = [s.strip() for s in ln.split("->")]
+            deps = ast.literal_eval(deps)
+        else:
+            component, deps = ln, {}
+
+        component = component.strip('"')
+        comp_class = component_type(component)
+
+        if comp_class not in deps_data.keys():
+            deps_data[comp_class] = {}
+        deps_data[comp_class][component] = deps
+    return deps_data
+
+
+def create_classified_graph(deps_data: dict[dict[list[str]]]):
+    yield ("digraph dpdk_dependencies {\n  overlap=false\n  model=subset\n")
+    for n, category in enumerate(deps_data.keys()):
+        yield (f'  subgraph cluster_{n} {{\n    label = "{category}"\n')
+        for component in deps_data[category].keys():
+            yield (
+                f'    "{component}" -> {deps_data[category][component]}\n'.replace(
+                    "'", '"'
+                )
+            )
+        yield ("  }\n")
+    yield ("}\n")
+
+
+def get_deps_for_component(
+    dep_data: dict[dict[list[str]]], component: str, comp_deps: set
+):
+    categories = dep_data.keys()
+    comp_deps.add(component)
+    for cat in categories:
+        if component in dep_data[cat].keys():
+            for dep in dep_data[cat][component]:
+                get_deps_for_component(dep_data, dep, comp_deps)
+
+
+def filter_deps(
+    dep_data: dict[dict[list[str]]], component: list[str]
+) -> dict[dict[list[str]]]:
+    components = set()
+    for comp in component:
+        get_deps_for_component(dep_data, comp, components)
+
+    retval = {}
+    for category in dep_data.keys():
+        for comp in dep_data[category].keys():
+            if comp in components:
+                if category not in retval:
+                    retval[category] = {}
+                retval[category][comp] = dep_data[category][comp]
+    return retval
+
+
+def main():
+    parser = argparse.ArgumentParser(
+        description="Utility to generate dependency tree graphs for DPDK"
+    )
+    parser.add_argument(
+        "--component",
+        type=str,
+        help="Only output hierarchy from specified component down.",
+    )
+    parser.add_argument(
+        "--category",
+        type=str,
+        help="Output hierarchy for all components in given category, e.g. lib, app, drivers/net, etc.",
+    )
+    parser.add_argument(
+        "input_file",
+        type=argparse.FileType("r"),
+        help="Path to the deps.dot file from a DPDK build directory",
+    )
+    parser.add_argument(
+        "output_file",
+        type=argparse.FileType("w"),
+        help="Path to the desired output dot file",
+    )
+    args = parser.parse_args()
+
+    deps = read_deps_list([ln.strip() for ln in args.input_file.readlines()])
+    if args.component:
+        deps = filter_deps(deps, [args.component])
+    elif args.category:
+        deps = filter_deps(deps, deps[args.category].keys())
+    args.output_file.writelines(create_classified_graph(deps))
+
+
+if __name__ == "__main__":
+    main()
-- 
2.43.0


^ permalink raw reply	[flat|nested] 54+ messages in thread

* RE: [PATCH v2 0/7] record and rework component dependencies
  2024-08-02 12:44 ` [PATCH v2 0/7] record and rework component dependencies Bruce Richardson
                     ` (6 preceding siblings ...)
  2024-08-02 12:44   ` [PATCH v2 7/7] devtools: add script to generate DPDK dependency graphs Bruce Richardson
@ 2024-08-02 13:29   ` Morten Brørup
  2024-08-02 15:05   ` Patrick Robb
  2024-08-02 17:18   ` Ferruh Yigit
  9 siblings, 0 replies; 54+ messages in thread
From: Morten Brørup @ 2024-08-02 13:29 UTC (permalink / raw)
  To: Bruce Richardson, dev; +Cc: ferruh.yigit, konstantin.ananyev, anatoly.burakov

> From: Bruce Richardson [mailto:bruce.richardson@intel.com]
> Sent: Friday, 2 August 2024 14.44
> 
> As part of the meson build, we can record the dependencies for each
> component as we process it, logging them to a file. This file can be
> used as input to a number of other scripts and tools, for example, to
> graph the dependencies, or to allow higher-level build-config tools to
> automatically enable component requirements, etc.
> 
> The first patch of this set generates the basic dependency tree. The
> second patch does some processing of that dependency tree to identify
> cases where dependencies are being unnecessarily specified. Reducing
> these makes it easier to have readable dependency graphs in future,
> without affecting the build.
> 
> The following 4 patches are based on the output of the second patch, and
> greatly cut down the number of direct dependency links between
> components. Even with the cut-down dependencies, the full dependency
> graph is nigh-unreadable, so the final patch adds a new script to
> generate dependency tree subgraphs, creating dot files for e.g. the
> dependencies of a particular component, or a component class such as
> mempool drivers.

Thank you for the work on this, Bruce.

For the series,
Acked-by: Morten Brørup <mb@smartsharesystems.com>


^ permalink raw reply	[flat|nested] 54+ messages in thread

* Re: [PATCH v2 0/7] record and rework component dependencies
  2024-08-02 12:44 ` [PATCH v2 0/7] record and rework component dependencies Bruce Richardson
                     ` (7 preceding siblings ...)
  2024-08-02 13:29   ` [PATCH v2 0/7] record and rework component dependencies Morten Brørup
@ 2024-08-02 15:05   ` Patrick Robb
  2024-08-02 15:11     ` Bruce Richardson
  2024-08-02 17:18   ` Ferruh Yigit
  9 siblings, 1 reply; 54+ messages in thread
From: Patrick Robb @ 2024-08-02 15:05 UTC (permalink / raw)
  To: Bruce Richardson
  Cc: dev, ferruh.yigit, konstantin.ananyev, anatoly.burakov,
	Jerin Jacob Kollanukkaran

I saw there was one fail for this series for the Marvell MVNETA container.

I thought I should also mention that the build did fail when our
automation tried to run DTS on the Octeon CN10K DPU (which is also
Marvell). So, that is why you won't get a report for the CN10K DTS
results.

Let me know if you can't get what you need from the MVNETA build logs
failure, and I can manually get more info about why this won't
compile. Cheers.

^ permalink raw reply	[flat|nested] 54+ messages in thread

* Re: [PATCH v2 0/7] record and rework component dependencies
  2024-08-02 15:05   ` Patrick Robb
@ 2024-08-02 15:11     ` Bruce Richardson
  0 siblings, 0 replies; 54+ messages in thread
From: Bruce Richardson @ 2024-08-02 15:11 UTC (permalink / raw)
  To: Patrick Robb
  Cc: dev, ferruh.yigit, konstantin.ananyev, anatoly.burakov,
	Jerin Jacob Kollanukkaran

On Fri, Aug 02, 2024 at 11:05:58AM -0400, Patrick Robb wrote:
> I saw there was one fail for this series for the Marvell MVNETA container.
> 
> I thought I should also mention that the build did fail when our
> automation tried to run DTS on the Octeon CN10K DPU (which is also
> Marvell). So, that is why you won't get a report for the CN10K DTS
> results.
> 
> Let me know if you can't get what you need from the MVNETA build logs
> failure, and I can manually get more info about why this won't
> compile. Cheers.

I have already got multiple emails about failures from this series - though
all look to be about the same issue. I think it should be an easy fix for
v3, but I'll waiting till all reports come back.

/Bruce

^ permalink raw reply	[flat|nested] 54+ messages in thread

* Re: [PATCH v2 0/7] record and rework component dependencies
  2024-08-02 12:44 ` [PATCH v2 0/7] record and rework component dependencies Bruce Richardson
                     ` (8 preceding siblings ...)
  2024-08-02 15:05   ` Patrick Robb
@ 2024-08-02 17:18   ` Ferruh Yigit
  2024-08-06  8:35     ` Bruce Richardson
  9 siblings, 1 reply; 54+ messages in thread
From: Ferruh Yigit @ 2024-08-02 17:18 UTC (permalink / raw)
  To: Bruce Richardson, dev; +Cc: konstantin.ananyev, anatoly.burakov

On 8/2/2024 1:44 PM, Bruce Richardson wrote:
> As part of the meson build, we can record the dependencies for each
> component as we process it, logging them to a file. This file can be
> used as input to a number of other scripts and tools, for example, to
> graph the dependencies, or to allow higher-level build-config tools to
> automatically enable component requirements, etc.
> 
> The first patch of this set generates the basic dependency tree. The
> second patch does some processing of that dependency tree to identify
> cases where dependencies are being unnecessarily specified. Reducing
> these makes it easier to have readable dependency graphs in future,
> without affecting the build.
> 
> The following 4 patches are based on the output of the second patch, and
> greatly cut down the number of direct dependency links between
> components. Even with the cut-down dependencies, the full dependency
> graph is nigh-unreadable, so the final patch adds a new script to
> generate dependency tree subgraphs, creating dot files for e.g. the
> dependencies of a particular component, or a component class such as
> mempool drivers.
> 
> Bruce Richardson (7):
>   build: output a dependency log in build directory
>   devtools: add script to flag unneeded dependencies
>   build: remove kvargs from driver class dependencies
>   build: reduce library dependencies
>   build: reduce driver dependencies
>   build: reduce app dependencies
>   devtools: add script to generate DPDK dependency graphs
>

Tested-by: Ferruh Yigit <ferruh.yigit@amd.com>

Thanks for the update, output is now easier to consume with the help of
the 'devtools/draw-dependency-graphs.py' script.
A detail but script is not actually drawing graph, but parsing .dot
file, name is a little misleading.


Also for the patches that are converting explicit dependency to implicit
dependency, I can see the benefit for the meson and graph. But also
there is a value of keeping explicit dependency, it was an easy way to
document dependencies of component for developers.
So, I am not really sure which one is better.


^ permalink raw reply	[flat|nested] 54+ messages in thread

* Re: [PATCH v2 0/7] record and rework component dependencies
  2024-08-02 17:18   ` Ferruh Yigit
@ 2024-08-06  8:35     ` Bruce Richardson
  0 siblings, 0 replies; 54+ messages in thread
From: Bruce Richardson @ 2024-08-06  8:35 UTC (permalink / raw)
  To: Ferruh Yigit; +Cc: dev, konstantin.ananyev, anatoly.burakov

On Fri, Aug 02, 2024 at 06:18:26PM +0100, Ferruh Yigit wrote:
> On 8/2/2024 1:44 PM, Bruce Richardson wrote:
> > As part of the meson build, we can record the dependencies for each
> > component as we process it, logging them to a file. This file can be
> > used as input to a number of other scripts and tools, for example, to
> > graph the dependencies, or to allow higher-level build-config tools to
> > automatically enable component requirements, etc.
> > 
> > The first patch of this set generates the basic dependency tree. The
> > second patch does some processing of that dependency tree to identify
> > cases where dependencies are being unnecessarily specified. Reducing
> > these makes it easier to have readable dependency graphs in future,
> > without affecting the build.
> > 
> > The following 4 patches are based on the output of the second patch, and
> > greatly cut down the number of direct dependency links between
> > components. Even with the cut-down dependencies, the full dependency
> > graph is nigh-unreadable, so the final patch adds a new script to
> > generate dependency tree subgraphs, creating dot files for e.g. the
> > dependencies of a particular component, or a component class such as
> > mempool drivers.
> > 
> > Bruce Richardson (7):
> >   build: output a dependency log in build directory
> >   devtools: add script to flag unneeded dependencies
> >   build: remove kvargs from driver class dependencies
> >   build: reduce library dependencies
> >   build: reduce driver dependencies
> >   build: reduce app dependencies
> >   devtools: add script to generate DPDK dependency graphs
> >
> 
> Tested-by: Ferruh Yigit <ferruh.yigit@amd.com>
> 
> Thanks for the update, output is now easier to consume with the help of
> the 'devtools/draw-dependency-graphs.py' script.
> A detail but script is not actually drawing graph, but parsing .dot
> file, name is a little misleading.
> 
> 
> Also for the patches that are converting explicit dependency to implicit
> dependency, I can see the benefit for the meson and graph. But also
> there is a value of keeping explicit dependency, it was an easy way to
> document dependencies of component for developers.
> So, I am not really sure which one is better.
> 

Up till now we did not keep a fully dependency list for each component
because the configuration time with meson completely exploded due to really
slow deduplication of dependencies there. I haven't checked with recent
versions of meson, though, so the problem may no longer be there now. Right
now, we have "partial dependency lists" - neither full list of dependencies
of a component, nor a minimal set. These patches don't bring us fully to a
minimal set, but bring us closer. I honestly don't think we need to enforce
either case - so long as we have all dependencies either explicilty or via
recursive dependency, things are fine.

/Bruce

^ permalink raw reply	[flat|nested] 54+ messages in thread

* Re: [PATCH v2 1/7] build: output a dependency log in build directory
  2024-08-02 12:44   ` [PATCH v2 1/7] build: output a dependency log in build directory Bruce Richardson
@ 2024-09-02 14:34     ` Burakov, Anatoly
  2024-09-03  8:31       ` Bruce Richardson
  0 siblings, 1 reply; 54+ messages in thread
From: Burakov, Anatoly @ 2024-09-02 14:34 UTC (permalink / raw)
  To: Bruce Richardson, dev; +Cc: ferruh.yigit, konstantin.ananyev

On 8/2/2024 2:44 PM, Bruce Richardson wrote:
> As meson processes our DPDK source tree it manages dependencies
> specified by each individual driver. To enable future analysis of the
> dependency links between components, log the dependencies of each DPDK
> component as it gets processed. This could potentially allow other tools
> to automatically enable or disable components based on the desired end
> components to be built, e.g. if the user requests net/ice, ensure that
> common/iavf is also enabled in the drivers.
> 
> The output file produced is in "dot" or "graphviz" format, which allows
> producing a graphical representation of the DPDK dependency tree if so
> desired. For example: "dot -Tpng -O build/deps.dot" to produce the
> image file "build/deps.dot.png".
> 
> Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
> Acked-by: Konstantin Ananyev <konstantin.ananyev@huawei.com>
> 
> ---

<snip>

> +try:
> +    contents = file_to_list(depsfile)
> +except FileNotFoundError:
> +    contents = ['digraph {\n', '}\n']
> +
> +component = sys.argv[1]
> +if len(sys.argv) > 2:
> +    contents[-1] = f'"{component}" -> {{ "{"\", \"".join(sys.argv[2:])}" }}\n'

This is invalid syntax prior to Python 3.12. You're doing escaped quotes 
("\", \"") inside a f-string block ({}). My machine has Python 3.9 and 
this breaks the script.


-- 
Thanks,
Anatoly


^ permalink raw reply	[flat|nested] 54+ messages in thread

* Re: [PATCH v2 1/7] build: output a dependency log in build directory
  2024-09-02 14:34     ` Burakov, Anatoly
@ 2024-09-03  8:31       ` Bruce Richardson
  0 siblings, 0 replies; 54+ messages in thread
From: Bruce Richardson @ 2024-09-03  8:31 UTC (permalink / raw)
  To: Burakov, Anatoly; +Cc: dev, ferruh.yigit, konstantin.ananyev

On Mon, Sep 02, 2024 at 04:34:34PM +0200, Burakov, Anatoly wrote:
> On 8/2/2024 2:44 PM, Bruce Richardson wrote:
> > As meson processes our DPDK source tree it manages dependencies
> > specified by each individual driver. To enable future analysis of the
> > dependency links between components, log the dependencies of each DPDK
> > component as it gets processed. This could potentially allow other tools
> > to automatically enable or disable components based on the desired end
> > components to be built, e.g. if the user requests net/ice, ensure that
> > common/iavf is also enabled in the drivers.
> > 
> > The output file produced is in "dot" or "graphviz" format, which allows
> > producing a graphical representation of the DPDK dependency tree if so
> > desired. For example: "dot -Tpng -O build/deps.dot" to produce the
> > image file "build/deps.dot.png".
> > 
> > Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
> > Acked-by: Konstantin Ananyev <konstantin.ananyev@huawei.com>
> > 
> > ---
> 
> <snip>
> 
> > +try:
> > +    contents = file_to_list(depsfile)
> > +except FileNotFoundError:
> > +    contents = ['digraph {\n', '}\n']
> > +
> > +component = sys.argv[1]
> > +if len(sys.argv) > 2:
> > +    contents[-1] = f'"{component}" -> {{ "{"\", \"".join(sys.argv[2:])}" }}\n'
> 
> This is invalid syntax prior to Python 3.12. You're doing escaped quotes
> ("\", \"") inside a f-string block ({}). My machine has Python 3.9 and this
> breaks the script.
> 
Thanks for the heads-up. I'll do a respin when I can.

^ permalink raw reply	[flat|nested] 54+ messages in thread

* [PATCH v3 0/8] record and rework component dependencies
  2024-07-30 14:55 [PATCH] build: output a dependency log in build directory Bruce Richardson
                   ` (2 preceding siblings ...)
  2024-08-02 12:44 ` [PATCH v2 0/7] record and rework component dependencies Bruce Richardson
@ 2024-09-04 15:08 ` Anatoly Burakov
  2024-09-04 15:08   ` [PATCH v3 1/8] build: split dependencies into mandatory and optional Anatoly Burakov
                     ` (10 more replies)
  3 siblings, 11 replies; 54+ messages in thread
From: Anatoly Burakov @ 2024-09-04 15:08 UTC (permalink / raw)
  To: dev

As part of the meson build, we can record the dependencies for each
component as we process it, logging them to a file. This file can be
used as input to a number of other scripts and tools, for example, to
graph the dependencies, or to allow higher-level build-config tools to
automatically enable component requirements, etc.

The first patch of this set separates dependencies inside meson into
optional or mandatory. The second patch of this set generates the basic
dependency tree. The third patch does some processing of that dependency
tree to identify cases where dependencies are being unnecessarily
specified. Reducing these makes it easier to have readable dependency
graphs in future, without affecting the build.

The following 4 patches are based on the output of the second patch, and
greatly cut down the number of direct dependency links between
components. Even with the cut-down dependencies, the full dependency
graph is nigh-unreadable, so the final patch adds a new script to
generate dependency tree subgraphs, creating dot files for e.g. the
dependencies of a particular component, or a component class such as
mempool drivers.

v2 -> v3:
- Split dependencies into optional and mandatory
- Fixup graph scripts to read and generate graphs that encode optional
  dependencies into the graph
- Python version fixes to avoid using features not available in minimum
  supported Python version
- Formatting with Ruff, and PEP-484 compliance

Anatoly Burakov (1):
  build: split dependencies into mandatory and optional

Bruce Richardson (7):
  build: output a dependency log in build directory
  devtools: add script to flag unneeded dependencies
  build: remove kvargs from driver class dependencies
  build: reduce library dependencies
  build: reduce driver dependencies
  build: reduce app dependencies
  devtools: add script to generate DPDK dependency graphs

 app/dumpcap/meson.build                    |   2 +-
 app/graph/meson.build                      |   2 +-
 app/meson.build                            |  11 +-
 app/pdump/meson.build                      |   2 +-
 app/proc-info/meson.build                  |   4 +-
 app/test-bbdev/meson.build                 |   8 +-
 app/test-crypto-perf/meson.build           |   4 +-
 app/test-fib/meson.build                   |   2 +-
 app/test-pmd/meson.build                   |  26 +--
 app/test-sad/meson.build                   |   2 +-
 app/test/meson.build                       |  14 +-
 buildtools/log-deps.py                     |  81 ++++++++
 buildtools/meson.build                     |   2 +
 devtools/draw-dependency-graphs.py         | 223 +++++++++++++++++++++
 devtools/find-duplicate-deps.py            |  53 +++++
 drivers/baseband/fpga_5gnr_fec/meson.build |   2 +-
 drivers/baseband/fpga_lte_fec/meson.build  |   2 +-
 drivers/baseband/la12xx/meson.build        |   2 +-
 drivers/baseband/null/meson.build          |   2 +-
 drivers/baseband/turbo_sw/meson.build      |   2 +-
 drivers/bus/auxiliary/meson.build          |   2 -
 drivers/bus/dpaa/meson.build               |   2 +-
 drivers/bus/fslmc/meson.build              |   2 +-
 drivers/bus/ifpga/meson.build              |   2 +-
 drivers/bus/pci/meson.build                |   4 +-
 drivers/bus/platform/meson.build           |   1 -
 drivers/bus/uacce/meson.build              |   2 -
 drivers/bus/vdev/meson.build               |   2 -
 drivers/common/cnxk/meson.build            |   4 +-
 drivers/common/cpt/meson.build             |   2 +-
 drivers/common/idpf/meson.build            |   2 +-
 drivers/common/mlx5/meson.build            |   2 +-
 drivers/compress/mlx5/meson.build          |   2 +-
 drivers/compress/nitrox/meson.build        |   2 +-
 drivers/compress/octeontx/meson.build      |   2 +-
 drivers/crypto/bcmfs/meson.build           |   2 +-
 drivers/crypto/cnxk/meson.build            |   2 +-
 drivers/crypto/dpaa_sec/meson.build        |   2 +-
 drivers/crypto/ipsec_mb/meson.build        |   2 +-
 drivers/crypto/mlx5/meson.build            |   2 +-
 drivers/crypto/nitrox/meson.build          |   2 +-
 drivers/dma/cnxk/meson.build               |   2 +-
 drivers/dma/dpaa/meson.build               |   2 +-
 drivers/dma/dpaa2/meson.build              |   2 +-
 drivers/dma/odm/meson.build                |   2 +-
 drivers/dma/skeleton/meson.build           |   2 +-
 drivers/event/cnxk/meson.build             |   2 +-
 drivers/event/dlb2/meson.build             |   2 +-
 drivers/event/dpaa2/meson.build            |   2 +-
 drivers/event/meson.build                  |   2 +-
 drivers/event/octeontx/meson.build         |   3 +-
 drivers/event/sw/meson.build               |   2 +-
 drivers/mempool/cnxk/meson.build           |   2 +-
 drivers/mempool/dpaa/meson.build           |   2 +-
 drivers/mempool/dpaa2/meson.build          |   2 +-
 drivers/mempool/octeontx/meson.build       |   2 +-
 drivers/meson.build                        |   9 +-
 drivers/net/cnxk/meson.build               |   3 +-
 drivers/net/iavf/meson.build               |   2 +-
 drivers/net/ice/meson.build                |   2 +-
 drivers/net/mana/meson.build               |   2 +-
 drivers/net/meson.build                    |   2 +-
 drivers/net/mlx5/meson.build               |   2 +-
 drivers/net/sfc/meson.build                |   2 +-
 drivers/net/softnic/meson.build            |   2 +-
 drivers/raw/cnxk_bphy/meson.build          |   2 +-
 drivers/raw/cnxk_gpio/meson.build          |   2 +-
 drivers/raw/ntb/meson.build                |   2 +-
 drivers/raw/skeleton/meson.build           |   2 +-
 drivers/regex/meson.build                  |   2 +-
 drivers/regex/mlx5/meson.build             |   2 +-
 drivers/vdpa/ifc/meson.build               |   2 +-
 drivers/vdpa/meson.build                   |   3 +-
 drivers/vdpa/mlx5/meson.build              |   2 +-
 drivers/vdpa/sfc/meson.build               |   2 +-
 examples/ethtool/meson.build               |   2 +-
 examples/l2fwd-crypto/meson.build          |   2 +-
 examples/l3fwd/meson.build                 |   2 +-
 examples/meson.build                       |  11 +-
 examples/vm_power_manager/meson.build      |   6 +-
 lib/argparse/meson.build                   |   2 +-
 lib/bbdev/meson.build                      |   2 +-
 lib/bitratestats/meson.build               |   2 +-
 lib/bpf/meson.build                        |   2 +-
 lib/cmdline/meson.build                    |   2 +-
 lib/compressdev/meson.build                |   2 +-
 lib/cryptodev/meson.build                  |   2 +-
 lib/dispatcher/meson.build                 |   2 +-
 lib/distributor/meson.build                |   2 +-
 lib/dmadev/meson.build                     |   2 -
 lib/eal/meson.build                        |   5 +-
 lib/efd/meson.build                        |   2 +-
 lib/ethdev/meson.build                     |   2 +-
 lib/eventdev/meson.build                   |   3 +-
 lib/fib/meson.build                        |   2 +-
 lib/gpudev/meson.build                     |   2 +-
 lib/graph/meson.build                      |   2 +-
 lib/gro/meson.build                        |   2 +-
 lib/gso/meson.build                        |   2 +-
 lib/hash/meson.build                       |   4 +-
 lib/ip_frag/meson.build                    |   2 +-
 lib/ipsec/meson.build                      |   2 +-
 lib/kvargs/meson.build                     |   2 +-
 lib/latencystats/meson.build               |   2 +-
 lib/lpm/meson.build                        |   3 +-
 lib/mbuf/meson.build                       |   2 +-
 lib/member/meson.build                     |   2 +-
 lib/mempool/meson.build                    |   2 +-
 lib/meson.build                            |   8 +-
 lib/metrics/meson.build                    |   2 +-
 lib/mldev/meson.build                      |   2 +-
 lib/net/meson.build                        |   2 +-
 lib/node/meson.build                       |   2 +-
 lib/pcapng/meson.build                     |   2 +-
 lib/pdcp/meson.build                       |   2 +-
 lib/pdump/meson.build                      |   2 +-
 lib/pipeline/meson.build                   |   2 +-
 lib/port/meson.build                       |   2 +-
 lib/power/meson.build                      |   2 +-
 lib/rawdev/meson.build                     |   2 -
 lib/rcu/meson.build                        |   2 +-
 lib/regexdev/meson.build                   |   2 +-
 lib/reorder/meson.build                    |   2 +-
 lib/rib/meson.build                        |   2 +-
 lib/ring/meson.build                       |   1 -
 lib/sched/meson.build                      |   2 +-
 lib/security/meson.build                   |   2 +-
 lib/table/meson.build                      |   2 +-
 lib/telemetry/meson.build                  |   2 +-
 lib/vhost/meson.build                      |   2 +-
 130 files changed, 533 insertions(+), 171 deletions(-)
 create mode 100644 buildtools/log-deps.py
 create mode 100755 devtools/draw-dependency-graphs.py
 create mode 100755 devtools/find-duplicate-deps.py

-- 
2.43.5


^ permalink raw reply	[flat|nested] 54+ messages in thread

* [PATCH v3 1/8] build: split dependencies into mandatory and optional
  2024-09-04 15:08 ` [PATCH v3 0/8] " Anatoly Burakov
@ 2024-09-04 15:08   ` Anatoly Burakov
  2024-09-06 14:51     ` Bruce Richardson
  2024-09-04 15:08   ` [PATCH v3 2/8] build: output a dependency log in build directory Anatoly Burakov
                     ` (9 subsequent siblings)
  10 siblings, 1 reply; 54+ messages in thread
From: Anatoly Burakov @ 2024-09-04 15:08 UTC (permalink / raw)
  To: dev, Reshma Pattan, Nicolas Chautru, Brian Dooley, Aman Singh,
	Akhil Goyal, Fan Zhang, David Hunt, Sivaprasad Tummala

Allow specifying dependencies as either mandatory or optional. This does
not change anything about the build, but it is useful for tooling to know
if a dependency is required or not.

Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com>
---
 app/meson.build                       |  3 ++-
 app/proc-info/meson.build             |  2 +-
 app/test-bbdev/meson.build            |  8 ++++----
 app/test-crypto-perf/meson.build      |  2 +-
 app/test-pmd/meson.build              | 26 +++++++++++++-------------
 app/test/meson.build                  | 12 ++++++------
 drivers/meson.build                   |  3 ++-
 examples/ethtool/meson.build          |  2 +-
 examples/l2fwd-crypto/meson.build     |  2 +-
 examples/l3fwd/meson.build            |  2 +-
 examples/meson.build                  |  3 ++-
 examples/vm_power_manager/meson.build |  6 +++---
 lib/meson.build                       |  3 ++-
 13 files changed, 39 insertions(+), 35 deletions(-)

diff --git a/app/meson.build b/app/meson.build
index 5b2c80c7a1..1c61cd862c 100644
--- a/app/meson.build
+++ b/app/meson.build
@@ -65,6 +65,7 @@ foreach app:apps
     # external package/library requirements
     ext_deps = []
     deps = []
+    optional_deps = []
 
     if not enable_apps.contains(app)
         build = false
@@ -84,7 +85,7 @@ foreach app:apps
 
     if build
         dep_objs = []
-        foreach d:deps
+        foreach d:deps + optional_deps
             var_name = get_option('default_library') + '_rte_' + d
             if not is_variable(var_name)
                 build = false
diff --git a/app/proc-info/meson.build b/app/proc-info/meson.build
index 4f83f29a64..156592119b 100644
--- a/app/proc-info/meson.build
+++ b/app/proc-info/meson.build
@@ -10,5 +10,5 @@ endif
 sources = files('main.c')
 deps += ['ethdev', 'security', 'eventdev']
 if dpdk_conf.has('RTE_LIB_METRICS')
-    deps += 'metrics'
+    optional_deps += 'metrics'
 endif
diff --git a/app/test-bbdev/meson.build b/app/test-bbdev/meson.build
index 926e0a5271..c26e46a987 100644
--- a/app/test-bbdev/meson.build
+++ b/app/test-bbdev/meson.build
@@ -15,14 +15,14 @@ sources = files(
 )
 deps += ['bbdev', 'bus_vdev']
 if dpdk_conf.has('RTE_BASEBAND_FPGA_LTE_FEC')
-    deps += ['baseband_fpga_lte_fec']
+    optional_deps += ['baseband_fpga_lte_fec']
 endif
 if dpdk_conf.has('RTE_BASEBAND_FPGA_5GNR_FEC')
-    deps += ['baseband_fpga_5gnr_fec']
+    optional_deps += ['baseband_fpga_5gnr_fec']
 endif
 if dpdk_conf.has('RTE_BASEBAND_ACC')
-    deps += ['baseband_acc']
+    optional_deps += ['baseband_acc']
 endif
 if dpdk_conf.has('RTE_BASEBAND_LA12XX')
-    deps += ['baseband_la12xx']
+    optional_deps += ['baseband_la12xx']
 endif
diff --git a/app/test-crypto-perf/meson.build b/app/test-crypto-perf/meson.build
index 7b02b518f0..05c71e0a0c 100644
--- a/app/test-crypto-perf/meson.build
+++ b/app/test-crypto-perf/meson.build
@@ -21,5 +21,5 @@ sources = files(
 )
 deps += ['cryptodev', 'net', 'security']
 if dpdk_conf.has('RTE_CRYPTO_SCHEDULER')
-    deps += 'crypto_scheduler'
+    optional_deps += 'crypto_scheduler'
 endif
diff --git a/app/test-pmd/meson.build b/app/test-pmd/meson.build
index 719f875be0..5559829e09 100644
--- a/app/test-pmd/meson.build
+++ b/app/test-pmd/meson.build
@@ -36,44 +36,44 @@ endif
 
 deps += ['ethdev', 'cmdline']
 if dpdk_conf.has('RTE_CRYPTO_SCHEDULER')
-    deps += 'crypto_scheduler'
+    optional_deps += 'crypto_scheduler'
 endif
 if dpdk_conf.has('RTE_LIB_BITRATESTATS')
-    deps += 'bitratestats'
+    optional_deps += 'bitratestats'
 endif
 if dpdk_conf.has('RTE_LIB_BPF')
     sources += files('bpf_cmd.c')
-    deps += 'bpf'
+    optional_deps += 'bpf'
 endif
 if dpdk_conf.has('RTE_LIB_GRO')
-    deps += 'gro'
+    optional_deps += 'gro'
 endif
 if dpdk_conf.has('RTE_LIB_GSO')
-    deps += 'gso'
+    optional_deps += 'gso'
 endif
 if dpdk_conf.has('RTE_LIB_LATENCYSTATS')
-    deps += 'latencystats'
+    optional_deps += 'latencystats'
 endif
 if dpdk_conf.has('RTE_LIB_METRICS')
-    deps += 'metrics'
+    optional_deps += 'metrics'
 endif
 if dpdk_conf.has('RTE_LIB_PDUMP')
-    deps += 'pdump'
+    optional_deps += 'pdump'
 endif
 if dpdk_conf.has('RTE_NET_BNXT')
-    deps += 'net_bnxt'
+    optional_deps += 'net_bnxt'
 endif
 if dpdk_conf.has('RTE_NET_I40E')
-    deps += 'net_i40e'
+    optional_deps += 'net_i40e'
 endif
 if dpdk_conf.has('RTE_NET_IXGBE')
-    deps += 'net_ixgbe'
+    optional_deps += 'net_ixgbe'
 endif
 if dpdk_conf.has('RTE_NET_DPAA')
-    deps += ['bus_dpaa', 'mempool_dpaa', 'net_dpaa']
+    optional_deps += ['bus_dpaa', 'mempool_dpaa', 'net_dpaa']
 endif
 
 # Driver-specific commands are located in driver directories.
 includes = include_directories('.')
 sources += testpmd_drivers_sources
-deps += testpmd_drivers_deps
+optional_deps += testpmd_drivers_deps
diff --git a/app/test/meson.build b/app/test/meson.build
index e29258e6ec..bb0a38b3a5 100644
--- a/app/test/meson.build
+++ b/app/test/meson.build
@@ -7,7 +7,7 @@ sources += files('commands.c', 'test.c')
 
 # optional dependencies: some files may use these - and so we should link them in -
 # but do not explicitly require them so they are not listed in the per-file lists below
-optional_deps = ['crypto_scheduler', 'lpm']
+opt_deps = ['crypto_scheduler', 'lpm']
 
 # some other utility C files, providing functions used by various tests
 # so we need to include these deps in the dependency list for the files using those fns.
@@ -217,8 +217,8 @@ foreach f, f_deps : source_file_deps
             break
         else
             # technically we might not need this dep, but adding it is harmless
-            if d not in deps
-                deps += d
+            if d not in optional_deps
+                optional_deps += d
             endif
         endif
     endforeach
@@ -239,9 +239,9 @@ foreach f, f_deps : source_file_deps
     endif
 endforeach
 # add the optional dependencies
-foreach d:optional_deps
-    if is_variable(def_lib + '_rte_' + d) and d not in deps
-        deps += d
+foreach d:opt_deps
+    if is_variable(def_lib + '_rte_' + d) and d not in optional_deps
+        optional_deps += d
     endif
 endforeach
 
diff --git a/drivers/meson.build b/drivers/meson.build
index 66931d4241..b9a18a5986 100644
--- a/drivers/meson.build
+++ b/drivers/meson.build
@@ -128,6 +128,7 @@ foreach subpath:subdirs
         includes = [include_directories(drv_path)]
         # set up internal deps. Drivers can append/override as necessary
         deps = std_deps
+        optional_deps = []
         # ext_deps: Stores external library dependency got
         # using dependency() (preferred) or find_library().
         # For the find_library() case (but not with dependency()) we also
@@ -169,7 +170,7 @@ foreach subpath:subdirs
             # get dependency objs from strings
             shared_deps = ext_deps
             static_deps = ext_deps
-            foreach d:deps
+            foreach d:deps + optional_deps
                 if not build
                     break
                 endif
diff --git a/examples/ethtool/meson.build b/examples/ethtool/meson.build
index d7f63d48af..e8638a8607 100644
--- a/examples/ethtool/meson.build
+++ b/examples/ethtool/meson.build
@@ -20,7 +20,7 @@ includes = include_directories('lib', 'ethtool-app')
 
 deps += 'bus_pci'
 if dpdk_conf.has('RTE_NET_IXGBE')
-    deps += 'net_ixgbe'
+    optional_deps += 'net_ixgbe'
 endif
 
 allow_experimental_apis = true
diff --git a/examples/l2fwd-crypto/meson.build b/examples/l2fwd-crypto/meson.build
index bb44c88882..f16ebadc74 100644
--- a/examples/l2fwd-crypto/meson.build
+++ b/examples/l2fwd-crypto/meson.build
@@ -8,7 +8,7 @@
 
 deps += 'cryptodev'
 if dpdk_conf.has('RTE_CRYPTO_SCHEDULER')
-    deps += 'crypto_scheduler'
+    optional_deps += 'crypto_scheduler'
 endif
 allow_experimental_apis = true
 sources = files(
diff --git a/examples/l3fwd/meson.build b/examples/l3fwd/meson.build
index c25de77bba..5938452607 100644
--- a/examples/l3fwd/meson.build
+++ b/examples/l3fwd/meson.build
@@ -19,5 +19,5 @@ sources = files(
         'main.c',
 )
 if dpdk_conf.has('RTE_LIB_EVENTDEV')
-    deps += 'eventdev'
+    optional_deps += 'eventdev'
 endif
diff --git a/examples/meson.build b/examples/meson.build
index 8e8968a1fa..82151d09b4 100644
--- a/examples/meson.build
+++ b/examples/meson.build
@@ -98,11 +98,12 @@ foreach example: examples
     ext_deps = []
     includes = [include_directories(example, 'common')]
     deps = ['eal', 'mempool', 'net', 'mbuf', 'ethdev', 'cmdline']
+    optional_deps = []
     subdir(example)
 
     if build
         dep_objs = ext_deps
-        foreach d:deps
+        foreach d:deps + optional_deps
             var_name = get_option('default_library') + '_rte_' + d
             if not is_variable(var_name)
                 build = false
diff --git a/examples/vm_power_manager/meson.build b/examples/vm_power_manager/meson.build
index b866d8fd54..25e5bcb71b 100644
--- a/examples/vm_power_manager/meson.build
+++ b/examples/vm_power_manager/meson.build
@@ -9,15 +9,15 @@
 deps += ['power']
 
 if dpdk_conf.has('RTE_NET_BNXT')
-    deps += ['net_bnxt']
+    optional_deps += ['net_bnxt']
 endif
 
 if dpdk_conf.has('RTE_NET_I40E')
-    deps += ['net_i40e']
+    optional_deps += ['net_i40e']
 endif
 
 if dpdk_conf.has('RTE_NET_IXGBE')
-    deps += ['net_ixgbe']
+    optional_deps += ['net_ixgbe']
 endif
 
 allow_experimental_apis = true
diff --git a/lib/meson.build b/lib/meson.build
index 162287753f..7916deadd9 100644
--- a/lib/meson.build
+++ b/lib/meson.build
@@ -134,6 +134,7 @@ foreach l:libraries
     # external package/library requirements
     ext_deps = []
     deps = []
+    optional_deps = []
     # eal is standard dependency once built
     if dpdk_conf.has('RTE_LIB_EAL')
         deps += ['eal']
@@ -171,7 +172,7 @@ foreach l:libraries
 
     shared_deps = ext_deps
     static_deps = ext_deps
-    foreach d:deps
+    foreach d:deps + optional_deps
         if not build
             break
         endif
-- 
2.43.5


^ permalink raw reply	[flat|nested] 54+ messages in thread

* [PATCH v3 2/8] build: output a dependency log in build directory
  2024-09-04 15:08 ` [PATCH v3 0/8] " Anatoly Burakov
  2024-09-04 15:08   ` [PATCH v3 1/8] build: split dependencies into mandatory and optional Anatoly Burakov
@ 2024-09-04 15:08   ` Anatoly Burakov
  2024-09-04 15:08   ` [PATCH v3 3/8] devtools: add script to flag unneeded dependencies Anatoly Burakov
                     ` (8 subsequent siblings)
  10 siblings, 0 replies; 54+ messages in thread
From: Anatoly Burakov @ 2024-09-04 15:08 UTC (permalink / raw)
  To: dev

From: Bruce Richardson <bruce.richardson@intel.com>

As meson processes our DPDK source tree it manages dependencies
specified by each individual driver. To enable future analysis of the
dependency links between components, log the dependencies of each DPDK
component as it gets processed. This could potentially allow other tools
to automatically enable or disable components based on the desired end
components to be built, e.g. if the user requests net/ice, ensure that
common/iavf is also enabled in the drivers.

The output file produced is in "dot" or "graphviz" format, which allows
producing a graphical representation of the DPDK dependency tree if so
desired. For example: "dot -Tpng -O build/deps.dot" to produce the
image file "build/deps.dot.png".

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Acked-by: Konstantin Ananyev <konstantin.ananyev@huawei.com>
Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com>
---
 app/meson.build        |  8 ++++-
 buildtools/log-deps.py | 81 ++++++++++++++++++++++++++++++++++++++++++
 buildtools/meson.build |  2 ++
 drivers/meson.build    |  6 ++++
 examples/meson.build   |  8 ++++-
 lib/meson.build        |  5 +++
 6 files changed, 108 insertions(+), 2 deletions(-)
 create mode 100644 buildtools/log-deps.py

diff --git a/app/meson.build b/app/meson.build
index 1c61cd862c..55a1f076cd 100644
--- a/app/meson.build
+++ b/app/meson.build
@@ -75,8 +75,14 @@ foreach app:apps
         reason = 'explicitly disabled via build config'
     endif
 
+    app_name = 'dpdk-' + name
     if build
         subdir(name)
+        type_cmd = '--type=app'
+        run_command([log_deps_cmd, type_cmd, app_name, deps], check: false)
+        if optional_deps.length() > 0
+            run_command([log_deps_cmd, '--optional', type_cmd, app_name, optional_deps], check: false)
+        endif
         if not build and require_apps
             error('Cannot build explicitly requested app "@0@".\n'.format(name)
                   + '\tReason: ' + reason)
@@ -115,7 +121,7 @@ foreach app:apps
         link_libs = dpdk_static_libraries + dpdk_drivers
     endif
 
-    exec = executable('dpdk-' + name,
+    exec = executable(app_name,
             sources,
             c_args: cflags,
             link_args: ldflags,
diff --git a/buildtools/log-deps.py b/buildtools/log-deps.py
new file mode 100644
index 0000000000..e11a102242
--- /dev/null
+++ b/buildtools/log-deps.py
@@ -0,0 +1,81 @@
+#! /usr/bin/env python3
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright(c) 2024 Intel Corporation
+
+"""Utility script to build up a list of dependencies from meson."""
+
+import os
+import sys
+import argparse
+import typing as T
+
+
+def file_to_list(filename: str) -> T.List[str]:
+    """Read file into a list of strings."""
+    with open(filename, encoding="utf-8") as f:
+        return f.readlines()
+
+
+def list_to_file(filename: str, lines: T.List[str]):
+    """Write a list of strings out to a file."""
+    with open(filename, "w", encoding="utf-8") as f:
+        f.writelines(lines)
+
+
+def gen_deps(
+    component_type: str, optional: bool, component: str, deps: T.List[str]
+) -> str:
+    """Generate a dependency graph for meson."""
+    dep_list_str = '", "'.join(deps)
+    deps_str = "" if not deps else f' -> {{ "{dep_list_str}" }}'
+    # we define custom attributes for the nodes
+    attr_str = f'dpdk_componentType="{component_type}"'
+    if optional:
+        # we use a dotted line to represent optional dependencies
+        attr_str += ',style="dotted"'
+    return f'"{component}"{deps_str} [{attr_str}]\n'
+
+
+def _main():
+    depsfile = f'{os.environ["MESON_BUILD_ROOT"]}/deps.dot'
+
+    # to reset the deps file on each build, the script is called without any params
+    if len(sys.argv) == 1:
+        os.remove(depsfile)
+        sys.exit(0)
+
+    # we got arguments, parse them
+    parser = argparse.ArgumentParser(
+        description="Generate a dependency graph for meson."
+    )
+    # type is required
+    parser.add_argument(
+        "--type", required=True, help="Type of dependency (lib, examples, etc.)"
+    )
+    parser.add_argument(
+        "--optional", action="store_true", help="Whether the dependency is optional"
+    )
+    # component is required
+    parser.add_argument("component", help="The component to add to the graph")
+    parser.add_argument("deps", nargs="*", help="The dependencies of the component")
+
+    parsed = parser.parse_args()
+
+    try:
+        contents = file_to_list(depsfile)
+    except FileNotFoundError:
+        contents = ["digraph {\n", "}\n"]
+
+    c_type = parsed.type
+    optional = parsed.optional
+    component = parsed.component
+    deps = parsed.deps
+    contents[-1] = gen_deps(c_type, optional, component, deps)
+
+    contents.append("}\n")
+
+    list_to_file(depsfile, contents)
+
+
+if __name__ == "__main__":
+    _main()
diff --git a/buildtools/meson.build b/buildtools/meson.build
index 3adf34e1a8..e2ba9d0ad4 100644
--- a/buildtools/meson.build
+++ b/buildtools/meson.build
@@ -24,6 +24,8 @@ get_numa_count_cmd = py3 + files('get-numa-count.py')
 get_test_suites_cmd = py3 + files('get-test-suites.py')
 has_hugepages_cmd = py3 + files('has-hugepages.py')
 cmdline_gen_cmd = py3 + files('dpdk-cmdline-gen.py')
+log_deps_cmd = py3 + files('log-deps.py')
+run_command(log_deps_cmd, check: false)  # call with no parameters to reset the file
 
 # install any build tools that end-users might want also
 install_data([
diff --git a/drivers/meson.build b/drivers/meson.build
index b9a18a5986..32c9e3f88a 100644
--- a/drivers/meson.build
+++ b/drivers/meson.build
@@ -155,6 +155,12 @@ foreach subpath:subdirs
         if build
             # pull in driver directory which should update all the local variables
             subdir(drv_path)
+            type_cmd = '--type=drivers'
+            drv_name = class + '_' + name
+            run_command([log_deps_cmd, type_cmd, drv_name, deps], check: false)
+            if optional_deps.length() > 0
+                run_command([log_deps_cmd, '--optional', type_cmd, drv_name, optional_deps], check: false)
+            endif
 
             if dpdk_conf.get('RTE_IOVA_IN_MBUF') == 0 and require_iova_in_mbuf
                 build = false
diff --git a/examples/meson.build b/examples/meson.build
index 82151d09b4..1589a3057e 100644
--- a/examples/meson.build
+++ b/examples/meson.build
@@ -101,8 +101,14 @@ foreach example: examples
     optional_deps = []
     subdir(example)
 
+    example_name = 'dpdk-' + name
     if build
         dep_objs = ext_deps
+        type_cmd = '--type=examples'
+        run_command([log_deps_cmd, type_cmd, example_name, deps], check: false)
+        if optional_deps.length() > 0
+            run_command([log_deps_cmd, '--optional', type_cmd, example_name, optional_deps], check: false)
+        endif
         foreach d:deps + optional_deps
             var_name = get_option('default_library') + '_rte_' + d
             if not is_variable(var_name)
@@ -125,7 +131,7 @@ foreach example: examples
     if allow_experimental_apis
         cflags += '-DALLOW_EXPERIMENTAL_API'
     endif
-    executable('dpdk-' + name, sources,
+    executable(example_name, sources,
             include_directories: includes,
             link_whole: link_whole_libs,
             link_args: ldflags,
diff --git a/lib/meson.build b/lib/meson.build
index 7916deadd9..f2ac800f5a 100644
--- a/lib/meson.build
+++ b/lib/meson.build
@@ -161,6 +161,11 @@ foreach l:libraries
 
     if build
         subdir(l)
+        type_cmd = '--type=lib'
+        run_command([log_deps_cmd, type_cmd, l, deps], check: false)
+        if optional_deps.length() > 0
+            run_command([log_deps_cmd, '--optional', type_cmd, l, optional_deps], check: false)
+        endif
         if not build and require_libs
             error('Cannot build explicitly requested lib "@0@".\n'.format(name)
                     +'\tReason: ' + reason)
-- 
2.43.5


^ permalink raw reply	[flat|nested] 54+ messages in thread

* [PATCH v3 3/8] devtools: add script to flag unneeded dependencies
  2024-09-04 15:08 ` [PATCH v3 0/8] " Anatoly Burakov
  2024-09-04 15:08   ` [PATCH v3 1/8] build: split dependencies into mandatory and optional Anatoly Burakov
  2024-09-04 15:08   ` [PATCH v3 2/8] build: output a dependency log in build directory Anatoly Burakov
@ 2024-09-04 15:08   ` Anatoly Burakov
  2024-09-04 15:08   ` [PATCH v3 4/8] build: remove kvargs from driver class dependencies Anatoly Burakov
                     ` (7 subsequent siblings)
  10 siblings, 0 replies; 54+ messages in thread
From: Anatoly Burakov @ 2024-09-04 15:08 UTC (permalink / raw)
  To: dev

From: Bruce Richardson <bruce.richardson@intel.com>

While not a serious problem, DPDK components often list more
dependencies than are actually necessary to build, due to the use of
recursive dependencies. In extreme cases, such as with core libraries,
this can lead to longer configuration times due to meson having to
deduplicate long lists of dependencies. Therefore we can add a script to
identify when a component has got unnecessary dependencies listed.

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
---
 devtools/find-duplicate-deps.py | 53 +++++++++++++++++++++++++++++++++
 1 file changed, 53 insertions(+)
 create mode 100755 devtools/find-duplicate-deps.py

diff --git a/devtools/find-duplicate-deps.py b/devtools/find-duplicate-deps.py
new file mode 100755
index 0000000000..b1eacf21ce
--- /dev/null
+++ b/devtools/find-duplicate-deps.py
@@ -0,0 +1,53 @@
+#! /usr/bin/env python3
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright(c) 2024 Intel Corporation
+
+"""Identify any superfluous dependencies listed in DPDK deps graph."""
+
+import sys
+
+all_deps = {}
+
+
+class dep:
+    """Holds a component and its dependencies."""
+
+    def __init__(self, name, dep_names):
+        """Create and process a component and its deps."""
+        self.name = name.strip('" ')
+        self.base_deps = [all_deps[dn.strip('" ')] for dn in dep_names]
+        self.recursive_deps = []
+        for d in self.base_deps:
+            self.recursive_deps.extend(d.base_deps)
+            self.recursive_deps.extend(d.recursive_deps)
+        self.extra_deps = []
+        for d in self.base_deps:
+            if d in self.recursive_deps:
+                self.extra_deps.append(d.name)
+        if self.extra_deps:
+            print(f'{self.name}: extra deps {self.extra_deps}')
+
+    def dict_add(self, d):
+        """Add this object to a dictionary by name."""
+        d[self.name] = self
+
+
+def main(argv):
+    """Read the dependency tree from a dot file and process it."""
+    if len(argv) != 2:
+        print(f'Usage: {argv[0]} <build-directory>/deps.dot', file=sys.stderr)
+        sys.exit(1)
+
+    with open(argv[1]) as f:
+        for ln in f.readlines():
+            ln = ln.strip()
+            if '->' in ln:
+                name, deps = ln.split('->')
+                deps = deps.strip(' {}')
+                dep(name, deps.split(',')).dict_add(all_deps)
+            elif ln.startswith('"') and ln.endswith('"'):
+                dep(ln.strip('"'), []).dict_add(all_deps)
+
+
+if __name__ == '__main__':
+    main(sys.argv)
-- 
2.43.5


^ permalink raw reply	[flat|nested] 54+ messages in thread

* [PATCH v3 4/8] build: remove kvargs from driver class dependencies
  2024-09-04 15:08 ` [PATCH v3 0/8] " Anatoly Burakov
                     ` (2 preceding siblings ...)
  2024-09-04 15:08   ` [PATCH v3 3/8] devtools: add script to flag unneeded dependencies Anatoly Burakov
@ 2024-09-04 15:08   ` Anatoly Burakov
  2024-09-04 15:08   ` [PATCH v3 5/8] build: reduce library dependencies Anatoly Burakov
                     ` (6 subsequent siblings)
  10 siblings, 0 replies; 54+ messages in thread
From: Anatoly Burakov @ 2024-09-04 15:08 UTC (permalink / raw)
  To: dev

From: Bruce Richardson <bruce.richardson@intel.com>

The kvargs library is used by EAL, and therefore is implicitly a
dependency of every DPDK driver. Remove it from the minimum set of
dependencies for each driver class as it's unnecessary to call it out
there.

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
---
 drivers/event/meson.build | 2 +-
 drivers/net/meson.build   | 2 +-
 drivers/regex/meson.build | 2 +-
 drivers/vdpa/meson.build  | 2 +-
 4 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/event/meson.build b/drivers/event/meson.build
index d6706b57f7..2708833adf 100644
--- a/drivers/event/meson.build
+++ b/drivers/event/meson.build
@@ -19,4 +19,4 @@ if not (toolchain == 'gcc' and cc.version().version_compare('<4.8.6') and
         dpdk_conf.has('RTE_ARCH_ARM64'))
     drivers += 'octeontx'
 endif
-std_deps = ['eventdev', 'kvargs']
+std_deps = ['eventdev']
diff --git a/drivers/net/meson.build b/drivers/net/meson.build
index fb6d34b782..ebd12364df 100644
--- a/drivers/net/meson.build
+++ b/drivers/net/meson.build
@@ -63,6 +63,6 @@ drivers = [
         'virtio',
         'vmxnet3',
 ]
-std_deps = ['ethdev', 'kvargs'] # 'ethdev' also pulls in mbuf, net, eal etc
+std_deps = ['ethdev']           # 'ethdev' also pulls in mbuf, net, eal etc
 std_deps += ['bus_pci']         # very many PMDs depend on PCI, so make std
 std_deps += ['bus_vdev']        # same with vdev bus
diff --git a/drivers/regex/meson.build b/drivers/regex/meson.build
index ff2a8fea89..10192e7c77 100644
--- a/drivers/regex/meson.build
+++ b/drivers/regex/meson.build
@@ -5,4 +5,4 @@ drivers = [
         'mlx5',
         'cn9k',
 ]
-std_deps = ['ethdev', 'kvargs', 'regexdev'] # 'ethdev' also pulls in mbuf, net, eal etc
+std_deps = ['ethdev', 'regexdev'] # 'ethdev' also pulls in mbuf, net, eal etc
diff --git a/drivers/vdpa/meson.build b/drivers/vdpa/meson.build
index 896e8e0304..e01c277b9e 100644
--- a/drivers/vdpa/meson.build
+++ b/drivers/vdpa/meson.build
@@ -11,5 +11,5 @@ drivers = [
         'nfp',
         'sfc',
 ]
-std_deps = ['bus_pci', 'kvargs']
+std_deps = ['bus_pci']
 std_deps += ['vhost']
-- 
2.43.5


^ permalink raw reply	[flat|nested] 54+ messages in thread

* [PATCH v3 5/8] build: reduce library dependencies
  2024-09-04 15:08 ` [PATCH v3 0/8] " Anatoly Burakov
                     ` (3 preceding siblings ...)
  2024-09-04 15:08   ` [PATCH v3 4/8] build: remove kvargs from driver class dependencies Anatoly Burakov
@ 2024-09-04 15:08   ` Anatoly Burakov
  2024-09-04 15:08   ` [PATCH v3 6/8] build: reduce driver dependencies Anatoly Burakov
                     ` (5 subsequent siblings)
  10 siblings, 0 replies; 54+ messages in thread
From: Anatoly Burakov @ 2024-09-04 15:08 UTC (permalink / raw)
  To: dev, Chengwen Feng, Nicolas Chautru, Konstantin Ananyev,
	Fan Zhang, Ashish Gupta, Akhil Goyal, Mattias Rönnblom,
	David Hunt, Kevin Laatz, Bruce Richardson, Byron Marohn,
	Yipeng Wang, Thomas Monjalon, Ferruh Yigit, Andrew Rybchenko,
	Jerin Jacob, Vladimir Medvedkin, Elena Agostini, Kiran Kumar K,
	Nithin Dabilpuram, Zhirun Yan, Jiayu Hu, Sameh Gobriel,
	Reshma Pattan, Morten Brørup, Srikanth Yalavarthi,
	Pavan Nikhilesh, Stephen Hemminger, Anoob Joseph,
	Volodymyr Fialko, Cristian Dumitrescu, Sivaprasad Tummala,
	Sachin Saxena, Hemant Agrawal, Honnappa Nagarahalli, Ori Kam,
	Maxime Coquelin, Chenbo Xia

From: Bruce Richardson <bruce.richardson@intel.com>

Rather than having each library depend up on EAL + any extra libs, we
can take advantage of recursive dependency support in meson and
just assign the dependencies of each directory directly, rather than
appending to the array. For libraries which only depend upon EAL, keep
that as a default, but for libraries which depend upon even a single
extra lib, that EAL dependency is unnecessary.

Going further, we can identify using the find_duplicate_deps.py script
any unnecessary deps in each library's list, and remove them to slim the
dependency tree down.

Reducing number of dependencies means that meson
takes less time processing and deduplicating the dependency tree for
each component, and also shrinks the dependency graph for DPDK itself.

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
---
 lib/argparse/meson.build     | 2 +-
 lib/bbdev/meson.build        | 2 +-
 lib/bitratestats/meson.build | 2 +-
 lib/bpf/meson.build          | 2 +-
 lib/cmdline/meson.build      | 2 +-
 lib/compressdev/meson.build  | 2 +-
 lib/cryptodev/meson.build    | 2 +-
 lib/dispatcher/meson.build   | 2 +-
 lib/distributor/meson.build  | 2 +-
 lib/dmadev/meson.build       | 2 --
 lib/eal/meson.build          | 5 +----
 lib/efd/meson.build          | 2 +-
 lib/ethdev/meson.build       | 2 +-
 lib/eventdev/meson.build     | 3 +--
 lib/fib/meson.build          | 2 +-
 lib/gpudev/meson.build       | 2 +-
 lib/graph/meson.build        | 2 +-
 lib/gro/meson.build          | 2 +-
 lib/gso/meson.build          | 2 +-
 lib/hash/meson.build         | 4 +---
 lib/ip_frag/meson.build      | 2 +-
 lib/ipsec/meson.build        | 2 +-
 lib/kvargs/meson.build       | 2 +-
 lib/latencystats/meson.build | 2 +-
 lib/lpm/meson.build          | 3 +--
 lib/mbuf/meson.build         | 2 +-
 lib/member/meson.build       | 2 +-
 lib/mempool/meson.build      | 2 +-
 lib/metrics/meson.build      | 2 +-
 lib/mldev/meson.build        | 2 +-
 lib/net/meson.build          | 2 +-
 lib/node/meson.build         | 2 +-
 lib/pcapng/meson.build       | 2 +-
 lib/pdcp/meson.build         | 2 +-
 lib/pdump/meson.build        | 2 +-
 lib/pipeline/meson.build     | 2 +-
 lib/port/meson.build         | 2 +-
 lib/power/meson.build        | 2 +-
 lib/rawdev/meson.build       | 2 --
 lib/rcu/meson.build          | 2 +-
 lib/regexdev/meson.build     | 2 +-
 lib/reorder/meson.build      | 2 +-
 lib/rib/meson.build          | 2 +-
 lib/ring/meson.build         | 1 -
 lib/sched/meson.build        | 2 +-
 lib/security/meson.build     | 2 +-
 lib/table/meson.build        | 2 +-
 lib/telemetry/meson.build    | 2 +-
 lib/vhost/meson.build        | 2 +-
 49 files changed, 46 insertions(+), 58 deletions(-)

diff --git a/lib/argparse/meson.build b/lib/argparse/meson.build
index 8ab4c408ee..5d602c1f2a 100644
--- a/lib/argparse/meson.build
+++ b/lib/argparse/meson.build
@@ -10,4 +10,4 @@ endif
 sources = files('rte_argparse.c')
 headers = files('rte_argparse.h')
 
-deps += ['log']
+deps = ['log']
diff --git a/lib/bbdev/meson.build b/lib/bbdev/meson.build
index 07685e7578..2e68aa7873 100644
--- a/lib/bbdev/meson.build
+++ b/lib/bbdev/meson.build
@@ -11,4 +11,4 @@ sources = files('rte_bbdev.c')
 headers = files('rte_bbdev.h',
         'rte_bbdev_pmd.h',
         'rte_bbdev_op.h')
-deps += ['mbuf']
+deps = ['mbuf']
diff --git a/lib/bitratestats/meson.build b/lib/bitratestats/meson.build
index ede7e0a579..8defcd53bf 100644
--- a/lib/bitratestats/meson.build
+++ b/lib/bitratestats/meson.build
@@ -3,4 +3,4 @@
 
 sources = files('rte_bitrate.c')
 headers = files('rte_bitrate.h')
-deps += ['ethdev', 'metrics']
+deps = ['metrics']
diff --git a/lib/bpf/meson.build b/lib/bpf/meson.build
index aa258a9061..82127bc657 100644
--- a/lib/bpf/meson.build
+++ b/lib/bpf/meson.build
@@ -31,7 +31,7 @@ headers = files('bpf_def.h',
         'rte_bpf.h',
         'rte_bpf_ethdev.h')
 
-deps += ['mbuf', 'net', 'ethdev']
+deps = ['ethdev']
 
 dep = dependency('libelf', required: false, method: 'pkg-config')
 if dep.found()
diff --git a/lib/cmdline/meson.build b/lib/cmdline/meson.build
index 63fb69100d..4451f3da29 100644
--- a/lib/cmdline/meson.build
+++ b/lib/cmdline/meson.build
@@ -31,4 +31,4 @@ else
     sources += files('cmdline_os_unix.c')
 endif
 
-deps += ['net']
+deps = ['net']
diff --git a/lib/compressdev/meson.build b/lib/compressdev/meson.build
index c80295dc0d..4b86955baf 100644
--- a/lib/compressdev/meson.build
+++ b/lib/compressdev/meson.build
@@ -16,4 +16,4 @@ driver_sdk_headers = files(
         'rte_compressdev_pmd.h',
         'rte_compressdev_internal.h',
     )
-deps += ['kvargs', 'mbuf']
+deps = ['mbuf']
diff --git a/lib/cryptodev/meson.build b/lib/cryptodev/meson.build
index 4734acf321..74e42ac700 100644
--- a/lib/cryptodev/meson.build
+++ b/lib/cryptodev/meson.build
@@ -20,4 +20,4 @@ driver_sdk_headers += files(
         'cryptodev_pmd.h',
 )
 
-deps += ['kvargs', 'mbuf', 'rcu', 'telemetry']
+deps = ['mbuf', 'rcu']
diff --git a/lib/dispatcher/meson.build b/lib/dispatcher/meson.build
index ffaef26a6d..4dc1759951 100644
--- a/lib/dispatcher/meson.build
+++ b/lib/dispatcher/meson.build
@@ -10,4 +10,4 @@ endif
 sources = files('rte_dispatcher.c')
 headers = files('rte_dispatcher.h')
 
-deps += ['eventdev']
+deps = ['eventdev']
diff --git a/lib/distributor/meson.build b/lib/distributor/meson.build
index 24988c5827..ba43273bc3 100644
--- a/lib/distributor/meson.build
+++ b/lib/distributor/meson.build
@@ -14,4 +14,4 @@ else
     sources += files('rte_distributor_match_generic.c')
 endif
 headers = files('rte_distributor.h')
-deps += ['mbuf']
+deps = ['mbuf']
diff --git a/lib/dmadev/meson.build b/lib/dmadev/meson.build
index e66dcb66b0..70b375f1cb 100644
--- a/lib/dmadev/meson.build
+++ b/lib/dmadev/meson.build
@@ -11,5 +11,3 @@ sources = files('rte_dmadev.c', 'rte_dmadev_trace_points.c')
 headers = files('rte_dmadev.h')
 indirect_headers += files('rte_dmadev_core.h', 'rte_dmadev_trace_fp.h')
 driver_sdk_headers += files('rte_dmadev_pmd.h')
-
-deps += ['telemetry']
diff --git a/lib/eal/meson.build b/lib/eal/meson.build
index e1d6c4cf17..d25443d097 100644
--- a/lib/eal/meson.build
+++ b/lib/eal/meson.build
@@ -14,10 +14,7 @@ subdir(exec_env)
 
 subdir(arch_subdir)
 
-deps += ['log', 'kvargs']
-if not is_windows
-    deps += ['telemetry']
-endif
+deps = ['kvargs', 'telemetry']
 if dpdk_conf.has('RTE_USE_LIBBSD')
     ext_deps += libbsd
 endif
diff --git a/lib/efd/meson.build b/lib/efd/meson.build
index 343f14e1f3..da0ee7f803 100644
--- a/lib/efd/meson.build
+++ b/lib/efd/meson.build
@@ -9,4 +9,4 @@ endif
 
 sources = files('rte_efd.c')
 headers = files('rte_efd.h')
-deps += ['ring', 'hash']
+deps = ['hash']
diff --git a/lib/ethdev/meson.build b/lib/ethdev/meson.build
index f1d2586591..fc53a9c309 100644
--- a/lib/ethdev/meson.build
+++ b/lib/ethdev/meson.build
@@ -53,7 +53,7 @@ if is_linux
     )
 endif
 
-deps += ['net', 'kvargs', 'meter', 'telemetry']
+deps = ['net', 'meter']
 
 if is_freebsd
     annotate_locks = false
diff --git a/lib/eventdev/meson.build b/lib/eventdev/meson.build
index a04bb86f0f..237df998ce 100644
--- a/lib/eventdev/meson.build
+++ b/lib/eventdev/meson.build
@@ -38,5 +38,4 @@ driver_sdk_headers += files(
         'event_timer_adapter_pmd.h',
 )
 
-deps += ['ring', 'ethdev', 'hash', 'mempool', 'mbuf', 'timer', 'cryptodev', 'dmadev']
-deps += ['telemetry']
+deps = ['ethdev', 'hash', 'timer', 'cryptodev', 'dmadev']
diff --git a/lib/fib/meson.build b/lib/fib/meson.build
index 6795f41a0a..9ba8e50fe0 100644
--- a/lib/fib/meson.build
+++ b/lib/fib/meson.build
@@ -10,7 +10,7 @@ endif
 
 sources = files('rte_fib.c', 'rte_fib6.c', 'dir24_8.c', 'trie.c')
 headers = files('rte_fib.h', 'rte_fib6.h')
-deps += ['rib']
+deps = ['rib']
 
 # compile AVX512 version if:
 # we are building 64-bit binary AND binutils can generate proper code
diff --git a/lib/gpudev/meson.build b/lib/gpudev/meson.build
index d21fadc052..5d883b85a1 100644
--- a/lib/gpudev/meson.build
+++ b/lib/gpudev/meson.build
@@ -13,4 +13,4 @@ sources = files(
         'gpudev.c',
 )
 
-deps += ['mbuf']
+deps = ['mbuf']
diff --git a/lib/graph/meson.build b/lib/graph/meson.build
index 0cb15442ab..f58f107d52 100644
--- a/lib/graph/meson.build
+++ b/lib/graph/meson.build
@@ -25,4 +25,4 @@ indirect_headers += files(
         'rte_graph_worker_common.h',
 )
 
-deps += ['eal', 'pcapng', 'mempool', 'ring']
+deps = ['pcapng']
diff --git a/lib/gro/meson.build b/lib/gro/meson.build
index dbce05220d..c6de6ceebc 100644
--- a/lib/gro/meson.build
+++ b/lib/gro/meson.build
@@ -10,4 +10,4 @@ sources = files(
         'gro_vxlan_udp4.c',
 )
 headers = files('rte_gro.h')
-deps += ['ethdev']
+deps = ['ethdev']
diff --git a/lib/gso/meson.build b/lib/gso/meson.build
index 622411df8f..bc99109933 100644
--- a/lib/gso/meson.build
+++ b/lib/gso/meson.build
@@ -10,4 +10,4 @@ sources = files(
         'rte_gso.c',
 )
 headers = files('rte_gso.h')
-deps += ['ethdev']
+deps = ['ethdev']
diff --git a/lib/hash/meson.build b/lib/hash/meson.build
index 277eb9fa93..74b81397f9 100644
--- a/lib/hash/meson.build
+++ b/lib/hash/meson.build
@@ -25,6 +25,4 @@ sources = files(
         'rte_thash_gfni.c',
 )
 
-deps += ['net']
-deps += ['ring']
-deps += ['rcu']
+deps = ['net', 'rcu']
diff --git a/lib/ip_frag/meson.build b/lib/ip_frag/meson.build
index ea2de09f75..cacf391460 100644
--- a/lib/ip_frag/meson.build
+++ b/lib/ip_frag/meson.build
@@ -10,4 +10,4 @@ sources = files(
         'ip_frag_internal.c',
 )
 headers = files('rte_ip_frag.h')
-deps += ['ethdev', 'hash']
+deps = ['ethdev', 'hash']
diff --git a/lib/ipsec/meson.build b/lib/ipsec/meson.build
index 5c5a4aae78..7abbac5b6a 100644
--- a/lib/ipsec/meson.build
+++ b/lib/ipsec/meson.build
@@ -14,6 +14,6 @@ sources = files('esp_inb.c', 'esp_outb.c',
 headers = files('rte_ipsec.h', 'rte_ipsec_sa.h', 'rte_ipsec_sad.h')
 indirect_headers += files('rte_ipsec_group.h')
 
-deps += ['mbuf', 'net', 'cryptodev', 'security', 'hash', 'telemetry']
+deps = ['security', 'hash']
 
 annotate_locks = false
diff --git a/lib/kvargs/meson.build b/lib/kvargs/meson.build
index 7eae744a8f..7282b0ff8d 100644
--- a/lib/kvargs/meson.build
+++ b/lib/kvargs/meson.build
@@ -1,6 +1,6 @@
 # SPDX-License-Identifier: BSD-3-Clause
 # Copyright(c) 2017 Intel Corporation
 
-deps += 'log'
+deps = ['log']
 sources = files('rte_kvargs.c')
 headers = files('rte_kvargs.h')
diff --git a/lib/latencystats/meson.build b/lib/latencystats/meson.build
index 286558dd79..f8b9a8aeec 100644
--- a/lib/latencystats/meson.build
+++ b/lib/latencystats/meson.build
@@ -3,4 +3,4 @@
 
 sources = files('rte_latencystats.c')
 headers = files('rte_latencystats.h')
-deps += ['metrics', 'ethdev']
+deps = ['metrics']
diff --git a/lib/lpm/meson.build b/lib/lpm/meson.build
index ae30f80b69..5031b085c4 100644
--- a/lib/lpm/meson.build
+++ b/lib/lpm/meson.build
@@ -18,5 +18,4 @@ indirect_headers += files(
         'rte_lpm_sse.h',
         'rte_lpm_sve.h',
 )
-deps += ['hash']
-deps += ['rcu']
+deps = ['hash']
diff --git a/lib/mbuf/meson.build b/lib/mbuf/meson.build
index 2cee9057a5..22f5a3038b 100644
--- a/lib/mbuf/meson.build
+++ b/lib/mbuf/meson.build
@@ -20,4 +20,4 @@ headers = files(
         'rte_mbuf_pool_ops.h',
         'rte_mbuf_dyn.h',
 )
-deps += ['mempool']
+deps = ['mempool']
diff --git a/lib/member/meson.build b/lib/member/meson.build
index 02ef59795e..b951aa566e 100644
--- a/lib/member/meson.build
+++ b/lib/member/meson.build
@@ -16,7 +16,7 @@ sources = files(
         'rte_member_vbf.c',
 )
 
-deps += ['hash', 'ring']
+deps = ['hash']
 
 # compile AVX512 version if:
 if dpdk_conf.has('RTE_ARCH_X86_64') and binutils_ok
diff --git a/lib/mempool/meson.build b/lib/mempool/meson.build
index acce66cb97..25b26a50fa 100644
--- a/lib/mempool/meson.build
+++ b/lib/mempool/meson.build
@@ -25,4 +25,4 @@ headers = files(
         'rte_mempool.h',
         'rte_mempool_trace_fp.h',
 )
-deps += ['ring', 'telemetry']
+deps = ['ring']
diff --git a/lib/metrics/meson.build b/lib/metrics/meson.build
index 8c1c4b4b49..5165967646 100644
--- a/lib/metrics/meson.build
+++ b/lib/metrics/meson.build
@@ -8,4 +8,4 @@ if dpdk_conf.has('RTE_HAS_JANSSON')
     ext_deps += jansson_dep
 endif
 
-deps += ['ethdev', 'telemetry']
+deps = ['ethdev']
diff --git a/lib/mldev/meson.build b/lib/mldev/meson.build
index 2c933baad6..6069fff1f0 100644
--- a/lib/mldev/meson.build
+++ b/lib/mldev/meson.build
@@ -41,7 +41,7 @@ driver_sdk_headers += files(
         'mldev_utils.h',
 )
 
-deps += ['mempool', 'mbuf']
+deps = ['mbuf']
 
 if get_option('buildtype').contains('debug')
         cflags += [ '-DRTE_LIBRTE_ML_DEV_DEBUG' ]
diff --git a/lib/net/meson.build b/lib/net/meson.build
index 0b69138949..2cb511f046 100644
--- a/lib/net/meson.build
+++ b/lib/net/meson.build
@@ -34,7 +34,7 @@ sources = files(
         'rte_net.c',
         'rte_net_crc.c',
 )
-deps += ['mbuf']
+deps = ['mbuf']
 
 if dpdk_conf.has('RTE_ARCH_X86_64')
     net_crc_sse42_cpu_support = (cc.get_define('__PCLMUL__', args: machine_args) != '')
diff --git a/lib/node/meson.build b/lib/node/meson.build
index 0bed97a96c..368ce1dc63 100644
--- a/lib/node/meson.build
+++ b/lib/node/meson.build
@@ -34,4 +34,4 @@ headers = files(
 
 # Strict-aliasing rules are violated by uint8_t[] to context size casts.
 cflags += '-fno-strict-aliasing'
-deps += ['graph', 'mbuf', 'lpm', 'ethdev', 'mempool', 'cryptodev', 'ip_frag']
+deps = ['graph', 'lpm', 'cryptodev', 'ip_frag']
diff --git a/lib/pcapng/meson.build b/lib/pcapng/meson.build
index 4549925d41..e8f059a9b0 100644
--- a/lib/pcapng/meson.build
+++ b/lib/pcapng/meson.build
@@ -4,4 +4,4 @@
 sources = files('rte_pcapng.c')
 headers = files('rte_pcapng.h')
 
-deps += ['ethdev']
+deps = ['ethdev']
diff --git a/lib/pdcp/meson.build b/lib/pdcp/meson.build
index f4f9246bcb..f6f3d6237a 100644
--- a/lib/pdcp/meson.build
+++ b/lib/pdcp/meson.build
@@ -18,4 +18,4 @@ sources = files(
 headers = files('rte_pdcp.h')
 indirect_headers += files('rte_pdcp_group.h')
 
-deps += ['mbuf', 'net', 'cryptodev', 'security', 'reorder']
+deps = ['security', 'reorder']
diff --git a/lib/pdump/meson.build b/lib/pdump/meson.build
index da8d51b616..23d7db794b 100644
--- a/lib/pdump/meson.build
+++ b/lib/pdump/meson.build
@@ -9,4 +9,4 @@ endif
 
 sources = files('rte_pdump.c')
 headers = files('rte_pdump.h')
-deps += ['ethdev', 'bpf', 'pcapng']
+deps = ['bpf', 'pcapng']
diff --git a/lib/pipeline/meson.build b/lib/pipeline/meson.build
index fd5e0dc6bb..f08eca70d1 100644
--- a/lib/pipeline/meson.build
+++ b/lib/pipeline/meson.build
@@ -25,4 +25,4 @@ headers = files(
         'rte_swx_extern.h',
         'rte_swx_ctl.h',
 )
-deps += ['port', 'table', 'meter', 'sched', 'cryptodev', 'ipsec']
+deps = ['table', 'ipsec']
diff --git a/lib/port/meson.build b/lib/port/meson.build
index b597772872..0524c3c049 100644
--- a/lib/port/meson.build
+++ b/lib/port/meson.build
@@ -40,7 +40,7 @@ headers = files(
         'rte_swx_port_ring.h',
         'rte_swx_port_source_sink.h',
 )
-deps += ['ethdev', 'sched', 'ip_frag', 'cryptodev', 'eventdev']
+deps = ['sched', 'ip_frag', 'eventdev']
 
 if dpdk_conf.has('RTE_HAS_LIBPCAP')
     dpdk_conf.set('RTE_PORT_PCAP', 1)
diff --git a/lib/power/meson.build b/lib/power/meson.build
index b8426589b2..190bbf90a2 100644
--- a/lib/power/meson.build
+++ b/lib/power/meson.build
@@ -33,4 +33,4 @@ headers = files(
 if cc.has_argument('-Wno-cast-qual')
     cflags += '-Wno-cast-qual'
 endif
-deps += ['timer', 'ethdev']
+deps = ['timer', 'ethdev']
diff --git a/lib/rawdev/meson.build b/lib/rawdev/meson.build
index 7dfc3d5cf9..8841f003d7 100644
--- a/lib/rawdev/meson.build
+++ b/lib/rawdev/meson.build
@@ -9,5 +9,3 @@ endif
 
 sources = files('rte_rawdev.c')
 headers = files('rte_rawdev.h', 'rte_rawdev_pmd.h')
-
-deps += ['telemetry']
diff --git a/lib/rcu/meson.build b/lib/rcu/meson.build
index 71143f5210..b78f46fad7 100644
--- a/lib/rcu/meson.build
+++ b/lib/rcu/meson.build
@@ -10,4 +10,4 @@ endif
 sources = files('rte_rcu_qsbr.c')
 headers = files('rte_rcu_qsbr.h')
 
-deps += ['ring']
+deps = ['ring']
diff --git a/lib/regexdev/meson.build b/lib/regexdev/meson.build
index 426e764ece..3e20fa387d 100644
--- a/lib/regexdev/meson.build
+++ b/lib/regexdev/meson.build
@@ -10,4 +10,4 @@ endif
 sources = files('rte_regexdev.c')
 headers = files('rte_regexdev.h', 'rte_regexdev_driver.h')
 indirect_headers += files('rte_regexdev_core.h')
-deps += ['mbuf']
+deps = ['mbuf']
diff --git a/lib/reorder/meson.build b/lib/reorder/meson.build
index 03aed53d90..1e088a7d97 100644
--- a/lib/reorder/meson.build
+++ b/lib/reorder/meson.build
@@ -3,4 +3,4 @@
 
 sources = files('rte_reorder.c')
 headers = files('rte_reorder.h')
-deps += ['mbuf']
+deps = ['mbuf']
diff --git a/lib/rib/meson.build b/lib/rib/meson.build
index 7bacbb4535..2085beb444 100644
--- a/lib/rib/meson.build
+++ b/lib/rib/meson.build
@@ -4,4 +4,4 @@
 
 sources = files('rte_rib.c', 'rte_rib6.c')
 headers = files('rte_rib.h', 'rte_rib6.h')
-deps += ['mempool']
+deps = ['mempool']
diff --git a/lib/ring/meson.build b/lib/ring/meson.build
index 7fca958ed7..c20685c689 100644
--- a/lib/ring/meson.build
+++ b/lib/ring/meson.build
@@ -18,4 +18,3 @@ indirect_headers += files (
         'rte_ring_rts.h',
         'rte_ring_rts_elem_pvt.h',
 )
-deps += ['telemetry']
diff --git a/lib/sched/meson.build b/lib/sched/meson.build
index df75db51ed..7ca8ec09df 100644
--- a/lib/sched/meson.build
+++ b/lib/sched/meson.build
@@ -15,4 +15,4 @@ headers = files(
         'rte_sched_common.h',
         'rte_pie.h',
 )
-deps += ['mbuf', 'meter']
+deps = ['mbuf', 'meter']
diff --git a/lib/security/meson.build b/lib/security/meson.build
index 1034a7a299..e4545a8c72 100644
--- a/lib/security/meson.build
+++ b/lib/security/meson.build
@@ -3,4 +3,4 @@
 
 sources = files('rte_security.c')
 headers = files('rte_security.h', 'rte_security_driver.h')
-deps += ['mempool', 'cryptodev', 'net']
+deps = ['cryptodev', 'net']
diff --git a/lib/table/meson.build b/lib/table/meson.build
index 9b3d9ac759..78d7e87eab 100644
--- a/lib/table/meson.build
+++ b/lib/table/meson.build
@@ -39,7 +39,7 @@ headers = files(
         'rte_table_lpm_ipv6.h',
         'rte_table_stub.h',
 )
-deps += ['mbuf', 'port', 'lpm', 'hash', 'acl']
+deps = ['port', 'lpm', 'acl']
 
 indirect_headers += files(
         'rte_lru_arm64.h',
diff --git a/lib/telemetry/meson.build b/lib/telemetry/meson.build
index 489d000047..3e3a2cfc32 100644
--- a/lib/telemetry/meson.build
+++ b/lib/telemetry/meson.build
@@ -1,7 +1,7 @@
 # SPDX-License-Identifier: BSD-3-Clause
 # Copyright(c) 2018 Intel Corporation
 
-deps += 'log'
+deps = ['log']
 sources = files('telemetry.c', 'telemetry_data.c', 'telemetry_legacy.c')
 headers = files('rte_telemetry.h')
 includes += include_directories('../metrics')
diff --git a/lib/vhost/meson.build b/lib/vhost/meson.build
index 41b622a9be..51bbd87397 100644
--- a/lib/vhost/meson.build
+++ b/lib/vhost/meson.build
@@ -42,4 +42,4 @@ headers = files(
 driver_sdk_headers = files(
         'vdpa_driver.h',
 )
-deps += ['ethdev', 'cryptodev', 'hash', 'pci', 'dmadev']
+deps = ['ethdev', 'cryptodev', 'hash', 'pci', 'dmadev']
-- 
2.43.5


^ permalink raw reply	[flat|nested] 54+ messages in thread

* [PATCH v3 6/8] build: reduce driver dependencies
  2024-09-04 15:08 ` [PATCH v3 0/8] " Anatoly Burakov
                     ` (4 preceding siblings ...)
  2024-09-04 15:08   ` [PATCH v3 5/8] build: reduce library dependencies Anatoly Burakov
@ 2024-09-04 15:08   ` Anatoly Burakov
  2024-09-04 15:08   ` [PATCH v3 7/8] build: reduce app dependencies Anatoly Burakov
                     ` (4 subsequent siblings)
  10 siblings, 0 replies; 54+ messages in thread
From: Anatoly Burakov @ 2024-09-04 15:08 UTC (permalink / raw)
  To: dev, Nicolas Chautru, Gagandeep Singh, Hemant Agrawal,
	Parav Pandit, Xueming Li, Sachin Saxena, Rosen Xu, Chenbo Xia,
	Nipun Gupta, Tomasz Duszynski, Chengwen Feng, Nithin Dabilpuram,
	Kiran Kumar K, Sunil Kumar Kori, Satha Rao, Harman Kalra,
	Anoob Joseph, Jingjing Wu, Dariusz Sosnowski,
	Viacheslav Ovsiienko, Bing Zhao, Ori Kam, Suanming Mou,
	Matan Azrad, Fan Zhang, Ashish Gupta, Nagadheeraj Rottela,
	Ajit Khaparde, Raveendra Padasalagi, Vikas Gupta, Ankur Dwivedi,
	Tejasree Kondoj, Kai Ji, Pablo de Lara, Srikanth Jampala,
	Vamsi Attunuru, Gowrishankar Muthukrishnan, Vidya Sagar Velumuri,
	Kevin Laatz, Bruce Richardson, Pavan Nikhilesh, Shijith Thotton,
	Abdullah Sevincer, Jerin Jacob, Harry van Haaren,
	Ashwin Sekhar T K, Long Li, Wei Hu, Andrew Rybchenko,
	Cristian Dumitrescu, Jakub Palider, Vijay Kumar Srivastava

From: Bruce Richardson <bruce.richardson@intel.com>

Remove any unnecessary dependencies from the driver dependency lists.
This will give each driver a near-minimum set of required dependencies.

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
---
 drivers/baseband/fpga_5gnr_fec/meson.build | 2 +-
 drivers/baseband/fpga_lte_fec/meson.build  | 2 +-
 drivers/baseband/la12xx/meson.build        | 2 +-
 drivers/baseband/null/meson.build          | 2 +-
 drivers/baseband/turbo_sw/meson.build      | 2 +-
 drivers/bus/auxiliary/meson.build          | 2 --
 drivers/bus/dpaa/meson.build               | 2 +-
 drivers/bus/fslmc/meson.build              | 2 +-
 drivers/bus/ifpga/meson.build              | 2 +-
 drivers/bus/pci/meson.build                | 4 +---
 drivers/bus/platform/meson.build           | 1 -
 drivers/bus/uacce/meson.build              | 2 --
 drivers/bus/vdev/meson.build               | 2 --
 drivers/common/cnxk/meson.build            | 4 ++--
 drivers/common/cpt/meson.build             | 2 +-
 drivers/common/idpf/meson.build            | 2 +-
 drivers/common/mlx5/meson.build            | 2 +-
 drivers/compress/mlx5/meson.build          | 2 +-
 drivers/compress/nitrox/meson.build        | 2 +-
 drivers/compress/octeontx/meson.build      | 2 +-
 drivers/crypto/bcmfs/meson.build           | 2 +-
 drivers/crypto/cnxk/meson.build            | 2 +-
 drivers/crypto/dpaa_sec/meson.build        | 2 +-
 drivers/crypto/ipsec_mb/meson.build        | 2 +-
 drivers/crypto/mlx5/meson.build            | 2 +-
 drivers/crypto/nitrox/meson.build          | 2 +-
 drivers/dma/cnxk/meson.build               | 2 +-
 drivers/dma/dpaa/meson.build               | 2 +-
 drivers/dma/dpaa2/meson.build              | 2 +-
 drivers/dma/odm/meson.build                | 2 +-
 drivers/dma/skeleton/meson.build           | 2 +-
 drivers/event/cnxk/meson.build             | 2 +-
 drivers/event/dlb2/meson.build             | 2 +-
 drivers/event/dpaa2/meson.build            | 2 +-
 drivers/event/octeontx/meson.build         | 3 +--
 drivers/event/sw/meson.build               | 2 +-
 drivers/mempool/cnxk/meson.build           | 2 +-
 drivers/mempool/dpaa/meson.build           | 2 +-
 drivers/mempool/dpaa2/meson.build          | 2 +-
 drivers/mempool/octeontx/meson.build       | 2 +-
 drivers/net/cnxk/meson.build               | 3 +--
 drivers/net/iavf/meson.build               | 2 +-
 drivers/net/ice/meson.build                | 2 +-
 drivers/net/mana/meson.build               | 2 +-
 drivers/net/mlx5/meson.build               | 2 +-
 drivers/net/sfc/meson.build                | 2 +-
 drivers/net/softnic/meson.build            | 2 +-
 drivers/raw/cnxk_bphy/meson.build          | 2 +-
 drivers/raw/cnxk_gpio/meson.build          | 2 +-
 drivers/raw/ntb/meson.build                | 2 +-
 drivers/raw/skeleton/meson.build           | 2 +-
 drivers/regex/mlx5/meson.build             | 2 +-
 drivers/vdpa/ifc/meson.build               | 2 +-
 drivers/vdpa/meson.build                   | 3 +--
 drivers/vdpa/mlx5/meson.build              | 2 +-
 drivers/vdpa/sfc/meson.build               | 2 +-
 56 files changed, 53 insertions(+), 65 deletions(-)

diff --git a/drivers/baseband/fpga_5gnr_fec/meson.build b/drivers/baseband/fpga_5gnr_fec/meson.build
index c3678d23eb..31b9e92fbb 100644
--- a/drivers/baseband/fpga_5gnr_fec/meson.build
+++ b/drivers/baseband/fpga_5gnr_fec/meson.build
@@ -1,7 +1,7 @@
 # SPDX-License-Identifier: BSD-3-Clause
 # Copyright(c) 2020 Intel Corporation
 
-deps += ['bus_vdev', 'ring', 'pci', 'bus_pci']
+deps += ['bus_vdev', 'bus_pci']
 
 sources = files('rte_fpga_5gnr_fec.c')
 
diff --git a/drivers/baseband/fpga_lte_fec/meson.build b/drivers/baseband/fpga_lte_fec/meson.build
index 14e07826ef..fbf24755db 100644
--- a/drivers/baseband/fpga_lte_fec/meson.build
+++ b/drivers/baseband/fpga_lte_fec/meson.build
@@ -1,5 +1,5 @@
 # SPDX-License-Identifier: BSD-3-Clause
 # Copyright(c) 2019 Intel Corporation
 
-deps += ['bus_vdev', 'ring', 'pci', 'bus_pci']
+deps += ['bus_vdev', 'bus_pci']
 sources = files('fpga_lte_fec.c')
diff --git a/drivers/baseband/la12xx/meson.build b/drivers/baseband/la12xx/meson.build
index 7b7e41c961..e1dbdd0fa7 100644
--- a/drivers/baseband/la12xx/meson.build
+++ b/drivers/baseband/la12xx/meson.build
@@ -1,6 +1,6 @@
 # SPDX-License-Identifier: BSD-3-Clause
 # Copyright 2020-2021 NXP
 
-deps += ['bus_vdev', 'ring']
+deps += ['bus_vdev']
 
 sources = files('bbdev_la12xx.c')
diff --git a/drivers/baseband/null/meson.build b/drivers/baseband/null/meson.build
index 22863f0bd8..716d6c6fdb 100644
--- a/drivers/baseband/null/meson.build
+++ b/drivers/baseband/null/meson.build
@@ -1,5 +1,5 @@
 # SPDX-License-Identifier: BSD-3-Clause
 # Copyright(c) 2018 Luca Boccassi <bluca@debian.org>
 
-deps += ['bus_vdev', 'ring']
+deps += ['bus_vdev']
 sources = files('bbdev_null.c')
diff --git a/drivers/baseband/turbo_sw/meson.build b/drivers/baseband/turbo_sw/meson.build
index a9035a753e..ac18e8a9b6 100644
--- a/drivers/baseband/turbo_sw/meson.build
+++ b/drivers/baseband/turbo_sw/meson.build
@@ -26,5 +26,5 @@ if dep_dec5g.found()
     cflags += ['-DRTE_BBDEV_SDK_AVX512']
 endif
 
-deps += ['bus_vdev', 'ring']
+deps += ['bus_vdev']
 sources = files('bbdev_turbo_software.c')
diff --git a/drivers/bus/auxiliary/meson.build b/drivers/bus/auxiliary/meson.build
index 10468fd130..a113f11743 100644
--- a/drivers/bus/auxiliary/meson.build
+++ b/drivers/bus/auxiliary/meson.build
@@ -13,5 +13,3 @@ if is_linux
 endif
 
 require_iova_in_mbuf = false
-
-deps += ['kvargs']
diff --git a/drivers/bus/dpaa/meson.build b/drivers/bus/dpaa/meson.build
index 114e0a2265..d0ae5a9ff0 100644
--- a/drivers/bus/dpaa/meson.build
+++ b/drivers/bus/dpaa/meson.build
@@ -6,7 +6,7 @@ if not is_linux
     reason = 'only supported on Linux'
 endif
 
-deps += ['common_dpaax', 'eventdev']
+deps = ['common_dpaax', 'eventdev']
 sources = files(
         'base/fman/fman.c',
         'base/fman/fman_hw.c',
diff --git a/drivers/bus/fslmc/meson.build b/drivers/bus/fslmc/meson.build
index 162ca286fe..989a47c7a0 100644
--- a/drivers/bus/fslmc/meson.build
+++ b/drivers/bus/fslmc/meson.build
@@ -6,7 +6,7 @@ if not is_linux
     reason = 'only supported on Linux'
 endif
 
-deps += ['common_dpaax', 'eventdev', 'kvargs']
+deps = ['common_dpaax', 'eventdev']
 sources = files(
         'fslmc_bus.c',
         'fslmc_vfio.c',
diff --git a/drivers/bus/ifpga/meson.build b/drivers/bus/ifpga/meson.build
index dedc94db2d..e87b08eaf4 100644
--- a/drivers/bus/ifpga/meson.build
+++ b/drivers/bus/ifpga/meson.build
@@ -7,6 +7,6 @@ if is_windows
     subdir_done()
 endif
 
-deps += ['pci', 'kvargs', 'rawdev']
+deps = ['pci', 'rawdev']
 driver_sdk_headers += files('bus_ifpga_driver.h')
 sources = files('ifpga_bus.c')
diff --git a/drivers/bus/pci/meson.build b/drivers/bus/pci/meson.build
index fede114dc7..776c3d1550 100644
--- a/drivers/bus/pci/meson.build
+++ b/drivers/bus/pci/meson.build
@@ -1,7 +1,7 @@
 # SPDX-License-Identifier: BSD-3-Clause
 # Copyright(c) 2017 Intel Corporation
 
-deps += ['pci']
+deps = ['pci']
 headers = files('rte_bus_pci.h')
 driver_sdk_headers = files('bus_pci_driver.h')
 sources = files('pci_common.c',
@@ -31,5 +31,3 @@ if is_windows
 endif
 
 require_iova_in_mbuf = false
-
-deps += ['kvargs']
diff --git a/drivers/bus/platform/meson.build b/drivers/bus/platform/meson.build
index 8633cc4e75..2039c23ac6 100644
--- a/drivers/bus/platform/meson.build
+++ b/drivers/bus/platform/meson.build
@@ -10,7 +10,6 @@ endif
 
 require_iova_in_mbuf = false
 
-deps += ['kvargs']
 sources = files(
         'platform_params.c',
         'platform.c',
diff --git a/drivers/bus/uacce/meson.build b/drivers/bus/uacce/meson.build
index a659d65f23..130148a315 100644
--- a/drivers/bus/uacce/meson.build
+++ b/drivers/bus/uacce/meson.build
@@ -8,5 +8,3 @@ endif
 
 sources = files('uacce.c')
 driver_sdk_headers += files('bus_uacce_driver.h')
-
-deps += ['kvargs']
diff --git a/drivers/bus/vdev/meson.build b/drivers/bus/vdev/meson.build
index 50f0c8918d..24993c88a3 100644
--- a/drivers/bus/vdev/meson.build
+++ b/drivers/bus/vdev/meson.build
@@ -9,5 +9,3 @@ headers = files('rte_bus_vdev.h')
 driver_sdk_headers = files('bus_vdev_driver.h')
 
 require_iova_in_mbuf = false
-
-deps += ['kvargs']
diff --git a/drivers/common/cnxk/meson.build b/drivers/common/cnxk/meson.build
index e0e4600989..8ff080ee19 100644
--- a/drivers/common/cnxk/meson.build
+++ b/drivers/common/cnxk/meson.build
@@ -8,7 +8,7 @@ if not is_linux or not dpdk_conf.get('RTE_ARCH_64')
     subdir_done()
 endif
 
-deps = ['eal', 'pci', 'bus_pci', 'mbuf', 'security']
+deps = ['bus_pci', 'security']
 sources = files(
         'roc_ae.c',
         'roc_aes.c',
@@ -91,7 +91,7 @@ sources += files('cnxk_telemetry_bphy.c',
                  'cnxk_telemetry_sso.c',
 )
 
-deps += ['bus_pci', 'net', 'telemetry']
+deps += ['bus_pci']
 
 require_iova_in_mbuf = false
 
diff --git a/drivers/common/cpt/meson.build b/drivers/common/cpt/meson.build
index c09824a651..a4b000dc37 100644
--- a/drivers/common/cpt/meson.build
+++ b/drivers/common/cpt/meson.build
@@ -9,5 +9,5 @@ endif
 
 sources = files('cpt_fpm_tables.c', 'cpt_pmd_ops_helper.c')
 
-deps = ['kvargs', 'pci', 'cryptodev']
+deps = ['pci', 'cryptodev']
 includes += include_directories('../../crypto/octeontx')
diff --git a/drivers/common/idpf/meson.build b/drivers/common/idpf/meson.build
index 80c8906f80..adf5430487 100644
--- a/drivers/common/idpf/meson.build
+++ b/drivers/common/idpf/meson.build
@@ -7,7 +7,7 @@ endif
 
 includes += include_directories('../iavf')
 
-deps += ['mbuf']
+deps = ['mbuf']
 
 sources = files(
         'idpf_common_device.c',
diff --git a/drivers/common/mlx5/meson.build b/drivers/common/mlx5/meson.build
index 1eefc02f06..b94c956495 100644
--- a/drivers/common/mlx5/meson.build
+++ b/drivers/common/mlx5/meson.build
@@ -12,7 +12,7 @@ if is_windows and not is_ms_linker and not meson.is_cross_build()
     subdir_done()
 endif
 
-deps += ['hash', 'pci', 'bus_pci', 'bus_auxiliary', 'net', 'eal', 'kvargs']
+deps += ['hash', 'bus_pci', 'bus_auxiliary']
 sources += files(
         'mlx5_devx_cmds.c',
         'mlx5_common.c',
diff --git a/drivers/compress/mlx5/meson.build b/drivers/compress/mlx5/meson.build
index 26a0e0cd09..ddb9e0f82c 100644
--- a/drivers/compress/mlx5/meson.build
+++ b/drivers/compress/mlx5/meson.build
@@ -7,7 +7,7 @@ if not is_linux
     subdir_done()
 endif
 
-deps += ['common_mlx5', 'eal', 'compressdev']
+deps += ['common_mlx5', 'compressdev']
 if not dpdk_conf.has('RTE_COMMON_MLX5')
     # avoid referencing undefined variables from common/mlx5
     subdir_done()
diff --git a/drivers/compress/nitrox/meson.build b/drivers/compress/nitrox/meson.build
index 1becc66912..c3db4ac2bb 100644
--- a/drivers/compress/nitrox/meson.build
+++ b/drivers/compress/nitrox/meson.build
@@ -6,7 +6,7 @@ if not is_linux
     reason = 'only supported on Linux'
 endif
 
-deps += ['common_nitrox', 'bus_pci', 'compressdev']
+deps += ['common_nitrox', 'compressdev']
 
 sources += files(
         'nitrox_comp.c',
diff --git a/drivers/compress/octeontx/meson.build b/drivers/compress/octeontx/meson.build
index 16f973f4d7..0ccde449e8 100644
--- a/drivers/compress/octeontx/meson.build
+++ b/drivers/compress/octeontx/meson.build
@@ -9,7 +9,7 @@ endif
 
 sources = files('otx_zip.c', 'otx_zip_pmd.c')
 includes += include_directories('include')
-deps += ['mempool_octeontx', 'bus_pci']
+deps += ['mempool_octeontx']
 ext_deps += dep
 
 require_iova_in_mbuf = false
diff --git a/drivers/crypto/bcmfs/meson.build b/drivers/crypto/bcmfs/meson.build
index 5842f83a3b..678bab7398 100644
--- a/drivers/crypto/bcmfs/meson.build
+++ b/drivers/crypto/bcmfs/meson.build
@@ -9,7 +9,7 @@ if is_windows
     subdir_done()
 endif
 
-deps += ['eal', 'bus_vdev']
+deps += ['bus_vdev']
 sources = files(
         'bcmfs_logs.c',
         'bcmfs_device.c',
diff --git a/drivers/crypto/cnxk/meson.build b/drivers/crypto/cnxk/meson.build
index aa840fb7bb..c5a5725e1a 100644
--- a/drivers/crypto/cnxk/meson.build
+++ b/drivers/crypto/cnxk/meson.build
@@ -25,7 +25,7 @@ sources = files(
 )
 
 headers = files('rte_pmd_cnxk_crypto.h')
-deps += ['bus_pci', 'common_cnxk', 'security', 'eventdev']
+deps += ['common_cnxk', 'eventdev']
 includes += include_directories('../../../lib/net', '../../event/cnxk')
 
 if get_option('buildtype').contains('debug')
diff --git a/drivers/crypto/dpaa_sec/meson.build b/drivers/crypto/dpaa_sec/meson.build
index f87ad6c7e7..9efac952c4 100644
--- a/drivers/crypto/dpaa_sec/meson.build
+++ b/drivers/crypto/dpaa_sec/meson.build
@@ -6,7 +6,7 @@ if not is_linux
     reason = 'only supported on Linux'
 endif
 
-deps += ['bus_dpaa', 'mempool_dpaa', 'security']
+deps += ['mempool_dpaa', 'security']
 sources = files('dpaa_sec.c', 'dpaa_sec_raw_dp.c')
 
 includes += include_directories('../../bus/dpaa/include')
diff --git a/drivers/crypto/ipsec_mb/meson.build b/drivers/crypto/ipsec_mb/meson.build
index 87bf965554..739cbd1b6e 100644
--- a/drivers/crypto/ipsec_mb/meson.build
+++ b/drivers/crypto/ipsec_mb/meson.build
@@ -45,5 +45,5 @@ sources = files(
         'pmd_snow3g.c',
         'pmd_zuc.c',
 )
-deps += ['bus_vdev', 'net', 'security']
+deps += ['bus_vdev', 'security']
 require_iova_in_mbuf = false
diff --git a/drivers/crypto/mlx5/meson.build b/drivers/crypto/mlx5/meson.build
index d7bc8ec967..595053d8cd 100644
--- a/drivers/crypto/mlx5/meson.build
+++ b/drivers/crypto/mlx5/meson.build
@@ -7,7 +7,7 @@ if not (is_linux or is_windows)
     subdir_done()
 endif
 
-deps += ['common_mlx5', 'eal', 'cryptodev']
+deps += ['common_mlx5', 'cryptodev']
 if not dpdk_conf.has('RTE_COMMON_MLX5')
     # avoid referencing undefined variables from common/mlx5
     subdir_done()
diff --git a/drivers/crypto/nitrox/meson.build b/drivers/crypto/nitrox/meson.build
index f8887713d2..85e3ca2b28 100644
--- a/drivers/crypto/nitrox/meson.build
+++ b/drivers/crypto/nitrox/meson.build
@@ -6,7 +6,7 @@ if not is_linux
     reason = 'only supported on Linux'
 endif
 
-deps += ['common_nitrox', 'bus_pci', 'cryptodev']
+deps += ['common_nitrox', 'cryptodev']
 
 sources += files(
         'nitrox_sym.c',
diff --git a/drivers/dma/cnxk/meson.build b/drivers/dma/cnxk/meson.build
index 8ccc1c2cb7..738774d542 100644
--- a/drivers/dma/cnxk/meson.build
+++ b/drivers/dma/cnxk/meson.build
@@ -12,7 +12,7 @@ driver_sdk_headers = files(
         'cnxk_dma_event_dp.h',
 )
 
-deps += ['bus_pci', 'common_cnxk', 'dmadev', 'eventdev']
+deps += ['common_cnxk', 'eventdev']
 
 includes += include_directories('../../event/cnxk')
 
diff --git a/drivers/dma/dpaa/meson.build b/drivers/dma/dpaa/meson.build
index c31a6d91fe..fec4a45767 100644
--- a/drivers/dma/dpaa/meson.build
+++ b/drivers/dma/dpaa/meson.build
@@ -6,7 +6,7 @@ if not is_linux
     reason = 'only supported on linux'
 endif
 
-deps += ['dmadev', 'bus_dpaa']
+deps += ['bus_dpaa']
 sources = files('dpaa_qdma.c')
 
 if cc.has_argument('-Wno-pointer-arith')
diff --git a/drivers/dma/dpaa2/meson.build b/drivers/dma/dpaa2/meson.build
index a99151e2a5..2b5b76ec5f 100644
--- a/drivers/dma/dpaa2/meson.build
+++ b/drivers/dma/dpaa2/meson.build
@@ -8,7 +8,7 @@ endif
 
 build = dpdk_conf.has('RTE_MEMPOOL_DPAA2')
 reason = 'missing dependency, DPDK DPAA2 mempool driver'
-deps += ['dmadev', 'bus_fslmc', 'mempool_dpaa2', 'ring', 'kvargs']
+deps += ['mempool_dpaa2']
 sources = files('dpaa2_qdma.c')
 
 if cc.has_argument('-Wno-pointer-arith')
diff --git a/drivers/dma/odm/meson.build b/drivers/dma/odm/meson.build
index d597762d37..959e7e685d 100644
--- a/drivers/dma/odm/meson.build
+++ b/drivers/dma/odm/meson.build
@@ -7,7 +7,7 @@ if not is_linux or not dpdk_conf.get('RTE_ARCH_64')
     subdir_done()
 endif
 
-deps += ['bus_pci', 'dmadev', 'eal', 'mempool', 'pci']
+deps += ['bus_pci', 'dmadev', 'mempool']
 
 sources = files('odm_dmadev.c', 'odm.c')
 
diff --git a/drivers/dma/skeleton/meson.build b/drivers/dma/skeleton/meson.build
index 77055683ad..0d703a36eb 100644
--- a/drivers/dma/skeleton/meson.build
+++ b/drivers/dma/skeleton/meson.build
@@ -1,7 +1,7 @@
 # SPDX-License-Identifier: BSD-3-Clause
 # Copyright(c) 2021 HiSilicon Limited
 
-deps += ['dmadev', 'kvargs', 'ring', 'bus_vdev']
+deps += ['dmadev', 'ring', 'bus_vdev']
 sources = files(
         'skeleton_dmadev.c',
 )
diff --git a/drivers/event/cnxk/meson.build b/drivers/event/cnxk/meson.build
index e0e350570d..b365fff0cb 100644
--- a/drivers/event/cnxk/meson.build
+++ b/drivers/event/cnxk/meson.build
@@ -337,7 +337,7 @@ foreach flag: extra_flags
 endforeach
 
 headers = files('rte_pmd_cnxk_eventdev.h')
-deps += ['bus_pci', 'common_cnxk', 'net_cnxk', 'crypto_cnxk', 'dma_cnxk']
+deps += ['net_cnxk', 'crypto_cnxk', 'dma_cnxk']
 
 require_iova_in_mbuf = false
 
diff --git a/drivers/event/dlb2/meson.build b/drivers/event/dlb2/meson.build
index 515d1795fe..217abc174d 100644
--- a/drivers/event/dlb2/meson.build
+++ b/drivers/event/dlb2/meson.build
@@ -67,4 +67,4 @@ endif
 
 headers = files('rte_pmd_dlb2.h')
 
-deps += ['mbuf', 'mempool', 'ring', 'pci', 'bus_pci']
+deps += ['bus_pci']
diff --git a/drivers/event/dpaa2/meson.build b/drivers/event/dpaa2/meson.build
index dd5063af43..7dae1da32b 100644
--- a/drivers/event/dpaa2/meson.build
+++ b/drivers/event/dpaa2/meson.build
@@ -5,7 +5,7 @@ if not is_linux
     build = false
     reason = 'only supported on Linux'
 endif
-deps += ['bus_vdev', 'net_dpaa2', 'crypto_dpaa2_sec']
+deps += ['net_dpaa2', 'crypto_dpaa2_sec']
 sources = files(
         'dpaa2_hw_dpcon.c',
         'dpaa2_eventdev.c',
diff --git a/drivers/event/octeontx/meson.build b/drivers/event/octeontx/meson.build
index eb17e059d8..1227b2e18d 100644
--- a/drivers/event/octeontx/meson.build
+++ b/drivers/event/octeontx/meson.build
@@ -17,5 +17,4 @@ sources = files(
         'timvf_probe.c',
 )
 
-deps += ['common_octeontx', 'mempool_octeontx', 'bus_vdev', 'net_octeontx']
-deps += ['crypto_octeontx']
+deps = ['net_octeontx', 'crypto_octeontx']
diff --git a/drivers/event/sw/meson.build b/drivers/event/sw/meson.build
index 3a3ebd72a3..450969aa7a 100644
--- a/drivers/event/sw/meson.build
+++ b/drivers/event/sw/meson.build
@@ -8,5 +8,5 @@ sources = files(
         'sw_evdev_xstats.c',
         'sw_evdev.c',
 )
-deps += ['hash', 'bus_vdev']
+deps += ['bus_vdev']
 require_iova_in_mbuf = false
diff --git a/drivers/mempool/cnxk/meson.build b/drivers/mempool/cnxk/meson.build
index e388cce26a..7bbed325df 100644
--- a/drivers/mempool/cnxk/meson.build
+++ b/drivers/mempool/cnxk/meson.build
@@ -18,5 +18,5 @@ sources = files(
 )
 
 headers = files('rte_pmd_cnxk_mempool.h')
-deps += ['eal', 'mbuf', 'kvargs', 'bus_pci', 'common_cnxk', 'mempool']
+deps = ['common_cnxk']
 require_iova_in_mbuf = false
diff --git a/drivers/mempool/dpaa/meson.build b/drivers/mempool/dpaa/meson.build
index c4e9994b83..39fc312344 100644
--- a/drivers/mempool/dpaa/meson.build
+++ b/drivers/mempool/dpaa/meson.build
@@ -6,5 +6,5 @@ if not is_linux
     reason = 'only supported on Linux'
 endif
 
-deps += ['bus_dpaa']
+deps = ['bus_dpaa']
 sources = files('dpaa_mempool.c')
diff --git a/drivers/mempool/dpaa2/meson.build b/drivers/mempool/dpaa2/meson.build
index 3d16d44158..0099b20b97 100644
--- a/drivers/mempool/dpaa2/meson.build
+++ b/drivers/mempool/dpaa2/meson.build
@@ -6,7 +6,7 @@ if not is_linux
     reason = 'only supported on Linux'
 endif
 
-deps += ['bus_fslmc']
+deps = ['bus_fslmc']
 sources = files('dpaa2_hw_mempool.c')
 
 headers = files('rte_dpaa2_mempool.h')
diff --git a/drivers/mempool/octeontx/meson.build b/drivers/mempool/octeontx/meson.build
index 3ccecac75d..f97bcf4a5a 100644
--- a/drivers/mempool/octeontx/meson.build
+++ b/drivers/mempool/octeontx/meson.build
@@ -12,6 +12,6 @@ sources = files(
         'rte_mempool_octeontx.c',
 )
 
-deps += ['mbuf', 'bus_pci', 'common_octeontx']
+deps = ['mbuf', 'bus_pci', 'common_octeontx']
 
 require_iova_in_mbuf = false
diff --git a/drivers/net/cnxk/meson.build b/drivers/net/cnxk/meson.build
index 7bce80098a..f2f8f60f83 100644
--- a/drivers/net/cnxk/meson.build
+++ b/drivers/net/cnxk/meson.build
@@ -231,8 +231,7 @@ sources += files(
 endif
 endif
 
-deps += ['bus_pci', 'cryptodev', 'eventdev', 'security']
-deps += ['common_cnxk', 'mempool_cnxk']
+deps = ['eventdev', 'mempool_cnxk']
 
 # Allow implicit vector conversions and strict aliasing warning
 extra_flags = ['-flax-vector-conversions', '-Wno-strict-aliasing']
diff --git a/drivers/net/iavf/meson.build b/drivers/net/iavf/meson.build
index 83aebd5596..a96d9c0bc0 100644
--- a/drivers/net/iavf/meson.build
+++ b/drivers/net/iavf/meson.build
@@ -11,7 +11,7 @@ includes += include_directories('../../common/iavf')
 
 testpmd_sources = files('iavf_testpmd.c')
 
-deps += ['common_iavf', 'security', 'cryptodev']
+deps += ['common_iavf', 'security']
 
 sources = files(
         'iavf_ethdev.c',
diff --git a/drivers/net/ice/meson.build b/drivers/net/ice/meson.build
index b7f2188e62..99344211cb 100644
--- a/drivers/net/ice/meson.build
+++ b/drivers/net/ice/meson.build
@@ -18,7 +18,7 @@ sources = files(
 
 testpmd_sources = files('ice_testpmd.c')
 
-deps += ['hash', 'net', 'common_iavf']
+deps += ['hash', 'common_iavf']
 includes += include_directories('base', '../../common/iavf')
 
 if arch_subdir == 'x86'
diff --git a/drivers/net/mana/meson.build b/drivers/net/mana/meson.build
index 2d72eca5a8..c97f117fd7 100644
--- a/drivers/net/mana/meson.build
+++ b/drivers/net/mana/meson.build
@@ -7,7 +7,7 @@ if not is_linux or not dpdk_conf.has('RTE_ARCH_X86')
     subdir_done()
 endif
 
-deps += ['pci', 'bus_pci', 'net', 'eal', 'kvargs']
+deps += ['bus_pci']
 
 sources += files(
         'gdma.c',
diff --git a/drivers/net/mlx5/meson.build b/drivers/net/mlx5/meson.build
index b279ddf47c..ec679d11ab 100644
--- a/drivers/net/mlx5/meson.build
+++ b/drivers/net/mlx5/meson.build
@@ -8,7 +8,7 @@ if not (is_linux or is_windows)
     subdir_done()
 endif
 
-deps += ['hash', 'common_mlx5']
+deps += ['common_mlx5']
 if not dpdk_conf.has('RTE_COMMON_MLX5')
     # avoid referencing undefined variables from common/mlx5
     subdir_done()
diff --git a/drivers/net/sfc/meson.build b/drivers/net/sfc/meson.build
index 5adde68517..820ee6c91e 100644
--- a/drivers/net/sfc/meson.build
+++ b/drivers/net/sfc/meson.build
@@ -71,7 +71,7 @@ if not cc.links(atomic_check_code)
     ext_deps += libatomic_dep
 endif
 
-deps += ['common_sfc_efx', 'bus_pci', 'hash']
+deps += ['common_sfc_efx', 'hash']
 sources = files(
         'sfc_ethdev.c',
         'sfc_kvargs.c',
diff --git a/drivers/net/softnic/meson.build b/drivers/net/softnic/meson.build
index 5dfbd16c77..1529ef38f9 100644
--- a/drivers/net/softnic/meson.build
+++ b/drivers/net/softnic/meson.build
@@ -15,4 +15,4 @@ sources = files(
         'rte_eth_softnic_swq.c',
         'rte_eth_softnic_thread.c',
 )
-deps += ['pipeline', 'port', 'table']
+deps += ['pipeline']
diff --git a/drivers/raw/cnxk_bphy/meson.build b/drivers/raw/cnxk_bphy/meson.build
index bb5d2ffb80..b38b071697 100644
--- a/drivers/raw/cnxk_bphy/meson.build
+++ b/drivers/raw/cnxk_bphy/meson.build
@@ -2,7 +2,7 @@
 # Copyright(C) 2021 Marvell.
 #
 
-deps += ['bus_pci', 'common_cnxk', 'rawdev']
+deps += ['common_cnxk', 'rawdev']
 sources = files(
         'cnxk_bphy.c',
         'cnxk_bphy_cgx.c',
diff --git a/drivers/raw/cnxk_gpio/meson.build b/drivers/raw/cnxk_gpio/meson.build
index 9d9a527392..6d17fe573f 100644
--- a/drivers/raw/cnxk_gpio/meson.build
+++ b/drivers/raw/cnxk_gpio/meson.build
@@ -2,7 +2,7 @@
 # Copyright(C) 2021 Marvell.
 #
 
-deps += ['bus_vdev', 'common_cnxk', 'rawdev', 'kvargs']
+deps += ['bus_vdev', 'common_cnxk', 'rawdev']
 sources = files(
         'cnxk_gpio.c',
         'cnxk_gpio_irq.c',
diff --git a/drivers/raw/ntb/meson.build b/drivers/raw/ntb/meson.build
index 9096f2b25a..8f79d3b16a 100644
--- a/drivers/raw/ntb/meson.build
+++ b/drivers/raw/ntb/meson.build
@@ -1,7 +1,7 @@
 # SPDX-License-Identifier: BSD-3-Clause
 # Copyright(c) 2019 Intel Corporation.
 
-deps += ['rawdev', 'mbuf', 'mempool', 'pci', 'bus_pci']
+deps += ['rawdev', 'mbuf', 'bus_pci']
 sources = files('ntb.c',
                 'ntb_hw_intel.c')
 headers = files('rte_pmd_ntb.h')
diff --git a/drivers/raw/skeleton/meson.build b/drivers/raw/skeleton/meson.build
index 9d5fcf6514..7d76fe71b3 100644
--- a/drivers/raw/skeleton/meson.build
+++ b/drivers/raw/skeleton/meson.build
@@ -1,7 +1,7 @@
 # SPDX-License-Identifier: BSD-3-Clause
 # Copyright 2018 NXP
 
-deps += ['rawdev', 'kvargs', 'mbuf', 'bus_vdev']
+deps += ['rawdev', 'mbuf', 'bus_vdev']
 sources = files(
         'skeleton_rawdev.c',
         'skeleton_rawdev_test.c',
diff --git a/drivers/regex/mlx5/meson.build b/drivers/regex/mlx5/meson.build
index 6070b37501..f75bf2e084 100644
--- a/drivers/regex/mlx5/meson.build
+++ b/drivers/regex/mlx5/meson.build
@@ -7,7 +7,7 @@ if not is_linux
     subdir_done()
 endif
 
-deps += ['common_mlx5', 'eal']
+deps += ['common_mlx5']
 if not dpdk_conf.has('RTE_COMMON_MLX5')
     # avoid referencing undefined variables from common/mlx5
     subdir_done()
diff --git a/drivers/vdpa/ifc/meson.build b/drivers/vdpa/ifc/meson.build
index f78d36a715..f4ed4f491f 100644
--- a/drivers/vdpa/ifc/meson.build
+++ b/drivers/vdpa/ifc/meson.build
@@ -1,6 +1,6 @@
 # SPDX-License-Identifier: BSD-3-Clause
 # Copyright(c) 2018 Intel Corporation
 
-deps += 'vhost'
+deps += 'bus_pci'
 sources = files('ifcvf_vdpa.c', 'base/ifcvf.c')
 includes += include_directories('base')
diff --git a/drivers/vdpa/meson.build b/drivers/vdpa/meson.build
index e01c277b9e..747cdc7c55 100644
--- a/drivers/vdpa/meson.build
+++ b/drivers/vdpa/meson.build
@@ -11,5 +11,4 @@ drivers = [
         'nfp',
         'sfc',
 ]
-std_deps = ['bus_pci']
-std_deps += ['vhost']
+std_deps = ['vhost']
diff --git a/drivers/vdpa/mlx5/meson.build b/drivers/vdpa/mlx5/meson.build
index e224d1bcc9..1263ac43a4 100644
--- a/drivers/vdpa/mlx5/meson.build
+++ b/drivers/vdpa/mlx5/meson.build
@@ -7,7 +7,7 @@ if not is_linux
     subdir_done()
 endif
 
-deps += ['hash', 'common_mlx5', 'vhost', 'pci', 'eal', 'sched']
+deps += ['common_mlx5', 'vhost', 'sched']
 if not dpdk_conf.has('RTE_COMMON_MLX5')
     # avoid referencing undefined variables from common/mlx5
     subdir_done()
diff --git a/drivers/vdpa/sfc/meson.build b/drivers/vdpa/sfc/meson.build
index 933f3f18f3..465ca9f220 100644
--- a/drivers/vdpa/sfc/meson.build
+++ b/drivers/vdpa/sfc/meson.build
@@ -16,7 +16,7 @@ foreach flag: extra_flags
     endif
 endforeach
 
-deps += ['common_sfc_efx', 'bus_pci']
+deps += ['common_sfc_efx']
 sources = files(
         'sfc_vdpa.c',
         'sfc_vdpa_hw.c',
-- 
2.43.5


^ permalink raw reply	[flat|nested] 54+ messages in thread

* [PATCH v3 7/8] build: reduce app dependencies
  2024-09-04 15:08 ` [PATCH v3 0/8] " Anatoly Burakov
                     ` (5 preceding siblings ...)
  2024-09-04 15:08   ` [PATCH v3 6/8] build: reduce driver dependencies Anatoly Burakov
@ 2024-09-04 15:08   ` Anatoly Burakov
  2024-09-04 15:08   ` [PATCH v3 8/8] devtools: add script to generate DPDK dependency graphs Anatoly Burakov
                     ` (3 subsequent siblings)
  10 siblings, 0 replies; 54+ messages in thread
From: Anatoly Burakov @ 2024-09-04 15:08 UTC (permalink / raw)
  To: dev, Reshma Pattan, Stephen Hemminger, Sunil Kumar Kori,
	Rakesh Kudurumalla, Brian Dooley, Vladimir Medvedkin,
	Konstantin Ananyev

From: Bruce Richardson <bruce.richardson@intel.com>

Remove any unnecessary dependencies from the app dependency lists.
This will give each app a near-minimum set of required dependencies.

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
---
 app/dumpcap/meson.build          | 2 +-
 app/graph/meson.build            | 2 +-
 app/pdump/meson.build            | 2 +-
 app/proc-info/meson.build        | 2 +-
 app/test-crypto-perf/meson.build | 2 +-
 app/test-fib/meson.build         | 2 +-
 app/test-sad/meson.build         | 2 +-
 app/test/meson.build             | 2 +-
 8 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/app/dumpcap/meson.build b/app/dumpcap/meson.build
index 69c016c780..6204cf051a 100644
--- a/app/dumpcap/meson.build
+++ b/app/dumpcap/meson.build
@@ -14,4 +14,4 @@ endif
 
 ext_deps += pcap_dep
 sources = files('main.c')
-deps += ['ethdev', 'pdump', 'pcapng', 'bpf']
+deps += ['pdump']
diff --git a/app/graph/meson.build b/app/graph/meson.build
index 6dc54d5ee6..9c4cd080d9 100644
--- a/app/graph/meson.build
+++ b/app/graph/meson.build
@@ -9,7 +9,7 @@ if not build
     subdir_done()
 endif
 
-deps += ['graph', 'eal', 'lpm', 'ethdev', 'node', 'cmdline']
+deps += ['node', 'cmdline']
 sources = files(
         'cli.c',
         'conn.c',
diff --git a/app/pdump/meson.build b/app/pdump/meson.build
index fb282bba1f..a10f9d6124 100644
--- a/app/pdump/meson.build
+++ b/app/pdump/meson.build
@@ -8,4 +8,4 @@ if is_windows
 endif
 
 sources = files('main.c')
-deps += ['ethdev', 'kvargs', 'pdump']
+deps += ['pdump']
diff --git a/app/proc-info/meson.build b/app/proc-info/meson.build
index 156592119b..24b75b9ace 100644
--- a/app/proc-info/meson.build
+++ b/app/proc-info/meson.build
@@ -8,7 +8,7 @@ if is_windows
 endif
 
 sources = files('main.c')
-deps += ['ethdev', 'security', 'eventdev']
+deps += ['security', 'eventdev']
 if dpdk_conf.has('RTE_LIB_METRICS')
     optional_deps += 'metrics'
 endif
diff --git a/app/test-crypto-perf/meson.build b/app/test-crypto-perf/meson.build
index 05c71e0a0c..8904f8607d 100644
--- a/app/test-crypto-perf/meson.build
+++ b/app/test-crypto-perf/meson.build
@@ -19,7 +19,7 @@ sources = files(
         'cperf_test_verify.c',
         'main.c',
 )
-deps += ['cryptodev', 'net', 'security']
+deps += ['cryptodev']
 if dpdk_conf.has('RTE_CRYPTO_SCHEDULER')
     optional_deps += 'crypto_scheduler'
 endif
diff --git a/app/test-fib/meson.build b/app/test-fib/meson.build
index eb36772cf3..25e2ea1a1d 100644
--- a/app/test-fib/meson.build
+++ b/app/test-fib/meson.build
@@ -8,4 +8,4 @@ if is_windows
 endif
 
 sources = files('main.c')
-deps += ['fib', 'lpm', 'net']
+deps += ['fib', 'lpm']
diff --git a/app/test-sad/meson.build b/app/test-sad/meson.build
index a50616a9c7..414e2a05cb 100644
--- a/app/test-sad/meson.build
+++ b/app/test-sad/meson.build
@@ -8,4 +8,4 @@ if is_windows
 endif
 
 sources = files('main.c')
-deps += ['ipsec', 'net']
+deps += ['ipsec']
diff --git a/app/test/meson.build b/app/test/meson.build
index bb0a38b3a5..f0a8e58218 100644
--- a/app/test/meson.build
+++ b/app/test/meson.build
@@ -2,7 +2,7 @@
 # Copyright(c) 2017-2023 Intel Corporation
 
 # the main test files [test.c and commands.c] relies on these libraries
-deps += ['cmdline', 'ring', 'mempool', 'mbuf']
+deps += ['cmdline']
 sources += files('commands.c', 'test.c')
 
 # optional dependencies: some files may use these - and so we should link them in -
-- 
2.43.5


^ permalink raw reply	[flat|nested] 54+ messages in thread

* [PATCH v3 8/8] devtools: add script to generate DPDK dependency graphs
  2024-09-04 15:08 ` [PATCH v3 0/8] " Anatoly Burakov
                     ` (6 preceding siblings ...)
  2024-09-04 15:08   ` [PATCH v3 7/8] build: reduce app dependencies Anatoly Burakov
@ 2024-09-04 15:08   ` Anatoly Burakov
  2024-09-05  6:05   ` [PATCH v3 0/8] record and rework component dependencies Morten Brørup
                     ` (2 subsequent siblings)
  10 siblings, 0 replies; 54+ messages in thread
From: Anatoly Burakov @ 2024-09-04 15:08 UTC (permalink / raw)
  To: dev

From: Bruce Richardson <bruce.richardson@intel.com>

Rather than the single monolithic graph that would be output from the
deps.dot file in a build directory, we can post-process that to generate
simpler graphs for different tasks. This new "draw_dependency_graphs"
script takes the "deps.dot" as input and generates an output file that
has the nodes categorized, filtering them based off the requested node or
category. For example, use "--match net/ice" to show the dependency tree
from that driver, or "--match lib" to show just the library dependency
tree.

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com>
---
 devtools/draw-dependency-graphs.py | 223 +++++++++++++++++++++++++++++
 1 file changed, 223 insertions(+)
 create mode 100755 devtools/draw-dependency-graphs.py

diff --git a/devtools/draw-dependency-graphs.py b/devtools/draw-dependency-graphs.py
new file mode 100755
index 0000000000..4fb765498d
--- /dev/null
+++ b/devtools/draw-dependency-graphs.py
@@ -0,0 +1,223 @@
+#! /usr/bin/env python3
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright(c) 2024 Intel Corporation
+
+import argparse
+import collections
+import sys
+import typing as T
+
+# typedef for dependency data types
+Deps = T.Set[str]
+DepData = T.Dict[str, T.Dict[str, T.Dict[bool, Deps]]]
+
+
+def parse_dep_line(line: str) -> T.Tuple[str, Deps, str, bool]:
+    """Parse digraph line into (component, {dependencies}, type, optional)."""
+    # extract attributes first
+    first, last = line.index("["), line.rindex("]")
+    edge_str, attr_str = line[:first], line[first + 1 : last]
+    # key=value, key=value, ...
+    attrs = {
+        key.strip('" '): value.strip('" ')
+        for attr_kv in attr_str.split(",")
+        for key, value in [attr_kv.strip().split("=", 1)]
+    }
+    # check if edge is defined as dotted line, meaning it's optional
+    optional = "dotted" in attrs.get("style", "")
+    try:
+        component_type = attrs["dpdk_componentType"]
+    except KeyError as _e:
+        raise ValueError(f"Error: missing component type: {line}") from _e
+
+    # now, extract component name and any of its dependencies
+    deps: T.Set[str] = set()
+    try:
+        component, deps_str = edge_str.strip('" ').split("->", 1)
+        component = component.strip().strip('" ')
+        deps_str = deps_str.strip().strip("{}")
+        deps = {d.strip('" ') for d in deps_str.split(",")}
+    except ValueError as _e:
+        component = edge_str.strip('" ')
+
+    return component, deps, component_type, optional
+
+
+def gen_dep_line(component: str, deps: T.Set[str], optional: bool) -> str:
+    """Generate a dependency line for a component."""
+    # we use dotted line to represent optional components
+    attr_str = ' [style="dotted"]' if optional else ""
+    dep_list_str = '", "'.join(deps)
+    deps_str = "" if not deps else f' -> {{ "{dep_list_str}" }}'
+    return f'    "{component}"{deps_str}{attr_str}\n'
+
+
+def read_deps_list(lines: T.List[str]) -> DepData:
+    """Read a list of dependency lines into a dictionary."""
+    deps_data: T.Dict[str, T.Any] = {}
+    for ln in lines:
+        if ln.startswith("digraph") or ln == "}":
+            continue
+
+        component, deps, component_type, optional = parse_dep_line(ln)
+
+        # each component will have two sets of dependencies - required and optional
+        c_dict = deps_data.setdefault(component_type, {}).setdefault(component, {})
+        c_dict[optional] = deps
+    return deps_data
+
+
+def create_classified_graph(deps_data: DepData) -> T.Iterator[str]:
+    """Create a graph of dependencies with components classified by type."""
+    yield "digraph dpdk_dependencies {\n  overlap=false\n  model=subset\n"
+    for n, deps_t in enumerate(deps_data.items()):
+        component_type, component_dict = deps_t
+        yield f'  subgraph cluster_{n} {{\n    label = "{component_type}"\n'
+        for component, optional_d in component_dict.items():
+            for optional, deps in optional_d.items():
+                yield gen_dep_line(component, deps, optional)
+        yield "  }\n"
+    yield "}\n"
+
+
+def parse_match(line: str, dep_data: DepData) -> T.List[str]:
+    """Extract list of components from a category string."""
+    # if this is not a compound string, we have very few valid choices
+    if "/" not in line:
+        # is this a category?
+        if line in dep_data:
+            return list(dep_data[line].keys())
+        # this isn't a category. maybe an app name?
+        maybe_app_name = f"dpdk-{line}"
+        if maybe_app_name in dep_data["app"]:
+            return [maybe_app_name]
+        if maybe_app_name in dep_data["examples"]:
+            return [maybe_app_name]
+        # this isn't an app name either, so just look for component with that name
+        for _, component_dict in dep_data.items():
+            if line in component_dict:
+                return [line]
+        # nothing found still. one last try: maybe it's a driver? we have to be careful though
+        # because a driver name may not be unique, e.g. common/iavf and net/iavf. so, only pick
+        # a driver if we can find exactly one driver that matches.
+        found_drivers: T.List[str] = []
+        for component in dep_data["drivers"].keys():
+            _, drv_name = component.split("_", 1)
+            if drv_name == line:
+                found_drivers.append(component)
+        if len(found_drivers) == 1:
+            return found_drivers
+        # we failed to find anything, report error
+        raise ValueError(f"Error: unknown component: {line}")
+
+    # this is a compound string, so we have to do some matching. we may have two or three levels
+    # of hierarchy, as driver/net/ice and net/ice should both be valid.
+
+    # if there are three levels of hierarchy, this must be a driver
+    try:
+        ctype, drv_class, drv_name = line.split("/", 2)
+        component_name = f"{drv_class}_{drv_name}"
+        # we want to directly access the dict to trigger KeyError, and not catch them here
+        if component_name in dep_data[ctype]:
+            return [component_name]
+        else:
+            raise KeyError(f"Unknown category: {line}")
+    except ValueError:
+        # not three levels of hierarchy, try two
+        pass
+
+    first, second = line.split("/", 1)
+
+    # this could still be a driver, just without the "drivers" prefix
+    for component in dep_data["drivers"].keys():
+        if component == f"{first}_{second}":
+            return [component]
+    # could be driver wildcard, e.g. drivers/net
+    if first == "drivers":
+        drv_match: T.List[str] = [
+            drv_name
+            for drv_name in dep_data["drivers"]
+            if drv_name.startswith(f"{second}_")
+        ]
+        if drv_match:
+            return drv_match
+    # may be category + component
+    if first in dep_data:
+        # go through all components in the category
+        if second in dep_data[first]:
+            return [second]
+        # if it's an app or an example, it may have "dpdk-" in front
+        if first in ["app", "examples"]:
+            maybe_app_name = f"dpdk-{second}"
+            if maybe_app_name in dep_data[first]:
+                return [maybe_app_name]
+    # and nothing of value was found
+    raise ValueError(f"Error: unknown component: {line}")
+
+
+def filter_deps(dep_data: DepData, criteria: T.List[str]) -> None:
+    """Filter dependency data to include only specified components."""
+    # this is a two step process: when we get a list of components, we need to
+    # go through all of them and note any dependencies they have, and expand the
+    # list of components with those dependencies. then we filter.
+
+    # walk the dependency list and include all possible dependencies
+    deps_seen: Deps = set()
+    deps_stack = collections.deque(criteria)
+    while deps_stack:
+        component = deps_stack.popleft()
+        if component in deps_seen:
+            continue
+        deps_seen.add(component)
+        for component_type, component_dict in dep_data.items():
+            try:
+                deps = component_dict[component]
+            except KeyError:
+                # wrong component type
+                continue
+            for _, dep_list in deps.items():
+                deps_stack.extend(dep_list)
+    criteria += list(deps_seen)
+
+    # now, "components" has all the dependencies we need to include, so we can filter
+    for component_type, component_dict in dep_data.items():
+        dep_data[component_type] = {
+            component: deps
+            for component, deps in component_dict.items()
+            if component in criteria
+        }
+
+
+def main():
+    parser = argparse.ArgumentParser(
+        description="Utility to generate dependency tree graphs for DPDK"
+    )
+    parser.add_argument(
+        "--match",
+        type=str,
+        help="Output hierarchy for component or category, e.g. net/ice, lib, app, drivers/net, etc.",
+    )
+    parser.add_argument(
+        "input_file",
+        type=argparse.FileType("r"),
+        help="Path to the deps.dot file from a DPDK build directory",
+    )
+    parser.add_argument(
+        "output_file",
+        type=argparse.FileType("w"),
+        help="Path to the desired output dot file",
+    )
+    args = parser.parse_args()
+
+    deps = read_deps_list([ln.strip() for ln in args.input_file.readlines()])
+    if args.match:
+        try:
+            filter_deps(deps, parse_match(args.match, deps))
+        except (KeyError, ValueError) as e:
+            print(e, file=sys.stderr)
+            return
+    args.output_file.writelines(create_classified_graph(deps))
+
+
+if __name__ == "__main__":
+    main()
-- 
2.43.5


^ permalink raw reply	[flat|nested] 54+ messages in thread

* RE: [PATCH v3 0/8] record and rework component dependencies
  2024-09-04 15:08 ` [PATCH v3 0/8] " Anatoly Burakov
                     ` (7 preceding siblings ...)
  2024-09-04 15:08   ` [PATCH v3 8/8] devtools: add script to generate DPDK dependency graphs Anatoly Burakov
@ 2024-09-05  6:05   ` Morten Brørup
  2024-11-26 14:39   ` [PATCH v4 0/8] Record " Anatoly Burakov
  2024-11-27 14:56   ` [PATCH v5 " Anatoly Burakov
  10 siblings, 0 replies; 54+ messages in thread
From: Morten Brørup @ 2024-09-05  6:05 UTC (permalink / raw)
  To: Anatoly Burakov, bruce.richardson; +Cc: dev

> From: Anatoly Burakov [mailto:anatoly.burakov@intel.com]
> 
> As part of the meson build, we can record the dependencies for each
> component as we process it, logging them to a file. This file can be
> used as input to a number of other scripts and tools, for example, to
> graph the dependencies, or to allow higher-level build-config tools to
> automatically enable component requirements, etc.
> 
> The first patch of this set separates dependencies inside meson into
> optional or mandatory. The second patch of this set generates the basic
> dependency tree. The third patch does some processing of that dependency
> tree to identify cases where dependencies are being unnecessarily
> specified. Reducing these makes it easier to have readable dependency
> graphs in future, without affecting the build.
> 
> The following 4 patches are based on the output of the second patch, and
> greatly cut down the number of direct dependency links between
> components. Even with the cut-down dependencies, the full dependency
> graph is nigh-unreadable, so the final patch adds a new script to
> generate dependency tree subgraphs, creating dot files for e.g. the
> dependencies of a particular component, or a component class such as
> mempool drivers.
> 

For the series,
Acked-by: Morten Brørup <mb@smartsharesystems.com>


^ permalink raw reply	[flat|nested] 54+ messages in thread

* Re: [PATCH v3 1/8] build: split dependencies into mandatory and optional
  2024-09-04 15:08   ` [PATCH v3 1/8] build: split dependencies into mandatory and optional Anatoly Burakov
@ 2024-09-06 14:51     ` Bruce Richardson
  2024-09-09  8:41       ` Burakov, Anatoly
  0 siblings, 1 reply; 54+ messages in thread
From: Bruce Richardson @ 2024-09-06 14:51 UTC (permalink / raw)
  To: Anatoly Burakov
  Cc: dev, Reshma Pattan, Nicolas Chautru, Brian Dooley, Aman Singh,
	Akhil Goyal, Fan Zhang, David Hunt, Sivaprasad Tummala

On Wed, Sep 04, 2024 at 04:08:29PM +0100, Anatoly Burakov wrote:
> Allow specifying dependencies as either mandatory or optional. This does
> not change anything about the build, but it is useful for tooling to know
> if a dependency is required or not.
>

Ideally we probably want to merge the support in this patch with the idea
expressed in [1]

/Bruce

[1] https://patches.dpdk.org/project/dpdk/patch/20231220142152.492556-4-bruce.richardson@intel.com/

> Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com>
> ---
>  app/meson.build                       |  3 ++-
>  app/proc-info/meson.build             |  2 +-
>  app/test-bbdev/meson.build            |  8 ++++----
>  app/test-crypto-perf/meson.build      |  2 +-
>  app/test-pmd/meson.build              | 26 +++++++++++++-------------
>  app/test/meson.build                  | 12 ++++++------
>  drivers/meson.build                   |  3 ++-
>  examples/ethtool/meson.build          |  2 +-
>  examples/l2fwd-crypto/meson.build     |  2 +-
>  examples/l3fwd/meson.build            |  2 +-
>  examples/meson.build                  |  3 ++-
>  examples/vm_power_manager/meson.build |  6 +++---
>  lib/meson.build                       |  3 ++-
>  13 files changed, 39 insertions(+), 35 deletions(-)
> 
> diff --git a/app/meson.build b/app/meson.build
> index 5b2c80c7a1..1c61cd862c 100644
> --- a/app/meson.build
> +++ b/app/meson.build
> @@ -65,6 +65,7 @@ foreach app:apps
>      # external package/library requirements
>      ext_deps = []
>      deps = []
> +    optional_deps = []
>  
>      if not enable_apps.contains(app)
>          build = false
> @@ -84,7 +85,7 @@ foreach app:apps
>  
>      if build
>          dep_objs = []
> -        foreach d:deps
> +        foreach d:deps + optional_deps
>              var_name = get_option('default_library') + '_rte_' + d
>              if not is_variable(var_name)
>                  build = false
> diff --git a/app/proc-info/meson.build b/app/proc-info/meson.build
> index 4f83f29a64..156592119b 100644
> --- a/app/proc-info/meson.build
> +++ b/app/proc-info/meson.build
> @@ -10,5 +10,5 @@ endif
>  sources = files('main.c')
>  deps += ['ethdev', 'security', 'eventdev']
>  if dpdk_conf.has('RTE_LIB_METRICS')
> -    deps += 'metrics'
> +    optional_deps += 'metrics'
>  endif
> diff --git a/app/test-bbdev/meson.build b/app/test-bbdev/meson.build
> index 926e0a5271..c26e46a987 100644
> --- a/app/test-bbdev/meson.build
> +++ b/app/test-bbdev/meson.build
> @@ -15,14 +15,14 @@ sources = files(
>  )
>  deps += ['bbdev', 'bus_vdev']
>  if dpdk_conf.has('RTE_BASEBAND_FPGA_LTE_FEC')
> -    deps += ['baseband_fpga_lte_fec']
> +    optional_deps += ['baseband_fpga_lte_fec']
>  endif
>  if dpdk_conf.has('RTE_BASEBAND_FPGA_5GNR_FEC')
> -    deps += ['baseband_fpga_5gnr_fec']
> +    optional_deps += ['baseband_fpga_5gnr_fec']
>  endif
>  if dpdk_conf.has('RTE_BASEBAND_ACC')
> -    deps += ['baseband_acc']
> +    optional_deps += ['baseband_acc']
>  endif
>  if dpdk_conf.has('RTE_BASEBAND_LA12XX')
> -    deps += ['baseband_la12xx']
> +    optional_deps += ['baseband_la12xx']
>  endif
> diff --git a/app/test-crypto-perf/meson.build b/app/test-crypto-perf/meson.build
> index 7b02b518f0..05c71e0a0c 100644
> --- a/app/test-crypto-perf/meson.build
> +++ b/app/test-crypto-perf/meson.build
> @@ -21,5 +21,5 @@ sources = files(
>  )
>  deps += ['cryptodev', 'net', 'security']
>  if dpdk_conf.has('RTE_CRYPTO_SCHEDULER')
> -    deps += 'crypto_scheduler'
> +    optional_deps += 'crypto_scheduler'
>  endif
> diff --git a/app/test-pmd/meson.build b/app/test-pmd/meson.build
> index 719f875be0..5559829e09 100644
> --- a/app/test-pmd/meson.build
> +++ b/app/test-pmd/meson.build
> @@ -36,44 +36,44 @@ endif
>  
>  deps += ['ethdev', 'cmdline']
>  if dpdk_conf.has('RTE_CRYPTO_SCHEDULER')
> -    deps += 'crypto_scheduler'
> +    optional_deps += 'crypto_scheduler'
>  endif
>  if dpdk_conf.has('RTE_LIB_BITRATESTATS')
> -    deps += 'bitratestats'
> +    optional_deps += 'bitratestats'
>  endif
>  if dpdk_conf.has('RTE_LIB_BPF')
>      sources += files('bpf_cmd.c')
> -    deps += 'bpf'
> +    optional_deps += 'bpf'
>  endif
>  if dpdk_conf.has('RTE_LIB_GRO')
> -    deps += 'gro'
> +    optional_deps += 'gro'
>  endif
>  if dpdk_conf.has('RTE_LIB_GSO')
> -    deps += 'gso'
> +    optional_deps += 'gso'
>  endif
>  if dpdk_conf.has('RTE_LIB_LATENCYSTATS')
> -    deps += 'latencystats'
> +    optional_deps += 'latencystats'
>  endif
>  if dpdk_conf.has('RTE_LIB_METRICS')
> -    deps += 'metrics'
> +    optional_deps += 'metrics'
>  endif
>  if dpdk_conf.has('RTE_LIB_PDUMP')
> -    deps += 'pdump'
> +    optional_deps += 'pdump'
>  endif
>  if dpdk_conf.has('RTE_NET_BNXT')
> -    deps += 'net_bnxt'
> +    optional_deps += 'net_bnxt'
>  endif
>  if dpdk_conf.has('RTE_NET_I40E')
> -    deps += 'net_i40e'
> +    optional_deps += 'net_i40e'
>  endif
>  if dpdk_conf.has('RTE_NET_IXGBE')
> -    deps += 'net_ixgbe'
> +    optional_deps += 'net_ixgbe'
>  endif
>  if dpdk_conf.has('RTE_NET_DPAA')
> -    deps += ['bus_dpaa', 'mempool_dpaa', 'net_dpaa']
> +    optional_deps += ['bus_dpaa', 'mempool_dpaa', 'net_dpaa']
>  endif
>  
>  # Driver-specific commands are located in driver directories.
>  includes = include_directories('.')
>  sources += testpmd_drivers_sources
> -deps += testpmd_drivers_deps
> +optional_deps += testpmd_drivers_deps
> diff --git a/app/test/meson.build b/app/test/meson.build
> index e29258e6ec..bb0a38b3a5 100644
> --- a/app/test/meson.build
> +++ b/app/test/meson.build
> @@ -7,7 +7,7 @@ sources += files('commands.c', 'test.c')
>  
>  # optional dependencies: some files may use these - and so we should link them in -
>  # but do not explicitly require them so they are not listed in the per-file lists below
> -optional_deps = ['crypto_scheduler', 'lpm']
> +opt_deps = ['crypto_scheduler', 'lpm']
>  
>  # some other utility C files, providing functions used by various tests
>  # so we need to include these deps in the dependency list for the files using those fns.
> @@ -217,8 +217,8 @@ foreach f, f_deps : source_file_deps
>              break
>          else
>              # technically we might not need this dep, but adding it is harmless
> -            if d not in deps
> -                deps += d
> +            if d not in optional_deps
> +                optional_deps += d
>              endif
>          endif
>      endforeach
> @@ -239,9 +239,9 @@ foreach f, f_deps : source_file_deps
>      endif
>  endforeach
>  # add the optional dependencies
> -foreach d:optional_deps
> -    if is_variable(def_lib + '_rte_' + d) and d not in deps
> -        deps += d
> +foreach d:opt_deps
> +    if is_variable(def_lib + '_rte_' + d) and d not in optional_deps
> +        optional_deps += d
>      endif
>  endforeach
>  
> diff --git a/drivers/meson.build b/drivers/meson.build
> index 66931d4241..b9a18a5986 100644
> --- a/drivers/meson.build
> +++ b/drivers/meson.build
> @@ -128,6 +128,7 @@ foreach subpath:subdirs
>          includes = [include_directories(drv_path)]
>          # set up internal deps. Drivers can append/override as necessary
>          deps = std_deps
> +        optional_deps = []
>          # ext_deps: Stores external library dependency got
>          # using dependency() (preferred) or find_library().
>          # For the find_library() case (but not with dependency()) we also
> @@ -169,7 +170,7 @@ foreach subpath:subdirs
>              # get dependency objs from strings
>              shared_deps = ext_deps
>              static_deps = ext_deps
> -            foreach d:deps
> +            foreach d:deps + optional_deps
>                  if not build
>                      break
>                  endif
> diff --git a/examples/ethtool/meson.build b/examples/ethtool/meson.build
> index d7f63d48af..e8638a8607 100644
> --- a/examples/ethtool/meson.build
> +++ b/examples/ethtool/meson.build
> @@ -20,7 +20,7 @@ includes = include_directories('lib', 'ethtool-app')
>  
>  deps += 'bus_pci'
>  if dpdk_conf.has('RTE_NET_IXGBE')
> -    deps += 'net_ixgbe'
> +    optional_deps += 'net_ixgbe'
>  endif
>  
>  allow_experimental_apis = true
> diff --git a/examples/l2fwd-crypto/meson.build b/examples/l2fwd-crypto/meson.build
> index bb44c88882..f16ebadc74 100644
> --- a/examples/l2fwd-crypto/meson.build
> +++ b/examples/l2fwd-crypto/meson.build
> @@ -8,7 +8,7 @@
>  
>  deps += 'cryptodev'
>  if dpdk_conf.has('RTE_CRYPTO_SCHEDULER')
> -    deps += 'crypto_scheduler'
> +    optional_deps += 'crypto_scheduler'
>  endif
>  allow_experimental_apis = true
>  sources = files(
> diff --git a/examples/l3fwd/meson.build b/examples/l3fwd/meson.build
> index c25de77bba..5938452607 100644
> --- a/examples/l3fwd/meson.build
> +++ b/examples/l3fwd/meson.build
> @@ -19,5 +19,5 @@ sources = files(
>          'main.c',
>  )
>  if dpdk_conf.has('RTE_LIB_EVENTDEV')
> -    deps += 'eventdev'
> +    optional_deps += 'eventdev'
>  endif
> diff --git a/examples/meson.build b/examples/meson.build
> index 8e8968a1fa..82151d09b4 100644
> --- a/examples/meson.build
> +++ b/examples/meson.build
> @@ -98,11 +98,12 @@ foreach example: examples
>      ext_deps = []
>      includes = [include_directories(example, 'common')]
>      deps = ['eal', 'mempool', 'net', 'mbuf', 'ethdev', 'cmdline']
> +    optional_deps = []
>      subdir(example)
>  
>      if build
>          dep_objs = ext_deps
> -        foreach d:deps
> +        foreach d:deps + optional_deps
>              var_name = get_option('default_library') + '_rte_' + d
>              if not is_variable(var_name)
>                  build = false
> diff --git a/examples/vm_power_manager/meson.build b/examples/vm_power_manager/meson.build
> index b866d8fd54..25e5bcb71b 100644
> --- a/examples/vm_power_manager/meson.build
> +++ b/examples/vm_power_manager/meson.build
> @@ -9,15 +9,15 @@
>  deps += ['power']
>  
>  if dpdk_conf.has('RTE_NET_BNXT')
> -    deps += ['net_bnxt']
> +    optional_deps += ['net_bnxt']
>  endif
>  
>  if dpdk_conf.has('RTE_NET_I40E')
> -    deps += ['net_i40e']
> +    optional_deps += ['net_i40e']
>  endif
>  
>  if dpdk_conf.has('RTE_NET_IXGBE')
> -    deps += ['net_ixgbe']
> +    optional_deps += ['net_ixgbe']
>  endif
>  
>  allow_experimental_apis = true
> diff --git a/lib/meson.build b/lib/meson.build
> index 162287753f..7916deadd9 100644
> --- a/lib/meson.build
> +++ b/lib/meson.build
> @@ -134,6 +134,7 @@ foreach l:libraries
>      # external package/library requirements
>      ext_deps = []
>      deps = []
> +    optional_deps = []
>      # eal is standard dependency once built
>      if dpdk_conf.has('RTE_LIB_EAL')
>          deps += ['eal']
> @@ -171,7 +172,7 @@ foreach l:libraries
>  
>      shared_deps = ext_deps
>      static_deps = ext_deps
> -    foreach d:deps
> +    foreach d:deps + optional_deps
>          if not build
>              break
>          endif
> -- 
> 2.43.5
> 

^ permalink raw reply	[flat|nested] 54+ messages in thread

* Re: [PATCH v3 1/8] build: split dependencies into mandatory and optional
  2024-09-06 14:51     ` Bruce Richardson
@ 2024-09-09  8:41       ` Burakov, Anatoly
  2024-09-09  9:01         ` Bruce Richardson
  0 siblings, 1 reply; 54+ messages in thread
From: Burakov, Anatoly @ 2024-09-09  8:41 UTC (permalink / raw)
  To: Bruce Richardson
  Cc: dev, Reshma Pattan, Nicolas Chautru, Brian Dooley, Aman Singh,
	Akhil Goyal, Fan Zhang, David Hunt, Sivaprasad Tummala

On 9/6/2024 4:51 PM, Bruce Richardson wrote:
> On Wed, Sep 04, 2024 at 04:08:29PM +0100, Anatoly Burakov wrote:
>> Allow specifying dependencies as either mandatory or optional. This does
>> not change anything about the build, but it is useful for tooling to know
>> if a dependency is required or not.
>>
> 
> Ideally we probably want to merge the support in this patch with the idea
> expressed in [1]
> 
> /Bruce
> 
> [1] https://patches.dpdk.org/project/dpdk/patch/20231220142152.492556-4-bruce.richardson@intel.com/

Hi Bruce,

Please correct me if I'm wrong, but doesn't it essentially do the same 
thing? You're adding a new loop over optional deps, while I'm simply 
extending existing loop to iterate over deps + optional deps, which 
would achieve the same thing?

What does that patch do that this patch doesn't?

-- 
Thanks,
Anatoly


^ permalink raw reply	[flat|nested] 54+ messages in thread

* Re: [PATCH v3 1/8] build: split dependencies into mandatory and optional
  2024-09-09  8:41       ` Burakov, Anatoly
@ 2024-09-09  9:01         ` Bruce Richardson
  0 siblings, 0 replies; 54+ messages in thread
From: Bruce Richardson @ 2024-09-09  9:01 UTC (permalink / raw)
  To: Burakov, Anatoly
  Cc: dev, Reshma Pattan, Nicolas Chautru, Brian Dooley, Aman Singh,
	Akhil Goyal, Fan Zhang, David Hunt, Sivaprasad Tummala

On Mon, Sep 09, 2024 at 10:41:25AM +0200, Burakov, Anatoly wrote:
> On 9/6/2024 4:51 PM, Bruce Richardson wrote:
> > On Wed, Sep 04, 2024 at 04:08:29PM +0100, Anatoly Burakov wrote:
> > > Allow specifying dependencies as either mandatory or optional. This does
> > > not change anything about the build, but it is useful for tooling to know
> > > if a dependency is required or not.
> > > 
> > 
> > Ideally we probably want to merge the support in this patch with the idea
> > expressed in [1]
> > 
> > /Bruce
> > 
> > [1] https://patches.dpdk.org/project/dpdk/patch/20231220142152.492556-4-bruce.richardson@intel.com/
> 
> Hi Bruce,
> 
> Please correct me if I'm wrong, but doesn't it essentially do the same
> thing? You're adding a new loop over optional deps, while I'm simply
> extending existing loop to iterate over deps + optional deps, which would
> achieve the same thing?
> 
> What does that patch do that this patch doesn't?
> 
Your patch categorises the dependencies into optional and mandatory but
doesn't actually change any code flow logic. My patch doesn't do the
classification changes in the individual components, but changes the higher
level meson.build file to do the checks for optional dependencies and only
add them if they are present. That is, it removes the need for individual
components to check for the optional deps themselves and add them if found.

/Bruce

^ permalink raw reply	[flat|nested] 54+ messages in thread

* [PATCH v4 0/8] Record and rework component dependencies
  2024-09-04 15:08 ` [PATCH v3 0/8] " Anatoly Burakov
                     ` (8 preceding siblings ...)
  2024-09-05  6:05   ` [PATCH v3 0/8] record and rework component dependencies Morten Brørup
@ 2024-11-26 14:39   ` Anatoly Burakov
  2024-11-26 14:39     ` [PATCH v4 1/8] build: split dependencies into mandatory and optional Anatoly Burakov
                       ` (8 more replies)
  2024-11-27 14:56   ` [PATCH v5 " Anatoly Burakov
  10 siblings, 9 replies; 54+ messages in thread
From: Anatoly Burakov @ 2024-11-26 14:39 UTC (permalink / raw)
  To: dev

As part of the meson build, we can record the dependencies for each
component as we process it, logging them to a file. This file can be
used as input to a number of other scripts and tools, for example, to
graph the dependencies, or to allow higher-level build-config tools to
automatically enable component requirements, etc.

The first patch of this set separates dependencies inside meson into
optional or mandatory. The second patch of this set generates the basic
dependency tree. The third patch does some processing of that dependency
tree to identify cases where dependencies are being unnecessarily
specified. Reducing these makes it easier to have readable dependency
graphs in future, without affecting the build.

The following 4 patches are based on the output of the second patch, and
greatly cut down the number of direct dependency links between
components. Even with the cut-down dependencies, the full dependency
graph is nigh-unreadable, so the final patch adds a new script to
generate dependency tree subgraphs, creating dot files for e.g. the
dependencies of a particular component, or a component class such as
mempool drivers.

v3 -> v4:
- Update to latest main

v2 -> v3:
- Split dependencies into optional and mandatory
- Fixup graph scripts to read and generate graphs that encode optional
  dependencies into the graph
- Python version fixes to avoid using features not available in minimum
  supported Python version
- Formatting with Ruff, and PEP-484 compliance

Anatoly Burakov (1):
  build: split dependencies into mandatory and optional

Bruce Richardson (7):
  build: output a dependency log in build directory
  devtools: add script to flag unneeded dependencies
  build: remove kvargs from driver class dependencies
  build: reduce library dependencies
  build: reduce driver dependencies
  build: reduce app dependencies
  devtools: add script to generate DPDK dependency graphs

 app/dumpcap/meson.build                    |   2 +-
 app/graph/meson.build                      |   2 +-
 app/meson.build                            |  11 +-
 app/pdump/meson.build                      |   2 +-
 app/proc-info/meson.build                  |   4 +-
 app/test-bbdev/meson.build                 |   8 +-
 app/test-crypto-perf/meson.build           |   4 +-
 app/test-fib/meson.build                   |   2 +-
 app/test-pmd/meson.build                   |  26 +--
 app/test-sad/meson.build                   |   2 +-
 app/test/meson.build                       |  14 +-
 buildtools/log-deps.py                     |  81 ++++++++
 buildtools/meson.build                     |   2 +
 devtools/draw-dependency-graphs.py         | 223 +++++++++++++++++++++
 devtools/find-duplicate-deps.py            |  53 +++++
 drivers/baseband/fpga_5gnr_fec/meson.build |   2 +-
 drivers/baseband/fpga_lte_fec/meson.build  |   2 +-
 drivers/baseband/la12xx/meson.build        |   2 +-
 drivers/baseband/null/meson.build          |   2 +-
 drivers/baseband/turbo_sw/meson.build      |   2 +-
 drivers/bus/auxiliary/meson.build          |   2 -
 drivers/bus/dpaa/meson.build               |   2 +-
 drivers/bus/fslmc/meson.build              |   2 +-
 drivers/bus/ifpga/meson.build              |   2 +-
 drivers/bus/pci/meson.build                |   4 +-
 drivers/bus/platform/meson.build           |   1 -
 drivers/bus/uacce/meson.build              |   2 -
 drivers/bus/vdev/meson.build               |   2 -
 drivers/common/cnxk/meson.build            |   4 +-
 drivers/common/cpt/meson.build             |   2 +-
 drivers/common/idpf/meson.build            |   2 +-
 drivers/common/mlx5/meson.build            |   2 +-
 drivers/compress/mlx5/meson.build          |   2 +-
 drivers/compress/nitrox/meson.build        |   2 +-
 drivers/compress/octeontx/meson.build      |   2 +-
 drivers/crypto/bcmfs/meson.build           |   2 +-
 drivers/crypto/cnxk/meson.build            |   2 +-
 drivers/crypto/dpaa_sec/meson.build        |   2 +-
 drivers/crypto/ipsec_mb/meson.build        |   2 +-
 drivers/crypto/mlx5/meson.build            |   2 +-
 drivers/crypto/nitrox/meson.build          |   2 +-
 drivers/dma/cnxk/meson.build               |   2 +-
 drivers/dma/dpaa/meson.build               |   2 +-
 drivers/dma/dpaa2/meson.build              |   2 +-
 drivers/dma/odm/meson.build                |   2 +-
 drivers/dma/skeleton/meson.build           |   2 +-
 drivers/event/cnxk/meson.build             |   2 +-
 drivers/event/dlb2/meson.build             |   2 +-
 drivers/event/dpaa2/meson.build            |   2 +-
 drivers/event/meson.build                  |   2 +-
 drivers/event/octeontx/meson.build         |   3 +-
 drivers/event/sw/meson.build               |   2 +-
 drivers/mempool/cnxk/meson.build           |   2 +-
 drivers/mempool/dpaa/meson.build           |   2 +-
 drivers/mempool/dpaa2/meson.build          |   2 +-
 drivers/mempool/octeontx/meson.build       |   2 +-
 drivers/meson.build                        |   9 +-
 drivers/net/cnxk/meson.build               |   4 +-
 drivers/net/iavf/meson.build               |   2 +-
 drivers/net/ice/meson.build                |   2 +-
 drivers/net/mana/meson.build               |   2 +-
 drivers/net/meson.build                    |   2 +-
 drivers/net/mlx5/meson.build               |   2 +-
 drivers/net/sfc/meson.build                |   2 +-
 drivers/net/softnic/meson.build            |   2 +-
 drivers/raw/cnxk_bphy/meson.build          |   2 +-
 drivers/raw/cnxk_gpio/meson.build          |   2 +-
 drivers/raw/ntb/meson.build                |   2 +-
 drivers/raw/skeleton/meson.build           |   2 +-
 drivers/regex/meson.build                  |   2 +-
 drivers/regex/mlx5/meson.build             |   2 +-
 drivers/vdpa/ifc/meson.build               |   2 +-
 drivers/vdpa/meson.build                   |   3 +-
 drivers/vdpa/mlx5/meson.build              |   2 +-
 drivers/vdpa/sfc/meson.build               |   2 +-
 examples/ethtool/meson.build               |   2 +-
 examples/l2fwd-crypto/meson.build          |   2 +-
 examples/l3fwd/meson.build                 |   2 +-
 examples/meson.build                       |  11 +-
 examples/vm_power_manager/meson.build      |   6 +-
 lib/argparse/meson.build                   |   2 +-
 lib/bbdev/meson.build                      |   2 +-
 lib/bitratestats/meson.build               |   2 +-
 lib/bpf/meson.build                        |   2 +-
 lib/cmdline/meson.build                    |   2 +-
 lib/compressdev/meson.build                |   2 +-
 lib/cryptodev/meson.build                  |   2 +-
 lib/dispatcher/meson.build                 |   2 +-
 lib/distributor/meson.build                |   2 +-
 lib/dmadev/meson.build                     |   2 -
 lib/eal/meson.build                        |   5 +-
 lib/efd/meson.build                        |   2 +-
 lib/ethdev/meson.build                     |   2 +-
 lib/eventdev/meson.build                   |   3 +-
 lib/fib/meson.build                        |   4 +-
 lib/gpudev/meson.build                     |   2 +-
 lib/graph/meson.build                      |   2 +-
 lib/gro/meson.build                        |   2 +-
 lib/gso/meson.build                        |   2 +-
 lib/hash/meson.build                       |   4 +-
 lib/ip_frag/meson.build                    |   2 +-
 lib/ipsec/meson.build                      |   2 +-
 lib/kvargs/meson.build                     |   2 +-
 lib/latencystats/meson.build               |   2 +-
 lib/lpm/meson.build                        |   3 +-
 lib/mbuf/meson.build                       |   2 +-
 lib/member/meson.build                     |   2 +-
 lib/mempool/meson.build                    |   2 +-
 lib/meson.build                            |   8 +-
 lib/metrics/meson.build                    |   2 +-
 lib/mldev/meson.build                      |   2 +-
 lib/net/meson.build                        |   2 +-
 lib/node/meson.build                       |   2 +-
 lib/pcapng/meson.build                     |   2 +-
 lib/pdcp/meson.build                       |   2 +-
 lib/pdump/meson.build                      |   2 +-
 lib/pipeline/meson.build                   |   2 +-
 lib/port/meson.build                       |   2 +-
 lib/power/meson.build                      |   3 +-
 lib/rawdev/meson.build                     |   2 -
 lib/rcu/meson.build                        |   2 +-
 lib/regexdev/meson.build                   |   2 +-
 lib/reorder/meson.build                    |   2 +-
 lib/rib/meson.build                        |   2 +-
 lib/ring/meson.build                       |   1 -
 lib/sched/meson.build                      |   2 +-
 lib/security/meson.build                   |   2 +-
 lib/table/meson.build                      |   2 +-
 lib/telemetry/meson.build                  |   2 +-
 lib/vhost/meson.build                      |   2 +-
 130 files changed, 533 insertions(+), 175 deletions(-)
 create mode 100644 buildtools/log-deps.py
 create mode 100755 devtools/draw-dependency-graphs.py
 create mode 100755 devtools/find-duplicate-deps.py

-- 
2.43.5


^ permalink raw reply	[flat|nested] 54+ messages in thread

* [PATCH v4 1/8] build: split dependencies into mandatory and optional
  2024-11-26 14:39   ` [PATCH v4 0/8] Record " Anatoly Burakov
@ 2024-11-26 14:39     ` Anatoly Burakov
  2024-11-26 14:39     ` [PATCH v4 2/8] build: output a dependency log in build directory Anatoly Burakov
                       ` (7 subsequent siblings)
  8 siblings, 0 replies; 54+ messages in thread
From: Anatoly Burakov @ 2024-11-26 14:39 UTC (permalink / raw)
  To: dev, Reshma Pattan, Nicolas Chautru, Brian Dooley, Aman Singh,
	Akhil Goyal, Fan Zhang, David Hunt, Sivaprasad Tummala

Allow specifying dependencies as either mandatory or optional. This does
not change anything about the build, but it is useful for tooling to know
if a dependency is required or not.

Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com>
---
 app/meson.build                       |  3 ++-
 app/proc-info/meson.build             |  2 +-
 app/test-bbdev/meson.build            |  8 ++++----
 app/test-crypto-perf/meson.build      |  2 +-
 app/test-pmd/meson.build              | 26 +++++++++++++-------------
 app/test/meson.build                  | 12 ++++++------
 drivers/meson.build                   |  3 ++-
 examples/ethtool/meson.build          |  2 +-
 examples/l2fwd-crypto/meson.build     |  2 +-
 examples/l3fwd/meson.build            |  2 +-
 examples/meson.build                  |  3 ++-
 examples/vm_power_manager/meson.build |  6 +++---
 lib/meson.build                       |  3 ++-
 13 files changed, 39 insertions(+), 35 deletions(-)

diff --git a/app/meson.build b/app/meson.build
index e2db888ae1..4e88e652ca 100644
--- a/app/meson.build
+++ b/app/meson.build
@@ -66,6 +66,7 @@ foreach app:apps
     # external package/library requirements
     ext_deps = []
     deps = []
+    optional_deps = []
 
     if not enable_apps.contains(app)
         build = false
@@ -85,7 +86,7 @@ foreach app:apps
 
     if build
         dep_objs = []
-        foreach d:deps
+        foreach d:deps + optional_deps
             var_name = get_option('default_library') + '_rte_' + d
             if not is_variable(var_name)
                 build = false
diff --git a/app/proc-info/meson.build b/app/proc-info/meson.build
index 4f83f29a64..156592119b 100644
--- a/app/proc-info/meson.build
+++ b/app/proc-info/meson.build
@@ -10,5 +10,5 @@ endif
 sources = files('main.c')
 deps += ['ethdev', 'security', 'eventdev']
 if dpdk_conf.has('RTE_LIB_METRICS')
-    deps += 'metrics'
+    optional_deps += 'metrics'
 endif
diff --git a/app/test-bbdev/meson.build b/app/test-bbdev/meson.build
index 926e0a5271..c26e46a987 100644
--- a/app/test-bbdev/meson.build
+++ b/app/test-bbdev/meson.build
@@ -15,14 +15,14 @@ sources = files(
 )
 deps += ['bbdev', 'bus_vdev']
 if dpdk_conf.has('RTE_BASEBAND_FPGA_LTE_FEC')
-    deps += ['baseband_fpga_lte_fec']
+    optional_deps += ['baseband_fpga_lte_fec']
 endif
 if dpdk_conf.has('RTE_BASEBAND_FPGA_5GNR_FEC')
-    deps += ['baseband_fpga_5gnr_fec']
+    optional_deps += ['baseband_fpga_5gnr_fec']
 endif
 if dpdk_conf.has('RTE_BASEBAND_ACC')
-    deps += ['baseband_acc']
+    optional_deps += ['baseband_acc']
 endif
 if dpdk_conf.has('RTE_BASEBAND_LA12XX')
-    deps += ['baseband_la12xx']
+    optional_deps += ['baseband_la12xx']
 endif
diff --git a/app/test-crypto-perf/meson.build b/app/test-crypto-perf/meson.build
index 7b02b518f0..05c71e0a0c 100644
--- a/app/test-crypto-perf/meson.build
+++ b/app/test-crypto-perf/meson.build
@@ -21,5 +21,5 @@ sources = files(
 )
 deps += ['cryptodev', 'net', 'security']
 if dpdk_conf.has('RTE_CRYPTO_SCHEDULER')
-    deps += 'crypto_scheduler'
+    optional_deps += 'crypto_scheduler'
 endif
diff --git a/app/test-pmd/meson.build b/app/test-pmd/meson.build
index f1c36529b4..1b54e479fe 100644
--- a/app/test-pmd/meson.build
+++ b/app/test-pmd/meson.build
@@ -37,44 +37,44 @@ endif
 
 deps += ['ethdev', 'cmdline']
 if dpdk_conf.has('RTE_CRYPTO_SCHEDULER')
-    deps += 'crypto_scheduler'
+    optional_deps += 'crypto_scheduler'
 endif
 if dpdk_conf.has('RTE_LIB_BITRATESTATS')
-    deps += 'bitratestats'
+    optional_deps += 'bitratestats'
 endif
 if dpdk_conf.has('RTE_LIB_BPF')
     sources += files('bpf_cmd.c')
-    deps += 'bpf'
+    optional_deps += 'bpf'
 endif
 if dpdk_conf.has('RTE_LIB_GRO')
-    deps += 'gro'
+    optional_deps += 'gro'
 endif
 if dpdk_conf.has('RTE_LIB_GSO')
-    deps += 'gso'
+    optional_deps += 'gso'
 endif
 if dpdk_conf.has('RTE_LIB_LATENCYSTATS')
-    deps += 'latencystats'
+    optional_deps += 'latencystats'
 endif
 if dpdk_conf.has('RTE_LIB_METRICS')
-    deps += 'metrics'
+    optional_deps += 'metrics'
 endif
 if dpdk_conf.has('RTE_LIB_PDUMP')
-    deps += 'pdump'
+    optional_deps += 'pdump'
 endif
 if dpdk_conf.has('RTE_NET_BNXT')
-    deps += 'net_bnxt'
+    optional_deps += 'net_bnxt'
 endif
 if dpdk_conf.has('RTE_NET_I40E')
-    deps += 'net_i40e'
+    optional_deps += 'net_i40e'
 endif
 if dpdk_conf.has('RTE_NET_IXGBE')
-    deps += 'net_ixgbe'
+    optional_deps += 'net_ixgbe'
 endif
 if dpdk_conf.has('RTE_NET_DPAA')
-    deps += ['bus_dpaa', 'mempool_dpaa', 'net_dpaa']
+    optional_deps += ['bus_dpaa', 'mempool_dpaa', 'net_dpaa']
 endif
 
 # Driver-specific commands are located in driver directories.
 includes = include_directories('.')
 sources += testpmd_drivers_sources
-deps += testpmd_drivers_deps
+optional_deps += testpmd_drivers_deps
diff --git a/app/test/meson.build b/app/test/meson.build
index d5cb6a7f7a..9383b241a5 100644
--- a/app/test/meson.build
+++ b/app/test/meson.build
@@ -7,7 +7,7 @@ sources += files('commands.c', 'test.c')
 
 # optional dependencies: some files may use these - and so we should link them in -
 # but do not explicitly require them so they are not listed in the per-file lists below
-optional_deps = ['crypto_scheduler', 'lpm']
+opt_deps = ['crypto_scheduler', 'lpm']
 
 # some other utility C files, providing functions used by various tests
 # so we need to include these deps in the dependency list for the files using those fns.
@@ -219,8 +219,8 @@ foreach f, f_deps : source_file_deps
             break
         else
             # technically we might not need this dep, but adding it is harmless
-            if d not in deps
-                deps += d
+            if d not in optional_deps
+                optional_deps += d
             endif
         endif
     endforeach
@@ -241,9 +241,9 @@ foreach f, f_deps : source_file_deps
     endif
 endforeach
 # add the optional dependencies
-foreach d:optional_deps
-    if is_variable(def_lib + '_rte_' + d) and d not in deps
-        deps += d
+foreach d:opt_deps
+    if is_variable(def_lib + '_rte_' + d) and d not in optional_deps
+        optional_deps += d
     endif
 endforeach
 
diff --git a/drivers/meson.build b/drivers/meson.build
index 495e21b54a..7a144cc527 100644
--- a/drivers/meson.build
+++ b/drivers/meson.build
@@ -132,6 +132,7 @@ foreach subpath:subdirs
         includes = [include_directories(drv_path)]
         # set up internal deps. Drivers can append/override as necessary
         deps = std_deps
+        optional_deps = []
         # ext_deps: Stores external library dependency got
         # using dependency() (preferred) or find_library().
         # For the find_library() case (but not with dependency()) we also
@@ -173,7 +174,7 @@ foreach subpath:subdirs
             # get dependency objs from strings
             shared_deps = ext_deps
             static_deps = ext_deps
-            foreach d:deps
+            foreach d:deps + optional_deps
                 if not build
                     break
                 endif
diff --git a/examples/ethtool/meson.build b/examples/ethtool/meson.build
index d7f63d48af..e8638a8607 100644
--- a/examples/ethtool/meson.build
+++ b/examples/ethtool/meson.build
@@ -20,7 +20,7 @@ includes = include_directories('lib', 'ethtool-app')
 
 deps += 'bus_pci'
 if dpdk_conf.has('RTE_NET_IXGBE')
-    deps += 'net_ixgbe'
+    optional_deps += 'net_ixgbe'
 endif
 
 allow_experimental_apis = true
diff --git a/examples/l2fwd-crypto/meson.build b/examples/l2fwd-crypto/meson.build
index bb44c88882..f16ebadc74 100644
--- a/examples/l2fwd-crypto/meson.build
+++ b/examples/l2fwd-crypto/meson.build
@@ -8,7 +8,7 @@
 
 deps += 'cryptodev'
 if dpdk_conf.has('RTE_CRYPTO_SCHEDULER')
-    deps += 'crypto_scheduler'
+    optional_deps += 'crypto_scheduler'
 endif
 allow_experimental_apis = true
 sources = files(
diff --git a/examples/l3fwd/meson.build b/examples/l3fwd/meson.build
index c25de77bba..5938452607 100644
--- a/examples/l3fwd/meson.build
+++ b/examples/l3fwd/meson.build
@@ -19,5 +19,5 @@ sources = files(
         'main.c',
 )
 if dpdk_conf.has('RTE_LIB_EVENTDEV')
-    deps += 'eventdev'
+    optional_deps += 'eventdev'
 endif
diff --git a/examples/meson.build b/examples/meson.build
index 8e8968a1fa..82151d09b4 100644
--- a/examples/meson.build
+++ b/examples/meson.build
@@ -98,11 +98,12 @@ foreach example: examples
     ext_deps = []
     includes = [include_directories(example, 'common')]
     deps = ['eal', 'mempool', 'net', 'mbuf', 'ethdev', 'cmdline']
+    optional_deps = []
     subdir(example)
 
     if build
         dep_objs = ext_deps
-        foreach d:deps
+        foreach d:deps + optional_deps
             var_name = get_option('default_library') + '_rte_' + d
             if not is_variable(var_name)
                 build = false
diff --git a/examples/vm_power_manager/meson.build b/examples/vm_power_manager/meson.build
index dcf23198eb..82841e4339 100644
--- a/examples/vm_power_manager/meson.build
+++ b/examples/vm_power_manager/meson.build
@@ -9,15 +9,15 @@
 deps += ['power', 'power_kvm_vm']
 
 if dpdk_conf.has('RTE_NET_BNXT')
-    deps += ['net_bnxt']
+    optional_deps += ['net_bnxt']
 endif
 
 if dpdk_conf.has('RTE_NET_I40E')
-    deps += ['net_i40e']
+    optional_deps += ['net_i40e']
 endif
 
 if dpdk_conf.has('RTE_NET_IXGBE')
-    deps += ['net_ixgbe']
+    optional_deps += ['net_ixgbe']
 endif
 
 allow_experimental_apis = true
diff --git a/lib/meson.build b/lib/meson.build
index ce92cb5537..82ad5dba67 100644
--- a/lib/meson.build
+++ b/lib/meson.build
@@ -134,6 +134,7 @@ foreach l:libraries
     # external package/library requirements
     ext_deps = []
     deps = []
+    optional_deps = []
     # eal is standard dependency once built
     if dpdk_conf.has('RTE_LIB_EAL')
         deps += ['eal']
@@ -171,7 +172,7 @@ foreach l:libraries
 
     shared_deps = ext_deps
     static_deps = ext_deps
-    foreach d:deps
+    foreach d:deps + optional_deps
         if not build
             break
         endif
-- 
2.43.5


^ permalink raw reply	[flat|nested] 54+ messages in thread

* [PATCH v4 2/8] build: output a dependency log in build directory
  2024-11-26 14:39   ` [PATCH v4 0/8] Record " Anatoly Burakov
  2024-11-26 14:39     ` [PATCH v4 1/8] build: split dependencies into mandatory and optional Anatoly Burakov
@ 2024-11-26 14:39     ` Anatoly Burakov
  2024-11-26 14:39     ` [PATCH v4 3/8] devtools: add script to flag unneeded dependencies Anatoly Burakov
                       ` (6 subsequent siblings)
  8 siblings, 0 replies; 54+ messages in thread
From: Anatoly Burakov @ 2024-11-26 14:39 UTC (permalink / raw)
  To: dev

From: Bruce Richardson <bruce.richardson@intel.com>

As meson processes our DPDK source tree it manages dependencies
specified by each individual driver. To enable future analysis of the
dependency links between components, log the dependencies of each DPDK
component as it gets processed. This could potentially allow other tools
to automatically enable or disable components based on the desired end
components to be built, e.g. if the user requests net/ice, ensure that
common/iavf is also enabled in the drivers.

The output file produced is in "dot" or "graphviz" format, which allows
producing a graphical representation of the DPDK dependency tree if so
desired. For example: "dot -Tpng -O build/deps.dot" to produce the
image file "build/deps.dot.png".

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Acked-by: Konstantin Ananyev <konstantin.ananyev@huawei.com>
Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com>
---
 app/meson.build        |  8 ++++-
 buildtools/log-deps.py | 81 ++++++++++++++++++++++++++++++++++++++++++
 buildtools/meson.build |  2 ++
 drivers/meson.build    |  6 ++++
 examples/meson.build   |  8 ++++-
 lib/meson.build        |  5 +++
 6 files changed, 108 insertions(+), 2 deletions(-)
 create mode 100644 buildtools/log-deps.py

diff --git a/app/meson.build b/app/meson.build
index 4e88e652ca..a770fed802 100644
--- a/app/meson.build
+++ b/app/meson.build
@@ -76,8 +76,14 @@ foreach app:apps
         reason = 'explicitly disabled via build config'
     endif
 
+    app_name = 'dpdk-' + name
     if build
         subdir(name)
+        type_cmd = '--type=app'
+        run_command([log_deps_cmd, type_cmd, app_name, deps], check: false)
+        if optional_deps.length() > 0
+            run_command([log_deps_cmd, '--optional', type_cmd, app_name, optional_deps], check: false)
+        endif
         if not build and require_apps
             error('Cannot build explicitly requested app "@0@".\n'.format(name)
                   + '\tReason: ' + reason)
@@ -116,7 +122,7 @@ foreach app:apps
         link_libs = dpdk_static_libraries + dpdk_drivers
     endif
 
-    exec = executable('dpdk-' + name,
+    exec = executable(app_name,
             [ sources, resources ],
             c_args: cflags,
             link_args: ldflags,
diff --git a/buildtools/log-deps.py b/buildtools/log-deps.py
new file mode 100644
index 0000000000..e11a102242
--- /dev/null
+++ b/buildtools/log-deps.py
@@ -0,0 +1,81 @@
+#! /usr/bin/env python3
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright(c) 2024 Intel Corporation
+
+"""Utility script to build up a list of dependencies from meson."""
+
+import os
+import sys
+import argparse
+import typing as T
+
+
+def file_to_list(filename: str) -> T.List[str]:
+    """Read file into a list of strings."""
+    with open(filename, encoding="utf-8") as f:
+        return f.readlines()
+
+
+def list_to_file(filename: str, lines: T.List[str]):
+    """Write a list of strings out to a file."""
+    with open(filename, "w", encoding="utf-8") as f:
+        f.writelines(lines)
+
+
+def gen_deps(
+    component_type: str, optional: bool, component: str, deps: T.List[str]
+) -> str:
+    """Generate a dependency graph for meson."""
+    dep_list_str = '", "'.join(deps)
+    deps_str = "" if not deps else f' -> {{ "{dep_list_str}" }}'
+    # we define custom attributes for the nodes
+    attr_str = f'dpdk_componentType="{component_type}"'
+    if optional:
+        # we use a dotted line to represent optional dependencies
+        attr_str += ',style="dotted"'
+    return f'"{component}"{deps_str} [{attr_str}]\n'
+
+
+def _main():
+    depsfile = f'{os.environ["MESON_BUILD_ROOT"]}/deps.dot'
+
+    # to reset the deps file on each build, the script is called without any params
+    if len(sys.argv) == 1:
+        os.remove(depsfile)
+        sys.exit(0)
+
+    # we got arguments, parse them
+    parser = argparse.ArgumentParser(
+        description="Generate a dependency graph for meson."
+    )
+    # type is required
+    parser.add_argument(
+        "--type", required=True, help="Type of dependency (lib, examples, etc.)"
+    )
+    parser.add_argument(
+        "--optional", action="store_true", help="Whether the dependency is optional"
+    )
+    # component is required
+    parser.add_argument("component", help="The component to add to the graph")
+    parser.add_argument("deps", nargs="*", help="The dependencies of the component")
+
+    parsed = parser.parse_args()
+
+    try:
+        contents = file_to_list(depsfile)
+    except FileNotFoundError:
+        contents = ["digraph {\n", "}\n"]
+
+    c_type = parsed.type
+    optional = parsed.optional
+    component = parsed.component
+    deps = parsed.deps
+    contents[-1] = gen_deps(c_type, optional, component, deps)
+
+    contents.append("}\n")
+
+    list_to_file(depsfile, contents)
+
+
+if __name__ == "__main__":
+    _main()
diff --git a/buildtools/meson.build b/buildtools/meson.build
index 4e2c1217a2..13a0477245 100644
--- a/buildtools/meson.build
+++ b/buildtools/meson.build
@@ -26,6 +26,8 @@ header_gen_cmd = py3 + files('gen-header.py')
 has_hugepages_cmd = py3 + files('has-hugepages.py')
 cmdline_gen_cmd = py3 + files('dpdk-cmdline-gen.py')
 check_dts_requirements = py3 + files('check-dts-requirements.py')
+log_deps_cmd = py3 + files('log-deps.py')
+run_command(log_deps_cmd, check: false)  # call with no parameters to reset the file
 
 # install any build tools that end-users might want also
 install_data([
diff --git a/drivers/meson.build b/drivers/meson.build
index 7a144cc527..338efe42b8 100644
--- a/drivers/meson.build
+++ b/drivers/meson.build
@@ -159,6 +159,12 @@ foreach subpath:subdirs
         if build
             # pull in driver directory which should update all the local variables
             subdir(drv_path)
+            type_cmd = '--type=drivers'
+            drv_name = class + '_' + name
+            run_command([log_deps_cmd, type_cmd, drv_name, deps], check: false)
+            if optional_deps.length() > 0
+                run_command([log_deps_cmd, '--optional', type_cmd, drv_name, optional_deps], check: false)
+            endif
 
             if dpdk_conf.get('RTE_IOVA_IN_MBUF') == 0 and require_iova_in_mbuf
                 build = false
diff --git a/examples/meson.build b/examples/meson.build
index 82151d09b4..1589a3057e 100644
--- a/examples/meson.build
+++ b/examples/meson.build
@@ -101,8 +101,14 @@ foreach example: examples
     optional_deps = []
     subdir(example)
 
+    example_name = 'dpdk-' + name
     if build
         dep_objs = ext_deps
+        type_cmd = '--type=examples'
+        run_command([log_deps_cmd, type_cmd, example_name, deps], check: false)
+        if optional_deps.length() > 0
+            run_command([log_deps_cmd, '--optional', type_cmd, example_name, optional_deps], check: false)
+        endif
         foreach d:deps + optional_deps
             var_name = get_option('default_library') + '_rte_' + d
             if not is_variable(var_name)
@@ -125,7 +131,7 @@ foreach example: examples
     if allow_experimental_apis
         cflags += '-DALLOW_EXPERIMENTAL_API'
     endif
-    executable('dpdk-' + name, sources,
+    executable(example_name, sources,
             include_directories: includes,
             link_whole: link_whole_libs,
             link_args: ldflags,
diff --git a/lib/meson.build b/lib/meson.build
index 82ad5dba67..d1d772d4f4 100644
--- a/lib/meson.build
+++ b/lib/meson.build
@@ -161,6 +161,11 @@ foreach l:libraries
 
     if build
         subdir(l)
+        type_cmd = '--type=lib'
+        run_command([log_deps_cmd, type_cmd, l, deps], check: false)
+        if optional_deps.length() > 0
+            run_command([log_deps_cmd, '--optional', type_cmd, l, optional_deps], check: false)
+        endif
         if not build and require_libs
             error('Cannot build explicitly requested lib "@0@".\n'.format(name)
                     +'\tReason: ' + reason)
-- 
2.43.5


^ permalink raw reply	[flat|nested] 54+ messages in thread

* [PATCH v4 3/8] devtools: add script to flag unneeded dependencies
  2024-11-26 14:39   ` [PATCH v4 0/8] Record " Anatoly Burakov
  2024-11-26 14:39     ` [PATCH v4 1/8] build: split dependencies into mandatory and optional Anatoly Burakov
  2024-11-26 14:39     ` [PATCH v4 2/8] build: output a dependency log in build directory Anatoly Burakov
@ 2024-11-26 14:39     ` Anatoly Burakov
  2024-11-26 14:39     ` [PATCH v4 4/8] build: remove kvargs from driver class dependencies Anatoly Burakov
                       ` (5 subsequent siblings)
  8 siblings, 0 replies; 54+ messages in thread
From: Anatoly Burakov @ 2024-11-26 14:39 UTC (permalink / raw)
  To: dev

From: Bruce Richardson <bruce.richardson@intel.com>

While not a serious problem, DPDK components often list more
dependencies than are actually necessary to build, due to the use of
recursive dependencies. In extreme cases, such as with core libraries,
this can lead to longer configuration times due to meson having to
deduplicate long lists of dependencies. Therefore we can add a script to
identify when a component has got unnecessary dependencies listed.

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
---
 devtools/find-duplicate-deps.py | 53 +++++++++++++++++++++++++++++++++
 1 file changed, 53 insertions(+)
 create mode 100755 devtools/find-duplicate-deps.py

diff --git a/devtools/find-duplicate-deps.py b/devtools/find-duplicate-deps.py
new file mode 100755
index 0000000000..b1eacf21ce
--- /dev/null
+++ b/devtools/find-duplicate-deps.py
@@ -0,0 +1,53 @@
+#! /usr/bin/env python3
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright(c) 2024 Intel Corporation
+
+"""Identify any superfluous dependencies listed in DPDK deps graph."""
+
+import sys
+
+all_deps = {}
+
+
+class dep:
+    """Holds a component and its dependencies."""
+
+    def __init__(self, name, dep_names):
+        """Create and process a component and its deps."""
+        self.name = name.strip('" ')
+        self.base_deps = [all_deps[dn.strip('" ')] for dn in dep_names]
+        self.recursive_deps = []
+        for d in self.base_deps:
+            self.recursive_deps.extend(d.base_deps)
+            self.recursive_deps.extend(d.recursive_deps)
+        self.extra_deps = []
+        for d in self.base_deps:
+            if d in self.recursive_deps:
+                self.extra_deps.append(d.name)
+        if self.extra_deps:
+            print(f'{self.name}: extra deps {self.extra_deps}')
+
+    def dict_add(self, d):
+        """Add this object to a dictionary by name."""
+        d[self.name] = self
+
+
+def main(argv):
+    """Read the dependency tree from a dot file and process it."""
+    if len(argv) != 2:
+        print(f'Usage: {argv[0]} <build-directory>/deps.dot', file=sys.stderr)
+        sys.exit(1)
+
+    with open(argv[1]) as f:
+        for ln in f.readlines():
+            ln = ln.strip()
+            if '->' in ln:
+                name, deps = ln.split('->')
+                deps = deps.strip(' {}')
+                dep(name, deps.split(',')).dict_add(all_deps)
+            elif ln.startswith('"') and ln.endswith('"'):
+                dep(ln.strip('"'), []).dict_add(all_deps)
+
+
+if __name__ == '__main__':
+    main(sys.argv)
-- 
2.43.5


^ permalink raw reply	[flat|nested] 54+ messages in thread

* [PATCH v4 4/8] build: remove kvargs from driver class dependencies
  2024-11-26 14:39   ` [PATCH v4 0/8] Record " Anatoly Burakov
                       ` (2 preceding siblings ...)
  2024-11-26 14:39     ` [PATCH v4 3/8] devtools: add script to flag unneeded dependencies Anatoly Burakov
@ 2024-11-26 14:39     ` Anatoly Burakov
  2024-11-26 14:39     ` [PATCH v4 5/8] build: reduce library dependencies Anatoly Burakov
                       ` (4 subsequent siblings)
  8 siblings, 0 replies; 54+ messages in thread
From: Anatoly Burakov @ 2024-11-26 14:39 UTC (permalink / raw)
  To: dev

From: Bruce Richardson <bruce.richardson@intel.com>

The kvargs library is used by EAL, and therefore is implicitly a
dependency of every DPDK driver. Remove it from the minimum set of
dependencies for each driver class as it's unnecessary to call it out
there.

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
---
 drivers/event/meson.build | 2 +-
 drivers/net/meson.build   | 2 +-
 drivers/regex/meson.build | 2 +-
 drivers/vdpa/meson.build  | 2 +-
 4 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/event/meson.build b/drivers/event/meson.build
index d6706b57f7..2708833adf 100644
--- a/drivers/event/meson.build
+++ b/drivers/event/meson.build
@@ -19,4 +19,4 @@ if not (toolchain == 'gcc' and cc.version().version_compare('<4.8.6') and
         dpdk_conf.has('RTE_ARCH_ARM64'))
     drivers += 'octeontx'
 endif
-std_deps = ['eventdev', 'kvargs']
+std_deps = ['eventdev']
diff --git a/drivers/net/meson.build b/drivers/net/meson.build
index dafd637ba4..3b388ead24 100644
--- a/drivers/net/meson.build
+++ b/drivers/net/meson.build
@@ -65,6 +65,6 @@ drivers = [
         'vmxnet3',
         'zxdh',
 ]
-std_deps = ['ethdev', 'kvargs'] # 'ethdev' also pulls in mbuf, net, eal etc
+std_deps = ['ethdev']           # 'ethdev' also pulls in mbuf, net, eal etc
 std_deps += ['bus_pci']         # very many PMDs depend on PCI, so make std
 std_deps += ['bus_vdev']        # same with vdev bus
diff --git a/drivers/regex/meson.build b/drivers/regex/meson.build
index ff2a8fea89..10192e7c77 100644
--- a/drivers/regex/meson.build
+++ b/drivers/regex/meson.build
@@ -5,4 +5,4 @@ drivers = [
         'mlx5',
         'cn9k',
 ]
-std_deps = ['ethdev', 'kvargs', 'regexdev'] # 'ethdev' also pulls in mbuf, net, eal etc
+std_deps = ['ethdev', 'regexdev'] # 'ethdev' also pulls in mbuf, net, eal etc
diff --git a/drivers/vdpa/meson.build b/drivers/vdpa/meson.build
index 896e8e0304..e01c277b9e 100644
--- a/drivers/vdpa/meson.build
+++ b/drivers/vdpa/meson.build
@@ -11,5 +11,5 @@ drivers = [
         'nfp',
         'sfc',
 ]
-std_deps = ['bus_pci', 'kvargs']
+std_deps = ['bus_pci']
 std_deps += ['vhost']
-- 
2.43.5


^ permalink raw reply	[flat|nested] 54+ messages in thread

* [PATCH v4 5/8] build: reduce library dependencies
  2024-11-26 14:39   ` [PATCH v4 0/8] Record " Anatoly Burakov
                       ` (3 preceding siblings ...)
  2024-11-26 14:39     ` [PATCH v4 4/8] build: remove kvargs from driver class dependencies Anatoly Burakov
@ 2024-11-26 14:39     ` Anatoly Burakov
  2024-11-26 14:39     ` [PATCH v4 6/8] build: reduce driver dependencies Anatoly Burakov
                       ` (3 subsequent siblings)
  8 siblings, 0 replies; 54+ messages in thread
From: Anatoly Burakov @ 2024-11-26 14:39 UTC (permalink / raw)
  To: dev, Chengwen Feng, Nicolas Chautru, Konstantin Ananyev,
	Fan Zhang, Ashish Gupta, Akhil Goyal, Mattias Rönnblom,
	David Hunt, Kevin Laatz, Bruce Richardson, Byron Marohn,
	Yipeng Wang, Thomas Monjalon, Ferruh Yigit, Andrew Rybchenko,
	Jerin Jacob, Vladimir Medvedkin, Elena Agostini, Kiran Kumar K,
	Nithin Dabilpuram, Zhirun Yan, Jiayu Hu, Sameh Gobriel,
	Reshma Pattan, Morten Brørup, Srikanth Yalavarthi,
	Pavan Nikhilesh, Stephen Hemminger, Anoob Joseph,
	Volodymyr Fialko, Cristian Dumitrescu, Sivaprasad Tummala,
	Sachin Saxena, Hemant Agrawal, Honnappa Nagarahalli, Ori Kam,
	Maxime Coquelin, Chenbo Xia

From: Bruce Richardson <bruce.richardson@intel.com>

Rather than having each library depend up on EAL + any extra libs, we
can take advantage of recursive dependency support in meson and
just assign the dependencies of each directory directly, rather than
appending to the array. For libraries which only depend upon EAL, keep
that as a default, but for libraries which depend upon even a single
extra lib, that EAL dependency is unnecessary.

Going further, we can identify using the find_duplicate_deps.py script
any unnecessary deps in each library's list, and remove them to slim the
dependency tree down.

Reducing number of dependencies means that meson takes less time
processing and deduplicating the dependency tree for each component, and
also shrinks the dependency graph for DPDK itself.

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
---
 lib/argparse/meson.build     | 2 +-
 lib/bbdev/meson.build        | 2 +-
 lib/bitratestats/meson.build | 2 +-
 lib/bpf/meson.build          | 2 +-
 lib/cmdline/meson.build      | 2 +-
 lib/compressdev/meson.build  | 2 +-
 lib/cryptodev/meson.build    | 2 +-
 lib/dispatcher/meson.build   | 2 +-
 lib/distributor/meson.build  | 2 +-
 lib/dmadev/meson.build       | 2 --
 lib/eal/meson.build          | 5 +----
 lib/efd/meson.build          | 2 +-
 lib/ethdev/meson.build       | 2 +-
 lib/eventdev/meson.build     | 3 +--
 lib/fib/meson.build          | 4 +---
 lib/gpudev/meson.build       | 2 +-
 lib/graph/meson.build        | 2 +-
 lib/gro/meson.build          | 2 +-
 lib/gso/meson.build          | 2 +-
 lib/hash/meson.build         | 4 +---
 lib/ip_frag/meson.build      | 2 +-
 lib/ipsec/meson.build        | 2 +-
 lib/kvargs/meson.build       | 2 +-
 lib/latencystats/meson.build | 2 +-
 lib/lpm/meson.build          | 3 +--
 lib/mbuf/meson.build         | 2 +-
 lib/member/meson.build       | 2 +-
 lib/mempool/meson.build      | 2 +-
 lib/metrics/meson.build      | 2 +-
 lib/mldev/meson.build        | 2 +-
 lib/net/meson.build          | 2 +-
 lib/node/meson.build         | 2 +-
 lib/pcapng/meson.build       | 2 +-
 lib/pdcp/meson.build         | 2 +-
 lib/pdump/meson.build        | 2 +-
 lib/pipeline/meson.build     | 2 +-
 lib/port/meson.build         | 2 +-
 lib/power/meson.build        | 3 +--
 lib/rawdev/meson.build       | 2 --
 lib/rcu/meson.build          | 2 +-
 lib/regexdev/meson.build     | 2 +-
 lib/reorder/meson.build      | 2 +-
 lib/rib/meson.build          | 2 +-
 lib/ring/meson.build         | 1 -
 lib/sched/meson.build        | 2 +-
 lib/security/meson.build     | 2 +-
 lib/table/meson.build        | 2 +-
 lib/telemetry/meson.build    | 2 +-
 lib/vhost/meson.build        | 2 +-
 49 files changed, 46 insertions(+), 61 deletions(-)

diff --git a/lib/argparse/meson.build b/lib/argparse/meson.build
index b6a08ca049..96abc8766f 100644
--- a/lib/argparse/meson.build
+++ b/lib/argparse/meson.build
@@ -4,4 +4,4 @@
 sources = files('rte_argparse.c')
 headers = files('rte_argparse.h')
 
-deps += ['log']
+deps = ['log']
diff --git a/lib/bbdev/meson.build b/lib/bbdev/meson.build
index 07685e7578..2e68aa7873 100644
--- a/lib/bbdev/meson.build
+++ b/lib/bbdev/meson.build
@@ -11,4 +11,4 @@ sources = files('rte_bbdev.c')
 headers = files('rte_bbdev.h',
         'rte_bbdev_pmd.h',
         'rte_bbdev_op.h')
-deps += ['mbuf']
+deps = ['mbuf']
diff --git a/lib/bitratestats/meson.build b/lib/bitratestats/meson.build
index ede7e0a579..8defcd53bf 100644
--- a/lib/bitratestats/meson.build
+++ b/lib/bitratestats/meson.build
@@ -3,4 +3,4 @@
 
 sources = files('rte_bitrate.c')
 headers = files('rte_bitrate.h')
-deps += ['ethdev', 'metrics']
+deps = ['metrics']
diff --git a/lib/bpf/meson.build b/lib/bpf/meson.build
index aa258a9061..82127bc657 100644
--- a/lib/bpf/meson.build
+++ b/lib/bpf/meson.build
@@ -31,7 +31,7 @@ headers = files('bpf_def.h',
         'rte_bpf.h',
         'rte_bpf_ethdev.h')
 
-deps += ['mbuf', 'net', 'ethdev']
+deps = ['ethdev']
 
 dep = dependency('libelf', required: false, method: 'pkg-config')
 if dep.found()
diff --git a/lib/cmdline/meson.build b/lib/cmdline/meson.build
index 63fb69100d..4451f3da29 100644
--- a/lib/cmdline/meson.build
+++ b/lib/cmdline/meson.build
@@ -31,4 +31,4 @@ else
     sources += files('cmdline_os_unix.c')
 endif
 
-deps += ['net']
+deps = ['net']
diff --git a/lib/compressdev/meson.build b/lib/compressdev/meson.build
index c80295dc0d..4b86955baf 100644
--- a/lib/compressdev/meson.build
+++ b/lib/compressdev/meson.build
@@ -16,4 +16,4 @@ driver_sdk_headers = files(
         'rte_compressdev_pmd.h',
         'rte_compressdev_internal.h',
     )
-deps += ['kvargs', 'mbuf']
+deps = ['mbuf']
diff --git a/lib/cryptodev/meson.build b/lib/cryptodev/meson.build
index 4734acf321..74e42ac700 100644
--- a/lib/cryptodev/meson.build
+++ b/lib/cryptodev/meson.build
@@ -20,4 +20,4 @@ driver_sdk_headers += files(
         'cryptodev_pmd.h',
 )
 
-deps += ['kvargs', 'mbuf', 'rcu', 'telemetry']
+deps = ['mbuf', 'rcu']
diff --git a/lib/dispatcher/meson.build b/lib/dispatcher/meson.build
index ffaef26a6d..4dc1759951 100644
--- a/lib/dispatcher/meson.build
+++ b/lib/dispatcher/meson.build
@@ -10,4 +10,4 @@ endif
 sources = files('rte_dispatcher.c')
 headers = files('rte_dispatcher.h')
 
-deps += ['eventdev']
+deps = ['eventdev']
diff --git a/lib/distributor/meson.build b/lib/distributor/meson.build
index 24988c5827..ba43273bc3 100644
--- a/lib/distributor/meson.build
+++ b/lib/distributor/meson.build
@@ -14,4 +14,4 @@ else
     sources += files('rte_distributor_match_generic.c')
 endif
 headers = files('rte_distributor.h')
-deps += ['mbuf']
+deps = ['mbuf']
diff --git a/lib/dmadev/meson.build b/lib/dmadev/meson.build
index e66dcb66b0..70b375f1cb 100644
--- a/lib/dmadev/meson.build
+++ b/lib/dmadev/meson.build
@@ -11,5 +11,3 @@ sources = files('rte_dmadev.c', 'rte_dmadev_trace_points.c')
 headers = files('rte_dmadev.h')
 indirect_headers += files('rte_dmadev_core.h', 'rte_dmadev_trace_fp.h')
 driver_sdk_headers += files('rte_dmadev_pmd.h')
-
-deps += ['telemetry']
diff --git a/lib/eal/meson.build b/lib/eal/meson.build
index e1d6c4cf17..d25443d097 100644
--- a/lib/eal/meson.build
+++ b/lib/eal/meson.build
@@ -14,10 +14,7 @@ subdir(exec_env)
 
 subdir(arch_subdir)
 
-deps += ['log', 'kvargs']
-if not is_windows
-    deps += ['telemetry']
-endif
+deps = ['kvargs', 'telemetry']
 if dpdk_conf.has('RTE_USE_LIBBSD')
     ext_deps += libbsd
 endif
diff --git a/lib/efd/meson.build b/lib/efd/meson.build
index 343f14e1f3..da0ee7f803 100644
--- a/lib/efd/meson.build
+++ b/lib/efd/meson.build
@@ -9,4 +9,4 @@ endif
 
 sources = files('rte_efd.c')
 headers = files('rte_efd.h')
-deps += ['ring', 'hash']
+deps = ['hash']
diff --git a/lib/ethdev/meson.build b/lib/ethdev/meson.build
index f1d2586591..fc53a9c309 100644
--- a/lib/ethdev/meson.build
+++ b/lib/ethdev/meson.build
@@ -53,7 +53,7 @@ if is_linux
     )
 endif
 
-deps += ['net', 'kvargs', 'meter', 'telemetry']
+deps = ['net', 'meter']
 
 if is_freebsd
     annotate_locks = false
diff --git a/lib/eventdev/meson.build b/lib/eventdev/meson.build
index a04bb86f0f..237df998ce 100644
--- a/lib/eventdev/meson.build
+++ b/lib/eventdev/meson.build
@@ -38,5 +38,4 @@ driver_sdk_headers += files(
         'event_timer_adapter_pmd.h',
 )
 
-deps += ['ring', 'ethdev', 'hash', 'mempool', 'mbuf', 'timer', 'cryptodev', 'dmadev']
-deps += ['telemetry']
+deps = ['ethdev', 'hash', 'timer', 'cryptodev', 'dmadev']
diff --git a/lib/fib/meson.build b/lib/fib/meson.build
index 0c19cc8201..ac040d5372 100644
--- a/lib/fib/meson.build
+++ b/lib/fib/meson.build
@@ -10,9 +10,7 @@ endif
 
 sources = files('rte_fib.c', 'rte_fib6.c', 'dir24_8.c', 'trie.c')
 headers = files('rte_fib.h', 'rte_fib6.h')
-deps += ['rib']
-deps += ['rcu']
-deps += ['net']
+deps = ['rib', 'rcu']
 
 if dpdk_conf.has('RTE_ARCH_X86_64')
     if target_has_avx512
diff --git a/lib/gpudev/meson.build b/lib/gpudev/meson.build
index d21fadc052..5d883b85a1 100644
--- a/lib/gpudev/meson.build
+++ b/lib/gpudev/meson.build
@@ -13,4 +13,4 @@ sources = files(
         'gpudev.c',
 )
 
-deps += ['mbuf']
+deps = ['mbuf']
diff --git a/lib/graph/meson.build b/lib/graph/meson.build
index 0cb15442ab..f58f107d52 100644
--- a/lib/graph/meson.build
+++ b/lib/graph/meson.build
@@ -25,4 +25,4 @@ indirect_headers += files(
         'rte_graph_worker_common.h',
 )
 
-deps += ['eal', 'pcapng', 'mempool', 'ring']
+deps = ['pcapng']
diff --git a/lib/gro/meson.build b/lib/gro/meson.build
index dbce05220d..c6de6ceebc 100644
--- a/lib/gro/meson.build
+++ b/lib/gro/meson.build
@@ -10,4 +10,4 @@ sources = files(
         'gro_vxlan_udp4.c',
 )
 headers = files('rte_gro.h')
-deps += ['ethdev']
+deps = ['ethdev']
diff --git a/lib/gso/meson.build b/lib/gso/meson.build
index 622411df8f..bc99109933 100644
--- a/lib/gso/meson.build
+++ b/lib/gso/meson.build
@@ -10,4 +10,4 @@ sources = files(
         'rte_gso.c',
 )
 headers = files('rte_gso.h')
-deps += ['ethdev']
+deps = ['ethdev']
diff --git a/lib/hash/meson.build b/lib/hash/meson.build
index 7ce504ee8b..e6cb1ebe3b 100644
--- a/lib/hash/meson.build
+++ b/lib/hash/meson.build
@@ -26,6 +26,4 @@ sources = files(
         'rte_thash_gf2_poly_math.c',
 )
 
-deps += ['net']
-deps += ['ring']
-deps += ['rcu']
+deps = ['net', 'rcu']
diff --git a/lib/ip_frag/meson.build b/lib/ip_frag/meson.build
index ea2de09f75..cacf391460 100644
--- a/lib/ip_frag/meson.build
+++ b/lib/ip_frag/meson.build
@@ -10,4 +10,4 @@ sources = files(
         'ip_frag_internal.c',
 )
 headers = files('rte_ip_frag.h')
-deps += ['ethdev', 'hash']
+deps = ['ethdev', 'hash']
diff --git a/lib/ipsec/meson.build b/lib/ipsec/meson.build
index 5c5a4aae78..7abbac5b6a 100644
--- a/lib/ipsec/meson.build
+++ b/lib/ipsec/meson.build
@@ -14,6 +14,6 @@ sources = files('esp_inb.c', 'esp_outb.c',
 headers = files('rte_ipsec.h', 'rte_ipsec_sa.h', 'rte_ipsec_sad.h')
 indirect_headers += files('rte_ipsec_group.h')
 
-deps += ['mbuf', 'net', 'cryptodev', 'security', 'hash', 'telemetry']
+deps = ['security', 'hash']
 
 annotate_locks = false
diff --git a/lib/kvargs/meson.build b/lib/kvargs/meson.build
index 7eae744a8f..7282b0ff8d 100644
--- a/lib/kvargs/meson.build
+++ b/lib/kvargs/meson.build
@@ -1,6 +1,6 @@
 # SPDX-License-Identifier: BSD-3-Clause
 # Copyright(c) 2017 Intel Corporation
 
-deps += 'log'
+deps = ['log']
 sources = files('rte_kvargs.c')
 headers = files('rte_kvargs.h')
diff --git a/lib/latencystats/meson.build b/lib/latencystats/meson.build
index 286558dd79..f8b9a8aeec 100644
--- a/lib/latencystats/meson.build
+++ b/lib/latencystats/meson.build
@@ -3,4 +3,4 @@
 
 sources = files('rte_latencystats.c')
 headers = files('rte_latencystats.h')
-deps += ['metrics', 'ethdev']
+deps = ['metrics']
diff --git a/lib/lpm/meson.build b/lib/lpm/meson.build
index fae4f79fb9..53c2af6f39 100644
--- a/lib/lpm/meson.build
+++ b/lib/lpm/meson.build
@@ -18,6 +18,5 @@ indirect_headers += files(
         'rte_lpm_sse.h',
         'rte_lpm_sve.h',
 )
-deps += ['hash']
+deps = ['hash']
 deps += ['rcu']
-deps += ['net']
diff --git a/lib/mbuf/meson.build b/lib/mbuf/meson.build
index 2cee9057a5..22f5a3038b 100644
--- a/lib/mbuf/meson.build
+++ b/lib/mbuf/meson.build
@@ -20,4 +20,4 @@ headers = files(
         'rte_mbuf_pool_ops.h',
         'rte_mbuf_dyn.h',
 )
-deps += ['mempool']
+deps = ['mempool']
diff --git a/lib/member/meson.build b/lib/member/meson.build
index 02ef59795e..b951aa566e 100644
--- a/lib/member/meson.build
+++ b/lib/member/meson.build
@@ -16,7 +16,7 @@ sources = files(
         'rte_member_vbf.c',
 )
 
-deps += ['hash', 'ring']
+deps = ['hash']
 
 # compile AVX512 version if:
 if dpdk_conf.has('RTE_ARCH_X86_64') and binutils_ok
diff --git a/lib/mempool/meson.build b/lib/mempool/meson.build
index 8099a56466..0c0b3ea0c5 100644
--- a/lib/mempool/meson.build
+++ b/lib/mempool/meson.build
@@ -19,4 +19,4 @@ headers = files(
         'rte_mempool.h',
         'rte_mempool_trace_fp.h',
 )
-deps += ['ring', 'telemetry']
+deps = ['ring']
diff --git a/lib/metrics/meson.build b/lib/metrics/meson.build
index 8c1c4b4b49..5165967646 100644
--- a/lib/metrics/meson.build
+++ b/lib/metrics/meson.build
@@ -8,4 +8,4 @@ if dpdk_conf.has('RTE_HAS_JANSSON')
     ext_deps += jansson_dep
 endif
 
-deps += ['ethdev', 'telemetry']
+deps = ['ethdev']
diff --git a/lib/mldev/meson.build b/lib/mldev/meson.build
index 2c933baad6..6069fff1f0 100644
--- a/lib/mldev/meson.build
+++ b/lib/mldev/meson.build
@@ -41,7 +41,7 @@ driver_sdk_headers += files(
         'mldev_utils.h',
 )
 
-deps += ['mempool', 'mbuf']
+deps = ['mbuf']
 
 if get_option('buildtype').contains('debug')
         cflags += [ '-DRTE_LIBRTE_ML_DEV_DEBUG' ]
diff --git a/lib/net/meson.build b/lib/net/meson.build
index 8afcc4ed37..a99d57e514 100644
--- a/lib/net/meson.build
+++ b/lib/net/meson.build
@@ -37,7 +37,7 @@ sources = files(
         'rte_net.c',
         'rte_net_crc.c',
 )
-deps += ['mbuf']
+deps = ['mbuf']
 
 if dpdk_conf.has('RTE_ARCH_X86_64')
     net_crc_sse42_cpu_support = (cc.get_define('__PCLMUL__', args: machine_args) != '')
diff --git a/lib/node/meson.build b/lib/node/meson.build
index 0bed97a96c..368ce1dc63 100644
--- a/lib/node/meson.build
+++ b/lib/node/meson.build
@@ -34,4 +34,4 @@ headers = files(
 
 # Strict-aliasing rules are violated by uint8_t[] to context size casts.
 cflags += '-fno-strict-aliasing'
-deps += ['graph', 'mbuf', 'lpm', 'ethdev', 'mempool', 'cryptodev', 'ip_frag']
+deps = ['graph', 'lpm', 'cryptodev', 'ip_frag']
diff --git a/lib/pcapng/meson.build b/lib/pcapng/meson.build
index 4549925d41..e8f059a9b0 100644
--- a/lib/pcapng/meson.build
+++ b/lib/pcapng/meson.build
@@ -4,4 +4,4 @@
 sources = files('rte_pcapng.c')
 headers = files('rte_pcapng.h')
 
-deps += ['ethdev']
+deps = ['ethdev']
diff --git a/lib/pdcp/meson.build b/lib/pdcp/meson.build
index f4f9246bcb..f6f3d6237a 100644
--- a/lib/pdcp/meson.build
+++ b/lib/pdcp/meson.build
@@ -18,4 +18,4 @@ sources = files(
 headers = files('rte_pdcp.h')
 indirect_headers += files('rte_pdcp_group.h')
 
-deps += ['mbuf', 'net', 'cryptodev', 'security', 'reorder']
+deps = ['security', 'reorder']
diff --git a/lib/pdump/meson.build b/lib/pdump/meson.build
index da8d51b616..23d7db794b 100644
--- a/lib/pdump/meson.build
+++ b/lib/pdump/meson.build
@@ -9,4 +9,4 @@ endif
 
 sources = files('rte_pdump.c')
 headers = files('rte_pdump.h')
-deps += ['ethdev', 'bpf', 'pcapng']
+deps = ['bpf', 'pcapng']
diff --git a/lib/pipeline/meson.build b/lib/pipeline/meson.build
index fd5e0dc6bb..f08eca70d1 100644
--- a/lib/pipeline/meson.build
+++ b/lib/pipeline/meson.build
@@ -25,4 +25,4 @@ headers = files(
         'rte_swx_extern.h',
         'rte_swx_ctl.h',
 )
-deps += ['port', 'table', 'meter', 'sched', 'cryptodev', 'ipsec']
+deps = ['table', 'ipsec']
diff --git a/lib/port/meson.build b/lib/port/meson.build
index b597772872..0524c3c049 100644
--- a/lib/port/meson.build
+++ b/lib/port/meson.build
@@ -40,7 +40,7 @@ headers = files(
         'rte_swx_port_ring.h',
         'rte_swx_port_source_sink.h',
 )
-deps += ['ethdev', 'sched', 'ip_frag', 'cryptodev', 'eventdev']
+deps = ['sched', 'ip_frag', 'eventdev']
 
 if dpdk_conf.has('RTE_HAS_LIBPCAP')
     dpdk_conf.set('RTE_PORT_PCAP', 1)
diff --git a/lib/power/meson.build b/lib/power/meson.build
index b3a7bc7b2e..5673db4e5c 100644
--- a/lib/power/meson.build
+++ b/lib/power/meson.build
@@ -26,5 +26,4 @@ headers = files(
         'rte_power_qos.h',
         'rte_power_uncore.h',
 )
-
-deps += ['timer', 'ethdev']
+deps = ['timer', 'ethdev']
diff --git a/lib/rawdev/meson.build b/lib/rawdev/meson.build
index 7dfc3d5cf9..8841f003d7 100644
--- a/lib/rawdev/meson.build
+++ b/lib/rawdev/meson.build
@@ -9,5 +9,3 @@ endif
 
 sources = files('rte_rawdev.c')
 headers = files('rte_rawdev.h', 'rte_rawdev_pmd.h')
-
-deps += ['telemetry']
diff --git a/lib/rcu/meson.build b/lib/rcu/meson.build
index 71143f5210..b78f46fad7 100644
--- a/lib/rcu/meson.build
+++ b/lib/rcu/meson.build
@@ -10,4 +10,4 @@ endif
 sources = files('rte_rcu_qsbr.c')
 headers = files('rte_rcu_qsbr.h')
 
-deps += ['ring']
+deps = ['ring']
diff --git a/lib/regexdev/meson.build b/lib/regexdev/meson.build
index 426e764ece..3e20fa387d 100644
--- a/lib/regexdev/meson.build
+++ b/lib/regexdev/meson.build
@@ -10,4 +10,4 @@ endif
 sources = files('rte_regexdev.c')
 headers = files('rte_regexdev.h', 'rte_regexdev_driver.h')
 indirect_headers += files('rte_regexdev_core.h')
-deps += ['mbuf']
+deps = ['mbuf']
diff --git a/lib/reorder/meson.build b/lib/reorder/meson.build
index 03aed53d90..1e088a7d97 100644
--- a/lib/reorder/meson.build
+++ b/lib/reorder/meson.build
@@ -3,4 +3,4 @@
 
 sources = files('rte_reorder.c')
 headers = files('rte_reorder.h')
-deps += ['mbuf']
+deps = ['mbuf']
diff --git a/lib/rib/meson.build b/lib/rib/meson.build
index e98f708481..2cb6580874 100644
--- a/lib/rib/meson.build
+++ b/lib/rib/meson.build
@@ -4,4 +4,4 @@
 
 sources = files('rte_rib.c', 'rte_rib6.c')
 headers = files('rte_rib.h', 'rte_rib6.h')
-deps += ['net', 'mempool']
+deps = ['net', 'mempool']
diff --git a/lib/ring/meson.build b/lib/ring/meson.build
index 7fca958ed7..c20685c689 100644
--- a/lib/ring/meson.build
+++ b/lib/ring/meson.build
@@ -18,4 +18,3 @@ indirect_headers += files (
         'rte_ring_rts.h',
         'rte_ring_rts_elem_pvt.h',
 )
-deps += ['telemetry']
diff --git a/lib/sched/meson.build b/lib/sched/meson.build
index df75db51ed..7ca8ec09df 100644
--- a/lib/sched/meson.build
+++ b/lib/sched/meson.build
@@ -15,4 +15,4 @@ headers = files(
         'rte_sched_common.h',
         'rte_pie.h',
 )
-deps += ['mbuf', 'meter']
+deps = ['mbuf', 'meter']
diff --git a/lib/security/meson.build b/lib/security/meson.build
index 1034a7a299..e4545a8c72 100644
--- a/lib/security/meson.build
+++ b/lib/security/meson.build
@@ -3,4 +3,4 @@
 
 sources = files('rte_security.c')
 headers = files('rte_security.h', 'rte_security_driver.h')
-deps += ['mempool', 'cryptodev', 'net']
+deps = ['cryptodev', 'net']
diff --git a/lib/table/meson.build b/lib/table/meson.build
index 9b3d9ac759..78d7e87eab 100644
--- a/lib/table/meson.build
+++ b/lib/table/meson.build
@@ -39,7 +39,7 @@ headers = files(
         'rte_table_lpm_ipv6.h',
         'rte_table_stub.h',
 )
-deps += ['mbuf', 'port', 'lpm', 'hash', 'acl']
+deps = ['port', 'lpm', 'acl']
 
 indirect_headers += files(
         'rte_lru_arm64.h',
diff --git a/lib/telemetry/meson.build b/lib/telemetry/meson.build
index 489d000047..3e3a2cfc32 100644
--- a/lib/telemetry/meson.build
+++ b/lib/telemetry/meson.build
@@ -1,7 +1,7 @@
 # SPDX-License-Identifier: BSD-3-Clause
 # Copyright(c) 2018 Intel Corporation
 
-deps += 'log'
+deps = ['log']
 sources = files('telemetry.c', 'telemetry_data.c', 'telemetry_legacy.c')
 headers = files('rte_telemetry.h')
 includes += include_directories('../metrics')
diff --git a/lib/vhost/meson.build b/lib/vhost/meson.build
index 51bcf17244..5103bca069 100644
--- a/lib/vhost/meson.build
+++ b/lib/vhost/meson.build
@@ -45,4 +45,4 @@ headers = files(
 driver_sdk_headers = files(
         'vdpa_driver.h',
 )
-deps += ['ethdev', 'cryptodev', 'hash', 'pci', 'dmadev']
+deps = ['ethdev', 'cryptodev', 'hash', 'pci', 'dmadev']
-- 
2.43.5


^ permalink raw reply	[flat|nested] 54+ messages in thread

* [PATCH v4 6/8] build: reduce driver dependencies
  2024-11-26 14:39   ` [PATCH v4 0/8] Record " Anatoly Burakov
                       ` (4 preceding siblings ...)
  2024-11-26 14:39     ` [PATCH v4 5/8] build: reduce library dependencies Anatoly Burakov
@ 2024-11-26 14:39     ` Anatoly Burakov
  2024-11-27  2:17       ` Xu, Rosen
  2024-11-26 14:39     ` [PATCH v4 7/8] build: reduce app dependencies Anatoly Burakov
                       ` (2 subsequent siblings)
  8 siblings, 1 reply; 54+ messages in thread
From: Anatoly Burakov @ 2024-11-26 14:39 UTC (permalink / raw)
  To: dev, Nicolas Chautru, Gagandeep Singh, Hemant Agrawal,
	Parav Pandit, Xueming Li, Sachin Saxena, Rosen Xu, Chenbo Xia,
	Nipun Gupta, Tomasz Duszynski, Chengwen Feng, Nithin Dabilpuram,
	Kiran Kumar K, Sunil Kumar Kori, Satha Rao, Harman Kalra,
	Anoob Joseph, Jingjing Wu, Praveen Shetty, Dariusz Sosnowski,
	Viacheslav Ovsiienko, Bing Zhao, Ori Kam, Suanming Mou,
	Matan Azrad, Fan Zhang, Ashish Gupta, Nagadheeraj Rottela,
	Ajit Khaparde, Vikas Gupta, Ankur Dwivedi, Tejasree Kondoj,
	Kai Ji, Pablo de Lara, Srikanth Jampala, Vamsi Attunuru,
	Gowrishankar Muthukrishnan, Vidya Sagar Velumuri, Kevin Laatz,
	Bruce Richardson, Pavan Nikhilesh, Shijith Thotton,
	Pravin Pathak, Jerin Jacob, Harry van Haaren, Ashwin Sekhar T K,
	Vladimir Medvedkin, Ian Stokes, Long Li, Wei Hu,
	Andrew Rybchenko, Cristian Dumitrescu, Jakub Palider,
	Vijay Kumar Srivastava

From: Bruce Richardson <bruce.richardson@intel.com>

Remove any unnecessary dependencies from the driver dependency lists.
This will give each driver a near-minimum set of required dependencies.

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
---
 drivers/baseband/fpga_5gnr_fec/meson.build | 2 +-
 drivers/baseband/fpga_lte_fec/meson.build  | 2 +-
 drivers/baseband/la12xx/meson.build        | 2 +-
 drivers/baseband/null/meson.build          | 2 +-
 drivers/baseband/turbo_sw/meson.build      | 2 +-
 drivers/bus/auxiliary/meson.build          | 2 --
 drivers/bus/dpaa/meson.build               | 2 +-
 drivers/bus/fslmc/meson.build              | 2 +-
 drivers/bus/ifpga/meson.build              | 2 +-
 drivers/bus/pci/meson.build                | 4 +---
 drivers/bus/platform/meson.build           | 1 -
 drivers/bus/uacce/meson.build              | 2 --
 drivers/bus/vdev/meson.build               | 2 --
 drivers/common/cnxk/meson.build            | 4 ++--
 drivers/common/cpt/meson.build             | 2 +-
 drivers/common/idpf/meson.build            | 2 +-
 drivers/common/mlx5/meson.build            | 2 +-
 drivers/compress/mlx5/meson.build          | 2 +-
 drivers/compress/nitrox/meson.build        | 2 +-
 drivers/compress/octeontx/meson.build      | 2 +-
 drivers/crypto/bcmfs/meson.build           | 2 +-
 drivers/crypto/cnxk/meson.build            | 2 +-
 drivers/crypto/dpaa_sec/meson.build        | 2 +-
 drivers/crypto/ipsec_mb/meson.build        | 2 +-
 drivers/crypto/mlx5/meson.build            | 2 +-
 drivers/crypto/nitrox/meson.build          | 2 +-
 drivers/dma/cnxk/meson.build               | 2 +-
 drivers/dma/dpaa/meson.build               | 2 +-
 drivers/dma/dpaa2/meson.build              | 2 +-
 drivers/dma/odm/meson.build                | 2 +-
 drivers/dma/skeleton/meson.build           | 2 +-
 drivers/event/cnxk/meson.build             | 2 +-
 drivers/event/dlb2/meson.build             | 2 +-
 drivers/event/dpaa2/meson.build            | 2 +-
 drivers/event/octeontx/meson.build         | 3 +--
 drivers/event/sw/meson.build               | 2 +-
 drivers/mempool/cnxk/meson.build           | 2 +-
 drivers/mempool/dpaa/meson.build           | 2 +-
 drivers/mempool/dpaa2/meson.build          | 2 +-
 drivers/mempool/octeontx/meson.build       | 2 +-
 drivers/net/cnxk/meson.build               | 4 +---
 drivers/net/iavf/meson.build               | 2 +-
 drivers/net/ice/meson.build                | 2 +-
 drivers/net/mana/meson.build               | 2 +-
 drivers/net/mlx5/meson.build               | 2 +-
 drivers/net/sfc/meson.build                | 2 +-
 drivers/net/softnic/meson.build            | 2 +-
 drivers/raw/cnxk_bphy/meson.build          | 2 +-
 drivers/raw/cnxk_gpio/meson.build          | 2 +-
 drivers/raw/ntb/meson.build                | 2 +-
 drivers/raw/skeleton/meson.build           | 2 +-
 drivers/regex/mlx5/meson.build             | 2 +-
 drivers/vdpa/ifc/meson.build               | 2 +-
 drivers/vdpa/meson.build                   | 3 +--
 drivers/vdpa/mlx5/meson.build              | 2 +-
 drivers/vdpa/sfc/meson.build               | 2 +-
 56 files changed, 53 insertions(+), 66 deletions(-)

diff --git a/drivers/baseband/fpga_5gnr_fec/meson.build b/drivers/baseband/fpga_5gnr_fec/meson.build
index c3678d23eb..31b9e92fbb 100644
--- a/drivers/baseband/fpga_5gnr_fec/meson.build
+++ b/drivers/baseband/fpga_5gnr_fec/meson.build
@@ -1,7 +1,7 @@
 # SPDX-License-Identifier: BSD-3-Clause
 # Copyright(c) 2020 Intel Corporation
 
-deps += ['bus_vdev', 'ring', 'pci', 'bus_pci']
+deps += ['bus_vdev', 'bus_pci']
 
 sources = files('rte_fpga_5gnr_fec.c')
 
diff --git a/drivers/baseband/fpga_lte_fec/meson.build b/drivers/baseband/fpga_lte_fec/meson.build
index 14e07826ef..fbf24755db 100644
--- a/drivers/baseband/fpga_lte_fec/meson.build
+++ b/drivers/baseband/fpga_lte_fec/meson.build
@@ -1,5 +1,5 @@
 # SPDX-License-Identifier: BSD-3-Clause
 # Copyright(c) 2019 Intel Corporation
 
-deps += ['bus_vdev', 'ring', 'pci', 'bus_pci']
+deps += ['bus_vdev', 'bus_pci']
 sources = files('fpga_lte_fec.c')
diff --git a/drivers/baseband/la12xx/meson.build b/drivers/baseband/la12xx/meson.build
index 7b7e41c961..e1dbdd0fa7 100644
--- a/drivers/baseband/la12xx/meson.build
+++ b/drivers/baseband/la12xx/meson.build
@@ -1,6 +1,6 @@
 # SPDX-License-Identifier: BSD-3-Clause
 # Copyright 2020-2021 NXP
 
-deps += ['bus_vdev', 'ring']
+deps += ['bus_vdev']
 
 sources = files('bbdev_la12xx.c')
diff --git a/drivers/baseband/null/meson.build b/drivers/baseband/null/meson.build
index 22863f0bd8..716d6c6fdb 100644
--- a/drivers/baseband/null/meson.build
+++ b/drivers/baseband/null/meson.build
@@ -1,5 +1,5 @@
 # SPDX-License-Identifier: BSD-3-Clause
 # Copyright(c) 2018 Luca Boccassi <bluca@debian.org>
 
-deps += ['bus_vdev', 'ring']
+deps += ['bus_vdev']
 sources = files('bbdev_null.c')
diff --git a/drivers/baseband/turbo_sw/meson.build b/drivers/baseband/turbo_sw/meson.build
index a9035a753e..ac18e8a9b6 100644
--- a/drivers/baseband/turbo_sw/meson.build
+++ b/drivers/baseband/turbo_sw/meson.build
@@ -26,5 +26,5 @@ if dep_dec5g.found()
     cflags += ['-DRTE_BBDEV_SDK_AVX512']
 endif
 
-deps += ['bus_vdev', 'ring']
+deps += ['bus_vdev']
 sources = files('bbdev_turbo_software.c')
diff --git a/drivers/bus/auxiliary/meson.build b/drivers/bus/auxiliary/meson.build
index 10468fd130..a113f11743 100644
--- a/drivers/bus/auxiliary/meson.build
+++ b/drivers/bus/auxiliary/meson.build
@@ -13,5 +13,3 @@ if is_linux
 endif
 
 require_iova_in_mbuf = false
-
-deps += ['kvargs']
diff --git a/drivers/bus/dpaa/meson.build b/drivers/bus/dpaa/meson.build
index 5506f2bffc..a2314fdebe 100644
--- a/drivers/bus/dpaa/meson.build
+++ b/drivers/bus/dpaa/meson.build
@@ -6,7 +6,7 @@ if not is_linux
     reason = 'only supported on Linux'
 endif
 
-deps += ['common_dpaax', 'eventdev']
+deps = ['common_dpaax', 'eventdev']
 sources = files(
         'base/fman/fman.c',
         'base/fman/fman_hw.c',
diff --git a/drivers/bus/fslmc/meson.build b/drivers/bus/fslmc/meson.build
index 70098ad778..a0e11f7081 100644
--- a/drivers/bus/fslmc/meson.build
+++ b/drivers/bus/fslmc/meson.build
@@ -6,7 +6,7 @@ if not is_linux
     reason = 'only supported on Linux'
 endif
 
-deps += ['common_dpaax', 'eventdev', 'kvargs']
+deps = ['common_dpaax', 'eventdev']
 sources = files(
         'fslmc_bus.c',
         'fslmc_vfio.c',
diff --git a/drivers/bus/ifpga/meson.build b/drivers/bus/ifpga/meson.build
index dedc94db2d..e87b08eaf4 100644
--- a/drivers/bus/ifpga/meson.build
+++ b/drivers/bus/ifpga/meson.build
@@ -7,6 +7,6 @@ if is_windows
     subdir_done()
 endif
 
-deps += ['pci', 'kvargs', 'rawdev']
+deps = ['pci', 'rawdev']
 driver_sdk_headers += files('bus_ifpga_driver.h')
 sources = files('ifpga_bus.c')
diff --git a/drivers/bus/pci/meson.build b/drivers/bus/pci/meson.build
index fede114dc7..776c3d1550 100644
--- a/drivers/bus/pci/meson.build
+++ b/drivers/bus/pci/meson.build
@@ -1,7 +1,7 @@
 # SPDX-License-Identifier: BSD-3-Clause
 # Copyright(c) 2017 Intel Corporation
 
-deps += ['pci']
+deps = ['pci']
 headers = files('rte_bus_pci.h')
 driver_sdk_headers = files('bus_pci_driver.h')
 sources = files('pci_common.c',
@@ -31,5 +31,3 @@ if is_windows
 endif
 
 require_iova_in_mbuf = false
-
-deps += ['kvargs']
diff --git a/drivers/bus/platform/meson.build b/drivers/bus/platform/meson.build
index 8633cc4e75..2039c23ac6 100644
--- a/drivers/bus/platform/meson.build
+++ b/drivers/bus/platform/meson.build
@@ -10,7 +10,6 @@ endif
 
 require_iova_in_mbuf = false
 
-deps += ['kvargs']
 sources = files(
         'platform_params.c',
         'platform.c',
diff --git a/drivers/bus/uacce/meson.build b/drivers/bus/uacce/meson.build
index a659d65f23..130148a315 100644
--- a/drivers/bus/uacce/meson.build
+++ b/drivers/bus/uacce/meson.build
@@ -8,5 +8,3 @@ endif
 
 sources = files('uacce.c')
 driver_sdk_headers += files('bus_uacce_driver.h')
-
-deps += ['kvargs']
diff --git a/drivers/bus/vdev/meson.build b/drivers/bus/vdev/meson.build
index 50f0c8918d..24993c88a3 100644
--- a/drivers/bus/vdev/meson.build
+++ b/drivers/bus/vdev/meson.build
@@ -9,5 +9,3 @@ headers = files('rte_bus_vdev.h')
 driver_sdk_headers = files('bus_vdev_driver.h')
 
 require_iova_in_mbuf = false
-
-deps += ['kvargs']
diff --git a/drivers/common/cnxk/meson.build b/drivers/common/cnxk/meson.build
index 9e3fd44317..e4ee9474f6 100644
--- a/drivers/common/cnxk/meson.build
+++ b/drivers/common/cnxk/meson.build
@@ -8,7 +8,7 @@ if not is_linux or not dpdk_conf.get('RTE_ARCH_64')
     subdir_done()
 endif
 
-deps = ['eal', 'pci', 'bus_pci', 'mbuf', 'security']
+deps = ['bus_pci', 'security']
 sources = files(
         'roc_ae.c',
         'roc_aes.c',
@@ -105,7 +105,7 @@ elif soc_type == 'cn20k'
     dpdk_conf.set('ROC_PLATFORM_CN20K', 1)
 endif
 
-deps += ['bus_pci', 'net', 'telemetry']
+deps += ['bus_pci']
 
 require_iova_in_mbuf = false
 
diff --git a/drivers/common/cpt/meson.build b/drivers/common/cpt/meson.build
index c09824a651..a4b000dc37 100644
--- a/drivers/common/cpt/meson.build
+++ b/drivers/common/cpt/meson.build
@@ -9,5 +9,5 @@ endif
 
 sources = files('cpt_fpm_tables.c', 'cpt_pmd_ops_helper.c')
 
-deps = ['kvargs', 'pci', 'cryptodev']
+deps = ['pci', 'cryptodev']
 includes += include_directories('../../crypto/octeontx')
diff --git a/drivers/common/idpf/meson.build b/drivers/common/idpf/meson.build
index 46fd45c03b..e24daac761 100644
--- a/drivers/common/idpf/meson.build
+++ b/drivers/common/idpf/meson.build
@@ -7,7 +7,7 @@ endif
 
 includes += include_directories('../iavf')
 
-deps += ['mbuf']
+deps = ['mbuf']
 
 sources = files(
         'idpf_common_device.c',
diff --git a/drivers/common/mlx5/meson.build b/drivers/common/mlx5/meson.build
index 1eefc02f06..b94c956495 100644
--- a/drivers/common/mlx5/meson.build
+++ b/drivers/common/mlx5/meson.build
@@ -12,7 +12,7 @@ if is_windows and not is_ms_linker and not meson.is_cross_build()
     subdir_done()
 endif
 
-deps += ['hash', 'pci', 'bus_pci', 'bus_auxiliary', 'net', 'eal', 'kvargs']
+deps += ['hash', 'bus_pci', 'bus_auxiliary']
 sources += files(
         'mlx5_devx_cmds.c',
         'mlx5_common.c',
diff --git a/drivers/compress/mlx5/meson.build b/drivers/compress/mlx5/meson.build
index 26a0e0cd09..ddb9e0f82c 100644
--- a/drivers/compress/mlx5/meson.build
+++ b/drivers/compress/mlx5/meson.build
@@ -7,7 +7,7 @@ if not is_linux
     subdir_done()
 endif
 
-deps += ['common_mlx5', 'eal', 'compressdev']
+deps += ['common_mlx5', 'compressdev']
 if not dpdk_conf.has('RTE_COMMON_MLX5')
     # avoid referencing undefined variables from common/mlx5
     subdir_done()
diff --git a/drivers/compress/nitrox/meson.build b/drivers/compress/nitrox/meson.build
index 1becc66912..c3db4ac2bb 100644
--- a/drivers/compress/nitrox/meson.build
+++ b/drivers/compress/nitrox/meson.build
@@ -6,7 +6,7 @@ if not is_linux
     reason = 'only supported on Linux'
 endif
 
-deps += ['common_nitrox', 'bus_pci', 'compressdev']
+deps += ['common_nitrox', 'compressdev']
 
 sources += files(
         'nitrox_comp.c',
diff --git a/drivers/compress/octeontx/meson.build b/drivers/compress/octeontx/meson.build
index 16f973f4d7..0ccde449e8 100644
--- a/drivers/compress/octeontx/meson.build
+++ b/drivers/compress/octeontx/meson.build
@@ -9,7 +9,7 @@ endif
 
 sources = files('otx_zip.c', 'otx_zip_pmd.c')
 includes += include_directories('include')
-deps += ['mempool_octeontx', 'bus_pci']
+deps += ['mempool_octeontx']
 ext_deps += dep
 
 require_iova_in_mbuf = false
diff --git a/drivers/crypto/bcmfs/meson.build b/drivers/crypto/bcmfs/meson.build
index 5842f83a3b..678bab7398 100644
--- a/drivers/crypto/bcmfs/meson.build
+++ b/drivers/crypto/bcmfs/meson.build
@@ -9,7 +9,7 @@ if is_windows
     subdir_done()
 endif
 
-deps += ['eal', 'bus_vdev']
+deps += ['bus_vdev']
 sources = files(
         'bcmfs_logs.c',
         'bcmfs_device.c',
diff --git a/drivers/crypto/cnxk/meson.build b/drivers/crypto/cnxk/meson.build
index aa840fb7bb..c5a5725e1a 100644
--- a/drivers/crypto/cnxk/meson.build
+++ b/drivers/crypto/cnxk/meson.build
@@ -25,7 +25,7 @@ sources = files(
 )
 
 headers = files('rte_pmd_cnxk_crypto.h')
-deps += ['bus_pci', 'common_cnxk', 'security', 'eventdev']
+deps += ['common_cnxk', 'eventdev']
 includes += include_directories('../../../lib/net', '../../event/cnxk')
 
 if get_option('buildtype').contains('debug')
diff --git a/drivers/crypto/dpaa_sec/meson.build b/drivers/crypto/dpaa_sec/meson.build
index f87ad6c7e7..9efac952c4 100644
--- a/drivers/crypto/dpaa_sec/meson.build
+++ b/drivers/crypto/dpaa_sec/meson.build
@@ -6,7 +6,7 @@ if not is_linux
     reason = 'only supported on Linux'
 endif
 
-deps += ['bus_dpaa', 'mempool_dpaa', 'security']
+deps += ['mempool_dpaa', 'security']
 sources = files('dpaa_sec.c', 'dpaa_sec_raw_dp.c')
 
 includes += include_directories('../../bus/dpaa/include')
diff --git a/drivers/crypto/ipsec_mb/meson.build b/drivers/crypto/ipsec_mb/meson.build
index 89ee03454b..01198cca68 100644
--- a/drivers/crypto/ipsec_mb/meson.build
+++ b/drivers/crypto/ipsec_mb/meson.build
@@ -45,5 +45,5 @@ sources = files(
         'pmd_snow3g.c',
         'pmd_zuc.c',
 )
-deps += ['bus_vdev', 'net', 'security']
+deps += ['bus_vdev', 'security']
 require_iova_in_mbuf = false
diff --git a/drivers/crypto/mlx5/meson.build b/drivers/crypto/mlx5/meson.build
index d7bc8ec967..595053d8cd 100644
--- a/drivers/crypto/mlx5/meson.build
+++ b/drivers/crypto/mlx5/meson.build
@@ -7,7 +7,7 @@ if not (is_linux or is_windows)
     subdir_done()
 endif
 
-deps += ['common_mlx5', 'eal', 'cryptodev']
+deps += ['common_mlx5', 'cryptodev']
 if not dpdk_conf.has('RTE_COMMON_MLX5')
     # avoid referencing undefined variables from common/mlx5
     subdir_done()
diff --git a/drivers/crypto/nitrox/meson.build b/drivers/crypto/nitrox/meson.build
index f8887713d2..85e3ca2b28 100644
--- a/drivers/crypto/nitrox/meson.build
+++ b/drivers/crypto/nitrox/meson.build
@@ -6,7 +6,7 @@ if not is_linux
     reason = 'only supported on Linux'
 endif
 
-deps += ['common_nitrox', 'bus_pci', 'cryptodev']
+deps += ['common_nitrox', 'cryptodev']
 
 sources += files(
         'nitrox_sym.c',
diff --git a/drivers/dma/cnxk/meson.build b/drivers/dma/cnxk/meson.build
index 8ccc1c2cb7..738774d542 100644
--- a/drivers/dma/cnxk/meson.build
+++ b/drivers/dma/cnxk/meson.build
@@ -12,7 +12,7 @@ driver_sdk_headers = files(
         'cnxk_dma_event_dp.h',
 )
 
-deps += ['bus_pci', 'common_cnxk', 'dmadev', 'eventdev']
+deps += ['common_cnxk', 'eventdev']
 
 includes += include_directories('../../event/cnxk')
 
diff --git a/drivers/dma/dpaa/meson.build b/drivers/dma/dpaa/meson.build
index c31a6d91fe..fec4a45767 100644
--- a/drivers/dma/dpaa/meson.build
+++ b/drivers/dma/dpaa/meson.build
@@ -6,7 +6,7 @@ if not is_linux
     reason = 'only supported on linux'
 endif
 
-deps += ['dmadev', 'bus_dpaa']
+deps += ['bus_dpaa']
 sources = files('dpaa_qdma.c')
 
 if cc.has_argument('-Wno-pointer-arith')
diff --git a/drivers/dma/dpaa2/meson.build b/drivers/dma/dpaa2/meson.build
index a523f5edb4..cc4a02440e 100644
--- a/drivers/dma/dpaa2/meson.build
+++ b/drivers/dma/dpaa2/meson.build
@@ -8,7 +8,7 @@ endif
 
 build = dpdk_conf.has('RTE_MEMPOOL_DPAA2')
 reason = 'missing dependency, DPDK DPAA2 mempool driver'
-deps += ['dmadev', 'bus_fslmc', 'mempool_dpaa2', 'ring', 'kvargs']
+deps += ['mempool_dpaa2']
 sources = files('dpaa2_qdma.c')
 
 if cc.has_argument('-Wno-pointer-arith')
diff --git a/drivers/dma/odm/meson.build b/drivers/dma/odm/meson.build
index d597762d37..959e7e685d 100644
--- a/drivers/dma/odm/meson.build
+++ b/drivers/dma/odm/meson.build
@@ -7,7 +7,7 @@ if not is_linux or not dpdk_conf.get('RTE_ARCH_64')
     subdir_done()
 endif
 
-deps += ['bus_pci', 'dmadev', 'eal', 'mempool', 'pci']
+deps += ['bus_pci', 'dmadev', 'mempool']
 
 sources = files('odm_dmadev.c', 'odm.c')
 
diff --git a/drivers/dma/skeleton/meson.build b/drivers/dma/skeleton/meson.build
index 77055683ad..0d703a36eb 100644
--- a/drivers/dma/skeleton/meson.build
+++ b/drivers/dma/skeleton/meson.build
@@ -1,7 +1,7 @@
 # SPDX-License-Identifier: BSD-3-Clause
 # Copyright(c) 2021 HiSilicon Limited
 
-deps += ['dmadev', 'kvargs', 'ring', 'bus_vdev']
+deps += ['dmadev', 'ring', 'bus_vdev']
 sources = files(
         'skeleton_dmadev.c',
 )
diff --git a/drivers/event/cnxk/meson.build b/drivers/event/cnxk/meson.build
index 8aaf8116f7..e944f4277f 100644
--- a/drivers/event/cnxk/meson.build
+++ b/drivers/event/cnxk/meson.build
@@ -311,7 +311,7 @@ foreach flag: extra_flags
 endforeach
 
 headers = files('rte_pmd_cnxk_eventdev.h')
-deps += ['bus_pci', 'common_cnxk', 'net_cnxk', 'crypto_cnxk', 'dma_cnxk']
+deps += ['net_cnxk', 'crypto_cnxk', 'dma_cnxk']
 
 require_iova_in_mbuf = false
 
diff --git a/drivers/event/dlb2/meson.build b/drivers/event/dlb2/meson.build
index c024edb311..2bb1b97686 100644
--- a/drivers/event/dlb2/meson.build
+++ b/drivers/event/dlb2/meson.build
@@ -39,4 +39,4 @@ endif
 
 headers = files('rte_pmd_dlb2.h')
 
-deps += ['mbuf', 'mempool', 'ring', 'pci', 'bus_pci']
+deps += ['bus_pci']
diff --git a/drivers/event/dpaa2/meson.build b/drivers/event/dpaa2/meson.build
index dd5063af43..7dae1da32b 100644
--- a/drivers/event/dpaa2/meson.build
+++ b/drivers/event/dpaa2/meson.build
@@ -5,7 +5,7 @@ if not is_linux
     build = false
     reason = 'only supported on Linux'
 endif
-deps += ['bus_vdev', 'net_dpaa2', 'crypto_dpaa2_sec']
+deps += ['net_dpaa2', 'crypto_dpaa2_sec']
 sources = files(
         'dpaa2_hw_dpcon.c',
         'dpaa2_eventdev.c',
diff --git a/drivers/event/octeontx/meson.build b/drivers/event/octeontx/meson.build
index eb17e059d8..1227b2e18d 100644
--- a/drivers/event/octeontx/meson.build
+++ b/drivers/event/octeontx/meson.build
@@ -17,5 +17,4 @@ sources = files(
         'timvf_probe.c',
 )
 
-deps += ['common_octeontx', 'mempool_octeontx', 'bus_vdev', 'net_octeontx']
-deps += ['crypto_octeontx']
+deps = ['net_octeontx', 'crypto_octeontx']
diff --git a/drivers/event/sw/meson.build b/drivers/event/sw/meson.build
index 3a3ebd72a3..450969aa7a 100644
--- a/drivers/event/sw/meson.build
+++ b/drivers/event/sw/meson.build
@@ -8,5 +8,5 @@ sources = files(
         'sw_evdev_xstats.c',
         'sw_evdev.c',
 )
-deps += ['hash', 'bus_vdev']
+deps += ['bus_vdev']
 require_iova_in_mbuf = false
diff --git a/drivers/mempool/cnxk/meson.build b/drivers/mempool/cnxk/meson.build
index e388cce26a..7bbed325df 100644
--- a/drivers/mempool/cnxk/meson.build
+++ b/drivers/mempool/cnxk/meson.build
@@ -18,5 +18,5 @@ sources = files(
 )
 
 headers = files('rte_pmd_cnxk_mempool.h')
-deps += ['eal', 'mbuf', 'kvargs', 'bus_pci', 'common_cnxk', 'mempool']
+deps = ['common_cnxk']
 require_iova_in_mbuf = false
diff --git a/drivers/mempool/dpaa/meson.build b/drivers/mempool/dpaa/meson.build
index c4e9994b83..39fc312344 100644
--- a/drivers/mempool/dpaa/meson.build
+++ b/drivers/mempool/dpaa/meson.build
@@ -6,5 +6,5 @@ if not is_linux
     reason = 'only supported on Linux'
 endif
 
-deps += ['bus_dpaa']
+deps = ['bus_dpaa']
 sources = files('dpaa_mempool.c')
diff --git a/drivers/mempool/dpaa2/meson.build b/drivers/mempool/dpaa2/meson.build
index 3d16d44158..0099b20b97 100644
--- a/drivers/mempool/dpaa2/meson.build
+++ b/drivers/mempool/dpaa2/meson.build
@@ -6,7 +6,7 @@ if not is_linux
     reason = 'only supported on Linux'
 endif
 
-deps += ['bus_fslmc']
+deps = ['bus_fslmc']
 sources = files('dpaa2_hw_mempool.c')
 
 headers = files('rte_dpaa2_mempool.h')
diff --git a/drivers/mempool/octeontx/meson.build b/drivers/mempool/octeontx/meson.build
index 3ccecac75d..f97bcf4a5a 100644
--- a/drivers/mempool/octeontx/meson.build
+++ b/drivers/mempool/octeontx/meson.build
@@ -12,6 +12,6 @@ sources = files(
         'rte_mempool_octeontx.c',
 )
 
-deps += ['mbuf', 'bus_pci', 'common_octeontx']
+deps = ['mbuf', 'bus_pci', 'common_octeontx']
 
 require_iova_in_mbuf = false
diff --git a/drivers/net/cnxk/meson.build b/drivers/net/cnxk/meson.build
index 32ff8aadc0..48a546adb8 100644
--- a/drivers/net/cnxk/meson.build
+++ b/drivers/net/cnxk/meson.build
@@ -320,9 +320,7 @@ sources += files(
 endif
 endif
 
-
-deps += ['bus_pci', 'cryptodev', 'eventdev', 'security']
-deps += ['common_cnxk', 'mempool_cnxk']
+deps = ['eventdev', 'mempool_cnxk']
 
 # Allow implicit vector conversions and strict aliasing warning
 extra_flags = ['-flax-vector-conversions', '-Wno-strict-aliasing']
diff --git a/drivers/net/iavf/meson.build b/drivers/net/iavf/meson.build
index b48bb83438..4849c2341a 100644
--- a/drivers/net/iavf/meson.build
+++ b/drivers/net/iavf/meson.build
@@ -9,7 +9,7 @@ includes += include_directories('../../common/iavf')
 
 testpmd_sources = files('iavf_testpmd.c')
 
-deps += ['common_iavf', 'security', 'cryptodev']
+deps += ['common_iavf', 'security']
 
 sources = files(
         'iavf_ethdev.c',
diff --git a/drivers/net/ice/meson.build b/drivers/net/ice/meson.build
index 1c9dc0cc6d..f9e37f5386 100644
--- a/drivers/net/ice/meson.build
+++ b/drivers/net/ice/meson.build
@@ -18,7 +18,7 @@ sources = files(
 
 testpmd_sources = files('ice_testpmd.c')
 
-deps += ['hash', 'net', 'common_iavf']
+deps += ['hash', 'common_iavf']
 includes += include_directories('base', '../../common/iavf')
 
 if arch_subdir == 'x86'
diff --git a/drivers/net/mana/meson.build b/drivers/net/mana/meson.build
index 4d163fc0f2..68f03fd60d 100644
--- a/drivers/net/mana/meson.build
+++ b/drivers/net/mana/meson.build
@@ -7,7 +7,7 @@ if not is_linux or not (dpdk_conf.has('RTE_ARCH_X86') or dpdk_conf.has('RTE_ARCH
     subdir_done()
 endif
 
-deps += ['pci', 'bus_pci', 'net', 'eal', 'kvargs']
+deps += ['bus_pci']
 
 sources += files(
         'gdma.c',
diff --git a/drivers/net/mlx5/meson.build b/drivers/net/mlx5/meson.build
index 78a8648b43..7c4a63524f 100644
--- a/drivers/net/mlx5/meson.build
+++ b/drivers/net/mlx5/meson.build
@@ -8,7 +8,7 @@ if not (is_linux or is_windows)
     subdir_done()
 endif
 
-deps += ['hash', 'common_mlx5']
+deps += ['common_mlx5']
 if not dpdk_conf.has('RTE_COMMON_MLX5')
     # avoid referencing undefined variables from common/mlx5
     subdir_done()
diff --git a/drivers/net/sfc/meson.build b/drivers/net/sfc/meson.build
index 5adde68517..820ee6c91e 100644
--- a/drivers/net/sfc/meson.build
+++ b/drivers/net/sfc/meson.build
@@ -71,7 +71,7 @@ if not cc.links(atomic_check_code)
     ext_deps += libatomic_dep
 endif
 
-deps += ['common_sfc_efx', 'bus_pci', 'hash']
+deps += ['common_sfc_efx', 'hash']
 sources = files(
         'sfc_ethdev.c',
         'sfc_kvargs.c',
diff --git a/drivers/net/softnic/meson.build b/drivers/net/softnic/meson.build
index 5dfbd16c77..1529ef38f9 100644
--- a/drivers/net/softnic/meson.build
+++ b/drivers/net/softnic/meson.build
@@ -15,4 +15,4 @@ sources = files(
         'rte_eth_softnic_swq.c',
         'rte_eth_softnic_thread.c',
 )
-deps += ['pipeline', 'port', 'table']
+deps += ['pipeline']
diff --git a/drivers/raw/cnxk_bphy/meson.build b/drivers/raw/cnxk_bphy/meson.build
index bb5d2ffb80..b38b071697 100644
--- a/drivers/raw/cnxk_bphy/meson.build
+++ b/drivers/raw/cnxk_bphy/meson.build
@@ -2,7 +2,7 @@
 # Copyright(C) 2021 Marvell.
 #
 
-deps += ['bus_pci', 'common_cnxk', 'rawdev']
+deps += ['common_cnxk', 'rawdev']
 sources = files(
         'cnxk_bphy.c',
         'cnxk_bphy_cgx.c',
diff --git a/drivers/raw/cnxk_gpio/meson.build b/drivers/raw/cnxk_gpio/meson.build
index 9d9a527392..6d17fe573f 100644
--- a/drivers/raw/cnxk_gpio/meson.build
+++ b/drivers/raw/cnxk_gpio/meson.build
@@ -2,7 +2,7 @@
 # Copyright(C) 2021 Marvell.
 #
 
-deps += ['bus_vdev', 'common_cnxk', 'rawdev', 'kvargs']
+deps += ['bus_vdev', 'common_cnxk', 'rawdev']
 sources = files(
         'cnxk_gpio.c',
         'cnxk_gpio_irq.c',
diff --git a/drivers/raw/ntb/meson.build b/drivers/raw/ntb/meson.build
index 9096f2b25a..8f79d3b16a 100644
--- a/drivers/raw/ntb/meson.build
+++ b/drivers/raw/ntb/meson.build
@@ -1,7 +1,7 @@
 # SPDX-License-Identifier: BSD-3-Clause
 # Copyright(c) 2019 Intel Corporation.
 
-deps += ['rawdev', 'mbuf', 'mempool', 'pci', 'bus_pci']
+deps += ['rawdev', 'mbuf', 'bus_pci']
 sources = files('ntb.c',
                 'ntb_hw_intel.c')
 headers = files('rte_pmd_ntb.h')
diff --git a/drivers/raw/skeleton/meson.build b/drivers/raw/skeleton/meson.build
index 9d5fcf6514..7d76fe71b3 100644
--- a/drivers/raw/skeleton/meson.build
+++ b/drivers/raw/skeleton/meson.build
@@ -1,7 +1,7 @@
 # SPDX-License-Identifier: BSD-3-Clause
 # Copyright 2018 NXP
 
-deps += ['rawdev', 'kvargs', 'mbuf', 'bus_vdev']
+deps += ['rawdev', 'mbuf', 'bus_vdev']
 sources = files(
         'skeleton_rawdev.c',
         'skeleton_rawdev_test.c',
diff --git a/drivers/regex/mlx5/meson.build b/drivers/regex/mlx5/meson.build
index 6070b37501..f75bf2e084 100644
--- a/drivers/regex/mlx5/meson.build
+++ b/drivers/regex/mlx5/meson.build
@@ -7,7 +7,7 @@ if not is_linux
     subdir_done()
 endif
 
-deps += ['common_mlx5', 'eal']
+deps += ['common_mlx5']
 if not dpdk_conf.has('RTE_COMMON_MLX5')
     # avoid referencing undefined variables from common/mlx5
     subdir_done()
diff --git a/drivers/vdpa/ifc/meson.build b/drivers/vdpa/ifc/meson.build
index f78d36a715..f4ed4f491f 100644
--- a/drivers/vdpa/ifc/meson.build
+++ b/drivers/vdpa/ifc/meson.build
@@ -1,6 +1,6 @@
 # SPDX-License-Identifier: BSD-3-Clause
 # Copyright(c) 2018 Intel Corporation
 
-deps += 'vhost'
+deps += 'bus_pci'
 sources = files('ifcvf_vdpa.c', 'base/ifcvf.c')
 includes += include_directories('base')
diff --git a/drivers/vdpa/meson.build b/drivers/vdpa/meson.build
index e01c277b9e..747cdc7c55 100644
--- a/drivers/vdpa/meson.build
+++ b/drivers/vdpa/meson.build
@@ -11,5 +11,4 @@ drivers = [
         'nfp',
         'sfc',
 ]
-std_deps = ['bus_pci']
-std_deps += ['vhost']
+std_deps = ['vhost']
diff --git a/drivers/vdpa/mlx5/meson.build b/drivers/vdpa/mlx5/meson.build
index e224d1bcc9..1263ac43a4 100644
--- a/drivers/vdpa/mlx5/meson.build
+++ b/drivers/vdpa/mlx5/meson.build
@@ -7,7 +7,7 @@ if not is_linux
     subdir_done()
 endif
 
-deps += ['hash', 'common_mlx5', 'vhost', 'pci', 'eal', 'sched']
+deps += ['common_mlx5', 'vhost', 'sched']
 if not dpdk_conf.has('RTE_COMMON_MLX5')
     # avoid referencing undefined variables from common/mlx5
     subdir_done()
diff --git a/drivers/vdpa/sfc/meson.build b/drivers/vdpa/sfc/meson.build
index 933f3f18f3..465ca9f220 100644
--- a/drivers/vdpa/sfc/meson.build
+++ b/drivers/vdpa/sfc/meson.build
@@ -16,7 +16,7 @@ foreach flag: extra_flags
     endif
 endforeach
 
-deps += ['common_sfc_efx', 'bus_pci']
+deps += ['common_sfc_efx']
 sources = files(
         'sfc_vdpa.c',
         'sfc_vdpa_hw.c',
-- 
2.43.5


^ permalink raw reply	[flat|nested] 54+ messages in thread

* [PATCH v4 7/8] build: reduce app dependencies
  2024-11-26 14:39   ` [PATCH v4 0/8] Record " Anatoly Burakov
                       ` (5 preceding siblings ...)
  2024-11-26 14:39     ` [PATCH v4 6/8] build: reduce driver dependencies Anatoly Burakov
@ 2024-11-26 14:39     ` Anatoly Burakov
  2024-11-26 14:39     ` [PATCH v4 8/8] devtools: add script to generate DPDK dependency graphs Anatoly Burakov
  2024-11-26 15:11     ` [PATCH v4 0/8] Record and rework component dependencies Burakov, Anatoly
  8 siblings, 0 replies; 54+ messages in thread
From: Anatoly Burakov @ 2024-11-26 14:39 UTC (permalink / raw)
  To: dev, Reshma Pattan, Stephen Hemminger, Sunil Kumar Kori,
	Rakesh Kudurumalla, Brian Dooley, Vladimir Medvedkin,
	Konstantin Ananyev

From: Bruce Richardson <bruce.richardson@intel.com>

Remove any unnecessary dependencies from the app dependency lists.
This will give each app a near-minimum set of required dependencies.

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
---
 app/dumpcap/meson.build          | 2 +-
 app/graph/meson.build            | 2 +-
 app/pdump/meson.build            | 2 +-
 app/proc-info/meson.build        | 2 +-
 app/test-crypto-perf/meson.build | 2 +-
 app/test-fib/meson.build         | 2 +-
 app/test-sad/meson.build         | 2 +-
 app/test/meson.build             | 2 +-
 8 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/app/dumpcap/meson.build b/app/dumpcap/meson.build
index 69c016c780..6204cf051a 100644
--- a/app/dumpcap/meson.build
+++ b/app/dumpcap/meson.build
@@ -14,4 +14,4 @@ endif
 
 ext_deps += pcap_dep
 sources = files('main.c')
-deps += ['ethdev', 'pdump', 'pcapng', 'bpf']
+deps += ['pdump']
diff --git a/app/graph/meson.build b/app/graph/meson.build
index 344e4a418f..9c4cd080d9 100644
--- a/app/graph/meson.build
+++ b/app/graph/meson.build
@@ -9,7 +9,7 @@ if not build
     subdir_done()
 endif
 
-deps += ['graph', 'eal', 'lpm', 'ethdev', 'node', 'cmdline', 'net']
+deps += ['node', 'cmdline']
 sources = files(
         'cli.c',
         'conn.c',
diff --git a/app/pdump/meson.build b/app/pdump/meson.build
index fb282bba1f..a10f9d6124 100644
--- a/app/pdump/meson.build
+++ b/app/pdump/meson.build
@@ -8,4 +8,4 @@ if is_windows
 endif
 
 sources = files('main.c')
-deps += ['ethdev', 'kvargs', 'pdump']
+deps += ['pdump']
diff --git a/app/proc-info/meson.build b/app/proc-info/meson.build
index 156592119b..24b75b9ace 100644
--- a/app/proc-info/meson.build
+++ b/app/proc-info/meson.build
@@ -8,7 +8,7 @@ if is_windows
 endif
 
 sources = files('main.c')
-deps += ['ethdev', 'security', 'eventdev']
+deps += ['security', 'eventdev']
 if dpdk_conf.has('RTE_LIB_METRICS')
     optional_deps += 'metrics'
 endif
diff --git a/app/test-crypto-perf/meson.build b/app/test-crypto-perf/meson.build
index 05c71e0a0c..8904f8607d 100644
--- a/app/test-crypto-perf/meson.build
+++ b/app/test-crypto-perf/meson.build
@@ -19,7 +19,7 @@ sources = files(
         'cperf_test_verify.c',
         'main.c',
 )
-deps += ['cryptodev', 'net', 'security']
+deps += ['cryptodev']
 if dpdk_conf.has('RTE_CRYPTO_SCHEDULER')
     optional_deps += 'crypto_scheduler'
 endif
diff --git a/app/test-fib/meson.build b/app/test-fib/meson.build
index eb36772cf3..25e2ea1a1d 100644
--- a/app/test-fib/meson.build
+++ b/app/test-fib/meson.build
@@ -8,4 +8,4 @@ if is_windows
 endif
 
 sources = files('main.c')
-deps += ['fib', 'lpm', 'net']
+deps += ['fib', 'lpm']
diff --git a/app/test-sad/meson.build b/app/test-sad/meson.build
index a50616a9c7..414e2a05cb 100644
--- a/app/test-sad/meson.build
+++ b/app/test-sad/meson.build
@@ -8,4 +8,4 @@ if is_windows
 endif
 
 sources = files('main.c')
-deps += ['ipsec', 'net']
+deps += ['ipsec']
diff --git a/app/test/meson.build b/app/test/meson.build
index 9383b241a5..c7c90f1267 100644
--- a/app/test/meson.build
+++ b/app/test/meson.build
@@ -2,7 +2,7 @@
 # Copyright(c) 2017-2023 Intel Corporation
 
 # the main test files [test.c and commands.c] relies on these libraries
-deps += ['cmdline', 'ring', 'mempool', 'mbuf']
+deps += ['cmdline']
 sources += files('commands.c', 'test.c')
 
 # optional dependencies: some files may use these - and so we should link them in -
-- 
2.43.5


^ permalink raw reply	[flat|nested] 54+ messages in thread

* [PATCH v4 8/8] devtools: add script to generate DPDK dependency graphs
  2024-11-26 14:39   ` [PATCH v4 0/8] Record " Anatoly Burakov
                       ` (6 preceding siblings ...)
  2024-11-26 14:39     ` [PATCH v4 7/8] build: reduce app dependencies Anatoly Burakov
@ 2024-11-26 14:39     ` Anatoly Burakov
  2024-11-26 15:11     ` [PATCH v4 0/8] Record and rework component dependencies Burakov, Anatoly
  8 siblings, 0 replies; 54+ messages in thread
From: Anatoly Burakov @ 2024-11-26 14:39 UTC (permalink / raw)
  To: dev

From: Bruce Richardson <bruce.richardson@intel.com>

Rather than the single monolithic graph that would be output from the
deps.dot file in a build directory, we can post-process that to generate
simpler graphs for different tasks. This new "draw_dependency_graphs"
script takes the "deps.dot" as input and generates an output file that
has the nodes categorized, filtering them based off the requested node or
category. For example, use "--match net/ice" to show the dependency tree
from that driver, or "--match lib" to show just the library dependency
tree.

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com>
---
 devtools/draw-dependency-graphs.py | 223 +++++++++++++++++++++++++++++
 1 file changed, 223 insertions(+)
 create mode 100755 devtools/draw-dependency-graphs.py

diff --git a/devtools/draw-dependency-graphs.py b/devtools/draw-dependency-graphs.py
new file mode 100755
index 0000000000..4fb765498d
--- /dev/null
+++ b/devtools/draw-dependency-graphs.py
@@ -0,0 +1,223 @@
+#! /usr/bin/env python3
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright(c) 2024 Intel Corporation
+
+import argparse
+import collections
+import sys
+import typing as T
+
+# typedef for dependency data types
+Deps = T.Set[str]
+DepData = T.Dict[str, T.Dict[str, T.Dict[bool, Deps]]]
+
+
+def parse_dep_line(line: str) -> T.Tuple[str, Deps, str, bool]:
+    """Parse digraph line into (component, {dependencies}, type, optional)."""
+    # extract attributes first
+    first, last = line.index("["), line.rindex("]")
+    edge_str, attr_str = line[:first], line[first + 1 : last]
+    # key=value, key=value, ...
+    attrs = {
+        key.strip('" '): value.strip('" ')
+        for attr_kv in attr_str.split(",")
+        for key, value in [attr_kv.strip().split("=", 1)]
+    }
+    # check if edge is defined as dotted line, meaning it's optional
+    optional = "dotted" in attrs.get("style", "")
+    try:
+        component_type = attrs["dpdk_componentType"]
+    except KeyError as _e:
+        raise ValueError(f"Error: missing component type: {line}") from _e
+
+    # now, extract component name and any of its dependencies
+    deps: T.Set[str] = set()
+    try:
+        component, deps_str = edge_str.strip('" ').split("->", 1)
+        component = component.strip().strip('" ')
+        deps_str = deps_str.strip().strip("{}")
+        deps = {d.strip('" ') for d in deps_str.split(",")}
+    except ValueError as _e:
+        component = edge_str.strip('" ')
+
+    return component, deps, component_type, optional
+
+
+def gen_dep_line(component: str, deps: T.Set[str], optional: bool) -> str:
+    """Generate a dependency line for a component."""
+    # we use dotted line to represent optional components
+    attr_str = ' [style="dotted"]' if optional else ""
+    dep_list_str = '", "'.join(deps)
+    deps_str = "" if not deps else f' -> {{ "{dep_list_str}" }}'
+    return f'    "{component}"{deps_str}{attr_str}\n'
+
+
+def read_deps_list(lines: T.List[str]) -> DepData:
+    """Read a list of dependency lines into a dictionary."""
+    deps_data: T.Dict[str, T.Any] = {}
+    for ln in lines:
+        if ln.startswith("digraph") or ln == "}":
+            continue
+
+        component, deps, component_type, optional = parse_dep_line(ln)
+
+        # each component will have two sets of dependencies - required and optional
+        c_dict = deps_data.setdefault(component_type, {}).setdefault(component, {})
+        c_dict[optional] = deps
+    return deps_data
+
+
+def create_classified_graph(deps_data: DepData) -> T.Iterator[str]:
+    """Create a graph of dependencies with components classified by type."""
+    yield "digraph dpdk_dependencies {\n  overlap=false\n  model=subset\n"
+    for n, deps_t in enumerate(deps_data.items()):
+        component_type, component_dict = deps_t
+        yield f'  subgraph cluster_{n} {{\n    label = "{component_type}"\n'
+        for component, optional_d in component_dict.items():
+            for optional, deps in optional_d.items():
+                yield gen_dep_line(component, deps, optional)
+        yield "  }\n"
+    yield "}\n"
+
+
+def parse_match(line: str, dep_data: DepData) -> T.List[str]:
+    """Extract list of components from a category string."""
+    # if this is not a compound string, we have very few valid choices
+    if "/" not in line:
+        # is this a category?
+        if line in dep_data:
+            return list(dep_data[line].keys())
+        # this isn't a category. maybe an app name?
+        maybe_app_name = f"dpdk-{line}"
+        if maybe_app_name in dep_data["app"]:
+            return [maybe_app_name]
+        if maybe_app_name in dep_data["examples"]:
+            return [maybe_app_name]
+        # this isn't an app name either, so just look for component with that name
+        for _, component_dict in dep_data.items():
+            if line in component_dict:
+                return [line]
+        # nothing found still. one last try: maybe it's a driver? we have to be careful though
+        # because a driver name may not be unique, e.g. common/iavf and net/iavf. so, only pick
+        # a driver if we can find exactly one driver that matches.
+        found_drivers: T.List[str] = []
+        for component in dep_data["drivers"].keys():
+            _, drv_name = component.split("_", 1)
+            if drv_name == line:
+                found_drivers.append(component)
+        if len(found_drivers) == 1:
+            return found_drivers
+        # we failed to find anything, report error
+        raise ValueError(f"Error: unknown component: {line}")
+
+    # this is a compound string, so we have to do some matching. we may have two or three levels
+    # of hierarchy, as driver/net/ice and net/ice should both be valid.
+
+    # if there are three levels of hierarchy, this must be a driver
+    try:
+        ctype, drv_class, drv_name = line.split("/", 2)
+        component_name = f"{drv_class}_{drv_name}"
+        # we want to directly access the dict to trigger KeyError, and not catch them here
+        if component_name in dep_data[ctype]:
+            return [component_name]
+        else:
+            raise KeyError(f"Unknown category: {line}")
+    except ValueError:
+        # not three levels of hierarchy, try two
+        pass
+
+    first, second = line.split("/", 1)
+
+    # this could still be a driver, just without the "drivers" prefix
+    for component in dep_data["drivers"].keys():
+        if component == f"{first}_{second}":
+            return [component]
+    # could be driver wildcard, e.g. drivers/net
+    if first == "drivers":
+        drv_match: T.List[str] = [
+            drv_name
+            for drv_name in dep_data["drivers"]
+            if drv_name.startswith(f"{second}_")
+        ]
+        if drv_match:
+            return drv_match
+    # may be category + component
+    if first in dep_data:
+        # go through all components in the category
+        if second in dep_data[first]:
+            return [second]
+        # if it's an app or an example, it may have "dpdk-" in front
+        if first in ["app", "examples"]:
+            maybe_app_name = f"dpdk-{second}"
+            if maybe_app_name in dep_data[first]:
+                return [maybe_app_name]
+    # and nothing of value was found
+    raise ValueError(f"Error: unknown component: {line}")
+
+
+def filter_deps(dep_data: DepData, criteria: T.List[str]) -> None:
+    """Filter dependency data to include only specified components."""
+    # this is a two step process: when we get a list of components, we need to
+    # go through all of them and note any dependencies they have, and expand the
+    # list of components with those dependencies. then we filter.
+
+    # walk the dependency list and include all possible dependencies
+    deps_seen: Deps = set()
+    deps_stack = collections.deque(criteria)
+    while deps_stack:
+        component = deps_stack.popleft()
+        if component in deps_seen:
+            continue
+        deps_seen.add(component)
+        for component_type, component_dict in dep_data.items():
+            try:
+                deps = component_dict[component]
+            except KeyError:
+                # wrong component type
+                continue
+            for _, dep_list in deps.items():
+                deps_stack.extend(dep_list)
+    criteria += list(deps_seen)
+
+    # now, "components" has all the dependencies we need to include, so we can filter
+    for component_type, component_dict in dep_data.items():
+        dep_data[component_type] = {
+            component: deps
+            for component, deps in component_dict.items()
+            if component in criteria
+        }
+
+
+def main():
+    parser = argparse.ArgumentParser(
+        description="Utility to generate dependency tree graphs for DPDK"
+    )
+    parser.add_argument(
+        "--match",
+        type=str,
+        help="Output hierarchy for component or category, e.g. net/ice, lib, app, drivers/net, etc.",
+    )
+    parser.add_argument(
+        "input_file",
+        type=argparse.FileType("r"),
+        help="Path to the deps.dot file from a DPDK build directory",
+    )
+    parser.add_argument(
+        "output_file",
+        type=argparse.FileType("w"),
+        help="Path to the desired output dot file",
+    )
+    args = parser.parse_args()
+
+    deps = read_deps_list([ln.strip() for ln in args.input_file.readlines()])
+    if args.match:
+        try:
+            filter_deps(deps, parse_match(args.match, deps))
+        except (KeyError, ValueError) as e:
+            print(e, file=sys.stderr)
+            return
+    args.output_file.writelines(create_classified_graph(deps))
+
+
+if __name__ == "__main__":
+    main()
-- 
2.43.5


^ permalink raw reply	[flat|nested] 54+ messages in thread

* Re: [PATCH v4 0/8] Record and rework component dependencies
  2024-11-26 14:39   ` [PATCH v4 0/8] Record " Anatoly Burakov
                       ` (7 preceding siblings ...)
  2024-11-26 14:39     ` [PATCH v4 8/8] devtools: add script to generate DPDK dependency graphs Anatoly Burakov
@ 2024-11-26 15:11     ` Burakov, Anatoly
  8 siblings, 0 replies; 54+ messages in thread
From: Burakov, Anatoly @ 2024-11-26 15:11 UTC (permalink / raw)
  To: dev

On 11/26/2024 3:39 PM, Anatoly Burakov wrote:
> As part of the meson build, we can record the dependencies for each
> component as we process it, logging them to a file. This file can be
> used as input to a number of other scripts and tools, for example, to
> graph the dependencies, or to allow higher-level build-config tools to
> automatically enable component requirements, etc.
> 
> The first patch of this set separates dependencies inside meson into
> optional or mandatory. The second patch of this set generates the basic
> dependency tree. The third patch does some processing of that dependency
> tree to identify cases where dependencies are being unnecessarily
> specified. Reducing these makes it easier to have readable dependency
> graphs in future, without affecting the build.
> 
> The following 4 patches are based on the output of the second patch, and
> greatly cut down the number of direct dependency links between
> components. Even with the cut-down dependencies, the full dependency
> graph is nigh-unreadable, so the final patch adds a new script to
> generate dependency tree subgraphs, creating dot files for e.g. the
> dependencies of a particular component, or a component class such as
> mempool drivers.
> 
> v3 -> v4:
> - Update to latest main
> 
> v2 -> v3:
> - Split dependencies into optional and mandatory
> - Fixup graph scripts to read and generate graphs that encode optional
>    dependencies into the graph
> - Python version fixes to avoid using features not available in minimum
>    supported Python version
> - Formatting with Ruff, and PEP-484 compliance

Forgot the series ack:

Acked-by: Morten Brørup <mb@smartsharesystems.com>

-- 
Thanks,
Anatoly

^ permalink raw reply	[flat|nested] 54+ messages in thread

* RE: [PATCH v4 6/8] build: reduce driver dependencies
  2024-11-26 14:39     ` [PATCH v4 6/8] build: reduce driver dependencies Anatoly Burakov
@ 2024-11-27  2:17       ` Xu, Rosen
  0 siblings, 0 replies; 54+ messages in thread
From: Xu, Rosen @ 2024-11-27  2:17 UTC (permalink / raw)
  To: Burakov, Anatoly, dev, Chautru, Nicolas, Gagandeep Singh,
	Hemant Agrawal, Parav Pandit, Xueming Li, Sachin Saxena,
	Chenbo Xia, Nipun Gupta, Tomasz Duszynski, Chengwen Feng,
	Nithin Dabilpuram, Kiran Kumar K, Sunil Kumar Kori, Satha Rao,
	Harman Kalra, Anoob Joseph, Wu, Jingjing, Shetty, Praveen,
	Dariusz Sosnowski, Viacheslav Ovsiienko, Bing Zhao, Ori Kam,
	Suanming Mou, Matan Azrad, Fan Zhang, Ashish Gupta,
	Nagadheeraj Rottela, Ajit Khaparde, Vikas Gupta, Ankur Dwivedi,
	Tejasree Kondoj, Ji, Kai, De Lara Guarch, Pablo,
	Srikanth Jampala, Vamsi Attunuru, Gowrishankar Muthukrishnan,
	Vidya Sagar Velumuri, Laatz, Kevin, Richardson,  Bruce,
	Pavan Nikhilesh, Shijith Thotton, Pathak, Pravin, Jerin Jacob,
	Van Haaren, Harry, Ashwin Sekhar T K, Medvedkin, Vladimir,
	Stokes, Ian, Long Li, Wei Hu, Andrew Rybchenko, Dumitrescu,
	Cristian, Jakub Palider, Vijay Kumar Srivastava

Hi,

> -----Original Message-----
> From: Burakov, Anatoly <anatoly.burakov@intel.com>
> Sent: Tuesday, November 26, 2024 10:40 PM
> To: dev@dpdk.org; Chautru, Nicolas <nicolas.chautru@intel.com>;
> Gagandeep Singh <g.singh@nxp.com>; Hemant Agrawal
> <hemant.agrawal@nxp.com>; Parav Pandit <parav@nvidia.com>; Xueming Li
> <xuemingl@nvidia.com>; Sachin Saxena <sachin.saxena@nxp.com>; Xu,
> Rosen <rosen.xu@intel.com>; Chenbo Xia <chenbox@nvidia.com>; Nipun
> Gupta <nipun.gupta@amd.com>; Tomasz Duszynski
> <tduszynski@marvell.com>; Chengwen Feng
> <fengchengwen@huawei.com>; Nithin Dabilpuram
> <ndabilpuram@marvell.com>; Kiran Kumar K <kirankumark@marvell.com>;
> Sunil Kumar Kori <skori@marvell.com>; Satha Rao
> <skoteshwar@marvell.com>; Harman Kalra <hkalra@marvell.com>; Anoob
> Joseph <anoobj@marvell.com>; Wu, Jingjing <jingjing.wu@intel.com>;
> Shetty, Praveen <praveen.shetty@intel.com>; Dariusz Sosnowski
> <dsosnowski@nvidia.com>; Viacheslav Ovsiienko <viacheslavo@nvidia.com>;
> Bing Zhao <bingz@nvidia.com>; Ori Kam <orika@nvidia.com>; Suanming
> Mou <suanmingm@nvidia.com>; Matan Azrad <matan@nvidia.com>; Fan
> Zhang <fanzhang.oss@gmail.com>; Ashish Gupta
> <ashish.gupta@marvell.com>; Nagadheeraj Rottela
> <rnagadheeraj@marvell.com>; Ajit Khaparde
> <ajit.khaparde@broadcom.com>; Vikas Gupta
> <vikas.gupta@broadcom.com>; Ankur Dwivedi <adwivedi@marvell.com>;
> Tejasree Kondoj <ktejasree@marvell.com>; Ji, Kai <kai.ji@intel.com>; De
> Lara Guarch, Pablo <pablo.de.lara.guarch@intel.com>; Srikanth Jampala
> <jsrikanth@marvell.com>; Vamsi Attunuru <vattunuru@marvell.com>;
> Gowrishankar Muthukrishnan <gmuthukrishn@marvell.com>; Vidya Sagar
> Velumuri <vvelumuri@marvell.com>; Laatz, Kevin <kevin.laatz@intel.com>;
> Richardson, Bruce <bruce.richardson@intel.com>; Pavan Nikhilesh
> <pbhagavatula@marvell.com>; Shijith Thotton <sthotton@marvell.com>;
> Pathak, Pravin <pravin.pathak@intel.com>; Jerin Jacob
> <jerinj@marvell.com>; Van Haaren, Harry <harry.van.haaren@intel.com>;
> Ashwin Sekhar T K <asekhar@marvell.com>; Medvedkin, Vladimir
> <vladimir.medvedkin@intel.com>; Stokes, Ian <ian.stokes@intel.com>; Long
> Li <longli@microsoft.com>; Wei Hu <weh@microsoft.com>; Andrew
> Rybchenko <andrew.rybchenko@oktetlabs.ru>; Dumitrescu, Cristian
> <cristian.dumitrescu@intel.com>; Jakub Palider <jpalider@marvell.com>;
> Vijay Kumar Srivastava <vsrivast@xilinx.com>
> Subject: [PATCH v4 6/8] build: reduce driver dependencies
> 
> From: Bruce Richardson <bruce.richardson@intel.com>
> 
> Remove any unnecessary dependencies from the driver dependency lists.
> This will give each driver a near-minimum set of required dependencies.
> 
> Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
> ---
>  drivers/bus/ifpga/meson.build              | 2 +-
> diff --git a/drivers/bus/ifpga/meson.build b/drivers/bus/ifpga/meson.build
> index dedc94db2d..e87b08eaf4 100644
> --- a/drivers/bus/ifpga/meson.build
> +++ b/drivers/bus/ifpga/meson.build
> @@ -7,6 +7,6 @@ if is_windows
>      subdir_done()
>  endif
> 
> -deps += ['pci', 'kvargs', 'rawdev']
> +deps = ['pci', 'rawdev']
>  driver_sdk_headers += files('bus_ifpga_driver.h')  sources =
> files('ifpga_bus.c') diff --git a/drivers/bus/pci/meson.build
> b/drivers/bus/pci/meson.build index fede114dc7..776c3d1550 100644

Reviewed-by: Rosen Xu <rosen.xu@intel.com>

^ permalink raw reply	[flat|nested] 54+ messages in thread

* [PATCH v5 0/8] Record and rework component dependencies
  2024-09-04 15:08 ` [PATCH v3 0/8] " Anatoly Burakov
                     ` (9 preceding siblings ...)
  2024-11-26 14:39   ` [PATCH v4 0/8] Record " Anatoly Burakov
@ 2024-11-27 14:56   ` Anatoly Burakov
  2024-11-27 14:56     ` [PATCH v5 1/8] build: introduce optional internal dependencies Anatoly Burakov
                       ` (7 more replies)
  10 siblings, 8 replies; 54+ messages in thread
From: Anatoly Burakov @ 2024-11-27 14:56 UTC (permalink / raw)
  To: dev

As part of the meson build, we can record the dependencies for each
component as we process it, logging them to a file. This file can be
used as input to a number of other scripts and tools, for example, to
graph the dependencies, or to allow higher-level build-config tools to
automatically enable component requirements, etc.

The first patch of this set separates dependencies inside meson into
optional or mandatory. The second patch of this set generates the basic
dependency tree. The third patch does some processing of that dependency
tree to identify cases where dependencies are being unnecessarily
specified. Reducing these makes it easier to have readable dependency
graphs in future, without affecting the build.

The following 4 patches are based on the output of the second patch, and
greatly cut down the number of direct dependency links between
components. Even with the cut-down dependencies, the full dependency
graph is nigh-unreadable, so the final patch adds a new script to
generate dependency tree subgraphs, creating dot files for e.g. the
dependencies of a particular component, or a component class such as
mempool drivers.

v4 -> v5:
- Improve optional dependency handling by making it (mostly) automatic
- Fix CI issue from accidentally changing testpmd binary filename
- Explicitly encode display name vs binary name information in the graph
- Reduce some more dependencies
- Update all scripts to handle new graph output format

v3 -> v4:
- Update to latest main

v2 -> v3:
- Split dependencies into optional and mandatory
- Fixup graph scripts to read and generate graphs that encode optional
  dependencies into the graph
- Python version fixes to avoid using features not available in minimum
  supported Python version
- Formatting with Ruff, and PEP-484 compliance

Anatoly Burakov (1):
  build: introduce optional internal dependencies

Bruce Richardson (7):
  build: output a dependency log in build directory
  devtools: add script to flag unneeded dependencies
  build: remove kvargs from driver class dependencies
  build: reduce library dependencies
  build: reduce driver dependencies
  build: reduce app dependencies
  devtools: add script to generate DPDK dependency graphs

 app/dumpcap/meson.build                    |   2 +-
 app/graph/meson.build                      |   2 +-
 app/meson.build                            |  31 ++-
 app/pdump/meson.build                      |   2 +-
 app/proc-info/meson.build                  |   6 +-
 app/test-bbdev/meson.build                 |  18 +-
 app/test-crypto-perf/meson.build           |   6 +-
 app/test-fib/meson.build                   |   2 +-
 app/test-pmd/meson.build                   |  56 ++----
 app/test-sad/meson.build                   |   2 +-
 app/test/meson.build                       |  14 +-
 buildtools/log-deps.py                     |  94 +++++++++
 buildtools/meson.build                     |   2 +
 devtools/draw-dependency-graphs.py         | 223 +++++++++++++++++++++
 devtools/find-duplicate-deps.py            |  62 ++++++
 drivers/baseband/fpga_5gnr_fec/meson.build |   2 +-
 drivers/baseband/fpga_lte_fec/meson.build  |   2 +-
 drivers/baseband/la12xx/meson.build        |   2 +-
 drivers/baseband/null/meson.build          |   2 +-
 drivers/baseband/turbo_sw/meson.build      |   2 +-
 drivers/bus/auxiliary/meson.build          |   2 -
 drivers/bus/dpaa/meson.build               |   2 +-
 drivers/bus/fslmc/meson.build              |   2 +-
 drivers/bus/ifpga/meson.build              |   2 +-
 drivers/bus/pci/meson.build                |   4 +-
 drivers/bus/platform/meson.build           |   1 -
 drivers/bus/uacce/meson.build              |   2 -
 drivers/bus/vdev/meson.build               |   2 -
 drivers/common/cnxk/meson.build            |   4 +-
 drivers/common/cpt/meson.build             |   2 +-
 drivers/common/idpf/meson.build            |   2 +-
 drivers/common/mlx5/meson.build            |   2 +-
 drivers/common/qat/meson.build             |   3 +-
 drivers/compress/mlx5/meson.build          |   2 +-
 drivers/compress/nitrox/meson.build        |   2 +-
 drivers/compress/octeontx/meson.build      |   2 +-
 drivers/crypto/bcmfs/meson.build           |   2 +-
 drivers/crypto/cnxk/meson.build            |   2 +-
 drivers/crypto/dpaa_sec/meson.build        |   2 +-
 drivers/crypto/ipsec_mb/meson.build        |   2 +-
 drivers/crypto/mlx5/meson.build            |   2 +-
 drivers/crypto/nitrox/meson.build          |   2 +-
 drivers/dma/cnxk/meson.build               |   2 +-
 drivers/dma/dpaa/meson.build               |   2 +-
 drivers/dma/dpaa2/meson.build              |   2 +-
 drivers/dma/odm/meson.build                |   2 +-
 drivers/dma/skeleton/meson.build           |   2 +-
 drivers/event/cnxk/meson.build             |   2 +-
 drivers/event/dlb2/meson.build             |   2 +-
 drivers/event/dpaa2/meson.build            |   2 +-
 drivers/event/meson.build                  |   2 +-
 drivers/event/octeontx/meson.build         |   3 +-
 drivers/event/sw/meson.build               |   2 +-
 drivers/mempool/cnxk/meson.build           |   2 +-
 drivers/mempool/dpaa/meson.build           |   2 +-
 drivers/mempool/dpaa2/meson.build          |   2 +-
 drivers/mempool/octeontx/meson.build       |   2 +-
 drivers/meson.build                        |  27 ++-
 drivers/ml/cnxk/meson.build                |   2 +-
 drivers/net/cnxk/meson.build               |   4 +-
 drivers/net/iavf/meson.build               |   2 +-
 drivers/net/ice/meson.build                |   2 +-
 drivers/net/mana/meson.build               |   2 +-
 drivers/net/meson.build                    |   2 +-
 drivers/net/mlx5/meson.build               |   2 +-
 drivers/net/sfc/meson.build                |   2 +-
 drivers/net/softnic/meson.build            |   2 +-
 drivers/net/virtio/meson.build             |   2 +-
 drivers/raw/cnxk_bphy/meson.build          |   2 +-
 drivers/raw/cnxk_gpio/meson.build          |   2 +-
 drivers/raw/gdtc/meson.build               |   2 +-
 drivers/raw/ntb/meson.build                |   2 +-
 drivers/raw/skeleton/meson.build           |   2 +-
 drivers/regex/cn9k/meson.build             |   2 +-
 drivers/regex/meson.build                  |   2 +-
 drivers/regex/mlx5/meson.build             |   2 +-
 drivers/vdpa/ifc/meson.build               |   2 +-
 drivers/vdpa/meson.build                   |   3 +-
 drivers/vdpa/mlx5/meson.build              |   2 +-
 drivers/vdpa/sfc/meson.build               |   2 +-
 examples/ethtool/meson.build               |   4 +-
 examples/l2fwd-crypto/meson.build          |   4 +-
 examples/l3fwd/meson.build                 |   4 +-
 examples/meson.build                       |  31 ++-
 examples/vm_power_manager/meson.build      |  16 +-
 lib/argparse/meson.build                   |   2 +-
 lib/bbdev/meson.build                      |   2 +-
 lib/bitratestats/meson.build               |   2 +-
 lib/bpf/meson.build                        |   2 +-
 lib/cmdline/meson.build                    |   2 +-
 lib/compressdev/meson.build                |   2 +-
 lib/cryptodev/meson.build                  |   2 +-
 lib/dispatcher/meson.build                 |   2 +-
 lib/distributor/meson.build                |   2 +-
 lib/dmadev/meson.build                     |   2 -
 lib/eal/meson.build                        |   5 +-
 lib/efd/meson.build                        |   2 +-
 lib/ethdev/meson.build                     |   2 +-
 lib/eventdev/meson.build                   |   3 +-
 lib/fib/meson.build                        |   4 +-
 lib/gpudev/meson.build                     |   2 +-
 lib/graph/meson.build                      |   2 +-
 lib/gro/meson.build                        |   2 +-
 lib/gso/meson.build                        |   2 +-
 lib/hash/meson.build                       |   4 +-
 lib/ip_frag/meson.build                    |   2 +-
 lib/ipsec/meson.build                      |   2 +-
 lib/kvargs/meson.build                     |   2 +-
 lib/latencystats/meson.build               |   2 +-
 lib/lpm/meson.build                        |   4 +-
 lib/mbuf/meson.build                       |   2 +-
 lib/member/meson.build                     |   2 +-
 lib/mempool/meson.build                    |   2 +-
 lib/meson.build                            |  27 ++-
 lib/metrics/meson.build                    |   2 +-
 lib/mldev/meson.build                      |   2 +-
 lib/net/meson.build                        |   2 +-
 lib/node/meson.build                       |   2 +-
 lib/pcapng/meson.build                     |   2 +-
 lib/pdcp/meson.build                       |   2 +-
 lib/pdump/meson.build                      |   2 +-
 lib/pipeline/meson.build                   |   2 +-
 lib/port/meson.build                       |   2 +-
 lib/power/meson.build                      |   3 +-
 lib/rawdev/meson.build                     |   2 -
 lib/rcu/meson.build                        |   2 +-
 lib/regexdev/meson.build                   |   2 +-
 lib/reorder/meson.build                    |   2 +-
 lib/rib/meson.build                        |   2 +-
 lib/ring/meson.build                       |   1 -
 lib/sched/meson.build                      |   2 +-
 lib/security/meson.build                   |   2 +-
 lib/table/meson.build                      |   2 +-
 lib/telemetry/meson.build                  |   2 +-
 lib/vhost/meson.build                      |   2 +-
 135 files changed, 647 insertions(+), 232 deletions(-)
 create mode 100644 buildtools/log-deps.py
 create mode 100755 devtools/draw-dependency-graphs.py
 create mode 100755 devtools/find-duplicate-deps.py

-- 
2.43.5


^ permalink raw reply	[flat|nested] 54+ messages in thread

* [PATCH v5 1/8] build: introduce optional internal dependencies
  2024-11-27 14:56   ` [PATCH v5 " Anatoly Burakov
@ 2024-11-27 14:56     ` Anatoly Burakov
  2024-11-27 14:56     ` [PATCH v5 2/8] build: output a dependency log in build directory Anatoly Burakov
                       ` (6 subsequent siblings)
  7 siblings, 0 replies; 54+ messages in thread
From: Anatoly Burakov @ 2024-11-27 14:56 UTC (permalink / raw)
  To: dev, Reshma Pattan, Nicolas Chautru, Brian Dooley, Aman Singh,
	Akhil Goyal, Fan Zhang, David Hunt, Sivaprasad Tummala

Allow specifying internal dependencies as either mandatory or optional.
Specifying a dependency as optional will mean that the component being
built will not be skipped if said dependency is not being built. At build
time, the build system will resolve any optional dependencies and add
them to the list of dependencies to be built. Any source files requiring
said optional depepdencies will still have to be added explicitly to the
build by the respective component (e.g. adding BPF-related files when BPF
support is being built).

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com>
---

Notes:
    v4 -> v5:
    - Automatically handle optional dependencies based on Bruce's
      earlier patch [1]
    
    [1] https://patches.dpdk.org/project/dpdk/patch/20231220142152.492556-4-bruce.richardson@intel.com/

 app/meson.build                       | 14 ++++++-
 app/proc-info/meson.build             |  4 +-
 app/test-bbdev/meson.build            | 18 +++------
 app/test-crypto-perf/meson.build      |  4 +-
 app/test-pmd/meson.build              | 56 +++++++++------------------
 app/test/meson.build                  | 12 +++---
 drivers/meson.build                   | 13 ++++++-
 examples/ethtool/meson.build          |  4 +-
 examples/l2fwd-crypto/meson.build     |  4 +-
 examples/l3fwd/meson.build            |  4 +-
 examples/meson.build                  | 13 ++++++-
 examples/vm_power_manager/meson.build | 16 +++-----
 lib/meson.build                       | 13 ++++++-
 13 files changed, 89 insertions(+), 86 deletions(-)

diff --git a/app/meson.build b/app/meson.build
index e2db888ae1..61202495bd 100644
--- a/app/meson.build
+++ b/app/meson.build
@@ -66,6 +66,7 @@ foreach app:apps
     # external package/library requirements
     ext_deps = []
     deps = []
+    optional_deps = []
 
     if not enable_apps.contains(app)
         build = false
@@ -83,10 +84,19 @@ foreach app:apps
         endif
     endif
 
+    # resolve any optional internal dependencies
+    def_lib = get_option('default_library')
+    foreach d: optional_deps
+        # if optional dependency is defined, add it to the deps list
+        if is_variable(def_lib + '_rte_' + d)
+            deps += [d]
+        endif
+    endforeach
+
     if build
         dep_objs = []
         foreach d:deps
-            var_name = get_option('default_library') + '_rte_' + d
+            var_name = def_lib + '_rte_' + d
             if not is_variable(var_name)
                 build = false
                 reason = 'missing internal dependency, "@0@"'.format(d)
@@ -111,7 +121,7 @@ foreach app:apps
 
     dpdk_apps_enabled += app
     link_libs = []
-    if get_option('default_library') == 'static'
+    if def_lib == 'static'
         link_libs = dpdk_static_libraries + dpdk_drivers
     endif
 
diff --git a/app/proc-info/meson.build b/app/proc-info/meson.build
index 4f83f29a64..5fefb0857e 100644
--- a/app/proc-info/meson.build
+++ b/app/proc-info/meson.build
@@ -9,6 +9,4 @@ endif
 
 sources = files('main.c')
 deps += ['ethdev', 'security', 'eventdev']
-if dpdk_conf.has('RTE_LIB_METRICS')
-    deps += 'metrics'
-endif
+optional_deps += 'metrics'
diff --git a/app/test-bbdev/meson.build b/app/test-bbdev/meson.build
index 926e0a5271..bd38694eaf 100644
--- a/app/test-bbdev/meson.build
+++ b/app/test-bbdev/meson.build
@@ -14,15 +14,9 @@ sources = files(
         'test_bbdev_vector.c',
 )
 deps += ['bbdev', 'bus_vdev']
-if dpdk_conf.has('RTE_BASEBAND_FPGA_LTE_FEC')
-    deps += ['baseband_fpga_lte_fec']
-endif
-if dpdk_conf.has('RTE_BASEBAND_FPGA_5GNR_FEC')
-    deps += ['baseband_fpga_5gnr_fec']
-endif
-if dpdk_conf.has('RTE_BASEBAND_ACC')
-    deps += ['baseband_acc']
-endif
-if dpdk_conf.has('RTE_BASEBAND_LA12XX')
-    deps += ['baseband_la12xx']
-endif
+optional_deps += [
+    'baseband_fpga_lte_fec',
+    'baseband_fpga_5gnr_fec',
+    'baseband_acc',
+    'baseband_la12xx'
+]
diff --git a/app/test-crypto-perf/meson.build b/app/test-crypto-perf/meson.build
index 7b02b518f0..1ac0ac1099 100644
--- a/app/test-crypto-perf/meson.build
+++ b/app/test-crypto-perf/meson.build
@@ -20,6 +20,4 @@ sources = files(
         'main.c',
 )
 deps += ['cryptodev', 'net', 'security']
-if dpdk_conf.has('RTE_CRYPTO_SCHEDULER')
-    deps += 'crypto_scheduler'
-endif
+optional_deps += 'crypto_scheduler'
diff --git a/app/test-pmd/meson.build b/app/test-pmd/meson.build
index f1c36529b4..bbb0c83fa5 100644
--- a/app/test-pmd/meson.build
+++ b/app/test-pmd/meson.build
@@ -34,47 +34,29 @@ sources = files(
 if dpdk_conf.has('RTE_HAS_JANSSON')
     ext_deps += jansson_dep
 endif
-
-deps += ['ethdev', 'cmdline']
-if dpdk_conf.has('RTE_CRYPTO_SCHEDULER')
-    deps += 'crypto_scheduler'
-endif
-if dpdk_conf.has('RTE_LIB_BITRATESTATS')
-    deps += 'bitratestats'
-endif
 if dpdk_conf.has('RTE_LIB_BPF')
     sources += files('bpf_cmd.c')
-    deps += 'bpf'
-endif
-if dpdk_conf.has('RTE_LIB_GRO')
-    deps += 'gro'
-endif
-if dpdk_conf.has('RTE_LIB_GSO')
-    deps += 'gso'
-endif
-if dpdk_conf.has('RTE_LIB_LATENCYSTATS')
-    deps += 'latencystats'
-endif
-if dpdk_conf.has('RTE_LIB_METRICS')
-    deps += 'metrics'
-endif
-if dpdk_conf.has('RTE_LIB_PDUMP')
-    deps += 'pdump'
-endif
-if dpdk_conf.has('RTE_NET_BNXT')
-    deps += 'net_bnxt'
-endif
-if dpdk_conf.has('RTE_NET_I40E')
-    deps += 'net_i40e'
-endif
-if dpdk_conf.has('RTE_NET_IXGBE')
-    deps += 'net_ixgbe'
-endif
-if dpdk_conf.has('RTE_NET_DPAA')
-    deps += ['bus_dpaa', 'mempool_dpaa', 'net_dpaa']
 endif
 
+deps += ['ethdev', 'cmdline']
+optional_deps += [
+    'crypto_scheduler',
+    'bitratestats',
+    'bpf',
+    'gro',
+    'gso',
+    'latencystats',
+    'metrics',
+    'pdump',
+    'net_bnxt',
+    'net_i40e',
+    'net_ixgbe',
+    'bus_dpaa',
+    'mempool_dpaa',
+    'net_dpaa'
+]
+
 # Driver-specific commands are located in driver directories.
 includes = include_directories('.')
 sources += testpmd_drivers_sources
-deps += testpmd_drivers_deps
+optional_deps += testpmd_drivers_deps
diff --git a/app/test/meson.build b/app/test/meson.build
index d5cb6a7f7a..36c2016a49 100644
--- a/app/test/meson.build
+++ b/app/test/meson.build
@@ -7,7 +7,7 @@ sources += files('commands.c', 'test.c')
 
 # optional dependencies: some files may use these - and so we should link them in -
 # but do not explicitly require them so they are not listed in the per-file lists below
-optional_deps = ['crypto_scheduler', 'lpm']
+opt_deps = ['crypto_scheduler', 'lpm']
 
 # some other utility C files, providing functions used by various tests
 # so we need to include these deps in the dependency list for the files using those fns.
@@ -219,8 +219,8 @@ foreach f, f_deps : source_file_deps
             break
         else
             # technically we might not need this dep, but adding it is harmless
-            if d not in deps
-                deps += d
+            if d not in optional_deps and d not in deps
+                optional_deps += d
             endif
         endif
     endforeach
@@ -241,9 +241,9 @@ foreach f, f_deps : source_file_deps
     endif
 endforeach
 # add the optional dependencies
-foreach d:optional_deps
-    if is_variable(def_lib + '_rte_' + d) and d not in deps
-        deps += d
+foreach d:opt_deps
+    if d not in optional_deps and d not in deps
+        optional_deps += d
     endif
 endforeach
 
diff --git a/drivers/meson.build b/drivers/meson.build
index 495e21b54a..63b0bc1e37 100644
--- a/drivers/meson.build
+++ b/drivers/meson.build
@@ -132,6 +132,7 @@ foreach subpath:subdirs
         includes = [include_directories(drv_path)]
         # set up internal deps. Drivers can append/override as necessary
         deps = std_deps
+        optional_deps = []
         # ext_deps: Stores external library dependency got
         # using dependency() (preferred) or find_library().
         # For the find_library() case (but not with dependency()) we also
@@ -173,11 +174,21 @@ foreach subpath:subdirs
             # get dependency objs from strings
             shared_deps = ext_deps
             static_deps = ext_deps
+
+            # resolve any optional internal dependencies
+            def_lib = get_option('default_library')
+            foreach d: optional_deps
+                # if optional dependency is defined, add it to the deps list
+                if is_variable(def_lib + '_rte_' + d)
+                    deps += [d]
+                endif
+            endforeach
+
             foreach d:deps
                 if not build
                     break
                 endif
-                if not is_variable('shared_rte_' + d)
+                if not is_variable(def_lib + '_rte_' + d)
                     build = false
                     reason = 'missing internal dependency, "@0@"'.format(d)
                     if dpdk_libs_deprecated.contains(d)
diff --git a/examples/ethtool/meson.build b/examples/ethtool/meson.build
index d7f63d48af..bb2a7fbb89 100644
--- a/examples/ethtool/meson.build
+++ b/examples/ethtool/meson.build
@@ -19,8 +19,6 @@ sources = files(
 includes = include_directories('lib', 'ethtool-app')
 
 deps += 'bus_pci'
-if dpdk_conf.has('RTE_NET_IXGBE')
-    deps += 'net_ixgbe'
-endif
+optional_deps += 'net_ixgbe'
 
 allow_experimental_apis = true
diff --git a/examples/l2fwd-crypto/meson.build b/examples/l2fwd-crypto/meson.build
index bb44c88882..3081573f05 100644
--- a/examples/l2fwd-crypto/meson.build
+++ b/examples/l2fwd-crypto/meson.build
@@ -7,9 +7,7 @@
 # DPDK instance, use 'make'
 
 deps += 'cryptodev'
-if dpdk_conf.has('RTE_CRYPTO_SCHEDULER')
-    deps += 'crypto_scheduler'
-endif
+optional_deps += 'crypto_scheduler'
 allow_experimental_apis = true
 sources = files(
         'main.c',
diff --git a/examples/l3fwd/meson.build b/examples/l3fwd/meson.build
index c25de77bba..9a5f487429 100644
--- a/examples/l3fwd/meson.build
+++ b/examples/l3fwd/meson.build
@@ -18,6 +18,4 @@ sources = files(
         'l3fwd_lpm.c',
         'main.c',
 )
-if dpdk_conf.has('RTE_LIB_EVENTDEV')
-    deps += 'eventdev'
-endif
+optional_deps += 'eventdev'
diff --git a/examples/meson.build b/examples/meson.build
index 8e8968a1fa..14b8aadf68 100644
--- a/examples/meson.build
+++ b/examples/meson.build
@@ -98,12 +98,23 @@ foreach example: examples
     ext_deps = []
     includes = [include_directories(example, 'common')]
     deps = ['eal', 'mempool', 'net', 'mbuf', 'ethdev', 'cmdline']
+    optional_deps = []
     subdir(example)
 
     if build
         dep_objs = ext_deps
+
+        # resolve any optional internal dependencies
+        def_lib = get_option('default_library')
+        foreach d: optional_deps
+            # if optional dependency is defined, add it to the deps list
+            if is_variable(def_lib + '_rte_' + d)
+                deps += [d]
+            endif
+        endforeach
+
         foreach d:deps
-            var_name = get_option('default_library') + '_rte_' + d
+            var_name = def_lib + '_rte_' + d
             if not is_variable(var_name)
                 build = false
                 message('Missing dependency "@0@" for example "@1@"'.format(d, name))
diff --git a/examples/vm_power_manager/meson.build b/examples/vm_power_manager/meson.build
index dcf23198eb..ba39b2cfab 100644
--- a/examples/vm_power_manager/meson.build
+++ b/examples/vm_power_manager/meson.build
@@ -8,17 +8,11 @@
 
 deps += ['power', 'power_kvm_vm']
 
-if dpdk_conf.has('RTE_NET_BNXT')
-    deps += ['net_bnxt']
-endif
-
-if dpdk_conf.has('RTE_NET_I40E')
-    deps += ['net_i40e']
-endif
-
-if dpdk_conf.has('RTE_NET_IXGBE')
-    deps += ['net_ixgbe']
-endif
+optional_deps += [
+    'net_bnxt',
+    'net_i40e',
+    'net_ixgbe'
+]
 
 allow_experimental_apis = true
 sources = files(
diff --git a/lib/meson.build b/lib/meson.build
index ce92cb5537..76bf849852 100644
--- a/lib/meson.build
+++ b/lib/meson.build
@@ -134,6 +134,7 @@ foreach l:libraries
     # external package/library requirements
     ext_deps = []
     deps = []
+    optional_deps = []
     # eal is standard dependency once built
     if dpdk_conf.has('RTE_LIB_EAL')
         deps += ['eal']
@@ -171,11 +172,21 @@ foreach l:libraries
 
     shared_deps = ext_deps
     static_deps = ext_deps
+
+    # resolve any optional internal dependencies
+    def_lib = get_option('default_library')
+    foreach d: optional_deps
+        # if optional dependency is defined, add it to the deps list
+        if is_variable(def_lib + '_rte_' + d)
+            deps += [d]
+        endif
+    endforeach
+
     foreach d:deps
         if not build
             break
         endif
-        if not is_variable('shared_rte_' + d)
+        if not is_variable(def_lib + '_rte_' + d)
             build = false
             reason = 'missing internal dependency, "@0@"'.format(d)
             if dpdk_libs_deprecated.contains(d)
-- 
2.43.5


^ permalink raw reply	[flat|nested] 54+ messages in thread

* [PATCH v5 2/8] build: output a dependency log in build directory
  2024-11-27 14:56   ` [PATCH v5 " Anatoly Burakov
  2024-11-27 14:56     ` [PATCH v5 1/8] build: introduce optional internal dependencies Anatoly Burakov
@ 2024-11-27 14:56     ` Anatoly Burakov
  2024-11-27 14:56     ` [PATCH v5 3/8] devtools: add script to flag unneeded dependencies Anatoly Burakov
                       ` (5 subsequent siblings)
  7 siblings, 0 replies; 54+ messages in thread
From: Anatoly Burakov @ 2024-11-27 14:56 UTC (permalink / raw)
  To: dev

From: Bruce Richardson <bruce.richardson@intel.com>

As meson processes our DPDK source tree it manages dependencies
specified by each individual driver. To enable future analysis of the
dependency links between components, log the dependencies of each DPDK
component as it gets processed. This could potentially allow other tools
to automatically enable or disable components based on the desired end
components to be built, e.g. if the user requests net/ice, ensure that
common/iavf is also enabled in the drivers.

The output file produced is in "dot" or "graphviz" format, which allows
producing a graphical representation of the DPDK dependency tree if so
desired. For example: "dot -Tpng -O build/deps.dot" to produce the
image file "build/deps.dot.png".

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Acked-by: Konstantin Ananyev <konstantin.ananyev@huawei.com>
Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com>
---

Notes:
    v4 -> v5:
    - Change output format to include display name

 app/meson.build        | 17 +++++++-
 buildtools/log-deps.py | 94 ++++++++++++++++++++++++++++++++++++++++++
 buildtools/meson.build |  2 +
 drivers/meson.build    | 14 +++++++
 examples/meson.build   | 18 +++++++-
 lib/meson.build        | 14 +++++++
 6 files changed, 157 insertions(+), 2 deletions(-)
 create mode 100644 buildtools/log-deps.py

diff --git a/app/meson.build b/app/meson.build
index 61202495bd..a971738d40 100644
--- a/app/meson.build
+++ b/app/meson.build
@@ -77,7 +77,22 @@ foreach app:apps
     endif
 
     if build
+        # call into subdir may update name so record it here
+        display_name = name
+
         subdir(name)
+        app_name = 'dpdk-' + name
+
+        # log mandatory dependencies
+        cmds = ['--type', 'app']
+        cmds += ['--display-name', display_name]
+        run_command([log_deps_cmd, cmds, app_name, deps], check: false)
+
+        # log optional dependencies, if any
+        if optional_deps.length() > 0
+            cmds += ['--optional']
+            run_command([log_deps_cmd, cmds, app_name, optional_deps], check: false)
+        endif
         if not build and require_apps
             error('Cannot build explicitly requested app "@0@".\n'.format(name)
                   + '\tReason: ' + reason)
@@ -125,7 +140,7 @@ foreach app:apps
         link_libs = dpdk_static_libraries + dpdk_drivers
     endif
 
-    exec = executable('dpdk-' + name,
+    exec = executable(app_name,
             [ sources, resources ],
             c_args: cflags,
             link_args: ldflags,
diff --git a/buildtools/log-deps.py b/buildtools/log-deps.py
new file mode 100644
index 0000000000..7a99b129d7
--- /dev/null
+++ b/buildtools/log-deps.py
@@ -0,0 +1,94 @@
+#! /usr/bin/env python3
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright(c) 2024 Intel Corporation
+
+"""Utility script to build up a list of dependencies from meson."""
+
+import os
+import sys
+import argparse
+import typing as T
+
+
+def file_to_list(filename: str) -> T.List[str]:
+    """Read file into a list of strings."""
+    with open(filename, encoding="utf-8") as f:
+        return f.readlines()
+
+
+def list_to_file(filename: str, lines: T.List[str]):
+    """Write a list of strings out to a file."""
+    with open(filename, "w", encoding="utf-8") as f:
+        f.writelines(lines)
+
+
+def gen_deps(
+    component_type: str,
+    optional: bool,
+    component: str,
+    display_name: T.Optional[str],
+    deps: T.List[str],
+) -> str:
+    """Generate a dependency graph for meson."""
+    dep_list_str = '", "'.join(deps)
+    deps_str = "" if not deps else f' -> {{ "{dep_list_str}" }}'
+    # we define custom attributes for the nodes
+    attr_str = f'dpdk_componentType="{component_type}"'
+    if optional:
+        # we use a dotted line to represent optional dependencies
+        attr_str += ',style="dotted"'
+    if display_name is not None:
+        attr_str += f',dpdk_displayName="{display_name}"'
+    return f'"{component}"{deps_str} [{attr_str}]\n'
+
+
+def _main():
+    depsfile = f'{os.environ["MESON_BUILD_ROOT"]}/deps.dot'
+
+    # to reset the deps file on each build, the script is called without any params
+    if len(sys.argv) == 1:
+        os.remove(depsfile)
+        sys.exit(0)
+
+    # we got arguments, parse them
+    parser = argparse.ArgumentParser(
+        description="Generate a dependency graph for meson."
+    )
+    # type is required
+    parser.add_argument(
+        "--type", required=True, help="Type of dependency (lib, examples, etc.)"
+    )
+    parser.add_argument(
+        "--optional", action="store_true", help="Whether the dependency is optional"
+    )
+    parser.add_argument(
+        "--display-name",
+        help="Component name as it is used in the build system",
+    )
+    # component is required
+    parser.add_argument("component", help="The component to add to the graph")
+    parser.add_argument("deps", nargs="*", help="The dependencies of the component")
+
+    parsed = parser.parse_args()
+
+    try:
+        contents = file_to_list(depsfile)
+    except FileNotFoundError:
+        contents = ["digraph {\n", "}\n"]
+
+    # occasionally, component binary name may be different from what it appears in Meson.
+    display_name = parsed.display_name
+
+    c_type = parsed.type
+    optional = parsed.optional
+    component = parsed.component
+    deps = parsed.deps
+    contents[-1] = gen_deps(c_type, optional, component, display_name, deps)
+
+    contents.append("}\n")
+
+    list_to_file(depsfile, contents)
+
+
+if __name__ == "__main__":
+    _main()
diff --git a/buildtools/meson.build b/buildtools/meson.build
index 4e2c1217a2..13a0477245 100644
--- a/buildtools/meson.build
+++ b/buildtools/meson.build
@@ -26,6 +26,8 @@ header_gen_cmd = py3 + files('gen-header.py')
 has_hugepages_cmd = py3 + files('has-hugepages.py')
 cmdline_gen_cmd = py3 + files('dpdk-cmdline-gen.py')
 check_dts_requirements = py3 + files('check-dts-requirements.py')
+log_deps_cmd = py3 + files('log-deps.py')
+run_command(log_deps_cmd, check: false)  # call with no parameters to reset the file
 
 # install any build tools that end-users might want also
 install_data([
diff --git a/drivers/meson.build b/drivers/meson.build
index 63b0bc1e37..e9df747a24 100644
--- a/drivers/meson.build
+++ b/drivers/meson.build
@@ -157,6 +157,8 @@ foreach subpath:subdirs
         endif
 
         if build
+            # call into subdir may update name so record it here
+            display_name = '@0@/@1@'.format(class, name)
             # pull in driver directory which should update all the local variables
             subdir(drv_path)
 
@@ -171,6 +173,18 @@ foreach subpath:subdirs
                         +'\tReason: ' + reason)
             endif
 
+            # log mandatory dependencies
+            cmds = ['--type', 'drivers']
+            cmds += ['--display-name', display_name]
+            drv_name = class + '_' + name
+            run_command([log_deps_cmd, cmds, drv_name, deps], check: false)
+
+            # log optional dependencies, if any
+            if optional_deps.length() > 0
+                cmds += ['--optional']
+                run_command([log_deps_cmd, cmds, drv_name, optional_deps], check: false)
+            endif
+
             # get dependency objs from strings
             shared_deps = ext_deps
             static_deps = ext_deps
diff --git a/examples/meson.build b/examples/meson.build
index 14b8aadf68..d1856dbafc 100644
--- a/examples/meson.build
+++ b/examples/meson.build
@@ -99,11 +99,27 @@ foreach example: examples
     includes = [include_directories(example, 'common')]
     deps = ['eal', 'mempool', 'net', 'mbuf', 'ethdev', 'cmdline']
     optional_deps = []
+
+    # call into subdir may update name so record it here
+    display_name = example
+
     subdir(example)
+    example_name = 'dpdk-' + name
 
     if build
         dep_objs = ext_deps
 
+        # log mandatory dependencies
+        cmds = ['--type', 'examples']
+        cmds += ['--display-name', display_name]
+        run_command([log_deps_cmd, cmds, example_name, deps], check: false)
+
+        # log optional dependencies, if any
+        if optional_deps.length() > 0
+            cmds += ['--optional']
+            run_command([log_deps_cmd, cmds, example_name, optional_deps], check: false)
+        endif
+
         # resolve any optional internal dependencies
         def_lib = get_option('default_library')
         foreach d: optional_deps
@@ -135,7 +151,7 @@ foreach example: examples
     if allow_experimental_apis
         cflags += '-DALLOW_EXPERIMENTAL_API'
     endif
-    executable('dpdk-' + name, sources,
+    executable(example_name, sources,
             include_directories: includes,
             link_whole: link_whole_libs,
             link_args: ldflags,
diff --git a/lib/meson.build b/lib/meson.build
index 76bf849852..db0d121b3c 100644
--- a/lib/meson.build
+++ b/lib/meson.build
@@ -160,7 +160,21 @@ foreach l:libraries
     endif
 
     if build
+        # as per warning below, directory name should match library name but it is not considered an error
+        display_name = name
+
         subdir(l)
+
+        # log mandatory dependencies
+        cmds = ['--type', 'lib']
+        cmds += ['--display-name', display_name]
+        run_command([log_deps_cmd, cmds, name, deps], check: false)
+
+        # log optional dependencies, if any
+        if optional_deps.length() > 0
+            cmds += ['--optional']
+            run_command([log_deps_cmd, cmds, name, optional_deps], check: false)
+        endif
         if not build and require_libs
             error('Cannot build explicitly requested lib "@0@".\n'.format(name)
                     +'\tReason: ' + reason)
-- 
2.43.5


^ permalink raw reply	[flat|nested] 54+ messages in thread

* [PATCH v5 3/8] devtools: add script to flag unneeded dependencies
  2024-11-27 14:56   ` [PATCH v5 " Anatoly Burakov
  2024-11-27 14:56     ` [PATCH v5 1/8] build: introduce optional internal dependencies Anatoly Burakov
  2024-11-27 14:56     ` [PATCH v5 2/8] build: output a dependency log in build directory Anatoly Burakov
@ 2024-11-27 14:56     ` Anatoly Burakov
  2024-11-27 14:56     ` [PATCH v5 4/8] build: remove kvargs from driver class dependencies Anatoly Burakov
                       ` (4 subsequent siblings)
  7 siblings, 0 replies; 54+ messages in thread
From: Anatoly Burakov @ 2024-11-27 14:56 UTC (permalink / raw)
  To: dev

From: Bruce Richardson <bruce.richardson@intel.com>

While not a serious problem, DPDK components often list more
dependencies than are actually necessary to build, due to the use of
recursive dependencies. In extreme cases, such as with core libraries,
this can lead to longer configuration times due to meson having to
deduplicate long lists of dependencies. Therefore we can add a script to
identify when a component has got unnecessary dependencies listed.

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
---
 devtools/find-duplicate-deps.py | 62 +++++++++++++++++++++++++++++++++
 1 file changed, 62 insertions(+)
 create mode 100755 devtools/find-duplicate-deps.py

diff --git a/devtools/find-duplicate-deps.py b/devtools/find-duplicate-deps.py
new file mode 100755
index 0000000000..cbd0ca7196
--- /dev/null
+++ b/devtools/find-duplicate-deps.py
@@ -0,0 +1,62 @@
+#! /usr/bin/env python3
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright(c) 2024 Intel Corporation
+
+"""Identify any superfluous dependencies listed in DPDK deps graph."""
+
+import sys
+
+all_deps = {}
+
+
+class dep:
+    """Holds a component and its dependencies."""
+
+    def __init__(self, name, dep_names):
+        """Create and process a component and its deps."""
+        self.name = name.strip('" ')
+        self.base_deps = [all_deps[dn.strip('" ')] for dn in dep_names]
+        self.recursive_deps = []
+        for d in self.base_deps:
+            self.recursive_deps.extend(d.base_deps)
+            self.recursive_deps.extend(d.recursive_deps)
+        self.extra_deps = []
+        for d in self.base_deps:
+            if d in self.recursive_deps:
+                self.extra_deps.append(d.name)
+        if self.extra_deps:
+            print(f'{self.name}: extra deps {self.extra_deps}')
+
+    def dict_add(self, d):
+        """Add this object to a dictionary by name."""
+        d[self.name] = self
+
+
+def remove_attrs(ln):
+    """Remove attributes from a line."""
+    while ln.find("[") != -1:
+        start = ln.find("[")
+        end = ln.find("]")
+        ln = ln[:start] + ln[end + 1 :]
+    return ln.strip()
+
+
+def main(argv):
+    """Read the dependency tree from a dot file and process it."""
+    if len(argv) != 2:
+        print(f'Usage: {argv[0]} <build-directory>/deps.dot', file=sys.stderr)
+        sys.exit(1)
+
+    with open(argv[1]) as f:
+        for ln in f.readlines():
+            ln = remove_attrs(ln.strip())
+            if '->' in ln:
+                name, deps = ln.split('->')
+                deps = deps.strip(' {}')
+                dep(name, deps.split(',')).dict_add(all_deps)
+            elif ln.startswith('"') and ln.endswith('"'):
+                dep(ln.strip('"'), []).dict_add(all_deps)
+
+
+if __name__ == '__main__':
+    main(sys.argv)
-- 
2.43.5


^ permalink raw reply	[flat|nested] 54+ messages in thread

* [PATCH v5 4/8] build: remove kvargs from driver class dependencies
  2024-11-27 14:56   ` [PATCH v5 " Anatoly Burakov
                       ` (2 preceding siblings ...)
  2024-11-27 14:56     ` [PATCH v5 3/8] devtools: add script to flag unneeded dependencies Anatoly Burakov
@ 2024-11-27 14:56     ` Anatoly Burakov
  2024-11-27 14:56     ` [PATCH v5 5/8] build: reduce library dependencies Anatoly Burakov
                       ` (3 subsequent siblings)
  7 siblings, 0 replies; 54+ messages in thread
From: Anatoly Burakov @ 2024-11-27 14:56 UTC (permalink / raw)
  To: dev

From: Bruce Richardson <bruce.richardson@intel.com>

The kvargs library is used by EAL, and therefore is implicitly a
dependency of every DPDK driver. Remove it from the minimum set of
dependencies for each driver class as it's unnecessary to call it out
there.

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
---
 drivers/event/meson.build | 2 +-
 drivers/net/meson.build   | 2 +-
 drivers/regex/meson.build | 2 +-
 drivers/vdpa/meson.build  | 2 +-
 4 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/event/meson.build b/drivers/event/meson.build
index d6706b57f7..2708833adf 100644
--- a/drivers/event/meson.build
+++ b/drivers/event/meson.build
@@ -19,4 +19,4 @@ if not (toolchain == 'gcc' and cc.version().version_compare('<4.8.6') and
         dpdk_conf.has('RTE_ARCH_ARM64'))
     drivers += 'octeontx'
 endif
-std_deps = ['eventdev', 'kvargs']
+std_deps = ['eventdev']
diff --git a/drivers/net/meson.build b/drivers/net/meson.build
index dafd637ba4..3b388ead24 100644
--- a/drivers/net/meson.build
+++ b/drivers/net/meson.build
@@ -65,6 +65,6 @@ drivers = [
         'vmxnet3',
         'zxdh',
 ]
-std_deps = ['ethdev', 'kvargs'] # 'ethdev' also pulls in mbuf, net, eal etc
+std_deps = ['ethdev']           # 'ethdev' also pulls in mbuf, net, eal etc
 std_deps += ['bus_pci']         # very many PMDs depend on PCI, so make std
 std_deps += ['bus_vdev']        # same with vdev bus
diff --git a/drivers/regex/meson.build b/drivers/regex/meson.build
index ff2a8fea89..10192e7c77 100644
--- a/drivers/regex/meson.build
+++ b/drivers/regex/meson.build
@@ -5,4 +5,4 @@ drivers = [
         'mlx5',
         'cn9k',
 ]
-std_deps = ['ethdev', 'kvargs', 'regexdev'] # 'ethdev' also pulls in mbuf, net, eal etc
+std_deps = ['ethdev', 'regexdev'] # 'ethdev' also pulls in mbuf, net, eal etc
diff --git a/drivers/vdpa/meson.build b/drivers/vdpa/meson.build
index 896e8e0304..e01c277b9e 100644
--- a/drivers/vdpa/meson.build
+++ b/drivers/vdpa/meson.build
@@ -11,5 +11,5 @@ drivers = [
         'nfp',
         'sfc',
 ]
-std_deps = ['bus_pci', 'kvargs']
+std_deps = ['bus_pci']
 std_deps += ['vhost']
-- 
2.43.5


^ permalink raw reply	[flat|nested] 54+ messages in thread

* [PATCH v5 5/8] build: reduce library dependencies
  2024-11-27 14:56   ` [PATCH v5 " Anatoly Burakov
                       ` (3 preceding siblings ...)
  2024-11-27 14:56     ` [PATCH v5 4/8] build: remove kvargs from driver class dependencies Anatoly Burakov
@ 2024-11-27 14:56     ` Anatoly Burakov
  2024-11-27 14:56     ` [PATCH v5 6/8] build: reduce driver dependencies Anatoly Burakov
                       ` (2 subsequent siblings)
  7 siblings, 0 replies; 54+ messages in thread
From: Anatoly Burakov @ 2024-11-27 14:56 UTC (permalink / raw)
  To: dev, Chengwen Feng, Nicolas Chautru, Konstantin Ananyev,
	Fan Zhang, Ashish Gupta, Akhil Goyal, Mattias Rönnblom,
	David Hunt, Kevin Laatz, Bruce Richardson, Byron Marohn,
	Yipeng Wang, Thomas Monjalon, Ferruh Yigit, Andrew Rybchenko,
	Jerin Jacob, Vladimir Medvedkin, Elena Agostini, Kiran Kumar K,
	Nithin Dabilpuram, Zhirun Yan, Jiayu Hu, Sameh Gobriel,
	Reshma Pattan, Morten Brørup, Srikanth Yalavarthi,
	Pavan Nikhilesh, Stephen Hemminger, Anoob Joseph,
	Volodymyr Fialko, Cristian Dumitrescu, Sivaprasad Tummala,
	Sachin Saxena, Hemant Agrawal, Honnappa Nagarahalli, Ori Kam,
	Maxime Coquelin, Chenbo Xia

From: Bruce Richardson <bruce.richardson@intel.com>

Rather than having each library depend up on EAL + any extra libs, we
can take advantage of recursive dependency support in meson and
just assign the dependencies of each directory directly, rather than
appending to the array. For libraries which only depend upon EAL, keep
that as a default, but for libraries which depend upon even a single
extra lib, that EAL dependency is unnecessary.

Going further, we can identify using the find_duplicate_deps.py script
any unnecessary deps in each library's list, and remove them to slim the
dependency tree down.

Reducing number of dependencies means that meson takes less time
processing and deduplicating the dependency tree for each component, and
also shrinks the dependency graph for DPDK itself.

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
---
 lib/argparse/meson.build     | 2 +-
 lib/bbdev/meson.build        | 2 +-
 lib/bitratestats/meson.build | 2 +-
 lib/bpf/meson.build          | 2 +-
 lib/cmdline/meson.build      | 2 +-
 lib/compressdev/meson.build  | 2 +-
 lib/cryptodev/meson.build    | 2 +-
 lib/dispatcher/meson.build   | 2 +-
 lib/distributor/meson.build  | 2 +-
 lib/dmadev/meson.build       | 2 --
 lib/eal/meson.build          | 5 +----
 lib/efd/meson.build          | 2 +-
 lib/ethdev/meson.build       | 2 +-
 lib/eventdev/meson.build     | 3 +--
 lib/fib/meson.build          | 4 +---
 lib/gpudev/meson.build       | 2 +-
 lib/graph/meson.build        | 2 +-
 lib/gro/meson.build          | 2 +-
 lib/gso/meson.build          | 2 +-
 lib/hash/meson.build         | 4 +---
 lib/ip_frag/meson.build      | 2 +-
 lib/ipsec/meson.build        | 2 +-
 lib/kvargs/meson.build       | 2 +-
 lib/latencystats/meson.build | 2 +-
 lib/lpm/meson.build          | 4 +---
 lib/mbuf/meson.build         | 2 +-
 lib/member/meson.build       | 2 +-
 lib/mempool/meson.build      | 2 +-
 lib/metrics/meson.build      | 2 +-
 lib/mldev/meson.build        | 2 +-
 lib/net/meson.build          | 2 +-
 lib/node/meson.build         | 2 +-
 lib/pcapng/meson.build       | 2 +-
 lib/pdcp/meson.build         | 2 +-
 lib/pdump/meson.build        | 2 +-
 lib/pipeline/meson.build     | 2 +-
 lib/port/meson.build         | 2 +-
 lib/power/meson.build        | 3 +--
 lib/rawdev/meson.build       | 2 --
 lib/rcu/meson.build          | 2 +-
 lib/regexdev/meson.build     | 2 +-
 lib/reorder/meson.build      | 2 +-
 lib/rib/meson.build          | 2 +-
 lib/ring/meson.build         | 1 -
 lib/sched/meson.build        | 2 +-
 lib/security/meson.build     | 2 +-
 lib/table/meson.build        | 2 +-
 lib/telemetry/meson.build    | 2 +-
 lib/vhost/meson.build        | 2 +-
 49 files changed, 46 insertions(+), 62 deletions(-)

diff --git a/lib/argparse/meson.build b/lib/argparse/meson.build
index b6a08ca049..96abc8766f 100644
--- a/lib/argparse/meson.build
+++ b/lib/argparse/meson.build
@@ -4,4 +4,4 @@
 sources = files('rte_argparse.c')
 headers = files('rte_argparse.h')
 
-deps += ['log']
+deps = ['log']
diff --git a/lib/bbdev/meson.build b/lib/bbdev/meson.build
index 07685e7578..2e68aa7873 100644
--- a/lib/bbdev/meson.build
+++ b/lib/bbdev/meson.build
@@ -11,4 +11,4 @@ sources = files('rte_bbdev.c')
 headers = files('rte_bbdev.h',
         'rte_bbdev_pmd.h',
         'rte_bbdev_op.h')
-deps += ['mbuf']
+deps = ['mbuf']
diff --git a/lib/bitratestats/meson.build b/lib/bitratestats/meson.build
index ede7e0a579..8defcd53bf 100644
--- a/lib/bitratestats/meson.build
+++ b/lib/bitratestats/meson.build
@@ -3,4 +3,4 @@
 
 sources = files('rte_bitrate.c')
 headers = files('rte_bitrate.h')
-deps += ['ethdev', 'metrics']
+deps = ['metrics']
diff --git a/lib/bpf/meson.build b/lib/bpf/meson.build
index aa258a9061..82127bc657 100644
--- a/lib/bpf/meson.build
+++ b/lib/bpf/meson.build
@@ -31,7 +31,7 @@ headers = files('bpf_def.h',
         'rte_bpf.h',
         'rte_bpf_ethdev.h')
 
-deps += ['mbuf', 'net', 'ethdev']
+deps = ['ethdev']
 
 dep = dependency('libelf', required: false, method: 'pkg-config')
 if dep.found()
diff --git a/lib/cmdline/meson.build b/lib/cmdline/meson.build
index 63fb69100d..4451f3da29 100644
--- a/lib/cmdline/meson.build
+++ b/lib/cmdline/meson.build
@@ -31,4 +31,4 @@ else
     sources += files('cmdline_os_unix.c')
 endif
 
-deps += ['net']
+deps = ['net']
diff --git a/lib/compressdev/meson.build b/lib/compressdev/meson.build
index c80295dc0d..4b86955baf 100644
--- a/lib/compressdev/meson.build
+++ b/lib/compressdev/meson.build
@@ -16,4 +16,4 @@ driver_sdk_headers = files(
         'rte_compressdev_pmd.h',
         'rte_compressdev_internal.h',
     )
-deps += ['kvargs', 'mbuf']
+deps = ['mbuf']
diff --git a/lib/cryptodev/meson.build b/lib/cryptodev/meson.build
index 4734acf321..74e42ac700 100644
--- a/lib/cryptodev/meson.build
+++ b/lib/cryptodev/meson.build
@@ -20,4 +20,4 @@ driver_sdk_headers += files(
         'cryptodev_pmd.h',
 )
 
-deps += ['kvargs', 'mbuf', 'rcu', 'telemetry']
+deps = ['mbuf', 'rcu']
diff --git a/lib/dispatcher/meson.build b/lib/dispatcher/meson.build
index ffaef26a6d..4dc1759951 100644
--- a/lib/dispatcher/meson.build
+++ b/lib/dispatcher/meson.build
@@ -10,4 +10,4 @@ endif
 sources = files('rte_dispatcher.c')
 headers = files('rte_dispatcher.h')
 
-deps += ['eventdev']
+deps = ['eventdev']
diff --git a/lib/distributor/meson.build b/lib/distributor/meson.build
index 24988c5827..ba43273bc3 100644
--- a/lib/distributor/meson.build
+++ b/lib/distributor/meson.build
@@ -14,4 +14,4 @@ else
     sources += files('rte_distributor_match_generic.c')
 endif
 headers = files('rte_distributor.h')
-deps += ['mbuf']
+deps = ['mbuf']
diff --git a/lib/dmadev/meson.build b/lib/dmadev/meson.build
index e66dcb66b0..70b375f1cb 100644
--- a/lib/dmadev/meson.build
+++ b/lib/dmadev/meson.build
@@ -11,5 +11,3 @@ sources = files('rte_dmadev.c', 'rte_dmadev_trace_points.c')
 headers = files('rte_dmadev.h')
 indirect_headers += files('rte_dmadev_core.h', 'rte_dmadev_trace_fp.h')
 driver_sdk_headers += files('rte_dmadev_pmd.h')
-
-deps += ['telemetry']
diff --git a/lib/eal/meson.build b/lib/eal/meson.build
index e1d6c4cf17..d25443d097 100644
--- a/lib/eal/meson.build
+++ b/lib/eal/meson.build
@@ -14,10 +14,7 @@ subdir(exec_env)
 
 subdir(arch_subdir)
 
-deps += ['log', 'kvargs']
-if not is_windows
-    deps += ['telemetry']
-endif
+deps = ['kvargs', 'telemetry']
 if dpdk_conf.has('RTE_USE_LIBBSD')
     ext_deps += libbsd
 endif
diff --git a/lib/efd/meson.build b/lib/efd/meson.build
index 343f14e1f3..da0ee7f803 100644
--- a/lib/efd/meson.build
+++ b/lib/efd/meson.build
@@ -9,4 +9,4 @@ endif
 
 sources = files('rte_efd.c')
 headers = files('rte_efd.h')
-deps += ['ring', 'hash']
+deps = ['hash']
diff --git a/lib/ethdev/meson.build b/lib/ethdev/meson.build
index f1d2586591..fc53a9c309 100644
--- a/lib/ethdev/meson.build
+++ b/lib/ethdev/meson.build
@@ -53,7 +53,7 @@ if is_linux
     )
 endif
 
-deps += ['net', 'kvargs', 'meter', 'telemetry']
+deps = ['net', 'meter']
 
 if is_freebsd
     annotate_locks = false
diff --git a/lib/eventdev/meson.build b/lib/eventdev/meson.build
index a04bb86f0f..237df998ce 100644
--- a/lib/eventdev/meson.build
+++ b/lib/eventdev/meson.build
@@ -38,5 +38,4 @@ driver_sdk_headers += files(
         'event_timer_adapter_pmd.h',
 )
 
-deps += ['ring', 'ethdev', 'hash', 'mempool', 'mbuf', 'timer', 'cryptodev', 'dmadev']
-deps += ['telemetry']
+deps = ['ethdev', 'hash', 'timer', 'cryptodev', 'dmadev']
diff --git a/lib/fib/meson.build b/lib/fib/meson.build
index 0c19cc8201..ac040d5372 100644
--- a/lib/fib/meson.build
+++ b/lib/fib/meson.build
@@ -10,9 +10,7 @@ endif
 
 sources = files('rte_fib.c', 'rte_fib6.c', 'dir24_8.c', 'trie.c')
 headers = files('rte_fib.h', 'rte_fib6.h')
-deps += ['rib']
-deps += ['rcu']
-deps += ['net']
+deps = ['rib', 'rcu']
 
 if dpdk_conf.has('RTE_ARCH_X86_64')
     if target_has_avx512
diff --git a/lib/gpudev/meson.build b/lib/gpudev/meson.build
index d21fadc052..5d883b85a1 100644
--- a/lib/gpudev/meson.build
+++ b/lib/gpudev/meson.build
@@ -13,4 +13,4 @@ sources = files(
         'gpudev.c',
 )
 
-deps += ['mbuf']
+deps = ['mbuf']
diff --git a/lib/graph/meson.build b/lib/graph/meson.build
index 0cb15442ab..f58f107d52 100644
--- a/lib/graph/meson.build
+++ b/lib/graph/meson.build
@@ -25,4 +25,4 @@ indirect_headers += files(
         'rte_graph_worker_common.h',
 )
 
-deps += ['eal', 'pcapng', 'mempool', 'ring']
+deps = ['pcapng']
diff --git a/lib/gro/meson.build b/lib/gro/meson.build
index dbce05220d..c6de6ceebc 100644
--- a/lib/gro/meson.build
+++ b/lib/gro/meson.build
@@ -10,4 +10,4 @@ sources = files(
         'gro_vxlan_udp4.c',
 )
 headers = files('rte_gro.h')
-deps += ['ethdev']
+deps = ['ethdev']
diff --git a/lib/gso/meson.build b/lib/gso/meson.build
index 622411df8f..bc99109933 100644
--- a/lib/gso/meson.build
+++ b/lib/gso/meson.build
@@ -10,4 +10,4 @@ sources = files(
         'rte_gso.c',
 )
 headers = files('rte_gso.h')
-deps += ['ethdev']
+deps = ['ethdev']
diff --git a/lib/hash/meson.build b/lib/hash/meson.build
index 7ce504ee8b..e6cb1ebe3b 100644
--- a/lib/hash/meson.build
+++ b/lib/hash/meson.build
@@ -26,6 +26,4 @@ sources = files(
         'rte_thash_gf2_poly_math.c',
 )
 
-deps += ['net']
-deps += ['ring']
-deps += ['rcu']
+deps = ['net', 'rcu']
diff --git a/lib/ip_frag/meson.build b/lib/ip_frag/meson.build
index ea2de09f75..cacf391460 100644
--- a/lib/ip_frag/meson.build
+++ b/lib/ip_frag/meson.build
@@ -10,4 +10,4 @@ sources = files(
         'ip_frag_internal.c',
 )
 headers = files('rte_ip_frag.h')
-deps += ['ethdev', 'hash']
+deps = ['ethdev', 'hash']
diff --git a/lib/ipsec/meson.build b/lib/ipsec/meson.build
index 5c5a4aae78..7abbac5b6a 100644
--- a/lib/ipsec/meson.build
+++ b/lib/ipsec/meson.build
@@ -14,6 +14,6 @@ sources = files('esp_inb.c', 'esp_outb.c',
 headers = files('rte_ipsec.h', 'rte_ipsec_sa.h', 'rte_ipsec_sad.h')
 indirect_headers += files('rte_ipsec_group.h')
 
-deps += ['mbuf', 'net', 'cryptodev', 'security', 'hash', 'telemetry']
+deps = ['security', 'hash']
 
 annotate_locks = false
diff --git a/lib/kvargs/meson.build b/lib/kvargs/meson.build
index 7eae744a8f..7282b0ff8d 100644
--- a/lib/kvargs/meson.build
+++ b/lib/kvargs/meson.build
@@ -1,6 +1,6 @@
 # SPDX-License-Identifier: BSD-3-Clause
 # Copyright(c) 2017 Intel Corporation
 
-deps += 'log'
+deps = ['log']
 sources = files('rte_kvargs.c')
 headers = files('rte_kvargs.h')
diff --git a/lib/latencystats/meson.build b/lib/latencystats/meson.build
index 286558dd79..f8b9a8aeec 100644
--- a/lib/latencystats/meson.build
+++ b/lib/latencystats/meson.build
@@ -3,4 +3,4 @@
 
 sources = files('rte_latencystats.c')
 headers = files('rte_latencystats.h')
-deps += ['metrics', 'ethdev']
+deps = ['metrics']
diff --git a/lib/lpm/meson.build b/lib/lpm/meson.build
index fae4f79fb9..5031b085c4 100644
--- a/lib/lpm/meson.build
+++ b/lib/lpm/meson.build
@@ -18,6 +18,4 @@ indirect_headers += files(
         'rte_lpm_sse.h',
         'rte_lpm_sve.h',
 )
-deps += ['hash']
-deps += ['rcu']
-deps += ['net']
+deps = ['hash']
diff --git a/lib/mbuf/meson.build b/lib/mbuf/meson.build
index 2cee9057a5..22f5a3038b 100644
--- a/lib/mbuf/meson.build
+++ b/lib/mbuf/meson.build
@@ -20,4 +20,4 @@ headers = files(
         'rte_mbuf_pool_ops.h',
         'rte_mbuf_dyn.h',
 )
-deps += ['mempool']
+deps = ['mempool']
diff --git a/lib/member/meson.build b/lib/member/meson.build
index 02ef59795e..b951aa566e 100644
--- a/lib/member/meson.build
+++ b/lib/member/meson.build
@@ -16,7 +16,7 @@ sources = files(
         'rte_member_vbf.c',
 )
 
-deps += ['hash', 'ring']
+deps = ['hash']
 
 # compile AVX512 version if:
 if dpdk_conf.has('RTE_ARCH_X86_64') and binutils_ok
diff --git a/lib/mempool/meson.build b/lib/mempool/meson.build
index 8099a56466..0c0b3ea0c5 100644
--- a/lib/mempool/meson.build
+++ b/lib/mempool/meson.build
@@ -19,4 +19,4 @@ headers = files(
         'rte_mempool.h',
         'rte_mempool_trace_fp.h',
 )
-deps += ['ring', 'telemetry']
+deps = ['ring']
diff --git a/lib/metrics/meson.build b/lib/metrics/meson.build
index 8c1c4b4b49..5165967646 100644
--- a/lib/metrics/meson.build
+++ b/lib/metrics/meson.build
@@ -8,4 +8,4 @@ if dpdk_conf.has('RTE_HAS_JANSSON')
     ext_deps += jansson_dep
 endif
 
-deps += ['ethdev', 'telemetry']
+deps = ['ethdev']
diff --git a/lib/mldev/meson.build b/lib/mldev/meson.build
index 2c933baad6..6069fff1f0 100644
--- a/lib/mldev/meson.build
+++ b/lib/mldev/meson.build
@@ -41,7 +41,7 @@ driver_sdk_headers += files(
         'mldev_utils.h',
 )
 
-deps += ['mempool', 'mbuf']
+deps = ['mbuf']
 
 if get_option('buildtype').contains('debug')
         cflags += [ '-DRTE_LIBRTE_ML_DEV_DEBUG' ]
diff --git a/lib/net/meson.build b/lib/net/meson.build
index 8afcc4ed37..a99d57e514 100644
--- a/lib/net/meson.build
+++ b/lib/net/meson.build
@@ -37,7 +37,7 @@ sources = files(
         'rte_net.c',
         'rte_net_crc.c',
 )
-deps += ['mbuf']
+deps = ['mbuf']
 
 if dpdk_conf.has('RTE_ARCH_X86_64')
     net_crc_sse42_cpu_support = (cc.get_define('__PCLMUL__', args: machine_args) != '')
diff --git a/lib/node/meson.build b/lib/node/meson.build
index 0bed97a96c..368ce1dc63 100644
--- a/lib/node/meson.build
+++ b/lib/node/meson.build
@@ -34,4 +34,4 @@ headers = files(
 
 # Strict-aliasing rules are violated by uint8_t[] to context size casts.
 cflags += '-fno-strict-aliasing'
-deps += ['graph', 'mbuf', 'lpm', 'ethdev', 'mempool', 'cryptodev', 'ip_frag']
+deps = ['graph', 'lpm', 'cryptodev', 'ip_frag']
diff --git a/lib/pcapng/meson.build b/lib/pcapng/meson.build
index 4549925d41..e8f059a9b0 100644
--- a/lib/pcapng/meson.build
+++ b/lib/pcapng/meson.build
@@ -4,4 +4,4 @@
 sources = files('rte_pcapng.c')
 headers = files('rte_pcapng.h')
 
-deps += ['ethdev']
+deps = ['ethdev']
diff --git a/lib/pdcp/meson.build b/lib/pdcp/meson.build
index f4f9246bcb..f6f3d6237a 100644
--- a/lib/pdcp/meson.build
+++ b/lib/pdcp/meson.build
@@ -18,4 +18,4 @@ sources = files(
 headers = files('rte_pdcp.h')
 indirect_headers += files('rte_pdcp_group.h')
 
-deps += ['mbuf', 'net', 'cryptodev', 'security', 'reorder']
+deps = ['security', 'reorder']
diff --git a/lib/pdump/meson.build b/lib/pdump/meson.build
index da8d51b616..23d7db794b 100644
--- a/lib/pdump/meson.build
+++ b/lib/pdump/meson.build
@@ -9,4 +9,4 @@ endif
 
 sources = files('rte_pdump.c')
 headers = files('rte_pdump.h')
-deps += ['ethdev', 'bpf', 'pcapng']
+deps = ['bpf', 'pcapng']
diff --git a/lib/pipeline/meson.build b/lib/pipeline/meson.build
index fd5e0dc6bb..f08eca70d1 100644
--- a/lib/pipeline/meson.build
+++ b/lib/pipeline/meson.build
@@ -25,4 +25,4 @@ headers = files(
         'rte_swx_extern.h',
         'rte_swx_ctl.h',
 )
-deps += ['port', 'table', 'meter', 'sched', 'cryptodev', 'ipsec']
+deps = ['table', 'ipsec']
diff --git a/lib/port/meson.build b/lib/port/meson.build
index b597772872..0524c3c049 100644
--- a/lib/port/meson.build
+++ b/lib/port/meson.build
@@ -40,7 +40,7 @@ headers = files(
         'rte_swx_port_ring.h',
         'rte_swx_port_source_sink.h',
 )
-deps += ['ethdev', 'sched', 'ip_frag', 'cryptodev', 'eventdev']
+deps = ['sched', 'ip_frag', 'eventdev']
 
 if dpdk_conf.has('RTE_HAS_LIBPCAP')
     dpdk_conf.set('RTE_PORT_PCAP', 1)
diff --git a/lib/power/meson.build b/lib/power/meson.build
index b3a7bc7b2e..5673db4e5c 100644
--- a/lib/power/meson.build
+++ b/lib/power/meson.build
@@ -26,5 +26,4 @@ headers = files(
         'rte_power_qos.h',
         'rte_power_uncore.h',
 )
-
-deps += ['timer', 'ethdev']
+deps = ['timer', 'ethdev']
diff --git a/lib/rawdev/meson.build b/lib/rawdev/meson.build
index 7dfc3d5cf9..8841f003d7 100644
--- a/lib/rawdev/meson.build
+++ b/lib/rawdev/meson.build
@@ -9,5 +9,3 @@ endif
 
 sources = files('rte_rawdev.c')
 headers = files('rte_rawdev.h', 'rte_rawdev_pmd.h')
-
-deps += ['telemetry']
diff --git a/lib/rcu/meson.build b/lib/rcu/meson.build
index 71143f5210..b78f46fad7 100644
--- a/lib/rcu/meson.build
+++ b/lib/rcu/meson.build
@@ -10,4 +10,4 @@ endif
 sources = files('rte_rcu_qsbr.c')
 headers = files('rte_rcu_qsbr.h')
 
-deps += ['ring']
+deps = ['ring']
diff --git a/lib/regexdev/meson.build b/lib/regexdev/meson.build
index 426e764ece..3e20fa387d 100644
--- a/lib/regexdev/meson.build
+++ b/lib/regexdev/meson.build
@@ -10,4 +10,4 @@ endif
 sources = files('rte_regexdev.c')
 headers = files('rte_regexdev.h', 'rte_regexdev_driver.h')
 indirect_headers += files('rte_regexdev_core.h')
-deps += ['mbuf']
+deps = ['mbuf']
diff --git a/lib/reorder/meson.build b/lib/reorder/meson.build
index 03aed53d90..1e088a7d97 100644
--- a/lib/reorder/meson.build
+++ b/lib/reorder/meson.build
@@ -3,4 +3,4 @@
 
 sources = files('rte_reorder.c')
 headers = files('rte_reorder.h')
-deps += ['mbuf']
+deps = ['mbuf']
diff --git a/lib/rib/meson.build b/lib/rib/meson.build
index e98f708481..70a9072255 100644
--- a/lib/rib/meson.build
+++ b/lib/rib/meson.build
@@ -4,4 +4,4 @@
 
 sources = files('rte_rib.c', 'rte_rib6.c')
 headers = files('rte_rib.h', 'rte_rib6.h')
-deps += ['net', 'mempool']
+deps = ['net']
diff --git a/lib/ring/meson.build b/lib/ring/meson.build
index 7fca958ed7..c20685c689 100644
--- a/lib/ring/meson.build
+++ b/lib/ring/meson.build
@@ -18,4 +18,3 @@ indirect_headers += files (
         'rte_ring_rts.h',
         'rte_ring_rts_elem_pvt.h',
 )
-deps += ['telemetry']
diff --git a/lib/sched/meson.build b/lib/sched/meson.build
index df75db51ed..7ca8ec09df 100644
--- a/lib/sched/meson.build
+++ b/lib/sched/meson.build
@@ -15,4 +15,4 @@ headers = files(
         'rte_sched_common.h',
         'rte_pie.h',
 )
-deps += ['mbuf', 'meter']
+deps = ['mbuf', 'meter']
diff --git a/lib/security/meson.build b/lib/security/meson.build
index 1034a7a299..e4545a8c72 100644
--- a/lib/security/meson.build
+++ b/lib/security/meson.build
@@ -3,4 +3,4 @@
 
 sources = files('rte_security.c')
 headers = files('rte_security.h', 'rte_security_driver.h')
-deps += ['mempool', 'cryptodev', 'net']
+deps = ['cryptodev', 'net']
diff --git a/lib/table/meson.build b/lib/table/meson.build
index 9b3d9ac759..78d7e87eab 100644
--- a/lib/table/meson.build
+++ b/lib/table/meson.build
@@ -39,7 +39,7 @@ headers = files(
         'rte_table_lpm_ipv6.h',
         'rte_table_stub.h',
 )
-deps += ['mbuf', 'port', 'lpm', 'hash', 'acl']
+deps = ['port', 'lpm', 'acl']
 
 indirect_headers += files(
         'rte_lru_arm64.h',
diff --git a/lib/telemetry/meson.build b/lib/telemetry/meson.build
index 489d000047..3e3a2cfc32 100644
--- a/lib/telemetry/meson.build
+++ b/lib/telemetry/meson.build
@@ -1,7 +1,7 @@
 # SPDX-License-Identifier: BSD-3-Clause
 # Copyright(c) 2018 Intel Corporation
 
-deps += 'log'
+deps = ['log']
 sources = files('telemetry.c', 'telemetry_data.c', 'telemetry_legacy.c')
 headers = files('rte_telemetry.h')
 includes += include_directories('../metrics')
diff --git a/lib/vhost/meson.build b/lib/vhost/meson.build
index 51bcf17244..5103bca069 100644
--- a/lib/vhost/meson.build
+++ b/lib/vhost/meson.build
@@ -45,4 +45,4 @@ headers = files(
 driver_sdk_headers = files(
         'vdpa_driver.h',
 )
-deps += ['ethdev', 'cryptodev', 'hash', 'pci', 'dmadev']
+deps = ['ethdev', 'cryptodev', 'hash', 'pci', 'dmadev']
-- 
2.43.5


^ permalink raw reply	[flat|nested] 54+ messages in thread

* [PATCH v5 6/8] build: reduce driver dependencies
  2024-11-27 14:56   ` [PATCH v5 " Anatoly Burakov
                       ` (4 preceding siblings ...)
  2024-11-27 14:56     ` [PATCH v5 5/8] build: reduce library dependencies Anatoly Burakov
@ 2024-11-27 14:56     ` Anatoly Burakov
  2024-11-27 16:19       ` Burakov, Anatoly
  2024-11-27 14:56     ` [PATCH v5 7/8] build: reduce app dependencies Anatoly Burakov
  2024-11-27 14:56     ` [PATCH v5 8/8] devtools: add script to generate DPDK dependency graphs Anatoly Burakov
  7 siblings, 1 reply; 54+ messages in thread
From: Anatoly Burakov @ 2024-11-27 14:56 UTC (permalink / raw)
  To: dev, Nicolas Chautru, Gagandeep Singh, Hemant Agrawal,
	Parav Pandit, Xueming Li, Sachin Saxena, Rosen Xu, Chenbo Xia,
	Nipun Gupta, Tomasz Duszynski, Chengwen Feng, Nithin Dabilpuram,
	Kiran Kumar K, Sunil Kumar Kori, Satha Rao, Harman Kalra,
	Anoob Joseph, Jingjing Wu, Praveen Shetty, Dariusz Sosnowski,
	Viacheslav Ovsiienko, Bing Zhao, Ori Kam, Suanming Mou,
	Matan Azrad, Kai Ji, Fan Zhang, Ashish Gupta,
	Nagadheeraj Rottela, Ajit Khaparde, Vikas Gupta, Ankur Dwivedi,
	Tejasree Kondoj, Pablo de Lara, Srikanth Jampala, Vamsi Attunuru,
	Gowrishankar Muthukrishnan, Vidya Sagar Velumuri, Kevin Laatz,
	Bruce Richardson, Pavan Nikhilesh, Shijith Thotton,
	Pravin Pathak, Jerin Jacob, Harry van Haaren, Ashwin Sekhar T K,
	Srikanth Yalavarthi, Vladimir Medvedkin, Ian Stokes, Long Li,
	Wei Hu, Andrew Rybchenko, Cristian Dumitrescu, Maxime Coquelin,
	Jakub Palider, Yong Zhang, Liron Himi, Vijay Kumar Srivastava

From: Bruce Richardson <bruce.richardson@intel.com>

Remove any unnecessary dependencies from the driver dependency lists.
This will give each driver a near-minimum set of required dependencies.

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Reviewed-by: Rosen Xu <rosen.xu@intel.com>
---
 drivers/baseband/fpga_5gnr_fec/meson.build | 2 +-
 drivers/baseband/fpga_lte_fec/meson.build  | 2 +-
 drivers/baseband/la12xx/meson.build        | 2 +-
 drivers/baseband/null/meson.build          | 2 +-
 drivers/baseband/turbo_sw/meson.build      | 2 +-
 drivers/bus/auxiliary/meson.build          | 2 --
 drivers/bus/dpaa/meson.build               | 2 +-
 drivers/bus/fslmc/meson.build              | 2 +-
 drivers/bus/ifpga/meson.build              | 2 +-
 drivers/bus/pci/meson.build                | 4 +---
 drivers/bus/platform/meson.build           | 1 -
 drivers/bus/uacce/meson.build              | 2 --
 drivers/bus/vdev/meson.build               | 2 --
 drivers/common/cnxk/meson.build            | 4 ++--
 drivers/common/cpt/meson.build             | 2 +-
 drivers/common/idpf/meson.build            | 2 +-
 drivers/common/mlx5/meson.build            | 2 +-
 drivers/common/qat/meson.build             | 3 ++-
 drivers/compress/mlx5/meson.build          | 2 +-
 drivers/compress/nitrox/meson.build        | 2 +-
 drivers/compress/octeontx/meson.build      | 2 +-
 drivers/crypto/bcmfs/meson.build           | 2 +-
 drivers/crypto/cnxk/meson.build            | 2 +-
 drivers/crypto/dpaa_sec/meson.build        | 2 +-
 drivers/crypto/ipsec_mb/meson.build        | 2 +-
 drivers/crypto/mlx5/meson.build            | 2 +-
 drivers/crypto/nitrox/meson.build          | 2 +-
 drivers/dma/cnxk/meson.build               | 2 +-
 drivers/dma/dpaa/meson.build               | 2 +-
 drivers/dma/dpaa2/meson.build              | 2 +-
 drivers/dma/odm/meson.build                | 2 +-
 drivers/dma/skeleton/meson.build           | 2 +-
 drivers/event/cnxk/meson.build             | 2 +-
 drivers/event/dlb2/meson.build             | 2 +-
 drivers/event/dpaa2/meson.build            | 2 +-
 drivers/event/octeontx/meson.build         | 3 +--
 drivers/event/sw/meson.build               | 2 +-
 drivers/mempool/cnxk/meson.build           | 2 +-
 drivers/mempool/dpaa/meson.build           | 2 +-
 drivers/mempool/dpaa2/meson.build          | 2 +-
 drivers/mempool/octeontx/meson.build       | 2 +-
 drivers/ml/cnxk/meson.build                | 2 +-
 drivers/net/cnxk/meson.build               | 4 +---
 drivers/net/iavf/meson.build               | 2 +-
 drivers/net/ice/meson.build                | 2 +-
 drivers/net/mana/meson.build               | 2 +-
 drivers/net/mlx5/meson.build               | 2 +-
 drivers/net/sfc/meson.build                | 2 +-
 drivers/net/softnic/meson.build            | 2 +-
 drivers/net/virtio/meson.build             | 2 +-
 drivers/raw/cnxk_bphy/meson.build          | 2 +-
 drivers/raw/cnxk_gpio/meson.build          | 2 +-
 drivers/raw/gdtc/meson.build               | 2 +-
 drivers/raw/ntb/meson.build                | 2 +-
 drivers/raw/skeleton/meson.build           | 2 +-
 drivers/regex/cn9k/meson.build             | 2 +-
 drivers/regex/mlx5/meson.build             | 2 +-
 drivers/vdpa/ifc/meson.build               | 2 +-
 drivers/vdpa/meson.build                   | 3 +--
 drivers/vdpa/mlx5/meson.build              | 2 +-
 drivers/vdpa/sfc/meson.build               | 2 +-
 61 files changed, 59 insertions(+), 71 deletions(-)

diff --git a/drivers/baseband/fpga_5gnr_fec/meson.build b/drivers/baseband/fpga_5gnr_fec/meson.build
index c3678d23eb..31b9e92fbb 100644
--- a/drivers/baseband/fpga_5gnr_fec/meson.build
+++ b/drivers/baseband/fpga_5gnr_fec/meson.build
@@ -1,7 +1,7 @@
 # SPDX-License-Identifier: BSD-3-Clause
 # Copyright(c) 2020 Intel Corporation
 
-deps += ['bus_vdev', 'ring', 'pci', 'bus_pci']
+deps += ['bus_vdev', 'bus_pci']
 
 sources = files('rte_fpga_5gnr_fec.c')
 
diff --git a/drivers/baseband/fpga_lte_fec/meson.build b/drivers/baseband/fpga_lte_fec/meson.build
index 14e07826ef..fbf24755db 100644
--- a/drivers/baseband/fpga_lte_fec/meson.build
+++ b/drivers/baseband/fpga_lte_fec/meson.build
@@ -1,5 +1,5 @@
 # SPDX-License-Identifier: BSD-3-Clause
 # Copyright(c) 2019 Intel Corporation
 
-deps += ['bus_vdev', 'ring', 'pci', 'bus_pci']
+deps += ['bus_vdev', 'bus_pci']
 sources = files('fpga_lte_fec.c')
diff --git a/drivers/baseband/la12xx/meson.build b/drivers/baseband/la12xx/meson.build
index 7b7e41c961..e1dbdd0fa7 100644
--- a/drivers/baseband/la12xx/meson.build
+++ b/drivers/baseband/la12xx/meson.build
@@ -1,6 +1,6 @@
 # SPDX-License-Identifier: BSD-3-Clause
 # Copyright 2020-2021 NXP
 
-deps += ['bus_vdev', 'ring']
+deps += ['bus_vdev']
 
 sources = files('bbdev_la12xx.c')
diff --git a/drivers/baseband/null/meson.build b/drivers/baseband/null/meson.build
index 22863f0bd8..716d6c6fdb 100644
--- a/drivers/baseband/null/meson.build
+++ b/drivers/baseband/null/meson.build
@@ -1,5 +1,5 @@
 # SPDX-License-Identifier: BSD-3-Clause
 # Copyright(c) 2018 Luca Boccassi <bluca@debian.org>
 
-deps += ['bus_vdev', 'ring']
+deps += ['bus_vdev']
 sources = files('bbdev_null.c')
diff --git a/drivers/baseband/turbo_sw/meson.build b/drivers/baseband/turbo_sw/meson.build
index a9035a753e..ac18e8a9b6 100644
--- a/drivers/baseband/turbo_sw/meson.build
+++ b/drivers/baseband/turbo_sw/meson.build
@@ -26,5 +26,5 @@ if dep_dec5g.found()
     cflags += ['-DRTE_BBDEV_SDK_AVX512']
 endif
 
-deps += ['bus_vdev', 'ring']
+deps += ['bus_vdev']
 sources = files('bbdev_turbo_software.c')
diff --git a/drivers/bus/auxiliary/meson.build b/drivers/bus/auxiliary/meson.build
index 10468fd130..a113f11743 100644
--- a/drivers/bus/auxiliary/meson.build
+++ b/drivers/bus/auxiliary/meson.build
@@ -13,5 +13,3 @@ if is_linux
 endif
 
 require_iova_in_mbuf = false
-
-deps += ['kvargs']
diff --git a/drivers/bus/dpaa/meson.build b/drivers/bus/dpaa/meson.build
index 5506f2bffc..a2314fdebe 100644
--- a/drivers/bus/dpaa/meson.build
+++ b/drivers/bus/dpaa/meson.build
@@ -6,7 +6,7 @@ if not is_linux
     reason = 'only supported on Linux'
 endif
 
-deps += ['common_dpaax', 'eventdev']
+deps = ['common_dpaax', 'eventdev']
 sources = files(
         'base/fman/fman.c',
         'base/fman/fman_hw.c',
diff --git a/drivers/bus/fslmc/meson.build b/drivers/bus/fslmc/meson.build
index 70098ad778..a0e11f7081 100644
--- a/drivers/bus/fslmc/meson.build
+++ b/drivers/bus/fslmc/meson.build
@@ -6,7 +6,7 @@ if not is_linux
     reason = 'only supported on Linux'
 endif
 
-deps += ['common_dpaax', 'eventdev', 'kvargs']
+deps = ['common_dpaax', 'eventdev']
 sources = files(
         'fslmc_bus.c',
         'fslmc_vfio.c',
diff --git a/drivers/bus/ifpga/meson.build b/drivers/bus/ifpga/meson.build
index dedc94db2d..e87b08eaf4 100644
--- a/drivers/bus/ifpga/meson.build
+++ b/drivers/bus/ifpga/meson.build
@@ -7,6 +7,6 @@ if is_windows
     subdir_done()
 endif
 
-deps += ['pci', 'kvargs', 'rawdev']
+deps = ['pci', 'rawdev']
 driver_sdk_headers += files('bus_ifpga_driver.h')
 sources = files('ifpga_bus.c')
diff --git a/drivers/bus/pci/meson.build b/drivers/bus/pci/meson.build
index fede114dc7..776c3d1550 100644
--- a/drivers/bus/pci/meson.build
+++ b/drivers/bus/pci/meson.build
@@ -1,7 +1,7 @@
 # SPDX-License-Identifier: BSD-3-Clause
 # Copyright(c) 2017 Intel Corporation
 
-deps += ['pci']
+deps = ['pci']
 headers = files('rte_bus_pci.h')
 driver_sdk_headers = files('bus_pci_driver.h')
 sources = files('pci_common.c',
@@ -31,5 +31,3 @@ if is_windows
 endif
 
 require_iova_in_mbuf = false
-
-deps += ['kvargs']
diff --git a/drivers/bus/platform/meson.build b/drivers/bus/platform/meson.build
index 8633cc4e75..2039c23ac6 100644
--- a/drivers/bus/platform/meson.build
+++ b/drivers/bus/platform/meson.build
@@ -10,7 +10,6 @@ endif
 
 require_iova_in_mbuf = false
 
-deps += ['kvargs']
 sources = files(
         'platform_params.c',
         'platform.c',
diff --git a/drivers/bus/uacce/meson.build b/drivers/bus/uacce/meson.build
index a659d65f23..130148a315 100644
--- a/drivers/bus/uacce/meson.build
+++ b/drivers/bus/uacce/meson.build
@@ -8,5 +8,3 @@ endif
 
 sources = files('uacce.c')
 driver_sdk_headers += files('bus_uacce_driver.h')
-
-deps += ['kvargs']
diff --git a/drivers/bus/vdev/meson.build b/drivers/bus/vdev/meson.build
index 50f0c8918d..24993c88a3 100644
--- a/drivers/bus/vdev/meson.build
+++ b/drivers/bus/vdev/meson.build
@@ -9,5 +9,3 @@ headers = files('rte_bus_vdev.h')
 driver_sdk_headers = files('bus_vdev_driver.h')
 
 require_iova_in_mbuf = false
-
-deps += ['kvargs']
diff --git a/drivers/common/cnxk/meson.build b/drivers/common/cnxk/meson.build
index 9e3fd44317..e4ee9474f6 100644
--- a/drivers/common/cnxk/meson.build
+++ b/drivers/common/cnxk/meson.build
@@ -8,7 +8,7 @@ if not is_linux or not dpdk_conf.get('RTE_ARCH_64')
     subdir_done()
 endif
 
-deps = ['eal', 'pci', 'bus_pci', 'mbuf', 'security']
+deps = ['bus_pci', 'security']
 sources = files(
         'roc_ae.c',
         'roc_aes.c',
@@ -105,7 +105,7 @@ elif soc_type == 'cn20k'
     dpdk_conf.set('ROC_PLATFORM_CN20K', 1)
 endif
 
-deps += ['bus_pci', 'net', 'telemetry']
+deps += ['bus_pci']
 
 require_iova_in_mbuf = false
 
diff --git a/drivers/common/cpt/meson.build b/drivers/common/cpt/meson.build
index c09824a651..a4b000dc37 100644
--- a/drivers/common/cpt/meson.build
+++ b/drivers/common/cpt/meson.build
@@ -9,5 +9,5 @@ endif
 
 sources = files('cpt_fpm_tables.c', 'cpt_pmd_ops_helper.c')
 
-deps = ['kvargs', 'pci', 'cryptodev']
+deps = ['pci', 'cryptodev']
 includes += include_directories('../../crypto/octeontx')
diff --git a/drivers/common/idpf/meson.build b/drivers/common/idpf/meson.build
index 46fd45c03b..e24daac761 100644
--- a/drivers/common/idpf/meson.build
+++ b/drivers/common/idpf/meson.build
@@ -7,7 +7,7 @@ endif
 
 includes += include_directories('../iavf')
 
-deps += ['mbuf']
+deps = ['mbuf']
 
 sources = files(
         'idpf_common_device.c',
diff --git a/drivers/common/mlx5/meson.build b/drivers/common/mlx5/meson.build
index 1eefc02f06..b94c956495 100644
--- a/drivers/common/mlx5/meson.build
+++ b/drivers/common/mlx5/meson.build
@@ -12,7 +12,7 @@ if is_windows and not is_ms_linker and not meson.is_cross_build()
     subdir_done()
 endif
 
-deps += ['hash', 'pci', 'bus_pci', 'bus_auxiliary', 'net', 'eal', 'kvargs']
+deps += ['hash', 'bus_pci', 'bus_auxiliary']
 sources += files(
         'mlx5_devx_cmds.c',
         'mlx5_common.c',
diff --git a/drivers/common/qat/meson.build b/drivers/common/qat/meson.build
index 5a8de16fe0..5ffb56fc93 100644
--- a/drivers/common/qat/meson.build
+++ b/drivers/common/qat/meson.build
@@ -71,7 +71,7 @@ else
     endif
 endif
 
-deps += ['bus_pci', 'cryptodev', 'net', 'compressdev']
+deps += ['bus_pci']
 sources += files(
         'qat_common.c',
         'qat_qp.c',
@@ -101,6 +101,7 @@ if qat_compress
         ]
         sources += files(join_paths(qat_compress_relpath, f))
     endforeach
+    deps += ['compressdev']
 endif
 
 if qat_crypto
diff --git a/drivers/compress/mlx5/meson.build b/drivers/compress/mlx5/meson.build
index 26a0e0cd09..ddb9e0f82c 100644
--- a/drivers/compress/mlx5/meson.build
+++ b/drivers/compress/mlx5/meson.build
@@ -7,7 +7,7 @@ if not is_linux
     subdir_done()
 endif
 
-deps += ['common_mlx5', 'eal', 'compressdev']
+deps += ['common_mlx5', 'compressdev']
 if not dpdk_conf.has('RTE_COMMON_MLX5')
     # avoid referencing undefined variables from common/mlx5
     subdir_done()
diff --git a/drivers/compress/nitrox/meson.build b/drivers/compress/nitrox/meson.build
index 1becc66912..c3db4ac2bb 100644
--- a/drivers/compress/nitrox/meson.build
+++ b/drivers/compress/nitrox/meson.build
@@ -6,7 +6,7 @@ if not is_linux
     reason = 'only supported on Linux'
 endif
 
-deps += ['common_nitrox', 'bus_pci', 'compressdev']
+deps += ['common_nitrox', 'compressdev']
 
 sources += files(
         'nitrox_comp.c',
diff --git a/drivers/compress/octeontx/meson.build b/drivers/compress/octeontx/meson.build
index 16f973f4d7..0ccde449e8 100644
--- a/drivers/compress/octeontx/meson.build
+++ b/drivers/compress/octeontx/meson.build
@@ -9,7 +9,7 @@ endif
 
 sources = files('otx_zip.c', 'otx_zip_pmd.c')
 includes += include_directories('include')
-deps += ['mempool_octeontx', 'bus_pci']
+deps += ['mempool_octeontx']
 ext_deps += dep
 
 require_iova_in_mbuf = false
diff --git a/drivers/crypto/bcmfs/meson.build b/drivers/crypto/bcmfs/meson.build
index 5842f83a3b..678bab7398 100644
--- a/drivers/crypto/bcmfs/meson.build
+++ b/drivers/crypto/bcmfs/meson.build
@@ -9,7 +9,7 @@ if is_windows
     subdir_done()
 endif
 
-deps += ['eal', 'bus_vdev']
+deps += ['bus_vdev']
 sources = files(
         'bcmfs_logs.c',
         'bcmfs_device.c',
diff --git a/drivers/crypto/cnxk/meson.build b/drivers/crypto/cnxk/meson.build
index aa840fb7bb..c5a5725e1a 100644
--- a/drivers/crypto/cnxk/meson.build
+++ b/drivers/crypto/cnxk/meson.build
@@ -25,7 +25,7 @@ sources = files(
 )
 
 headers = files('rte_pmd_cnxk_crypto.h')
-deps += ['bus_pci', 'common_cnxk', 'security', 'eventdev']
+deps += ['common_cnxk', 'eventdev']
 includes += include_directories('../../../lib/net', '../../event/cnxk')
 
 if get_option('buildtype').contains('debug')
diff --git a/drivers/crypto/dpaa_sec/meson.build b/drivers/crypto/dpaa_sec/meson.build
index f87ad6c7e7..9efac952c4 100644
--- a/drivers/crypto/dpaa_sec/meson.build
+++ b/drivers/crypto/dpaa_sec/meson.build
@@ -6,7 +6,7 @@ if not is_linux
     reason = 'only supported on Linux'
 endif
 
-deps += ['bus_dpaa', 'mempool_dpaa', 'security']
+deps += ['mempool_dpaa', 'security']
 sources = files('dpaa_sec.c', 'dpaa_sec_raw_dp.c')
 
 includes += include_directories('../../bus/dpaa/include')
diff --git a/drivers/crypto/ipsec_mb/meson.build b/drivers/crypto/ipsec_mb/meson.build
index 89ee03454b..01198cca68 100644
--- a/drivers/crypto/ipsec_mb/meson.build
+++ b/drivers/crypto/ipsec_mb/meson.build
@@ -45,5 +45,5 @@ sources = files(
         'pmd_snow3g.c',
         'pmd_zuc.c',
 )
-deps += ['bus_vdev', 'net', 'security']
+deps += ['bus_vdev', 'security']
 require_iova_in_mbuf = false
diff --git a/drivers/crypto/mlx5/meson.build b/drivers/crypto/mlx5/meson.build
index d7bc8ec967..595053d8cd 100644
--- a/drivers/crypto/mlx5/meson.build
+++ b/drivers/crypto/mlx5/meson.build
@@ -7,7 +7,7 @@ if not (is_linux or is_windows)
     subdir_done()
 endif
 
-deps += ['common_mlx5', 'eal', 'cryptodev']
+deps += ['common_mlx5', 'cryptodev']
 if not dpdk_conf.has('RTE_COMMON_MLX5')
     # avoid referencing undefined variables from common/mlx5
     subdir_done()
diff --git a/drivers/crypto/nitrox/meson.build b/drivers/crypto/nitrox/meson.build
index f8887713d2..85e3ca2b28 100644
--- a/drivers/crypto/nitrox/meson.build
+++ b/drivers/crypto/nitrox/meson.build
@@ -6,7 +6,7 @@ if not is_linux
     reason = 'only supported on Linux'
 endif
 
-deps += ['common_nitrox', 'bus_pci', 'cryptodev']
+deps += ['common_nitrox', 'cryptodev']
 
 sources += files(
         'nitrox_sym.c',
diff --git a/drivers/dma/cnxk/meson.build b/drivers/dma/cnxk/meson.build
index 8ccc1c2cb7..738774d542 100644
--- a/drivers/dma/cnxk/meson.build
+++ b/drivers/dma/cnxk/meson.build
@@ -12,7 +12,7 @@ driver_sdk_headers = files(
         'cnxk_dma_event_dp.h',
 )
 
-deps += ['bus_pci', 'common_cnxk', 'dmadev', 'eventdev']
+deps += ['common_cnxk', 'eventdev']
 
 includes += include_directories('../../event/cnxk')
 
diff --git a/drivers/dma/dpaa/meson.build b/drivers/dma/dpaa/meson.build
index c31a6d91fe..fec4a45767 100644
--- a/drivers/dma/dpaa/meson.build
+++ b/drivers/dma/dpaa/meson.build
@@ -6,7 +6,7 @@ if not is_linux
     reason = 'only supported on linux'
 endif
 
-deps += ['dmadev', 'bus_dpaa']
+deps += ['bus_dpaa']
 sources = files('dpaa_qdma.c')
 
 if cc.has_argument('-Wno-pointer-arith')
diff --git a/drivers/dma/dpaa2/meson.build b/drivers/dma/dpaa2/meson.build
index a523f5edb4..cc4a02440e 100644
--- a/drivers/dma/dpaa2/meson.build
+++ b/drivers/dma/dpaa2/meson.build
@@ -8,7 +8,7 @@ endif
 
 build = dpdk_conf.has('RTE_MEMPOOL_DPAA2')
 reason = 'missing dependency, DPDK DPAA2 mempool driver'
-deps += ['dmadev', 'bus_fslmc', 'mempool_dpaa2', 'ring', 'kvargs']
+deps += ['mempool_dpaa2']
 sources = files('dpaa2_qdma.c')
 
 if cc.has_argument('-Wno-pointer-arith')
diff --git a/drivers/dma/odm/meson.build b/drivers/dma/odm/meson.build
index d597762d37..959e7e685d 100644
--- a/drivers/dma/odm/meson.build
+++ b/drivers/dma/odm/meson.build
@@ -7,7 +7,7 @@ if not is_linux or not dpdk_conf.get('RTE_ARCH_64')
     subdir_done()
 endif
 
-deps += ['bus_pci', 'dmadev', 'eal', 'mempool', 'pci']
+deps += ['bus_pci', 'dmadev', 'mempool']
 
 sources = files('odm_dmadev.c', 'odm.c')
 
diff --git a/drivers/dma/skeleton/meson.build b/drivers/dma/skeleton/meson.build
index 77055683ad..0d703a36eb 100644
--- a/drivers/dma/skeleton/meson.build
+++ b/drivers/dma/skeleton/meson.build
@@ -1,7 +1,7 @@
 # SPDX-License-Identifier: BSD-3-Clause
 # Copyright(c) 2021 HiSilicon Limited
 
-deps += ['dmadev', 'kvargs', 'ring', 'bus_vdev']
+deps += ['dmadev', 'ring', 'bus_vdev']
 sources = files(
         'skeleton_dmadev.c',
 )
diff --git a/drivers/event/cnxk/meson.build b/drivers/event/cnxk/meson.build
index 8aaf8116f7..e944f4277f 100644
--- a/drivers/event/cnxk/meson.build
+++ b/drivers/event/cnxk/meson.build
@@ -311,7 +311,7 @@ foreach flag: extra_flags
 endforeach
 
 headers = files('rte_pmd_cnxk_eventdev.h')
-deps += ['bus_pci', 'common_cnxk', 'net_cnxk', 'crypto_cnxk', 'dma_cnxk']
+deps += ['net_cnxk', 'crypto_cnxk', 'dma_cnxk']
 
 require_iova_in_mbuf = false
 
diff --git a/drivers/event/dlb2/meson.build b/drivers/event/dlb2/meson.build
index c024edb311..2bb1b97686 100644
--- a/drivers/event/dlb2/meson.build
+++ b/drivers/event/dlb2/meson.build
@@ -39,4 +39,4 @@ endif
 
 headers = files('rte_pmd_dlb2.h')
 
-deps += ['mbuf', 'mempool', 'ring', 'pci', 'bus_pci']
+deps += ['bus_pci']
diff --git a/drivers/event/dpaa2/meson.build b/drivers/event/dpaa2/meson.build
index dd5063af43..7dae1da32b 100644
--- a/drivers/event/dpaa2/meson.build
+++ b/drivers/event/dpaa2/meson.build
@@ -5,7 +5,7 @@ if not is_linux
     build = false
     reason = 'only supported on Linux'
 endif
-deps += ['bus_vdev', 'net_dpaa2', 'crypto_dpaa2_sec']
+deps += ['net_dpaa2', 'crypto_dpaa2_sec']
 sources = files(
         'dpaa2_hw_dpcon.c',
         'dpaa2_eventdev.c',
diff --git a/drivers/event/octeontx/meson.build b/drivers/event/octeontx/meson.build
index eb17e059d8..1227b2e18d 100644
--- a/drivers/event/octeontx/meson.build
+++ b/drivers/event/octeontx/meson.build
@@ -17,5 +17,4 @@ sources = files(
         'timvf_probe.c',
 )
 
-deps += ['common_octeontx', 'mempool_octeontx', 'bus_vdev', 'net_octeontx']
-deps += ['crypto_octeontx']
+deps = ['net_octeontx', 'crypto_octeontx']
diff --git a/drivers/event/sw/meson.build b/drivers/event/sw/meson.build
index 3a3ebd72a3..450969aa7a 100644
--- a/drivers/event/sw/meson.build
+++ b/drivers/event/sw/meson.build
@@ -8,5 +8,5 @@ sources = files(
         'sw_evdev_xstats.c',
         'sw_evdev.c',
 )
-deps += ['hash', 'bus_vdev']
+deps += ['bus_vdev']
 require_iova_in_mbuf = false
diff --git a/drivers/mempool/cnxk/meson.build b/drivers/mempool/cnxk/meson.build
index e388cce26a..7bbed325df 100644
--- a/drivers/mempool/cnxk/meson.build
+++ b/drivers/mempool/cnxk/meson.build
@@ -18,5 +18,5 @@ sources = files(
 )
 
 headers = files('rte_pmd_cnxk_mempool.h')
-deps += ['eal', 'mbuf', 'kvargs', 'bus_pci', 'common_cnxk', 'mempool']
+deps = ['common_cnxk']
 require_iova_in_mbuf = false
diff --git a/drivers/mempool/dpaa/meson.build b/drivers/mempool/dpaa/meson.build
index c4e9994b83..39fc312344 100644
--- a/drivers/mempool/dpaa/meson.build
+++ b/drivers/mempool/dpaa/meson.build
@@ -6,5 +6,5 @@ if not is_linux
     reason = 'only supported on Linux'
 endif
 
-deps += ['bus_dpaa']
+deps = ['bus_dpaa']
 sources = files('dpaa_mempool.c')
diff --git a/drivers/mempool/dpaa2/meson.build b/drivers/mempool/dpaa2/meson.build
index 3d16d44158..0099b20b97 100644
--- a/drivers/mempool/dpaa2/meson.build
+++ b/drivers/mempool/dpaa2/meson.build
@@ -6,7 +6,7 @@ if not is_linux
     reason = 'only supported on Linux'
 endif
 
-deps += ['bus_fslmc']
+deps = ['bus_fslmc']
 sources = files('dpaa2_hw_mempool.c')
 
 headers = files('rte_dpaa2_mempool.h')
diff --git a/drivers/mempool/octeontx/meson.build b/drivers/mempool/octeontx/meson.build
index 3ccecac75d..f97bcf4a5a 100644
--- a/drivers/mempool/octeontx/meson.build
+++ b/drivers/mempool/octeontx/meson.build
@@ -12,6 +12,6 @@ sources = files(
         'rte_mempool_octeontx.c',
 )
 
-deps += ['mbuf', 'bus_pci', 'common_octeontx']
+deps = ['mbuf', 'bus_pci', 'common_octeontx']
 
 require_iova_in_mbuf = false
diff --git a/drivers/ml/cnxk/meson.build b/drivers/ml/cnxk/meson.build
index 0680a0faa5..6c99f5b57b 100644
--- a/drivers/ml/cnxk/meson.build
+++ b/drivers/ml/cnxk/meson.build
@@ -55,7 +55,7 @@ sources = files(
         'cnxk_ml_utils.c',
 )
 
-deps += ['mldev', 'common_cnxk', 'kvargs', 'hash']
+deps += ['mldev', 'common_cnxk', 'hash']
 
 if enable_mvtvm
 
diff --git a/drivers/net/cnxk/meson.build b/drivers/net/cnxk/meson.build
index 32ff8aadc0..48a546adb8 100644
--- a/drivers/net/cnxk/meson.build
+++ b/drivers/net/cnxk/meson.build
@@ -320,9 +320,7 @@ sources += files(
 endif
 endif
 
-
-deps += ['bus_pci', 'cryptodev', 'eventdev', 'security']
-deps += ['common_cnxk', 'mempool_cnxk']
+deps = ['eventdev', 'mempool_cnxk']
 
 # Allow implicit vector conversions and strict aliasing warning
 extra_flags = ['-flax-vector-conversions', '-Wno-strict-aliasing']
diff --git a/drivers/net/iavf/meson.build b/drivers/net/iavf/meson.build
index b48bb83438..4849c2341a 100644
--- a/drivers/net/iavf/meson.build
+++ b/drivers/net/iavf/meson.build
@@ -9,7 +9,7 @@ includes += include_directories('../../common/iavf')
 
 testpmd_sources = files('iavf_testpmd.c')
 
-deps += ['common_iavf', 'security', 'cryptodev']
+deps += ['common_iavf', 'security']
 
 sources = files(
         'iavf_ethdev.c',
diff --git a/drivers/net/ice/meson.build b/drivers/net/ice/meson.build
index 1c9dc0cc6d..f9e37f5386 100644
--- a/drivers/net/ice/meson.build
+++ b/drivers/net/ice/meson.build
@@ -18,7 +18,7 @@ sources = files(
 
 testpmd_sources = files('ice_testpmd.c')
 
-deps += ['hash', 'net', 'common_iavf']
+deps += ['hash', 'common_iavf']
 includes += include_directories('base', '../../common/iavf')
 
 if arch_subdir == 'x86'
diff --git a/drivers/net/mana/meson.build b/drivers/net/mana/meson.build
index 4d163fc0f2..68f03fd60d 100644
--- a/drivers/net/mana/meson.build
+++ b/drivers/net/mana/meson.build
@@ -7,7 +7,7 @@ if not is_linux or not (dpdk_conf.has('RTE_ARCH_X86') or dpdk_conf.has('RTE_ARCH
     subdir_done()
 endif
 
-deps += ['pci', 'bus_pci', 'net', 'eal', 'kvargs']
+deps += ['bus_pci']
 
 sources += files(
         'gdma.c',
diff --git a/drivers/net/mlx5/meson.build b/drivers/net/mlx5/meson.build
index 78a8648b43..7c4a63524f 100644
--- a/drivers/net/mlx5/meson.build
+++ b/drivers/net/mlx5/meson.build
@@ -8,7 +8,7 @@ if not (is_linux or is_windows)
     subdir_done()
 endif
 
-deps += ['hash', 'common_mlx5']
+deps += ['common_mlx5']
 if not dpdk_conf.has('RTE_COMMON_MLX5')
     # avoid referencing undefined variables from common/mlx5
     subdir_done()
diff --git a/drivers/net/sfc/meson.build b/drivers/net/sfc/meson.build
index 5adde68517..820ee6c91e 100644
--- a/drivers/net/sfc/meson.build
+++ b/drivers/net/sfc/meson.build
@@ -71,7 +71,7 @@ if not cc.links(atomic_check_code)
     ext_deps += libatomic_dep
 endif
 
-deps += ['common_sfc_efx', 'bus_pci', 'hash']
+deps += ['common_sfc_efx', 'hash']
 sources = files(
         'sfc_ethdev.c',
         'sfc_kvargs.c',
diff --git a/drivers/net/softnic/meson.build b/drivers/net/softnic/meson.build
index 5dfbd16c77..1529ef38f9 100644
--- a/drivers/net/softnic/meson.build
+++ b/drivers/net/softnic/meson.build
@@ -15,4 +15,4 @@ sources = files(
         'rte_eth_softnic_swq.c',
         'rte_eth_softnic_thread.c',
 )
-deps += ['pipeline', 'port', 'table']
+deps += ['pipeline']
diff --git a/drivers/net/virtio/meson.build b/drivers/net/virtio/meson.build
index 02742da5c2..ce23521ca2 100644
--- a/drivers/net/virtio/meson.build
+++ b/drivers/net/virtio/meson.build
@@ -21,7 +21,7 @@ sources += files(
         'virtio_rxtx_simple.c',
         'virtqueue.c',
 )
-deps += ['kvargs', 'bus_pci']
+deps += ['bus_pci']
 
 if arch_subdir == 'x86'
     if cc_has_avx512
diff --git a/drivers/raw/cnxk_bphy/meson.build b/drivers/raw/cnxk_bphy/meson.build
index bb5d2ffb80..b38b071697 100644
--- a/drivers/raw/cnxk_bphy/meson.build
+++ b/drivers/raw/cnxk_bphy/meson.build
@@ -2,7 +2,7 @@
 # Copyright(C) 2021 Marvell.
 #
 
-deps += ['bus_pci', 'common_cnxk', 'rawdev']
+deps += ['common_cnxk', 'rawdev']
 sources = files(
         'cnxk_bphy.c',
         'cnxk_bphy_cgx.c',
diff --git a/drivers/raw/cnxk_gpio/meson.build b/drivers/raw/cnxk_gpio/meson.build
index 9d9a527392..6d17fe573f 100644
--- a/drivers/raw/cnxk_gpio/meson.build
+++ b/drivers/raw/cnxk_gpio/meson.build
@@ -2,7 +2,7 @@
 # Copyright(C) 2021 Marvell.
 #
 
-deps += ['bus_vdev', 'common_cnxk', 'rawdev', 'kvargs']
+deps += ['bus_vdev', 'common_cnxk', 'rawdev']
 sources = files(
         'cnxk_gpio.c',
         'cnxk_gpio_irq.c',
diff --git a/drivers/raw/gdtc/meson.build b/drivers/raw/gdtc/meson.build
index 3e748ca58d..b86f9510ce 100644
--- a/drivers/raw/gdtc/meson.build
+++ b/drivers/raw/gdtc/meson.build
@@ -1,5 +1,5 @@
 # SPDX-License-Identifier: BSD-3-Clause
 # Copyright 2024 ZTE Corporation
 
-deps += ['rawdev', 'kvargs', 'mbuf', 'bus_pci']
+deps += ['rawdev', 'mbuf', 'bus_pci']
 sources = files('gdtc_rawdev.c')
diff --git a/drivers/raw/ntb/meson.build b/drivers/raw/ntb/meson.build
index 9096f2b25a..8f79d3b16a 100644
--- a/drivers/raw/ntb/meson.build
+++ b/drivers/raw/ntb/meson.build
@@ -1,7 +1,7 @@
 # SPDX-License-Identifier: BSD-3-Clause
 # Copyright(c) 2019 Intel Corporation.
 
-deps += ['rawdev', 'mbuf', 'mempool', 'pci', 'bus_pci']
+deps += ['rawdev', 'mbuf', 'bus_pci']
 sources = files('ntb.c',
                 'ntb_hw_intel.c')
 headers = files('rte_pmd_ntb.h')
diff --git a/drivers/raw/skeleton/meson.build b/drivers/raw/skeleton/meson.build
index 9d5fcf6514..7d76fe71b3 100644
--- a/drivers/raw/skeleton/meson.build
+++ b/drivers/raw/skeleton/meson.build
@@ -1,7 +1,7 @@
 # SPDX-License-Identifier: BSD-3-Clause
 # Copyright 2018 NXP
 
-deps += ['rawdev', 'kvargs', 'mbuf', 'bus_vdev']
+deps += ['rawdev', 'mbuf', 'bus_vdev']
 sources = files(
         'skeleton_rawdev.c',
         'skeleton_rawdev_test.c',
diff --git a/drivers/regex/cn9k/meson.build b/drivers/regex/cn9k/meson.build
index b22275928a..40aced4c62 100644
--- a/drivers/regex/cn9k/meson.build
+++ b/drivers/regex/cn9k/meson.build
@@ -13,4 +13,4 @@ sources = files(
 )
 
 deps += ['bus_pci']
-deps += ['common_cnxk', 'mempool_cnxk']
+deps += ['mempool_cnxk']
diff --git a/drivers/regex/mlx5/meson.build b/drivers/regex/mlx5/meson.build
index 6070b37501..f75bf2e084 100644
--- a/drivers/regex/mlx5/meson.build
+++ b/drivers/regex/mlx5/meson.build
@@ -7,7 +7,7 @@ if not is_linux
     subdir_done()
 endif
 
-deps += ['common_mlx5', 'eal']
+deps += ['common_mlx5']
 if not dpdk_conf.has('RTE_COMMON_MLX5')
     # avoid referencing undefined variables from common/mlx5
     subdir_done()
diff --git a/drivers/vdpa/ifc/meson.build b/drivers/vdpa/ifc/meson.build
index f78d36a715..f4ed4f491f 100644
--- a/drivers/vdpa/ifc/meson.build
+++ b/drivers/vdpa/ifc/meson.build
@@ -1,6 +1,6 @@
 # SPDX-License-Identifier: BSD-3-Clause
 # Copyright(c) 2018 Intel Corporation
 
-deps += 'vhost'
+deps += 'bus_pci'
 sources = files('ifcvf_vdpa.c', 'base/ifcvf.c')
 includes += include_directories('base')
diff --git a/drivers/vdpa/meson.build b/drivers/vdpa/meson.build
index e01c277b9e..747cdc7c55 100644
--- a/drivers/vdpa/meson.build
+++ b/drivers/vdpa/meson.build
@@ -11,5 +11,4 @@ drivers = [
         'nfp',
         'sfc',
 ]
-std_deps = ['bus_pci']
-std_deps += ['vhost']
+std_deps = ['vhost']
diff --git a/drivers/vdpa/mlx5/meson.build b/drivers/vdpa/mlx5/meson.build
index e224d1bcc9..1263ac43a4 100644
--- a/drivers/vdpa/mlx5/meson.build
+++ b/drivers/vdpa/mlx5/meson.build
@@ -7,7 +7,7 @@ if not is_linux
     subdir_done()
 endif
 
-deps += ['hash', 'common_mlx5', 'vhost', 'pci', 'eal', 'sched']
+deps += ['common_mlx5', 'vhost', 'sched']
 if not dpdk_conf.has('RTE_COMMON_MLX5')
     # avoid referencing undefined variables from common/mlx5
     subdir_done()
diff --git a/drivers/vdpa/sfc/meson.build b/drivers/vdpa/sfc/meson.build
index 933f3f18f3..465ca9f220 100644
--- a/drivers/vdpa/sfc/meson.build
+++ b/drivers/vdpa/sfc/meson.build
@@ -16,7 +16,7 @@ foreach flag: extra_flags
     endif
 endforeach
 
-deps += ['common_sfc_efx', 'bus_pci']
+deps += ['common_sfc_efx']
 sources = files(
         'sfc_vdpa.c',
         'sfc_vdpa_hw.c',
-- 
2.43.5


^ permalink raw reply	[flat|nested] 54+ messages in thread

* [PATCH v5 7/8] build: reduce app dependencies
  2024-11-27 14:56   ` [PATCH v5 " Anatoly Burakov
                       ` (5 preceding siblings ...)
  2024-11-27 14:56     ` [PATCH v5 6/8] build: reduce driver dependencies Anatoly Burakov
@ 2024-11-27 14:56     ` Anatoly Burakov
  2024-11-27 14:56     ` [PATCH v5 8/8] devtools: add script to generate DPDK dependency graphs Anatoly Burakov
  7 siblings, 0 replies; 54+ messages in thread
From: Anatoly Burakov @ 2024-11-27 14:56 UTC (permalink / raw)
  To: dev, Reshma Pattan, Stephen Hemminger, Sunil Kumar Kori,
	Rakesh Kudurumalla, Brian Dooley, Vladimir Medvedkin,
	Konstantin Ananyev

From: Bruce Richardson <bruce.richardson@intel.com>

Remove any unnecessary dependencies from the app dependency lists.
This will give each app a near-minimum set of required dependencies.

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
---
 app/dumpcap/meson.build          | 2 +-
 app/graph/meson.build            | 2 +-
 app/pdump/meson.build            | 2 +-
 app/proc-info/meson.build        | 2 +-
 app/test-crypto-perf/meson.build | 2 +-
 app/test-fib/meson.build         | 2 +-
 app/test-sad/meson.build         | 2 +-
 app/test/meson.build             | 2 +-
 8 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/app/dumpcap/meson.build b/app/dumpcap/meson.build
index 69c016c780..6204cf051a 100644
--- a/app/dumpcap/meson.build
+++ b/app/dumpcap/meson.build
@@ -14,4 +14,4 @@ endif
 
 ext_deps += pcap_dep
 sources = files('main.c')
-deps += ['ethdev', 'pdump', 'pcapng', 'bpf']
+deps += ['pdump']
diff --git a/app/graph/meson.build b/app/graph/meson.build
index 344e4a418f..9c4cd080d9 100644
--- a/app/graph/meson.build
+++ b/app/graph/meson.build
@@ -9,7 +9,7 @@ if not build
     subdir_done()
 endif
 
-deps += ['graph', 'eal', 'lpm', 'ethdev', 'node', 'cmdline', 'net']
+deps += ['node', 'cmdline']
 sources = files(
         'cli.c',
         'conn.c',
diff --git a/app/pdump/meson.build b/app/pdump/meson.build
index fb282bba1f..a10f9d6124 100644
--- a/app/pdump/meson.build
+++ b/app/pdump/meson.build
@@ -8,4 +8,4 @@ if is_windows
 endif
 
 sources = files('main.c')
-deps += ['ethdev', 'kvargs', 'pdump']
+deps += ['pdump']
diff --git a/app/proc-info/meson.build b/app/proc-info/meson.build
index 5fefb0857e..3631d7a675 100644
--- a/app/proc-info/meson.build
+++ b/app/proc-info/meson.build
@@ -8,5 +8,5 @@ if is_windows
 endif
 
 sources = files('main.c')
-deps += ['ethdev', 'security', 'eventdev']
+deps += ['security', 'eventdev']
 optional_deps += 'metrics'
diff --git a/app/test-crypto-perf/meson.build b/app/test-crypto-perf/meson.build
index 1ac0ac1099..839d42e28d 100644
--- a/app/test-crypto-perf/meson.build
+++ b/app/test-crypto-perf/meson.build
@@ -19,5 +19,5 @@ sources = files(
         'cperf_test_verify.c',
         'main.c',
 )
-deps += ['cryptodev', 'net', 'security']
+deps += ['cryptodev']
 optional_deps += 'crypto_scheduler'
diff --git a/app/test-fib/meson.build b/app/test-fib/meson.build
index eb36772cf3..25e2ea1a1d 100644
--- a/app/test-fib/meson.build
+++ b/app/test-fib/meson.build
@@ -8,4 +8,4 @@ if is_windows
 endif
 
 sources = files('main.c')
-deps += ['fib', 'lpm', 'net']
+deps += ['fib', 'lpm']
diff --git a/app/test-sad/meson.build b/app/test-sad/meson.build
index a50616a9c7..414e2a05cb 100644
--- a/app/test-sad/meson.build
+++ b/app/test-sad/meson.build
@@ -8,4 +8,4 @@ if is_windows
 endif
 
 sources = files('main.c')
-deps += ['ipsec', 'net']
+deps += ['ipsec']
diff --git a/app/test/meson.build b/app/test/meson.build
index 36c2016a49..a77c152ef3 100644
--- a/app/test/meson.build
+++ b/app/test/meson.build
@@ -2,7 +2,7 @@
 # Copyright(c) 2017-2023 Intel Corporation
 
 # the main test files [test.c and commands.c] relies on these libraries
-deps += ['cmdline', 'ring', 'mempool', 'mbuf']
+deps += ['cmdline']
 sources += files('commands.c', 'test.c')
 
 # optional dependencies: some files may use these - and so we should link them in -
-- 
2.43.5


^ permalink raw reply	[flat|nested] 54+ messages in thread

* [PATCH v5 8/8] devtools: add script to generate DPDK dependency graphs
  2024-11-27 14:56   ` [PATCH v5 " Anatoly Burakov
                       ` (6 preceding siblings ...)
  2024-11-27 14:56     ` [PATCH v5 7/8] build: reduce app dependencies Anatoly Burakov
@ 2024-11-27 14:56     ` Anatoly Burakov
  7 siblings, 0 replies; 54+ messages in thread
From: Anatoly Burakov @ 2024-11-27 14:56 UTC (permalink / raw)
  To: dev

From: Bruce Richardson <bruce.richardson@intel.com>

Rather than the single monolithic graph that would be output from the
deps.dot file in a build directory, we can post-process that to generate
simpler graphs for different tasks. This new "draw_dependency_graphs"
script takes the "deps.dot" as input and generates an output file that
has the nodes categorized, filtering them based off the requested node or
category. For example, use "--match net/ice" to show the dependency tree
from that driver, or "--match lib" to show just the library dependency
tree.

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com>
---
 devtools/draw-dependency-graphs.py | 223 +++++++++++++++++++++++++++++
 1 file changed, 223 insertions(+)
 create mode 100755 devtools/draw-dependency-graphs.py

diff --git a/devtools/draw-dependency-graphs.py b/devtools/draw-dependency-graphs.py
new file mode 100755
index 0000000000..4fb765498d
--- /dev/null
+++ b/devtools/draw-dependency-graphs.py
@@ -0,0 +1,223 @@
+#! /usr/bin/env python3
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright(c) 2024 Intel Corporation
+
+import argparse
+import collections
+import sys
+import typing as T
+
+# typedef for dependency data types
+Deps = T.Set[str]
+DepData = T.Dict[str, T.Dict[str, T.Dict[bool, Deps]]]
+
+
+def parse_dep_line(line: str) -> T.Tuple[str, Deps, str, bool]:
+    """Parse digraph line into (component, {dependencies}, type, optional)."""
+    # extract attributes first
+    first, last = line.index("["), line.rindex("]")
+    edge_str, attr_str = line[:first], line[first + 1 : last]
+    # key=value, key=value, ...
+    attrs = {
+        key.strip('" '): value.strip('" ')
+        for attr_kv in attr_str.split(",")
+        for key, value in [attr_kv.strip().split("=", 1)]
+    }
+    # check if edge is defined as dotted line, meaning it's optional
+    optional = "dotted" in attrs.get("style", "")
+    try:
+        component_type = attrs["dpdk_componentType"]
+    except KeyError as _e:
+        raise ValueError(f"Error: missing component type: {line}") from _e
+
+    # now, extract component name and any of its dependencies
+    deps: T.Set[str] = set()
+    try:
+        component, deps_str = edge_str.strip('" ').split("->", 1)
+        component = component.strip().strip('" ')
+        deps_str = deps_str.strip().strip("{}")
+        deps = {d.strip('" ') for d in deps_str.split(",")}
+    except ValueError as _e:
+        component = edge_str.strip('" ')
+
+    return component, deps, component_type, optional
+
+
+def gen_dep_line(component: str, deps: T.Set[str], optional: bool) -> str:
+    """Generate a dependency line for a component."""
+    # we use dotted line to represent optional components
+    attr_str = ' [style="dotted"]' if optional else ""
+    dep_list_str = '", "'.join(deps)
+    deps_str = "" if not deps else f' -> {{ "{dep_list_str}" }}'
+    return f'    "{component}"{deps_str}{attr_str}\n'
+
+
+def read_deps_list(lines: T.List[str]) -> DepData:
+    """Read a list of dependency lines into a dictionary."""
+    deps_data: T.Dict[str, T.Any] = {}
+    for ln in lines:
+        if ln.startswith("digraph") or ln == "}":
+            continue
+
+        component, deps, component_type, optional = parse_dep_line(ln)
+
+        # each component will have two sets of dependencies - required and optional
+        c_dict = deps_data.setdefault(component_type, {}).setdefault(component, {})
+        c_dict[optional] = deps
+    return deps_data
+
+
+def create_classified_graph(deps_data: DepData) -> T.Iterator[str]:
+    """Create a graph of dependencies with components classified by type."""
+    yield "digraph dpdk_dependencies {\n  overlap=false\n  model=subset\n"
+    for n, deps_t in enumerate(deps_data.items()):
+        component_type, component_dict = deps_t
+        yield f'  subgraph cluster_{n} {{\n    label = "{component_type}"\n'
+        for component, optional_d in component_dict.items():
+            for optional, deps in optional_d.items():
+                yield gen_dep_line(component, deps, optional)
+        yield "  }\n"
+    yield "}\n"
+
+
+def parse_match(line: str, dep_data: DepData) -> T.List[str]:
+    """Extract list of components from a category string."""
+    # if this is not a compound string, we have very few valid choices
+    if "/" not in line:
+        # is this a category?
+        if line in dep_data:
+            return list(dep_data[line].keys())
+        # this isn't a category. maybe an app name?
+        maybe_app_name = f"dpdk-{line}"
+        if maybe_app_name in dep_data["app"]:
+            return [maybe_app_name]
+        if maybe_app_name in dep_data["examples"]:
+            return [maybe_app_name]
+        # this isn't an app name either, so just look for component with that name
+        for _, component_dict in dep_data.items():
+            if line in component_dict:
+                return [line]
+        # nothing found still. one last try: maybe it's a driver? we have to be careful though
+        # because a driver name may not be unique, e.g. common/iavf and net/iavf. so, only pick
+        # a driver if we can find exactly one driver that matches.
+        found_drivers: T.List[str] = []
+        for component in dep_data["drivers"].keys():
+            _, drv_name = component.split("_", 1)
+            if drv_name == line:
+                found_drivers.append(component)
+        if len(found_drivers) == 1:
+            return found_drivers
+        # we failed to find anything, report error
+        raise ValueError(f"Error: unknown component: {line}")
+
+    # this is a compound string, so we have to do some matching. we may have two or three levels
+    # of hierarchy, as driver/net/ice and net/ice should both be valid.
+
+    # if there are three levels of hierarchy, this must be a driver
+    try:
+        ctype, drv_class, drv_name = line.split("/", 2)
+        component_name = f"{drv_class}_{drv_name}"
+        # we want to directly access the dict to trigger KeyError, and not catch them here
+        if component_name in dep_data[ctype]:
+            return [component_name]
+        else:
+            raise KeyError(f"Unknown category: {line}")
+    except ValueError:
+        # not three levels of hierarchy, try two
+        pass
+
+    first, second = line.split("/", 1)
+
+    # this could still be a driver, just without the "drivers" prefix
+    for component in dep_data["drivers"].keys():
+        if component == f"{first}_{second}":
+            return [component]
+    # could be driver wildcard, e.g. drivers/net
+    if first == "drivers":
+        drv_match: T.List[str] = [
+            drv_name
+            for drv_name in dep_data["drivers"]
+            if drv_name.startswith(f"{second}_")
+        ]
+        if drv_match:
+            return drv_match
+    # may be category + component
+    if first in dep_data:
+        # go through all components in the category
+        if second in dep_data[first]:
+            return [second]
+        # if it's an app or an example, it may have "dpdk-" in front
+        if first in ["app", "examples"]:
+            maybe_app_name = f"dpdk-{second}"
+            if maybe_app_name in dep_data[first]:
+                return [maybe_app_name]
+    # and nothing of value was found
+    raise ValueError(f"Error: unknown component: {line}")
+
+
+def filter_deps(dep_data: DepData, criteria: T.List[str]) -> None:
+    """Filter dependency data to include only specified components."""
+    # this is a two step process: when we get a list of components, we need to
+    # go through all of them and note any dependencies they have, and expand the
+    # list of components with those dependencies. then we filter.
+
+    # walk the dependency list and include all possible dependencies
+    deps_seen: Deps = set()
+    deps_stack = collections.deque(criteria)
+    while deps_stack:
+        component = deps_stack.popleft()
+        if component in deps_seen:
+            continue
+        deps_seen.add(component)
+        for component_type, component_dict in dep_data.items():
+            try:
+                deps = component_dict[component]
+            except KeyError:
+                # wrong component type
+                continue
+            for _, dep_list in deps.items():
+                deps_stack.extend(dep_list)
+    criteria += list(deps_seen)
+
+    # now, "components" has all the dependencies we need to include, so we can filter
+    for component_type, component_dict in dep_data.items():
+        dep_data[component_type] = {
+            component: deps
+            for component, deps in component_dict.items()
+            if component in criteria
+        }
+
+
+def main():
+    parser = argparse.ArgumentParser(
+        description="Utility to generate dependency tree graphs for DPDK"
+    )
+    parser.add_argument(
+        "--match",
+        type=str,
+        help="Output hierarchy for component or category, e.g. net/ice, lib, app, drivers/net, etc.",
+    )
+    parser.add_argument(
+        "input_file",
+        type=argparse.FileType("r"),
+        help="Path to the deps.dot file from a DPDK build directory",
+    )
+    parser.add_argument(
+        "output_file",
+        type=argparse.FileType("w"),
+        help="Path to the desired output dot file",
+    )
+    args = parser.parse_args()
+
+    deps = read_deps_list([ln.strip() for ln in args.input_file.readlines()])
+    if args.match:
+        try:
+            filter_deps(deps, parse_match(args.match, deps))
+        except (KeyError, ValueError) as e:
+            print(e, file=sys.stderr)
+            return
+    args.output_file.writelines(create_classified_graph(deps))
+
+
+if __name__ == "__main__":
+    main()
-- 
2.43.5


^ permalink raw reply	[flat|nested] 54+ messages in thread

* Re: [PATCH v5 6/8] build: reduce driver dependencies
  2024-11-27 14:56     ` [PATCH v5 6/8] build: reduce driver dependencies Anatoly Burakov
@ 2024-11-27 16:19       ` Burakov, Anatoly
  2024-12-16 16:06         ` David Marchand
  0 siblings, 1 reply; 54+ messages in thread
From: Burakov, Anatoly @ 2024-11-27 16:19 UTC (permalink / raw)
  To: dev, Nicolas Chautru, Gagandeep Singh, Hemant Agrawal,
	Parav Pandit, Xueming Li, Sachin Saxena, Rosen Xu, Chenbo Xia,
	Nipun Gupta, Tomasz Duszynski, Chengwen Feng, Nithin Dabilpuram,
	Kiran Kumar K, Sunil Kumar Kori, Satha Rao, Harman Kalra,
	Anoob Joseph, Jingjing Wu, Praveen Shetty, Dariusz Sosnowski,
	Viacheslav Ovsiienko, Bing Zhao, Ori Kam, Suanming Mou,
	Matan Azrad, Kai Ji, Fan Zhang, Ashish Gupta,
	Nagadheeraj Rottela, Ajit Khaparde, Vikas Gupta, Ankur Dwivedi,
	Tejasree Kondoj, Pablo de Lara, Srikanth Jampala, Vamsi Attunuru,
	Gowrishankar Muthukrishnan, Vidya Sagar Velumuri, Kevin Laatz,
	Bruce Richardson, Pavan Nikhilesh, Shijith Thotton,
	Pravin Pathak, Jerin Jacob, Harry van Haaren, Ashwin Sekhar T K,
	Srikanth Yalavarthi, Vladimir Medvedkin, Ian Stokes, Long Li,
	Wei Hu, Andrew Rybchenko, Cristian Dumitrescu, Maxime Coquelin,
	Jakub Palider, Yong Zhang, Liron Himi, Vijay Kumar Srivastava

On 11/27/2024 3:56 PM, Anatoly Burakov wrote:
> From: Bruce Richardson <bruce.richardson@intel.com>
> 
> Remove any unnecessary dependencies from the driver dependency lists.
> This will give each driver a near-minimum set of required dependencies.
> 
> Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
> Reviewed-by: Rosen Xu <rosen.xu@intel.com>
> ---


> diff --git a/drivers/common/qat/meson.build b/drivers/common/qat/meson.build
> index 5a8de16fe0..5ffb56fc93 100644
> --- a/drivers/common/qat/meson.build
> +++ b/drivers/common/qat/meson.build
> @@ -71,7 +71,7 @@ else
>       endif
>   endif
>   
> -deps += ['bus_pci', 'cryptodev', 'net', 'compressdev']
> +deps += ['bus_pci']
>   sources += files(
>           'qat_common.c',
>           'qat_qp.c',
> @@ -101,6 +101,7 @@ if qat_compress
>           ]
>           sources += files(join_paths(qat_compress_relpath, f))
>       endforeach
> +    deps += ['compressdev']
>   endif
>   
>   if qat_crypto

Seems that these changes were overly aggressive and cause build 
failures. Will fix in v6.

-- 
Thanks,
Anatoly

^ permalink raw reply	[flat|nested] 54+ messages in thread

* Re: [PATCH v5 6/8] build: reduce driver dependencies
  2024-11-27 16:19       ` Burakov, Anatoly
@ 2024-12-16 16:06         ` David Marchand
  0 siblings, 0 replies; 54+ messages in thread
From: David Marchand @ 2024-12-16 16:06 UTC (permalink / raw)
  To: Burakov, Anatoly
  Cc: dev, Nicolas Chautru, Gagandeep Singh, Hemant Agrawal,
	Parav Pandit, Xueming Li, Sachin Saxena, Rosen Xu, Chenbo Xia,
	Nipun Gupta, Tomasz Duszynski, Chengwen Feng, Nithin Dabilpuram,
	Kiran Kumar K, Sunil Kumar Kori, Satha Rao, Harman Kalra,
	Anoob Joseph, Jingjing Wu, Praveen Shetty, Dariusz Sosnowski,
	Viacheslav Ovsiienko, Bing Zhao, Ori Kam, Suanming Mou,
	Matan Azrad, Kai Ji, Fan Zhang, Ashish Gupta,
	Nagadheeraj Rottela, Ajit Khaparde, Vikas Gupta, Ankur Dwivedi,
	Tejasree Kondoj, Pablo de Lara, Srikanth Jampala, Vamsi Attunuru,
	Gowrishankar Muthukrishnan, Vidya Sagar Velumuri, Kevin Laatz,
	Bruce Richardson, Pavan Nikhilesh, Shijith Thotton,
	Pravin Pathak, Jerin Jacob, Harry van Haaren, Ashwin Sekhar T K,
	Srikanth Yalavarthi, Vladimir Medvedkin, Ian Stokes, Long Li,
	Wei Hu, Andrew Rybchenko, Cristian Dumitrescu, Maxime Coquelin,
	Jakub Palider, Yong Zhang, Liron Himi, Vijay Kumar Srivastava

On Wed, Nov 27, 2024 at 5:20 PM Burakov, Anatoly
<anatoly.burakov@intel.com> wrote:
>
> On 11/27/2024 3:56 PM, Anatoly Burakov wrote:
> > From: Bruce Richardson <bruce.richardson@intel.com>
> >
> > Remove any unnecessary dependencies from the driver dependency lists.
> > This will give each driver a near-minimum set of required dependencies.
> >
> > Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
> > Reviewed-by: Rosen Xu <rosen.xu@intel.com>
> > ---
>
>
> > diff --git a/drivers/common/qat/meson.build b/drivers/common/qat/meson.build
> > index 5a8de16fe0..5ffb56fc93 100644
> > --- a/drivers/common/qat/meson.build
> > +++ b/drivers/common/qat/meson.build
> > @@ -71,7 +71,7 @@ else
> >       endif
> >   endif
> >
> > -deps += ['bus_pci', 'cryptodev', 'net', 'compressdev']
> > +deps += ['bus_pci']
> >   sources += files(
> >           'qat_common.c',
> >           'qat_qp.c',
> > @@ -101,6 +101,7 @@ if qat_compress
> >           ]
> >           sources += files(join_paths(qat_compress_relpath, f))
> >       endforeach
> > +    deps += ['compressdev']
> >   endif
> >
> >   if qat_crypto
>
> Seems that these changes were overly aggressive and cause build
> failures. Will fix in v6.

Indeed, some crypto-related headers still get included in "common" code.


-- 
David Marchand


^ permalink raw reply	[flat|nested] 54+ messages in thread

end of thread, other threads:[~2024-12-16 16:07 UTC | newest]

Thread overview: 54+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-07-30 14:55 [PATCH] build: output a dependency log in build directory Bruce Richardson
2024-07-31  9:07 ` Konstantin Ananyev
2024-07-31 10:17 ` Ferruh Yigit
2024-07-31 10:27   ` Bruce Richardson
2024-08-02 12:44 ` [PATCH v2 0/7] record and rework component dependencies Bruce Richardson
2024-08-02 12:44   ` [PATCH v2 1/7] build: output a dependency log in build directory Bruce Richardson
2024-09-02 14:34     ` Burakov, Anatoly
2024-09-03  8:31       ` Bruce Richardson
2024-08-02 12:44   ` [PATCH v2 2/7] devtools: add script to flag unneeded dependencies Bruce Richardson
2024-08-02 12:44   ` [PATCH v2 3/7] build: remove kvargs from driver class dependencies Bruce Richardson
2024-08-02 12:44   ` [PATCH v2 4/7] build: reduce library dependencies Bruce Richardson
2024-08-02 12:44   ` [PATCH v2 5/7] build: reduce driver dependencies Bruce Richardson
2024-08-02 12:44   ` [PATCH v2 6/7] build: reduce app dependencies Bruce Richardson
2024-08-02 12:44   ` [PATCH v2 7/7] devtools: add script to generate DPDK dependency graphs Bruce Richardson
2024-08-02 13:29   ` [PATCH v2 0/7] record and rework component dependencies Morten Brørup
2024-08-02 15:05   ` Patrick Robb
2024-08-02 15:11     ` Bruce Richardson
2024-08-02 17:18   ` Ferruh Yigit
2024-08-06  8:35     ` Bruce Richardson
2024-09-04 15:08 ` [PATCH v3 0/8] " Anatoly Burakov
2024-09-04 15:08   ` [PATCH v3 1/8] build: split dependencies into mandatory and optional Anatoly Burakov
2024-09-06 14:51     ` Bruce Richardson
2024-09-09  8:41       ` Burakov, Anatoly
2024-09-09  9:01         ` Bruce Richardson
2024-09-04 15:08   ` [PATCH v3 2/8] build: output a dependency log in build directory Anatoly Burakov
2024-09-04 15:08   ` [PATCH v3 3/8] devtools: add script to flag unneeded dependencies Anatoly Burakov
2024-09-04 15:08   ` [PATCH v3 4/8] build: remove kvargs from driver class dependencies Anatoly Burakov
2024-09-04 15:08   ` [PATCH v3 5/8] build: reduce library dependencies Anatoly Burakov
2024-09-04 15:08   ` [PATCH v3 6/8] build: reduce driver dependencies Anatoly Burakov
2024-09-04 15:08   ` [PATCH v3 7/8] build: reduce app dependencies Anatoly Burakov
2024-09-04 15:08   ` [PATCH v3 8/8] devtools: add script to generate DPDK dependency graphs Anatoly Burakov
2024-09-05  6:05   ` [PATCH v3 0/8] record and rework component dependencies Morten Brørup
2024-11-26 14:39   ` [PATCH v4 0/8] Record " Anatoly Burakov
2024-11-26 14:39     ` [PATCH v4 1/8] build: split dependencies into mandatory and optional Anatoly Burakov
2024-11-26 14:39     ` [PATCH v4 2/8] build: output a dependency log in build directory Anatoly Burakov
2024-11-26 14:39     ` [PATCH v4 3/8] devtools: add script to flag unneeded dependencies Anatoly Burakov
2024-11-26 14:39     ` [PATCH v4 4/8] build: remove kvargs from driver class dependencies Anatoly Burakov
2024-11-26 14:39     ` [PATCH v4 5/8] build: reduce library dependencies Anatoly Burakov
2024-11-26 14:39     ` [PATCH v4 6/8] build: reduce driver dependencies Anatoly Burakov
2024-11-27  2:17       ` Xu, Rosen
2024-11-26 14:39     ` [PATCH v4 7/8] build: reduce app dependencies Anatoly Burakov
2024-11-26 14:39     ` [PATCH v4 8/8] devtools: add script to generate DPDK dependency graphs Anatoly Burakov
2024-11-26 15:11     ` [PATCH v4 0/8] Record and rework component dependencies Burakov, Anatoly
2024-11-27 14:56   ` [PATCH v5 " Anatoly Burakov
2024-11-27 14:56     ` [PATCH v5 1/8] build: introduce optional internal dependencies Anatoly Burakov
2024-11-27 14:56     ` [PATCH v5 2/8] build: output a dependency log in build directory Anatoly Burakov
2024-11-27 14:56     ` [PATCH v5 3/8] devtools: add script to flag unneeded dependencies Anatoly Burakov
2024-11-27 14:56     ` [PATCH v5 4/8] build: remove kvargs from driver class dependencies Anatoly Burakov
2024-11-27 14:56     ` [PATCH v5 5/8] build: reduce library dependencies Anatoly Burakov
2024-11-27 14:56     ` [PATCH v5 6/8] build: reduce driver dependencies Anatoly Burakov
2024-11-27 16:19       ` Burakov, Anatoly
2024-12-16 16:06         ` David Marchand
2024-11-27 14:56     ` [PATCH v5 7/8] build: reduce app dependencies Anatoly Burakov
2024-11-27 14:56     ` [PATCH v5 8/8] devtools: add script to generate DPDK dependency graphs Anatoly Burakov

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).