[PATCH][23.05] xdp-tools: build with target toolchain headers
Oliver Kästner
git at oliver-kaestner.de
Sat Oct 5 12:55:24 PDT 2024
Fix build to lookup headers from the target toolchain instead of the
host's. This removes the need for workarounds to make asm/types.h
available in the host os, e.g. by installing gcc-multilib.
For this, include two cherry-picked commits from upstream.
Add a workaround required for the gcc 12.3.0 toolchain to prevent a
macro redefinition error of `offsetof`.
Also fix building for MIPSEL by defining `__MIPSEL__` like Debian
does.
Closes: https://github.com/openwrt/openwrt/issues/12239
Signed-off-by: Oliver Kästner <git at oliver-kaestner.de>
---
package/network/utils/xdp-tools/Makefile | 3 +
.../011-libxdp-bpf-cflags-arch-includes.patch | 24 ++++++++
.../012-configure-fix-arch-includes.patch | 56 +++++++++++++++++++
...030-xdp-filter-offsetof-redefinition.patch | 23 ++++++++
4 files changed, 106 insertions(+)
create mode 100644 package/network/utils/xdp-tools/patches/011-libxdp-bpf-cflags-arch-includes.patch
create mode 100644 package/network/utils/xdp-tools/patches/012-configure-fix-arch-includes.patch
create mode 100644 package/network/utils/xdp-tools/patches/030-xdp-filter-offsetof-redefinition.patch
diff --git a/package/network/utils/xdp-tools/Makefile b/package/network/utils/xdp-tools/Makefile
index 3cc7980cf6..9f9a20b10b 100644
--- a/package/network/utils/xdp-tools/Makefile
+++ b/package/network/utils/xdp-tools/Makefile
@@ -95,6 +95,9 @@ MAKE_VARS += \
define Build/Configure
$(call Build/Configure/Default)
echo "BPF_CFLAGS += -I$(BPF_HEADERS_DIR)/tools/lib" >> $(PKG_BUILD_DIR)/config.mk
+ifeq ($(ARCH),mipsel)
+ echo "BPF_CFLAGS += -D__MIPSEL__" >> $(PKG_BUILD_DIR)/config.mk
+endif
endef
define Build/InstallDev
diff --git a/package/network/utils/xdp-tools/patches/011-libxdp-bpf-cflags-arch-includes.patch b/package/network/utils/xdp-tools/patches/011-libxdp-bpf-cflags-arch-includes.patch
new file mode 100644
index 0000000000..234bd0a414
--- /dev/null
+++ b/package/network/utils/xdp-tools/patches/011-libxdp-bpf-cflags-arch-includes.patch
@@ -0,0 +1,24 @@
+From 11356006dff4f902de0a493455ec94461bdd8dbc Mon Sep 17 00:00:00 2001
+From: ami-GS <1991.daiki at gmail.com>
+Date: Fri, 22 Mar 2024 16:58:42 -0700
+Subject: [PATCH] Fix include path of libxdp for each arch
+
+Signed-off-by: ami-GS <1991.daiki at gmail.com>
+---
+ lib/libxdp/Makefile | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/lib/libxdp/Makefile b/lib/libxdp/Makefile
+index cf0afa49..403d5a6e 100644
+--- a/lib/libxdp/Makefile
++++ b/lib/libxdp/Makefile
+@@ -28,7 +28,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) $(ARCH_INCLUDES)
+
+
+ ifndef BUILD_STATIC_ONLY
+
diff --git a/package/network/utils/xdp-tools/patches/012-configure-fix-arch-includes.patch b/package/network/utils/xdp-tools/patches/012-configure-fix-arch-includes.patch
new file mode 100644
index 0000000000..61b2d2066a
--- /dev/null
+++ b/package/network/utils/xdp-tools/patches/012-configure-fix-arch-includes.patch
@@ -0,0 +1,56 @@
+From 6ce30637951949212344f1968c3fd5e5adf1ffc3 Mon Sep 17 00:00:00 2001
+From: Sachin Tiptur <coolsachints at gmail.com>
+Date: Wed, 13 Sep 2023 12:47:31 +0000
+Subject: [PATCH] Fix build on arm64
+
+Fix the arm64 build by adding arch specific header files to
+CFLAGS and BPF_CFLAGS. Also, use `gcc -print-multiarch` to get
+arch name instead of `uname -m` which is not the right way.
+
+Signed-off-by: Sachin Tiptur <coolsachints at gmail.com>
+---
+ configure | 7 +++++--
+ lib/defines.mk | 4 ++--
+ 2 files changed, 7 insertions(+), 4 deletions(-)
+
+--- a/configure
++++ b/configure
+@@ -65,6 +65,7 @@ check_toolchain()
+ : ${M4=m4}
+ : ${EMACS=emacs}
+ : ${ARCH_INCLUDES=}
++ : ${ARCH_NAME=}
+
+ CLANG=$(find_tool clang "$CLANG")
+ LLC=$(find_tool llc "$LLC")
+@@ -76,6 +77,8 @@ check_toolchain()
+ fi;
+ done
+
++ ARCH_NAME=$($CC -print-multiarch 2>/dev/null)
++
+ clang_version=$($CLANG --version | grep -Po '(?<=clang version )[[:digit:]]+')
+ if [ "$?" -ne "0" ]; then
+ echo "*** ERROR: Couldn't execute '$CLANG --version'"
+@@ -109,7 +112,7 @@ check_toolchain()
+ if [ -z "$ARCH_INCLUDES" ]; then
+ for dir in $(echo | $CC -Wp,-v -E - 2>&1 | grep '^ '); do
+ local idir
+- idir="${dir}/$(uname -m)-linux-gnu/"
++ idir="${dir}/${ARCH_NAME}/"
+ [ -d "$idir" ] && ARCH_INCLUDES="-I${idir} $ARCH_INCLUDES"
+ done
+ fi
+--- a/lib/defines.mk
++++ b/lib/defines.mk
+@@ -40,8 +40,8 @@ endif
+
+ DEFINES += -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64
+
+-CFLAGS += -std=gnu11 -Wextra -Werror $(DEFINES)
+-BPF_CFLAGS += $(DEFINES) $(filter -ffile-prefix-map=%,$(CFLAGS))
++CFLAGS += -std=gnu11 -Wextra -Werror $(DEFINES) $(ARCH_INCLUDES)
++BPF_CFLAGS += $(DEFINES) $(filter -ffile-prefix-map=%,$(CFLAGS)) $(ARCH_INCLUDES)
+
+ CONFIGMK := $(LIB_DIR)/../config.mk
+ LIBMK := Makefile $(CONFIGMK) $(LIB_DIR)/defines.mk $(LIB_DIR)/common.mk $(LIB_DIR)/../version.mk
diff --git a/package/network/utils/xdp-tools/patches/030-xdp-filter-offsetof-redefinition.patch b/package/network/utils/xdp-tools/patches/030-xdp-filter-offsetof-redefinition.patch
new file mode 100644
index 0000000000..4546c1538c
--- /dev/null
+++ b/package/network/utils/xdp-tools/patches/030-xdp-filter-offsetof-redefinition.patch
@@ -0,0 +1,23 @@
+From 70422c175abc240b0050f39fe57fab5277d3612a Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Oliver=20K=C3=A4stner?= <git at oliver-kaestner.de>
+Date: Sun, 29 Sep 2024 21:02:03 +0200
+Subject: [PATCH] xdp-filter: fix offsetof redefinition error with gcc 12.3.0
+
+This is fixed in gcc 13.2.0
+---
+ xdp-filter/xdpfilt_prog.h | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+--- a/xdp-filter/xdpfilt_prog.h
++++ b/xdp-filter/xdpfilt_prog.h
+@@ -18,6 +18,10 @@
+
+ /* Defines xdp_stats_map */
+ #include "xdp/xdp_stats_kern.h"
++/* offsetof is already defined in bpf/bpf_helpers.h,
++ * and including stddef.h of gcc 12.3.0 would fail.
++ */
++#undef offsetof
+ #include "xdp/parsing_helpers.h"
+
+ #ifdef FILT_MODE_DENY
--
2.43.0
More information about the openwrt-devel
mailing list