From: Gregory Etelson <getelson@nvidia.com>
To: <dev@dpdk.org>
Cc: <getelson@nvidia.com>, <matan@nvidia.com>, <rasland@nvidia.com>,
<thomas@monjalon.net>, <bluca@debian.org>,
<david.marchand@redhat.com>, <christian.ehrhardt@canonical.com>,
<ktraynor@redhat.com>,
Bruce Richardson <bruce.richardson@intel.com>
Subject: [dpdk-dev] [PATCH v2] build: add pkg-config validation
Date: Mon, 2 Nov 2020 08:45:48 +0200 [thread overview]
Message-ID: <20201102064548.9291-1-getelson@nvidia.com> (raw)
In-Reply-To: <20201029091638.26646-1-getelson@nvidia.com>
DPDK relies on pkg-config(1) to provide correct parameters for
compiler and linker used in application build.
Inaccurate build parameters, produced by pkg-config from DPDK .pc
files could fail application build or cause unpredicted results
during application runtime.
This patch validates host pkg-config utility and notifies about
known issues.
Signed-off-by: Gregory Etelson <getelson@nvidia.com>
---
buildtools/pkg-config/meson.build | 11 ++++++
buildtools/pkg-config/pkgconfig-validate.sh | 40 +++++++++++++++++++++
doc/guides/linux_gsg/sys_reqs.rst | 5 +++
3 files changed, 56 insertions(+)
create mode 100755 buildtools/pkg-config/pkgconfig-validate.sh
diff --git a/buildtools/pkg-config/meson.build b/buildtools/pkg-config/meson.build
index 5f19304289..4f907d7638 100644
--- a/buildtools/pkg-config/meson.build
+++ b/buildtools/pkg-config/meson.build
@@ -53,3 +53,14 @@ This is required for a number of static inline functions in the public headers.'
# For static linking with dependencies as shared libraries,
# the internal static libraries must be flagged explicitly.
run_command(py3, 'set-static-linker-flags.py', check: true)
+
+pkgconf = find_program('pkg-config', 'pkgconf', required: false)
+if (pkgconf.found())
+ cmd = run_command('./pkgconfig-validate.sh', pkgconf.path(),
+ check:false)
+ if cmd.returncode() != 0
+ version = run_command(pkgconf, '--version')
+ warning('invalid pkg-config version @0@'.format(
+ version.stdout().strip()))
+ endif
+endif
diff --git a/buildtools/pkg-config/pkgconfig-validate.sh b/buildtools/pkg-config/pkgconfig-validate.sh
new file mode 100755
index 0000000000..61ddd6d5a3
--- /dev/null
+++ b/buildtools/pkg-config/pkgconfig-validate.sh
@@ -0,0 +1,40 @@
+#! /bin/sh
+# SPDX-License-Identifier: BSD-3-Clause
+
+# Statically linked private DPDK objects of form
+# -l:file.a must be positionned between --whole-archive … --no-whole-archive
+# linker parameters.
+# Old pkg-config versions misplace --no-whole-archive parameter and put it
+# next to --whole-archive.
+test1_static_libs_order () {
+ PKG_CONFIG_PATH="${PKG_CONFIG_PATH}:$pc_dir" \
+ "$PKGCONF" --libs --static libdpdk | \
+ grep -q 'whole-archive.*l:lib.*no-whole-archive'
+ if test "$?" -ne 0 ; then
+ echo "WARNING: invalid static libraries order"
+ ret=1
+ fi
+ return $ret
+}
+
+if [ "$#" -ne 1 ]; then
+ echo "$0: no pkg-config parameter"
+ exit 1
+fi
+PKGCONF="$1"
+
+# take the first result only
+pc_file=$(find "$MESON_BUILD_ROOT" -type f -name 'libdpdk.pc' -print -quit)
+if [ ! -f "$pc_file" ]; then
+ echo "$0: cannot locate libdpdk.pc"
+ exit 1
+fi
+pc_dir=$(dirname "$pc_file")
+
+ret=0
+
+test1_static_libs_order
+if [ $ret -ne 0 ]; then
+ exit $ret
+fi
+
diff --git a/doc/guides/linux_gsg/sys_reqs.rst b/doc/guides/linux_gsg/sys_reqs.rst
index 6ecdc04aa9..b67da05e13 100644
--- a/doc/guides/linux_gsg/sys_reqs.rst
+++ b/doc/guides/linux_gsg/sys_reqs.rst
@@ -60,6 +60,11 @@ Compilation of the DPDK
* Linux kernel headers or sources required to build kernel modules.
+
+**Known Issues:**
+
+* pkg-config v0.27 supplied with RHEL-7 does not process correctly libdpdk.pc Libs.private section.
+
.. note::
Please ensure that the latest patches are applied to third party libraries
--
2.28.0
next prev parent reply other threads:[~2020-11-02 6:46 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-10-29 9:16 [dpdk-dev] [PATCH] " Gregory Etelson
2020-11-01 10:01 ` Thomas Monjalon
2020-11-01 12:06 ` Gregory Etelson
2020-11-02 6:45 ` Gregory Etelson [this message]
2020-11-02 12:11 ` [dpdk-dev] [PATCH v2] " Bruce Richardson
2020-11-02 19:39 ` Gregory Etelson
2020-11-02 19:34 ` [dpdk-dev] [PATCH v3] " Gregory Etelson
2020-11-03 10:09 ` Bruce Richardson
2020-11-04 8:38 ` Gregory Etelson
2020-11-05 12:37 ` [dpdk-dev] [PATCH v4] " Gregory Etelson
2020-11-05 13:17 ` Bruce Richardson
2020-11-13 13:38 ` David Marchand
2020-11-13 15:16 ` Gregory Etelson
2020-11-13 15:32 ` David Marchand
2020-11-17 18:17 ` [dpdk-dev] [PATCH] doc: notify bug in pkg-config v0.27 Gregory Etelson
2020-11-26 15:42 ` [dpdk-dev] [PATCH v2 1/1] doc: add pkg-config requirement for applications Thomas Monjalon
2020-11-26 16:24 ` Bruce Richardson
2020-11-26 16:38 ` Thomas Monjalon
2020-11-26 16:43 ` [dpdk-dev] [PATCH v3 " Thomas Monjalon
2020-11-26 16:46 ` Bruce Richardson
2020-11-27 0:59 ` Thomas Monjalon
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=20201102064548.9291-1-getelson@nvidia.com \
--to=getelson@nvidia.com \
--cc=bluca@debian.org \
--cc=bruce.richardson@intel.com \
--cc=christian.ehrhardt@canonical.com \
--cc=david.marchand@redhat.com \
--cc=dev@dpdk.org \
--cc=ktraynor@redhat.com \
--cc=matan@nvidia.com \
--cc=rasland@nvidia.com \
--cc=thomas@monjalon.net \
/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).