From ab228690211b67777681e49049d20b938bb33559 Mon Sep 17 00:00:00 2001 From: magic-akari Date: Fri, 10 Oct 2025 22:27:09 +0800 Subject: [PATCH 1/2] ci(windows): refine MSVC/MINGW job step predicates Co-authored-by: rami3l --- .github/workflows/ci.yaml | 12 ++++++------ ci/actions-templates/windows-builds-template.yaml | 4 ++-- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 5d6bfbf88f..e8af73d38f 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -73,7 +73,7 @@ jobs: # Building `aws-lc-rs` for Windows MSVC depends on `NASM`. # See: https://aws.github.io/aws-lc-rs/requirements/windows.html uses: ilammy/setup-nasm@v1 - if: matrix.mingwdir == '' + if: contains(matrix.target, 'msvc') - name: Install mingw uses: bwoodsend/setup-winlibs-action@v1.16 if: matrix.mingwdir != '' @@ -81,7 +81,7 @@ jobs: architecture: ${{ matrix.arch }} - name: Verify mingw gcc installation shell: powershell - if: matrix.mingwdir != '' + if: matrix.gcc != '' run: | Get-Command ${{ matrix.gcc }} ${{ matrix.gcc }} --version @@ -245,7 +245,7 @@ jobs: # Building `aws-lc-rs` for Windows MSVC depends on `NASM`. # See: https://aws.github.io/aws-lc-rs/requirements/windows.html uses: ilammy/setup-nasm@v1 - if: matrix.mingwdir == '' + if: contains(matrix.target, 'msvc') - name: Install mingw uses: bwoodsend/setup-winlibs-action@v1.16 if: matrix.mingwdir != '' @@ -253,7 +253,7 @@ jobs: architecture: ${{ matrix.arch }} - name: Verify mingw gcc installation shell: powershell - if: matrix.mingwdir != '' + if: matrix.gcc != '' run: | Get-Command ${{ matrix.gcc }} ${{ matrix.gcc }} --version @@ -423,7 +423,7 @@ jobs: # Building `aws-lc-rs` for Windows MSVC depends on `NASM`. # See: https://aws.github.io/aws-lc-rs/requirements/windows.html uses: ilammy/setup-nasm@v1 - if: matrix.mingwdir == '' + if: contains(matrix.target, 'msvc') - name: Install mingw uses: bwoodsend/setup-winlibs-action@v1.16 if: matrix.mingwdir != '' @@ -431,7 +431,7 @@ jobs: architecture: ${{ matrix.arch }} - name: Verify mingw gcc installation shell: powershell - if: matrix.mingwdir != '' + if: matrix.gcc != '' run: | Get-Command ${{ matrix.gcc }} ${{ matrix.gcc }} --version diff --git a/ci/actions-templates/windows-builds-template.yaml b/ci/actions-templates/windows-builds-template.yaml index f2242a2ca4..ee688d952c 100644 --- a/ci/actions-templates/windows-builds-template.yaml +++ b/ci/actions-templates/windows-builds-template.yaml @@ -64,7 +64,7 @@ jobs: # skip-main skip-pr skip-stable # Building `aws-lc-rs` for Windows MSVC depends on `NASM`. # See: https://aws.github.io/aws-lc-rs/requirements/windows.html uses: ilammy/setup-nasm@v1 - if: matrix.mingwdir == '' + if: contains(matrix.target, 'msvc') - name: Install mingw uses: bwoodsend/setup-winlibs-action@v1.16 if: matrix.mingwdir != '' @@ -72,7 +72,7 @@ jobs: # skip-main skip-pr skip-stable architecture: ${{ matrix.arch }} - name: Verify mingw gcc installation shell: powershell - if: matrix.mingwdir != '' + if: matrix.gcc != '' run: | Get-Command ${{ matrix.gcc }} ${{ matrix.gcc }} --version From 470fce523817cdb5be303f41986c2be766193889 Mon Sep 17 00:00:00 2001 From: magic-akari Date: Fri, 10 Oct 2025 22:27:09 +0800 Subject: [PATCH 2/2] ci(windows): add support for aarch64-pc-windows-gnullvm target Co-authored-by: rami3l --- .github/workflows/ci.yaml | 81 +++++++++++++++++++ .../windows-builds-template.yaml | 27 +++++++ ci/cloudfront-invalidation.txt | 2 + doc/user-guide/src/installation/other.md | 2 + rustup-init.sh | 4 + 5 files changed, 116 insertions(+) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index e8af73d38f..127e77df02 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -40,6 +40,7 @@ jobs: - x86_64-pc-windows-msvc - aarch64-pc-windows-msvc - x86_64-pc-windows-gnu + - aarch64-pc-windows-gnullvm include: - target: x86_64-pc-windows-msvc run_tests: YES @@ -52,6 +53,11 @@ jobs: rustup_arch: aarch64 os: windows-11-arm run_tests: YES + - target: aarch64-pc-windows-gnullvm + rustup_arch: aarch64 + os: windows-11-arm + llvm_mingw_version: 20260616 + gcc: aarch64-w64-mingw32-clang steps: - uses: actions/checkout@v6 # v2 defaults to a shallow checkout, but we need at least to the previous tag @@ -79,6 +85,27 @@ jobs: if: matrix.mingwdir != '' with: architecture: ${{ matrix.arch }} + - name: Install llvm-mingw + shell: powershell + if: matrix.llvm_mingw_version != '' + run: | + $version = "${{ matrix.llvm_mingw_version }}" + $archive = "llvm-mingw-$version-ucrt-${{ matrix.rustup_arch }}.zip" + $url = "https://github.com/mstorsjo/llvm-mingw/releases/download/$version/$archive" + $destination = Join-Path $env:RUNNER_TEMP $archive + $installDir = Join-Path $env:RUNNER_TEMP "llvm-mingw-$version-ucrt-${{ matrix.rustup_arch }}" + + Write-Host "Downloading $archive with aria2c" + & aria2c --max-connection-per-server=8 --split=8 --dir="$env:RUNNER_TEMP" --out="$archive" "$url" + + Write-Host "Extracting $archive with 7-Zip" + & 7z x "$destination" "-o$env:RUNNER_TEMP" -y + + $targetEnvUpper = "${{ matrix.target }}".Replace('-', '_').ToUpperInvariant() + + "$installDir\bin" | Out-File -Append -FilePath $env:GITHUB_PATH -Encoding utf8 + "CC_${targetEnvUpper}=${{ matrix.gcc }}" | Out-File -Append -FilePath $env:GITHUB_ENV -Encoding utf8 + "CARGO_TARGET_${targetEnvUpper}_LINKER=${{ matrix.gcc }}" | Out-File -Append -FilePath $env:GITHUB_ENV -Encoding utf8 - name: Verify mingw gcc installation shell: powershell if: matrix.gcc != '' @@ -212,6 +239,7 @@ jobs: - x86_64-pc-windows-msvc - aarch64-pc-windows-msvc - x86_64-pc-windows-gnu + - aarch64-pc-windows-gnullvm include: - target: x86_64-pc-windows-msvc run_tests: YES @@ -224,6 +252,11 @@ jobs: rustup_arch: aarch64 os: windows-11-arm run_tests: YES + - target: aarch64-pc-windows-gnullvm + rustup_arch: aarch64 + os: windows-11-arm + llvm_mingw_version: 20260616 + gcc: aarch64-w64-mingw32-clang steps: - uses: actions/checkout@v6 # v2 defaults to a shallow checkout, but we need at least to the previous tag @@ -251,6 +284,27 @@ jobs: if: matrix.mingwdir != '' with: architecture: ${{ matrix.arch }} + - name: Install llvm-mingw + shell: powershell + if: matrix.llvm_mingw_version != '' + run: | + $version = "${{ matrix.llvm_mingw_version }}" + $archive = "llvm-mingw-$version-ucrt-${{ matrix.rustup_arch }}.zip" + $url = "https://github.com/mstorsjo/llvm-mingw/releases/download/$version/$archive" + $destination = Join-Path $env:RUNNER_TEMP $archive + $installDir = Join-Path $env:RUNNER_TEMP "llvm-mingw-$version-ucrt-${{ matrix.rustup_arch }}" + + Write-Host "Downloading $archive with aria2c" + & aria2c --max-connection-per-server=8 --split=8 --dir="$env:RUNNER_TEMP" --out="$archive" "$url" + + Write-Host "Extracting $archive with 7-Zip" + & 7z x "$destination" "-o$env:RUNNER_TEMP" -y + + $targetEnvUpper = "${{ matrix.target }}".Replace('-', '_').ToUpperInvariant() + + "$installDir\bin" | Out-File -Append -FilePath $env:GITHUB_PATH -Encoding utf8 + "CC_${targetEnvUpper}=${{ matrix.gcc }}" | Out-File -Append -FilePath $env:GITHUB_ENV -Encoding utf8 + "CARGO_TARGET_${targetEnvUpper}_LINKER=${{ matrix.gcc }}" | Out-File -Append -FilePath $env:GITHUB_ENV -Encoding utf8 - name: Verify mingw gcc installation shell: powershell if: matrix.gcc != '' @@ -386,6 +440,7 @@ jobs: - aarch64-pc-windows-msvc - x86_64-pc-windows-gnu - i686-pc-windows-gnu # skip-pr skip-main + - aarch64-pc-windows-gnullvm include: - target: x86_64-pc-windows-msvc run_tests: YES @@ -398,6 +453,11 @@ jobs: rustup_arch: aarch64 os: windows-11-arm run_tests: YES + - target: aarch64-pc-windows-gnullvm + rustup_arch: aarch64 + os: windows-11-arm + llvm_mingw_version: 20260616 + gcc: aarch64-w64-mingw32-clang - target: i686-pc-windows-gnu # skip-pr skip-main arch: i686 # skip-pr skip-main mingwdir: mingw32 # skip-pr skip-main @@ -429,6 +489,27 @@ jobs: if: matrix.mingwdir != '' with: architecture: ${{ matrix.arch }} + - name: Install llvm-mingw + shell: powershell + if: matrix.llvm_mingw_version != '' + run: | + $version = "${{ matrix.llvm_mingw_version }}" + $archive = "llvm-mingw-$version-ucrt-${{ matrix.rustup_arch }}.zip" + $url = "https://github.com/mstorsjo/llvm-mingw/releases/download/$version/$archive" + $destination = Join-Path $env:RUNNER_TEMP $archive + $installDir = Join-Path $env:RUNNER_TEMP "llvm-mingw-$version-ucrt-${{ matrix.rustup_arch }}" + + Write-Host "Downloading $archive with aria2c" + & aria2c --max-connection-per-server=8 --split=8 --dir="$env:RUNNER_TEMP" --out="$archive" "$url" + + Write-Host "Extracting $archive with 7-Zip" + & 7z x "$destination" "-o$env:RUNNER_TEMP" -y + + $targetEnvUpper = "${{ matrix.target }}".Replace('-', '_').ToUpperInvariant() + + "$installDir\bin" | Out-File -Append -FilePath $env:GITHUB_PATH -Encoding utf8 + "CC_${targetEnvUpper}=${{ matrix.gcc }}" | Out-File -Append -FilePath $env:GITHUB_ENV -Encoding utf8 + "CARGO_TARGET_${targetEnvUpper}_LINKER=${{ matrix.gcc }}" | Out-File -Append -FilePath $env:GITHUB_ENV -Encoding utf8 - name: Verify mingw gcc installation shell: powershell if: matrix.gcc != '' diff --git a/ci/actions-templates/windows-builds-template.yaml b/ci/actions-templates/windows-builds-template.yaml index ee688d952c..655136b812 100644 --- a/ci/actions-templates/windows-builds-template.yaml +++ b/ci/actions-templates/windows-builds-template.yaml @@ -27,6 +27,7 @@ jobs: # skip-main skip-pr skip-stable - aarch64-pc-windows-msvc - x86_64-pc-windows-gnu - i686-pc-windows-gnu # skip-pr skip-main + - aarch64-pc-windows-gnullvm include: - target: x86_64-pc-windows-msvc run_tests: YES @@ -39,6 +40,11 @@ jobs: # skip-main skip-pr skip-stable rustup_arch: aarch64 os: windows-11-arm run_tests: YES + - target: aarch64-pc-windows-gnullvm + rustup_arch: aarch64 + os: windows-11-arm + llvm_mingw_version: 20260616 + gcc: aarch64-w64-mingw32-clang - target: i686-pc-windows-gnu # skip-pr skip-main arch: i686 # skip-pr skip-main mingwdir: mingw32 # skip-pr skip-main @@ -70,6 +76,27 @@ jobs: # skip-main skip-pr skip-stable if: matrix.mingwdir != '' with: architecture: ${{ matrix.arch }} + - name: Install llvm-mingw + shell: powershell + if: matrix.llvm_mingw_version != '' + run: | + $version = "${{ matrix.llvm_mingw_version }}" + $archive = "llvm-mingw-$version-ucrt-${{ matrix.rustup_arch }}.zip" + $url = "https://github.com/mstorsjo/llvm-mingw/releases/download/$version/$archive" + $destination = Join-Path $env:RUNNER_TEMP $archive + $installDir = Join-Path $env:RUNNER_TEMP "llvm-mingw-$version-ucrt-${{ matrix.rustup_arch }}" + + Write-Host "Downloading $archive with aria2c" + & aria2c --max-connection-per-server=8 --split=8 --dir="$env:RUNNER_TEMP" --out="$archive" "$url" + + Write-Host "Extracting $archive with 7-Zip" + & 7z x "$destination" "-o$env:RUNNER_TEMP" -y + + $targetEnvUpper = "${{ matrix.target }}".Replace('-', '_').ToUpperInvariant() + + "$installDir\bin" | Out-File -Append -FilePath $env:GITHUB_PATH -Encoding utf8 + "CC_${targetEnvUpper}=${{ matrix.gcc }}" | Out-File -Append -FilePath $env:GITHUB_ENV -Encoding utf8 + "CARGO_TARGET_${targetEnvUpper}_LINKER=${{ matrix.gcc }}" | Out-File -Append -FilePath $env:GITHUB_ENV -Encoding utf8 - name: Verify mingw gcc installation shell: powershell if: matrix.gcc != '' diff --git a/ci/cloudfront-invalidation.txt b/ci/cloudfront-invalidation.txt index 8b17245f1d..9b86ac321c 100644 --- a/ci/cloudfront-invalidation.txt +++ b/ci/cloudfront-invalidation.txt @@ -5,6 +5,8 @@ rustup/dist/aarch64-apple-darwin/rustup-init rustup/dist/aarch64-apple-darwin/rustup-init.sha256 rustup/dist/aarch64-linux-android/rustup-init rustup/dist/aarch64-linux-android/rustup-init.sha256 +rustup/dist/aarch64-pc-windows-gnullvm/rustup-init.exe +rustup/dist/aarch64-pc-windows-gnullvm/rustup-init.exe.sha256 rustup/dist/aarch64-pc-windows-msvc/rustup-init.exe rustup/dist/aarch64-pc-windows-msvc/rustup-init.exe.sha256 rustup/dist/aarch64-unknown-linux-gnu/rustup-init diff --git a/doc/user-guide/src/installation/other.md b/doc/user-guide/src/installation/other.md index be2a63efb9..22ac13df73 100644 --- a/doc/user-guide/src/installation/other.md +++ b/doc/user-guide/src/installation/other.md @@ -111,6 +111,8 @@ You can manually download `rustup-init` for a given target from - [sha256 file](https://static.rust-lang.org/rustup/dist/aarch64-apple-darwin/rustup-init.sha256) - [aarch64-linux-android](https://static.rust-lang.org/rustup/dist/aarch64-linux-android/rustup-init) - [sha256 file](https://static.rust-lang.org/rustup/dist/aarch64-linux-android/rustup-init.sha256) +- [aarch64-pc-windows-gnullvm](https://static.rust-lang.org/rustup/dist/aarch64-pc-windows-gnullvm/rustup-init.exe) + - [sha256 file](https://static.rust-lang.org/rustup/dist/aarch64-pc-windows-gnullvm/rustup-init.exe.sha256) - [aarch64-pc-windows-msvc](https://static.rust-lang.org/rustup/dist/aarch64-pc-windows-msvc/rustup-init.exe) - [sha256 file](https://static.rust-lang.org/rustup/dist/aarch64-pc-windows-msvc/rustup-init.exe.sha256) - [aarch64-unknown-linux-gnu](https://static.rust-lang.org/rustup/dist/aarch64-unknown-linux-gnu/rustup-init) diff --git a/rustup-init.sh b/rustup-init.sh index cff65bf345..d1e43f5378 100755 --- a/rustup-init.sh +++ b/rustup-init.sh @@ -489,6 +489,10 @@ get_architecture() { aarch64 | arm64) _cputype=aarch64 + # Windows aarch64 uses gnullvm instead of gnu + if [ "$_ostype" = "pc-windows-gnu" ]; then + _ostype=pc-windows-gnullvm + fi ;; x86_64 | x86-64 | x64 | amd64)