All of lore.kernel.org
 help / color / mirror / Atom feed
* [RFC PATCH for-7.1] Remove the slirp submodule (and only compile with an external libslirp)
@ 2022-04-08 16:47 Thomas Huth
  2022-04-10  4:49 ` Brad Smith
  2022-04-11  7:11 ` Paolo Bonzini
  0 siblings, 2 replies; 11+ messages in thread
From: Thomas Huth @ 2022-04-08 16:47 UTC (permalink / raw)
  To: qemu-devel, Samuel Thibault
  Cc: Marc-André Lureau, Thomas Huth, Daniel P . Berrange

QEMU 7.1 won't support Ubuntu 18.04 anymore, so the last big important
distro that did not have a pre-packaged libslirp has been dismissed.
All other major distros seem to have a libslirp package in their
distribution already - according to repology.org:

          Fedora 34: 4.4.0
  CentOS 8 (RHEL-8): 4.4.0
      Debian Buster: 4.3.1 (in buster-backports)
 OpenSUSE Leap 15.3: 4.3.1
   Ubuntu LTS 20.04: 4.1.0
      FreeBSD Ports: 4.6.1
      NetBSD pkgsrc: 4.3.1
           Homebrew: 4.6.1
        MSYS2 mingw: 4.6.1

The only one that still seems to be missing a libslirp package is
OpenBSD - but I assume that they can add it to their ports system
quickly if required.

So there is no real urgent need for keeping the slirp submodule in
the QEMU tree anymore. Thus let's drop the slirp submodule now and
rely on the libslirp packages from the distributions instead.

Signed-off-by: Thomas Huth <thuth@redhat.com>
---
 configure                     |  22 +------
 meson.build                   | 112 +++++-----------------------------
 .gitlab-ci.d/buildtest.yml    |  19 +++---
 .gitmodules                   |   3 -
 MAINTAINERS                   |   1 -
 meson_options.txt             |   5 +-
 scripts/archive-source.sh     |   2 +-
 scripts/meson-buildoptions.sh |   4 +-
 slirp                         |   1 -
 9 files changed, 29 insertions(+), 140 deletions(-)
 delete mode 160000 slirp

diff --git a/configure b/configure
index 7c08c18358..3aedff78a9 100755
--- a/configure
+++ b/configure
@@ -339,10 +339,8 @@ skip_meson=no
 # 1. Track which submodules are needed
 if test "$default_feature" = no ; then
   capstone="disabled"
-  slirp="disabled"
 else
   capstone="auto"
-  slirp="auto"
 fi
 fdt="auto"
 
@@ -874,14 +872,6 @@ for opt do
   ;;
   --disable-tsan) tsan="no"
   ;;
-  --disable-slirp) slirp="disabled"
-  ;;
-  --enable-slirp) slirp="enabled"
-  ;;
-  --enable-slirp=git) slirp="internal"
-  ;;
-  --enable-slirp=*) slirp="$optarg"
-  ;;
   --disable-xen) xen="disabled"
   ;;
   --enable-xen) xen="enabled"
@@ -2576,16 +2566,6 @@ EOF
   fi
 fi
 
-##########################################
-# check for slirp
-
-case "$slirp" in
-  auto | enabled | internal)
-    # Simpler to always update submodule, even if not needed.
-    git_submodules="${git_submodules} slirp"
-    ;;
-esac
-
 ##########################################
 # check for usable __NR_keyctl syscall
 
@@ -3169,7 +3149,7 @@ if test "$skip_meson" = no; then
         -Db_pie=$(if test "$pie" = yes; then echo true; else echo false; fi) \
         -Db_coverage=$(if test "$gcov" = yes; then echo true; else echo false; fi) \
         -Db_lto=$lto -Dcfi=$cfi -Dtcg=$tcg -Dxen=$xen \
-        -Dcapstone=$capstone -Dfdt=$fdt -Dslirp=$slirp \
+        -Dcapstone=$capstone -Dfdt=$fdt \
         $(test -n "${LIB_FUZZING_ENGINE+xxx}" && echo "-Dfuzzing_engine=$LIB_FUZZING_ENGINE") \
         $(if test "$default_feature" = no; then echo "-Dauto_features=disabled"; fi) \
         "$@" $cross_arg "$PWD" "$source_path"
diff --git a/meson.build b/meson.build
index 861de93c4f..5d93030da5 100644
--- a/meson.build
+++ b/meson.build
@@ -560,6 +560,20 @@ else
                          method: 'pkg-config', kwargs: static_kwargs)
 endif
 
+slirp = not_found
+if not get_option('slirp').auto() or have_system
+  slirp = dependency('slirp', required: get_option('slirp'),
+                     method: 'pkg-config', kwargs: static_kwargs)
+  # We cannot compile QEMU with CFI and libslirp enabled at the same time.
+  # This is because we register slirp functions as callbacks for QEMU Timers.
+  # When using a system-wide shared libslirp, the type information for the
+  # callback is missing and the timer call produces a false positive with CFI.
+  if get_option('cfi')
+    error('Control-Flow Integrity is not compatible with libslirp.' \
+           + ' Please configure with --disable-slirp')
+  endif
+endif
+
 vde = not_found
 if not get_option('vde').auto() or have_system or have_tools
   vde = cc.find_library('vdeplug', has_headers: ['libvdeplug.h'],
@@ -2406,100 +2420,6 @@ if capstone_opt == 'internal'
                                 include_directories: 'capstone/include/capstone')
 endif
 
-slirp = not_found
-slirp_opt = 'disabled'
-if have_system
-  slirp_opt = get_option('slirp')
-  if slirp_opt in ['enabled', 'auto', 'system']
-    have_internal = fs.exists(meson.current_source_dir() / 'slirp/meson.build')
-    slirp = dependency('slirp', kwargs: static_kwargs,
-                       method: 'pkg-config',
-                       required: slirp_opt == 'system' or
-                                 slirp_opt == 'enabled' and not have_internal)
-    if slirp.found()
-      slirp_opt = 'system'
-    elif have_internal
-      slirp_opt = 'internal'
-    else
-      slirp_opt = 'disabled'
-    endif
-  endif
-  if slirp_opt == 'internal'
-    slirp_deps = []
-    if targetos == 'windows'
-      slirp_deps = cc.find_library('iphlpapi')
-    elif targetos == 'darwin'
-      slirp_deps = cc.find_library('resolv')
-    endif
-    slirp_conf = configuration_data()
-    slirp_conf.set('SLIRP_MAJOR_VERSION', meson.project_version().split('.')[0])
-    slirp_conf.set('SLIRP_MINOR_VERSION', meson.project_version().split('.')[1])
-    slirp_conf.set('SLIRP_MICRO_VERSION', meson.project_version().split('.')[2])
-    slirp_conf.set_quoted('SLIRP_VERSION_STRING', meson.project_version())
-    slirp_cargs = ['-DG_LOG_DOMAIN="Slirp"']
-    slirp_files = [
-      'slirp/src/arp_table.c',
-      'slirp/src/bootp.c',
-      'slirp/src/cksum.c',
-      'slirp/src/dhcpv6.c',
-      'slirp/src/dnssearch.c',
-      'slirp/src/if.c',
-      'slirp/src/ip6_icmp.c',
-      'slirp/src/ip6_input.c',
-      'slirp/src/ip6_output.c',
-      'slirp/src/ip_icmp.c',
-      'slirp/src/ip_input.c',
-      'slirp/src/ip_output.c',
-      'slirp/src/mbuf.c',
-      'slirp/src/misc.c',
-      'slirp/src/ncsi.c',
-      'slirp/src/ndp_table.c',
-      'slirp/src/sbuf.c',
-      'slirp/src/slirp.c',
-      'slirp/src/socket.c',
-      'slirp/src/state.c',
-      'slirp/src/stream.c',
-      'slirp/src/tcp_input.c',
-      'slirp/src/tcp_output.c',
-      'slirp/src/tcp_subr.c',
-      'slirp/src/tcp_timer.c',
-      'slirp/src/tftp.c',
-      'slirp/src/udp.c',
-      'slirp/src/udp6.c',
-      'slirp/src/util.c',
-      'slirp/src/version.c',
-      'slirp/src/vmstate.c',
-    ]
-
-    configure_file(
-      input : 'slirp/src/libslirp-version.h.in',
-      output : 'libslirp-version.h',
-      configuration: slirp_conf)
-
-    slirp_inc = include_directories('slirp', 'slirp/src')
-    libslirp = static_library('slirp',
-                              build_by_default: false,
-                              sources: slirp_files,
-                              c_args: slirp_cargs,
-                              include_directories: slirp_inc)
-    slirp = declare_dependency(link_with: libslirp,
-                               dependencies: slirp_deps,
-                               include_directories: slirp_inc)
-  endif
-endif
-
-# For CFI, we need to compile slirp as a static library together with qemu.
-# This is because we register slirp functions as callbacks for QEMU Timers.
-# When using a system-wide shared libslirp, the type information for the
-# callback is missing and the timer call produces a false positive with CFI.
-#
-# Now that slirp_opt has been defined, check if the selected slirp is compatible
-# with control-flow integrity.
-if get_option('cfi') and slirp_opt == 'system'
-  error('Control-Flow Integrity is not compatible with system-wide slirp.' \
-         + ' Please configure with --enable-slirp=git')
-endif
-
 fdt = not_found
 if have_system
   fdt_opt = get_option('fdt')
@@ -3471,7 +3391,7 @@ summary_info += {'genisoimage':       config_host['GENISOIMAGE']}
 if targetos == 'windows' and have_ga
   summary_info += {'wixl':            wixl}
 endif
-if slirp_opt != 'disabled' and have_system
+if slirp.found() and have_system
   summary_info += {'smbd':            have_slirp_smbd ? smbd_path : false}
 endif
 summary(summary_info, bool_yn: true, section: 'Host binaries')
@@ -3666,7 +3586,7 @@ summary_info += {'SDL image support': sdl_image}
 summary_info += {'GTK support':       gtk}
 summary_info += {'pixman':            pixman}
 summary_info += {'VTE support':       vte}
-summary_info += {'slirp support':     slirp_opt == 'internal' ? slirp_opt : slirp}
+summary_info += {'slirp support':     slirp}
 summary_info += {'libtasn1':          tasn1}
 summary_info += {'PAM':               pam}
 summary_info += {'iconv support':     iconv}
diff --git a/.gitlab-ci.d/buildtest.yml b/.gitlab-ci.d/buildtest.yml
index 0aea7ab84c..19dc9f4590 100644
--- a/.gitlab-ci.d/buildtest.yml
+++ b/.gitlab-ci.d/buildtest.yml
@@ -41,7 +41,7 @@ build-system-ubuntu:
     job: amd64-ubuntu2004-container
   variables:
     IMAGE: ubuntu2004
-    CONFIGURE_ARGS: --enable-docs --enable-fdt=system --enable-slirp=system
+    CONFIGURE_ARGS: --enable-docs --enable-fdt=system
     TARGETS: aarch64-softmmu alpha-softmmu cris-softmmu hppa-softmmu
       microblazeel-softmmu mips64el-softmmu
     MAKE_CHECK_ARGS: check-build
@@ -118,7 +118,7 @@ build-system-fedora:
   variables:
     IMAGE: fedora
     CONFIGURE_ARGS: --disable-gcrypt --enable-nettle --enable-docs
-             --enable-fdt=system --enable-slirp=system --enable-capstone=system
+             --enable-fdt=system --enable-capstone=system
     TARGETS: tricore-softmmu microblaze-softmmu mips-softmmu
       xtensa-softmmu m68k-softmmu riscv32-softmmu ppc-softmmu sparc64-softmmu
     MAKE_CHECK_ARGS: check-build
@@ -335,10 +335,8 @@ clang-user:
 # On gitlab runners, default value sometimes end up calling 2 lds concurrently and
 # triggers an Out-Of-Memory error
 #
-# Since slirp callbacks are used in QEMU Timers, slirp needs to be compiled together
-# with QEMU and linked as a static library to avoid false positives in CFI checks.
-# This can be accomplished by using -enable-slirp=git, which avoids the use of
-# a system-wide version of the library
+# Since slirp callbacks are used in QEMU Timers, we cannot use libslirp with
+# CFI builds, and thus have to disable it here.
 #
 # Split in three sets of build/check/avocado to limit the execution time of each
 # job
@@ -351,7 +349,7 @@ build-cfi-aarch64:
     AR: llvm-ar
     IMAGE: fedora
     CONFIGURE_ARGS: --cc=clang --cxx=clang++ --enable-cfi --enable-cfi-debug
-      --enable-safe-stack --enable-slirp=git
+      --enable-safe-stack --disable-slirp
     TARGETS: aarch64-softmmu
     MAKE_CHECK_ARGS: check-build
   timeout: 70m
@@ -393,7 +391,7 @@ build-cfi-ppc64-s390x:
     AR: llvm-ar
     IMAGE: fedora
     CONFIGURE_ARGS: --cc=clang --cxx=clang++ --enable-cfi --enable-cfi-debug
-      --enable-safe-stack --enable-slirp=git
+      --enable-safe-stack --disable-slirp
     TARGETS: ppc64-softmmu s390x-softmmu
     MAKE_CHECK_ARGS: check-build
   timeout: 70m
@@ -435,7 +433,7 @@ build-cfi-x86_64:
     AR: llvm-ar
     IMAGE: fedora
     CONFIGURE_ARGS: --cc=clang --cxx=clang++ --enable-cfi --enable-cfi-debug
-      --enable-safe-stack --enable-slirp=git
+      --enable-safe-stack --disable-slirp
     TARGETS: x86_64-softmmu
     MAKE_CHECK_ARGS: check-build
   timeout: 70m
@@ -469,7 +467,7 @@ tsan-build:
   variables:
     IMAGE: ubuntu2004
     CONFIGURE_ARGS: --enable-tsan --cc=clang-10 --cxx=clang++-10
-          --enable-trace-backends=ust --enable-fdt=system --enable-slirp=system
+          --enable-trace-backends=ust --enable-fdt=system --disable-slirp
     TARGETS: x86_64-softmmu ppc64-softmmu riscv64-softmmu x86_64-linux-user
     MAKE_CHECK_ARGS: bench V=1
 
@@ -571,7 +569,6 @@ build-without-default-features:
       --disable-capstone
       --disable-pie
       --disable-qom-cast-debug
-      --disable-slirp
       --disable-strip
     TARGETS: avr-softmmu i386-softmmu mips64-softmmu s390x-softmmu sh4-softmmu
       sparc64-softmmu hexagon-linux-user i386-linux-user s390x-linux-user
diff --git a/.gitmodules b/.gitmodules
index f4b6a9b401..d55cdb5036 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -49,9 +49,6 @@
 [submodule "roms/edk2"]
 	path = roms/edk2
 	url = https://gitlab.com/qemu-project/edk2.git
-[submodule "slirp"]
-	path = slirp
-	url = https://gitlab.com/qemu-project/libslirp.git
 [submodule "roms/opensbi"]
 	path = roms/opensbi
 	url = 	https://gitlab.com/qemu-project/opensbi.git
diff --git a/MAINTAINERS b/MAINTAINERS
index 4ad2451e03..9a4fa68cc0 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -2924,7 +2924,6 @@ F: include/hw/registerfields.h
 SLIRP
 M: Samuel Thibault <samuel.thibault@ens-lyon.org>
 S: Maintained
-F: slirp/
 F: net/slirp.c
 F: include/net/slirp.h
 T: git https://people.debian.org/~sthibault/qemu.git slirp
diff --git a/meson_options.txt b/meson_options.txt
index 52b11cead4..668c859d84 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -173,6 +173,8 @@ option('l2tpv3', type : 'feature', value : 'auto',
        description: 'l2tpv3 network backend support')
 option('netmap', type : 'feature', value : 'auto',
        description: 'netmap network backend support')
+option('slirp', type: 'feature', value: 'auto',
+       description: 'libslirp user mode network backend support')
 option('vde', type : 'feature', value : 'auto',
        description: 'vde network backend support')
 option('virglrenderer', type : 'feature', value : 'auto',
@@ -223,9 +225,6 @@ option('virtiofsd', type: 'feature', value: 'auto',
 option('capstone', type: 'combo', value: 'auto',
        choices: ['disabled', 'enabled', 'auto', 'system', 'internal'],
        description: 'Whether and how to find the capstone library')
-option('slirp', type: 'combo', value: 'auto',
-       choices: ['disabled', 'enabled', 'auto', 'system', 'internal'],
-       description: 'Whether and how to find the slirp library')
 option('fdt', type: 'combo', value: 'auto',
        choices: ['disabled', 'enabled', 'auto', 'system', 'internal'],
        description: 'Whether and how to find the libfdt library')
diff --git a/scripts/archive-source.sh b/scripts/archive-source.sh
index c6169db69f..23e042dacd 100755
--- a/scripts/archive-source.sh
+++ b/scripts/archive-source.sh
@@ -26,7 +26,7 @@ sub_file="${sub_tdir}/submodule.tar"
 # independent of what the developer currently has initialized
 # in their checkout, because the build environment is completely
 # different to the host OS.
-submodules="dtc slirp meson ui/keycodemapdb"
+submodules="dtc meson ui/keycodemapdb"
 submodules="$submodules tests/fp/berkeley-softfloat-3 tests/fp/berkeley-testfloat-3"
 sub_deinit=""
 
diff --git a/scripts/meson-buildoptions.sh b/scripts/meson-buildoptions.sh
index 1e26f4571e..dcfecb69ad 100644
--- a/scripts/meson-buildoptions.sh
+++ b/scripts/meson-buildoptions.sh
@@ -23,8 +23,6 @@ meson_options_help() {
   printf "%s\n" '  --enable-qom-cast-debug  cast debugging support'
   printf "%s\n" '  --enable-rng-none        dummy RNG, avoid using /dev/(u)random and'
   printf "%s\n" '                           getrandom()'
-  printf "%s\n" '  --enable-slirp[=CHOICE]  Whether and how to find the slirp library'
-  printf "%s\n" '                           (choices: auto/disabled/enabled/internal/system)'
   printf "%s\n" '  --enable-strip           Strip targets on install'
   printf "%s\n" '  --enable-tcg-interpreter TCG with bytecode interpreter (slow)'
   printf "%s\n" '  --enable-trace-backends=CHOICE'
@@ -103,6 +101,7 @@ meson_options_help() {
   printf "%s\n" '  sdl-image       SDL Image support for icons'
   printf "%s\n" '  seccomp         seccomp support'
   printf "%s\n" '  selinux         SELinux support in qemu-nbd'
+  printf "%s\n" '  slirp           libslirp user mode network backend support'
   printf "%s\n" '  slirp-smbd      use smbd (at path --smbd=*) in slirp networking'
   printf "%s\n" '  smartcard       CA smartcard emulation support'
   printf "%s\n" '  snappy          snappy compression support'
@@ -303,7 +302,6 @@ _meson_option_parse() {
     --disable-selinux) printf "%s" -Dselinux=disabled ;;
     --enable-slirp) printf "%s" -Dslirp=enabled ;;
     --disable-slirp) printf "%s" -Dslirp=disabled ;;
-    --enable-slirp=*) quote_sh "-Dslirp=$2" ;;
     --enable-slirp-smbd) printf "%s" -Dslirp_smbd=enabled ;;
     --disable-slirp-smbd) printf "%s" -Dslirp_smbd=disabled ;;
     --enable-smartcard) printf "%s" -Dsmartcard=enabled ;;
diff --git a/slirp b/slirp
deleted file mode 160000
index a88d9ace23..0000000000
--- a/slirp
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit a88d9ace234a24ce1c17189642ef9104799425e0
-- 
2.27.0



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

* Re: [RFC PATCH for-7.1] Remove the slirp submodule (and only compile with an external libslirp)
  2022-04-08 16:47 [RFC PATCH for-7.1] Remove the slirp submodule (and only compile with an external libslirp) Thomas Huth
@ 2022-04-10  4:49 ` Brad Smith
  2022-04-10  9:06   ` Peter Maydell
  2022-04-11  7:11 ` Paolo Bonzini
  1 sibling, 1 reply; 11+ messages in thread
From: Brad Smith @ 2022-04-10  4:49 UTC (permalink / raw)
  To: Thomas Huth, qemu-devel, Samuel Thibault
  Cc: Marc-André Lureau, Daniel P . Berrange

On 4/8/2022 12:47 PM, Thomas Huth wrote:
> QEMU 7.1 won't support Ubuntu 18.04 anymore, so the last big important
> distro that did not have a pre-packaged libslirp has been dismissed.
> All other major distros seem to have a libslirp package in their
> distribution already - according to repology.org:
>
>            Fedora 34: 4.4.0
>    CentOS 8 (RHEL-8): 4.4.0
>        Debian Buster: 4.3.1 (in buster-backports)
>   OpenSUSE Leap 15.3: 4.3.1
>     Ubuntu LTS 20.04: 4.1.0
>        FreeBSD Ports: 4.6.1
>        NetBSD pkgsrc: 4.3.1
>             Homebrew: 4.6.1
>          MSYS2 mingw: 4.6.1
>
> The only one that still seems to be missing a libslirp package is
> OpenBSD - but I assume that they can add it to their ports system
> quickly if required.
>
> So there is no real urgent need for keeping the slirp submodule in
> the QEMU tree anymore. Thus let's drop the slirp submodule now and
> rely on the libslirp packages from the distributions instead.
>
> Signed-off-by: Thomas Huth <thuth@redhat.com>


I wish I had seen this earlier as our 7.1 release was just tagged.

I have whipped up a port of 4.6.1 for OpenBSD as it was pretty simple. I 
will
see about submitting it in a number of days when the tree opens.



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

* Re: [RFC PATCH for-7.1] Remove the slirp submodule (and only compile with an external libslirp)
  2022-04-10  4:49 ` Brad Smith
@ 2022-04-10  9:06   ` Peter Maydell
  2022-04-10 23:50     ` Brad Smith
  0 siblings, 1 reply; 11+ messages in thread
From: Peter Maydell @ 2022-04-10  9:06 UTC (permalink / raw)
  To: Brad Smith
  Cc: Samuel Thibault, Thomas Huth, Daniel P . Berrange, qemu-devel,
	Marc-André Lureau

On Sun, 10 Apr 2022 at 05:51, Brad Smith <brad@comstyle.com> wrote:
>
> On 4/8/2022 12:47 PM, Thomas Huth wrote:
> > QEMU 7.1 won't support Ubuntu 18.04 anymore, so the last big important
> > distro that did not have a pre-packaged libslirp has been dismissed.
> > All other major distros seem to have a libslirp package in their
> > distribution already - according to repology.org:
> >
> >            Fedora 34: 4.4.0
> >    CentOS 8 (RHEL-8): 4.4.0
> >        Debian Buster: 4.3.1 (in buster-backports)
> >   OpenSUSE Leap 15.3: 4.3.1
> >     Ubuntu LTS 20.04: 4.1.0
> >        FreeBSD Ports: 4.6.1
> >        NetBSD pkgsrc: 4.3.1
> >             Homebrew: 4.6.1
> >          MSYS2 mingw: 4.6.1
> >
> > The only one that still seems to be missing a libslirp package is
> > OpenBSD - but I assume that they can add it to their ports system
> > quickly if required.

> I wish I had seen this earlier as our 7.1 release was just tagged.
>
> I have whipped up a port of 4.6.1 for OpenBSD as it was pretty simple. I
> will
> see about submitting it in a number of days when the tree opens.

How awkward would it be for an end-user who's on OpenBSD 7.1 to
build a QEMU that doesn't have libslirp? (That is, is it easy
and common for an end user to pull in a port of libslirp that only
came along in a later OpenBSD, or would they instead have to
manually compile libslirp themselves from the upstream sources?)

(I'm asking here because if it's painful, then we should perhaps
defer dropping our submodule copy of libslirp a little longer.)

thanks
-- PMM


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

* Re: [RFC PATCH for-7.1] Remove the slirp submodule (and only compile with an external libslirp)
  2022-04-10  9:06   ` Peter Maydell
@ 2022-04-10 23:50     ` Brad Smith
  2022-04-11  6:55       ` Thomas Huth
  0 siblings, 1 reply; 11+ messages in thread
From: Brad Smith @ 2022-04-10 23:50 UTC (permalink / raw)
  To: Peter Maydell
  Cc: Thomas Huth, qemu-devel, Samuel Thibault, Marc-André Lureau,
	Daniel P . Berrange

On 4/10/2022 5:06 AM, Peter Maydell wrote:
> On Sun, 10 Apr 2022 at 05:51, Brad Smith <brad@comstyle.com> wrote:
>> On 4/8/2022 12:47 PM, Thomas Huth wrote:
>>> QEMU 7.1 won't support Ubuntu 18.04 anymore, so the last big important
>>> distro that did not have a pre-packaged libslirp has been dismissed.
>>> All other major distros seem to have a libslirp package in their
>>> distribution already - according to repology.org:
>>>
>>>             Fedora 34: 4.4.0
>>>     CentOS 8 (RHEL-8): 4.4.0
>>>         Debian Buster: 4.3.1 (in buster-backports)
>>>    OpenSUSE Leap 15.3: 4.3.1
>>>      Ubuntu LTS 20.04: 4.1.0
>>>         FreeBSD Ports: 4.6.1
>>>         NetBSD pkgsrc: 4.3.1
>>>              Homebrew: 4.6.1
>>>           MSYS2 mingw: 4.6.1
>>>
>>> The only one that still seems to be missing a libslirp package is
>>> OpenBSD - but I assume that they can add it to their ports system
>>> quickly if required.
>> I wish I had seen this earlier as our 7.1 release was just tagged.
>>
>> I have whipped up a port of 4.6.1 for OpenBSD as it was pretty simple. I
>> will
>> see about submitting it in a number of days when the tree opens.
> How awkward would it be for an end-user who's on OpenBSD 7.1 to
> build a QEMU that doesn't have libslirp? (That is, is it easy
> and common for an end user to pull in a port of libslirp that only
> came along in a later OpenBSD, or would they instead have to
> manually compile libslirp themselves from the upstream sources?)
>
> (I'm asking here because if it's painful, then we should perhaps
> defer dropping our submodule copy of libslirp a little longer.)
>
> thanks
> -- PMM

They would have to pull down a -current ports tree and build it. No package
would exist for the release. It is possible, but not "supported". I have 
not looked
at the CI bits to see how difficult that would be.

Our release cycles are 6 months and the next release will be in the middle
of October.


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

* Re: [RFC PATCH for-7.1] Remove the slirp submodule (and only compile with an external libslirp)
  2022-04-10 23:50     ` Brad Smith
@ 2022-04-11  6:55       ` Thomas Huth
  2022-04-14  7:23         ` Brad Smith
  2022-04-19 16:24         ` Daniel P. Berrangé
  0 siblings, 2 replies; 11+ messages in thread
From: Thomas Huth @ 2022-04-11  6:55 UTC (permalink / raw)
  To: Brad Smith, Peter Maydell
  Cc: Samuel Thibault, Daniel P . Berrange, qemu-devel, Marc-André Lureau

On 11/04/2022 01.50, Brad Smith wrote:
> On 4/10/2022 5:06 AM, Peter Maydell wrote:
>> On Sun, 10 Apr 2022 at 05:51, Brad Smith <brad@comstyle.com> wrote:
>>> On 4/8/2022 12:47 PM, Thomas Huth wrote:
>>>> QEMU 7.1 won't support Ubuntu 18.04 anymore, so the last big important
>>>> distro that did not have a pre-packaged libslirp has been dismissed.
>>>> All other major distros seem to have a libslirp package in their
>>>> distribution already - according to repology.org:
>>>>
>>>>             Fedora 34: 4.4.0
>>>>     CentOS 8 (RHEL-8): 4.4.0
>>>>         Debian Buster: 4.3.1 (in buster-backports)
>>>>    OpenSUSE Leap 15.3: 4.3.1
>>>>      Ubuntu LTS 20.04: 4.1.0
>>>>         FreeBSD Ports: 4.6.1
>>>>         NetBSD pkgsrc: 4.3.1
>>>>              Homebrew: 4.6.1
>>>>           MSYS2 mingw: 4.6.1
>>>>
>>>> The only one that still seems to be missing a libslirp package is
>>>> OpenBSD - but I assume that they can add it to their ports system
>>>> quickly if required.
>>> I wish I had seen this earlier as our 7.1 release was just tagged.
>>>
>>> I have whipped up a port of 4.6.1 for OpenBSD as it was pretty simple. I
>>> will
>>> see about submitting it in a number of days when the tree opens.
>> How awkward would it be for an end-user who's on OpenBSD 7.1 to
>> build a QEMU that doesn't have libslirp? (That is, is it easy
>> and common for an end user to pull in a port of libslirp that only
>> came along in a later OpenBSD, or would they instead have to
>> manually compile libslirp themselves from the upstream sources?)
>>
>> (I'm asking here because if it's painful, then we should perhaps
>> defer dropping our submodule copy of libslirp a little longer.)
>>
>> thanks
>> -- PMM
> 
> They would have to pull down a -current ports tree and build it. No package
> would exist for the release. It is possible, but not "supported". I have not 
> looked
> at the CI bits to see how difficult that would be.
> 
> Our release cycles are 6 months and the next release will be in the middle
> of October.

OK, thanks for the update, Brad ... so I guess we should defer this patch to 
QEMU 7.2 (to be released in december) instead?
(which would be fine for me - I just wanted to get the discussion started, 
that's also why I've marked this patch as RFC)

  Thomas



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

* Re: [RFC PATCH for-7.1] Remove the slirp submodule (and only compile with an external libslirp)
  2022-04-08 16:47 [RFC PATCH for-7.1] Remove the slirp submodule (and only compile with an external libslirp) Thomas Huth
  2022-04-10  4:49 ` Brad Smith
@ 2022-04-11  7:11 ` Paolo Bonzini
  2022-04-11  8:11   ` Paolo Bonzini
  1 sibling, 1 reply; 11+ messages in thread
From: Paolo Bonzini @ 2022-04-11  7:11 UTC (permalink / raw)
  To: Thomas Huth, qemu-devel, Samuel Thibault
  Cc: Marc-André Lureau, Daniel P . Berrange

On 4/8/22 18:47, Thomas Huth wrote:
> The only one that still seems to be missing a libslirp package is
> OpenBSD - but I assume that they can add it to their ports system
> quickly if required.
> 
> So there is no real urgent need for keeping the slirp submodule in
> the QEMU tree anymore. Thus let's drop the slirp submodule now and
> rely on the libslirp packages from the distributions instead.
> 
> Signed-off-by: Thomas Huth <thuth@redhat.com>

I would like to have feature parity even with CFI.  I had written the 
libslirp side a few months ago, but never tested it because I didn't get 
to the QEMU side.

I updated it and you can find it at 
https://gitlab.freedesktop.org/slirp/libslirp/-/merge_requests/117. 
I'll get to the QEMU side now.

Paolo

> ---
>   configure                     |  22 +------
>   meson.build                   | 112 +++++-----------------------------
>   .gitlab-ci.d/buildtest.yml    |  19 +++---
>   .gitmodules                   |   3 -
>   MAINTAINERS                   |   1 -
>   meson_options.txt             |   5 +-
>   scripts/archive-source.sh     |   2 +-
>   scripts/meson-buildoptions.sh |   4 +-
>   slirp                         |   1 -
>   9 files changed, 29 insertions(+), 140 deletions(-)
>   delete mode 160000 slirp
> 
> diff --git a/configure b/configure
> index 7c08c18358..3aedff78a9 100755
> --- a/configure
> +++ b/configure
> @@ -339,10 +339,8 @@ skip_meson=no
>   # 1. Track which submodules are needed
>   if test "$default_feature" = no ; then
>     capstone="disabled"
> -  slirp="disabled"
>   else
>     capstone="auto"
> -  slirp="auto"
>   fi
>   fdt="auto"
>   
> @@ -874,14 +872,6 @@ for opt do
>     ;;
>     --disable-tsan) tsan="no"
>     ;;
> -  --disable-slirp) slirp="disabled"
> -  ;;
> -  --enable-slirp) slirp="enabled"
> -  ;;
> -  --enable-slirp=git) slirp="internal"
> -  ;;
> -  --enable-slirp=*) slirp="$optarg"
> -  ;;
>     --disable-xen) xen="disabled"
>     ;;
>     --enable-xen) xen="enabled"
> @@ -2576,16 +2566,6 @@ EOF
>     fi
>   fi
>   
> -##########################################
> -# check for slirp
> -
> -case "$slirp" in
> -  auto | enabled | internal)
> -    # Simpler to always update submodule, even if not needed.
> -    git_submodules="${git_submodules} slirp"
> -    ;;
> -esac
> -
>   ##########################################
>   # check for usable __NR_keyctl syscall
>   
> @@ -3169,7 +3149,7 @@ if test "$skip_meson" = no; then
>           -Db_pie=$(if test "$pie" = yes; then echo true; else echo false; fi) \
>           -Db_coverage=$(if test "$gcov" = yes; then echo true; else echo false; fi) \
>           -Db_lto=$lto -Dcfi=$cfi -Dtcg=$tcg -Dxen=$xen \
> -        -Dcapstone=$capstone -Dfdt=$fdt -Dslirp=$slirp \
> +        -Dcapstone=$capstone -Dfdt=$fdt \
>           $(test -n "${LIB_FUZZING_ENGINE+xxx}" && echo "-Dfuzzing_engine=$LIB_FUZZING_ENGINE") \
>           $(if test "$default_feature" = no; then echo "-Dauto_features=disabled"; fi) \
>           "$@" $cross_arg "$PWD" "$source_path"
> diff --git a/meson.build b/meson.build
> index 861de93c4f..5d93030da5 100644
> --- a/meson.build
> +++ b/meson.build
> @@ -560,6 +560,20 @@ else
>                            method: 'pkg-config', kwargs: static_kwargs)
>   endif
>   
> +slirp = not_found
> +if not get_option('slirp').auto() or have_system
> +  slirp = dependency('slirp', required: get_option('slirp'),
> +                     method: 'pkg-config', kwargs: static_kwargs)
> +  # We cannot compile QEMU with CFI and libslirp enabled at the same time.
> +  # This is because we register slirp functions as callbacks for QEMU Timers.
> +  # When using a system-wide shared libslirp, the type information for the
> +  # callback is missing and the timer call produces a false positive with CFI.
> +  if get_option('cfi')
> +    error('Control-Flow Integrity is not compatible with libslirp.' \
> +           + ' Please configure with --disable-slirp')
> +  endif
> +endif
> +
>   vde = not_found
>   if not get_option('vde').auto() or have_system or have_tools
>     vde = cc.find_library('vdeplug', has_headers: ['libvdeplug.h'],
> @@ -2406,100 +2420,6 @@ if capstone_opt == 'internal'
>                                   include_directories: 'capstone/include/capstone')
>   endif
>   
> -slirp = not_found
> -slirp_opt = 'disabled'
> -if have_system
> -  slirp_opt = get_option('slirp')
> -  if slirp_opt in ['enabled', 'auto', 'system']
> -    have_internal = fs.exists(meson.current_source_dir() / 'slirp/meson.build')
> -    slirp = dependency('slirp', kwargs: static_kwargs,
> -                       method: 'pkg-config',
> -                       required: slirp_opt == 'system' or
> -                                 slirp_opt == 'enabled' and not have_internal)
> -    if slirp.found()
> -      slirp_opt = 'system'
> -    elif have_internal
> -      slirp_opt = 'internal'
> -    else
> -      slirp_opt = 'disabled'
> -    endif
> -  endif
> -  if slirp_opt == 'internal'
> -    slirp_deps = []
> -    if targetos == 'windows'
> -      slirp_deps = cc.find_library('iphlpapi')
> -    elif targetos == 'darwin'
> -      slirp_deps = cc.find_library('resolv')
> -    endif
> -    slirp_conf = configuration_data()
> -    slirp_conf.set('SLIRP_MAJOR_VERSION', meson.project_version().split('.')[0])
> -    slirp_conf.set('SLIRP_MINOR_VERSION', meson.project_version().split('.')[1])
> -    slirp_conf.set('SLIRP_MICRO_VERSION', meson.project_version().split('.')[2])
> -    slirp_conf.set_quoted('SLIRP_VERSION_STRING', meson.project_version())
> -    slirp_cargs = ['-DG_LOG_DOMAIN="Slirp"']
> -    slirp_files = [
> -      'slirp/src/arp_table.c',
> -      'slirp/src/bootp.c',
> -      'slirp/src/cksum.c',
> -      'slirp/src/dhcpv6.c',
> -      'slirp/src/dnssearch.c',
> -      'slirp/src/if.c',
> -      'slirp/src/ip6_icmp.c',
> -      'slirp/src/ip6_input.c',
> -      'slirp/src/ip6_output.c',
> -      'slirp/src/ip_icmp.c',
> -      'slirp/src/ip_input.c',
> -      'slirp/src/ip_output.c',
> -      'slirp/src/mbuf.c',
> -      'slirp/src/misc.c',
> -      'slirp/src/ncsi.c',
> -      'slirp/src/ndp_table.c',
> -      'slirp/src/sbuf.c',
> -      'slirp/src/slirp.c',
> -      'slirp/src/socket.c',
> -      'slirp/src/state.c',
> -      'slirp/src/stream.c',
> -      'slirp/src/tcp_input.c',
> -      'slirp/src/tcp_output.c',
> -      'slirp/src/tcp_subr.c',
> -      'slirp/src/tcp_timer.c',
> -      'slirp/src/tftp.c',
> -      'slirp/src/udp.c',
> -      'slirp/src/udp6.c',
> -      'slirp/src/util.c',
> -      'slirp/src/version.c',
> -      'slirp/src/vmstate.c',
> -    ]
> -
> -    configure_file(
> -      input : 'slirp/src/libslirp-version.h.in',
> -      output : 'libslirp-version.h',
> -      configuration: slirp_conf)
> -
> -    slirp_inc = include_directories('slirp', 'slirp/src')
> -    libslirp = static_library('slirp',
> -                              build_by_default: false,
> -                              sources: slirp_files,
> -                              c_args: slirp_cargs,
> -                              include_directories: slirp_inc)
> -    slirp = declare_dependency(link_with: libslirp,
> -                               dependencies: slirp_deps,
> -                               include_directories: slirp_inc)
> -  endif
> -endif
> -
> -# For CFI, we need to compile slirp as a static library together with qemu.
> -# This is because we register slirp functions as callbacks for QEMU Timers.
> -# When using a system-wide shared libslirp, the type information for the
> -# callback is missing and the timer call produces a false positive with CFI.
> -#
> -# Now that slirp_opt has been defined, check if the selected slirp is compatible
> -# with control-flow integrity.
> -if get_option('cfi') and slirp_opt == 'system'
> -  error('Control-Flow Integrity is not compatible with system-wide slirp.' \
> -         + ' Please configure with --enable-slirp=git')
> -endif
> -
>   fdt = not_found
>   if have_system
>     fdt_opt = get_option('fdt')
> @@ -3471,7 +3391,7 @@ summary_info += {'genisoimage':       config_host['GENISOIMAGE']}
>   if targetos == 'windows' and have_ga
>     summary_info += {'wixl':            wixl}
>   endif
> -if slirp_opt != 'disabled' and have_system
> +if slirp.found() and have_system
>     summary_info += {'smbd':            have_slirp_smbd ? smbd_path : false}
>   endif
>   summary(summary_info, bool_yn: true, section: 'Host binaries')
> @@ -3666,7 +3586,7 @@ summary_info += {'SDL image support': sdl_image}
>   summary_info += {'GTK support':       gtk}
>   summary_info += {'pixman':            pixman}
>   summary_info += {'VTE support':       vte}
> -summary_info += {'slirp support':     slirp_opt == 'internal' ? slirp_opt : slirp}
> +summary_info += {'slirp support':     slirp}
>   summary_info += {'libtasn1':          tasn1}
>   summary_info += {'PAM':               pam}
>   summary_info += {'iconv support':     iconv}
> diff --git a/.gitlab-ci.d/buildtest.yml b/.gitlab-ci.d/buildtest.yml
> index 0aea7ab84c..19dc9f4590 100644
> --- a/.gitlab-ci.d/buildtest.yml
> +++ b/.gitlab-ci.d/buildtest.yml
> @@ -41,7 +41,7 @@ build-system-ubuntu:
>       job: amd64-ubuntu2004-container
>     variables:
>       IMAGE: ubuntu2004
> -    CONFIGURE_ARGS: --enable-docs --enable-fdt=system --enable-slirp=system
> +    CONFIGURE_ARGS: --enable-docs --enable-fdt=system
>       TARGETS: aarch64-softmmu alpha-softmmu cris-softmmu hppa-softmmu
>         microblazeel-softmmu mips64el-softmmu
>       MAKE_CHECK_ARGS: check-build
> @@ -118,7 +118,7 @@ build-system-fedora:
>     variables:
>       IMAGE: fedora
>       CONFIGURE_ARGS: --disable-gcrypt --enable-nettle --enable-docs
> -             --enable-fdt=system --enable-slirp=system --enable-capstone=system
> +             --enable-fdt=system --enable-capstone=system
>       TARGETS: tricore-softmmu microblaze-softmmu mips-softmmu
>         xtensa-softmmu m68k-softmmu riscv32-softmmu ppc-softmmu sparc64-softmmu
>       MAKE_CHECK_ARGS: check-build
> @@ -335,10 +335,8 @@ clang-user:
>   # On gitlab runners, default value sometimes end up calling 2 lds concurrently and
>   # triggers an Out-Of-Memory error
>   #
> -# Since slirp callbacks are used in QEMU Timers, slirp needs to be compiled together
> -# with QEMU and linked as a static library to avoid false positives in CFI checks.
> -# This can be accomplished by using -enable-slirp=git, which avoids the use of
> -# a system-wide version of the library
> +# Since slirp callbacks are used in QEMU Timers, we cannot use libslirp with
> +# CFI builds, and thus have to disable it here.
>   #
>   # Split in three sets of build/check/avocado to limit the execution time of each
>   # job
> @@ -351,7 +349,7 @@ build-cfi-aarch64:
>       AR: llvm-ar
>       IMAGE: fedora
>       CONFIGURE_ARGS: --cc=clang --cxx=clang++ --enable-cfi --enable-cfi-debug
> -      --enable-safe-stack --enable-slirp=git
> +      --enable-safe-stack --disable-slirp
>       TARGETS: aarch64-softmmu
>       MAKE_CHECK_ARGS: check-build
>     timeout: 70m
> @@ -393,7 +391,7 @@ build-cfi-ppc64-s390x:
>       AR: llvm-ar
>       IMAGE: fedora
>       CONFIGURE_ARGS: --cc=clang --cxx=clang++ --enable-cfi --enable-cfi-debug
> -      --enable-safe-stack --enable-slirp=git
> +      --enable-safe-stack --disable-slirp
>       TARGETS: ppc64-softmmu s390x-softmmu
>       MAKE_CHECK_ARGS: check-build
>     timeout: 70m
> @@ -435,7 +433,7 @@ build-cfi-x86_64:
>       AR: llvm-ar
>       IMAGE: fedora
>       CONFIGURE_ARGS: --cc=clang --cxx=clang++ --enable-cfi --enable-cfi-debug
> -      --enable-safe-stack --enable-slirp=git
> +      --enable-safe-stack --disable-slirp
>       TARGETS: x86_64-softmmu
>       MAKE_CHECK_ARGS: check-build
>     timeout: 70m
> @@ -469,7 +467,7 @@ tsan-build:
>     variables:
>       IMAGE: ubuntu2004
>       CONFIGURE_ARGS: --enable-tsan --cc=clang-10 --cxx=clang++-10
> -          --enable-trace-backends=ust --enable-fdt=system --enable-slirp=system
> +          --enable-trace-backends=ust --enable-fdt=system --disable-slirp
>       TARGETS: x86_64-softmmu ppc64-softmmu riscv64-softmmu x86_64-linux-user
>       MAKE_CHECK_ARGS: bench V=1
>   
> @@ -571,7 +569,6 @@ build-without-default-features:
>         --disable-capstone
>         --disable-pie
>         --disable-qom-cast-debug
> -      --disable-slirp
>         --disable-strip
>       TARGETS: avr-softmmu i386-softmmu mips64-softmmu s390x-softmmu sh4-softmmu
>         sparc64-softmmu hexagon-linux-user i386-linux-user s390x-linux-user
> diff --git a/.gitmodules b/.gitmodules
> index f4b6a9b401..d55cdb5036 100644
> --- a/.gitmodules
> +++ b/.gitmodules
> @@ -49,9 +49,6 @@
>   [submodule "roms/edk2"]
>   	path = roms/edk2
>   	url = https://gitlab.com/qemu-project/edk2.git
> -[submodule "slirp"]
> -	path = slirp
> -	url = https://gitlab.com/qemu-project/libslirp.git
>   [submodule "roms/opensbi"]
>   	path = roms/opensbi
>   	url = 	https://gitlab.com/qemu-project/opensbi.git
> diff --git a/MAINTAINERS b/MAINTAINERS
> index 4ad2451e03..9a4fa68cc0 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -2924,7 +2924,6 @@ F: include/hw/registerfields.h
>   SLIRP
>   M: Samuel Thibault <samuel.thibault@ens-lyon.org>
>   S: Maintained
> -F: slirp/
>   F: net/slirp.c
>   F: include/net/slirp.h
>   T: git https://people.debian.org/~sthibault/qemu.git slirp
> diff --git a/meson_options.txt b/meson_options.txt
> index 52b11cead4..668c859d84 100644
> --- a/meson_options.txt
> +++ b/meson_options.txt
> @@ -173,6 +173,8 @@ option('l2tpv3', type : 'feature', value : 'auto',
>          description: 'l2tpv3 network backend support')
>   option('netmap', type : 'feature', value : 'auto',
>          description: 'netmap network backend support')
> +option('slirp', type: 'feature', value: 'auto',
> +       description: 'libslirp user mode network backend support')
>   option('vde', type : 'feature', value : 'auto',
>          description: 'vde network backend support')
>   option('virglrenderer', type : 'feature', value : 'auto',
> @@ -223,9 +225,6 @@ option('virtiofsd', type: 'feature', value: 'auto',
>   option('capstone', type: 'combo', value: 'auto',
>          choices: ['disabled', 'enabled', 'auto', 'system', 'internal'],
>          description: 'Whether and how to find the capstone library')
> -option('slirp', type: 'combo', value: 'auto',
> -       choices: ['disabled', 'enabled', 'auto', 'system', 'internal'],
> -       description: 'Whether and how to find the slirp library')
>   option('fdt', type: 'combo', value: 'auto',
>          choices: ['disabled', 'enabled', 'auto', 'system', 'internal'],
>          description: 'Whether and how to find the libfdt library')
> diff --git a/scripts/archive-source.sh b/scripts/archive-source.sh
> index c6169db69f..23e042dacd 100755
> --- a/scripts/archive-source.sh
> +++ b/scripts/archive-source.sh
> @@ -26,7 +26,7 @@ sub_file="${sub_tdir}/submodule.tar"
>   # independent of what the developer currently has initialized
>   # in their checkout, because the build environment is completely
>   # different to the host OS.
> -submodules="dtc slirp meson ui/keycodemapdb"
> +submodules="dtc meson ui/keycodemapdb"
>   submodules="$submodules tests/fp/berkeley-softfloat-3 tests/fp/berkeley-testfloat-3"
>   sub_deinit=""
>   
> diff --git a/scripts/meson-buildoptions.sh b/scripts/meson-buildoptions.sh
> index 1e26f4571e..dcfecb69ad 100644
> --- a/scripts/meson-buildoptions.sh
> +++ b/scripts/meson-buildoptions.sh
> @@ -23,8 +23,6 @@ meson_options_help() {
>     printf "%s\n" '  --enable-qom-cast-debug  cast debugging support'
>     printf "%s\n" '  --enable-rng-none        dummy RNG, avoid using /dev/(u)random and'
>     printf "%s\n" '                           getrandom()'
> -  printf "%s\n" '  --enable-slirp[=CHOICE]  Whether and how to find the slirp library'
> -  printf "%s\n" '                           (choices: auto/disabled/enabled/internal/system)'
>     printf "%s\n" '  --enable-strip           Strip targets on install'
>     printf "%s\n" '  --enable-tcg-interpreter TCG with bytecode interpreter (slow)'
>     printf "%s\n" '  --enable-trace-backends=CHOICE'
> @@ -103,6 +101,7 @@ meson_options_help() {
>     printf "%s\n" '  sdl-image       SDL Image support for icons'
>     printf "%s\n" '  seccomp         seccomp support'
>     printf "%s\n" '  selinux         SELinux support in qemu-nbd'
> +  printf "%s\n" '  slirp           libslirp user mode network backend support'
>     printf "%s\n" '  slirp-smbd      use smbd (at path --smbd=*) in slirp networking'
>     printf "%s\n" '  smartcard       CA smartcard emulation support'
>     printf "%s\n" '  snappy          snappy compression support'
> @@ -303,7 +302,6 @@ _meson_option_parse() {
>       --disable-selinux) printf "%s" -Dselinux=disabled ;;
>       --enable-slirp) printf "%s" -Dslirp=enabled ;;
>       --disable-slirp) printf "%s" -Dslirp=disabled ;;
> -    --enable-slirp=*) quote_sh "-Dslirp=$2" ;;
>       --enable-slirp-smbd) printf "%s" -Dslirp_smbd=enabled ;;
>       --disable-slirp-smbd) printf "%s" -Dslirp_smbd=disabled ;;
>       --enable-smartcard) printf "%s" -Dsmartcard=enabled ;;
> diff --git a/slirp b/slirp
> deleted file mode 160000
> index a88d9ace23..0000000000
> --- a/slirp
> +++ /dev/null
> @@ -1 +0,0 @@
> -Subproject commit a88d9ace234a24ce1c17189642ef9104799425e0



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

* Re: [RFC PATCH for-7.1] Remove the slirp submodule (and only compile with an external libslirp)
  2022-04-11  7:11 ` Paolo Bonzini
@ 2022-04-11  8:11   ` Paolo Bonzini
  0 siblings, 0 replies; 11+ messages in thread
From: Paolo Bonzini @ 2022-04-11  8:11 UTC (permalink / raw)
  To: Thomas Huth, qemu-devel, Samuel Thibault
  Cc: Marc-André Lureau, Daniel P . Berrange

On 4/11/22 09:11, Paolo Bonzini wrote:
> On 4/8/22 18:47, Thomas Huth wrote:
>> The only one that still seems to be missing a libslirp package is
>> OpenBSD - but I assume that they can add it to their ports system
>> quickly if required.
>>
>> So there is no real urgent need for keeping the slirp submodule in
>> the QEMU tree anymore. Thus let's drop the slirp submodule now and
>> rely on the libslirp packages from the distributions instead.
>>
>> Signed-off-by: Thomas Huth <thuth@redhat.com>
> 
> I would like to have feature parity even with CFI.  I had written the 
> libslirp side a few months ago, but never tested it because I didn't get 
> to the QEMU side.
> 
> I updated it and you can find it at 
> https://gitlab.freedesktop.org/slirp/libslirp/-/merge_requests/117. I'll 
> get to the QEMU side now.

Also, doing this at the same time as a switch to Meson >=0.60 (probably 
0.61.x) would allow something like

option('slirp', type: 'feature', value: 'auto',
        description: 'libslirp user mode network backend support',
        deprecated: {'system': 'enabled', 'internal': 'auto'})

This keeps incremental builds working.  All of this should be doable in 
7.1, so this is not an objection to removing the submodule in 7.1.

Paolo



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

* Re: [RFC PATCH for-7.1] Remove the slirp submodule (and only compile with an external libslirp)
  2022-04-11  6:55       ` Thomas Huth
@ 2022-04-14  7:23         ` Brad Smith
  2022-04-19 16:24         ` Daniel P. Berrangé
  1 sibling, 0 replies; 11+ messages in thread
From: Brad Smith @ 2022-04-14  7:23 UTC (permalink / raw)
  To: Thomas Huth, Peter Maydell
  Cc: qemu-devel, Samuel Thibault, Marc-André Lureau, Daniel P . Berrange

On 4/11/2022 2:55 AM, Thomas Huth wrote:
> On 11/04/2022 01.50, Brad Smith wrote:
>> On 4/10/2022 5:06 AM, Peter Maydell wrote:
>>> On Sun, 10 Apr 2022 at 05:51, Brad Smith <brad@comstyle.com> wrote:
>>>> On 4/8/2022 12:47 PM, Thomas Huth wrote:
>>>>> QEMU 7.1 won't support Ubuntu 18.04 anymore, so the last big 
>>>>> important
>>>>> distro that did not have a pre-packaged libslirp has been dismissed.
>>>>> All other major distros seem to have a libslirp package in their
>>>>> distribution already - according to repology.org:
>>>>>
>>>>>             Fedora 34: 4.4.0
>>>>>     CentOS 8 (RHEL-8): 4.4.0
>>>>>         Debian Buster: 4.3.1 (in buster-backports)
>>>>>    OpenSUSE Leap 15.3: 4.3.1
>>>>>      Ubuntu LTS 20.04: 4.1.0
>>>>>         FreeBSD Ports: 4.6.1
>>>>>         NetBSD pkgsrc: 4.3.1
>>>>>              Homebrew: 4.6.1
>>>>>           MSYS2 mingw: 4.6.1
>>>>>
>>>>> The only one that still seems to be missing a libslirp package is
>>>>> OpenBSD - but I assume that they can add it to their ports system
>>>>> quickly if required.
>>>> I wish I had seen this earlier as our 7.1 release was just tagged.
>>>>
>>>> I have whipped up a port of 4.6.1 for OpenBSD as it was pretty 
>>>> simple. I
>>>> will
>>>> see about submitting it in a number of days when the tree opens.
>>> How awkward would it be for an end-user who's on OpenBSD 7.1 to
>>> build a QEMU that doesn't have libslirp? (That is, is it easy
>>> and common for an end user to pull in a port of libslirp that only
>>> came along in a later OpenBSD, or would they instead have to
>>> manually compile libslirp themselves from the upstream sources?)
>>>
>>> (I'm asking here because if it's painful, then we should perhaps
>>> defer dropping our submodule copy of libslirp a little longer.)
>>>
>>> thanks
>>> -- PMM
>>
>> They would have to pull down a -current ports tree and build it. No 
>> package
>> would exist for the release. It is possible, but not "supported". I 
>> have not looked
>> at the CI bits to see how difficult that would be.
>>
>> Our release cycles are 6 months and the next release will be in the 
>> middle
>> of October.
>
> OK, thanks for the update, Brad ... so I guess we should defer this 
> patch to QEMU 7.2 (to be released in december) instead?
> (which would be fine for me - I just wanted to get the discussion 
> started, that's also why I've marked this patch as RFC)
>

I would prefer that. My libslirp port will be going in in the next 
couple days and
packages for -current snaps will be built. Our 7.2 release should be out 
well before the
next QEMU release.


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

* Re: [RFC PATCH for-7.1] Remove the slirp submodule (and only compile with an external libslirp)
  2022-04-11  6:55       ` Thomas Huth
  2022-04-14  7:23         ` Brad Smith
@ 2022-04-19 16:24         ` Daniel P. Berrangé
  2022-04-20 10:13           ` Thomas Huth
  1 sibling, 1 reply; 11+ messages in thread
From: Daniel P. Berrangé @ 2022-04-19 16:24 UTC (permalink / raw)
  To: Thomas Huth
  Cc: Peter Maydell, Marc-André Lureau, qemu-devel,
	Samuel Thibault, Brad Smith

On Mon, Apr 11, 2022 at 08:55:19AM +0200, Thomas Huth wrote:
> On 11/04/2022 01.50, Brad Smith wrote:
> > On 4/10/2022 5:06 AM, Peter Maydell wrote:
> > > On Sun, 10 Apr 2022 at 05:51, Brad Smith <brad@comstyle.com> wrote:
> > > > On 4/8/2022 12:47 PM, Thomas Huth wrote:
> > > > > QEMU 7.1 won't support Ubuntu 18.04 anymore, so the last big important
> > > > > distro that did not have a pre-packaged libslirp has been dismissed.
> > > > > All other major distros seem to have a libslirp package in their
> > > > > distribution already - according to repology.org:
> > > > > 
> > > > >             Fedora 34: 4.4.0
> > > > >     CentOS 8 (RHEL-8): 4.4.0
> > > > >         Debian Buster: 4.3.1 (in buster-backports)
> > > > >    OpenSUSE Leap 15.3: 4.3.1
> > > > >      Ubuntu LTS 20.04: 4.1.0
> > > > >         FreeBSD Ports: 4.6.1
> > > > >         NetBSD pkgsrc: 4.3.1
> > > > >              Homebrew: 4.6.1
> > > > >           MSYS2 mingw: 4.6.1
> > > > > 
> > > > > The only one that still seems to be missing a libslirp package is
> > > > > OpenBSD - but I assume that they can add it to their ports system
> > > > > quickly if required.
> > > > I wish I had seen this earlier as our 7.1 release was just tagged.
> > > > 
> > > > I have whipped up a port of 4.6.1 for OpenBSD as it was pretty simple. I
> > > > will
> > > > see about submitting it in a number of days when the tree opens.
> > > How awkward would it be for an end-user who's on OpenBSD 7.1 to
> > > build a QEMU that doesn't have libslirp? (That is, is it easy
> > > and common for an end user to pull in a port of libslirp that only
> > > came along in a later OpenBSD, or would they instead have to
> > > manually compile libslirp themselves from the upstream sources?)
> > > 
> > > (I'm asking here because if it's painful, then we should perhaps
> > > defer dropping our submodule copy of libslirp a little longer.)
> > > 
> > > thanks
> > > -- PMM
> > 
> > They would have to pull down a -current ports tree and build it. No package
> > would exist for the release. It is possible, but not "supported". I have
> > not looked
> > at the CI bits to see how difficult that would be.
> > 
> > Our release cycles are 6 months and the next release will be in the middle
> > of October.
> 
> OK, thanks for the update, Brad ... so I guess we should defer this patch to
> QEMU 7.2 (to be released in december) instead?
> (which would be fine for me - I just wanted to get the discussion started,
> that's also why I've marked this patch as RFC)

Perhaps make 7.1 simply issue a warning message in configure if
the bundled slirp is used, to give people a heads up that they'll
want to install libslirp-devel soon.

We don't need to follow the formal deprecations process for build
deps. Just feels like a nice thing todo if we postpone till 7.2

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] 11+ messages in thread

* Re: [RFC PATCH for-7.1] Remove the slirp submodule (and only compile with an external libslirp)
  2022-04-19 16:24         ` Daniel P. Berrangé
@ 2022-04-20 10:13           ` Thomas Huth
  2022-04-23 22:06             ` Brad Smith
  0 siblings, 1 reply; 11+ messages in thread
From: Thomas Huth @ 2022-04-20 10:13 UTC (permalink / raw)
  To: Daniel P. Berrangé
  Cc: Peter Maydell, Marc-André Lureau, qemu-devel,
	Samuel Thibault, Brad Smith

On 19/04/2022 18.24, Daniel P. Berrangé wrote:
> On Mon, Apr 11, 2022 at 08:55:19AM +0200, Thomas Huth wrote:
>> On 11/04/2022 01.50, Brad Smith wrote:
>>> On 4/10/2022 5:06 AM, Peter Maydell wrote:
>>>> On Sun, 10 Apr 2022 at 05:51, Brad Smith <brad@comstyle.com> wrote:
>>>>> On 4/8/2022 12:47 PM, Thomas Huth wrote:
>>>>>> QEMU 7.1 won't support Ubuntu 18.04 anymore, so the last big important
>>>>>> distro that did not have a pre-packaged libslirp has been dismissed.
>>>>>> All other major distros seem to have a libslirp package in their
>>>>>> distribution already - according to repology.org:
>>>>>>
>>>>>>              Fedora 34: 4.4.0
>>>>>>      CentOS 8 (RHEL-8): 4.4.0
>>>>>>          Debian Buster: 4.3.1 (in buster-backports)
>>>>>>     OpenSUSE Leap 15.3: 4.3.1
>>>>>>       Ubuntu LTS 20.04: 4.1.0
>>>>>>          FreeBSD Ports: 4.6.1
>>>>>>          NetBSD pkgsrc: 4.3.1
>>>>>>               Homebrew: 4.6.1
>>>>>>            MSYS2 mingw: 4.6.1
>>>>>>
>>>>>> The only one that still seems to be missing a libslirp package is
>>>>>> OpenBSD - but I assume that they can add it to their ports system
>>>>>> quickly if required.
>>>>> I wish I had seen this earlier as our 7.1 release was just tagged.
>>>>>
>>>>> I have whipped up a port of 4.6.1 for OpenBSD as it was pretty simple. I
>>>>> will
>>>>> see about submitting it in a number of days when the tree opens.
>>>> How awkward would it be for an end-user who's on OpenBSD 7.1 to
>>>> build a QEMU that doesn't have libslirp? (That is, is it easy
>>>> and common for an end user to pull in a port of libslirp that only
>>>> came along in a later OpenBSD, or would they instead have to
>>>> manually compile libslirp themselves from the upstream sources?)
>>>>
>>>> (I'm asking here because if it's painful, then we should perhaps
>>>> defer dropping our submodule copy of libslirp a little longer.)
>>>>
>>>> thanks
>>>> -- PMM
>>>
>>> They would have to pull down a -current ports tree and build it. No package
>>> would exist for the release. It is possible, but not "supported". I have
>>> not looked
>>> at the CI bits to see how difficult that would be.
>>>
>>> Our release cycles are 6 months and the next release will be in the middle
>>> of October.
>>
>> OK, thanks for the update, Brad ... so I guess we should defer this patch to
>> QEMU 7.2 (to be released in december) instead?
>> (which would be fine for me - I just wanted to get the discussion started,
>> that's also why I've marked this patch as RFC)
> 
> Perhaps make 7.1 simply issue a warning message in configure if
> the bundled slirp is used, to give people a heads up that they'll
> want to install libslirp-devel soon.

Not sure if people will notice a warning in the output of "configure" ... 
but I've put some sentences in the ChangeLog here:

https://wiki.qemu.org/ChangeLog/7.0#New_deprecated_options_and_features

(which we could repeat for the 7.1 release again)

I hope that helps to make people aware...

  Thomas



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

* Re: [RFC PATCH for-7.1] Remove the slirp submodule (and only compile with an external libslirp)
  2022-04-20 10:13           ` Thomas Huth
@ 2022-04-23 22:06             ` Brad Smith
  0 siblings, 0 replies; 11+ messages in thread
From: Brad Smith @ 2022-04-23 22:06 UTC (permalink / raw)
  To: Thomas Huth, Daniel P. Berrangé
  Cc: Peter Maydell, Marc-André Lureau, qemu-devel, Samuel Thibault

On 4/20/2022 6:13 AM, Thomas Huth wrote:
> On 19/04/2022 18.24, Daniel P. Berrangé wrote:
>> On Mon, Apr 11, 2022 at 08:55:19AM +0200, Thomas Huth wrote:
>>> On 11/04/2022 01.50, Brad Smith wrote:
>>>> On 4/10/2022 5:06 AM, Peter Maydell wrote:
>>>>> On Sun, 10 Apr 2022 at 05:51, Brad Smith <brad@comstyle.com> wrote:
>>>>>> On 4/8/2022 12:47 PM, Thomas Huth wrote:
>>>>>>> QEMU 7.1 won't support Ubuntu 18.04 anymore, so the last big 
>>>>>>> important
>>>>>>> distro that did not have a pre-packaged libslirp has been 
>>>>>>> dismissed.
>>>>>>> All other major distros seem to have a libslirp package in their
>>>>>>> distribution already - according to repology.org:
>>>>>>>
>>>>>>>              Fedora 34: 4.4.0
>>>>>>>      CentOS 8 (RHEL-8): 4.4.0
>>>>>>>          Debian Buster: 4.3.1 (in buster-backports)
>>>>>>>     OpenSUSE Leap 15.3: 4.3.1
>>>>>>>       Ubuntu LTS 20.04: 4.1.0
>>>>>>>          FreeBSD Ports: 4.6.1
>>>>>>>          NetBSD pkgsrc: 4.3.1
>>>>>>>               Homebrew: 4.6.1
>>>>>>>            MSYS2 mingw: 4.6.1
>>>>>>>
>>>>>>> The only one that still seems to be missing a libslirp package is
>>>>>>> OpenBSD - but I assume that they can add it to their ports system
>>>>>>> quickly if required.
>>>>>> I wish I had seen this earlier as our 7.1 release was just tagged.
>>>>>>
>>>>>> I have whipped up a port of 4.6.1 for OpenBSD as it was pretty 
>>>>>> simple. I
>>>>>> will
>>>>>> see about submitting it in a number of days when the tree opens.
>>>>> How awkward would it be for an end-user who's on OpenBSD 7.1 to
>>>>> build a QEMU that doesn't have libslirp? (That is, is it easy
>>>>> and common for an end user to pull in a port of libslirp that only
>>>>> came along in a later OpenBSD, or would they instead have to
>>>>> manually compile libslirp themselves from the upstream sources?)
>>>>>
>>>>> (I'm asking here because if it's painful, then we should perhaps
>>>>> defer dropping our submodule copy of libslirp a little longer.)
>>>>>
>>>>> thanks
>>>>> -- PMM
>>>>
>>>> They would have to pull down a -current ports tree and build it. No 
>>>> package
>>>> would exist for the release. It is possible, but not "supported". I 
>>>> have
>>>> not looked
>>>> at the CI bits to see how difficult that would be.
>>>>
>>>> Our release cycles are 6 months and the next release will be in the 
>>>> middle
>>>> of October.
>>>
>>> OK, thanks for the update, Brad ... so I guess we should defer this 
>>> patch to
>>> QEMU 7.2 (to be released in december) instead?
>>> (which would be fine for me - I just wanted to get the discussion 
>>> started,
>>> that's also why I've marked this patch as RFC)
>>
>> Perhaps make 7.1 simply issue a warning message in configure if
>> the bundled slirp is used, to give people a heads up that they'll
>> want to install libslirp-devel soon.
>
> Not sure if people will notice a warning in the output of "configure" 
> ... but I've put some sentences in the ChangeLog here:
>
> https://wiki.qemu.org/ChangeLog/7.0#New_deprecated_options_and_features
>
> (which we could repeat for the 7.1 release again)
>
> I hope that helps to make people aware...
>
>  Thomas

Just to note.. my libslirp port went in.

https://marc.info/?l=openbsd-ports-cvs&m=165070969206193&w=2

and have switched our QEMU port to build with the libslirp port..

https://marc.info/?l=openbsd-ports-cvs&m=165070979906266&w=2



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

end of thread, other threads:[~2022-04-23 22:07 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-04-08 16:47 [RFC PATCH for-7.1] Remove the slirp submodule (and only compile with an external libslirp) Thomas Huth
2022-04-10  4:49 ` Brad Smith
2022-04-10  9:06   ` Peter Maydell
2022-04-10 23:50     ` Brad Smith
2022-04-11  6:55       ` Thomas Huth
2022-04-14  7:23         ` Brad Smith
2022-04-19 16:24         ` Daniel P. Berrangé
2022-04-20 10:13           ` Thomas Huth
2022-04-23 22:06             ` Brad Smith
2022-04-11  7:11 ` Paolo Bonzini
2022-04-11  8:11   ` Paolo Bonzini

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.