Skip to content

Commit 56a490c

Browse files
committed
Add new platform aarch64-mingw-ucrt aka Windows on ARM
It fits to the latest RubyInstaller release: https://rubyinstaller.org/2025/01/19/rubyinstaller-3.4.1-2-released.html The llvm binaries are taken from https://github.com/mstorsjo/llvm-mingw which looks pretty well maintained. There's also a "Known issues" section, which lists some helpful instructions for porting. Fixes #148
1 parent c4e7dc3 commit 56a490c

File tree

7 files changed

+20
-2
lines changed

7 files changed

+20
-2
lines changed

.github/workflows/ci.yml

+1
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ jobs:
4848
- platform: aarch64-linux-gnu
4949
alias: aarch64-linux
5050
- platform: aarch64-linux-musl
51+
- platform: aarch64-mingw-ucrt
5152
- platform: arm-linux-gnu
5253
alias: arm-linux
5354
- platform: arm-linux-musl

.github/workflows/publish-images.yml

+1
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ jobs:
1515
platform:
1616
- aarch64-linux-gnu
1717
- aarch64-linux-musl
18+
- aarch64-mingw-ucrt
1819
- arm-linux-gnu
1920
- arm-linux-musl
2021
- arm64-darwin

.github/workflows/release-images.yml

+1
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ jobs:
2222
platform:
2323
- aarch64-linux-gnu
2424
- aarch64-linux-musl
25+
- aarch64-mingw-ucrt
2526
- arm-linux-gnu
2627
- arm-linux-musl
2728
- arm64-darwin

Dockerfile.mri.erb

+13-2
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,13 @@ COPY --from=larskanis/mingw64-ucrt:20.04 \
2424
/debs/
2525
RUN dpkg -i /debs/*.deb
2626

27+
<% elsif platform =~ /aarch64-mingw-ucrt/ %>
28+
RUN wget https://github.com/mstorsjo/llvm-mingw/releases/download/20250114/llvm-mingw-20250114-ucrt-ubuntu-20.04-<%= RUBY_PLATFORM[/^\w+/] %>.tar.xz && \
29+
tar xf llvm-mingw*.tar.xz && \
30+
export MINGW_PATH=`ls -d llvm-mingw-*/` && \
31+
echo "export PATH=`pwd`/$MINGW_PATH/bin:\$PATH" >> /etc/rubybashrc && \
32+
rm -r $MINGW_PATH/bin/i686-w64* $MINGW_PATH/bin/armv7-w64* $MINGW_PATH/bin/x86_64-w64* $MINGW_PATH/i686-w64* $MINGW_PATH/armv7-w64* $MINGW_PATH/x86_64-w64*
33+
2734
<% elsif platform =~ /linux-musl/ %>
2835
COPY build/mk_musl_cross.sh /tmp
2936
RUN /tmp/mk_musl_cross.sh <%= target %>
@@ -117,6 +124,10 @@ xrubies_build_plan = if platform =~ /x64-mingw-ucrt/
117124
# Rubyinstaller-3.1+ is platform x64-mingw-ucrt
118125
["3.4.1:3.3.5:3.2.6:3.1.6", "3.1.6"],
119126
]
127+
elsif platform =~ /aarch64-mingw-ucrt/
128+
[
129+
["3.4.1", "3.1.6"],
130+
]
120131
elsif platform =~ /x64-mingw32/
121132
[
122133
# Rubyinstaller prior to 3.1 is platform x64-mingw32
@@ -130,7 +141,7 @@ else
130141
]
131142
end
132143

133-
strip = '-s' if platform !~ /darwin/
144+
strip = '-s' if platform !~ /darwin|aarch64-mingw/
134145

135146
xrubies_build_plan.each do |xrubies, bootstrap_ruby_version| %>
136147
RUN bash -c " \
@@ -186,7 +197,7 @@ RUN find /usr/local/rake-compiler/ruby/*/*/lib/ruby -name rbconfig.rb | while re
186197
##
187198
USER root
188199
189-
<% if platform =~ /mingw/ %>
200+
<% if platform =~ /(x64|x86)-mingw/ %>
190201
# Install wrappers for strip commands as a workaround for "Protocol error" in boot2docker.
191202
COPY build/strip_wrapper_vbox /root/
192203
RUN mv /usr/bin/<%= target %>-strip /usr/bin/<%= target %>-strip.bin && \

README.md

+2
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ The following platforms are supported for cross-compilation by rake-compiler-doc
1616

1717
- `aarch64-linux` and `aarch64-linux-gnu`
1818
- `aarch64-linux-musl`
19+
- `aarch64-mingw-ucrt`
1920
- `arm-linux` and `arm-linux-gnu`
2021
- `arm-linux-musl`
2122
- `arm64-darwin`
@@ -193,6 +194,7 @@ This can be done like this:
193194
PLATFORMS = %w[
194195
aarch64-linux-gnu
195196
aarch64-linux-musl
197+
aarch64-mingw-ucrt
196198
arm-linux-gnu
197199
arm-linux-musl
198200
arm64-darwin

Rakefile

+1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ platforms = [
1212
# tuple is [platform, target]
1313
["aarch64-linux-gnu", "aarch64-linux-gnu"],
1414
["aarch64-linux-musl", "aarch64-linux-musl"],
15+
["aarch64-mingw-ucrt", "aarch64-w64-mingw32"],
1516
["arm-linux-gnu", "arm-linux-gnueabihf"],
1617
["arm-linux-musl", "arm-linux-musleabihf"],
1718
["arm64-darwin", "aarch64-apple-darwin"],

test/rcd_test/Rakefile

+1
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ else
2222
aarch64-linux
2323
aarch64-linux-gnu
2424
aarch64-linux-musl
25+
aarch64-mingw-ucrt
2526
arm-linux
2627
arm-linux-gnu
2728
arm-linux-musl

0 commit comments

Comments
 (0)