qemu/net/meson.build
Daniel P. Berrangé 1f37280b37 net: fix build when libbpf is disabled, but libxdp is enabled
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: cb039ef3d9
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
Signed-off-by: Jason Wang <jasowang@redhat.com>
2024-10-28 14:37:25 +08:00

71 lines
1.6 KiB
Meson

system_ss.add(files(
'announce.c',
'checksum.c',
'dump.c',
'eth.c',
'filter-buffer.c',
'filter-mirror.c',
'filter.c',
'hub.c',
'net-hmp-cmds.c',
'net.c',
'queue.c',
'socket.c',
'stream.c',
'dgram.c',
'util.c',
))
if get_option('replication').allowed() or \
get_option('colo_proxy').allowed()
system_ss.add(files('colo-compare.c'))
system_ss.add(files('colo.c'))
else
system_ss.add(files('colo-stubs.c'))
endif
if get_option('colo_proxy').allowed()
system_ss.add(files('filter-rewriter.c'))
endif
system_ss.add(when: 'CONFIG_TCG', if_true: files('filter-replay.c'))
if have_l2tpv3
system_ss.add(files('l2tpv3.c'))
endif
system_ss.add(when: slirp, if_true: files('slirp.c'))
system_ss.add(when: vde, if_true: files('vde.c'))
if have_netmap
system_ss.add(files('netmap.c'))
endif
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'))
endif
if host_os == 'windows'
system_ss.add(files('tap-win32.c'))
elif host_os == 'linux'
system_ss.add(files('tap.c', 'tap-linux.c'))
elif host_os in bsd_oses
system_ss.add(files('tap.c', 'tap-bsd.c'))
elif host_os == 'sunos'
system_ss.add(files('tap.c', 'tap-solaris.c'))
else
system_ss.add(files('tap.c', 'tap-stub.c'))
endif
if have_vhost_net_vdpa
system_ss.add(when: 'CONFIG_VIRTIO_NET', if_true: files('vhost-vdpa.c'), if_false: files('vhost-vdpa-stub.c'))
endif
vmnet_files = files(
'vmnet-common.m',
'vmnet-bridged.m',
'vmnet-host.c',
'vmnet-shared.c'
)
system_ss.add(when: vmnet, if_true: vmnet_files)
subdir('can')