|  | .. _Supported-build-platforms: | 
|  |  | 
|  | Supported build platforms | 
|  | ========================= | 
|  |  | 
|  | QEMU aims to support building and executing on multiple host OS | 
|  | platforms. This appendix outlines which platforms are the major build | 
|  | targets. These platforms are used as the basis for deciding upon the | 
|  | minimum required versions of 3rd party software QEMU depends on. The | 
|  | supported platforms are the targets for automated testing performed by | 
|  | the project when patches are submitted for review, and tested before and | 
|  | after merge. | 
|  |  | 
|  | If a platform is not listed here, it does not imply that QEMU won't | 
|  | work. If an unlisted platform has comparable software versions to a | 
|  | listed platform, there is every expectation that it will work. Bug | 
|  | reports are welcome for problems encountered on unlisted platforms | 
|  | unless they are clearly older vintage than what is described here. | 
|  |  | 
|  | Note that when considering software versions shipped in distros as | 
|  | support targets, QEMU considers only the version number, and assumes the | 
|  | features in that distro match the upstream release with the same | 
|  | version. In other words, if a distro backports extra features to the | 
|  | software in their distro, QEMU upstream code will not add explicit | 
|  | support for those backports, unless the feature is auto-detectable in a | 
|  | manner that works for the upstream releases too. | 
|  |  | 
|  | The `Repology`_ site is a useful resource to identify | 
|  | currently shipped versions of software in various operating systems, | 
|  | though it does not cover all distros listed below. | 
|  |  | 
|  | Supported host architectures | 
|  | ---------------------------- | 
|  |  | 
|  | Those hosts are officially supported, with various accelerators: | 
|  |  | 
|  | .. list-table:: | 
|  | :header-rows: 1 | 
|  |  | 
|  | * - CPU Architecture | 
|  | - Accelerators | 
|  | * - Arm | 
|  | - kvm (64 bit only), tcg, xen | 
|  | * - MIPS (little endian only) | 
|  | - kvm, tcg | 
|  | * - PPC | 
|  | - kvm, tcg | 
|  | * - RISC-V | 
|  | - kvm, tcg | 
|  | * - s390x | 
|  | - kvm, tcg | 
|  | * - SPARC | 
|  | - tcg | 
|  | * - x86 | 
|  | - hvf (64 bit only), kvm, nvmm, tcg, whpx (64 bit only), xen | 
|  |  | 
|  | Other host architectures are not supported. It is possible to build QEMU system | 
|  | emulation on an unsupported host architecture using the configure | 
|  | ``--enable-tcg-interpreter`` option to enable the TCI support, but note that | 
|  | this is very slow and is not recommended for normal use. QEMU user emulation | 
|  | requires host-specific support for signal handling, therefore TCI won't help | 
|  | on unsupported host architectures. | 
|  |  | 
|  | Non-supported architectures may be removed in the future following the | 
|  | :ref:`deprecation process<Deprecated features>`. | 
|  |  | 
|  | Linux OS, macOS, FreeBSD, NetBSD, OpenBSD | 
|  | ----------------------------------------- | 
|  |  | 
|  | The project aims to support the most recent major version at all times for | 
|  | up to five years after its initial release. Support | 
|  | for the previous major version will be dropped 2 years after the new major | 
|  | version is released or when the vendor itself drops support, whichever comes | 
|  | first. In this context, third-party efforts to extend the lifetime of a distro | 
|  | are not considered, even when they are endorsed by the vendor (eg. Debian LTS); | 
|  | the same is true of repositories that contain packages backported from later | 
|  | releases (e.g. Debian backports). Within each major release, only the most | 
|  | recent minor release is considered. | 
|  |  | 
|  | For the purposes of identifying supported software versions available on Linux, | 
|  | the project will look at CentOS, Debian, Fedora, openSUSE, RHEL, SLES and | 
|  | Ubuntu LTS. Other distros will be assumed to ship similar software versions. | 
|  |  | 
|  | For FreeBSD and OpenBSD, decisions will be made based on the contents of the | 
|  | respective ports repository, while NetBSD will use the pkgsrc repository. | 
|  |  | 
|  | For macOS, `Homebrew`_ will be used, although `MacPorts`_ is expected to carry | 
|  | similar versions. | 
|  |  | 
|  | Some build dependencies may follow less conservative rules: | 
|  |  | 
|  | Python runtime | 
|  | Distributions with long-term support often provide multiple versions | 
|  | of the Python runtime.  While QEMU will initially aim to support the | 
|  | distribution's default runtime, it may later increase its minimum version | 
|  | to any newer python that is available as an option from the vendor. | 
|  | In this case, it will be necessary to use the ``--python`` command line | 
|  | option of the ``configure`` script to point QEMU to a supported | 
|  | version of the Python runtime. | 
|  |  | 
|  | As of QEMU |version|, the minimum supported version of Python is 3.7. | 
|  |  | 
|  | Python build dependencies | 
|  | Some of QEMU's build dependencies are written in Python.  Usually these | 
|  | are only packaged by distributions for the default Python runtime. | 
|  | If QEMU bumps its minimum Python version and a non-default runtime is | 
|  | required, it may be necessary to fetch python modules from the Python | 
|  | Package Index (PyPI) via ``pip``, in order to build QEMU. | 
|  |  | 
|  | Optional build dependencies | 
|  | Build components whose absence does not affect the ability to build | 
|  | QEMU may not be available in distros, or may be too old for QEMU's | 
|  | requirements.  Many of these, such as the Avocado testing framework | 
|  | or various linters, are written in Python and therefore can also | 
|  | be installed using ``pip``.  Cross compilers are another example | 
|  | of optional build-time dependency; in this case it is possible to | 
|  | download them from repositories such as EPEL, to use container-based | 
|  | cross compilation using ``docker`` or ``podman``, or to use pre-built | 
|  | binaries distributed with QEMU. | 
|  |  | 
|  |  | 
|  | Windows | 
|  | ------- | 
|  |  | 
|  | The project aims to support the two most recent versions of Windows that are | 
|  | still supported by the vendor. The minimum Windows API that is currently | 
|  | targeted is "Windows 8", so theoretically the QEMU binaries can still be run | 
|  | on older versions of Windows, too. However, such old versions of Windows are | 
|  | not tested anymore, so it is recommended to use one of the latest versions of | 
|  | Windows instead. | 
|  |  | 
|  | The project supports building QEMU with current versions of the MinGW | 
|  | toolchain, either hosted on Linux (Debian/Fedora) or via `MSYS2`_ on Windows. | 
|  | A more recent Windows version is always preferred as it is less likely to have | 
|  | problems with building via MSYS2. The building process of QEMU involves some | 
|  | Python scripts that call os.symlink() which needs special attention for the | 
|  | build process to successfully complete. On newer versions of Windows 10, | 
|  | unprivileged accounts can create symlinks if Developer Mode is enabled. | 
|  | When Developer Mode is not available/enabled, the SeCreateSymbolicLinkPrivilege | 
|  | privilege is required, or the process must be run as an administrator. | 
|  |  | 
|  | .. _Homebrew: https://brew.sh/ | 
|  | .. _MacPorts: https://www.macports.org/ | 
|  | .. _MSYS2: https://www.msys2.org/ | 
|  | .. _Repology: https://repology.org/ |