When not explicitly select a sysemu target or the QEMU tools and
building virtiofsd, libqemuutil.a has missing symbols:
/usr/bin/ld: tools/virtiofsd/virtiofsd.p/fuse_virtio.c.o: in function `virtio_send_msg':
tools/virtiofsd/fuse_virtio.c:236: undefined reference to `iov_size'
/usr/bin/ld: libqemuutil.a(util_iov.c.o): in function `iov_hexdump':
util/iov.c:240: undefined reference to `qemu_hexdump'
/usr/bin/ld: libqemuutil.a(util_iov.c.o): in function `qemu_iovec_is_zero':
util/iov.c:494: undefined reference to `buffer_is_zero'
Fix by linking bufferiszero/hexdump/iov objects when building
virtiofsd (regardless of sysemu / tools).
Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
---
util/meson.build | 10 +++++++---
1 file changed, 7 insertions(+), 3 deletions(-)
diff --git a/util/meson.build b/util/meson.build
index 510765cde46..c2eda2d1374 100644
--- a/util/meson.build
+++ b/util/meson.build
@@ -59,12 +59,10 @@
util_ss.add(files('aiocb.c', 'async.c', 'aio-wait.c'))
util_ss.add(files('base64.c'))
util_ss.add(files('buffer.c'))
- util_ss.add(files('bufferiszero.c'))
util_ss.add(files('coroutine-@0@.c'.format(config_host['CONFIG_COROUTINE_BACKEND'])))
util_ss.add(files('hbitmap.c'))
- util_ss.add(files('hexdump.c'))
util_ss.add(files('iova-tree.c'))
- util_ss.add(files('iov.c', 'qemu-sockets.c', 'uri.c'))
+ util_ss.add(files('qemu-sockets.c', 'uri.c'))
util_ss.add(files('lockcnt.c'))
util_ss.add(files('main-loop.c'))
util_ss.add(files('nvdimm-utils.c'))
@@ -83,3 +81,9 @@
if_false: files('filemonitor-stub.c'))
util_ss.add(when: 'CONFIG_LINUX', if_true: files('vfio-helpers.c'))
endif
+
+if have_block or config_host.has_key('CONFIG_VHOST_USER_FS')
+ util_ss.add(files('hexdump.c'))
+ util_ss.add(files('bufferiszero.c'))
+ util_ss.add(files('iov.c'))
+endif
--
2.26.3
On 4/28/21 4:48 PM, Philippe Mathieu-Daudé wrote:
> When not explicitly select a sysemu target or the QEMU tools and
> building virtiofsd, libqemuutil.a has missing symbols:
>
> /usr/bin/ld: tools/virtiofsd/virtiofsd.p/fuse_virtio.c.o: in function `virtio_send_msg':
> tools/virtiofsd/fuse_virtio.c:236: undefined reference to `iov_size'
>
> /usr/bin/ld: libqemuutil.a(util_iov.c.o): in function `iov_hexdump':
> util/iov.c:240: undefined reference to `qemu_hexdump'
>
> /usr/bin/ld: libqemuutil.a(util_iov.c.o): in function `qemu_iovec_is_zero':
> util/iov.c:494: undefined reference to `buffer_is_zero'
>
> Fix by linking bufferiszero/hexdump/iov objects when building
> virtiofsd (regardless of sysemu / tools).
>
> Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
> ---
> util/meson.build | 10 +++++++---
> 1 file changed, 7 insertions(+), 3 deletions(-)
>
> diff --git a/util/meson.build b/util/meson.build
> index 510765cde46..c2eda2d1374 100644
> --- a/util/meson.build
> +++ b/util/meson.build
> @@ -59,12 +59,10 @@
> util_ss.add(files('aiocb.c', 'async.c', 'aio-wait.c'))
> util_ss.add(files('base64.c'))
> util_ss.add(files('buffer.c'))
> - util_ss.add(files('bufferiszero.c'))
> util_ss.add(files('coroutine-@0@.c'.format(config_host['CONFIG_COROUTINE_BACKEND'])))
> util_ss.add(files('hbitmap.c'))
> - util_ss.add(files('hexdump.c'))
> util_ss.add(files('iova-tree.c'))
> - util_ss.add(files('iov.c', 'qemu-sockets.c', 'uri.c'))
> + util_ss.add(files('qemu-sockets.c', 'uri.c'))
> util_ss.add(files('lockcnt.c'))
> util_ss.add(files('main-loop.c'))
> util_ss.add(files('nvdimm-utils.c'))
> @@ -83,3 +81,9 @@
> if_false: files('filemonitor-stub.c'))
> util_ss.add(when: 'CONFIG_LINUX', if_true: files('vfio-helpers.c'))
> endif
> +
> +if have_block or config_host.has_key('CONFIG_VHOST_USER_FS')
> + util_ss.add(files('hexdump.c'))
> + util_ss.add(files('bufferiszero.c'))
Doh it isn't sorted :/ and maybe better subject:
"Build virtiofsd with iov/hexdump/buffer_is_zero objects"?
> + util_ss.add(files('iov.c'))
> +endif
>
On 4/28/21 7:48 AM, Philippe Mathieu-Daudé wrote:
> diff --git a/util/meson.build b/util/meson.build
> index 510765cde46..c2eda2d1374 100644
> --- a/util/meson.build
> +++ b/util/meson.build
> @@ -59,12 +59,10 @@
> util_ss.add(files('aiocb.c', 'async.c', 'aio-wait.c'))
> util_ss.add(files('base64.c'))
> util_ss.add(files('buffer.c'))
> - util_ss.add(files('bufferiszero.c'))
> util_ss.add(files('coroutine-@0@.c'.format(config_host['CONFIG_COROUTINE_BACKEND'])))
> util_ss.add(files('hbitmap.c'))
> - util_ss.add(files('hexdump.c'))
> util_ss.add(files('iova-tree.c'))
> - util_ss.add(files('iov.c', 'qemu-sockets.c', 'uri.c'))
> + util_ss.add(files('qemu-sockets.c', 'uri.c'))
> util_ss.add(files('lockcnt.c'))
> util_ss.add(files('main-loop.c'))
> util_ss.add(files('nvdimm-utils.c'))
> @@ -83,3 +81,9 @@
> if_false: files('filemonitor-stub.c'))
> util_ss.add(when: 'CONFIG_LINUX', if_true: files('vfio-helpers.c'))
> endif
> +
> +if have_block or config_host.has_key('CONFIG_VHOST_USER_FS')
> + util_ss.add(files('hexdump.c'))
> + util_ss.add(files('bufferiszero.c'))
> + util_ss.add(files('iov.c'))
> +endif
Isn't util a static library, built once? Why are we avoiding building these
unconditionally? Surely symbols will be included in any linked binaries only
as needed.
r~
On 4/28/21 6:38 PM, Richard Henderson wrote:
> On 4/28/21 7:48 AM, Philippe Mathieu-Daudé wrote:
>> diff --git a/util/meson.build b/util/meson.build
>> index 510765cde46..c2eda2d1374 100644
>> --- a/util/meson.build
>> +++ b/util/meson.build
>> @@ -59,12 +59,10 @@
>> util_ss.add(files('aiocb.c', 'async.c', 'aio-wait.c'))
>> util_ss.add(files('base64.c'))
>> util_ss.add(files('buffer.c'))
>> - util_ss.add(files('bufferiszero.c'))
>>
>> util_ss.add(files('coroutine-@0@.c'.format(config_host['CONFIG_COROUTINE_BACKEND'])))
>>
>> util_ss.add(files('hbitmap.c'))
>> - util_ss.add(files('hexdump.c'))
>> util_ss.add(files('iova-tree.c'))
>> - util_ss.add(files('iov.c', 'qemu-sockets.c', 'uri.c'))
>> + util_ss.add(files('qemu-sockets.c', 'uri.c'))
>> util_ss.add(files('lockcnt.c'))
>> util_ss.add(files('main-loop.c'))
>> util_ss.add(files('nvdimm-utils.c'))
>> @@ -83,3 +81,9 @@
>> if_false:
>> files('filemonitor-stub.c'))
>> util_ss.add(when: 'CONFIG_LINUX', if_true: files('vfio-helpers.c'))
>> endif
>> +
>> +if have_block or config_host.has_key('CONFIG_VHOST_USER_FS')
>> + util_ss.add(files('hexdump.c'))
>> + util_ss.add(files('bufferiszero.c'))
>> + util_ss.add(files('iov.c'))
>> +endif
>
> Isn't util a static library, built once? Why are we avoiding building
> these unconditionally? Surely symbols will be included in any linked
> binaries only as needed.
Yes, in this case built once for $ configure
--target-list=i386-linux-user --disable-tools --enable-virtiofsd.
Are you suggesting to remove the 'if have_block' check? This makes build
a the files pointlessly for user-mode-only builds...
On 4/28/21 10:56 AM, Philippe Mathieu-Daudé wrote: > Are you suggesting to remove the 'if have_block' check? This makes build > a the files pointlessly for user-mode-only builds... But since the objects are not included in the binary, I don't care. The build system is already too complex, and building a couple of extra small files makes only milliseconds of difference. r~
On 4/28/21 9:24 PM, Richard Henderson wrote: > On 4/28/21 10:56 AM, Philippe Mathieu-Daudé wrote: >> Are you suggesting to remove the 'if have_block' check? This makes build >> a the files pointlessly for user-mode-only builds... > > But since the objects are not included in the binary, I don't care. > > The build system is already too complex, and building a couple of extra > small files makes only milliseconds of difference. Maybe for libqemuutil.a (this does make a difference with the Python QAPI generated files - another series). I'll wait if we get to a consensus about what exactly is virtiofsd, then revisit this series. Thanks! Phil.
© 2016 - 2026 Red Hat, Inc.