xref: /qemu/docs/devel/build-environment.rst (revision d0394ab5b94c2536603ea804c06201a1f0634c37)
175dbfbadSPierrick Bouvier
275dbfbadSPierrick Bouvier.. _setup-build-env:
375dbfbadSPierrick Bouvier
475dbfbadSPierrick BouvierSetup build environment
575dbfbadSPierrick Bouvier=======================
675dbfbadSPierrick Bouvier
775dbfbadSPierrick BouvierQEMU uses a lot of dependencies on the host system. glib2 is used everywhere in
875dbfbadSPierrick Bouvierthe code base, and most of the other dependencies are optional.
975dbfbadSPierrick Bouvier
1075dbfbadSPierrick BouvierWe present here simple instructions to enable native builds on most popular
1175dbfbadSPierrick Bouviersystems.
1275dbfbadSPierrick Bouvier
1375dbfbadSPierrick BouvierYou can find additional instructions on `QEMU wiki <https://wiki.qemu.org/>`_:
1475dbfbadSPierrick Bouvier
1575dbfbadSPierrick Bouvier- `Linux <https://wiki.qemu.org/Hosts/Linux>`_
1675dbfbadSPierrick Bouvier- `MacOS <https://wiki.qemu.org/Hosts/Mac>`_
1775dbfbadSPierrick Bouvier- `Windows <https://wiki.qemu.org/Hosts/W32>`_
1875dbfbadSPierrick Bouvier- `BSD <https://wiki.qemu.org/Hosts/BSD>`_
1975dbfbadSPierrick Bouvier
2075dbfbadSPierrick BouvierNote: Installing dependencies using your package manager build dependencies may
2175dbfbadSPierrick Bouviermiss out on deps that have been newly introduced in qemu.git. In more, it misses
2275dbfbadSPierrick Bouvierdeps the distribution has decided to exclude.
2375dbfbadSPierrick Bouvier
2475dbfbadSPierrick BouvierLinux
2575dbfbadSPierrick Bouvier-----
2675dbfbadSPierrick Bouvier
2775dbfbadSPierrick BouvierFedora
2875dbfbadSPierrick Bouvier++++++
2975dbfbadSPierrick Bouvier
3075dbfbadSPierrick Bouvier::
3175dbfbadSPierrick Bouvier
3275dbfbadSPierrick Bouvier    sudo dnf update && sudo dnf builddep qemu
3375dbfbadSPierrick Bouvier
3475dbfbadSPierrick BouvierDebian/Ubuntu
3575dbfbadSPierrick Bouvier+++++++++++++
3675dbfbadSPierrick Bouvier
3775dbfbadSPierrick BouvierYou first need to enable `Sources List <https://wiki.debian.org/SourcesList>`_.
3875dbfbadSPierrick BouvierThen, use apt to install dependencies:
3975dbfbadSPierrick Bouvier
4075dbfbadSPierrick Bouvier::
4175dbfbadSPierrick Bouvier
4275dbfbadSPierrick Bouvier    sudo apt update && sudo apt build-dep qemu
4375dbfbadSPierrick Bouvier
4475dbfbadSPierrick BouvierMacOS
4575dbfbadSPierrick Bouvier-----
4675dbfbadSPierrick Bouvier
4775dbfbadSPierrick BouvierYou first need to install `Homebrew <https://brew.sh/>`_. Then, use it to
4875dbfbadSPierrick Bouvierinstall dependencies:
4975dbfbadSPierrick Bouvier
5075dbfbadSPierrick Bouvier::
5175dbfbadSPierrick Bouvier
5275dbfbadSPierrick Bouvier    brew update && brew install $(brew deps --include-build qemu)
5375dbfbadSPierrick Bouvier
5475dbfbadSPierrick BouvierWindows
5575dbfbadSPierrick Bouvier-------
5675dbfbadSPierrick Bouvier
5775dbfbadSPierrick BouvierYou first need to install `MSYS2 <https://www.msys2.org/>`_.
5875dbfbadSPierrick BouvierMSYS2 offers `different environments <https://www.msys2.org/docs/environments/>`_.
5975dbfbadSPierrick Bouvierx86_64 environments are based on GCC, while aarch64 is based on Clang.
6075dbfbadSPierrick Bouvier
6175dbfbadSPierrick BouvierWe recommend to use MINGW64 for windows-x86_64 and CLANGARM64 for windows-aarch64
6275dbfbadSPierrick Bouvier(only available on windows-aarch64 hosts).
6375dbfbadSPierrick Bouvier
6475dbfbadSPierrick BouvierThen, you can open a windows shell, and enter msys2 env using:
6575dbfbadSPierrick Bouvier
6675dbfbadSPierrick Bouvier::
6775dbfbadSPierrick Bouvier
6875dbfbadSPierrick Bouvier    c:/msys64/msys2_shell.cmd -defterm -here -no-start -mingw64
6975dbfbadSPierrick Bouvier    # Replace -ucrt64 by -clangarm64 or -ucrt64 for other environments.
7075dbfbadSPierrick Bouvier
7175dbfbadSPierrick BouvierMSYS2 package manager does not offer a built-in way to install build
7275dbfbadSPierrick Bouvierdependencies. You can start with this list of packages using pacman:
7375dbfbadSPierrick Bouvier
7475dbfbadSPierrick BouvierNote: Dependencies need to be installed again if you use a different MSYS2
7575dbfbadSPierrick Bouvierenvironment.
7675dbfbadSPierrick Bouvier
7775dbfbadSPierrick Bouvier::
7875dbfbadSPierrick Bouvier
7975dbfbadSPierrick Bouvier    # update MSYS2 itself, you need to reopen your shell at the end.
8075dbfbadSPierrick Bouvier    pacman -Syu
8175dbfbadSPierrick Bouvier    pacman -S \
8275dbfbadSPierrick Bouvier        base-devel binutils bison diffutils flex git grep make sed \
8375dbfbadSPierrick Bouvier        ${MINGW_PACKAGE_PREFIX}-toolchain \
8475dbfbadSPierrick Bouvier        ${MINGW_PACKAGE_PREFIX}-glib2 \
8575dbfbadSPierrick Bouvier        ${MINGW_PACKAGE_PREFIX}-gtk3 \
8675dbfbadSPierrick Bouvier        ${MINGW_PACKAGE_PREFIX}-libnfs \
8775dbfbadSPierrick Bouvier        ${MINGW_PACKAGE_PREFIX}-libssh \
8875dbfbadSPierrick Bouvier        ${MINGW_PACKAGE_PREFIX}-ninja \
8975dbfbadSPierrick Bouvier        ${MINGW_PACKAGE_PREFIX}-pixman \
9075dbfbadSPierrick Bouvier        ${MINGW_PACKAGE_PREFIX}-pkgconf \
9175dbfbadSPierrick Bouvier        ${MINGW_PACKAGE_PREFIX}-python \
9275dbfbadSPierrick Bouvier        ${MINGW_PACKAGE_PREFIX}-SDL2 \
9375dbfbadSPierrick Bouvier        ${MINGW_PACKAGE_PREFIX}-zstd
9475dbfbadSPierrick Bouvier
9575dbfbadSPierrick BouvierIf you want to install all dependencies, it's possible to use recipe used to
9675dbfbadSPierrick Bouvierbuild QEMU in MSYS2 itself.
9775dbfbadSPierrick Bouvier
9875dbfbadSPierrick Bouvier::
9975dbfbadSPierrick Bouvier
100*dce324faSPierrick Bouvier    pacman -S wget base-devel git
10175dbfbadSPierrick Bouvier    wget https://raw.githubusercontent.com/msys2/MINGW-packages/refs/heads/master/mingw-w64-qemu/PKGBUILD
10275dbfbadSPierrick Bouvier    # Some packages may be missing for your environment, installation will still
10375dbfbadSPierrick Bouvier    # be done though.
104*dce324faSPierrick Bouvier    makepkg --syncdeps --nobuild PKGBUILD || true
10575dbfbadSPierrick Bouvier
10675dbfbadSPierrick BouvierBuild on windows-aarch64
10775dbfbadSPierrick Bouvier++++++++++++++++++++++++
10875dbfbadSPierrick Bouvier
10975dbfbadSPierrick BouvierWhen trying to cross compile meson for x86_64 using UCRT64 or MINGW64 env,
11075dbfbadSPierrick Bouvierconfigure will run into an error because the cpu detected is not correct.
11175dbfbadSPierrick Bouvier
11275dbfbadSPierrick BouvierMeson detects x86_64 processes emulated, so you need to manually set the cpu,
11375dbfbadSPierrick Bouvierand force a cross compilation (with empty prefix).
11475dbfbadSPierrick Bouvier
11575dbfbadSPierrick Bouvier::
11675dbfbadSPierrick Bouvier
11775dbfbadSPierrick Bouvier    ./configure --cpu=x86_64 --cross-prefix=
11875dbfbadSPierrick Bouvier
119