Skip to content

Commit

Permalink
README.md: Update regarding the x86_64 emulation support
Browse files Browse the repository at this point in the history
  • Loading branch information
AndreRH committed Oct 20, 2024
1 parent 5f4bc45 commit 0ecbc5f
Showing 1 changed file with 24 additions and 11 deletions.
35 changes: 24 additions & 11 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@
Make sure to leave a :star: :)

## Hangover
This is Hangover, a project started by André Zwing and Stefan Dösinger in 2016 that currently can
run x86_32 Windows applications on aarch64 Wine.
This is Hangover, a project started by André Zwing and Stefan Dösinger in 2016 that can
run x86_64 and x86_32 Windows applications on aarch64 Wine.

### How it works
Hangover uses various emulators as DLLs (pick one that suits your needs, e.g. works for you) to only emulate the application you want to run instead of emulating a complete Wine installation.
Expand All @@ -15,16 +15,19 @@ As soon as the application does a Windows/Wine system call, say NtUserCreateWind

In short, we break out of emulation at the win32 syscall or wine unix call level for performance reasons, which is enabled by the WoW64 support in Wine.

For 64-Bit we're using the ARM64EC ABI combined with an emulator (FEX).

### Benchmarks
For Benchmarks see [here](benchmarks/readme.md). They show that the Hangover approach works as expected, as only emulating the application instead of a complete Wine installation has benefits. It's especially visible with box64cpu vs. Wine running under Box64.

### Interesting Branches

* [RISC-V 64-bit Linux support](https://github.com/AndreRH/hangover/tree/riscv64)
* [x86_64 support on ARM64](https://github.com/AndreRH/hangover/tree/arm64ec)
* [Hangover-WOW64](https://github.com/AndreRH/hangover/tree/wow) (Hangover 0.8.1 - 9.19)
* [Hangover-Classic](https://github.com/AndreRH/hangover/tree/hangover-classic) (Hangover 0.4.0 - 0.6.5)

### Status
Current main focus is to run i386 Windows applications on ARM64 Linux, but it's also possible to run ARM32 Windows applications on x86_64 Linux.
Current main focus is to run x86_64 and i386 Windows applications on ARM64 Linux, but it's also possible to run ARM32 Windows applications on x86_64 Linux.

PPC64le isn't supported anymore and won't be added back in the near future.
If you need that feature, have a look at older releases before 0.8.x.
Expand All @@ -41,7 +44,7 @@ A Discord Server is available for contributors and previous financial supporters
It provides advanced user support, development discussions and more.

### Packages
__Debian__ 11 & 12 (also usable for Raspbian, Armbian, ...) and __Ubuntu__ 22.04 & 24.04 & 24.10 are attached to the Github Release.
__Debian__ 11 & 12 (also usable for Raspbian, Armbian, ...) and __Ubuntu__ 20.04 & 22.04 & 24.04 & 24.10 are attached to the Github Release.

__Termux__ packages can be found in the [Termux User Repository](https://github.com/termux-user-repository/tur).

Expand All @@ -54,7 +57,9 @@ For build instructions see [here](docs/COMPILE.md).
### Running
You can add the following environment variables:

* HODLL to select the emulator dll:
* HODLL64 to select the 64-bit emulator dll:
* libarm64ecfex.dll for x86_64 emulation (FEX)
* HODLL to select the 32-bit emulator dll:
* wow64cpu.dll for "native" i386 mode on x86_64
* wowarmhw.dll for ARM emulation (Qemu)
* xtajit.dll for i386 emulation (Qemu)
Expand All @@ -63,6 +68,19 @@ You can add the following environment variables:
* HOLIB to set full path of the library, e.g. HOLIB=/path/to/libqemu-i386.so
* QEMU_LOG to set QEMU log channels, find some options [here.](https://github.com/AndreRH/qemu/blob/v5.2.0/util/log.c#L297)

#### FEX
libarm64ecfex.dll currently is the default for x86_64 emulation, so it's simply:

```bash
$ wine your_x86_64_application.exe
```

libwow64fex.dll is not the default for i386 emulation, so you need:

```bash
$ HODLL=libwow64fex.dll wine your_x86_application.exe
```

#### Box64
box64cpu.dll currently is the default for i386 emulation, so it's simply:

Expand All @@ -81,11 +99,6 @@ $ HODLL=xtajit.dll taskset -c 1 wine your_x86_application.exe
$ HODLL=wowarmhw.dll taskset -c 1 wine your_arm_application.exe
```

#### FEX
```bash
$ HODLL=libwow64fex.dll wine your_x86_application.exe
```

#### Enabling Wayland
Wayland isn't used by default or automatically, but if you want to use it instead of X11 do:

Expand Down

0 comments on commit 0ecbc5f

Please sign in to comment.