This repository contains GitHub Actions workflows for building MinGW and MSYS2 toolchains
with aarch64-w64-mingw32 and aarch64-pc-msys targets inside MSYS2 environment and deploys
their Pacman packages overlay repositories to GitHub Pages environment of this repository.
It also serves as a documentation of the necessary steps to build them.
The actual MSYS2 packages recipes dwells in woarm64 branches of
Windows-on-ARM-Experiments/MSYS2-packages
and Windows-on-ARM-Experiments/MINGW-packages
repositories. Please report any issue related to packages build to this repository's
issues list.
The actual GCC, binutils, and MinGW source codes with the necessary aarch64-w64-mingw32 target
changes are located at Windows-on-ARM-Experiments/gcc-woarm64,
Windows-on-ARM-Experiments/binutils-woarm64,
and Windows-on-ARM-Experiments/mingw-woarm64,
resp. Please report any issues related to outputs of the toolchain binaries to
Windows-on-ARM-Experiments/mingw-woarm64-build
repository's
issues list.
Add the following to the /etc/pacman.conf before any other package repositories specification:
[woarm64]
Server = https://windows-on-arm-experiments.github.io/msys2-woarm64-build/msys/x86_64
SigLevel = Optional
[woarm64-native]
Server = https://windows-on-arm-experiments.github.io/msys2-woarm64-build/mingw/aarch64
SigLevel = OptionalRun:
pacman -Syto update packages definitions.
Run:
pacman -S mingw-w64-cross-mingwarm64-gccto install x86_64-pc-msys host MinGW cross toolchain with aarch64-w64-mingw32 target support.
Run:
pacman -S mingw-w64-aarch64-gccto instal native aarch64-w64-mingw32 host, aarch64-w64-mingw32 target MinGW toolchain.
In case one would like to build all the cross-compilation toolchain packages locally, there is
a build-cross.sh script. It expects that the
Windows-on-ARM-Experiments/MSYS2-packages
package recipes repository is already cloned in the parent folder of this repository's folder and
it must be executed from MSYS environment.
In case one would like to build all the native toolchain packages locally, there is
a build-native.sh script. It expects that the
Windows-on-ARM-Experiments/MINGW-packages
package recipes repositories is already cloned in the parent folder of this repository's folder and
it must be executed from MINGWARM64 environment.
Until the MINGWARM64 environment will be available in the upstream MSYS2 installation, one can
patch the MSYS2 installation to add the MINGWARM64 environment using
.github/scripts/setup-mingwarm64.sh
script.
The mingw-cross-toolchain.yml
workflow builds x86_64-pc-msys host, aarch64-w64-mingw32 target cross-compilation toolchain packages:
%%{init: {"flowchart": {"htmlLabels": false, 'nodeSpacing': 30, 'rankSpacing': 30}} }%%
flowchart LR
classDef EXIST fill:#888,color:#000,stroke:#000
classDef DONE fill:#3c3,color:#000,stroke:#000
classDef NEW_DONE fill:#3c3,color:#000,stroke:#f00,stroke-width:2,stroke-dasharray:5
classDef WIP fill:#cc3,color:#000,stroke:#000
classDef NEW_WIP fill:#cc3,color:#000,stroke:#f00,stroke-width:2,stroke-dasharray:5
classDef TODO fill:#c33,color:#000,stroke:#000
classDef NEW_TODO fill:#c33,color:#000,stroke:#f00,stroke-width:2,stroke-dasharray:5
classDef NEW fill:#fff,color:#000,stroke:#f00,stroke-width:2,stroke-dasharray:5
subgraph Legend
direction LR
EXIST:::EXIST ~~~ TODO:::TODO ~~~ WIP:::WIP ~~~ DONE:::DONE ~~~ NEW:::NEW
end
mingw-w64-cross-mingwarm64-headers["`
mingw-w64-mingwarm64-headers
host: aarch64-w64-mingw32
`"]:::DONE
mingw-w64-cross-mingwarm64-binutils["`
mingw-w64-cross-binutils
host: x86_64-pc-msys
target: aarch64-w64-mingw32
`"]:::DONE
mingw-w64-cross-mingwarm64-gcc-stage1["`
mingw-w64-cross-mingwarm64-gcc-stage1
host: x86_64-pc-msys
target: aarch64-w64-mingw32
`"]:::NEW_DONE
mingw-w64-cross-mingwarm64-crt["`
mingw-w64-cross-mingwarm64-crt
host: aarch64-w64-mingw32
`"]:::DONE
mingw-w64-cross-mingwarm64-windows-default-manifest["`
mingw-w64-cross-windows-default-manifest
host: aarch64-w64-mingw32
`"]:::DONE
mingw-w64-cross-mingwarm64-winpthreads["`
mingw-w64-cross-mingwarm64-winpthreads
host: aarch64-w64-mingw32
`"]:::DONE
mingw-w64-cross-mingwarm64-gcc["`
mingw-w64-cross-mingwarm64-gcc
host: x86_64-pc-msys
target: aarch64-w64-mingw32
`"]:::DONE
mingw-w64-cross-mingwarm64-zlib["`
mingw-w64-cross-mingwarm64-zlib
host: aarch64-w64-mingw32
`"]:::NEW_DONE
subgraph Toolchain
mingw-w64-cross-mingwarm64-headers --> mingw-w64-cross-mingwarm64-binutils
mingw-w64-cross-mingwarm64-headers --> mingw-w64-cross-mingwarm64-crt
mingw-w64-cross-mingwarm64-headers --> mingw-w64-cross-mingwarm64-winpthreads
mingw-w64-cross-mingwarm64-binutils --> mingw-w64-cross-mingwarm64-gcc-stage1
mingw-w64-cross-mingwarm64-gcc-stage1 --> mingw-w64-cross-mingwarm64-crt
mingw-w64-cross-mingwarm64-gcc-stage1 --> mingw-w64-cross-mingwarm64-windows-default-manifest
mingw-w64-cross-mingwarm64-crt --> mingw-w64-cross-mingwarm64-winpthreads
mingw-w64-cross-mingwarm64-winpthreads --> mingw-w64-cross-mingwarm64-gcc
mingw-w64-cross-mingwarm64-windows-default-manifest --> mingw-w64-cross-mingwarm64-gcc
end
subgraph Software
mingw-w64-cross-mingwarm64-gcc --> mingw-w64-cross-mingwarm64-zlib
end
The mingw-native-toolchain.yml
workflow builds native aarch64-w64-mingw32 toolchain packages:
%%{init: {"flowchart": {"htmlLabels": false, 'nodeSpacing': 30, 'rankSpacing': 30}} }%%
flowchart LR
classDef EXIST fill:#888,color:#000,stroke:#000
classDef DONE fill:#3c3,color:#000,stroke:#000
classDef NEW_DONE fill:#3c3,color:#000,stroke:#f00,stroke-width:2,stroke-dasharray:5
classDef WIP fill:#cc3,color:#000,stroke:#000
classDef NEW_WIP fill:#cc3,color:#000,stroke:#f00,stroke-width:2,stroke-dasharray:5
classDef TODO fill:#c33,color:#000,stroke:#000
classDef NEW_TODO fill:#c33,color:#000,stroke:#f00,stroke-width:2,stroke-dasharray:5
classDef NEW fill:#fff,color:#000,stroke:#f00,stroke-width:2,stroke-dasharray:5
subgraph Legend
direction LR
EXIST:::EXIST ~~~ TODO:::TODO ~~~ WIP:::WIP ~~~ DONE:::DONE ~~~ NEW:::NEW
end
mingw-w64-libiconv["`
mingw-w64-libiconv
`"]:::DONE
mingw-w64-libtre["`
mingw-w64-libtre
`"]:::DONE
mingw-w64-libsystre["`
mingw-w64-libsystre
`"]:::DONE
mingw-w64-ncurses["`
mingw-w64-ncurses
`"]:::DONE
mingw-w64-gettext["`
mingw-w64-gettext
`"]:::DONE
mingw-w64-headers-git["`
mingw-w64-headers-git
`"]:::DONE
mingw-w64-crt-git["`
mingw-w64-crt-git
`"]:::DONE
mingw-w64-winpthreads-git["`
mingw-w64-winpthreads-git
`"]:::DONE
mingw-w64-bzip2["`
mingw-w64-bzip2
`"]:::DONE
mingw-w64-zlib["`
mingw-w64-zlib
`"]:::DONE
mingw-w64-zstd["`
mingw-w64-zstd
`"]:::DONE
mingw-w64-gmp["`
mingw-w64-gmp
`"]:::DONE
mingw-w64-mpfr["`
mingw-w64-mpfr
`"]:::DONE
mingw-w64-isl["`
mingw-w64-isl
`"]:::DONE
mingw-w64-binutils["`
mingw-w64-binutils
`"]:::DONE
mingw-w64-mpc["`
mingw-w64-mpc
`"]:::DONE
mingw-w64-windows-default-manifest["`
mingw-w64-windows-default-manifest
`"]:::DONE
mingw-w64-gcc["`
mingw-w64-gcc
`"]:::DONE
subgraph Dependencies
mingw-w64-libiconv
mingw-w64-libtre --> mingw-w64-libsystre
mingw-w64-libsystre --> mingw-w64-ncurses
mingw-w64-ncurses --> mingw-w64-gettext
mingw-w64-gmp --> mingw-w64-mpfr
mingw-w64-gmp --> mingw-w64-isl
mingw-w64-mpfr --> mingw-w64-mpc
mingw-w64-bzip2 --> mingw-w64-zlib
mingw-w64-zstd
end
subgraph Toolchain
mingw-w64-libiconv --> mingw-w64-binutils
mingw-w64-zlib --> mingw-w64-binutils
mingw-w64-zstd --> mingw-w64-binutils
mingw-w64-headers-git --> mingw-w64-binutils
mingw-w64-headers-git --> mingw-w64-crt-git
mingw-w64-headers-git --> mingw-w64-winpthreads-git
mingw-w64-crt-git --> mingw-w64-winpthreads-git
mingw-w64-mpc --> mingw-w64-gcc
mingw-w64-isl --> mingw-w64-gcc
mingw-w64-binutils --> mingw-w64-gcc
mingw-w64-gettext --> mingw-w64-gcc
mingw-w64-winpthreads-git --> mingw-w64-gcc
mingw-w64-windows-default-manifest --> mingw-w64-gcc
end
Work on native aarch64-pc-msys, resp. aarch64-pc-cygwin, toolchain is in progress.
First iteration taken is to provide x86_64-pc-msys host, aarch64-pc-msys target cross-toolchain
that will then eventually build the aarch64-pc-msys native toolchain. The current status of the
cross-toolchain can be visualized by the following chart:
%%{init: {"flowchart": {"htmlLabels": false, 'nodeSpacing': 30, 'rankSpacing': 30}} }%%
flowchart LR
classDef EXIST fill:#888,color:#000,stroke:#000
classDef DONE fill:#3c3,color:#000,stroke:#000
classDef NEW_DONE fill:#3c3,color:#000,stroke:#f00,stroke-width:2,stroke-dasharray:5
classDef WIP fill:#cc3,color:#000,stroke:#000
classDef NEW_WIP fill:#cc3,color:#000,stroke:#f00,stroke-width:2,stroke-dasharray:5
classDef TODO fill:#c33,color:#000,stroke:#000
classDef NEW_TODO fill:#c33,color:#000,stroke:#f00,stroke-width:2,stroke-dasharray:5
classDef NEW fill:#fff,color:#000,stroke:#f00,stroke-width:2,stroke-dasharray:5
subgraph Legend
direction LR
EXIST:::EXIST ~~~ TODO:::TODO ~~~ WIP:::WIP ~~~ DONE:::DONE ~~~ NEW:::NEW
end
msys2-runtime-devel["`
msys2-runtime-devel
host: x86_64-pc-msys
target: aarch64-pc-msys
`"]:::DONE
mingw-w64-cross-mingwarm64-gcc["`
mingw-w64-cross-mingwarm64-gcc
host: x86_64-pc-msys
target: aarch64-w64-mingw32
`"]:::DONE
mingw-w64-cross-mingwarm64-crt["`
mingw-w64-cross-mingwarm64-crt
host: aarch64-w64-mingw32
`"]:::DONE
mingw-w64-cross-mingwarm64-zlib["`
mingw-w64-cross-mingwarm64-zlib
host: aarch64-w64-mingw32
`"]:::NEW_DONE
msys2-w32api-headers["`
msys2-w32api-headers
host: aarch64-pc-msys
`"]:::DONE
msys2-w32api-runtime["`
msys2-w32api-runtime
host: x86_64-pc-msys
`"]:::DONE
cross-binutils["`
cross-binutils
host: x86_64-pc-msys
target: aarch64-pc-msys
`"]:::NEW_DONE
cross-gcc-stage1["`
cross-gcc-stage1
host: x86_64-pc-msys
target: aarch64-pc-msys
`"]:::NEW_DONE
cross-gcc["`
cross-gcc
host: x86_64-pc-msys
target: aarch64-pc-msys
`"]:::NEW_WIP
windows-default-manifest["`
windows-default-manifest
host: aarch64-pc-msys
`"]:::DONE
msys2-runtime["`
msys2-runtime
host: aarch64-pc-msys
`"]:::WIP
bash["`
bash
host: aarch64-pc-msys
`"]:::TODO
git4win["`
Git for Windows
host: aarch64-pc-msys
`"]:::TODO
subgraph Stage 1
cross-binutils --> cross-gcc-stage1
msys2-runtime-devel --> cross-gcc-stage1
msys2-w32api-headers --> cross-gcc-stage1
end
subgraph Stage 2 Dependencies
mingw-w64-cross-mingwarm64-gcc --> msys2-w32api-runtime
msys2-w32api-headers --> msys2-w32api-runtime
cross-gcc-stage1 --> windows-default-manifest
end
subgraph Stage 2
cross-gcc-stage1 --> cross-gcc
msys2-w32api-runtime --> cross-gcc
windows-default-manifest --> cross-gcc
end
subgraph Application\nDependencies
cross-gcc-stage1 --> msys2-runtime
mingw-w64-cross-mingwarm64-gcc --> msys2-runtime
mingw-w64-cross-mingwarm64-crt --> msys2-runtime
mingw-w64-cross-mingwarm64-zlib --> msys2-runtime
end
subgraph Application
cross-gcc --> bash
msys2-runtime --> bash
cross-gcc --> git4win
msys2-runtime --> git4win
bash --> git4win
end
Relevant for x86-64-pc-msys host, aarch64-pc-msys and aarch64-w64-mingw32 target
cross-compilation option:
%%{init: {"flowchart": {"htmlLabels": false, 'nodeSpacing': 30, 'rankSpacing': 30}} }%%
flowchart LR
classDef EXIST fill:#888,color:#000,stroke:#000
classDef DONE fill:#3c3,color:#000,stroke:#000
classDef NEW_DONE fill:#3c3,color:#000,stroke:#f00,stroke-width:2,stroke-dasharray:5
classDef WIP fill:#cc3,color:#000,stroke:#000
classDef NEW_WIP fill:#cc3,color:#000,stroke:#f00,stroke-width:2,stroke-dasharray:5
classDef TODO fill:#c33,color:#000,stroke:#000
classDef NEW_TODO fill:#c33,color:#000,stroke:#f00,stroke-width:2,stroke-dasharray:5
classDef NEW fill:#fff,color:#000,stroke:#f00,stroke-width:2,stroke-dasharray:5
subgraph Legend
direction LR
EXIST:::EXIST ~~~ TODO:::TODO ~~~ WIP:::WIP ~~~ DONE:::DONE ~~~ NEW:::NEW
end
binutils["`
binutils
host: x86_64-pc-msys
target: x86_64-pc-msys
`"]:::EXIST
gcc["`
gcc
host: x86_64-pc-msys
target: x86_64-pc-msys
`"]:::EXIST
msys2-runtime-devel["`
msys2-runtime-devel
host: x86_64-pc-msys
target: aarch64-pc-msys
`"]:::DONE
mingw-w64-cross-mingwarm64-binutils["`
mingw-w64-cross-mingwarm64-binutils
host: x86_64-pc-msys
target: aarch64-w64-mingw32
`"]:::DONE
mingw-w64-cross-mingwarm64-gcc["`
mingw-w64-cross-mingwarm64-gcc
host: x86_64-pc-msys
target: aarch64-w64-mingw32
`"]:::DONE
mingw-w64-cross-mingwarm64-gcc-stage1["`
mingw-w64-cross-mingwarm64-gcc-stage1
host: x86_64-pc-msys
target: aarch64-w64-mingw32
`"]:::NEW_DONE
mingw-w64-cross-mingwarm64-crt["`
mingw-w64-cross-mingwarm64-crt
host: aarch64-w64-mingw32
`"]:::DONE
mingw-w64-cross-mingwarm64-headers["`
mingw-w64-cross-mingwarm64-headers
host: aarch64-w64-mingw32
`"]:::DONE
mingw-w64-cross-mingwarm64-winpthreads["`
mingw-w64-cross-mingwarm64-winpthreads
host: aarch64-w64-mingw32
`"]:::DONE
mingw-w64-cross-mingwarm64-windows-default-manifest["`
mingw-w64-cross-mingwarm64-windows-default-manifest
host: aarch64-w64-mingw32
`"]:::DONE
mingw-w64-cross-mingwarm64-zlib["`
mingw-w64-cross-mingwarm64-zlib
host: aarch64-w64-mingw32
`"]:::NEW_DONE
msys2-w32api-headers["`
msys2-w32api-headers
host: aarch64-pc-msys
`"]:::DONE
msys2-w32api-runtime["`
msys2-w32api-runtime
host: x86_64-pc-msys
`"]:::DONE
cross-binutils["`
cross-binutils
host: x86_64-pc-msys
target: aarch64-pc-msys
`"]:::NEW_DONE
cross-gcc-stage1["`
cross-gcc-stage1
host: x86_64-pc-msys
target: aarch64-pc-msys
`"]:::NEW_DONE
cross-gcc["`
cross-gcc
host: x86_64-pc-msys
target: aarch64-pc-msys
`"]:::NEW_WIP
windows-default-manifest["`
windows-default-manifest
host: aarch64-pc-msys
`"]:::DONE
msys2-runtime["`
msys2-runtime
host: aarch64-pc-msys
`"]:::WIP
bash["`
bash
host: aarch64-pc-msys
`"]:::TODO
git4win["`
Git for Windows
host: aarch64-pc-msys
`"]:::TODO
subgraph Bootstrap
direction TB
binutils --> gcc
end
subgraph MinGW
subgraph Stage 1
mingw-w64-cross-mingwarm64-headers --> mingw-w64-cross-mingwarm64-binutils
gcc --> mingw-w64-cross-mingwarm64-binutils
mingw-w64-cross-mingwarm64-headers --> mingw-w64-cross-mingwarm64-gcc-stage1
mingw-w64-cross-mingwarm64-binutils --> mingw-w64-cross-mingwarm64-gcc-stage1
gcc --> mingw-w64-cross-mingwarm64-gcc-stage1
end
subgraph Stage 2\nDependencies
mingw-w64-cross-mingwarm64-headers --> mingw-w64-cross-mingwarm64-crt
mingw-w64-cross-mingwarm64-gcc-stage1 --> mingw-w64-cross-mingwarm64-crt
mingw-w64-cross-mingwarm64-headers --> mingw-w64-cross-mingwarm64-winpthreads
mingw-w64-cross-mingwarm64-gcc-stage1 --> mingw-w64-cross-mingwarm64-winpthreads
mingw-w64-cross-mingwarm64-crt --> mingw-w64-cross-mingwarm64-winpthreads
mingw-w64-cross-mingwarm64-gcc-stage1 --> mingw-w64-cross-mingwarm64-windows-default-manifest
end
subgraph Stage 2
mingw-w64-cross-mingwarm64-headers --> mingw-w64-cross-mingwarm64-gcc
mingw-w64-cross-mingwarm64-crt --> mingw-w64-cross-mingwarm64-gcc
mingw-w64-cross-mingwarm64-winpthreads --> mingw-w64-cross-mingwarm64-gcc
mingw-w64-cross-mingwarm64-windows-default-manifest --> mingw-w64-cross-mingwarm64-gcc
mingw-w64-cross-mingwarm64-gcc-stage1 --> mingw-w64-cross-mingwarm64-gcc
gcc --> mingw-w64-cross-mingwarm64-gcc
end
subgraph MINGW Software
mingw-w64-cross-mingwarm64-gcc --> mingw-w64-cross-mingwarm64-zlib
end
end
subgraph MSYS2
subgraph Stage 1
gcc --> msys2-runtime-devel
gcc --> cross-binutils
msys2-w32api-headers --> cross-gcc-stage1
msys2-runtime-devel --> cross-gcc-stage1
cross-binutils --> cross-gcc-stage1
gcc --> cross-gcc-stage1
end
subgraph Stage 2 Dependencies
msys2-w32api-headers --> msys2-w32api-runtime
mingw-w64-cross-mingwarm64-gcc --> msys2-w32api-runtime
cross-gcc-stage1 --> windows-default-manifest
mingw-w64-cross-mingwarm64-gcc --> msys2-runtime
mingw-w64-cross-mingwarm64-zlib --> msys2-runtime
cross-gcc-stage1 --> msys2-runtime
end
subgraph Stage 2
cross-gcc-stage1 --> cross-gcc
msys2-w32api-runtime --> cross-gcc
msys2-runtime --> cross-gcc
windows-default-manifest --> cross-gcc
end
subgraph MSYS2 Application
cross-gcc --> bash
msys2-runtime --> bash
cross-gcc --> git4win
msys2-runtime --> git4win
bash --> git4win
end
end