Hosts/Mac: Difference between revisions
(→QEMU on OS X (macOS) hosts: Update various references to OSX versions to match the current date and our support policy) |
|||
Line 1: | Line 1: | ||
= QEMU on OS X (macOS) hosts = | = QEMU on OS X (macOS) hosts = | ||
While QEMU's main host platform is [[Hosts/Linux|Linux]], it is also supported on operating systems for Apple's Mac computers (known as OS X or macOS). | While QEMU's main host platform is [[Hosts/Linux|Linux]], it is also supported on operating systems for Apple's Mac computers (known as OS X or macOS). The official support policy covers the last two released versions of OSX; QEMU might work on older versions, but it is not guaranteed and it might not even compile on older versions. | ||
Please note that | Please note that fewer developers work on QEMU for Mac hosts, so it might be less stable (but I don't think it is). If you can replicate a bug on a Linux hosted QEMU before reporting it, this is helpful as it means a wider set of people might look into it. | ||
Some system emulations on Linux use KVM, a special emulation mode which claims to reach nearly native speed. | Some system emulations on Linux use KVM, a special emulation mode which claims to reach nearly native speed. | ||
Line 25: | Line 25: | ||
The system requirements are: | The system requirements are: | ||
* OS X 10. | * One of the last two most recent versions of OS X (currently that's 10.13 or 10.14) | ||
* The clang compiler shipped with Xcode | * The clang compiler shipped with the version of Xcode for that OS X. GCC might also work, but we recommend clang | ||
Additional build requirements are: | Additional build requirements are: | ||
Line 89: | Line 89: | ||
We recommend building QEMU with the -default compiler provided by Apple, for your version of Mac OS X (which will be 'clang'). The configure script will automatically pick this. | |||
== Errors on old compilers == | == Errors on old compilers == |
Revision as of 16:09, 1 February 2020
QEMU on OS X (macOS) hosts
While QEMU's main host platform is Linux, it is also supported on operating systems for Apple's Mac computers (known as OS X or macOS). The official support policy covers the last two released versions of OSX; QEMU might work on older versions, but it is not guaranteed and it might not even compile on older versions.
Please note that fewer developers work on QEMU for Mac hosts, so it might be less stable (but I don't think it is). If you can replicate a bug on a Linux hosted QEMU before reporting it, this is helpful as it means a wider set of people might look into it.
Some system emulations on Linux use KVM, a special emulation mode which claims to reach nearly native speed. KVM is mainly used for x86 (32 and 64 bit) emulation on x86 hosts running Linux. Should you want to run Qemu with KVM support on a G5, depending on your distribution, you might have to compile your own kernel with KVM support. There exists a port of QEMU to Hypervisor.framework (a kernel module from Apple which is similar in spirit to KVM), but unfortunately it is not included in upstream QEMU.
Download
PowerPC:
qemu-system-i386 version 1.6.2
System Requirements:
- CPU: PowerPC G5
- Operating System: Mac OS 10.4 or higher
X86:
qemu-system-ppc, qemu-system-x86_64, and qemu-system-i386 version 2.10.1
System Requirements:
- CPU: 64-bit x86
- Operating System: Mac OS 10.6 or higher
Building QEMU for OS X
The system requirements are:
- One of the last two most recent versions of OS X (currently that's 10.13 or 10.14)
- The clang compiler shipped with the version of Xcode for that OS X. GCC might also work, but we recommend clang
Additional build requirements are:
You may find it easiest to get these from a third-party packager such as Homebrew, Macports, or Fink.
After downloading the QEMU source code, double-click it to expand it.
Then configure and make QEMU. The target-list option is used to build only the machine or machines you want. If you don't specify it, all machines would be built. Probably not what you want.
./configure --target-list=<list of machines here> make
This way doesn't require you to wait for the configure command to complete:
./configure --target-list=<list of machines here> && make
If your system has the 'say' command, you can use it to tell you when QEMU is done
./configure --target-list=i386-softmmu,ppc-softmmu && make ; say "I'm all done compiling QEMU"
You can use './configure --help' to see a full list of options.
Here are all the currently available machines:
- aarch64-softmmu
- alpha-softmmu
- arm-softmmu
- cris-softmmu
- i386-softmmu
- lm32-softmmu
- m68k-softmmu
- microblaze-softmmu
- microblazeel-softmmu
- mips-softmmu
- mips64-softmmu
- mips64el-softmmu
- mipsel-softmmu
- moxie-softmmu
- or32-softmmu
- ppc-softmmu
- ppc64-softmmu
- ppcemb-softmmu
- s390x-softmmu
- sh4-softmmu
- sh4eb-softmmu
- sparc-softmmu
- sparc64-softmmu
- tricore-softmmu
- unicore32-softmmu
- x86_64-softmmu
- xtensa-softmmu
- xtensaeb-softmmu
We recommend building QEMU with the -default compiler provided by Apple, for your version of Mac OS X (which will be 'clang'). The configure script will automatically pick this.
Errors on old compilers
Note: If after the configure step you see a message like this:
ERROR: Your compiler does not support the __thread specifier for Thread-Local Storage (TLS). Please upgrade to a version that does.
you may have to install your own version of gcc. You can build it from source (expect that to take several hours) or obtain third party binaries of gcc available from Homebrew or MacPorts.
You can have several versions of GCC on your system. To specify a certain version, use the --cc and --cxx options.
./configure --cxx=<path of your c++ compiler> --cc=<path of your c compiler> <other options>
Build with LLVM/Clang 7
If you need to compile with newer versions of clang (to get f.i. AVX/AVX2 support), you can install llvm through e.g., brew.
brew install llvm
Note that building for machines with CPUs supporting such extensions will exclude running your binary on earlier machines.
Compile with:
export PATH="/usr/local/opt/llvm/bin:$PATH"
./configure --cc=clang-7 --cxx=clang++-7 --host-cc=clang-7 \ --extra-cflags=-mavx2 \ --extra-cxxflags="-I/usr/local/opt/llvm/include" \ --extra-ldflags="-L/usr/local/opt/llvm/lib -L/usr/local/opt/libffi/lib -L/usr/local/opt/llvm/lib -Wl,-rpath,/usr/local/opt/llvm/lib" \ --target-list="ppc-softmmu"
Contacts
If there are any issues with this web page, please let me know.