Message ID | 5002d6a67cb6c429b2e3d21e106b468176e82a1f.1626722742.git.jag.raman@oracle.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | vfio-user server in QEMU | expand |
On Mon, Jul 19, 2021 at 04:00:03PM -0400, Jagannathan Raman wrote: > add the libvfio-user library as a submodule. build it as part of QEMU > > diff --git a/meson.build b/meson.build > index 6e4d2d8..f2f9f86 100644 > --- a/meson.build > +++ b/meson.build > @@ -1894,6 +1894,41 @@ if get_option('cfi') and slirp_opt == 'system' > + ' Please configure with --enable-slirp=git') > endif > > +vfiouser = not_found > +if have_system and multiprocess_allowed > + have_internal = fs.exists(meson.current_source_dir() / 'libvfio-user/Makefile') > + > + if not have_internal > + error('libvfio-user source not found - please pull git submodule') > + endif > + > + vfiouser_files = [ > + 'libvfio-user/lib/dma.c', > + 'libvfio-user/lib/irq.c', > + 'libvfio-user/lib/libvfio-user.c', > + 'libvfio-user/lib/migration.c', > + 'libvfio-user/lib/pci.c', > + 'libvfio-user/lib/pci_caps.c', > + 'libvfio-user/lib/tran_sock.c', > + ] > + > + vfiouser_inc = include_directories('libvfio-user/include', 'libvfio-user/lib') > + > + json_c = dependency('json-c', required: false) > + if not json_c.found() > + json_c = dependency('libjson-c') > + endif > + > + libvfiouser = static_library('vfiouser', > + build_by_default: false, > + sources: vfiouser_files, > + dependencies: json_c, > + include_directories: vfiouser_inc) > + > + vfiouser = declare_dependency(link_with: libvfiouser, > + include_directories: vfiouser_inc) > +endif Why this way, rather than recursing into the submodule? Seems a bit fragile to encode details of the library here. regards john
> On Jul 19, 2021, at 4:24 PM, John Levon <john.levon@nutanix.com> wrote: > > On Mon, Jul 19, 2021 at 04:00:03PM -0400, Jagannathan Raman wrote: > >> add the libvfio-user library as a submodule. build it as part of QEMU >> >> diff --git a/meson.build b/meson.build >> index 6e4d2d8..f2f9f86 100644 >> --- a/meson.build >> +++ b/meson.build >> @@ -1894,6 +1894,41 @@ if get_option('cfi') and slirp_opt == 'system' >> + ' Please configure with --enable-slirp=git') >> endif >> >> +vfiouser = not_found >> +if have_system and multiprocess_allowed >> + have_internal = fs.exists(meson.current_source_dir() / 'libvfio-user/Makefile') >> + >> + if not have_internal >> + error('libvfio-user source not found - please pull git submodule') >> + endif >> + >> + vfiouser_files = [ >> + 'libvfio-user/lib/dma.c', >> + 'libvfio-user/lib/irq.c', >> + 'libvfio-user/lib/libvfio-user.c', >> + 'libvfio-user/lib/migration.c', >> + 'libvfio-user/lib/pci.c', >> + 'libvfio-user/lib/pci_caps.c', >> + 'libvfio-user/lib/tran_sock.c', >> + ] >> + >> + vfiouser_inc = include_directories('libvfio-user/include', 'libvfio-user/lib') >> + >> + json_c = dependency('json-c', required: false) >> + if not json_c.found() >> + json_c = dependency('libjson-c') >> + endif >> + >> + libvfiouser = static_library('vfiouser', >> + build_by_default: false, >> + sources: vfiouser_files, >> + dependencies: json_c, >> + include_directories: vfiouser_inc) >> + >> + vfiouser = declare_dependency(link_with: libvfiouser, >> + include_directories: vfiouser_inc) >> +endif > > Why this way, rather than recursing into the submodule? Seems a bit fragile to > encode details of the library here. +maintainers of meson.build. I apologize for not adding them when I sent the patches out initially. I copied the email list from Elena, but Elena did not make any changes to meson.build - stupid me. John, This way appears to be present convention with QEMU - I’m also not very clear on the reason for it. For example submodules such as slirp (libslirp), capstone (libcapstone), dtc (libfdt) are built this way. I’m guessing it’s because QEMU doesn’t build all parts of a submodule. For example, QEMU only builds libfdt in the doc submodule. Similarly, libvfio-user only builds the core library without building the tests and samples. > > regards > john
Hi On Tue, Jul 20, 2021 at 4:12 PM Jag Raman <jag.raman@oracle.com> wrote: > > > > On Jul 19, 2021, at 4:24 PM, John Levon <john.levon@nutanix.com> wrote: > > > > On Mon, Jul 19, 2021 at 04:00:03PM -0400, Jagannathan Raman wrote: > > > >> add the libvfio-user library as a submodule. build it as part of QEMU > >> > >> diff --git a/meson.build b/meson.build > >> index 6e4d2d8..f2f9f86 100644 > >> --- a/meson.build > >> +++ b/meson.build > >> @@ -1894,6 +1894,41 @@ if get_option('cfi') and slirp_opt == 'system' > >> + ' Please configure with --enable-slirp=git') > >> endif > >> > >> +vfiouser = not_found > >> +if have_system and multiprocess_allowed > >> + have_internal = fs.exists(meson.current_source_dir() / > 'libvfio-user/Makefile') > >> + > >> + if not have_internal > >> + error('libvfio-user source not found - please pull git submodule') > >> + endif > >> + > >> + vfiouser_files = [ > >> + 'libvfio-user/lib/dma.c', > >> + 'libvfio-user/lib/irq.c', > >> + 'libvfio-user/lib/libvfio-user.c', > >> + 'libvfio-user/lib/migration.c', > >> + 'libvfio-user/lib/pci.c', > >> + 'libvfio-user/lib/pci_caps.c', > >> + 'libvfio-user/lib/tran_sock.c', > >> + ] > >> + > >> + vfiouser_inc = include_directories('libvfio-user/include', > 'libvfio-user/lib') > >> + > >> + json_c = dependency('json-c', required: false) > >> + if not json_c.found() > >> + json_c = dependency('libjson-c') > >> + endif > >> + > >> + libvfiouser = static_library('vfiouser', > >> + build_by_default: false, > >> + sources: vfiouser_files, > >> + dependencies: json_c, > >> + include_directories: vfiouser_inc) > >> + > >> + vfiouser = declare_dependency(link_with: libvfiouser, > >> + include_directories: vfiouser_inc) > >> +endif > > > > Why this way, rather than recursing into the submodule? Seems a bit > fragile to > > encode details of the library here. > > +maintainers of meson.build. I apologize for not adding them when I sent > the > patches out initially. I copied the email list from Elena, but Elena did > not make > any changes to meson.build - stupid me. > > John, > > This way appears to be present convention with QEMU - I’m also not > very clear > on the reason for it. > > For example submodules such as slirp (libslirp), capstone (libcapstone), > dtc (libfdt) are built this way. > For slirp and dtc, we are eventually going to use meson subproject(). No idea about capstone. > > I’m guessing it’s because QEMU doesn’t build all parts of a submodule. For > example, QEMU only builds libfdt in the doc submodule. Similarly, > libvfio-user only builds the core library without building the tests and > samples. > > You can give subproject options to build limited parts. Fwiw, since libvfio-user uses cmake, we may be able to use meson cmake.subproject() (https://mesonbuild.com/CMake-module.html).
On Tue, Jul 20, 2021 at 04:20:13PM +0400, Marc-André Lureau wrote: > > >> + libvfiouser = static_library('vfiouser', > > >> + build_by_default: false, > > >> + sources: vfiouser_files, > > >> + dependencies: json_c, > > >> + include_directories: vfiouser_inc) > > > > This way appears to be present convention with QEMU - I’m also not > > very clear > > on the reason for it. > > > > I’m guessing it’s because QEMU doesn’t build all parts of a submodule. For > > example, QEMU only builds libfdt in the doc submodule. Similarly, > > libvfio-user only builds the core library without building the tests and > > samples. > > > You can give subproject options to build limited parts. > > Fwiw, since libvfio-user uses cmake, we may be able to use meson > cmake.subproject() (https://mesonbuild.com/CMake-module.html). That'd be great. We also briefly discussed moving away from cmake anyway - since both SPDK and qemu are meson-based, it seems like it would make sense. I'd prefer it to be easy to regularly update libvfio-user within these projects. Ideally, running qemu tests would actually run libvfio-user tests too, for some level of assurance on the library's internal expectations. regards john
diff --git a/configure b/configure index 49b5481..bc1c961 100755 --- a/configure +++ b/configure @@ -4297,6 +4297,17 @@ but not implemented on your system" fi ########################################## +# check for multiprocess + +case "$multiprocess" in + auto | enabled ) + if test "$git_submodules_action" != "ignore"; then + git_submodules="${git_submodules} libvfio-user" + fi + ;; +esac + +########################################## # End of CC checks # After here, no more $cc or $ld runs diff --git a/meson.build b/meson.build index 6e4d2d8..f2f9f86 100644 --- a/meson.build +++ b/meson.build @@ -1894,6 +1894,41 @@ if get_option('cfi') and slirp_opt == 'system' + ' Please configure with --enable-slirp=git') endif +vfiouser = not_found +if have_system and multiprocess_allowed + have_internal = fs.exists(meson.current_source_dir() / 'libvfio-user/Makefile') + + if not have_internal + error('libvfio-user source not found - please pull git submodule') + endif + + vfiouser_files = [ + 'libvfio-user/lib/dma.c', + 'libvfio-user/lib/irq.c', + 'libvfio-user/lib/libvfio-user.c', + 'libvfio-user/lib/migration.c', + 'libvfio-user/lib/pci.c', + 'libvfio-user/lib/pci_caps.c', + 'libvfio-user/lib/tran_sock.c', + ] + + vfiouser_inc = include_directories('libvfio-user/include', 'libvfio-user/lib') + + json_c = dependency('json-c', required: false) + if not json_c.found() + json_c = dependency('libjson-c') + endif + + libvfiouser = static_library('vfiouser', + build_by_default: false, + sources: vfiouser_files, + dependencies: json_c, + include_directories: vfiouser_inc) + + vfiouser = declare_dependency(link_with: libvfiouser, + include_directories: vfiouser_inc) +endif + fdt = not_found fdt_opt = get_option('fdt') if have_system diff --git a/.gitmodules b/.gitmodules index 08b1b48..a583a39 100644 --- a/.gitmodules +++ b/.gitmodules @@ -64,3 +64,6 @@ [submodule "roms/vbootrom"] path = roms/vbootrom url = https://gitlab.com/qemu-project/vbootrom.git +[submodule "libvfio-user"] + path = libvfio-user + url = https://github.com/nutanix/libvfio-user.git diff --git a/MAINTAINERS b/MAINTAINERS index aa4df6c..99646e7 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -3350,6 +3350,13 @@ F: semihosting/ F: include/semihosting/ F: tests/tcg/multiarch/arm-compat-semi/ +libvfio-user Library +M: Thanos Makatos <thanos.makatos@nutanix.com> +M: John Levon <john.levon@nutanix.com> +T: https://github.com/nutanix/libvfio-user.git +S: Maintained +F: libvfio-user/* + Multi-process QEMU M: Elena Ufimtseva <elena.ufimtseva@oracle.com> M: Jagannathan Raman <jag.raman@oracle.com> diff --git a/hw/remote/meson.build b/hw/remote/meson.build index e6a5574..fb35fb8 100644 --- a/hw/remote/meson.build +++ b/hw/remote/meson.build @@ -7,6 +7,8 @@ remote_ss.add(when: 'CONFIG_MULTIPROCESS', if_true: files('remote-obj.c')) remote_ss.add(when: 'CONFIG_MULTIPROCESS', if_true: files('proxy.c')) remote_ss.add(when: 'CONFIG_MULTIPROCESS', if_true: files('iohub.c')) +remote_ss.add(when: 'CONFIG_MULTIPROCESS', if_true: vfiouser) + specific_ss.add(when: 'CONFIG_MULTIPROCESS', if_true: files('memory.c')) specific_ss.add(when: 'CONFIG_MULTIPROCESS', if_true: files('proxy-memory-listener.c')) diff --git a/libvfio-user b/libvfio-user new file mode 160000 index 0000000..2a0a929 --- /dev/null +++ b/libvfio-user @@ -0,0 +1 @@ +Subproject commit 2a0a92912d598de871ab47c034432c5fa6546dc4