QEMU Windows - OpenNoah/OpenNoah.github.io GitHub Wiki

Cross-compiling qemu for mingw-w64

Building from debian 12 (bookworm).

Install cross-compiler

apt install mingw-w64 mingw-w64-common

Install meson build system

Meson version from debian bookworm is too old, so install newer version via pipx:

pipx install meson
# Python module 'packaging' required by glib build
# meson build picks up python executable from pipx meson install
# so install 'packaging' module into meson venv
pipx inject meson packaging

Install support packages

See instructions: https://qemu.weilnetz.de/debian

# Install repo keys
(cd /etc/apt/trusted.gpg.d && wget https://qemu.weilnetz.de/debian/weilnetz.gpg)
# Required by gettext
# Otherwise build fails with:
# cannot export iconv_ostream_create: symbol not defined
apt install mingw64-x86-64-win-iconv
# Required by qemu spice/vnc server
apt install mingw64-x86-64-pixman
# Required by qemu (lib 'intl')
#apt install mingw64-x86-64-gettext

Unfortunately some libraries from this repo is too old for supporting latest version of qemu, so build them manually:

Prepare a rootfs directory like /home/zhiyb/build/mingw/rootfs

pcre2

https://github.com/PCRE2Project/pcre2/releases/download/pcre2-10.44/pcre2-10.44.tar.bz2

export PKG_CONFIG_PATH=/home/zhiyb/build/mingw/rootfs/lib/pkgconfig

mkdir -p build
cd build
../configure --host=x86_64-w64-mingw32 --prefix=/home/zhiyb/build/mingw/rootfs
make
make install

gettext

https://ftp.gnu.org/pub/gnu/gettext/gettext-0.22.5.tar.gz

export PKG_CONFIG_PATH=/home/zhiyb/build/mingw/rootfs/lib/pkgconfig

mkdir -p build
cd build
../configure --host=x86_64-w64-mingw32 --prefix=/home/zhiyb/build/mingw/rootfs
make
make install

glib

https://gitlab.gnome.org/GNOME/glib/-/archive/2.81.0/glib-2.81.0.tar.bz2

export PKG_CONFIG_PATH=/home/zhiyb/build/mingw/rootfs/lib/pkgconfig

meson setup \
    --cross-file /opt/toolchains/meson-x86_64-w64-mingw32.txt \
    --prefix=/home/zhiyb/build/mingw/rootfs \
    _build
meson compile -C _build
meson install -C _build

Build qemu

export PKG_CONFIG_PATH=/home/zhiyb/build/mingw/rootfs/lib/pkgconfig
export CFLAGS="-I/home/zhiyb/build/mingw/rootfs/include"
export LDFLAGS="-L/home/zhiyb/build/mingw/rootfs/lib"

mkdir -p build
cd build
../configure --target-list=mipsel-softmmu \
    --cross-prefix=x86_64-w64-mingw32-
    --prefix=/home/zhiyb/build/mingw/rootfs \
    --disable-docs --enable-vnc \
make