[fpc-pascal] New Target Announcement: Windows on ARM64
pascaldragon at googlemail.com
Tue Apr 21 08:10:38 CEST 2020
I'm happy to announce initial support for the Windows on ARM64 target,
Simple programs work already and the compiler is at least able to
display its help message (when trying to compiler something it silently
crashes, I've not yet found out why that is the case). Optimizations
don't work yet, so please use -O- when building (especially when
building the compiler/RTL).
Just in case anyone thinks that: no, this does not mean that
Metro/WinRT/UWP apps are supported.
Currently a clang installation is required as we use clang for the
external assembler, because GNU AS does not yet support COFF for
Aarch64. And we don't support Microsoft's arm64asm.exe yet...
Thus you should either have clang in your PATH or you need to use -FD…
or CROSSBINDIR=… to point the compiler to the directory containing the
clang binary while setting -XP… / BINUTILSPREFIX=… to empty.
Due to GNU LD also not being available we currently *only* support the
internal linker (FPC does not support Microsoft's link.exe either).
Unlike i386-win32 and x86_64-win64 this target uses SEH from the beginning.
Also the NX_COMPAT and DYNAMIC_BASE flags are enabled by default and a
relocation section is generated, because this is required by Windows on
To build the compiler you can do the following:
make all FPMAKEOPT="-T <cores>" CPU_TARGET=aarch64 OS_TARGET=win64
You might also need to specify OS_SOURCE and CPU_SOURCE (which is your
host's target, e.g. if you have a Win64 ppcx64: OS_SOURCE=win64
Please give this target a go (if you have access to a Windows on ARM64
machine (1)) and report any problems you find so that the target will be
nice and well soon. :)
Things left to do (in no specific order):
- implement an internal Aarch64 assembler (this way we could get rid of
the clang dependency, though I won't work on that)
- implement support for Microsoft's armasm64.exe
- figure out why the compiler can't compile code on Windows on ARM64
- try to compile and run Lazarus
- fix optimizations
- fix other bugs (obviously ;) )
- implement Windows on ARM32, just for the sake of completeness ;)
(1) Apparantly one can also run a Windows on ARM64 in QEMU:
More information about the fpc-pascal