mirror of
https://github.com/mborgerson/xemu.git
synced 2025-12-01 16:10:01 +00:00
Remove the slirp submodule (i.e. compile only with an external libslirp)
Since QEMU 7.1 we don't support Ubuntu 18.04 anymore, so the last big
important Linux distro that did not have a pre-packaged libslirp has
been dismissed. All other major distros seem to have a libslirp package
in their distribution already - according to repology.org:
Fedora 35: 4.6.1
CentOS 8 (RHEL-8): 4.4.0
Debian 11: 4.4.0
OpenSUSE Leap 15.3: 4.3.1
Ubuntu LTS 20.04: 4.1.0
FreeBSD Ports: 4.7.0
NetBSD pkgsrc: 4.7.0
Homebrew: 4.7.0
MSYS2 mingw: 4.7.0
The only one that was still missing a libslirp package is OpenBSD - but
the next version (OpenBSD 7.2 which will be shipped in October) is going
to include a libslirp package. Since QEMU 7.2 will be published after
OpenBSD 7.2, we should be fine there, too.
So there is no real urgent need for keeping the slirp submodule in
the QEMU tree anymore. Thus let's drop the slirp submodule now and
rely on the libslirp packages from the distributions instead.
Message-Id: <20220824151122.704946-7-thuth@redhat.com>
Acked-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
Signed-off-by: Thomas Huth <thuth@redhat.com>
This commit is contained in:
121
meson.build
121
meson.build
@ -643,6 +643,26 @@ else
|
||||
method: 'pkg-config', kwargs: static_kwargs)
|
||||
endif
|
||||
|
||||
slirp = not_found
|
||||
if not get_option('slirp').auto() or have_system
|
||||
slirp = dependency('slirp', required: get_option('slirp'),
|
||||
method: 'pkg-config', kwargs: static_kwargs)
|
||||
# slirp < 4.7 is incompatible with CFI support in QEMU. This is because
|
||||
# it passes function pointers within libslirp as callbacks for timers.
|
||||
# When using a system-wide shared libslirp, the type information for the
|
||||
# callback is missing and the timer call produces a false positive with CFI.
|
||||
# Do not use the "version" keyword argument to produce a better error.
|
||||
# with control-flow integrity.
|
||||
if get_option('cfi') and slirp.found() and slirp.version().version_compare('<4.7')
|
||||
if get_option('slirp').enabled()
|
||||
error('Control-Flow Integrity requires libslirp 4.7.')
|
||||
else
|
||||
warning('Cannot use libslirp since Control-Flow Integrity requires libslirp >= 4.7.')
|
||||
slirp = not_found
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
||||
vde = not_found
|
||||
if not get_option('vde').auto() or have_system or have_tools
|
||||
vde = cc.find_library('vdeplug', has_headers: ['libvdeplug.h'],
|
||||
@ -2617,103 +2637,6 @@ if not get_option('capstone').auto() or have_system or have_user
|
||||
endif
|
||||
endif
|
||||
|
||||
slirp = not_found
|
||||
slirp_opt = 'disabled'
|
||||
if have_system
|
||||
slirp_opt = get_option('slirp')
|
||||
if slirp_opt in ['enabled', 'auto', 'system']
|
||||
have_internal = fs.exists(meson.current_source_dir() / 'slirp/meson.build')
|
||||
slirp_dep_required = (slirp_opt == 'system' or
|
||||
slirp_opt == 'enabled' and not have_internal)
|
||||
slirp = dependency('slirp', kwargs: static_kwargs,
|
||||
method: 'pkg-config', version: '>=4.1.0',
|
||||
required: slirp_dep_required)
|
||||
# slirp <4.7 is incompatible with CFI support in QEMU. This is because
|
||||
# it passes function pointers within libslirp as callbacks for timers.
|
||||
# When using a system-wide shared libslirp, the type information for the
|
||||
# callback is missing and the timer call produces a false positive with CFI.
|
||||
# Do not use the "version" keyword argument to produce a better error.
|
||||
# with control-flow integrity.
|
||||
if get_option('cfi') and slirp.found() and slirp.version().version_compare('<4.7')
|
||||
if slirp_dep_required
|
||||
error('Control-Flow Integrity requires libslirp 4.7.')
|
||||
else
|
||||
warning('Control-Flow Integrity requires libslirp 4.7, not using system-wide libslirp.')
|
||||
slirp = not_found
|
||||
endif
|
||||
endif
|
||||
if slirp.found()
|
||||
slirp_opt = 'system'
|
||||
elif have_internal
|
||||
slirp_opt = 'internal'
|
||||
else
|
||||
slirp_opt = 'disabled'
|
||||
endif
|
||||
endif
|
||||
if slirp_opt == 'internal'
|
||||
slirp_deps = []
|
||||
if targetos == 'windows'
|
||||
slirp_deps = cc.find_library('iphlpapi')
|
||||
elif targetos == 'darwin'
|
||||
slirp_deps = cc.find_library('resolv')
|
||||
endif
|
||||
slirp_conf = configuration_data()
|
||||
slirp_conf.set('SLIRP_MAJOR_VERSION', meson.project_version().split('.')[0])
|
||||
slirp_conf.set('SLIRP_MINOR_VERSION', meson.project_version().split('.')[1])
|
||||
slirp_conf.set('SLIRP_MICRO_VERSION', meson.project_version().split('.')[2])
|
||||
slirp_conf.set_quoted('SLIRP_VERSION_STRING', meson.project_version())
|
||||
slirp_cargs = ['-DG_LOG_DOMAIN="Slirp"']
|
||||
slirp_files = [
|
||||
'slirp/src/arp_table.c',
|
||||
'slirp/src/bootp.c',
|
||||
'slirp/src/cksum.c',
|
||||
'slirp/src/dhcpv6.c',
|
||||
'slirp/src/dnssearch.c',
|
||||
'slirp/src/if.c',
|
||||
'slirp/src/ip6_icmp.c',
|
||||
'slirp/src/ip6_input.c',
|
||||
'slirp/src/ip6_output.c',
|
||||
'slirp/src/ip_icmp.c',
|
||||
'slirp/src/ip_input.c',
|
||||
'slirp/src/ip_output.c',
|
||||
'slirp/src/mbuf.c',
|
||||
'slirp/src/misc.c',
|
||||
'slirp/src/ncsi.c',
|
||||
'slirp/src/ndp_table.c',
|
||||
'slirp/src/sbuf.c',
|
||||
'slirp/src/slirp.c',
|
||||
'slirp/src/socket.c',
|
||||
'slirp/src/state.c',
|
||||
'slirp/src/stream.c',
|
||||
'slirp/src/tcp_input.c',
|
||||
'slirp/src/tcp_output.c',
|
||||
'slirp/src/tcp_subr.c',
|
||||
'slirp/src/tcp_timer.c',
|
||||
'slirp/src/tftp.c',
|
||||
'slirp/src/udp.c',
|
||||
'slirp/src/udp6.c',
|
||||
'slirp/src/util.c',
|
||||
'slirp/src/version.c',
|
||||
'slirp/src/vmstate.c',
|
||||
]
|
||||
|
||||
configure_file(
|
||||
input : 'slirp/src/libslirp-version.h.in',
|
||||
output : 'libslirp-version.h',
|
||||
configuration: slirp_conf)
|
||||
|
||||
slirp_inc = include_directories('slirp', 'slirp/src')
|
||||
libslirp = static_library('slirp',
|
||||
build_by_default: false,
|
||||
sources: slirp_files,
|
||||
c_args: slirp_cargs,
|
||||
include_directories: slirp_inc)
|
||||
slirp = declare_dependency(link_with: libslirp,
|
||||
dependencies: slirp_deps,
|
||||
include_directories: slirp_inc)
|
||||
endif
|
||||
endif
|
||||
|
||||
libvfio_user_dep = not_found
|
||||
if have_system and vfio_user_server_allowed
|
||||
have_internal = fs.exists(meson.current_source_dir() / 'subprojects/libvfio-user/meson.build')
|
||||
@ -3718,7 +3641,7 @@ summary_info += {'genisoimage': config_host['GENISOIMAGE']}
|
||||
if targetos == 'windows' and have_ga
|
||||
summary_info += {'wixl': wixl}
|
||||
endif
|
||||
if slirp_opt != 'disabled' and have_system
|
||||
if slirp.found() and have_system
|
||||
summary_info += {'smbd': have_slirp_smbd ? smbd_path : false}
|
||||
endif
|
||||
summary(summary_info, bool_yn: true, section: 'Host binaries')
|
||||
@ -3912,7 +3835,7 @@ summary_info += {'SDL image support': sdl_image}
|
||||
summary_info += {'GTK support': gtk}
|
||||
summary_info += {'pixman': pixman}
|
||||
summary_info += {'VTE support': vte}
|
||||
summary_info += {'slirp support': slirp_opt == 'internal' ? slirp_opt : slirp}
|
||||
summary_info += {'slirp support': slirp}
|
||||
summary_info += {'libtasn1': tasn1}
|
||||
summary_info += {'PAM': pam}
|
||||
summary_info += {'iconv support': iconv}
|
||||
|
||||
Reference in New Issue
Block a user