Skip to content

Commit de444c4

Browse files
committed
ci(vfs): install the GCC-compatible Rust target before building
The Windows runners used by `vfs-functional-tests.yml` ship `rustup` plus a `*-pc-windows-msvc` default toolchain (see https://github.com/actions/runner-images/blob/main/images/windows/Windows2022-Readme.md and https://github.com/actions/partner-runner-images/blob/main/images/arm-windows-11-image.md), but no precompiled `std` for `*-pc-windows-gnu` or `*-pc-windows-gnullvm`. With the Makefile now picking a GCC-compatible target triple based on `$(MSYSTEM)`, the build step needs that precompiled `std` to be installed before invoking `make`, otherwise `cargo build --target <triple>` fails to find a usable `std` for the chosen target. Add a step between the SDK setup and the `make` invocation that selects the matching triple from `$MSYSTEM` (which `git-for-windows/setup-git-for-windows-sdk` exports for every subsequent step) and runs `rustup target add` for it. The mapping mirrors what `config.mak.uname` derives from `$(MSYSTEM)` and `$(HOST_CPU)`, just enumerated explicitly here since CI has direct knowledge of which MSYS2 subsystems the matrix actually exercises (`CLANGARM64` for the ARM64 runner, `MINGW64` for the x86_64 runner). For a `staticlib` crate-type `cargo build` does not invoke an external linker, so no further toolchain components (e.g. the `gnullvm` LLVM linker) need to be installed; `rustup target add` alone is sufficient. Assisted-by: Claude Opus 4.7 Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
1 parent e96535a commit de444c4

1 file changed

Lines changed: 21 additions & 0 deletions

File tree

.github/workflows/vfs-functional-tests.yml

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,27 @@ jobs:
5050
exec $cmd "$@"
5151
EOF
5252
53+
- name: Install GCC-compatible Rust target
54+
shell: bash
55+
run: |
56+
# The hosted Windows runners ship a rustup-managed Rust whose
57+
# default toolchain targets the MSVC ABI. That produces a
58+
# `gitcore.lib` which the MinGW GCC used by the rest of the
59+
# build cannot link. Install the precompiled `std` for a
60+
# GCC-compatible target triple matching the MSYS2 subsystem;
61+
# the Makefile selects the same triple via $(MSYSTEM) and
62+
# passes it to `cargo build --target`.
63+
case "$MSYSTEM" in
64+
CLANGARM64) target=aarch64-pc-windows-gnullvm ;;
65+
CLANG64) target=x86_64-pc-windows-gnullvm ;;
66+
CLANG32) target=i686-pc-windows-gnullvm ;;
67+
UCRT64) target=x86_64-pc-windows-gnullvm ;;
68+
MINGW64) target=x86_64-pc-windows-gnu ;;
69+
MINGW32) target=i686-pc-windows-gnu ;;
70+
*) echo "::error::Unsupported MSYSTEM: $MSYSTEM"; exit 1 ;;
71+
esac
72+
rustup target add "$target"
73+
5374
- name: Build and install Git
5475
shell: bash
5576
env:

0 commit comments

Comments
 (0)