From: Bruce Richardson <bruce.richardson@intel.com>
To: dev@dpdk.org
Cc: ferruh.yigit@amd.com, konstantin.ananyev@huawei.com,
anatoly.burakov@intel.com,
Bruce Richardson <bruce.richardson@intel.com>
Subject: [PATCH v2 2/7] devtools: add script to flag unneeded dependencies
Date: Fri, 2 Aug 2024 13:44:06 +0100 [thread overview]
Message-ID: <20240802124411.485430-3-bruce.richardson@intel.com> (raw)
In-Reply-To: <20240802124411.485430-1-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.0
next prev parent reply other threads:[~2024-08-02 12:44 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
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 ` Bruce Richardson [this message]
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
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20240802124411.485430-3-bruce.richardson@intel.com \
--to=bruce.richardson@intel.com \
--cc=anatoly.burakov@intel.com \
--cc=dev@dpdk.org \
--cc=ferruh.yigit@amd.com \
--cc=konstantin.ananyev@huawei.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).