Skip to content

Commit

Permalink
[CI] Use MSYS2 Crystal package for mingw-w64 workflow
Browse files Browse the repository at this point in the history
  • Loading branch information
HertzDevil committed Feb 11, 2025
1 parent ade1e6f commit beb1c40
Showing 1 changed file with 39 additions and 87 deletions.
126 changes: 39 additions & 87 deletions .github/workflows/mingw-w64.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,37 +12,8 @@ env:
SPEC_SPLIT_DOTS: 160

jobs:
x86_64-mingw-w64-cross-compile:
runs-on: ubuntu-24.04
steps:
- name: Download Crystal source
uses: actions/checkout@v4

- name: Install LLVM
run: |
_llvm_major=$(wget -qO- https://raw.githubusercontent.com/msys2/MINGW-packages/refs/heads/master/mingw-w64-llvm/PKGBUILD | grep '_version=' | sed -E 's/_version=([0-9]+).*/\1/')
sudo apt remove 'llvm-*' 'libllvm*'
wget -qO- https://apt.llvm.org/llvm-snapshot.gpg.key | sudo tee /etc/apt/trusted.gpg.d/apt.llvm.org.asc
sudo apt-add-repository -y deb http://apt.llvm.org/noble/ llvm-toolchain-noble-${_llvm_major} main
sudo apt install -y llvm-${_llvm_major}-dev
- name: Install Crystal
uses: crystal-lang/install-crystal@v1
with:
crystal: "1.15.1"

- name: Cross-compile Crystal
run: make && make -B target=x86_64-windows-gnu release=1 interpreter=1

- name: Upload crystal.obj
uses: actions/upload-artifact@v4
with:
name: x86_64-mingw-w64-crystal-obj
path: .build/crystal.obj

x86_64-mingw-w64-link:
x86_64-mingw-w64-build:
runs-on: windows-2022
needs: [x86_64-mingw-w64-cross-compile]
steps:
- name: Setup MSYS2
id: msys2
Expand All @@ -51,16 +22,10 @@ jobs:
msystem: UCRT64
update: true
install: >-
git
make
mingw-w64-ucrt-x86_64-pkgconf
mingw-w64-ucrt-x86_64-cc
mingw-w64-ucrt-x86_64-gc
mingw-w64-ucrt-x86_64-pcre2
mingw-w64-ucrt-x86_64-libiconv
mingw-w64-ucrt-x86_64-zlib
mingw-w64-ucrt-x86_64-llvm
mingw-w64-ucrt-x86_64-libffi
mingw-w64-ucrt-x86_64-libyaml
mingw-w64-ucrt-x86_64-crystal
- name: Disable CRLF line ending substitution
run: |
Expand All @@ -69,30 +34,19 @@ jobs:
- name: Download Crystal source
uses: actions/checkout@v4

- name: Download crystal.obj
uses: actions/download-artifact@v4
with:
name: x86_64-mingw-w64-crystal-obj

- name: Link Crystal executable
- name: Build Crystal
shell: msys2 {0}
run: |
mkdir .build
cc crystal.obj -o .build/crystal.exe -municode \
$(pkg-config bdw-gc libpcre2-8 iconv zlib libffi --libs) \
$(llvm-config --libs --system-libs --ldflags) \
-lole32 -lWS2_32 -lntdll -Wl,--stack,0x800000
run: make crystal interpreter=1 release=1

- name: Package Crystal
shell: msys2 {0}
run: |
make install install_dlls deref_symlinks=1 PREFIX="$(pwd)/crystal"
run: make install install_dlls deref_symlinks=1 PREFIX="$(pwd)/crystal"

- name: Download shards release
uses: actions/checkout@v4
with:
repository: crystal-lang/shards
ref: v0.19.0
ref: v0.19.1
path: shards

- name: Build shards release
Expand All @@ -102,18 +56,20 @@ jobs:

- name: Package Shards
shell: msys2 {0}
working-directory: ./shards
run: |
make install PREFIX="$(pwd)/../crystal"
# FIXME: remove after crystal-lang/shards#668
ldd bin/shards.exe | grep -iv ' => /c/windows/system32' | sed 's/.* => //; s/ (.*//' | xargs -t -i /usr/bin/install -m 0755 '{}' "$(pwd)/../crystal/bin/"
- name: Upload Crystal executable
uses: actions/upload-artifact@v4
with:
name: x86_64-mingw-w64-crystal
path: crystal

x86_64-mingw-w64-test:
x86_64-mingw-w64-test-stdlib:
runs-on: windows-2022
needs: [x86_64-mingw-w64-link]
steps:
- name: Setup MSYS2
id: msys2
Expand All @@ -125,17 +81,7 @@ jobs:
git
make
mingw-w64-ucrt-x86_64-pkgconf
mingw-w64-ucrt-x86_64-cc
mingw-w64-ucrt-x86_64-gc
mingw-w64-ucrt-x86_64-pcre2
mingw-w64-ucrt-x86_64-libiconv
mingw-w64-ucrt-x86_64-zlib
mingw-w64-ucrt-x86_64-llvm
mingw-w64-ucrt-x86_64-gmp
mingw-w64-ucrt-x86_64-libxml2
mingw-w64-ucrt-x86_64-libyaml
mingw-w64-ucrt-x86_64-openssl
mingw-w64-ucrt-x86_64-libffi
mingw-w64-ucrt-x86_64-crystal
- name: Disable CRLF line ending substitution
run: |
Expand All @@ -144,36 +90,42 @@ jobs:
- name: Download Crystal source
uses: actions/checkout@v4

- name: Download Crystal executable
uses: actions/download-artifact@v4
with:
name: x86_64-mingw-w64-crystal
path: crystal

- name: Run stdlib specs
shell: msys2 {0}
run: |
export PATH="$(pwd)/crystal/bin:$PATH"
export CRYSTAL_SPEC_COMPILER_BIN="$(pwd)/crystal/bin/crystal.exe"
export CRYSTAL_SPEC_COMPILER_BIN="$(which crystal.exe)"
make std_spec
- name: Run compiler specs
- name: Run primitives specs
shell: msys2 {0}
run: |
export PATH="$(pwd)/crystal/bin:$PATH"
export CRYSTAL_SPEC_COMPILER_BIN="$(pwd)/crystal/bin/crystal.exe"
make compiler_spec
export CRYSTAL_SPEC_COMPILER_BIN="$(which crystal.exe)"
make primitives_spec
- name: Run interpreter specs
shell: msys2 {0}
x86_64-mingw-w64-test-compiler:
runs-on: windows-2022
steps:
- name: Setup MSYS2
id: msys2
uses: msys2/setup-msys2@d44ca8e88d8b43d56cf5670f91747359d5537f97 # v2.26.0
with:
msystem: UCRT64
update: true
install: >-
git
make
mingw-w64-ucrt-x86_64-pkgconf
mingw-w64-ucrt-x86_64-crystal
- name: Disable CRLF line ending substitution
run: |
export PATH="$(pwd)/crystal/bin:$PATH"
export CRYSTAL_SPEC_COMPILER_BIN="$(pwd)/crystal/bin/crystal.exe"
make interpreter_spec
git config --global core.autocrlf false
- name: Run primitives specs
- name: Download Crystal source
uses: actions/checkout@v4

- name: Run compiler specs
shell: msys2 {0}
run: |
export PATH="$(pwd)/crystal/bin:$PATH"
export CRYSTAL_SPEC_COMPILER_BIN="$(pwd)/crystal/bin/crystal.exe"
make -o .build/crystal.exe primitives_spec # we know the compiler is fresh; do not rebuild it here
export CRYSTAL_SPEC_COMPILER_BIN="$(which crystal.exe)"
make compiler_spec interpreter=1

0 comments on commit beb1c40

Please sign in to comment.