xdp-tools: upgrade 1.2.10 -> 1.6.3

Drop patches 0002 and 0004 as they are no longer needed with 1.6.3.

Rework patches 0001 and 0003 to properly handle CC tool validation
and libxdp symlink installation for cross-compilation.

Set PRODUCTION=1 and pass BPF_CFLAGS with sysroot include paths
and ffile-prefix-map for reproducible cross-compilation builds.

Include ${libdir}/bpf/* in FILES:${PN} as libxdp.so resolves BPF
objects at runtime from that path. Add bash to RDEPENDS for the
test scripts.

Signed-off-by: Rajkumar Patel <patel.rajkumar@oss.qualcomm.com>
Signed-off-by: Khem Raj <khem.raj@oss.qualcomm.com>
This commit is contained in:
Rajkumar Patel
2026-06-13 17:40:23 +05:30
committed by Khem Raj
parent cdd53d4d0d
commit b1f98d1a7a
8 changed files with 128 additions and 189 deletions
@@ -0,0 +1,45 @@
From 2a6d219ec2f5413e38ec502421cce8a2c6d7f054 Mon Sep 17 00:00:00 2001
From: Rajkumar Patel <patel.rajkumar@oss.qualcomm.com>
Date: Tue, 9 Jun 2026 11:22:13 +0530
Subject: [PATCH 1/2] configure: correctly handle CC when validating required
tools
The tool validation loop checks the availability of required
binaries using `command -v`. However, when CC is defined with
additional flags (e.g. "aarch64-linux-gnu-gcc -O2 -pipe"),
the check fails because `command -v` expects only the binary
name.
Extract the actual compiler executable from CC by taking the
first word and include it in the validation list.
This ensures tool detection works correctly in cross-compilation
environments where CC commonly includes compiler flags.
Additionally, quote variable expansions to avoid issues with
word splitting and empty values.
Upstream-Status: Pending
Signed-off-by: Rajkumar Patel <patel.rajkumar@oss.qualcomm.com>
---
configure | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/configure b/configure
index d57b2ae..a234f80 100755
--- a/configure
+++ b/configure
@@ -70,8 +70,10 @@ check_toolchain()
CLANG=$(find_tool clang "$CLANG")
- for TOOL in $PKG_CONFIG $CC $OBJCOPY $CLANG $M4 $READELF; do
- if [ ! $(command -v ${TOOL} 2>/dev/null) ]; then
+ CC_TOOL=$(echo "$CC" | awk '{print $1}')
+
+ for TOOL in $PKG_CONFIG "$CC_TOOL" $OBJCOPY $CLANG $M4 $READELF; do
+ if [ ! $(command -v "${TOOL}" 2>/dev/null) ]; then
echo "*** ERROR: Cannot find tool ${TOOL}" ;
exit 1;
fi;
@@ -0,0 +1,36 @@
From 064ccdaf0d84bea86f9cd17383581c3844a33151 Mon Sep 17 00:00:00 2001
From: Rajkumar Patel <patel.rajkumar@oss.qualcomm.com>
Date: Tue, 9 Jun 2026 11:24:51 +0530
Subject: [PATCH 2/2] lib/libxdp/Makefile: use cp -fRd to preserve symlinks
without metadata
cp -fpR preserves ownership and timestamps from the build host,
which breaks cross-compilation and packaging QA checks.
The `-p` flag is unnecessary for symlink handling. Replace it
with `-d` to explicitly preserve symlinks without carrying over
file metadata.
Switch to cp -fRd to maintain symlink structure while avoiding
host contamination.
Upstream-Status: Pending
Signed-off-by: Rajkumar Patel <patel.rajkumar@oss.qualcomm.com>
---
lib/libxdp/Makefile | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lib/libxdp/Makefile b/lib/libxdp/Makefile
index 7ea7e7e..3c36b70 100644
--- a/lib/libxdp/Makefile
+++ b/lib/libxdp/Makefile
@@ -56,7 +56,7 @@ install: all
$(Q)install -d -m 0755 $(DESTDIR)$(BPF_OBJECT_DIR)
$(Q)install -m 0644 $(LIB_HEADERS) $(DESTDIR)$(HDRDIR)/
$(Q)install -m 0644 $(PC_FILE) $(DESTDIR)$(LIBDIR)/pkgconfig/
- $(Q)cp -fpR $(SHARED_LIBS) $(STATIC_LIBS) $(DESTDIR)$(LIBDIR)
+ $(Q)cp -fdR $(SHARED_LIBS) $(STATIC_LIBS) $(DESTDIR)$(LIBDIR)
$(Q)install -m 0644 $(XDP_OBJS) $(DESTDIR)$(BPF_OBJECT_DIR)
$(if $(MAN_FILES),$(Q)install -m 0755 -d $(DESTDIR)$(MANDIR)/man3)
$(if $(MAN_FILES),$(Q)install -m 0644 $(MAN_FILES) $(DESTDIR)$(MANDIR)/man3)
@@ -1,44 +0,0 @@
From 9c9dce2e5f04de65b7b00321f96fff6071546ea1 Mon Sep 17 00:00:00 2001
From: Naveen Saini <naveen.kumar.saini@intel.com>
Date: Mon, 17 Oct 2022 15:44:16 +0800
Subject: [PATCH] configure: skip toolchain checks
Current logic fetch full command line along with the tool. i.e
gcc -m64 -march=skylake -mtune=generic ...
Which throws ERROR: Cannot find tool -m64
So need to re-write for loop, so it can work in cross-compilation
environment too.
Upstream-Status: Inappropriate
Signed-off-by: Naveen Saini <naveen.kumar.saini@intel.com>
---
configure | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/configure b/configure
index b4e824f..10618fc 100755
--- a/configure
+++ b/configure
@@ -69,12 +69,12 @@ check_toolchain()
CLANG=$(find_tool clang "$CLANG")
LLC=$(find_tool llc "$LLC")
- for TOOL in $PKG_CONFIG $CC $LD $OBJCOPY $CLANG $LLC $M4; do
- if [ ! $(command -v ${TOOL} 2>/dev/null) ]; then
- echo "*** ERROR: Cannot find tool ${TOOL}" ;
- exit 1;
- fi;
- done
+ #for TOOL in $PKG_CONFIG $CC $LD $OBJCOPY $CLANG $LLC $M4; do
+ # if [ ! $(command -v ${TOOL} 2>/dev/null) ]; then
+ # echo "*** ERROR: Cannot find tool ${TOOL}" ;
+ # exit 1;
+ # fi;
+ #done
clang_version=$($CLANG --version | grep -Po '(?<=clang version )[[:digit:]]+')
if [ "$?" -ne "0" ]; then
@@ -1,44 +0,0 @@
From 2840cf0b89497f545fae2eed7ece3f3c5fc558e3 Mon Sep 17 00:00:00 2001
From: Naveen Saini <naveen.kumar.saini@intel.com>
Date: Mon, 17 Oct 2022 15:50:34 +0800
Subject: [PATCH 2/4] Makefile: It does not detect libbpf header from sysroot
So adding sysroot headers path.
Upstream-Status: OE-Specific
Signed-off-by: Naveen Saini <naveen.kumar.saini@intel.com>
---
lib/common.mk | 2 +-
lib/libxdp/Makefile | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/lib/common.mk b/lib/common.mk
index 56c0406..ab0bad8 100644
--- a/lib/common.mk
+++ b/lib/common.mk
@@ -55,7 +55,7 @@ LIBXDP_SOURCES := $(wildcard $(LIBXDP_DIR)/*.[ch] $(LIBXDP_DIR)/*.in)
KERN_USER_H ?= $(wildcard common_kern_user.h)
CFLAGS += -I$(HEADER_DIR) -I$(LIB_DIR)/util $(ARCH_INCLUDES)
-BPF_CFLAGS += -I$(HEADER_DIR) $(ARCH_INCLUDES)
+BPF_CFLAGS += -I$(HEADER_DIR) $(ARCH_INCLUDES) -I${STAGING_INCDIR}/
BPF_HEADERS := $(wildcard $(HEADER_DIR)/bpf/*.h) $(wildcard $(HEADER_DIR)/xdp/*.h)
diff --git a/lib/libxdp/Makefile b/lib/libxdp/Makefile
index 358b751..8f459d8 100644
--- a/lib/libxdp/Makefile
+++ b/lib/libxdp/Makefile
@@ -30,7 +30,7 @@ PC_FILE := $(OBJDIR)/libxdp.pc
TEMPLATED_SOURCES := xdp-dispatcher.c
CFLAGS += -I$(HEADER_DIR)
-BPF_CFLAGS += -I$(HEADER_DIR)
+BPF_CFLAGS += -I$(HEADER_DIR) -I${STAGING_INCDIR}/
ifndef BUILD_STATIC_ONLY
--
2.25.1
@@ -1,31 +0,0 @@
From 157546fbc4f18751c52b3c8788879c05cf253331 Mon Sep 17 00:00:00 2001
From: Naveen Saini <naveen.kumar.saini@intel.com>
Date: Mon, 17 Oct 2022 16:02:46 +0800
Subject: [PATCH 3/4] Makefile: fix KeyError failure
Error:
Exception: KeyError: 'getpwuid(): uid not found: 11857215'
Upstream-Status: Inappropriate
Signed-off-by: Naveen Saini <naveen.kumar.saini@intel.com>
---
lib/libxdp/Makefile | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lib/libxdp/Makefile b/lib/libxdp/Makefile
index 8f459d8..9a340a3 100644
--- a/lib/libxdp/Makefile
+++ b/lib/libxdp/Makefile
@@ -55,7 +55,7 @@ install: all
$(Q)install -d -m 0755 $(DESTDIR)$(BPF_OBJECT_DIR)
$(Q)install -m 0644 $(LIB_HEADERS) $(DESTDIR)$(HDRDIR)/
$(Q)install -m 0644 $(PC_FILE) $(DESTDIR)$(LIBDIR)/pkgconfig/
- $(Q)cp -fpR $(SHARED_LIBS) $(STATIC_LIBS) $(DESTDIR)$(LIBDIR)
+ $(Q)cp -fpR --no-preserve=ownership $(SHARED_LIBS) $(STATIC_LIBS) $(DESTDIR)$(LIBDIR)
$(Q)install -m 0755 $(XDP_OBJS) $(DESTDIR)$(BPF_OBJECT_DIR)
$(if $(MAN_FILES),$(Q)install -m 0755 -d $(DESTDIR)$(MANDIR)/man3)
$(if $(MAN_FILES),$(Q)install -m 0644 $(MAN_FILES) $(DESTDIR)$(MANDIR)/man3)
--
2.25.1
@@ -1,34 +0,0 @@
From 46b3ff797135574aa0ee42f633a281d44f48da95 Mon Sep 17 00:00:00 2001
From: Naveen Saini <naveen.kumar.saini@intel.com>
Date: Mon, 17 Oct 2022 16:05:15 +0800
Subject: [PATCH 4/4] Makefile: fix libxdp.pc error
Error:
do_populate_sysroot: QA Issue: libxdp.pc failed sanity test (tmpdir) in
path ... xdp-tools/1.2.8-r0/sysroot-destdir/usr/lib/pkgconfig [pkgconfig]
Upstream-Status: Inappropriate
Signed-off-by: Naveen Saini <naveen.kumar.saini@intel.com>
---
lib/libxdp/Makefile | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/lib/libxdp/Makefile b/lib/libxdp/Makefile
index 9a340a3..bc39177 100644
--- a/lib/libxdp/Makefile
+++ b/lib/libxdp/Makefile
@@ -76,8 +76,8 @@ $(OBJDIR)/libxdp.so.$(LIBXDP_VERSION): $(SHARED_OBJS)
$^ $(LDFLAGS) $(LDLIBS) -o $@
$(OBJDIR)/libxdp.pc:
- $(Q)sed -e "s|@PREFIX@|$(PREFIX)|" \
- -e "s|@LIBDIR@|$(LIBDIR)|" \
+ $(Q)sed -e "s|@PREFIX@|$(prefix)|" \
+ -e "s|@LIBDIR@|$(libdir)|" \
-e "s|@VERSION@|$(TOOLS_VERSION)|" \
< libxdp.pc.template > $@
--
2.25.1
@@ -1,36 +0,0 @@
SUMMARY = "Utilities and example programs for use with XDP"
HOMEPAGE = "https://github.com/xdp-project/xdp-tools"
LICENSE = "GPL-2.0-or-later & LGPL-2.1-or-later & BSD-2-Clause"
LIC_FILES_CHKSUM = "file://LICENSE;md5=9ee53f8d06bbdb4c11b1557ecc4f8cd5 \
file://LICENSES/GPL-2.0;md5=994331978b428511800bfbd17eea3001 \
file://LICENSES/LGPL-2.1;md5=b370887980db5dd40659b50909238dbd \
file://LICENSES/BSD-2-Clause;md5=5d6306d1b08f8df623178dfd81880927"
DEPENDS += " libbpf clang-native zlib elfutils libpcap"
SRC_URI = "git://github.com/xdp-project/xdp-tools.git;branch=v1.2;protocol=https \
file://0001-configure-skip-toolchain-checks.patch \
file://0002-Makefile-It-does-not-detect-libbpf-header-from-sysro.patch \
file://0003-Makefile-fix-KeyError-failure.patch \
file://0004-Makefile-fix-libxdp.pc-error.patch \
"
SRCREV = "57a139f9bf6ef644f9c1deb4f7df4bb4c76d6179"
inherit pkgconfig
EXTRA_OEMAKE += "PREFIX=${D}${prefix} LIBDIR=${D}${libdir} BUILD_STATIC_ONLY=1 PRODUCTION=1"
CFLAGS += "-fPIC"
export STAGING_INCDIR
do_install () {
oe_runmake install
# Remove object files *.o
rm -rf ${D}/${libdir}/bpf
}
RDEPENDS:${PN} += "bash"
@@ -0,0 +1,47 @@
SUMMARY = "Utilities and library for managing XDP/eBPF programs"
DESCRIPTION = "xdp-tools provides libxdp and command-line utilities for working \
with XDP eBPF programs in Linux, including tools for loading programs, packet \
processing, monitoring, traffic generation, and benchmarking."
HOMEPAGE = "https://github.com/xdp-project/xdp-tools"
LICENSE = "GPL-2.0-only & GPL-2.0-or-later & LGPL-2.1-only & BSD-2-Clause"
LIC_FILES_CHKSUM = " \
file://LICENSE;md5=9ee53f8d06bbdb4c11b1557ecc4f8cd5 \
file://LICENSES/GPL-2.0;md5=994331978b428511800bfbd17eea3001 \
file://LICENSES/LGPL-2.1;md5=b370887980db5dd40659b50909238dbd \
file://LICENSES/BSD-2-Clause;md5=5d6306d1b08f8df623178dfd81880927 \
"
SRC_URI = " \
git://github.com/xdp-project/xdp-tools.git;tag=v${PV};nobranch=1;protocol=https \
file://0001-configure-correctly-handle-CC-when-validating-requir.patch \
file://0002-lib-libxdp-Makefile-use-cp-fRd-to-preserve-symlinks-.patch \
"
SRCREV = "8fbad9f0af621a22aa87ff2520b3735915b1f0fd"
DEPENDS += " \
libbpf \
clang-native \
zlib \
elfutils \
libpcap \
"
inherit pkgconfig
EXTRA_OEMAKE += " \
PREFIX=${prefix} \
LIBDIR=${libdir} \
PRODUCTION=1 \
BPF_CFLAGS='-D__${TARGET_ARCH}__ -I${S}/headers -I${STAGING_INCDIR} -ffile-prefix-map=${S}=${TARGET_DBGSRC_DIR} -ffile-prefix-map=${STAGING_DIR_HOST}=' \
"
do_install () {
oe_runmake DESTDIR=${D} install
}
# libxdp.so loads BPF objects at runtime from ${libdir}/bpf, not embedded in the .so.
FILES:${PN} += "${libdir}/bpf ${libdir}/bpf/*"
# Test scripts under ${datadir}/xdp-tools require bash.
RDEPENDS:${PN} += "bash"