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