77 lines
2.6 KiB
Diff
77 lines
2.6 KiB
Diff
|
|
From 17835e803d0cfa308cd00f070c7e21b27f3d036e Mon Sep 17 00:00:00 2001
|
||
|
|
From: gubin <gubin_yewu@cmss.chinamobile.com>
|
||
|
|
Date: Sat, 22 Mar 2025 15:38:09 +0800
|
||
|
|
Subject: [PATCH] net: fix build when libbpf is disabled, but libxdp is enabled
|
||
|
|
MIME-Version: 1.0
|
||
|
|
Content-Type: text/plain; charset=UTF-8
|
||
|
|
Content-Transfer-Encoding: 8bit
|
||
|
|
|
||
|
|
cherry-pick from 1f37280b37dbf85f36748f359a9f8802c8fe7ccd
|
||
|
|
|
||
|
|
The net/af-xdp.c code is enabled when the libxdp library is present,
|
||
|
|
however, it also has direct API calls to bpf_xdp_query_id &
|
||
|
|
bpf_xdp_detach which are provided by the libbpf library.
|
||
|
|
|
||
|
|
As a result if building with --disable-libbpf, but libxdp gets
|
||
|
|
auto-detected, we'll fail to link QEMU
|
||
|
|
|
||
|
|
/usr/bin/ld: libcommon.a.p/net_af-xdp.c.o: undefined reference to symbol 'bpf_xdp_query_id@@LIBBPF_0.7.0'
|
||
|
|
|
||
|
|
There are two bugs here
|
||
|
|
|
||
|
|
* Since we have direct libbpf API calls, when building
|
||
|
|
net/af-xdp.c, we must tell meson that libbpf is a
|
||
|
|
dependancy, so that we directly link to it, rather
|
||
|
|
than relying on indirect linkage.
|
||
|
|
|
||
|
|
* When must skip probing for libxdp at all, when libbpf
|
||
|
|
is not found, raising an error if --enable-libxdp was
|
||
|
|
given explicitly.
|
||
|
|
|
||
|
|
Fixes: cb039ef3d9e3112da01e1ecd9b136ac9809ef733
|
||
|
|
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
|
||
|
|
Signed-off-by: Jason Wang <jasowang@redhat.com>
|
||
|
|
Signed-off-by: gubin <gubin_yewu@cmss.chinamobile.com>
|
||
|
|
---
|
||
|
|
meson.build | 10 ++++++++--
|
||
|
|
net/meson.build | 2 +-
|
||
|
|
2 files changed, 9 insertions(+), 3 deletions(-)
|
||
|
|
|
||
|
|
diff --git a/meson.build b/meson.build
|
||
|
|
index 4078f2aced..aea6a33ca3 100644
|
||
|
|
--- a/meson.build
|
||
|
|
+++ b/meson.build
|
||
|
|
@@ -1972,8 +1972,14 @@ endif
|
||
|
|
# libxdp
|
||
|
|
libxdp = not_found
|
||
|
|
if not get_option('af_xdp').auto() or have_system
|
||
|
|
- libxdp = dependency('libxdp', required: get_option('af_xdp'),
|
||
|
|
- version: '>=1.4.0', method: 'pkg-config')
|
||
|
|
+ if libbpf.found()
|
||
|
|
+ libxdp = dependency('libxdp', required: get_option('af_xdp'),
|
||
|
|
+ version: '>=1.4.0', method: 'pkg-config')
|
||
|
|
+ else
|
||
|
|
+ if get_option('af_xdp').enabled()
|
||
|
|
+ error('libxdp requested, but libbpf is not available')
|
||
|
|
+ endif
|
||
|
|
+ endif
|
||
|
|
endif
|
||
|
|
|
||
|
|
# libdw
|
||
|
|
diff --git a/net/meson.build b/net/meson.build
|
||
|
|
index ce99bd4447..7264479242 100644
|
||
|
|
--- a/net/meson.build
|
||
|
|
+++ b/net/meson.build
|
||
|
|
@@ -37,7 +37,7 @@ if have_netmap
|
||
|
|
system_ss.add(files('netmap.c'))
|
||
|
|
endif
|
||
|
|
|
||
|
|
-system_ss.add(when: libxdp, if_true: files('af-xdp.c'))
|
||
|
|
+system_ss.add(when: [libxdp, libbpf], if_true: files('af-xdp.c'))
|
||
|
|
|
||
|
|
if have_vhost_net_user
|
||
|
|
system_ss.add(when: 'CONFIG_VIRTIO_NET', if_true: files('vhost-user.c'), if_false: files('vhost-user-stub.c'))
|
||
|
|
--
|
||
|
|
2.41.0.windows.1
|
||
|
|
|