aarch64 cross-compile

Questions about Wine on Linux
Locked
User avatar
KenSharp
Level 4
Level 4
Posts: 149
Joined: Mon Jul 13, 2009 8:52 pm

aarch64 cross-compile

Post by KenSharp »

I've been trying to get this to work for days, but I clearly have no idea what I'm doing. I've finally decided to reach out and actually ask for help.

How do I cross-compile for aarch64?

Code: Select all

CC="ccache clang-19" /home/test/wine-git/configure --disable-tests --enable-archs=aarch64 --host=aarch64-linux-gnu
configure reports no issues, but compilation immediately fails.

Code: Select all

In file included from /home/test/wine-git/tools/widl/hash.c:24:
In file included from /home/test/wine-git/include/windef.h:271:
/home/test/wine-git/include/winnt.h:1992:9: warning: 'CONTEXT_CONTROL' macro redefined [-Wmacro-redefined]
 1992 | #define CONTEXT_CONTROL CONTEXT_ARM64_CONTROL
      |         ^
/home/test/wine-git/include/winnt.h:1422:9: note: previous definition is here
 1422 | #define CONTEXT_CONTROL CONTEXT_AMD64_CONTROL
      |         ^
/home/test/wine-git/include/winnt.h:1993:9: warning: 'CONTEXT_INTEGER' macro redefined [-Wmacro-redefined]
 1993 | #define CONTEXT_INTEGER CONTEXT_ARM64_INTEGER
      |         ^
/home/test/wine-git/include/winnt.h:1423:9: note: previous definition is here
 1423 | #define CONTEXT_INTEGER CONTEXT_AMD64_INTEGER
      |         ^
/home/test/wine-git/include/winnt.h:1994:9: warning: 'CONTEXT_FLOATING_POINT' macro redefined [-Wmacro-redefined]
 1994 | #define CONTEXT_FLOATING_POINT CONTEXT_ARM64_FLOATING_POINT
      |         ^
/home/test/wine-git/include/winnt.h:1425:9: note: previous definition is here
 1425 | #define CONTEXT_FLOATING_POINT CONTEXT_AMD64_FLOATING_POINT
      |         ^
/home/test/wine-git/include/winnt.h:1995:9: warning: 'CONTEXT_DEBUG_REGISTERS' macro redefined [-Wmacro-redefined]
 1995 | #define CONTEXT_DEBUG_REGISTERS CONTEXT_ARM64_DEBUG_REGISTERS
      |         ^
/home/test/wine-git/include/winnt.h:1426:9: note: previous definition is here
 1426 | #define CONTEXT_DEBUG_REGISTERS CONTEXT_AMD64_DEBUG_REGISTERS
      |         ^
/home/test/wine-git/include/winnt.h:1996:9: warning: 'CONTEXT_FULL' macro redefined [-Wmacro-redefined]
 1996 | #define CONTEXT_FULL CONTEXT_ARM64_FULL
      |         ^
/home/test/wine-git/include/winnt.h:1428:9: note: previous definition is here
 1428 | #define CONTEXT_FULL CONTEXT_AMD64_FULL
      |         ^
/home/test/wine-git/include/winnt.h:1997:9: warning: 'CONTEXT_ALL' macro redefined [-Wmacro-redefined]
 1997 | #define CONTEXT_ALL CONTEXT_ARM64_ALL
      |         ^
/home/test/wine-git/include/winnt.h:1429:9: note: previous definition is here
 1429 | #define CONTEXT_ALL CONTEXT_AMD64_ALL
      |         ^
/home/test/wine-git/include/winnt.h:2000:44: error: typedef redefinition with different types ('IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY' (aka 'struct _IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY') vs 'IMAGE_AMD64_RUNTIME_FUNCTION_ENTRY' (aka 'struct IMAGE_AMD64_RUNTIME_FUNCTION_ENTRY'))
 2000 | typedef IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY RUNTIME_FUNCTION, *PRUNTIME_FUNCTION;
      |                                            ^
/home/test/wine-git/include/winnt.h:1432:44: note: previous definition is here
 1432 | typedef IMAGE_AMD64_RUNTIME_FUNCTION_ENTRY RUNTIME_FUNCTION, *PRUNTIME_FUNCTION;
      |                                            ^
/home/test/wine-git/include/winnt.h:2000:63: error: typedef redefinition with different types ('IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY *' (aka 'struct _IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY *') vs 'IMAGE_AMD64_RUNTIME_FUNCTION_ENTRY *' (aka 'struct IMAGE_AMD64_RUNTIME_FUNCTION_ENTRY *'))
 2000 | typedef IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY RUNTIME_FUNCTION, *PRUNTIME_FUNCTION;
      |                                                               ^
/home/test/wine-git/include/winnt.h:1432:63: note: previous definition is here
 1432 | typedef IMAGE_AMD64_RUNTIME_FUNCTION_ENTRY RUNTIME_FUNCTION, *PRUNTIME_FUNCTION;
      |                                                               ^
/home/test/wine-git/include/winnt.h:2001:27: error: typedef redefinition with different types ('SCOPE_TABLE_ARM64' (aka 'struct _SCOPE_TABLE_ARM64') vs 'SCOPE_TABLE_AMD64' (aka 'struct _SCOPE_TABLE_AMD64'))
 2001 | typedef SCOPE_TABLE_ARM64 SCOPE_TABLE, *PSCOPE_TABLE;
      |                           ^
/home/test/wine-git/include/winnt.h:1433:27: note: previous definition is here
 1433 | typedef SCOPE_TABLE_AMD64 SCOPE_TABLE, *PSCOPE_TABLE;
      |                           ^
/home/test/wine-git/include/winnt.h:2001:41: error: typedef redefinition with different types ('SCOPE_TABLE_ARM64 *' (aka 'struct _SCOPE_TABLE_ARM64 *') vs 'SCOPE_TABLE_AMD64 *' (aka 'struct _SCOPE_TABLE_AMD64 *'))
 2001 | typedef SCOPE_TABLE_ARM64 SCOPE_TABLE, *PSCOPE_TABLE;
      |                                         ^
/home/test/wine-git/include/winnt.h:1433:41: note: previous definition is here
 1433 | typedef SCOPE_TABLE_AMD64 SCOPE_TABLE, *PSCOPE_TABLE;
      |                                         ^
/home/test/wine-git/include/winnt.h:2002:45: error: typedef redefinition with different types ('KNONVOLATILE_CONTEXT_POINTERS_ARM64' (aka 'struct _KNONVOLATILE_CONTEXT_POINTERS_ARM64') vs 'struct _KNONVOLATILE_CONTEXT_POINTERS')
 2002 | typedef KNONVOLATILE_CONTEXT_POINTERS_ARM64 KNONVOLATILE_CONTEXT_POINTERS, *PKNONVOLATILE_CONTEXT_POINTERS;
      |                                             ^
/home/test/wine-git/include/winnt.h:1484:3: note: previous definition is here
 1484 | } KNONVOLATILE_CONTEXT_POINTERS, *PKNONVOLATILE_CONTEXT_POINTERS;
      |   ^
/home/test/wine-git/include/winnt.h:2002:77: error: typedef redefinition with different types ('KNONVOLATILE_CONTEXT_POINTERS_ARM64 *' (aka 'struct _KNONVOLATILE_CONTEXT_POINTERS_ARM64 *') vs 'struct _KNONVOLATILE_CONTEXT_POINTERS *')
 2002 | typedef KNONVOLATILE_CONTEXT_POINTERS_ARM64 KNONVOLATILE_CONTEXT_POINTERS, *PKNONVOLATILE_CONTEXT_POINTERS;
      |                                                                             ^
/home/test/wine-git/include/winnt.h:1484:35: note: previous definition is here
 1484 | } KNONVOLATILE_CONTEXT_POINTERS, *PKNONVOLATILE_CONTEXT_POINTERS;
      |                                   ^
/home/test/wine-git/include/winnt.h:2004:26: error: typedef redefinition with different types ('ARM64_NT_CONTEXT' (aka 'struct _ARM64_NT_CONTEXT') vs 'AMD64_CONTEXT' (aka 'struct _AMD64_CONTEXT'))
 2004 | typedef ARM64_NT_CONTEXT CONTEXT, *PCONTEXT;
      |                          ^
/home/test/wine-git/include/winnt.h:1431:23: note: previous definition is here
 1431 | typedef AMD64_CONTEXT CONTEXT, *PCONTEXT;
      |                       ^
/home/test/wine-git/include/winnt.h:2004:36: error: typedef redefinition with different types ('ARM64_NT_CONTEXT *' (aka 'struct _ARM64_NT_CONTEXT *') vs 'AMD64_CONTEXT *' (aka 'struct _AMD64_CONTEXT *'))
 2004 | typedef ARM64_NT_CONTEXT CONTEXT, *PCONTEXT;
      |                                    ^
/home/test/wine-git/include/winnt.h:1431:33: note: previous definition is here
 1431 | typedef AMD64_CONTEXT CONTEXT, *PCONTEXT;
      |                                 ^
/home/test/wine-git/include/winnt.h:2082:16: error: redefinition of '_DISPATCHER_CONTEXT'
 2082 | typedef struct _DISPATCHER_CONTEXT
      |                ^
/home/test/wine-git/include/winnt.h:2048:16: note: previous definition is here
 2048 | typedef struct _DISPATCHER_CONTEXT_ARM64
      |                ^
/home/test/wine-git/include/winnt.h:2006:35: note: expanded from macro '_DISPATCHER_CONTEXT_ARM64'
 2006 | #define _DISPATCHER_CONTEXT_ARM64 _DISPATCHER_CONTEXT
      |                                   ^
6 warnings and 9 errors generated.
make: *** [Makefile:257629: tools/widl/hash.o] Error 1
It must be me doing something wrong as I cannot find any details at all online about compiling Wine for arm, that isn't either outdated or plain wrong.

I even tried adding host_alias=aarch64-linux-gnu --with-mingw=aarch64-w64-mingw32-clang but that doesn't help.

Help!
User avatar
KenSharp
Level 4
Level 4
Posts: 149
Joined: Mon Jul 13, 2009 8:52 pm

Re: aarch64 cross-compile

Post by KenSharp »

I tried looking through the .spec files and Debian/Ubuntu patches, but it looks like there are dependency problems for arm64.

I see that Wine is built with all the arches. I tried that build and it builds libraries but is incapable of running anything arm. What do Wine's build servers run on?
User avatar
KenSharp
Level 4
Level 4
Posts: 149
Joined: Mon Jul 13, 2009 8:52 pm

Re: aarch64 cross-compile

Post by KenSharp »

Oh, there it is:

Code: Select all

image: $CI_REGISTRY/wine/wine:debian-bookworm
User avatar
André H.
Moderator
Moderator
Posts: 207
Joined: Sun Dec 07, 2008 8:33 am

Re: aarch64 cross-compile

Post by André H. »

You could also check how I compile it for Hangover: https://github.com/AndreRH/hangover/tre ... .packaging
User avatar
KenSharp
Level 4
Level 4
Posts: 149
Joined: Mon Jul 13, 2009 8:52 pm

Re: aarch64 cross-compile

Post by KenSharp »

If there was a like button I would like your reply! 😊
Locked