Bug 108678 - Windows on ARM64 platform target aarch64-w64-mingw32
Summary: Windows on ARM64 platform target aarch64-w64-mingw32
Status: NEW
Alias: None
Product: gcc
Classification: Unclassified
Component: target (show other bugs)
Version: 13.0
: P3 enhancement
Target Milestone: ---
Assignee: Not yet assigned to anyone
URL:
Keywords:
Depends on:
Blocks: 115083
  Show dependency treegraph
 
Reported: 2023-02-05 14:43 UTC by Brecht Sanders
Modified: 2025-07-17 17:37 UTC (History)
8 users (show)

See Also:
Host:
Target: aarch64-w64-mingw32
Build:
Known to work:
Known to fail:
Last reconfirmed: 2023-11-09 00:00:00


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Brecht Sanders 2023-02-05 14:43:03 UTC
Are there plans to support Windows (using MinGW-w64) on ARM64?

The triplet for this platform should be: aarch64-w64-mingw32

I'm trying to build natively on a Windows on ARM device (bootstrapping from LLVM/CLang).

Since binutils 2.40 there some support for aarch64 COFF/PE format, and I already built a working binutils with the following supported targets:

ld --help|sed -n "s/^.*supported targets: //p"
pe-x86-64 pei-x86-64 pe-bigobj-x86-64 elf64-x86-64 pe-i386 pei-i386 elf32-i386
elf32-iamcu pdb elf64-little elf64-big elf32-little elf32-big pe-bigobj-i386 pe-aarch64-little pei-aarch64-little srec symbolsrec verilog tekhex binary ihex plugin

So it looks like pe-aarch64-little and pei-aarch64-little are listed.

I'm don't know if a pe-bigobj-aarch64-little is needed or if it will be supported in the future.

My first attempt to get gcc (I tried with source tarball 12.2.0) to configure was changing the following line in gcc/config.gcc:

i[34567]86-*-mingw* | x86_64-*-mingw*)

to:

i[34567]86-*-mingw* | x86_64-*-mingw* | aarch64-*-mingw*)

but then I get the following error:

Unknown tune used in --with-tune=generic

What needs to be changed to get past that?
Comment 1 Drea Pinski 2023-02-05 18:19:54 UTC
I have not seen anyone step up to patch GCC for aarch64-mingw yet.
Most aarch64 developers don't use Windows at all. There is some support being worked on for aarch64 darwin (Mac OS) though.
Comment 2 Brecht Sanders 2023-02-05 19:23:30 UTC
I would love to give it a go if only I knew where to add the support.

I actually got a Windows on ARM device hoping I could figure it out, bit it looks I will need tome help.

The "Unknown tune used in --with-tune=generic" error is where I'm currently stuck, and I couldn't figure out in which file(s) I need to address this.
Comment 3 Brecht Sanders 2023-06-24 20:14:11 UTC
Any pointers on which files to edit in order to support aarch64-mingw ?

I think it won't require reinventing the wheel as it will probably be a mix of existing *-mingw and aarch64-* stuff...
Comment 4 Zac Walker 2023-06-26 08:25:15 UTC
I have been working on an experimental aarch64-w64-mingw32 toolchain. It can build several C libraries and small executables successfully. Currently parked here on github:

https://github.com/ZacWalk/mingw-woarm64-build

It is based on previous work by Mark Harmstone and Jedidiah Thompson. I am currently working on structured exception handling support. This seems to be the main missing part - without it C++ exceptions do not work.
Comment 5 Brecht Sanders 2023-06-26 18:05:49 UTC
Thanks Zac, how can I see what you actually changed?
Is there a particular GCC version I can diff https://github.com/ZacWalk/gcc-woarm64 against?
Comment 6 Zac Walker 2023-06-26 20:34:11 UTC
I have been rebasing regularly to keep all my changes on top of the commit log. You can use github's compare url to combine my changes into a single diff (based on commit hash). For example:

https://github.com/ZacWalk/gcc-woarm64/compare/06a0f07..0248264
Comment 7 Jonathan Wakely 2023-06-26 22:05:05 UTC
The change to libstdc++-v3/src/c++17/fast_float/fast_float.h should be done upstream: https://github.com/fastfloat/fast_float
Comment 8 Zac Walker 2023-06-28 11:40:57 UTC
Thanks Jonathan. I am still in test and cleanup up mode but hope to start upstreaming in a few weeks.
Comment 9 Drea Pinski 2023-11-09 03:47:16 UTC
.
Comment 10 Brecht Sanders 2024-04-17 20:15:55 UTC
What is the status of GCC support for aarch64-w64-mingw32 ?

I just tried GCC 14 snapshot 20240414 and it looks like it's still not supported.

Build fails with:
*** Configuration aarch64-w64-mingw32 not supported
Comment 11 Drea Pinski 2024-04-17 20:20:35 UTC
(In reply to Brecht Sanders from comment #10)
> What is the status of GCC support for aarch64-w64-mingw32 ?
> 
> I just tried GCC 14 snapshot 20240414 and it looks like it's still not
> supported.
> 
> Build fails with:
> *** Configuration aarch64-w64-mingw32 not supported

Patches have started to be posted but won't be fully reviewed/committed until after GCC 14 is released due to them coming in late (during stage 4) in the release cycle (See https://gcc.gnu.org/develop.html for the full gcc release/development cycle).
Comment 12 Christophe Lyon 2024-04-18 09:14:22 UTC
Indeed the plan is to commit the first series (https://gcc.gnu.org/pipermail/gcc-patches/2024-April/649261.html) once stage-1 re-opens (as approved in https://gcc.gnu.org/pipermail/gcc-patches/2024-April/649299.html
Comment 13 cqwrteur 2024-05-14 08:08:30 UTC
/home/cqwrteur/toolchains_build/gcc/gcc/c-family/c-format.cc:5159:(.text+0x7c1): undefined reference to `msformat_init()'
/usr/local/lib/gcc/x86_64-pc-linux-gnu/15.0.0/../../../../x86_64-pc-linux-gnu/bin/ld: c-family/c-format.o: in function `cmp_attribs(char const*, char const*)':

Can you explain to me what is going on? Thank you!
Comment 14 cqwrteur 2024-05-14 09:56:55 UTC
libgcc:

/home/cqwrteur/toolchains_build/gcc/libgcc/libgcov.h:49:10: fatal error: sys/mman.h: No such file or directory
   49 | #include <sys/mman.h>
      |          ^~~~~~~~~~~~
compilation terminated.
make[4]: *** [Makefile:933: _gcov_interval_profiler.o] Error 1
make[4]: *** Waiting for unfinished jobs....
Comment 15 Evgeny Karpov 2024-06-05 13:39:54 UTC
It looks like the same issue which was described here
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115083
Please specify only C language in the configuration for now.
Comment 16 Brecht Sanders 2025-02-17 07:53:40 UTC
What is the current status of GCC for aarch64-w64-mingw32 ?

When can I expect a snapshot version of GCC 15 to build for this platform?
Comment 17 Evgeny Karpov 2025-02-17 11:27:37 UTC
> What is the current status of GCC for aarch64-w64-mingw32 ?
> When can I expect a snapshot version of GCC 15 to build for this platform?

The current upstreamed aarch64-w64-mingw32 uses 605k tests and shows a success pass rate of 89%, including C/C++.
It will be released with GCC 15.

Here is detailed information about the recent upstreamed patch series in November 2024:
https://gcc.gnu.org/pipermail/gcc-patches/2024-September/662017.html

SEH and full Boost library support should be upstreamed in Q2 2025. However, the current implementation can be found
at https://github.com/Windows-on-ARM-Experiments/mingw-woarm64-build, including the initial implementation for aarch64-pc-cygwin.

Please report any issues to https://github.com/Windows-on-ARM-Experiments/mingw-woarm64-build/issues.
Comment 18 Brecht Sanders 2025-02-19 12:04:06 UTC
Thanks for you work on this.

My goal is to eventually have native binutils+GCC on Windows ARM64.

I tried using sources from:
https://github.com/Windows-on-ARM-Experiments/binutils-woarm64
https://github.com/Windows-on-ARM-Experiments/mingw-woarm64
https://github.com/Windows-on-ARM-Experiments/gcc-woarm64

And I am able to build a cross compiler.

However, using that compiler to build the same thing for running Windows ARM64 itself is not working yet.

Is that samething on your radar, or is the main focus for now just the cross-compiler?
Comment 19 Evgeny Karpov 2025-02-20 15:02:13 UTC
Thank you for your interest in aarch64-w64-mingw32.
Cross-compilation from the x86_64-pc-msys host to the aarch64-w64-mingw32 target
is already available. Work on a native toolchain is in progress.

More information here:
https://github.com/Windows-on-ARM-Experiments/msys2-woarm64-build
Comment 20 Radek Barton 2025-05-12 06:33:49 UTC
If you'd like to try experimental native compiler, we can refer you to https://github.com/Windows-on-ARM-Experiments/msys2-woarm64-build for the instructions how to add it to a MSYS2 shell. We would be happy for any feedback if you do.

Is there any other form of native compiler you'd prefer instead of MSYS2 packages?