Kamil Rytarowski <n...@gmx.com> writes: > Hello, > > Excuse me for delay, I missed this mail.
No problem. > Please see in-line. > > On 17.05.2017 09:28, Markus Armbruster wrote: >> Kamil Rytarowski <n...@gmx.com> writes: >> >>> ivshmem-server makes use of the POSIX shared memory object interfaces. >>> This library is provided on NetBSD in -lrt (POSIX Real-time Library). >>> Add ./configure check if there is needed -lrt linking for shm_open() >>> and if so use it. Introduce new configure generated variable LIBS_SHMLIB. >>> >>> This fixes build issue on NetBSD. >>> >>> Signed-off-by: Kamil Rytarowski <n...@gmx.com> >>> --- >>> Makefile | 1 + >>> configure | 20 ++++++++++++++++++++ >>> 2 files changed, 21 insertions(+) >>> >>> diff --git a/Makefile b/Makefile >>> index 31d41a7eae..3248cb53d7 100644 >>> --- a/Makefile >>> +++ b/Makefile >>> @@ -473,6 +473,7 @@ ivshmem-client$(EXESUF): $(ivshmem-client-obj-y) >>> $(COMMON_LDADDS) >>> $(call LINK, $^) >>> ivshmem-server$(EXESUF): $(ivshmem-server-obj-y) $(COMMON_LDADDS) >>> $(call LINK, $^) >>> +ivshmem-server$(EXESUF): LIBS += $(LIBS_SHMLIB) >>> >>> module_block.h: $(SRC_PATH)/scripts/modules/module_block.py config-host.mak >>> $(call quiet-command,$(PYTHON) $< $@ \ >>> diff --git a/configure b/configure >>> index 7c020c076b..50c3aee746 100755 >>> --- a/configure >>> +++ b/configure >>> @@ -179,6 +179,7 @@ audio_pt_int="" >>> audio_win_int="" >>> cc_i386=i386-pc-linux-gnu-gcc >>> libs_qga="" >>> +libs_shmlib="" >>> debug_info="yes" >>> stack_protector="" >>> >>> @@ -4133,6 +4134,24 @@ elif compile_prog "" "$pthread_lib -lrt" ; then >>> libs_qga="$libs_qga -lrt" >>> fi >>> >>> +########################################## >>> +# Do we need librt for shm_open() >>> +cat > $TMPC <<EOF >>> +#include <sys/mman.h> >>> +#include <sys/stat.h> >>> +#include <fcntl.h> >>> +#include <stddef.h> >>> +int main(void) { >>> + return shm_open(NULL, O_RDWR, 0644); >>> +} >>> +EOF >>> + >>> +if compile_prog "" "" ; then >>> + : >>> +elif compile_prog "" "-lrt" ; then >>> + libs_shmlib="$libs_shmlib -lrt" >>> +fi >>> + >>> if test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaris" != yes -a \ >>> "$aix" != "yes" -a "$haiku" != "yes" ; then >>> libs_softmmu="-lutil $libs_softmmu" >>> @@ -5949,6 +5968,7 @@ echo "EXESUF=$EXESUF" >> $config_host_mak >>> echo "DSOSUF=$DSOSUF" >> $config_host_mak >>> echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak >>> echo "LIBS_QGA+=$libs_qga" >> $config_host_mak >>> +echo "LIBS_SHMLIB+=$libs_shmlib" >> $config_host_mak >>> echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak >>> echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak >>> echo "POD2MAN=$POD2MAN" >> $config_host_mak >> >> We already have a test for -lrt. > > Correct. > >> It looks for timer_create() and >> clock_gettime(). > > > timer_create(2) and clock_settime(2) are in libc on NetBSD. > >> If we need -lrt, > > We need it just for shm_open(3). > >> we add it to LIBS and to LIBS_QGA. >> The latter because we don't use LIBS for qemu-ga: >> >> qemu-ga$(EXESUF): LIBS = $(LIBS_QGA) >> >> This patch adds a second test for -lrt, to look for shm_open(). It adds >> -lrt to new variable LIBS_SHMLIB, which gets used only for >> ivshmem-server: >> >> ivshmem-server$(EXESUF): LIBS += $(LIBS_SHMLIB) >> >> Note that ivshmem-server already uses LIBS. >> >> Shouldn't we instead widen the existing test for -lrt to cover >> shm_open()? >> > > I will prepare patch in the requested way. I don't have preference. > >> Can you confirm that the existing test does not add -lrt to LIBS on >> NetBSD? >> > > config-host.mak:LIBS+=-lm -L/usr/pkg/lib -lgthread-2.0 -pthread > -Wl,-R/usr/pkg/lib -lglib-2.0 -lintl -lz > config-host.mak:LIBS_QGA+=-lm -L/usr/pkg/lib -lgthread-2.0 -pthread > -Wl,-R/usr/pkg/lib -lglib-2.0 -lintl > >> tests/ivshmem-test.c also calls shm_open(). Does it work on NetBSD? >> > > Currently it's disabled, as it requires eventfd() (Linux API). You're right. So is the ivshmem device. Hmm. Why would anyone want ivshmem-server on NetBSD? Its purpose is connecting ivshmem-doorbell devices. Could we simply add the obvious CONFIG_IVSHMEM dependence to contrib/ivshmem-*/Makefile.objs?