Allow building qemu tools on 32-bit hosts

Qemu's tools like qemu-img are often needed on 32-bit platforms,
although the actual qemu emulators have been discontinued on 32-bit.

To allow building the tools on 32-bit this patch implements three small
changes:

a) The check in meson.build is changed to still error out if the user
tries to build qemu-system or qemu-user on a 32-bit platform, but allows
building tools (e.g. by "--enable-tools") alone.

b) The compile time check in atomic.h now checks against
sizeof(uint64_t) so that 32-bit environments can still build
successfully, while 128-bit atomic operations are prevented to sneak in.

c) Allow linking against libatomic as long as we don't build the
qemu-system and qemu-user binaries.

Sucessfully tested on the 32-bit big-endian powerpc architecture.

Signed-off-by: Helge Deller <deller@gmx.de>
Suggested-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Michael Tokarev <mjt@tls.msk.ru>
Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>
This commit is contained in:
Helge Deller
2026-04-05 00:40:16 +02:00
committed by Michael Tokarev
parent 276b060a74
commit cf634dfcd8
2 changed files with 15 additions and 7 deletions

View File

@@ -58,11 +58,11 @@
/*
* Sanity check that the size of an atomic operation isn't "overly large".
* Despite the fact that e.g. i686 has 64-bit atomic operations, we do not
* Despite the fact that e.g. x86-64 has 128-bit atomic operations, we do not
* want to use them because we ought not need them, and this lets us do a
* bit of sanity checking that other 32-bit hosts might build.
* bit of sanity checking that other 32- and 64-bit hosts might build.
*/
#define ATOMIC_REG_SIZE sizeof(void *)
#define ATOMIC_REG_SIZE sizeof(uint64_t)
/* Weak atomic operations prevent the compiler moving other
* loads/stores past the atomic operation load/store. However there is

View File

@@ -323,8 +323,8 @@ endif
# Compiler flags #
##################
if cc.sizeof('void *') < 8
error('QEMU requires a 64-bit CPU host architecture')
if (cc.sizeof('void *') < 8) and (have_system or have_user)
error('QEMU emulator requires a 64-bit CPU host architecture. Only tools may be built for 32-bit.')
endif
foreach lang : all_languages
@@ -423,8 +423,16 @@ endif
#
# Later checks assume we won't get atomic ops for int128 without
# explicitly asking for -latomic, so we must disable GCC's new
# automatic linking with the new -fno-link-libatomic flag
qemu_isa_flags += cc.get_supported_arguments('-fno-link-libatomic')
# automatic linking with the new -fno-link-libatomic flag.
#
# When not building the emulators, but qemu helper tools only
# (e.g. on 32-bit hosts), libatomic is sometimes required and
# thus acceptable.
if (have_system or have_user)
qemu_isa_flags += cc.get_supported_arguments('-fno-link-libatomic')
else
qemu_ldflags += cc.get_supported_link_arguments('-latomic')
endif
qemu_common_flags = qemu_isa_flags + qemu_common_flags