All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v7 00/11] iOS and Apple Silicon host support
@ 2021-01-22 20:11 Joelle van Dyne
  2021-01-22 20:11 ` [PATCH v7 01/11] block: feature detection for host block support Joelle van Dyne
                   ` (10 more replies)
  0 siblings, 11 replies; 26+ messages in thread
From: Joelle van Dyne @ 2021-01-22 20:11 UTC (permalink / raw)
  To: qemu-devel

These set of changes brings QEMU TCG to iOS devices and future Apple Silicon
devices. They were originally developed last year and have been working in the
UTM app. Recently, we ported the changes to master, re-wrote a lot of the build
script changes for meson, and broke up the patches into more distinct units.

The bulk of the changes allow for cross-compiling for both iOS and macOS running
Apple Silicon and adds feature detection for parts of QEMU that are not
compatible with iOS.

Since v7:

* Removed libucontext (will be submitted in another patchset)
* Removed slirp build flags update (superseded by subproject patchset)
* Reworked all patches to use feature detection instead of #ifdef CONFIG_IOS
* Added feature detection for CoreAudio
* Fix various cross compiling issues on macOS

Since v6:

* Dropped the Apple Silicon JIT support patch (superseded by another patchset)
* Changed libucontext to be a Meson subproject
* Cache availablity check for preadv/pwritev on macOS 11 and iOS 14

Since v5:

* Fixed some more instances of QAPI define of CONFIG_HOST_BLOCK_DEVICE
* Fixed libucontext build on newer version of GCC

Since v4:

* Updated QAPI schema for CONFIG_HOST_BLOCK_DEVICE
* Updated maintainers file for iOS host support
* Moved system() changes to osdep.h
* Fixed typo in libucontext meson.build change

Since v3:

* Moved mirror JIT support to a different patch set.
* Removed dependency on `pthread_jit_write_protect_np` because it was redundent
  and also crashes if called on a non-jailbroken iOS device.
* Removed `--enable-cross-compile` option
* Fixed checkpatch errors
* Fixed iOS build on master due to new test recently added which calls system()

Since v2:

* Changed getting mirror pointer from a macro to inline functions
* Split constification of TCG code pointers to separate patch
* Removed slirp updates (will send future patch once slirp changes are in)
* Removed shared library patch (will send future patch)

-j

Joelle van Dyne (11):
  block: feature detection for host block support
  configure: cross-compiling with empty cross_prefix
  configure: check for sys/disk.h
  slirp: feature detection for smbd
  osdep: build with non-working system() function
  darwin: remove redundant dependency declaration
  darwin: fix cross-compiling for Darwin
  configure: cross compile should use x86_64 cpu_family
  block: check availablity for preadv/pwritev on mac
  darwin: detect CoreAudio for build
  darwin: remove 64-bit build detection on 32-bit OS

 configure            | 125 ++++++++++++++++++++++++++++++++++++-------
 meson.build          |   4 +-
 qapi/block-core.json |  10 ++--
 include/qemu/osdep.h |  11 ++++
 block.c              |   2 +-
 block/file-posix.c   |  68 ++++++++++++++++++-----
 net/slirp.c          |  16 +++---
 7 files changed, 192 insertions(+), 44 deletions(-)

-- 
2.28.0



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

* [PATCH v7 01/11] block: feature detection for host block support
  2021-01-22 20:11 [PATCH v7 00/11] iOS and Apple Silicon host support Joelle van Dyne
@ 2021-01-22 20:11 ` Joelle van Dyne
  2021-01-22 20:11 ` [PATCH v7 02/11] configure: cross-compiling with empty cross_prefix Joelle van Dyne
                   ` (9 subsequent siblings)
  10 siblings, 0 replies; 26+ messages in thread
From: Joelle van Dyne @ 2021-01-22 20:11 UTC (permalink / raw)
  To: qemu-devel
  Cc: Kevin Wolf, open list:raw, Markus Armbruster, Max Reitz, Joelle van Dyne

On Darwin (iOS), there are no system level APIs for directly accessing
host block devices. We detect this at configure time.

Signed-off-by: Joelle van Dyne <j@getutm.app>
---
 configure            | 13 +++++++++++++
 meson.build          |  2 +-
 qapi/block-core.json | 10 +++++++---
 block/file-posix.c   | 33 ++++++++++++++++++++++-----------
 4 files changed, 43 insertions(+), 15 deletions(-)

diff --git a/configure b/configure
index 6f6a319c2f..acf7f7414a 100755
--- a/configure
+++ b/configure
@@ -5283,6 +5283,16 @@ but not implemented on your system"
     fi
 fi
 
+##########################################
+# check for host block device
+# assume always true for non-Darwin hosts
+
+if ! test "$darwin" == "yes" || check_include "IOKit/storage/IOMedia.h" ; then
+  have_host_block_device=yes
+else
+  have_host_block_device=no
+fi
+
 ##########################################
 # End of CC checks
 # After here, no more $cc or $ld runs
@@ -5513,6 +5523,9 @@ echo "GIT_UPDATE=$git_update" >> $config_host_mak
 
 echo "ARCH=$ARCH" >> $config_host_mak
 
+if test "$have_host_block_device" = "yes" ; then
+  echo "HAVE_HOST_BLOCK_DEVICE=y" >> $config_host_mak
+fi
 if test "$debug_tcg" = "yes" ; then
   echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
 fi
diff --git a/meson.build b/meson.build
index af2bc89741..6c3ee7f8ca 100644
--- a/meson.build
+++ b/meson.build
@@ -180,7 +180,7 @@ if targetos == 'windows'
                                       include_directories: include_directories('.'))
 elif targetos == 'darwin'
   coref = dependency('appleframeworks', modules: 'CoreFoundation')
-  iokit = dependency('appleframeworks', modules: 'IOKit')
+  iokit = dependency('appleframeworks', modules: 'IOKit', required: 'HAVE_HOST_BLOCK_DEVICE' in config_host)
 elif targetos == 'sunos'
   socket = [cc.find_library('socket'),
             cc.find_library('nsl'),
diff --git a/qapi/block-core.json b/qapi/block-core.json
index 3484986d1c..1a9576de8d 100644
--- a/qapi/block-core.json
+++ b/qapi/block-core.json
@@ -959,7 +959,8 @@
   'discriminator': 'driver',
   'data': {
       'file': 'BlockStatsSpecificFile',
-      'host_device': 'BlockStatsSpecificFile',
+      'host_device': { 'type': 'BlockStatsSpecificFile',
+                       'if': 'defined(HAVE_HOST_BLOCK_DEVICE)' },
       'nvme': 'BlockStatsSpecificNvme' } }
 
 ##
@@ -2827,7 +2828,9 @@
 { 'enum': 'BlockdevDriver',
   'data': [ 'blkdebug', 'blklogwrites', 'blkreplay', 'blkverify', 'bochs',
             'cloop', 'compress', 'copy-on-read', 'dmg', 'file', 'ftp', 'ftps',
-            'gluster', 'host_cdrom', 'host_device', 'http', 'https', 'iscsi',
+            'gluster', 'host_cdrom',
+            {'name': 'host_device', 'if': 'defined(HAVE_HOST_BLOCK_DEVICE)' },
+            'http', 'https', 'iscsi',
             'luks', 'nbd', 'nfs', 'null-aio', 'null-co', 'nvme', 'parallels',
             'preallocate', 'qcow', 'qcow2', 'qed', 'quorum', 'raw', 'rbd',
             { 'name': 'replication', 'if': 'defined(CONFIG_REPLICATION)' },
@@ -4012,7 +4015,8 @@
       'ftps':       'BlockdevOptionsCurlFtps',
       'gluster':    'BlockdevOptionsGluster',
       'host_cdrom': 'BlockdevOptionsFile',
-      'host_device':'BlockdevOptionsFile',
+      'host_device': { 'type': 'BlockdevOptionsFile',
+                       'if': 'defined(HAVE_HOST_BLOCK_DEVICE)' },
       'http':       'BlockdevOptionsCurlHttp',
       'https':      'BlockdevOptionsCurlHttps',
       'iscsi':      'BlockdevOptionsIscsi',
diff --git a/block/file-posix.c b/block/file-posix.c
index 00cdaaa2d4..11d2021346 100644
--- a/block/file-posix.c
+++ b/block/file-posix.c
@@ -42,6 +42,8 @@
 #include "scsi/constants.h"
 
 #if defined(__APPLE__) && (__MACH__)
+#include <sys/ioctl.h>
+#if defined(HAVE_HOST_BLOCK_DEVICE)
 #include <paths.h>
 #include <sys/param.h>
 #include <IOKit/IOKitLib.h>
@@ -52,6 +54,7 @@
 //#include <IOKit/storage/IOCDTypes.h>
 #include <IOKit/storage/IODVDMedia.h>
 #include <CoreFoundation/CoreFoundation.h>
+#endif /* defined(HAVE_HOST_BLOCK_DEVICE) */
 #endif
 
 #ifdef __sun__
@@ -181,7 +184,17 @@ typedef struct BDRVRawReopenState {
     bool check_cache_dropped;
 } BDRVRawReopenState;
 
-static int fd_open(BlockDriverState *bs);
+static int fd_open(BlockDriverState *bs)
+{
+    BDRVRawState *s = bs->opaque;
+
+    /* this is just to ensure s->fd is sane (its called by io ops) */
+    if (s->fd >= 0) {
+        return 0;
+    }
+    return -EIO;
+}
+
 static int64_t raw_getlength(BlockDriverState *bs);
 
 typedef struct RawPosixAIOData {
@@ -3014,6 +3027,7 @@ static BlockStatsSpecific *raw_get_specific_stats(BlockDriverState *bs)
     return stats;
 }
 
+#if defined(HAVE_HOST_BLOCK_DEVICE)
 static BlockStatsSpecific *hdev_get_specific_stats(BlockDriverState *bs)
 {
     BlockStatsSpecific *stats = g_new(BlockStatsSpecific, 1);
@@ -3023,6 +3037,7 @@ static BlockStatsSpecific *hdev_get_specific_stats(BlockDriverState *bs)
 
     return stats;
 }
+#endif /* HAVE_HOST_BLOCK_DEVICE */
 
 static QemuOptsList raw_create_opts = {
     .name = "raw-create-opts",
@@ -3247,6 +3262,8 @@ BlockDriver bdrv_file = {
 /***********************************************/
 /* host device */
 
+#if defined(HAVE_HOST_BLOCK_DEVICE)
+
 #if defined(__APPLE__) && defined(__MACH__)
 static kern_return_t GetBSDPath(io_iterator_t mediaIterator, char *bsdPath,
                                 CFIndex maxPathSize, int flags);
@@ -3539,16 +3556,6 @@ hdev_co_ioctl(BlockDriverState *bs, unsigned long int req, void *buf)
 }
 #endif /* linux */
 
-static int fd_open(BlockDriverState *bs)
-{
-    BDRVRawState *s = bs->opaque;
-
-    /* this is just to ensure s->fd is sane (its called by io ops) */
-    if (s->fd >= 0)
-        return 0;
-    return -EIO;
-}
-
 static coroutine_fn int
 hdev_co_pdiscard(BlockDriverState *bs, int64_t offset, int bytes)
 {
@@ -3872,6 +3879,8 @@ static BlockDriver bdrv_host_cdrom = {
 };
 #endif /* __FreeBSD__ */
 
+#endif /* HAVE_HOST_BLOCK_DEVICE */
+
 static void bdrv_file_init(void)
 {
     /*
@@ -3879,6 +3888,7 @@ static void bdrv_file_init(void)
      * registered last will get probed first.
      */
     bdrv_register(&bdrv_file);
+#if defined(HAVE_HOST_BLOCK_DEVICE)
     bdrv_register(&bdrv_host_device);
 #ifdef __linux__
     bdrv_register(&bdrv_host_cdrom);
@@ -3886,6 +3896,7 @@ static void bdrv_file_init(void)
 #if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
     bdrv_register(&bdrv_host_cdrom);
 #endif
+#endif /* HAVE_HOST_BLOCK_DEVICE */
 }
 
 block_init(bdrv_file_init);
-- 
2.28.0



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

* [PATCH v7 02/11] configure: cross-compiling with empty cross_prefix
  2021-01-22 20:11 [PATCH v7 00/11] iOS and Apple Silicon host support Joelle van Dyne
  2021-01-22 20:11 ` [PATCH v7 01/11] block: feature detection for host block support Joelle van Dyne
@ 2021-01-22 20:11 ` Joelle van Dyne
  2021-01-22 20:11 ` [PATCH v7 03/11] configure: check for sys/disk.h Joelle van Dyne
                   ` (8 subsequent siblings)
  10 siblings, 0 replies; 26+ messages in thread
From: Joelle van Dyne @ 2021-01-22 20:11 UTC (permalink / raw)
  To: qemu-devel; +Cc: Philippe Mathieu-Daudé, Joelle van Dyne

The iOS toolchain does not use the host prefix naming convention. So we
need to enable cross-compile options while allowing the PREFIX to be
blank.

Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Signed-off-by: Joelle van Dyne <j@getutm.app>
---
 configure | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/configure b/configure
index acf7f7414a..32be5d225d 100755
--- a/configure
+++ b/configure
@@ -238,6 +238,7 @@ cpu=""
 iasl="iasl"
 interp_prefix="/usr/gnemul/qemu-%M"
 static="no"
+cross_compile="no"
 cross_prefix=""
 audio_drv_list=""
 block_drv_rw_whitelist=""
@@ -469,6 +470,7 @@ for opt do
   optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
   case "$opt" in
   --cross-prefix=*) cross_prefix="$optarg"
+                    cross_compile="yes"
   ;;
   --cc=*) CC="$optarg"
   ;;
@@ -1696,7 +1698,7 @@ $(echo Deprecated targets: $deprecated_targets_list | \
   --target-list-exclude=LIST exclude a set of targets from the default target-list
 
 Advanced options (experts only):
-  --cross-prefix=PREFIX    use PREFIX for compile tools [$cross_prefix]
+  --cross-prefix=PREFIX    use PREFIX for compile tools, PREFIX can be blank [$cross_prefix]
   --cc=CC                  use C compiler CC [$cc]
   --iasl=IASL              use ACPI compiler IASL [$iasl]
   --host-cc=CC             use C compiler CC [$host_cc] for code run at
@@ -6403,7 +6405,7 @@ if has $sdl2_config; then
 fi
 echo "strip = [$(meson_quote $strip)]" >> $cross
 echo "windres = [$(meson_quote $windres)]" >> $cross
-if test -n "$cross_prefix"; then
+if test "$cross_compile" = "yes"; then
     cross_arg="--cross-file config-meson.cross"
     echo "[host_machine]" >> $cross
     if test "$mingw32" = "yes" ; then
-- 
2.28.0



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

* [PATCH v7 03/11] configure: check for sys/disk.h
  2021-01-22 20:11 [PATCH v7 00/11] iOS and Apple Silicon host support Joelle van Dyne
  2021-01-22 20:11 ` [PATCH v7 01/11] block: feature detection for host block support Joelle van Dyne
  2021-01-22 20:11 ` [PATCH v7 02/11] configure: cross-compiling with empty cross_prefix Joelle van Dyne
@ 2021-01-22 20:11 ` Joelle van Dyne
  2021-01-22 23:16   ` Peter Maydell
  2021-01-22 20:11 ` [PATCH v7 04/11] slirp: feature detection for smbd Joelle van Dyne
                   ` (7 subsequent siblings)
  10 siblings, 1 reply; 26+ messages in thread
From: Joelle van Dyne @ 2021-01-22 20:11 UTC (permalink / raw)
  To: qemu-devel
  Cc: Kevin Wolf, Joelle van Dyne, open list:Block layer core, Max Reitz

Some BSD platforms do not have this header.

Signed-off-by: Joelle van Dyne <j@getutm.app>
---
 configure          | 9 +++++++++
 block.c            | 2 +-
 block/file-posix.c | 2 +-
 3 files changed, 11 insertions(+), 2 deletions(-)

diff --git a/configure b/configure
index 32be5d225d..951de427bb 100755
--- a/configure
+++ b/configure
@@ -5295,6 +5295,12 @@ else
   have_host_block_device=no
 fi
 
+if check_include "sys/disk.h" ; then
+  sys_disk_h=yes
+else
+  sys_disk_h=no
+fi
+
 ##########################################
 # End of CC checks
 # After here, no more $cc or $ld runs
@@ -5528,6 +5534,9 @@ echo "ARCH=$ARCH" >> $config_host_mak
 if test "$have_host_block_device" = "yes" ; then
   echo "HAVE_HOST_BLOCK_DEVICE=y" >> $config_host_mak
 fi
+if test "$sys_disk_h" = "yes" ; then
+  echo "HAVE_SYS_DISK_H=y" >> $config_host_mak
+fi
 if test "$debug_tcg" = "yes" ; then
   echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
 fi
diff --git a/block.c b/block.c
index 8b9d457546..c4cf391dea 100644
--- a/block.c
+++ b/block.c
@@ -54,7 +54,7 @@
 #ifdef CONFIG_BSD
 #include <sys/ioctl.h>
 #include <sys/queue.h>
-#ifndef __DragonFly__
+#if defined(HAVE_SYS_DISK_H)
 #include <sys/disk.h>
 #endif
 #endif
diff --git a/block/file-posix.c b/block/file-posix.c
index 11d2021346..666d3e7504 100644
--- a/block/file-posix.c
+++ b/block/file-posix.c
@@ -2320,7 +2320,7 @@ again:
         }
         if (size == 0)
 #endif
-#if defined(__APPLE__) && defined(__MACH__)
+#if defined(HAVE_SYS_DISK_H) && defined(__APPLE__) && defined(__MACH__)
         {
             uint64_t sectors = 0;
             uint32_t sector_size = 0;
-- 
2.28.0



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

* [PATCH v7 04/11] slirp: feature detection for smbd
  2021-01-22 20:11 [PATCH v7 00/11] iOS and Apple Silicon host support Joelle van Dyne
                   ` (2 preceding siblings ...)
  2021-01-22 20:11 ` [PATCH v7 03/11] configure: check for sys/disk.h Joelle van Dyne
@ 2021-01-22 20:11 ` Joelle van Dyne
  2021-01-22 22:49   ` Peter Maydell
  2021-01-22 20:11 ` [PATCH v7 05/11] osdep: build with non-working system() function Joelle van Dyne
                   ` (6 subsequent siblings)
  10 siblings, 1 reply; 26+ messages in thread
From: Joelle van Dyne @ 2021-01-22 20:11 UTC (permalink / raw)
  To: qemu-devel; +Cc: Samuel Thibault, Jason Wang, Joelle van Dyne

Replace Windows specific macro with a more generic feature detection
macro. Allows slirp smb feature to be disabled manually as well.

Signed-off-by: Joelle van Dyne <j@getutm.app>
---
 configure   | 22 +++++++++++++++++++++-
 meson.build |  2 +-
 net/slirp.c | 16 ++++++++--------
 3 files changed, 30 insertions(+), 10 deletions(-)

diff --git a/configure b/configure
index 951de427bb..92da27846e 100755
--- a/configure
+++ b/configure
@@ -464,6 +464,7 @@ fuse="auto"
 fuse_lseek="auto"
 
 malloc_trim="auto"
+slirp_smbd="auto"
 
 # parse CC options second
 for opt do
@@ -845,7 +846,18 @@ do
     fi
 done
 
+# Check for smbd dupport
 : ${smbd=${SMBD-/usr/sbin/smbd}}
+if test "$slirp_smbd" != "no" ; then
+  if test "$mingw32" = "yes" ; then
+    if test "$slirp_smbd" = "yes" ; then
+      error_exit "Host smbd not supported on this platform."
+    fi
+    slirp_smbd=no
+  else
+    slirp_smbd=yes
+  fi
+fi
 
 # Default objcc to clang if available, otherwise use CC
 if has clang; then
@@ -1560,6 +1572,10 @@ for opt do
   ;;
   --disable-fuse-lseek) fuse_lseek="disabled"
   ;;
+  --enable-slirp-smbd) slirp_smbd=yes
+  ;;
+  --disable-slirp-smbd) slirp_smbd=no
+  ;;
   *)
       echo "ERROR: unknown option $opt"
       echo "Try '$0 --help' for more information"
@@ -1899,6 +1915,7 @@ disabled with --disable-FEATURE, default is enabled if available
   libdaxctl       libdaxctl support
   fuse            FUSE block device export
   fuse-lseek      SEEK_HOLE/SEEK_DATA support for FUSE exports
+  slirp-smbd      use smbd (at path --smbd=*) in slirp networking
 
 NOTE: The object files are built at the place where configure is launched
 EOF
@@ -5595,7 +5612,10 @@ fi
 if test "$guest_agent" = "yes" ; then
   echo "CONFIG_GUEST_AGENT=y" >> $config_host_mak
 fi
-echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
+if test "$slirp_smbd" = "yes" ; then
+  echo "CONFIG_SLIRP_SMBD=y" >> $config_host_mak
+  echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
+fi
 if test "$vde" = "yes" ; then
   echo "CONFIG_VDE=y" >> $config_host_mak
   echo "VDE_LIBS=$vde_libs" >> $config_host_mak
diff --git a/meson.build b/meson.build
index 6c3ee7f8ca..9577138d7f 100644
--- a/meson.build
+++ b/meson.build
@@ -2331,7 +2331,7 @@ summary_info += {'sphinx-build':      sphinx_build.found()}
 summary_info += {'genisoimage':       config_host['GENISOIMAGE']}
 # TODO: add back version
 summary_info += {'slirp support':     slirp_opt == 'disabled' ? false : slirp_opt}
-if slirp_opt != 'disabled'
+if slirp_opt != 'disabled' and 'HAVE_HOST_SMBD' in config_host
   summary_info += {'smbd':            config_host['CONFIG_SMBD_COMMAND']}
 endif
 summary_info += {'module support':    config_host.has_key('CONFIG_MODULES')}
diff --git a/net/slirp.c b/net/slirp.c
index 8350c6d45f..4348e74805 100644
--- a/net/slirp.c
+++ b/net/slirp.c
@@ -27,7 +27,7 @@
 #include "net/slirp.h"
 
 
-#ifndef _WIN32
+#if defined(CONFIG_SLIRP_SMBD)
 #include <pwd.h>
 #include <sys/wait.h>
 #endif
@@ -90,7 +90,7 @@ typedef struct SlirpState {
     Slirp *slirp;
     Notifier poll_notifier;
     Notifier exit_notifier;
-#ifndef _WIN32
+#if defined(CONFIG_SLIRP_SMBD)
     gchar *smb_dir;
 #endif
     GSList *fwd;
@@ -103,7 +103,7 @@ static QTAILQ_HEAD(, SlirpState) slirp_stacks =
 static int slirp_hostfwd(SlirpState *s, const char *redir_str, Error **errp);
 static int slirp_guestfwd(SlirpState *s, const char *config_str, Error **errp);
 
-#ifndef _WIN32
+#if defined(CONFIG_SLIRP_SMBD)
 static int slirp_smb(SlirpState *s, const char *exported_dir,
                      struct in_addr vserver_addr, Error **errp);
 static void slirp_smb_cleanup(SlirpState *s);
@@ -367,7 +367,7 @@ static int net_slirp_init(NetClientState *peer, const char *model,
     struct in6_addr ip6_prefix;
     struct in6_addr ip6_host;
     struct in6_addr ip6_dns;
-#ifndef _WIN32
+#if defined(CONFIG_SLIRP_SMBD)
     struct in_addr smbsrv = { .s_addr = 0 };
 #endif
     NetClientState *nc;
@@ -477,7 +477,7 @@ static int net_slirp_init(NetClientState *peer, const char *model,
         return -1;
     }
 
-#ifndef _WIN32
+#if defined(CONFIG_SLIRP_SMBD)
     if (vsmbserver && !inet_aton(vsmbserver, &smbsrv)) {
         error_setg(errp, "Failed to parse SMB address");
         return -1;
@@ -592,7 +592,7 @@ static int net_slirp_init(NetClientState *peer, const char *model,
             }
         }
     }
-#ifndef _WIN32
+#if defined(CONFIG_SLIRP_SMBD)
     if (smb_export) {
         if (slirp_smb(s, smb_export, smbsrv, errp) < 0) {
             goto error;
@@ -784,7 +784,7 @@ void hmp_hostfwd_add(Monitor *mon, const QDict *qdict)
 
 }
 
-#ifndef _WIN32
+#if defined(CONFIG_SLIRP_SMBD)
 
 /* automatic user mode samba server configuration */
 static void slirp_smb_cleanup(SlirpState *s)
@@ -899,7 +899,7 @@ static int slirp_smb(SlirpState* s, const char *exported_dir,
     return 0;
 }
 
-#endif /* !defined(_WIN32) */
+#endif /* defined(CONFIG_SLIRP_SMBD) */
 
 static int guestfwd_can_read(void *opaque)
 {
-- 
2.28.0



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

* [PATCH v7 05/11] osdep: build with non-working system() function
  2021-01-22 20:11 [PATCH v7 00/11] iOS and Apple Silicon host support Joelle van Dyne
                   ` (3 preceding siblings ...)
  2021-01-22 20:11 ` [PATCH v7 04/11] slirp: feature detection for smbd Joelle van Dyne
@ 2021-01-22 20:11 ` Joelle van Dyne
  2021-01-22 23:12   ` Peter Maydell
  2021-01-22 20:11 ` [PATCH v7 06/11] darwin: remove redundant dependency declaration Joelle van Dyne
                   ` (5 subsequent siblings)
  10 siblings, 1 reply; 26+ messages in thread
From: Joelle van Dyne @ 2021-01-22 20:11 UTC (permalink / raw)
  To: qemu-devel; +Cc: Joelle van Dyne

Build without error on hosts without a working system(). An assertion
will trigger if system() is called.

Signed-off-by: Joelle van Dyne <j@getutm.app>
---
 configure            | 19 +++++++++++++++++++
 include/qemu/osdep.h | 11 +++++++++++
 2 files changed, 30 insertions(+)

diff --git a/configure b/configure
index 92da27846e..82ce28c660 100755
--- a/configure
+++ b/configure
@@ -5318,6 +5318,21 @@ else
   sys_disk_h=no
 fi
 
+##########################################
+# check for system()
+
+have_system_function=no
+cat > $TMPC << EOF
+#include <stdlib.h>
+int main(void) {
+    return system("");
+}
+EOF
+if compile_prog "" "" ; then
+    have_system_function=yes
+fi
+
+
 ##########################################
 # End of CC checks
 # After here, no more $cc or $ld runs
@@ -6222,6 +6237,10 @@ if test "$secret_keyring" = "yes" ; then
   echo "CONFIG_SECRET_KEYRING=y" >> $config_host_mak
 fi
 
+if test "$have_system_function" = "yes" ; then
+  echo "HAVE_SYSTEM_FUNCTION=y" >> $config_host_mak
+fi
+
 echo "ROMS=$roms" >> $config_host_mak
 echo "MAKE=$make" >> $config_host_mak
 echo "PYTHON=$python" >> $config_host_mak
diff --git a/include/qemu/osdep.h b/include/qemu/osdep.h
index a434382c58..73346c4349 100644
--- a/include/qemu/osdep.h
+++ b/include/qemu/osdep.h
@@ -682,4 +682,15 @@ char *qemu_get_host_name(Error **errp);
  */
 size_t qemu_get_host_physmem(void);
 
+/**
+ * Platforms which do not support system() gets an assertion failure.
+ */
+#ifndef HAVE_SYSTEM_FUNCTION
+#define system platform_does_not_support_system
+static inline int platform_does_not_support_system(const char *command)
+{
+    assert(0);
+}
+#endif /* !HAVE_SYSTEM_FUNCTION */
+
 #endif
-- 
2.28.0



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

* [PATCH v7 06/11] darwin: remove redundant dependency declaration
  2021-01-22 20:11 [PATCH v7 00/11] iOS and Apple Silicon host support Joelle van Dyne
                   ` (4 preceding siblings ...)
  2021-01-22 20:11 ` [PATCH v7 05/11] osdep: build with non-working system() function Joelle van Dyne
@ 2021-01-22 20:11 ` Joelle van Dyne
  2021-01-22 22:43   ` Peter Maydell
  2021-01-22 20:11 ` [PATCH v7 07/11] darwin: fix cross-compiling for Darwin Joelle van Dyne
                   ` (4 subsequent siblings)
  10 siblings, 1 reply; 26+ messages in thread
From: Joelle van Dyne @ 2021-01-22 20:11 UTC (permalink / raw)
  To: qemu-devel; +Cc: Joelle van Dyne

Meson will find CoreFoundation, IOKit, and Cocoa as needed.

Signed-off-by: Joelle van Dyne <j@getutm.app>
---
 configure | 1 -
 1 file changed, 1 deletion(-)

diff --git a/configure b/configure
index 82ce28c660..4c485dd962 100755
--- a/configure
+++ b/configure
@@ -781,7 +781,6 @@ Darwin)
   fi
   audio_drv_list="coreaudio try-sdl"
   audio_possible_drivers="coreaudio sdl"
-  QEMU_LDFLAGS="-framework CoreFoundation -framework IOKit $QEMU_LDFLAGS"
   # Disable attempts to use ObjectiveC features in os/object.h since they
   # won't work when we're compiling with gcc as a C compiler.
   QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
-- 
2.28.0



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

* [PATCH v7 07/11] darwin: fix cross-compiling for Darwin
  2021-01-22 20:11 [PATCH v7 00/11] iOS and Apple Silicon host support Joelle van Dyne
                   ` (5 preceding siblings ...)
  2021-01-22 20:11 ` [PATCH v7 06/11] darwin: remove redundant dependency declaration Joelle van Dyne
@ 2021-01-22 20:11 ` Joelle van Dyne
  2021-01-22 22:41   ` Peter Maydell
  2021-01-22 20:11 ` [PATCH v7 08/11] configure: cross compile should use x86_64 cpu_family Joelle van Dyne
                   ` (3 subsequent siblings)
  10 siblings, 1 reply; 26+ messages in thread
From: Joelle van Dyne @ 2021-01-22 20:11 UTC (permalink / raw)
  To: qemu-devel; +Cc: Joelle van Dyne

Add objc to the Meson cross file as well as detection of Darwin.

Signed-off-by: Joelle van Dyne <j@getutm.app>
---
 configure | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/configure b/configure
index 4c485dd962..7e5ec7a5a1 100755
--- a/configure
+++ b/configure
@@ -6443,6 +6443,7 @@ echo "cpp_link_args = [${LDFLAGS:+$(meson_quote $LDFLAGS)}]" >> $cross
 echo "[binaries]" >> $cross
 echo "c = [$(meson_quote $cc)]" >> $cross
 test -n "$cxx" && echo "cpp = [$(meson_quote $cxx)]" >> $cross
+test -n "$objcc" && echo "objc = [$(meson_quote $objcc)]" >> $cross
 echo "ar = [$(meson_quote $ar)]" >> $cross
 echo "nm = [$(meson_quote $nm)]" >> $cross
 echo "pkgconfig = [$(meson_quote $pkg_config_exe)]" >> $cross
@@ -6461,6 +6462,9 @@ if test "$cross_compile" = "yes"; then
     if test "$linux" = "yes" ; then
         echo "system = 'linux'" >> $cross
     fi
+    if test "$darwin" = "yes" ; then
+        echo "system = 'darwin'" >> $cross
+    fi
     case "$ARCH" in
         i386|x86_64)
             echo "cpu_family = 'x86'" >> $cross
-- 
2.28.0



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

* [PATCH v7 08/11] configure: cross compile should use x86_64 cpu_family
  2021-01-22 20:11 [PATCH v7 00/11] iOS and Apple Silicon host support Joelle van Dyne
                   ` (6 preceding siblings ...)
  2021-01-22 20:11 ` [PATCH v7 07/11] darwin: fix cross-compiling for Darwin Joelle van Dyne
@ 2021-01-22 20:11 ` Joelle van Dyne
  2021-01-22 20:11 ` [PATCH v7 09/11] block: check availablity for preadv/pwritev on mac Joelle van Dyne
                   ` (2 subsequent siblings)
  10 siblings, 0 replies; 26+ messages in thread
From: Joelle van Dyne @ 2021-01-22 20:11 UTC (permalink / raw)
  To: qemu-devel; +Cc: Philippe Mathieu-Daudé, Joelle van Dyne

Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Signed-off-by: Joelle van Dyne <j@getutm.app>
---
 configure | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/configure b/configure
index 7e5ec7a5a1..f487be3cfe 100755
--- a/configure
+++ b/configure
@@ -6466,9 +6466,12 @@ if test "$cross_compile" = "yes"; then
         echo "system = 'darwin'" >> $cross
     fi
     case "$ARCH" in
-        i386|x86_64)
+        i386)
             echo "cpu_family = 'x86'" >> $cross
             ;;
+        x86_64)
+            echo "cpu_family = 'x86_64'" >> $cross
+            ;;
         ppc64le)
             echo "cpu_family = 'ppc64'" >> $cross
             ;;
-- 
2.28.0



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

* [PATCH v7 09/11] block: check availablity for preadv/pwritev on mac
  2021-01-22 20:11 [PATCH v7 00/11] iOS and Apple Silicon host support Joelle van Dyne
                   ` (7 preceding siblings ...)
  2021-01-22 20:11 ` [PATCH v7 08/11] configure: cross compile should use x86_64 cpu_family Joelle van Dyne
@ 2021-01-22 20:11 ` Joelle van Dyne
  2021-01-22 20:11 ` [PATCH v7 10/11] darwin: detect CoreAudio for build Joelle van Dyne
  2021-01-22 20:11 ` [PATCH v7 11/11] darwin: remove 64-bit build detection on 32-bit OS Joelle van Dyne
  10 siblings, 0 replies; 26+ messages in thread
From: Joelle van Dyne @ 2021-01-22 20:11 UTC (permalink / raw)
  To: qemu-devel; +Cc: Kevin Wolf, Joelle van Dyne, open list:raw, Max Reitz

macOS 11/iOS 14 added preadv/pwritev APIs. Due to weak linking, configure
will succeed with CONFIG_PREADV even when targeting a lower OS version.
We therefore need to check at run time if we can actually use these APIs.

Signed-off-by: Joelle van Dyne <j@getutm.app>
---
 block/file-posix.c | 33 +++++++++++++++++++++++++++++++++
 1 file changed, 33 insertions(+)

diff --git a/block/file-posix.c b/block/file-posix.c
index 666d3e7504..6473f84db8 100644
--- a/block/file-posix.c
+++ b/block/file-posix.c
@@ -1386,17 +1386,50 @@ static int handle_aiocb_flush(void *opaque)
 #ifdef CONFIG_PREADV
 
 static bool preadv_present = true;
+static bool preadv_checked;
 
 static ssize_t
 qemu_preadv(int fd, const struct iovec *iov, int nr_iov, off_t offset)
 {
+#ifdef CONFIG_DARWIN /* preadv introduced in macOS 11 */
+    if (unlikely(!preadv_checked)) {
+        if (__builtin_available(macOS 11, iOS 14, watchOS 7, tvOS 14, *)) {
+            preadv_checked = true;
+        } else {
+            preadv_present = false;
+            return -ENOSYS;
+        }
+    }
+    /* Now we suppress the availability warning since we use the cached check */
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wunguarded-availability-new"
+    return preadv(fd, iov, nr_iov, offset);
+#pragma clang diagnostic pop
+#else /* CONFIG_DARWIN */
     return preadv(fd, iov, nr_iov, offset);
+#endif
 }
 
 static ssize_t
 qemu_pwritev(int fd, const struct iovec *iov, int nr_iov, off_t offset)
 {
+#ifdef CONFIG_DARWIN /* preadv introduced in macOS 11 */
+    if (unlikely(!preadv_checked)) {
+        if (__builtin_available(macOS 11, iOS 14, watchOS 7, tvOS 14, *)) {
+            preadv_checked = true;
+        } else {
+            preadv_present = false;
+            return -ENOSYS;
+        }
+    }
+    /* Now we suppress the availability warning since we use the cached check */
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wunguarded-availability-new"
+    return pwritev(fd, iov, nr_iov, offset);
+#pragma clang diagnostic pop
+#else /* CONFIG_DARWIN */
     return pwritev(fd, iov, nr_iov, offset);
+#endif
 }
 
 #else
-- 
2.28.0



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

* [PATCH v7 10/11] darwin: detect CoreAudio for build
  2021-01-22 20:11 [PATCH v7 00/11] iOS and Apple Silicon host support Joelle van Dyne
                   ` (8 preceding siblings ...)
  2021-01-22 20:11 ` [PATCH v7 09/11] block: check availablity for preadv/pwritev on mac Joelle van Dyne
@ 2021-01-22 20:11 ` Joelle van Dyne
  2021-01-22 20:11 ` [PATCH v7 11/11] darwin: remove 64-bit build detection on 32-bit OS Joelle van Dyne
  10 siblings, 0 replies; 26+ messages in thread
From: Joelle van Dyne @ 2021-01-22 20:11 UTC (permalink / raw)
  To: qemu-devel; +Cc: Joelle van Dyne

On iOS there is no CoreAudio, so we should not assume Darwin always
has it.

Signed-off-by: Joelle van Dyne <j@getutm.app>
---
 configure | 35 +++++++++++++++++++++++++++++++++--
 1 file changed, 33 insertions(+), 2 deletions(-)

diff --git a/configure b/configure
index f487be3cfe..fb671258e6 100755
--- a/configure
+++ b/configure
@@ -319,6 +319,7 @@ fdt="auto"
 netmap="no"
 sdl="auto"
 sdl_image="auto"
+coreaudio="auto"
 virtiofsd="auto"
 virtfs="auto"
 libudev="auto"
@@ -779,7 +780,7 @@ Darwin)
     QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
     QEMU_LDFLAGS="-arch x86_64 $QEMU_LDFLAGS"
   fi
-  audio_drv_list="coreaudio try-sdl"
+  audio_drv_list="try-coreaudio try-sdl"
   audio_possible_drivers="coreaudio sdl"
   # Disable attempts to use ObjectiveC features in os/object.h since they
   # won't work when we're compiling with gcc as a C compiler.
@@ -3162,6 +3163,24 @@ EOF
   fi
 fi
 
+##########################################
+# detect CoreAudio
+if test "$coreaudio" != "no" ; then
+  coreaudio_libs="-framework CoreAudio"
+  cat > $TMPC << EOF
+#include <CoreAudio/CoreAudio.h>
+int main(void)
+{
+  return (int)AudioGetCurrentHostTime();
+}
+EOF
+  if compile_prog "" "$coreaudio_libs" ; then
+    coreaudio=yes
+  else
+    coreaudio=no
+  fi
+fi
+
 ##########################################
 # Sound support libraries probe
 
@@ -3218,8 +3237,20 @@ for drv in $audio_drv_list; do
     fi
     ;;
 
-    coreaudio)
+    coreaudio | try-coreaudio)
+    if test "$coreaudio" = "no"; then
+      if test "$drv" = "try-coreaudio"; then
+        audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-coreaudio//')
+      else
+        error_exit "$drv check failed" \
+                "Make sure to have the $drv is available."
+      fi
+    else
       coreaudio_libs="-framework CoreAudio"
+      if test "$drv" = "try-coreaudio"; then
+        audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-coreaudio/coreaudio/')
+      fi
+    fi
     ;;
 
     dsound)
-- 
2.28.0



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

* [PATCH v7 11/11] darwin: remove 64-bit build detection on 32-bit OS
  2021-01-22 20:11 [PATCH v7 00/11] iOS and Apple Silicon host support Joelle van Dyne
                   ` (9 preceding siblings ...)
  2021-01-22 20:11 ` [PATCH v7 10/11] darwin: detect CoreAudio for build Joelle van Dyne
@ 2021-01-22 20:11 ` Joelle van Dyne
  2021-01-22 22:39   ` Peter Maydell
  10 siblings, 1 reply; 26+ messages in thread
From: Joelle van Dyne @ 2021-01-22 20:11 UTC (permalink / raw)
  To: qemu-devel; +Cc: Joelle van Dyne

A workaround added in early days of 64-bit OSX forced x86_64 if the
host machine had 64-bit support. This creates issues when cross-
compiling for ARM64. Additionally, the user can always use --cpu=* to
manually set the host CPU and therefore this workaround should be
removed.

Signed-off-by: Joelle van Dyne <j@getutm.app>
---
 configure | 11 -----------
 1 file changed, 11 deletions(-)

diff --git a/configure b/configure
index fb671258e6..c7fbda22b9 100755
--- a/configure
+++ b/configure
@@ -626,13 +626,6 @@ fi
 # the correct CPU with the --cpu option.
 case $targetos in
 Darwin)
-  # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can
-  # run 64-bit userspace code.
-  # If the user didn't specify a CPU explicitly and the kernel says this is
-  # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code.
-  if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then
-    cpu="x86_64"
-  fi
   HOST_DSOSUF=".dylib"
   ;;
 SunOS)
@@ -776,10 +769,6 @@ OpenBSD)
 Darwin)
   bsd="yes"
   darwin="yes"
-  if [ "$cpu" = "x86_64" ] ; then
-    QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
-    QEMU_LDFLAGS="-arch x86_64 $QEMU_LDFLAGS"
-  fi
   audio_drv_list="try-coreaudio try-sdl"
   audio_possible_drivers="coreaudio sdl"
   # Disable attempts to use ObjectiveC features in os/object.h since they
-- 
2.28.0



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

* Re: [PATCH v7 11/11] darwin: remove 64-bit build detection on 32-bit OS
  2021-01-22 20:11 ` [PATCH v7 11/11] darwin: remove 64-bit build detection on 32-bit OS Joelle van Dyne
@ 2021-01-22 22:39   ` Peter Maydell
  0 siblings, 0 replies; 26+ messages in thread
From: Peter Maydell @ 2021-01-22 22:39 UTC (permalink / raw)
  To: Joelle van Dyne; +Cc: QEMU Developers

On Fri, 22 Jan 2021 at 20:16, Joelle van Dyne <j@getutm.app> wrote:
>
> A workaround added in early days of 64-bit OSX forced x86_64 if the
> host machine had 64-bit support. This creates issues when cross-
> compiling for ARM64. Additionally, the user can always use --cpu=* to
> manually set the host CPU and therefore this workaround should be
> removed.
>
> Signed-off-by: Joelle van Dyne <j@getutm.app>
> ---
>  configure | 11 -----------
>  1 file changed, 11 deletions(-)
>
> diff --git a/configure b/configure
> index fb671258e6..c7fbda22b9 100755
> --- a/configure
> +++ b/configure
> @@ -626,13 +626,6 @@ fi
>  # the correct CPU with the --cpu option.
>  case $targetos in
>  Darwin)
> -  # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can
> -  # run 64-bit userspace code.
> -  # If the user didn't specify a CPU explicitly and the kernel says this is
> -  # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code.
> -  if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then
> -    cpu="x86_64"
> -  fi
>    HOST_DSOSUF=".dylib"
>    ;;
>  SunOS)

I was just thinking the other day that we could remove this hack...

Reviewed-by: Peter Maydell <peter.maydell@linaro.org>

thanks
-- PMM


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

* Re: [PATCH v7 07/11] darwin: fix cross-compiling for Darwin
  2021-01-22 20:11 ` [PATCH v7 07/11] darwin: fix cross-compiling for Darwin Joelle van Dyne
@ 2021-01-22 22:41   ` Peter Maydell
  0 siblings, 0 replies; 26+ messages in thread
From: Peter Maydell @ 2021-01-22 22:41 UTC (permalink / raw)
  To: Joelle van Dyne; +Cc: QEMU Developers

On Fri, 22 Jan 2021 at 20:18, Joelle van Dyne <j@getutm.app> wrote:
>
> Add objc to the Meson cross file as well as detection of Darwin.
>
> Signed-off-by: Joelle van Dyne <j@getutm.app>

Reviewed-by: Peter Maydell <peter.maydell@linaro.org>

thanks
-- PMM


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

* Re: [PATCH v7 06/11] darwin: remove redundant dependency declaration
  2021-01-22 20:11 ` [PATCH v7 06/11] darwin: remove redundant dependency declaration Joelle van Dyne
@ 2021-01-22 22:43   ` Peter Maydell
  0 siblings, 0 replies; 26+ messages in thread
From: Peter Maydell @ 2021-01-22 22:43 UTC (permalink / raw)
  To: Joelle van Dyne; +Cc: QEMU Developers

On Fri, 22 Jan 2021 at 20:20, Joelle van Dyne <j@getutm.app> wrote:
>
> Meson will find CoreFoundation, IOKit, and Cocoa as needed.
>
> Signed-off-by: Joelle van Dyne <j@getutm.app>
> ---
>  configure | 1 -
>  1 file changed, 1 deletion(-)
>
> diff --git a/configure b/configure
> index 82ce28c660..4c485dd962 100755
> --- a/configure
> +++ b/configure
> @@ -781,7 +781,6 @@ Darwin)
>    fi
>    audio_drv_list="coreaudio try-sdl"
>    audio_possible_drivers="coreaudio sdl"
> -  QEMU_LDFLAGS="-framework CoreFoundation -framework IOKit $QEMU_LDFLAGS"
>    # Disable attempts to use ObjectiveC features in os/object.h since they
>    # won't work when we're compiling with gcc as a C compiler.
>    QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
> --

Reviewed-by: Peter Maydell <peter.maydell@linaro.org>

I notice that configure also sets
      coreaudio_libs="-framework CoreAudio"
but that looks like it's something that hasn't yet been moved
into meson.build, so we can't remove it yet.

thanks
-- PMM


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

* Re: [PATCH v7 04/11] slirp: feature detection for smbd
  2021-01-22 20:11 ` [PATCH v7 04/11] slirp: feature detection for smbd Joelle van Dyne
@ 2021-01-22 22:49   ` Peter Maydell
  2021-01-22 23:12     ` Joelle van Dyne
  0 siblings, 1 reply; 26+ messages in thread
From: Peter Maydell @ 2021-01-22 22:49 UTC (permalink / raw)
  To: Joelle van Dyne; +Cc: Samuel Thibault, Jason Wang, QEMU Developers

On Fri, 22 Jan 2021 at 20:16, Joelle van Dyne <j@getutm.app> wrote:
>
> Replace Windows specific macro with a more generic feature detection
> macro. Allows slirp smb feature to be disabled manually as well.
>
> Signed-off-by: Joelle van Dyne <j@getutm.app>
> ---


> +if test "$slirp_smbd" = "yes" ; then
> +  echo "CONFIG_SLIRP_SMBD=y" >> $config_host_mak
> +  echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
> +fi

This sets "CONFIG_SLIRP_SMBD" and "CONFIG_SMBD_COMMAND"...

>  if test "$vde" = "yes" ; then
>    echo "CONFIG_VDE=y" >> $config_host_mak
>    echo "VDE_LIBS=$vde_libs" >> $config_host_mak
> diff --git a/meson.build b/meson.build
> index 6c3ee7f8ca..9577138d7f 100644
> --- a/meson.build
> +++ b/meson.build
> @@ -2331,7 +2331,7 @@ summary_info += {'sphinx-build':      sphinx_build.found()}
>  summary_info += {'genisoimage':       config_host['GENISOIMAGE']}
>  # TODO: add back version
>  summary_info += {'slirp support':     slirp_opt == 'disabled' ? false : slirp_opt}
> -if slirp_opt != 'disabled'
> +if slirp_opt != 'disabled' and 'HAVE_HOST_SMBD' in config_host

...but this is looking for "HAVE_HOST_SMBD". Should it be something else?

>    summary_info += {'smbd':            config_host['CONFIG_SMBD_COMMAND']}
>  endif
>  summary_info += {'module support':    config_host.has_key('CONFIG_MODULES')}

thanks
-- PMM


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

* Re: [PATCH v7 05/11] osdep: build with non-working system() function
  2021-01-22 20:11 ` [PATCH v7 05/11] osdep: build with non-working system() function Joelle van Dyne
@ 2021-01-22 23:12   ` Peter Maydell
  2021-01-22 23:17     ` Peter Maydell
  0 siblings, 1 reply; 26+ messages in thread
From: Peter Maydell @ 2021-01-22 23:12 UTC (permalink / raw)
  To: Joelle van Dyne; +Cc: QEMU Developers

On Fri, 22 Jan 2021 at 20:13, Joelle van Dyne <j@getutm.app> wrote:
>
> Build without error on hosts without a working system(). An assertion
> will trigger if system() is called.
>
> Signed-off-by: Joelle van Dyne <j@getutm.app>

 configure            | 19 +++++++++++++++++++

Can we do the "does system() exist?" check in meson.build ?
Untested, but looking at the existing check for "does gettid() exist?"
it should be two lines:

has_system = cc.has_function('system')

and then later:

config_host_data.set('HAVE_SYSTEM_FUNCTION', has_system)

> +/**
> + * Platforms which do not support system() gets an assertion failure.
> + */
> +#ifndef HAVE_SYSTEM_FUNCTION
> +#define system platform_does_not_support_system
> +static inline int platform_does_not_support_system(const char *command)
> +{
> +    assert(0);
> +}
> +#endif /* !HAVE_SYSTEM_FUNCTION */

I think we should make this return an error code rather than assert:

    errno = ENOSYS;
    return -1;

In particular, the arm, m68k and nios2 semihosting ABIs presented
to the guest include 'SYSTEM' semihosting calls which we implement
as "call system() with the string the guest hands us". On a
platform without a system() function we want to return an
error to the guest there, not assert.

The other possible approach would be to find all the places
which want to call system() and add suitable ifdeffery to handle
platforms without system:
 * a win32-specific part of the guest-agent (no action needed)
 * net/slirp.c (already handled by the smbd patch in this series)
 * code in tests/ (5 instances)
 * the 3 semihosting uses

But I think providing an always-fails system() is fine.

thanks
-- PMM


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

* Re: [PATCH v7 04/11] slirp: feature detection for smbd
  2021-01-22 22:49   ` Peter Maydell
@ 2021-01-22 23:12     ` Joelle van Dyne
  0 siblings, 0 replies; 26+ messages in thread
From: Joelle van Dyne @ 2021-01-22 23:12 UTC (permalink / raw)
  To: Peter Maydell
  Cc: Samuel Thibault, Jason Wang, Joelle van Dyne, QEMU Developers

On Fri, Jan 22, 2021 at 2:49 PM Peter Maydell <peter.maydell@linaro.org> wrote:
>
> On Fri, 22 Jan 2021 at 20:16, Joelle van Dyne <j@getutm.app> wrote:
> >
> > Replace Windows specific macro with a more generic feature detection
> > macro. Allows slirp smb feature to be disabled manually as well.
> >
> > Signed-off-by: Joelle van Dyne <j@getutm.app>
> > ---
>
>
> > +if test "$slirp_smbd" = "yes" ; then
> > +  echo "CONFIG_SLIRP_SMBD=y" >> $config_host_mak
> > +  echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
> > +fi
>
> This sets "CONFIG_SLIRP_SMBD" and "CONFIG_SMBD_COMMAND"...
>
> >  if test "$vde" = "yes" ; then
> >    echo "CONFIG_VDE=y" >> $config_host_mak
> >    echo "VDE_LIBS=$vde_libs" >> $config_host_mak
> > diff --git a/meson.build b/meson.build
> > index 6c3ee7f8ca..9577138d7f 100644
> > --- a/meson.build
> > +++ b/meson.build
> > @@ -2331,7 +2331,7 @@ summary_info += {'sphinx-build':      sphinx_build.found()}
> >  summary_info += {'genisoimage':       config_host['GENISOIMAGE']}
> >  # TODO: add back version
> >  summary_info += {'slirp support':     slirp_opt == 'disabled' ? false : slirp_opt}
> > -if slirp_opt != 'disabled'
> > +if slirp_opt != 'disabled' and 'HAVE_HOST_SMBD' in config_host
>
> ...but this is looking for "HAVE_HOST_SMBD". Should it be something else?
Yes, it is a typo, will fix.

-j
>
> >    summary_info += {'smbd':            config_host['CONFIG_SMBD_COMMAND']}
> >  endif
> >  summary_info += {'module support':    config_host.has_key('CONFIG_MODULES')}
>
> thanks
> -- PMM


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

* Re: [PATCH v7 03/11] configure: check for sys/disk.h
  2021-01-22 20:11 ` [PATCH v7 03/11] configure: check for sys/disk.h Joelle van Dyne
@ 2021-01-22 23:16   ` Peter Maydell
  0 siblings, 0 replies; 26+ messages in thread
From: Peter Maydell @ 2021-01-22 23:16 UTC (permalink / raw)
  To: Joelle van Dyne
  Cc: Kevin Wolf, QEMU Developers, open list:Block layer core, Max Reitz

On Fri, 22 Jan 2021 at 20:13, Joelle van Dyne <j@getutm.app> wrote:
>
> Some BSD platforms do not have this header.
>
> Signed-off-by: Joelle van Dyne <j@getutm.app>
> ---
>  configure          | 9 +++++++++
>  block.c            | 2 +-
>  block/file-posix.c | 2 +-
>  3 files changed, 11 insertions(+), 2 deletions(-)
>
> diff --git a/configure b/configure
> index 32be5d225d..951de427bb 100755
> --- a/configure
> +++ b/configure
> @@ -5295,6 +5295,12 @@ else
>    have_host_block_device=no
>  fi
>
> +if check_include "sys/disk.h" ; then
> +  sys_disk_h=yes
> +else
> +  sys_disk_h=no
> +fi
> +
>  ##########################################
>  # End of CC checks
>  # After here, no more $cc or $ld runs
> @@ -5528,6 +5534,9 @@ echo "ARCH=$ARCH" >> $config_host_mak
>  if test "$have_host_block_device" = "yes" ; then
>    echo "HAVE_HOST_BLOCK_DEVICE=y" >> $config_host_mak
>  fi
> +if test "$sys_disk_h" = "yes" ; then
> +  echo "HAVE_SYS_DISK_H=y" >> $config_host_mak
> +fi
>  if test "$debug_tcg" = "yes" ; then
>    echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
>  fi

We should do this check in meson.build, where it is a one-liner:

config_host_data.set('HAVE_SYS_DISK_H', cc.has_header('sys/disk.h'))

(compare the existing HAVE_PTY_H etc).

thanks
-- PMM


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

* Re: [PATCH v7 05/11] osdep: build with non-working system() function
  2021-01-22 23:12   ` Peter Maydell
@ 2021-01-22 23:17     ` Peter Maydell
  2021-01-23  3:18       ` Joelle van Dyne
  0 siblings, 1 reply; 26+ messages in thread
From: Peter Maydell @ 2021-01-22 23:17 UTC (permalink / raw)
  To: Joelle van Dyne; +Cc: QEMU Developers

On Fri, 22 Jan 2021 at 23:12, Peter Maydell <peter.maydell@linaro.org> wrote:
>
> On Fri, 22 Jan 2021 at 20:13, Joelle van Dyne <j@getutm.app> wrote:
> >
> > Build without error on hosts without a working system(). An assertion
> > will trigger if system() is called.
> >
> > Signed-off-by: Joelle van Dyne <j@getutm.app>
>
>  configure            | 19 +++++++++++++++++++
>
> Can we do the "does system() exist?" check in meson.build ?
> Untested, but looking at the existing check for "does gettid() exist?"
> it should be two lines:
>
> has_system = cc.has_function('system')
>
> and then later:
>
> config_host_data.set('HAVE_SYSTEM_FUNCTION', has_system)

...looking at how we do the HAVE_FOO_H settings, I think we
can just collapse this into one line:

config_host_data.set('HAVE_SYSTEM_FUNCTION', cc.has_function('system'))

thanks
-- PMM


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

* Re: [PATCH v7 05/11] osdep: build with non-working system() function
  2021-01-22 23:17     ` Peter Maydell
@ 2021-01-23  3:18       ` Joelle van Dyne
  2021-01-23 13:45         ` Peter Maydell
  0 siblings, 1 reply; 26+ messages in thread
From: Joelle van Dyne @ 2021-01-23  3:18 UTC (permalink / raw)
  To: Peter Maydell; +Cc: Joelle van Dyne, QEMU Developers

Unfortunately, this doesn't work for iOS, which defines system() but
throws a compile time error if you try to call it.

-j

On Fri, Jan 22, 2021 at 3:17 PM Peter Maydell <peter.maydell@linaro.org> wrote:
>
> On Fri, 22 Jan 2021 at 23:12, Peter Maydell <peter.maydell@linaro.org> wrote:
> >
> > On Fri, 22 Jan 2021 at 20:13, Joelle van Dyne <j@getutm.app> wrote:
> > >
> > > Build without error on hosts without a working system(). An assertion
> > > will trigger if system() is called.
> > >
> > > Signed-off-by: Joelle van Dyne <j@getutm.app>
> >
> >  configure            | 19 +++++++++++++++++++
> >
> > Can we do the "does system() exist?" check in meson.build ?
> > Untested, but looking at the existing check for "does gettid() exist?"
> > it should be two lines:
> >
> > has_system = cc.has_function('system')
> >
> > and then later:
> >
> > config_host_data.set('HAVE_SYSTEM_FUNCTION', has_system)
>
> ...looking at how we do the HAVE_FOO_H settings, I think we
> can just collapse this into one line:
>
> config_host_data.set('HAVE_SYSTEM_FUNCTION', cc.has_function('system'))
>
> thanks
> -- PMM


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

* Re: [PATCH v7 05/11] osdep: build with non-working system() function
  2021-01-23  3:18       ` Joelle van Dyne
@ 2021-01-23 13:45         ` Peter Maydell
  2021-01-25  8:04           ` Paolo Bonzini
  0 siblings, 1 reply; 26+ messages in thread
From: Peter Maydell @ 2021-01-23 13:45 UTC (permalink / raw)
  To: Joelle van Dyne; +Cc: Paolo Bonzini, QEMU Developers

On Sat, 23 Jan 2021 at 03:18, Joelle van Dyne <j@getutm.app> wrote:
On Fri, Jan 22, 2021 at 3:17 PM Peter Maydell <peter.maydell@linaro.org> wrote:
>> Can we do the "does system() exist?" check in meson.build ?

>> config_host_data.set('HAVE_SYSTEM_FUNCTION', cc.has_function('system'))

> Unfortunately, this doesn't work for iOS, which defines system() but
> throws a compile time error if you try to call it.

That's odd -- as far as I can tell the meson implementation
of has_function() does what I expected it to do, ie
"try to compile and link a little program that uses the
function, and see if it successfully links":
https://github.com/mesonbuild/meson/blob/39ede12aa5b27376341df85bc9ec254913f044bd/mesonbuild/compilers/mixins/clike.py#L791
There's some initial cleverness there too, so I guess some
part of that must be what's tripping us up.

In any case, I think we should be doing new checks in
meson.build, not configure.  Paolo, what's the right
way to do a meson "really compile this program and
check it built" test?

thanks
-- PMM


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

* Re: [PATCH v7 05/11] osdep: build with non-working system() function
  2021-01-23 13:45         ` Peter Maydell
@ 2021-01-25  8:04           ` Paolo Bonzini
  2021-01-26  0:12             ` Joelle van Dyne
  0 siblings, 1 reply; 26+ messages in thread
From: Paolo Bonzini @ 2021-01-25  8:04 UTC (permalink / raw)
  To: Peter Maydell, Joelle van Dyne; +Cc: QEMU Developers

On 23/01/21 14:45, Peter Maydell wrote:
> On Sat, 23 Jan 2021 at 03:18, Joelle van Dyne <j@getutm.app> wrote:
> On Fri, Jan 22, 2021 at 3:17 PM Peter Maydell <peter.maydell@linaro.org> wrote:
>>> Can we do the "does system() exist?" check in meson.build ?
> 
>>> config_host_data.set('HAVE_SYSTEM_FUNCTION', cc.has_function('system'))
> 
>> Unfortunately, this doesn't work for iOS, which defines system() but
>> throws a compile time error if you try to call it.
> 
> That's odd -- as far as I can tell the meson implementation
> of has_function() does what I expected it to do, ie
> "try to compile and link a little program that uses the
> function, and see if it successfully links":
> https://github.com/mesonbuild/meson/blob/39ede12aa5b27376341df85bc9ec254913f044bd/mesonbuild/compilers/mixins/clike.py#L791
> There's some initial cleverness there too, so I guess some
> part of that must be what's tripping us up.
> 
> In any case, I think we should be doing new checks in
> meson.build, not configure.  Paolo, what's the right
> way to do a meson "really compile this program and
> check it built" test?

One possibility is that you have to specify the #include in the "prefix" 
argument of cc.has_function for the test to behave as the QEMU code?

If cc.has_function doesn't work, there's cc.compiles() and cc.links().

Paolo



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

* Re: [PATCH v7 05/11] osdep: build with non-working system() function
  2021-01-25  8:04           ` Paolo Bonzini
@ 2021-01-26  0:12             ` Joelle van Dyne
  2021-01-26  0:42               ` Paolo Bonzini
  2021-01-26  9:29               ` Peter Maydell
  0 siblings, 2 replies; 26+ messages in thread
From: Joelle van Dyne @ 2021-01-26  0:12 UTC (permalink / raw)
  To: Paolo Bonzini; +Cc: Peter Maydell, Joelle van Dyne, QEMU Developers

Here's how meson does cc.has_function

https://github.com/mesonbuild/meson/blob/master/mesonbuild/compilers/mixins/clike.py#L761

Since the compiler error comes from the header file with

__attribute__((availability(ios,unavailable)))

The meson check will always pass.

cc.compiles should work though. Is there a reason why it's not used
instead of all the compile_prog checks in ./configure ?

-j

On Mon, Jan 25, 2021 at 12:04 AM Paolo Bonzini <pbonzini@redhat.com> wrote:
>
> On 23/01/21 14:45, Peter Maydell wrote:
> > On Sat, 23 Jan 2021 at 03:18, Joelle van Dyne <j@getutm.app> wrote:
> > On Fri, Jan 22, 2021 at 3:17 PM Peter Maydell <peter.maydell@linaro.org> wrote:
> >>> Can we do the "does system() exist?" check in meson.build ?
> >
> >>> config_host_data.set('HAVE_SYSTEM_FUNCTION', cc.has_function('system'))
> >
> >> Unfortunately, this doesn't work for iOS, which defines system() but
> >> throws a compile time error if you try to call it.
> >
> > That's odd -- as far as I can tell the meson implementation
> > of has_function() does what I expected it to do, ie
> > "try to compile and link a little program that uses the
> > function, and see if it successfully links":
> > https://github.com/mesonbuild/meson/blob/39ede12aa5b27376341df85bc9ec254913f044bd/mesonbuild/compilers/mixins/clike.py#L791
> > There's some initial cleverness there too, so I guess some
> > part of that must be what's tripping us up.
> >
> > In any case, I think we should be doing new checks in
> > meson.build, not configure.  Paolo, what's the right
> > way to do a meson "really compile this program and
> > check it built" test?
>
> One possibility is that you have to specify the #include in the "prefix"
> argument of cc.has_function for the test to behave as the QEMU code?
>
> If cc.has_function doesn't work, there's cc.compiles() and cc.links().
>
> Paolo
>


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

* Re: [PATCH v7 05/11] osdep: build with non-working system() function
  2021-01-26  0:12             ` Joelle van Dyne
@ 2021-01-26  0:42               ` Paolo Bonzini
  2021-01-26  9:29               ` Peter Maydell
  1 sibling, 0 replies; 26+ messages in thread
From: Paolo Bonzini @ 2021-01-26  0:42 UTC (permalink / raw)
  To: Joelle van Dyne; +Cc: Peter Maydell, QEMU Developers

On 26/01/21 01:12, Joelle van Dyne wrote:
> Here's how meson does cc.has_function
> 
> https://github.com/mesonbuild/meson/blob/master/mesonbuild/compilers/mixins/clike.py#L761
> 
> Since the compiler error comes from the header file with
> 
> __attribute__((availability(ios,unavailable)))
> 
> The meson check will always pass.
> 
> cc.compiles should work though. Is there a reason why it's not used
> instead of all the compile_prog checks in ./configure ?

Just because the Meson build system is only a few months old.

Alternatively:

         # If we have any includes in the prefix supplied by the user, 
assume
         # that the user wants us to use the symbol prototype defined in 
those
         # includes. If not, then try to do the Autoconf-style check with
         # a dummy prototype definition of our own.

so adding a "prefix: '#include <stdlib.h>'" to cc.has_function should 
work too.

Paolo



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

* Re: [PATCH v7 05/11] osdep: build with non-working system() function
  2021-01-26  0:12             ` Joelle van Dyne
  2021-01-26  0:42               ` Paolo Bonzini
@ 2021-01-26  9:29               ` Peter Maydell
  1 sibling, 0 replies; 26+ messages in thread
From: Peter Maydell @ 2021-01-26  9:29 UTC (permalink / raw)
  To: Joelle van Dyne; +Cc: Paolo Bonzini, QEMU Developers

On Tue, 26 Jan 2021 at 00:12, Joelle van Dyne <j@getutm.app> wrote:
> cc.compiles should work though. Is there a reason why it's not used
> instead of all the compile_prog checks in ./configure ?

As Paolo says, that's because our transition to Meson is
pretty recent. We put in the minimum necessary to move all
our old makefiles over to meson.build, but left the bulk
of the old configure script in place initially. Since then
we've been gradually converting tests in configure to
meson.build tests, but configure's a big script and it's
taking us a while. In the meantime we're preferring new
tests to be done in meson.

thanks
-- PMM


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

end of thread, other threads:[~2021-01-26  9:30 UTC | newest]

Thread overview: 26+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-01-22 20:11 [PATCH v7 00/11] iOS and Apple Silicon host support Joelle van Dyne
2021-01-22 20:11 ` [PATCH v7 01/11] block: feature detection for host block support Joelle van Dyne
2021-01-22 20:11 ` [PATCH v7 02/11] configure: cross-compiling with empty cross_prefix Joelle van Dyne
2021-01-22 20:11 ` [PATCH v7 03/11] configure: check for sys/disk.h Joelle van Dyne
2021-01-22 23:16   ` Peter Maydell
2021-01-22 20:11 ` [PATCH v7 04/11] slirp: feature detection for smbd Joelle van Dyne
2021-01-22 22:49   ` Peter Maydell
2021-01-22 23:12     ` Joelle van Dyne
2021-01-22 20:11 ` [PATCH v7 05/11] osdep: build with non-working system() function Joelle van Dyne
2021-01-22 23:12   ` Peter Maydell
2021-01-22 23:17     ` Peter Maydell
2021-01-23  3:18       ` Joelle van Dyne
2021-01-23 13:45         ` Peter Maydell
2021-01-25  8:04           ` Paolo Bonzini
2021-01-26  0:12             ` Joelle van Dyne
2021-01-26  0:42               ` Paolo Bonzini
2021-01-26  9:29               ` Peter Maydell
2021-01-22 20:11 ` [PATCH v7 06/11] darwin: remove redundant dependency declaration Joelle van Dyne
2021-01-22 22:43   ` Peter Maydell
2021-01-22 20:11 ` [PATCH v7 07/11] darwin: fix cross-compiling for Darwin Joelle van Dyne
2021-01-22 22:41   ` Peter Maydell
2021-01-22 20:11 ` [PATCH v7 08/11] configure: cross compile should use x86_64 cpu_family Joelle van Dyne
2021-01-22 20:11 ` [PATCH v7 09/11] block: check availablity for preadv/pwritev on mac Joelle van Dyne
2021-01-22 20:11 ` [PATCH v7 10/11] darwin: detect CoreAudio for build Joelle van Dyne
2021-01-22 20:11 ` [PATCH v7 11/11] darwin: remove 64-bit build detection on 32-bit OS Joelle van Dyne
2021-01-22 22:39   ` Peter Maydell

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.