mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-07 09:43:56 -06:00
meson: Add wasm build in build scripts
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> Link: https://lore.kernel.org/r/ad03b3b180335f59e785e930968077bf15c46260.1745820062.git.ktokunaga.mail@gmail.com Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
5b78d120ff
commit
ccc403ed58
6 changed files with 42 additions and 7 deletions
29
meson.build
29
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']
|
||||
|
@ -902,6 +909,10 @@ if get_option('tcg').allowed()
|
|||
if not get_option('tcg_interpreter')
|
||||
error('Unsupported CPU @0@, try --enable-tcg-interpreter'.format(cpu))
|
||||
endif
|
||||
elif host_arch == 'wasm32'
|
||||
if not get_option('tcg_interpreter')
|
||||
error('WebAssembly host requires --enable-tcg-interpreter')
|
||||
endif
|
||||
elif get_option('tcg_interpreter')
|
||||
warning('Use of the TCG interpreter is not recommended on this host')
|
||||
warning('architecture. There is a native TCG execution backend available')
|
||||
|
@ -2962,7 +2973,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; }''')
|
||||
|
@ -3775,6 +3788,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
|
||||
|
@ -4516,7 +4531,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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue