qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/4] Add meson wrap fallback for slirp & dtc
@ 2023-03-02 13:18 marcandre.lureau
  2023-03-02 13:18 ` [PATCH 1/4] mtest2make.py: teach suite name that are just "PROJECT" marcandre.lureau
                   ` (4 more replies)
  0 siblings, 5 replies; 13+ messages in thread
From: marcandre.lureau @ 2023-03-02 13:18 UTC (permalink / raw)
  To: qemu-devel
  Cc: Philippe Mathieu-Daudé, Daniel P. Berrangé, John Snow,
	Paolo Bonzini, Cleber Rosa, Marc-André Lureau,
	Alex Bennée, Thomas Huth

From: Marc-André Lureau <marcandre.lureau@redhat.com>

Hi,

Meson "wrap" is a mechanism to build dependencies that doesn't rely on git
submodules and integrate external dependencies as subproject()s.

This offers developpers a simpler way to build QEMU with missing system
dependencies (ex, libslirp in my case), but also simplify the fallback build
definition of dtc/libfdt.

In constrast with QEMU configure submodule handling, the subprojects are not
downloaded automatically, and the user has to call "meson subprojects download"
himself prior to running configure/meson.

Marc-André Lureau (4):
  mtest2make.py: teach suite name that are just "PROJECT"
  build-sys: prevent meson from downloading wrapped subprojects
  build-sys: add slirp.wrap
  build-sys: replace dtc submodule with dtc.wrap

 configure                     | 25 +++-------------
 meson.build                   | 56 +++++------------------------------
 .gitignore                    |  3 ++
 .gitmodules                   |  3 --
 dtc                           |  1 -
 meson_options.txt             |  5 ++--
 scripts/meson-buildoptions.sh |  4 +--
 scripts/mtest2make.py         |  9 +++---
 subprojects/dtc.wrap          |  6 ++++
 subprojects/slirp.wrap        |  6 ++++
 10 files changed, 35 insertions(+), 83 deletions(-)
 delete mode 160000 dtc
 create mode 100644 subprojects/dtc.wrap
 create mode 100644 subprojects/slirp.wrap

-- 
2.39.2



^ permalink raw reply	[flat|nested] 13+ messages in thread

* [PATCH 1/4] mtest2make.py: teach suite name that are just "PROJECT"
  2023-03-02 13:18 [PATCH 0/4] Add meson wrap fallback for slirp & dtc marcandre.lureau
@ 2023-03-02 13:18 ` marcandre.lureau
  2023-03-02 13:18 ` [PATCH 2/4] build-sys: prevent meson from downloading wrapped subprojects marcandre.lureau
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 13+ messages in thread
From: marcandre.lureau @ 2023-03-02 13:18 UTC (permalink / raw)
  To: qemu-devel
  Cc: Philippe Mathieu-Daudé, Daniel P. Berrangé, John Snow,
	Paolo Bonzini, Cleber Rosa, Marc-André Lureau,
	Alex Bennée, Thomas Huth

From: Marc-André Lureau <marcandre.lureau@redhat.com>

A subproject test may be simply in the "PROJECT" suite (such as
"qemu-common" with the following patches)

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
 scripts/mtest2make.py | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/scripts/mtest2make.py b/scripts/mtest2make.py
index 0fe81efbbc..179dd54871 100644
--- a/scripts/mtest2make.py
+++ b/scripts/mtest2make.py
@@ -51,10 +51,11 @@ def process_tests(test, targets, suites):
 
     test_suites = test['suite'] or ['default']
     for s in test_suites:
-        # The suite name in the introspection info is "PROJECT:SUITE"
-        s = s.split(':')[1]
-        if s == 'slow' or s == 'thorough':
-            continue
+        # The suite name in the introspection info is "PROJECT" or "PROJECT:SUITE"
+        if ':' in s:
+            s = s.split(':')[1]
+            if s == 'slow' or s == 'thorough':
+                continue
         if s.endswith('-slow'):
             s = s[:-5]
             suites[s].speeds.append('slow')
-- 
2.39.2



^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PATCH 2/4] build-sys: prevent meson from downloading wrapped subprojects
  2023-03-02 13:18 [PATCH 0/4] Add meson wrap fallback for slirp & dtc marcandre.lureau
  2023-03-02 13:18 ` [PATCH 1/4] mtest2make.py: teach suite name that are just "PROJECT" marcandre.lureau
@ 2023-03-02 13:18 ` marcandre.lureau
  2023-03-02 13:18 ` [PATCH 3/4] build-sys: add slirp.wrap marcandre.lureau
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 13+ messages in thread
From: marcandre.lureau @ 2023-03-02 13:18 UTC (permalink / raw)
  To: qemu-devel
  Cc: Philippe Mathieu-Daudé, Daniel P. Berrangé, John Snow,
	Paolo Bonzini, Cleber Rosa, Marc-André Lureau,
	Alex Bennée, Thomas Huth

From: Marc-André Lureau <marcandre.lureau@redhat.com>

The following patches are going to introduce meson wrap dependencies,
which is a solution to download and build missing dependencies.

The QEMU build-system will do network access with no way to avoid the
fallback. As a start, hardcode "--wrap-mode=nodownload" in configure, so
that wraps would be used only after a conscious decision of the user to
use "meson subprojects download" (before running configure).

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
 configure | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/configure b/configure
index 2a8a9be8a1..02b4aa4ce9 100755
--- a/configure
+++ b/configure
@@ -2585,6 +2585,10 @@ if test "$skip_meson" = no; then
 
   rm -rf meson-private meson-info meson-logs
 
+  # Prevent meson from automatically downloading wrapped subprojects when missing.
+  # You can use 'meson subprojects download' before running configure.
+  meson_option_add "--wrap-mode=nodownload"
+
   # Built-in options
   test "$bindir" != "bin" && meson_option_add "-Dbindir=$bindir"
   test "$default_feature" = no && meson_option_add -Dauto_features=disabled
-- 
2.39.2



^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PATCH 3/4] build-sys: add slirp.wrap
  2023-03-02 13:18 [PATCH 0/4] Add meson wrap fallback for slirp & dtc marcandre.lureau
  2023-03-02 13:18 ` [PATCH 1/4] mtest2make.py: teach suite name that are just "PROJECT" marcandre.lureau
  2023-03-02 13:18 ` [PATCH 2/4] build-sys: prevent meson from downloading wrapped subprojects marcandre.lureau
@ 2023-03-02 13:18 ` marcandre.lureau
  2023-03-02 13:18 ` [PATCH 4/4] build-sys: replace dtc submodule with dtc.wrap marcandre.lureau
  2023-03-06 10:06 ` [PATCH 0/4] Add meson wrap fallback for slirp & dtc Daniel P. Berrangé
  4 siblings, 0 replies; 13+ messages in thread
From: marcandre.lureau @ 2023-03-02 13:18 UTC (permalink / raw)
  To: qemu-devel
  Cc: Philippe Mathieu-Daudé, Daniel P. Berrangé, John Snow,
	Paolo Bonzini, Cleber Rosa, Marc-André Lureau,
	Alex Bennée, Thomas Huth

From: Marc-André Lureau <marcandre.lureau@redhat.com>

This allows to build with --enable-slirp / -D slirp=enabled, even when
libslirp is not installed on the system. Meson will pull it from git in
that case.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
 .gitignore             | 2 ++
 subprojects/slirp.wrap | 6 ++++++
 2 files changed, 8 insertions(+)
 create mode 100644 subprojects/slirp.wrap

diff --git a/.gitignore b/.gitignore
index 61fa39967b..1ea59f4819 100644
--- a/.gitignore
+++ b/.gitignore
@@ -20,3 +20,5 @@ GTAGS
 *.swp
 *.patch
 *.gcov
+
+/subprojects/slirp
diff --git a/subprojects/slirp.wrap b/subprojects/slirp.wrap
new file mode 100644
index 0000000000..ace4f26102
--- /dev/null
+++ b/subprojects/slirp.wrap
@@ -0,0 +1,6 @@
+[wrap-git]
+url = https://gitlab.freedesktop.org/slirp/libslirp
+revision = 15c52d697529eb3e78c5d8aa324d61715bce33b6
+
+[provide]
+slirp = libslirp_dep
-- 
2.39.2



^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PATCH 4/4] build-sys: replace dtc submodule with dtc.wrap
  2023-03-02 13:18 [PATCH 0/4] Add meson wrap fallback for slirp & dtc marcandre.lureau
                   ` (2 preceding siblings ...)
  2023-03-02 13:18 ` [PATCH 3/4] build-sys: add slirp.wrap marcandre.lureau
@ 2023-03-02 13:18 ` marcandre.lureau
  2023-03-06 10:06 ` [PATCH 0/4] Add meson wrap fallback for slirp & dtc Daniel P. Berrangé
  4 siblings, 0 replies; 13+ messages in thread
From: marcandre.lureau @ 2023-03-02 13:18 UTC (permalink / raw)
  To: qemu-devel
  Cc: Philippe Mathieu-Daudé, Daniel P. Berrangé, John Snow,
	Paolo Bonzini, Cleber Rosa, Marc-André Lureau,
	Alex Bennée, Thomas Huth

From: Marc-André Lureau <marcandre.lureau@redhat.com>

Use meson wrap fallback for libfdt. Simplify handling of
fallback/internal build and get rid of a submodule.

This drops support for ./configure --enable-fdt=git/--enable-fdt=internal:
if the system version is enough, it will use it, otherwise it can fall back
on the wrapped subproject.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
 configure                     | 21 -------------
 meson.build                   | 56 +++++------------------------------
 .gitignore                    |  1 +
 .gitmodules                   |  3 --
 dtc                           |  1 -
 meson_options.txt             |  5 ++--
 scripts/meson-buildoptions.sh |  4 +--
 subprojects/dtc.wrap          |  6 ++++
 8 files changed, 18 insertions(+), 79 deletions(-)
 delete mode 160000 dtc
 create mode 100644 subprojects/dtc.wrap

diff --git a/configure b/configure
index 02b4aa4ce9..051a5cc69b 100755
--- a/configure
+++ b/configure
@@ -297,8 +297,6 @@ vfio_user_server="disabled"
 # are included in the automatically generated help message)
 
 # 1. Track which submodules are needed
-fdt="auto"
-
 # 2. Automatically enable/disable other options
 tcg="auto"
 cfi="false"
@@ -860,14 +858,6 @@ for opt do
   ;;
   --disable-cfi) cfi="false"
   ;;
-  --disable-fdt) fdt="disabled"
-  ;;
-  --enable-fdt) fdt="enabled"
-  ;;
-  --enable-fdt=git) fdt="internal"
-  ;;
-  --enable-fdt=*) fdt="$optarg"
-  ;;
   --with-coroutine=*) coroutine="$optarg"
   ;;
   --with-git=*) git="$optarg"
@@ -1546,16 +1536,6 @@ if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
     fi
 fi
 
-##########################################
-# fdt probe
-
-case "$fdt" in
-  auto | enabled | internal)
-    # Simpler to always update submodule, even if not needed.
-    git_submodules="${git_submodules} dtc"
-    ;;
-esac
-
 ##########################################
 # check and set a backend for coroutine
 
@@ -2597,7 +2577,6 @@ if test "$skip_meson" = no; then
 
   # QEMU options
   test "$cfi" != false && meson_option_add "-Dcfi=$cfi"
-  test "$fdt" != auto && meson_option_add "-Dfdt=$fdt"
   test -n "${LIB_FUZZING_ENGINE+xxx}" && meson_option_add "-Dfuzzing_engine=$LIB_FUZZING_ENGINE"
   test "$qemu_suffix" != qemu && meson_option_add "-Dqemu_suffix=$qemu_suffix"
   test "$smbd" != '' && meson_option_add "-Dsmbd=$smbd"
diff --git a/meson.build b/meson.build
index 77d2ae87e4..9017141d7d 100644
--- a/meson.build
+++ b/meson.build
@@ -2759,54 +2759,14 @@ endif
 
 fdt = not_found
 if have_system
-  fdt_opt = get_option('fdt')
-  if fdt_opt in ['enabled', 'auto', 'system']
-    have_internal = fs.exists(meson.current_source_dir() / 'dtc/libfdt/Makefile.libfdt')
-    fdt = cc.find_library('fdt', kwargs: static_kwargs,
-                          required: fdt_opt == 'system' or
-                                    fdt_opt == 'enabled' and not have_internal)
-    if fdt.found() and cc.links('''
-       #include <libfdt.h>
-       #include <libfdt_env.h>
-       int main(void) { fdt_find_max_phandle(NULL, NULL); return 0; }''',
-         dependencies: fdt)
-      fdt_opt = 'system'
-    elif fdt_opt == 'system'
-       error('system libfdt requested, but it is too old (1.5.1 or newer required)')
-    elif have_internal
-      fdt_opt = 'internal'
-    else
-      fdt_opt = 'disabled'
-      fdt = not_found
+    # libfdt is not always shipped with a pkgconfig file.
+    fdt = cc.find_library('fdt', kwargs: static_kwargs, required: false)
+    if not fdt.found() or not cc.has_function('fdt_find_max_phandle', dependencies: fdt)
+      fdt = dependency('fdt', kwargs: static_kwargs,
+                method: 'pkg-config', version: '>=1.5.1',
+                required: (get_option('fdt').auto() and fdt_required.length() > 0) or get_option('fdt').enabled(),
+                default_options: ['python=disabled', 'tools=false'])
     endif
-  endif
-  if fdt_opt == 'internal'
-    fdt_files = files(
-      'dtc/libfdt/fdt.c',
-      'dtc/libfdt/fdt_ro.c',
-      'dtc/libfdt/fdt_wip.c',
-      'dtc/libfdt/fdt_sw.c',
-      'dtc/libfdt/fdt_rw.c',
-      'dtc/libfdt/fdt_strerror.c',
-      'dtc/libfdt/fdt_empty_tree.c',
-      'dtc/libfdt/fdt_addresses.c',
-      'dtc/libfdt/fdt_overlay.c',
-      'dtc/libfdt/fdt_check.c',
-    )
-
-    fdt_inc = include_directories('dtc/libfdt')
-    libfdt = static_library('fdt',
-                            build_by_default: false,
-                            sources: fdt_files,
-                            include_directories: fdt_inc)
-    fdt = declare_dependency(link_with: libfdt,
-                             include_directories: fdt_inc)
-  endif
-else
-  fdt_opt = 'disabled'
-endif
-if not fdt.found() and fdt_required.length() > 0
-  error('fdt not available but required by targets ' + ', '.join(fdt_required))
 endif
 
 config_host_data.set('CONFIG_CAPSTONE', capstone.found())
@@ -3989,7 +3949,7 @@ summary_info += {'Linux io_uring support': linux_io_uring}
 summary_info += {'ATTR/XATTR support': libattr}
 summary_info += {'RDMA support':      rdma}
 summary_info += {'PVRDMA support':    have_pvrdma}
-summary_info += {'fdt support':       fdt_opt == 'disabled' ? false : fdt_opt}
+summary_info += {'fdt support':       fdt}
 summary_info += {'libcap-ng support': libcap_ng}
 summary_info += {'bpf support':       libbpf}
 summary_info += {'spice protocol support': spice_protocol}
diff --git a/.gitignore b/.gitignore
index 1ea59f4819..13662d4f24 100644
--- a/.gitignore
+++ b/.gitignore
@@ -21,4 +21,5 @@ GTAGS
 *.patch
 *.gcov
 
+/subprojects/dtc
 /subprojects/slirp
diff --git a/.gitmodules b/.gitmodules
index 6ce5bf49c5..410a00d566 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -13,9 +13,6 @@
 [submodule "roms/qemu-palcode"]
 	path = roms/qemu-palcode
 	url = https://gitlab.com/qemu-project/qemu-palcode.git
-[submodule "dtc"]
-	path = dtc
-	url = https://gitlab.com/qemu-project/dtc.git
 [submodule "roms/u-boot"]
 	path = roms/u-boot
 	url = https://gitlab.com/qemu-project/u-boot.git
diff --git a/dtc b/dtc
deleted file mode 160000
index b6910bec11..0000000000
--- a/dtc
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit b6910bec11614980a21e46fbccc35934b671bd81
diff --git a/meson_options.txt b/meson_options.txt
index fc9447d267..493100ba4c 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -279,9 +279,8 @@ option('vduse_blk_export', type: 'feature', value: 'auto',
 
 option('capstone', type: 'feature', value: 'auto',
        description: 'Whether and how to find the capstone library')
-option('fdt', type: 'combo', value: 'auto',
-       choices: ['disabled', 'enabled', 'auto', 'system', 'internal'],
-       description: 'Whether and how to find the libfdt library')
+option('fdt', type: 'feature', value: 'auto',
+       description: 'libfdt device tree library')
 
 option('selinux', type: 'feature', value: 'auto',
        description: 'SELinux support in qemu-nbd')
diff --git a/scripts/meson-buildoptions.sh b/scripts/meson-buildoptions.sh
index 009fab1515..2a8e91a60c 100644
--- a/scripts/meson-buildoptions.sh
+++ b/scripts/meson-buildoptions.sh
@@ -24,8 +24,6 @@ meson_options_help() {
   printf "%s\n" '  --enable-debug-mutex     mutex debugging support'
   printf "%s\n" '  --enable-debug-stack-usage'
   printf "%s\n" '                           measure coroutine stack usage'
-  printf "%s\n" '  --enable-fdt[=CHOICE]    Whether and how to find the libfdt library'
-  printf "%s\n" '                           (choices: auto/disabled/enabled/internal/system)'
   printf "%s\n" '  --enable-fuzzing         build fuzzing targets'
   printf "%s\n" '  --enable-gcov            Enable coverage tracking.'
   printf "%s\n" '  --enable-gprof           QEMU profiling with gprof'
@@ -91,6 +89,7 @@ meson_options_help() {
   printf "%s\n" '  dmg             dmg image format support'
   printf "%s\n" '  docs            Documentations build support'
   printf "%s\n" '  dsound          DirectSound sound support'
+  printf "%s\n" '  fdt             libfdt device tree library'
   printf "%s\n" '  fuse            FUSE block device export'
   printf "%s\n" '  fuse-lseek      SEEK_HOLE/SEEK_DATA support for FUSE exports'
   printf "%s\n" '  gcrypt          libgcrypt cryptography support'
@@ -262,7 +261,6 @@ _meson_option_parse() {
     --disable-dsound) printf "%s" -Ddsound=disabled ;;
     --enable-fdt) printf "%s" -Dfdt=enabled ;;
     --disable-fdt) printf "%s" -Dfdt=disabled ;;
-    --enable-fdt=*) quote_sh "-Dfdt=$2" ;;
     --enable-fuse) printf "%s" -Dfuse=enabled ;;
     --disable-fuse) printf "%s" -Dfuse=disabled ;;
     --enable-fuse-lseek) printf "%s" -Dfuse_lseek=enabled ;;
diff --git a/subprojects/dtc.wrap b/subprojects/dtc.wrap
new file mode 100644
index 0000000000..da789704d0
--- /dev/null
+++ b/subprojects/dtc.wrap
@@ -0,0 +1,6 @@
+[wrap-git]
+url = https://github.com/dgibson/dtc.git
+revision = 72fc810c3025f07de718f5f32a290a6cd5d1f4ee
+
+[provide]
+fdt = libfdt_dep
-- 
2.39.2



^ permalink raw reply related	[flat|nested] 13+ messages in thread

* Re: [PATCH 0/4] Add meson wrap fallback for slirp & dtc
  2023-03-02 13:18 [PATCH 0/4] Add meson wrap fallback for slirp & dtc marcandre.lureau
                   ` (3 preceding siblings ...)
  2023-03-02 13:18 ` [PATCH 4/4] build-sys: replace dtc submodule with dtc.wrap marcandre.lureau
@ 2023-03-06 10:06 ` Daniel P. Berrangé
  2023-03-06 10:17   ` Peter Maydell
                     ` (2 more replies)
  4 siblings, 3 replies; 13+ messages in thread
From: Daniel P. Berrangé @ 2023-03-06 10:06 UTC (permalink / raw)
  To: marcandre.lureau
  Cc: qemu-devel, Philippe Mathieu-Daudé, John Snow, Paolo Bonzini,
	Cleber Rosa, Alex Bennée, Thomas Huth

On Thu, Mar 02, 2023 at 05:18:44PM +0400, marcandre.lureau@redhat.com wrote:
> From: Marc-André Lureau <marcandre.lureau@redhat.com>
> 
> Hi,
> 
> Meson "wrap" is a mechanism to build dependencies that doesn't rely on git
> submodules and integrate external dependencies as subproject()s.
> 
> This offers developpers a simpler way to build QEMU with missing system
> dependencies (ex, libslirp in my case), but also simplify the fallback build
> definition of dtc/libfdt.

Do we actually need this facility though ? We've already determined
that every platform we need has libslirp now, and IIUC Thomas determined
recently that dtc is also available everywhere we need it to be.

So why would we want to continue to special case these two libraries,
out of all the many many many other libraries we also have deps on.

With regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|



^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH 0/4] Add meson wrap fallback for slirp & dtc
  2023-03-06 10:06 ` [PATCH 0/4] Add meson wrap fallback for slirp & dtc Daniel P. Berrangé
@ 2023-03-06 10:17   ` Peter Maydell
  2023-03-06 10:25     ` Marc-André Lureau
  2023-03-06 10:19   ` Marc-André Lureau
  2023-03-06 11:36   ` Paolo Bonzini
  2 siblings, 1 reply; 13+ messages in thread
From: Peter Maydell @ 2023-03-06 10:17 UTC (permalink / raw)
  To: Daniel P. Berrangé
  Cc: marcandre.lureau, qemu-devel, Philippe Mathieu-Daudé,
	John Snow, Paolo Bonzini, Cleber Rosa, Alex Bennée,
	Thomas Huth

On Mon, 6 Mar 2023 at 10:06, Daniel P. Berrangé <berrange@redhat.com> wrote:
>
> On Thu, Mar 02, 2023 at 05:18:44PM +0400, marcandre.lureau@redhat.com wrote:
> > From: Marc-André Lureau <marcandre.lureau@redhat.com>
> >
> > Hi,
> >
> > Meson "wrap" is a mechanism to build dependencies that doesn't rely on git
> > submodules and integrate external dependencies as subproject()s.
> >
> > This offers developpers a simpler way to build QEMU with missing system
> > dependencies (ex, libslirp in my case), but also simplify the fallback build
> > definition of dtc/libfdt.
>
> Do we actually need this facility though ? We've already determined
> that every platform we need has libslirp now, and IIUC Thomas determined
> recently that dtc is also available everywhere we need it to be.
>
> So why would we want to continue to special case these two libraries,
> out of all the many many many other libraries we also have deps on.

Also, it looks like the wrap mechanism is still basically "we have
a file that indicates what the external git URL of the dependency
is and specifies a commit hash to use", it's just changing the
mechanism we use to get the source from git submodules to this
new thing. Maybe the new thing really is better -- certainly
git submodules are absolutely awful -- but we should have one
mechanism, not two.

thanks
-- PMM


^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH 0/4] Add meson wrap fallback for slirp & dtc
  2023-03-06 10:06 ` [PATCH 0/4] Add meson wrap fallback for slirp & dtc Daniel P. Berrangé
  2023-03-06 10:17   ` Peter Maydell
@ 2023-03-06 10:19   ` Marc-André Lureau
  2023-03-06 10:32     ` Daniel P. Berrangé
  2023-03-06 11:36   ` Paolo Bonzini
  2 siblings, 1 reply; 13+ messages in thread
From: Marc-André Lureau @ 2023-03-06 10:19 UTC (permalink / raw)
  To: Daniel P. Berrangé
  Cc: qemu-devel, Philippe Mathieu-Daudé, John Snow, Paolo Bonzini,
	Cleber Rosa, Alex Bennée, Thomas Huth

[-- Attachment #1: Type: text/plain, Size: 1405 bytes --]

Hi

On Mon, Mar 6, 2023 at 2:06 PM Daniel P. Berrangé <berrange@redhat.com>
wrote:

> On Thu, Mar 02, 2023 at 05:18:44PM +0400, marcandre.lureau@redhat.com
> wrote:
> > From: Marc-André Lureau <marcandre.lureau@redhat.com>
> >
> > Hi,
> >
> > Meson "wrap" is a mechanism to build dependencies that doesn't rely on
> git
> > submodules and integrate external dependencies as subproject()s.
> >
> > This offers developpers a simpler way to build QEMU with missing system
> > dependencies (ex, libslirp in my case), but also simplify the fallback
> build
> > definition of dtc/libfdt.
>
> Do we actually need this facility though ? We've already determined
> that every platform we need has libslirp now, and IIUC Thomas determined
> recently that dtc is also available everywhere we need it to be.
>

The main benefit is for developers: you have the source code of
QEMU-related projects with the source tree. Code navigation, debugging, or
various build tests are easier (compilation flags, static build etc). You
don't have to "pollute" your system with (what could be) QEMU-specific
libraries.


> So why would we want to continue to special case these two libraries,
> out of all the many many many other libraries we also have deps on.
>

They are more often updated, or developped with QEMU? For the reasons I
listed, I would welcome more wrapped subprojects.

[-- Attachment #2: Type: text/html, Size: 2134 bytes --]

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH 0/4] Add meson wrap fallback for slirp & dtc
  2023-03-06 10:17   ` Peter Maydell
@ 2023-03-06 10:25     ` Marc-André Lureau
  0 siblings, 0 replies; 13+ messages in thread
From: Marc-André Lureau @ 2023-03-06 10:25 UTC (permalink / raw)
  To: Peter Maydell
  Cc: Daniel P. Berrangé, qemu-devel, Philippe Mathieu-Daudé,
	John Snow, Paolo Bonzini, Cleber Rosa, Alex Bennée,
	Thomas Huth

[-- Attachment #1: Type: text/plain, Size: 2008 bytes --]

Hi

On Mon, Mar 6, 2023 at 2:18 PM Peter Maydell <peter.maydell@linaro.org>
wrote:

> On Mon, 6 Mar 2023 at 10:06, Daniel P. Berrangé <berrange@redhat.com>
> wrote:
> >
> > On Thu, Mar 02, 2023 at 05:18:44PM +0400, marcandre.lureau@redhat.com
> wrote:
> > > From: Marc-André Lureau <marcandre.lureau@redhat.com>
> > >
> > > Hi,
> > >
> > > Meson "wrap" is a mechanism to build dependencies that doesn't rely on
> git
> > > submodules and integrate external dependencies as subproject()s.
> > >
> > > This offers developpers a simpler way to build QEMU with missing system
> > > dependencies (ex, libslirp in my case), but also simplify the fallback
> build
> > > definition of dtc/libfdt.
> >
> > Do we actually need this facility though ? We've already determined
> > that every platform we need has libslirp now, and IIUC Thomas determined
> > recently that dtc is also available everywhere we need it to be.
> >
> > So why would we want to continue to special case these two libraries,
> > out of all the many many many other libraries we also have deps on.
>
> Also, it looks like the wrap mechanism is still basically "we have
> a file that indicates what the external git URL of the dependency
> is and specifies a commit hash to use", it's just changing the
> mechanism we use to get the source from git submodules to this
> new thing. Maybe the new thing really is better -- certainly
> git submodules are absolutely awful -- but we should have one
> mechanism, not two.
>

I think we all experienced git submodules are more intrusive and may break
various git workflows.

wrap files may indeed point to a git URL with a revision, but they are more
versatile than that and can download from released tarball instead, for
example.

Some projects, like glib, use both submodules and wrap files (
https://gitlab.gnome.org/GNOME/glib/-/tree/main/subprojects), there is no
incompatibility with both solutions. As often, use what fits best your
needs.

[-- Attachment #2: Type: text/html, Size: 2826 bytes --]

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH 0/4] Add meson wrap fallback for slirp & dtc
  2023-03-06 10:19   ` Marc-André Lureau
@ 2023-03-06 10:32     ` Daniel P. Berrangé
  2023-03-06 10:41       ` Marc-André Lureau
  0 siblings, 1 reply; 13+ messages in thread
From: Daniel P. Berrangé @ 2023-03-06 10:32 UTC (permalink / raw)
  To: Marc-André Lureau
  Cc: qemu-devel, Philippe Mathieu-Daudé, John Snow, Paolo Bonzini,
	Cleber Rosa, Alex Bennée, Thomas Huth

On Mon, Mar 06, 2023 at 02:19:25PM +0400, Marc-André Lureau wrote:
> Hi
> 
> On Mon, Mar 6, 2023 at 2:06 PM Daniel P. Berrangé <berrange@redhat.com>
> wrote:
> 
> > On Thu, Mar 02, 2023 at 05:18:44PM +0400, marcandre.lureau@redhat.com
> > wrote:
> > > From: Marc-André Lureau <marcandre.lureau@redhat.com>
> > >
> > > Hi,
> > >
> > > Meson "wrap" is a mechanism to build dependencies that doesn't rely on
> > git
> > > submodules and integrate external dependencies as subproject()s.
> > >
> > > This offers developpers a simpler way to build QEMU with missing system
> > > dependencies (ex, libslirp in my case), but also simplify the fallback
> > build
> > > definition of dtc/libfdt.
> >
> > Do we actually need this facility though ? We've already determined
> > that every platform we need has libslirp now, and IIUC Thomas determined
> > recently that dtc is also available everywhere we need it to be.
> >
> 
> The main benefit is for developers: you have the source code of
> QEMU-related projects with the source tree. Code navigation, debugging, or
> various build tests are easier (compilation flags, static build etc). You
> don't have to "pollute" your system with (what could be) QEMU-specific
> libraries.

That's pushing developers to use builds of 3rd party libararies
that don't actually match what our users are going to end up
deploying with though.

> > So why would we want to continue to special case these two libraries,
> > out of all the many many many other libraries we also have deps on.
> >
> 
> They are more often updated, or developped with QEMU? For the reasons I
> listed, I would welcome more wrapped subprojects.

I don't think that they actually have more frequent updates that other
libraries. In any case from QEMU's POV it doesn't matter how often upstream
does releases. We're targetting the existing versions available in the OS
and so don't want to use bleeding edge upstream releases.

This also significantly expands our testing matrix. For each library
we have the possiblity that users have the distro version vs the wrapped
version. That is many new combinations users are exposed to, that we are
realistically never going to have the bandwidth to test in CI.

With regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|



^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH 0/4] Add meson wrap fallback for slirp & dtc
  2023-03-06 10:32     ` Daniel P. Berrangé
@ 2023-03-06 10:41       ` Marc-André Lureau
  0 siblings, 0 replies; 13+ messages in thread
From: Marc-André Lureau @ 2023-03-06 10:41 UTC (permalink / raw)
  To: Daniel P. Berrangé
  Cc: qemu-devel, Philippe Mathieu-Daudé, John Snow, Paolo Bonzini,
	Cleber Rosa, Alex Bennée, Thomas Huth

Hi

On Mon, Mar 6, 2023 at 2:33 PM Daniel P. Berrangé <berrange@redhat.com> wrote:
>
> On Mon, Mar 06, 2023 at 02:19:25PM +0400, Marc-André Lureau wrote:
> > Hi
> >
> > On Mon, Mar 6, 2023 at 2:06 PM Daniel P. Berrangé <berrange@redhat.com>
> > wrote:
> >
> > > On Thu, Mar 02, 2023 at 05:18:44PM +0400, marcandre.lureau@redhat.com
> > > wrote:
> > > > From: Marc-André Lureau <marcandre.lureau@redhat.com>
> > > >
> > > > Hi,
> > > >
> > > > Meson "wrap" is a mechanism to build dependencies that doesn't rely on
> > > git
> > > > submodules and integrate external dependencies as subproject()s.
> > > >
> > > > This offers developpers a simpler way to build QEMU with missing system
> > > > dependencies (ex, libslirp in my case), but also simplify the fallback
> > > build
> > > > definition of dtc/libfdt.
> > >
> > > Do we actually need this facility though ? We've already determined
> > > that every platform we need has libslirp now, and IIUC Thomas determined
> > > recently that dtc is also available everywhere we need it to be.
> > >
> >
> > The main benefit is for developers: you have the source code of
> > QEMU-related projects with the source tree. Code navigation, debugging, or
> > various build tests are easier (compilation flags, static build etc). You
> > don't have to "pollute" your system with (what could be) QEMU-specific
> > libraries.
>
> That's pushing developers to use builds of 3rd party libararies
> that don't actually match what our users are going to end up
> deploying with though.

The combinations of versions used by developers is already virtually
limitless. I don't think adding a specific upstream version/revision
to the mix is making the situation worse. It could be even the
opposite, if we manage to build an "official" static version of qemu
for example (with specific dependencies).

>
> > > So why would we want to continue to special case these two libraries,
> > > out of all the many many many other libraries we also have deps on.
> > >
> >
> > They are more often updated, or developped with QEMU? For the reasons I
> > listed, I would welcome more wrapped subprojects.
>
> I don't think that they actually have more frequent updates that other
> libraries. In any case from QEMU's POV it doesn't matter how often upstream
> does releases. We're targetting the existing versions available in the OS
> and so don't want to use bleeding edge upstream releases.

That doesn't change that policy.

>
> This also significantly expands our testing matrix. For each library
> we have the possiblity that users have the distro version vs the wrapped
> version. That is many new combinations users are exposed to, that we are
> realistically never going to have the bandwidth to test in CI.

yes, I would consider this a tier 2 support, since it aims at
developers, and not having to cover it in CI.

-- 
Marc-André Lureau


^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH 0/4] Add meson wrap fallback for slirp & dtc
  2023-03-06 10:06 ` [PATCH 0/4] Add meson wrap fallback for slirp & dtc Daniel P. Berrangé
  2023-03-06 10:17   ` Peter Maydell
  2023-03-06 10:19   ` Marc-André Lureau
@ 2023-03-06 11:36   ` Paolo Bonzini
  2023-03-07 11:19     ` Daniel P. Berrangé
  2 siblings, 1 reply; 13+ messages in thread
From: Paolo Bonzini @ 2023-03-06 11:36 UTC (permalink / raw)
  To: Daniel P. Berrangé, marcandre.lureau
  Cc: qemu-devel, Philippe Mathieu-Daudé, John Snow, Cleber Rosa,
	Alex Bennée, Thomas Huth

On 3/6/23 11:06, Daniel P. Berrangé wrote:
>> This offers developpers a simpler way to build QEMU with missing system
>> dependencies (ex, libslirp in my case), but also simplify the fallback build
>> definition of dtc/libfdt.
> Do we actually need this facility though ? We've already determined
> that every platform we need has libslirp now, and IIUC Thomas determined
> recently that dtc is also available everywhere we need it to be.

libvfio-user can use Meson subprojects instead of submodules, too; and 
with Pip support probably coming in 8.1, we can remove the meson 
submodule.  Then, the only mostly-mandatory submodule would be 
keycodemapdb; SLOF requires a cross-compiler and the pre-built is binary 
is shipped binary, while softfloat/testfloat are test only and maybe 
could even be embedded.  So there is a path towards getting rid of 
submodules at least for the main QEMU build process.

Also, Windows installer builds could benefit from having wrapdb support 
for the mandatory dependencies in Windows (pixman, zlib, glib, possibly 
SDL).

Since they are unintrusive and easy to revert, I think we could include 
patches 1-3 as experimental in 8.0, though I'm happy to oblige if people 
disagree (and only include patch 1).

Paolo



^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH 0/4] Add meson wrap fallback for slirp & dtc
  2023-03-06 11:36   ` Paolo Bonzini
@ 2023-03-07 11:19     ` Daniel P. Berrangé
  0 siblings, 0 replies; 13+ messages in thread
From: Daniel P. Berrangé @ 2023-03-07 11:19 UTC (permalink / raw)
  To: Paolo Bonzini
  Cc: marcandre.lureau, qemu-devel, Philippe Mathieu-Daudé,
	John Snow, Cleber Rosa, Alex Bennée, Thomas Huth

On Mon, Mar 06, 2023 at 12:36:25PM +0100, Paolo Bonzini wrote:
> On 3/6/23 11:06, Daniel P. Berrangé wrote:
> > > This offers developpers a simpler way to build QEMU with missing system
> > > dependencies (ex, libslirp in my case), but also simplify the fallback build
> > > definition of dtc/libfdt.
> > Do we actually need this facility though ? We've already determined
> > that every platform we need has libslirp now, and IIUC Thomas determined
> > recently that dtc is also available everywhere we need it to be.
> 
> libvfio-user can use Meson subprojects instead of submodules, too; and with
> Pip support probably coming in 8.1, we can remove the meson submodule.
> Then, the only mostly-mandatory submodule would be keycodemapdb;

On the topic of keycodemapdb, we designed it as a copylib thing because
it seemed like the simplest approach, but I have wondered whether we
should change tack and promote it as installable data package.

Basically the keycodemap-gen tool ino /usr/bin, and CSV data file into
/usr/share, and perhaps add a pkg-config file to enable apps to query
its existance / path to keycodemap-gen ?

The main downside is we would need to promise back compat of the CLI
tool. The upside is that consumers of it would eliminate a git submodule
and in theory be more up2date, though that depends on the distros actually
updating the datafile periodically.  I'm really on the fence about whether
its worth it vs carrying on as a submodule (or meson subproject if that's
nicer long term).

With regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|



^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2023-03-07 11:20 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-03-02 13:18 [PATCH 0/4] Add meson wrap fallback for slirp & dtc marcandre.lureau
2023-03-02 13:18 ` [PATCH 1/4] mtest2make.py: teach suite name that are just "PROJECT" marcandre.lureau
2023-03-02 13:18 ` [PATCH 2/4] build-sys: prevent meson from downloading wrapped subprojects marcandre.lureau
2023-03-02 13:18 ` [PATCH 3/4] build-sys: add slirp.wrap marcandre.lureau
2023-03-02 13:18 ` [PATCH 4/4] build-sys: replace dtc submodule with dtc.wrap marcandre.lureau
2023-03-06 10:06 ` [PATCH 0/4] Add meson wrap fallback for slirp & dtc Daniel P. Berrangé
2023-03-06 10:17   ` Peter Maydell
2023-03-06 10:25     ` Marc-André Lureau
2023-03-06 10:19   ` Marc-André Lureau
2023-03-06 10:32     ` Daniel P. Berrangé
2023-03-06 10:41       ` Marc-André Lureau
2023-03-06 11:36   ` Paolo Bonzini
2023-03-07 11:19     ` Daniel P. Berrangé

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).