make vm-build-freebsd fails with:
ld: error: undefined symbol: inotify_init1
>>> referenced by filemonitor-inotify.c:183 (../src/util/filemonitor-inotify.c:183)
>>> util_filemonitor-inotify.c.o:(qemu_file_monitor_new) in archive libqemuutil.a
On FreeBSD inotify functions are defined in libinotify.so. Add it to
the dependencies.
Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com>
---
meson.build | 12 +++++++++++-
util/meson.build | 6 +++++-
2 files changed, 16 insertions(+), 2 deletions(-)
diff --git a/meson.build b/meson.build
index b5d6dc94a83..819cdedebe2 100644
--- a/meson.build
+++ b/meson.build
@@ -1982,60 +1982,66 @@ if libbpf.found() and not cc.links('''
#include <bpf/libbpf.h>
int main(void)
{
bpf_object__destroy_skeleton(NULL);
return 0;
}''', dependencies: libbpf)
libbpf = not_found
if get_option('bpf').enabled()
error('libbpf skeleton test failed')
else
warning('libbpf skeleton test failed, disabling')
endif
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')
endif
# libdw
libdw = not_found
if not get_option('libdw').auto() or \
(not get_option('prefer_static') and (have_system or have_user))
libdw = dependency('libdw',
method: 'pkg-config',
required: get_option('libdw'))
endif
+# libinotify-kqueue
+inotify = not_found
+if host_os == 'freebsd'
+ inotify = cc.find_library('inotify')
+endif
+
#################
# config-host.h #
#################
config_host_data = configuration_data()
audio_drivers_selected = []
if have_system
audio_drivers_available = {
'alsa': alsa.found(),
'coreaudio': coreaudio.found(),
'dsound': dsound.found(),
'jack': jack.found(),
'oss': oss.found(),
'pa': pulse.found(),
'pipewire': pipewire.found(),
'sdl': sdl.found(),
'sndio': sndio.found(),
}
foreach k, v: audio_drivers_available
config_host_data.set('CONFIG_AUDIO_' + k.to_upper(), v)
endforeach
# Default to native drivers first, OSS second, SDL third
audio_drivers_priority = \
[ 'pa', 'coreaudio', 'dsound', 'sndio', 'oss' ] + \
(host_os == 'linux' ? [] : [ 'sdl' ])
audio_drivers_default = []
foreach k: audio_drivers_priority
if audio_drivers_available[k]
@@ -2376,61 +2382,62 @@ have_asan_fiber = false
if get_option('sanitizers') and \
not cc.has_function('__sanitizer_start_switch_fiber',
args: '-fsanitize=address',
prefix: '#include <sanitizer/asan_interface.h>')
warning('Missing ASAN due to missing fiber annotation interface')
warning('Without code annotation, the report may be inferior.')
else
have_asan_fiber = true
endif
config_host_data.set('CONFIG_ASAN_IFACE_FIBER', have_asan_fiber)
# has_header_symbol
config_host_data.set('CONFIG_BLKZONED',
cc.has_header_symbol('linux/blkzoned.h', 'BLKOPENZONE'))
config_host_data.set('CONFIG_EPOLL_CREATE1',
cc.has_header_symbol('sys/epoll.h', 'epoll_create1'))
config_host_data.set('CONFIG_FALLOCATE_PUNCH_HOLE',
cc.has_header_symbol('linux/falloc.h', 'FALLOC_FL_PUNCH_HOLE') and
cc.has_header_symbol('linux/falloc.h', 'FALLOC_FL_KEEP_SIZE'))
config_host_data.set('CONFIG_FALLOCATE_ZERO_RANGE',
cc.has_header_symbol('linux/falloc.h', 'FALLOC_FL_ZERO_RANGE'))
config_host_data.set('CONFIG_FIEMAP',
cc.has_header('linux/fiemap.h') and
cc.has_header_symbol('linux/fs.h', 'FS_IOC_FIEMAP'))
config_host_data.set('CONFIG_GETRANDOM',
cc.has_function('getrandom') and
cc.has_header_symbol('sys/random.h', 'GRND_NONBLOCK'))
config_host_data.set('CONFIG_INOTIFY',
cc.has_header_symbol('sys/inotify.h', 'inotify_init'))
config_host_data.set('CONFIG_INOTIFY1',
- cc.has_header_symbol('sys/inotify.h', 'inotify_init1'))
+ cc.has_header_symbol('sys/inotify.h', 'inotify_init1') and
+ (host_os != 'freebsd' or inotify.found()))
config_host_data.set('CONFIG_PRCTL_PR_SET_TIMERSLACK',
cc.has_header_symbol('sys/prctl.h', 'PR_SET_TIMERSLACK'))
config_host_data.set('CONFIG_RTNETLINK',
cc.has_header_symbol('linux/rtnetlink.h', 'IFLA_PROTO_DOWN'))
config_host_data.set('CONFIG_SYSMACROS',
cc.has_header_symbol('sys/sysmacros.h', 'makedev'))
config_host_data.set('HAVE_OPTRESET',
cc.has_header_symbol('getopt.h', 'optreset'))
config_host_data.set('HAVE_IPPROTO_MPTCP',
cc.has_header_symbol('netinet/in.h', 'IPPROTO_MPTCP'))
# has_member
config_host_data.set('HAVE_SIGEV_NOTIFY_THREAD_ID',
cc.has_member('struct sigevent', 'sigev_notify_thread_id',
prefix: '#include <signal.h>'))
config_host_data.set('HAVE_STRUCT_STAT_ST_ATIM',
cc.has_member('struct stat', 'st_atim',
prefix: '#include <sys/stat.h>'))
config_host_data.set('HAVE_BLK_ZONE_REP_CAPACITY',
cc.has_member('struct blk_zone', 'capacity',
prefix: '#include <linux/blkzoned.h>'))
# has_type
config_host_data.set('CONFIG_IOVEC',
cc.has_type('struct iovec',
prefix: '#include <sys/uio.h>'))
config_host_data.set('HAVE_UTMPX',
cc.has_type('struct utmpx',
prefix: '#include <utmpx.h>'))
@@ -4380,60 +4387,63 @@ summary_info += {'U2F support': u2f}
summary_info += {'libusb': libusb}
summary_info += {'usb net redir': usbredir}
summary_info += {'OpenGL support (epoxy)': opengl}
summary_info += {'GBM': gbm}
summary_info += {'libiscsi support': libiscsi}
summary_info += {'libnfs support': libnfs}
if host_os == 'windows'
if have_ga
summary_info += {'QGA VSS support': have_qga_vss}
endif
endif
summary_info += {'seccomp support': seccomp}
summary_info += {'GlusterFS support': glusterfs}
summary_info += {'hv-balloon support': hv_balloon}
summary_info += {'TPM support': have_tpm}
summary_info += {'libssh support': libssh}
summary_info += {'lzo support': lzo}
summary_info += {'snappy support': snappy}
summary_info += {'bzip2 support': libbzip2}
summary_info += {'lzfse support': liblzfse}
summary_info += {'zstd support': zstd}
summary_info += {'NUMA host support': numa}
summary_info += {'capstone': capstone}
summary_info += {'libpmem support': libpmem}
summary_info += {'libdaxctl support': libdaxctl}
summary_info += {'libudev': libudev}
# Dummy dependency, keep .found()
summary_info += {'FUSE lseek': fuse_lseek.found()}
summary_info += {'selinux': selinux}
summary_info += {'libdw': libdw}
+if host_os == 'freebsd'
+ summary_info += {'libinotify-kqueue': inotify}
+endif
summary(summary_info, bool_yn: true, section: 'Dependencies')
if host_arch == 'unknown'
message()
warning('UNSUPPORTED HOST CPU')
message()
message('Support for CPU host architecture ' + cpu + ' is not currently')
message('maintained. The QEMU project does not guarantee that QEMU will')
message('compile or work on this host CPU. You can help by volunteering')
message('to maintain it and providing a build host for our continuous')
message('integration setup.')
if get_option('tcg').allowed() and target_dirs.length() > 0
message()
message('configure has succeeded and you can continue to build, but')
message('QEMU will use a slow interpreter to emulate the target CPU.')
endif
endif
if not supported_oses.contains(host_os)
message()
warning('UNSUPPORTED HOST OS')
message()
message('Support for host OS ' + host_os + 'is not currently maintained.')
message('configure has succeeded and you can continue to build, but')
message('the QEMU project does not guarantee that QEMU will compile or')
message('work on this operating system. You can help by volunteering')
message('to maintain it and providing a build host for our continuous')
message('integration setup. This will ensure that future versions of QEMU')
message('will keep working on ' + host_os + '.')
endif
diff --git a/util/meson.build b/util/meson.build
index af3bf5692d8..0ef9886be04 100644
--- a/util/meson.build
+++ b/util/meson.build
@@ -77,50 +77,54 @@ if have_system
util_ss.add(files('userfaultfd.c'))
endif
endif
if have_block or have_ga
util_ss.add(files('aiocb.c', 'async.c'))
util_ss.add(files('base64.c'))
util_ss.add(files('main-loop.c'))
util_ss.add(files('qemu-coroutine.c', 'qemu-coroutine-lock.c', 'qemu-coroutine-io.c'))
util_ss.add(files(f'coroutine-@coroutine_backend@.c'))
util_ss.add(files('thread-pool.c', 'qemu-timer.c'))
util_ss.add(files('qemu-sockets.c'))
endif
if have_block
util_ss.add(files('aio-wait.c'))
util_ss.add(files('buffer.c'))
util_ss.add(files('bufferiszero.c'))
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', 'uri.c'))
util_ss.add(files('nvdimm-utils.c'))
util_ss.add(files('block-helpers.c'))
util_ss.add(files('qemu-coroutine-sleep.c'))
util_ss.add(files('qemu-co-shared-resource.c'))
util_ss.add(files('qemu-co-timeout.c'))
util_ss.add(files('readline.c'))
util_ss.add(files('throttle.c'))
util_ss.add(files('timed-average.c'))
if config_host_data.get('CONFIG_INOTIFY1')
- util_ss.add(files('filemonitor-inotify.c'))
+ freebsd_dep = []
+ if host_os == 'freebsd'
+ freebsd_dep = inotify
+ endif
+ util_ss.add(files('filemonitor-inotify.c'), freebsd_dep)
else
util_ss.add(files('filemonitor-stub.c'))
endif
if host_os == 'linux'
util_ss.add(files('vhost-user-server.c'), vhost_user)
util_ss.add(files('vfio-helpers.c'))
util_ss.add(files('chardev_open.c'))
endif
endif
if cpu == 'aarch64'
util_ss.add(files('cpuinfo-aarch64.c'))
elif cpu in ['x86', 'x86_64']
util_ss.add(files('cpuinfo-i386.c'))
elif cpu == 'loongarch64'
util_ss.add(files('cpuinfo-loongarch.c'))
elif cpu in ['ppc', 'ppc64']
util_ss.add(files('cpuinfo-ppc.c'))
endif
--
2.43.0
Hi Ilya, On 5/2/24 19:11, Ilya Leoshkevich wrote: > make vm-build-freebsd fails with: > > ld: error: undefined symbol: inotify_init1 > >>> referenced by filemonitor-inotify.c:183 (../src/util/filemonitor-inotify.c:183) > >>> util_filemonitor-inotify.c.o:(qemu_file_monitor_new) in archive libqemuutil.a > > On FreeBSD inotify functions are defined in libinotify.so. Add it to > the dependencies. > > Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com> > --- > meson.build | 12 +++++++++++- > util/meson.build | 6 +++++- > 2 files changed, 16 insertions(+), 2 deletions(-) (for some reason your git-diff context is very verbose, making review somehow annoying). > +# libinotify-kqueue > +inotify = not_found > +if host_os == 'freebsd' > + inotify = cc.find_library('inotify') > +endif > + > ################# > # config-host.h # > ################# > > @@ -2376,61 +2382,62 @@ have_asan_fiber = false > if get_option('sanitizers') and \ > not cc.has_function('__sanitizer_start_switch_fiber', > args: '-fsanitize=address', > prefix: '#include <sanitizer/asan_interface.h>') > warning('Missing ASAN due to missing fiber annotation interface') > warning('Without code annotation, the report may be inferior.') > else > have_asan_fiber = true > endif > config_host_data.set('CONFIG_ASAN_IFACE_FIBER', have_asan_fiber) > > # has_header_symbol > config_host_data.set('CONFIG_INOTIFY', > cc.has_header_symbol('sys/inotify.h', 'inotify_init')) > config_host_data.set('CONFIG_INOTIFY1', > - cc.has_header_symbol('sys/inotify.h', 'inotify_init1')) > + cc.has_header_symbol('sys/inotify.h', 'inotify_init1') and > + (host_os != 'freebsd' or inotify.found())) Maybe we could use the same pattern as 'have_asan_fiber': have_inotify_init1 = cc.has_header_symbol('sys/inotify.h', 'inotify_init1') if have_inotify_init1 and host_os == 'freebsd' have_inotify_init1 = cc.find_library('inotify') endif config_host_data.set('CONFIG_INOTIFY1', have_inotify_init1) I wonder why we don't need the similar library check for the inotify_init symbol. Regards, Phil.
On Mon, Feb 05, 2024 at 07:36:32PM +0100, Philippe Mathieu-Daudé wrote: > Hi Ilya, > > On 5/2/24 19:11, Ilya Leoshkevich wrote: > > make vm-build-freebsd fails with: > > > > ld: error: undefined symbol: inotify_init1 > > >>> referenced by filemonitor-inotify.c:183 (../src/util/filemonitor-inotify.c:183) > > >>> util_filemonitor-inotify.c.o:(qemu_file_monitor_new) in archive libqemuutil.a > > > > On FreeBSD inotify functions are defined in libinotify.so. Add it to > > the dependencies. > > > > Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com> > > --- > > meson.build | 12 +++++++++++- > > util/meson.build | 6 +++++- > > 2 files changed, 16 insertions(+), 2 deletions(-) > > (for some reason your git-diff context is very verbose, > making review somehow annoying). This is because of patch 3. It's essentially the snippet that Daniel posted, except that patch -p1 applied it at a wrong location! So I figured I'll send this series with a larger context, but I couldn't find how to apply this setting to just 1 patch in git send-email. > > +# libinotify-kqueue > > +inotify = not_found > > +if host_os == 'freebsd' > > + inotify = cc.find_library('inotify') > > +endif > > + > > ################# > > # config-host.h # > > ################# > > > > @@ -2376,61 +2382,62 @@ have_asan_fiber = false > > if get_option('sanitizers') and \ > > not cc.has_function('__sanitizer_start_switch_fiber', > > args: '-fsanitize=address', > > prefix: '#include <sanitizer/asan_interface.h>') > > warning('Missing ASAN due to missing fiber annotation interface') > > warning('Without code annotation, the report may be inferior.') > > else > > have_asan_fiber = true > > endif > > config_host_data.set('CONFIG_ASAN_IFACE_FIBER', have_asan_fiber) > > # has_header_symbol > > > > config_host_data.set('CONFIG_INOTIFY', > > cc.has_header_symbol('sys/inotify.h', 'inotify_init')) > > config_host_data.set('CONFIG_INOTIFY1', > > - cc.has_header_symbol('sys/inotify.h', 'inotify_init1')) > > + cc.has_header_symbol('sys/inotify.h', 'inotify_init1') and > > + (host_os != 'freebsd' or inotify.found())) > > Maybe we could use the same pattern as 'have_asan_fiber': > > have_inotify_init1 = cc.has_header_symbol('sys/inotify.h', 'inotify_init1') > if have_inotify_init1 and host_os == 'freebsd' > have_inotify_init1 = cc.find_library('inotify') > endif > config_host_data.set('CONFIG_INOTIFY1', have_inotify_init1) I agree, this looks nicer. I will send a v3. > I wonder why we don't need the similar library check for the > inotify_init symbol. Sounds reasonable, it's just that currently the respective config value is used only in linux-user, but for completeness it won't hurt. > > Regards, > > Phil.
© 2016 - 2024 Red Hat, Inc.