Bug 108678 - Windows on ARM64 platform target aarch64-w64-mingw32
Summary: Windows on ARM64 platform target aarch64-w64-mingw32
Status: UNCONFIRMED
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:
 
Reported: 2023-02-05 14:43 UTC by Brecht Sanders
Modified: 2023-06-28 11:40 UTC (History)
1 user (show)

See Also:
Host:
Target: Aarch64-mingw
Build:
Known to work:
Known to fail:
Last reconfirmed:


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 Andrew 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.