qemu-ppc
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH 17/19] meson: Add wasm build in build scripts


From: Philippe Mathieu-Daudé
Subject: Re: [PATCH 17/19] meson: Add wasm build in build scripts
Date: Wed, 16 Apr 2025 11:22:10 +0200
User-agent: Mozilla Thunderbird

Hi Kohei,

On 16/4/25 10:14, Kohei Tokunaga wrote:
has_int128_type is set to false on emscripten as of now to avoid errors by
libffi. Tests are disabled on emscripten because they rely on host
features that aren't supported by emscripten (e.g. fork and unix
socket).

Signed-off-by: Kohei Tokunaga <ktokunaga.mail@gmail.com>
---
  configs/meson/emscripten.txt  |  8 ++++++++
  configure                     |  7 +++++++
  meson.build                   | 25 ++++++++++++++++++++-----
  meson_options.txt             |  2 +-
  scripts/meson-buildoptions.sh |  2 +-
  stubs/meson.build             |  4 ++++
  6 files changed, 41 insertions(+), 7 deletions(-)
  create mode 100644 configs/meson/emscripten.txt


diff --git a/meson.build b/meson.build
index 41f68d3806..c9aa5016d6 100644
--- a/meson.build
+++ b/meson.build
@@ -50,9 +50,9 @@ genh = []
  qapi_trace_events = []
bsd_oses = ['gnu/kfreebsd', 'freebsd', 'netbsd', 'openbsd', 'dragonfly', 'darwin']
-supported_oses = ['windows', 'freebsd', 'netbsd', 'openbsd', 'darwin', 
'sunos', 'linux']
+supported_oses = ['windows', 'freebsd', 'netbsd', 'openbsd', 'darwin', 
'sunos', 'linux', 'emscripten']
  supported_cpus = ['ppc', 'ppc64', 's390x', 'riscv32', 'riscv64', 'x86', 
'x86_64',
-  'arm', 'aarch64', 'loongarch64', 'mips', 'mips64', 'sparc64']
+  'arm', 'aarch64', 'loongarch64', 'mips', 'mips64', 'sparc64', 'wasm32']
cpu = host_machine.cpu_family() @@ -353,6 +353,8 @@ foreach lang : all_languages
        # endif
        #endif''')
      # ok
+  elif compiler.get_id() == 'emscripten'
+    # ok
    else
      error('You either need GCC v7.4 or Clang v10.0 (or XCode Clang v15.0) to 
compile QEMU')
    endif
@@ -470,7 +472,10 @@ endif
  # instead, we can't add -no-pie because it overrides -shared: the linker then
  # tries to build an executable instead of a shared library and fails.  So
  # don't add -no-pie anywhere and cross fingers. :(
-if not get_option('b_pie')
+#
+# Emscripten doesn't support -no-pie but meson can't catch the compiler
+# warning. So explicitly omit the flag for Emscripten.
+if not get_option('b_pie') and host_os != 'emscripten'
    qemu_common_flags += cc.get_supported_arguments('-fno-pie', '-no-pie')
  endif
@@ -514,6 +519,8 @@ ucontext_probe = '''
  supported_backends = []
  if host_os == 'windows'
    supported_backends += ['windows']
+elif host_os == 'emscripten'
+  supported_backends += ['wasm']
  else
    if host_os != 'darwin' and cc.links(ucontext_probe)
      supported_backends += ['ucontext']
@@ -2962,7 +2969,9 @@ config_host_data.set('CONFIG_ATOMIC64', cc.links('''
      return 0;
    }''', args: qemu_isa_flags))
-has_int128_type = cc.compiles('''
+# has_int128_type is set to false on Emscripten to avoid errors by libffi
+# during runtime.
+has_int128_type = host_os != 'emscripten' and cc.compiles('''
    __int128_t a;
    __uint128_t b;
    int main(void) { b = a; }''')
@@ -3774,6 +3783,8 @@ if have_block
    # os-win32.c does not
    if host_os == 'windows'
      system_ss.add(files('os-win32.c'))
+  elif host_os == 'emscripten'
+    blockdev_ss.add(files('os-wasm.c'))
    else
      blockdev_ss.add(files('os-posix.c'))
    endif
@@ -4456,7 +4467,11 @@ subdir('scripts')
  subdir('tools')
  subdir('pc-bios')
  subdir('docs')
-subdir('tests')
+# Tests are disabled on emscripten because they rely on host features that 
aren't
+# supported by emscripten (e.g. fork and unix socket).
+if host_os != 'emscripten'
+  subdir('tests')
+endif
  if gtk.found()
    subdir('po')
  endif
diff --git a/meson_options.txt b/meson_options.txt
index 59d973bca0..45772484cc 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -34,7 +34,7 @@ option('fuzzing_engine', type : 'string', value : '',
  option('trace_file', type: 'string', value: 'trace',
         description: 'Trace file prefix for simple backend')
  option('coroutine_backend', type: 'combo',
-       choices: ['ucontext', 'sigaltstack', 'windows', 'auto'],
+       choices: ['ucontext', 'sigaltstack', 'windows', 'wasm', 'auto'],
         value: 'auto', description: 'coroutine backend to use')

Does wasm depend on TCI at this point (no TCG backend)? If so, should
we check TCI is enabled? (I wonder if configuring with the
--disable-tcg-interpreter option succeed).



reply via email to

[Prev in Thread] Current Thread [Next in Thread]