[EXPERIMENTAL] Hangover (Wine) requirements for aarch64

[Update]: Recompiling the gcc package again as the version available in the Manjaro repo has been bumped up.
[Update-2]: Created gcc-9.2.0-5 packages so that it won't block pacman. I don't know if it's possible to use the debian gcc directly to the latest on the Manjaro repos.
[Update-3]: After all the DIY error avoiding, we have something running. Not impressive atm yet it gives a taste. It can be fast but it needs more help.

This is a short overview of my attempt and it's progress to get Hangover on the Pinebook Pro.
The end goal, is to try to use it to run games on it using open source tools now that ExaGear no longer has availablity to purchase license.

About Hangover:

Overall breakdown of the steps required to get Hangover based on my current research:

  • Get gcc-ada on Manjaro ARM (Pending)
  • Get mingw on Manjaro ARM (requires gcc-ada)
  • Compile and test Hangover

ToDo:

  • gcc-ada on Manjaro ARM (needs verification)
  • mingw libraries required by Hangover (need to find pkgbuild files)
  • Compile Hangover with all of it's depedencies

When you begin and attempt to compile Hangover, you will find that x86_64-w64-mingw32-gcc and i686-w64-mingw32-gcc aren't available on Arch ARM based distros.
Digging a little bit further for the requirements to compile those packages, you will find that gcc-ada is the first obstacle.

Ada is self-compiling which means that it has to be running on the system to be compiled (very rough explanation). Ada is not available on Arch ARM (and Manjaro ARM by extentention), the option to get the package is bootstrapping it.

This pull request gave me the necessarry tools (hopefully) to begin the approach: https://github.com/archlinuxarm/PKGBUILDs/pull/1557

First up, create a PKGBUILD to bootstrap ada from the Debian packages.
Gist: https://gist.github.com/psstoyanov/93281ea8ac2e5ca095da0306902bf962
This will result the following gcc package containing ada: https://drive.google.com/open?id=1istPlH1Gec3mwqAP5Aqn-86xEufrNq4W

Then, make changes to PKGBUILD of gcc found on Arch Arm repository based on the pull request.
Arch Arm gcc github: https://github.com/archlinuxarm/PKGBUILDs/blob/853e349d20997cfde60db062a3c11987c50fd87a/core/gcc/PKGBUILD
Gist-V1 with the changes (dirty/ needs cleanup): https://gist.github.com/psstoyanov/d197f69ed7e7ba0b6188bc58ae14ca69

Notes:

  • There were several issues until the gcc packages bellow were successfully compiled:
    • Debian is using aarch64-linux-gnu naming convention. Arch/ Manjaro are using aarch64-unknown-linux-gnu which can cause a few libraries to be searched in the wrong location
    • The original version of isl in the pull request is 15, while Arch ARM PKGBUILD is expecting 21. I had to play a bit with the versions and what was available on Debian before it didn't complain about it.
    • Compiling and running the tests took about 11-12 hours total.

GCC packages with Ada (v1):

Going forward:

  • Find and compile the required mingw packages
  • Complete the Hangover requirements
4 Likes

With the gcc version in the Manjaro mirrors getting bumped to what is available on Arch arm, I've compiled a second version (this time with reverting the isl back to _islver=0.21 and increasing pkgrel to 5) so that pacman won't be blocked when upgrading.
I've used the previous version as a base instead of the debian gcc. I don't know if it's possible to jump directly from the gcc-debian directly to this updated version or if isl will cause problems.

Gist of gcc PKGBUILD V2: https://gist.github.com/psstoyanov/6892ef4907f12c523536ad0e58bf0a9d
gcc-9.2.0-5 with ada: https://drive.google.com/open?id=1Q7gYpFVWZV9kxTPpMFISgs6VROO4P82b

Next up should be mingw

2 Likes

Alright, mingw-w64 seems to be relatively straight forward.

Start by trying to build mingw-w64-gcc (https://aur.archlinux.org/packages/mingw-w64-gcc/) and follow the thread of required packages.

  • For some, it will be required to alter the PKBUILD file from targeting arch=('x86_64') to arch=('aarch64').

Before you can build this package, you will need use mingw-w64-headers-bootstrap (https://aur.archlinux.org/packages/mingw-w64-headers-bootstrap/) which will allow you to get everything needed along with mingw-w64-gcc-base (https://aur.archlinux.org/packages/mingw-w64-gcc-base/).

Compared to gcc-ada this has been fairly straightforward process for the moment.

If everything goes well with Hangover, the process of bootstrapping mingw-w64 could be used as a template so that we can create something similar for gcc-git with ada support.

Next step will be to try to compile Hangover and to check if all dependencies are satisfied.

1 Like

With mingw-w64 compiled , a Hangover appears to to have been compiled as expected - at least the Wine side.

What I didn't expect was an empty-ish .../build/qemu/x86_64-windows-user . Running make there spits an error about missing rule for ...cpus-common.o needed

So, this is the next challenge :slight_smile:

Getting closer every day

1 Like

Very nice.

What's the end goal though?
Just to get Wine running on aarch64, so you can run x64 Windows software?

Pretty much to get x86_64 Windows software (well old games :grin: ) running.

I could have it completely wrong but from what I've gathered as information, Hangover would be the long term approach for arm64 Wine emulation.

Grrrr, I wonder if I have to use the bundled qemu.

2 Likes

So, this is where I am so far:

  • When building Hangover with -j6 it won't build the qemu side (no idea why)
  • Once the Wine portion is compiled, then I get the following error while building qemu (running make inside the root directory of Hangover):
    /home/pak0st/Downloads/hangover/qemu/contrib/vhost-user-gpu/main.c:19:10: fatal error: pixman.h: No such file or directory

The Hangover dev suggested to me to pass an argument to ignore vhost and that's what I'm trying atm.
It's a bit weird as pixman is installed on the system. Maybe I'm missing something else?

yes, from what i understand it should be quicker the running x86 wine under qemu-i386-static using binfmt. However if you are using panfrost, D3D support will not work as it requires opengl and does not work with GLES. Have no idea if this can be workarounded by gl4esl

It's questionable but something I want to try.

If the D3D translation doesn't try to call methods of GL versions greater than GL2.1, gl4es might work (or Panfrost directly as there are GL2 calls exposed).

It's waaay too soon to consider but maybe one day we could use Vulkan :slight_smile:

2 Likes

This part has taken me unreasonable amount of time :grin:

As it turns out, the following directory isn't part of the includes of my gcc setup /urs/include/pixman-1 . Thus qemu build fails for vhost-user-gpu as it can't find the pixman header.

I'm thinking to do a bit more research to figure out how pkgbuilds are handling it (cairo comes to mind as package that uses pixman).

It wouldn't be very convenient for other people wanting to try hangover to be forced to alter their gcc config :slight_smile:

Some progress had been made :smile:

1 Like

Small update and status:

  • Hangover is running (sort of)
  • expect weird stuff all the way through
  • don't expect to get much in terms of running programs :slight_smile:

So, what happened so far? Well, my issues with the libraries end up being resolved by applying a commit on qemu since hangover hasn't been synced with it for quite some time.
In short - hangover doesn't need/want vhost-user-gpu for now. Bundled qemu version always wants to build vhost-user-gpu and needs a small change to fix that.

Then, there were a couple of problems and you can find the next portion of "needz some DIY" with dlls here and here.

The wine bundled Notepad works, some ancient LTSpice version is getting installed (but you can't run it) and you can see the lovely popups that WC3 && D2 want their CDs to continue. If you start them from their alternative lauchers that don't want CDs, then you end up with an error about dlls failing to load :slight_smile:

So far, it has been interesting journey. I hope more people will get the chance to try and contribute to the hangover project. It definitely needs more eyes and people who know the wine stack helping out :wink:

Huge thanks to the Hangover devs and the other aarch64 users on the hangover github page :slight_smile:

1 Like

This is looking good.
Good to see your commitment to this port. It will be very beneficial for all the users looking to run X86_64 windoz apps on aarch64.

1 Like

Thank you, @spikerguy . For now I didn't do much more than hack a few things together but I hope someone will find some use out of lengthy rambling.

I hope to make some progress in easing the bootstrapping process for gcc-ada soon(ish). There are a couple of things I will need to research and Strit's qt-es2 packages will be perfect research subjects for a couple of parts (conflicts and dependencies).

Dealing with the dlls is something I should leave for another time :grin:

1 Like

Any news?

@may4vfx , not yet :slight_smile: The past couple of weeks were busier than I wanted.

The next big step ought to be creating proper ada bootstrap package and submitting it to ALARM repos. This should make the entire process a lot easier for everyone.

This topic was automatically closed after 90 days. New replies are no longer allowed.

Forum kindly sponsored by