WineHQ

ARM: Difference between revisions

(strike a closed bug)
(→‎Todo: wine-mono is no longer waiting for arm mingw)
 
(10 intermediate revisions by 4 users not shown)
Line 18: Line 18:
=== Todo ===
=== Todo ===
* [http://source.winehq.org/source/libs/port/interlocked.c libs/port/interlocked.c]: maybe native operations.
* [http://source.winehq.org/source/libs/port/interlocked.c libs/port/interlocked.c]: maybe native operations.
* [[Gecko|wine-gecko]]/[[Mono|wine-mono]] ARM port (waiting for mingw-w64-arm).
* [[Gecko|wine-gecko]] ARM port (waiting for mingw-w64-arm).
* [[Mono|wine-mono]] ARM port (requires JIT/seh code modification, and a few non-essential support libraries fail to build).
* DCOM
* DCOM


Line 55: Line 56:


=== Running Windows/x86 Applications ===
=== Running Windows/x86 Applications ===
Actually there is a bug in qemu, so it can't work without a patch ([https://bugs.launchpad.net/qemu/+bug/902413 qemu-i386-user on ARM host: wine hangs]).
See [[Emulation]]


This configuration is not supported, but you'll be able to run some Applications. '''Don't ask for support on winehq.org''', but be free to read [http://forum.winehq.org/viewtopic.php?f=2&t=17701 I got Wine/x86 1.5.11 to run on Linux/ARM with qemu!].
=== Analyzed/Known Test Failures ===
* patch qemu with [http://patchwork.ozlabs.org/patch/45206/ the NPTL patch], you must do it manually when using recent qemu, e.g. the one from [http://repo.or.cz/w/qemu/agraf.git Alexander Graf]
* d3dx9_36:mesh
* compile it with
** Crashes, https://bugs.winehq.org/show_bug.cgi?id=43945
 
* mscoree:mscoree
./configure --target-list=i386-linux-user --extra-cflags=-marm && make
** no wine-mono for arm, https://bugs.winehq.org/show_bug.cgi?id=43937
 
* mshtml:* (FIXME: also applies to several others)
* copy Wine/x86 with all needed libraries from your desktop to the corresponding /usr/gnemul/qemu-i386/* folders except wine-preloader (it won't work)
** no wine-gecko for arm, https://bugs.winehq.org/show_bug.cgi?id=43938
* as root run
* msi:action
 
** https://bugs.winehq.org/show_bug.cgi?id=43944
echo ':i386:M::\x7fELF\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x03:\xff\xff\xff\xff\xff\xfe\xfe\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfb\xff\xff:/path/to/patched/qemu/i386-linux-user/qemu-i386:' >/proc/sys/fs/binfmt_misc/register
echo ':DOSWin:M::MZ::/usr/gnemul/qemu-i386/usr/bin/wine:' >/proc/sys/fs/binfmt_misc/register
 
* create a wineprefix on your desktop with
 
WINEARCH=win32 WINEPREFIX=~/.winex86 wine wineboot
 
* copy it from your desktop to your home folder
* run Wine/x86 with something like /path/to/patched/qemu/i386-linux-user/qemu-i386 /usr/gnemul/qemu-i386/usr/bin/wine winecfg
Remember: This configuration is not supported. '''Don't ask for support on winehq.org'''.
 
=== Analyzed Test Failures ===
* msvcr100:msvcr100
* msvcr100:msvcr100
** softfloat vs. hardfloat
** softfloat vs. hardfloat
* rpcrt4:cstub
** https://bugs.winehq.org/show_bug.cgi?id=43960
* user32:class
* user32:class
** per dissonant compile time checks the testsuite expects the x86 value for cbWndExtra, whereas the code uses the pointer size
** per dissonant compile time checks the testsuite expects the x86 value for cbWndExtra, whereas the code uses the pointer size
* vbscript:run
** DispCallFunc is not implemented for ARM


=== Wine On Android ===
=== Wine and Valgrind ===
This is a work-in-progress presented at [[FOSDEM2014]].
Currently a work in progress - [[User:Austin987|Austin English]]
* [http://oldwiki.winehq.org/FOSDEM2014?action=AttachFile&do=get&target=wine-on-android-fosdem-2014.pdf Presentation slides]
* [https://bugs.kde.org/show_bug.cgi?id=386425 running valgrind + wine on armv7l gives illegal opcode]


=== See also ===
=== See also ===
[[AndreHentschel|André Hentschel]]
[[AndreHentschel|André Hentschel]]
Wine On [[Android]]


[http://source.winehq.org/git/wine.git/?a=search&h=HEAD&st=commit&s=+ARM ARM commits] in Wine (and the [http://source.winehq.org/git/wine.git/?a=search&h=HEAD&st=commit&s=+Thumb Thumb] ones)
[http://source.winehq.org/git/wine.git/?a=search&h=HEAD&st=commit&s=+ARM ARM commits] in Wine (and the [http://source.winehq.org/git/wine.git/?a=search&h=HEAD&st=commit&s=+Thumb Thumb] ones)
Line 100: Line 91:
[[AndreHentschel|My]] and [[VincentPovirk|Vincents]] slides can be found here: [[FOSDEM2013]]
[[AndreHentschel|My]] and [[VincentPovirk|Vincents]] slides can be found here: [[FOSDEM2013]]


For Windows RT recompiled applications check: [http://forum.xda-developers.com/showthread.php?t=2092348 at xda-developers] and [http://www.shinysurface.com/downloads/ at shinysurface]
For Windows RT recompiled applications check: [http://forum.xda-developers.com/showthread.php?t=2092348 at xda-developers]


Examples of [[Winelib]] ports: [http://forum.winehq.org/viewtopic.php?f=2&t=17795 First tests with Wine ARM - on OpenPandora]
Examples of [[Winelib]] ports: [https://pyra-handheld.com/boards/threads/wine-qemu.58585/ - on OpenPandora]


Example use of [http://fabrice.bellard.free.fr/qemu/ Qemu] for running x86 code: [http://lists.fixstars.com/pipermail/yellowdog-general/2004-June/014468.html Wine for PPC (per qemu usermode emulation)]
Example use of [http://fabrice.bellard.free.fr/qemu/ Qemu] for running x86 code: [http://lists.fixstars.com/pipermail/yellowdog-general/2004-June/014468.html Wine for PPC (per qemu usermode emulation)]
Line 118: Line 109:
Winulator ([http://www.winulator.com/ Android APP]) claims it is not wine-based, but does somewhat the same a Wine x86_2_ARM would do: http://docs.winulator.com/faq
Winulator ([http://www.winulator.com/ Android APP]) claims it is not wine-based, but does somewhat the same a Wine x86_2_ARM would do: http://docs.winulator.com/faq


[http://forum.xda-developers.com/showthread.php?t=2095934 win86emu] is Bochs and DOSBox based and run x86 Applications on Windows RT
[http://forum.xda-developers.com/showthread.php?t=2095934 win86emu] is Bochs and [[DOSBox]] based and run x86 Applications on Windows RT


Limbo is an Intel x86 PC Emulator for Android based on QEMU,also uses code from [http://code.google.com/p/android-vnc-viewer android-vnc-viewer] and [http://developer.gnome.org/glib glib] among others: https://code.google.com/p/limbo-android/
Limbo is an Intel x86 PC Emulator for Android based on QEMU,also uses code from [http://code.google.com/p/android-vnc-viewer android-vnc-viewer] and [http://developer.gnome.org/glib glib] among others: https://code.google.com/p/limbo-android/

Latest revision as of 15:08, 30 October 2023

ARM support

Motivation

Windows apps are mostly compiled for x86 and they won't run on ARM with bare Wine, likewise ARM applications won't run on x86(_64) with bare Wine, so this is not our motivation.

The original Motivation was to be able to run winelib-apps on ARM, that even was before it got public that win8 will run on ARM devices. Meanwhile we support these new ARM PEs for win8!

Status

  • Yes, It works! (TM)
  • Running win8 ARM PEs also works.
  • Already ported Putty to ARM as winelib application.
  • First patch was September 18. 2009, final patchset sent September 18. 2010 and they got in Wine-1.3.4
  • Wine on ARM already gets packaged by Debian (since 1.7.35), Fedora, Maemo and openSUSE.
  • Good debugger/disassembler support.
  • Relay tracing.
  • Relocation.
  • Linux Kernel patched upstream for running Windows RT applications see Bug 31322

Todo

  • libs/port/interlocked.c: maybe native operations.
  • wine-gecko ARM port (waiting for mingw-w64-arm).
  • wine-mono ARM port (requires JIT/seh code modification, and a few non-essential support libraries fail to build).
  • DCOM

How to help

  • Fix compiler warnings.
  • Run winetest and report your results.
  • Fix test failures or analyse them, see below.
  • Report bugs with winelib or Windows RT applications.
  • Write tests for missing functions.

Compiling

Toolchains: Every toolchain with Thumb support should work as we are independent from the crti.o mode since wine-1.5.8

Compiling on the ARM Device is recommended:

../configure && make

Anyway here is a crosscompiling example:

../configure --host=arm-linux-gnueabihf host_alias=arm-linux-gnueabihf --with-wine-tools=../path/to/your/native/wine/build && make

Maybe you also should append something like:

CFLAGS="-mcpu=yourcpu -g -O2" LDFLAGS="-mcpu=yourcpu"

Fixme/Todo: Compiling inside a chroot

Running Windows RT Applications

You can find a list of such ported applications at forum.xda-developers.com. To run them you'll need a recent Wine and a Linux Kernel with the tpidrurw patch, it's included since Kernel 3.11-rc1. When you're unsure if the Kernel you are using supports it, you can clone, make and run tpidrurw-test, it'll tell you if your Kernel is suitable.

Running Windows CE Applications

That's still pre-alpha/proof-of-concept and not part of official Wine, don't expect any success. WineCE can be found at github.

Running Windows/x86 Applications

See Emulation

Analyzed/Known Test Failures

Wine and Valgrind

Currently a work in progress - Austin English

See also

André Hentschel

Wine On Android

ARM commits in Wine (and the Thumb ones)

ARM Bugs

AArch64: ARM64

My and Vincents slides can be found here: FOSDEM2013

For Windows RT recompiled applications check: at xda-developers

Examples of Winelib ports: - on OpenPandora

Example use of Qemu for running x86 code: Wine for PPC (per qemu usermode emulation)

There was some experience using Qemu to run the WINE x86 binary under Zaurus's ARM Debian: http://www.oesf.org/forum/index.php?showtopic=14829

Qemu Backend success story: http://forum.winehq.org/viewtopic.php?t=13286 and http://forum.winehq.org/viewtopic.php?t=13330

Mixed topic, including ARM discussions: http://forum.winehq.org/viewtopic.php?p=67218

Some x86-to-ARM translation strategies were also discussed: http://forum.openhandhelds.org/viewtopic.php?f=16&t=1088

Android running x86 wine and solitaire (by using ubuntu hack and binfmt) : http://forum.xda-developers.com/showthread.php?t=1258506

Winulator (Android APP) claims it is not wine-based, but does somewhat the same a Wine x86_2_ARM would do: http://docs.winulator.com/faq

win86emu is Bochs and DOSBox based and run x86 Applications on Windows RT

Limbo is an Intel x86 PC Emulator for Android based on QEMU,also uses code from android-vnc-viewer and glib among others: https://code.google.com/p/limbo-android/

Eltechs' ExaGear RPG ([1]) allows x86 applications to run on Android using wine.


This page was last edited on 30 October 2023, at 15:08.