slirp: Convert Makefile bits to meson bits
SLIRP uses Meson so it could become a subproject in the future,
but our choice of configure options is not yet supported in Meson
(https://github.com/mesonbuild/meson/pull/7740).
For now, build the library via the main meson.build just like for
capstone.
This improves the current state of affairs in that we will re-link
the qemu executables against a changed libslirp.a, which we wouldn't
do before-hand.
Tested-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
diff --git a/meson.build b/meson.build
index a02c743..165716d 100644
--- a/meson.build
+++ b/meson.build
@@ -300,11 +300,6 @@
xkbcommon = dependency('xkbcommon', required: get_option('xkbcommon'),
method: 'pkg-config', static: enable_static)
endif
-slirp = not_found
-if config_host.has_key('CONFIG_SLIRP')
- slirp = declare_dependency(compile_args: config_host['SLIRP_CFLAGS'].split(),
- link_args: config_host['SLIRP_LIBS'].split())
-endif
vde = not_found
if config_host.has_key('CONFIG_VDE')
vde = declare_dependency(link_args: config_host['VDE_LIBS'].split())
@@ -978,7 +973,88 @@
capstone = declare_dependency(link_with: libcapstone,
include_directories: 'capstone/include/capstone')
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 = dependency('slirp', static: enable_static,
+ method: 'pkg-config',
+ required: slirp_opt == 'system' or
+ slirp_opt == 'enabled' and not have_internal)
+ 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')
+ 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',
+ 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
+
config_host_data.set('CONFIG_CAPSTONE', capstone.found())
+config_host_data.set('CONFIG_SLIRP', slirp.found())
genh += configure_file(output: 'config-host.h', configuration: config_host_data)
@@ -1656,8 +1732,8 @@
summary_info += {'sphinx-build': config_host['SPHINX_BUILD']}
summary_info += {'genisoimage': config_host['GENISOIMAGE']}
# TODO: add back version
-summary_info += {'slirp support': config_host.has_key('CONFIG_SLIRP')}
-if config_host.has_key('CONFIG_SLIRP')
+summary_info += {'slirp support': slirp_opt == 'disabled' ? false : slirp_opt}
+if slirp_opt != 'disabled'
summary_info += {'smbd': config_host['CONFIG_SMBD_COMMAND']}
endif
summary_info += {'module support': config_host.has_key('CONFIG_MODULES')}