https://github.com/FranciscoPombal created 
https://github.com/llvm/llvm-project/pull/202000

The Windows 11 ARM runner doesn't have zstd installed by default.
This installs zstd from source through vcpkg to address this.

Fixes https://github.com/llvm/llvm-project/pull/201518.

>From 836a0ec1222833767909373fbfc094eef246b1db Mon Sep 17 00:00:00 2001
From: Keith Smiley <[email protected]>
Date: Wed, 3 Jun 2026 15:04:02 -0700
Subject: [PATCH 1/2] [release] Add zstd archives to github releases (#186526)

This leaves the previous xz files but also creates zstd archives of the
binaries. This provides significantly reduced download sizes. We could
integrate this with cpack but we don't have control over the compression
level in that until version 4.3 which isn't even released yet.

Fixes https://github.com/llvm/llvm-project/issues/164537

(cherry picked from commit 4d23acde98acb72e103d8c999edf752a9317aced)
---
 .github/workflows/release-binaries.yml      | 14 ++++++++++-
 llvm/utils/release/github-upload-release.py | 26 +++++++++++++++------
 2 files changed, 32 insertions(+), 8 deletions(-)

diff --git a/.github/workflows/release-binaries.yml 
b/.github/workflows/release-binaries.yml
index 1de66bdfe6f02..90aec02bc760f 100644
--- a/.github/workflows/release-binaries.yml
+++ b/.github/workflows/release-binaries.yml
@@ -60,6 +60,7 @@ jobs:
       build-flang: ${{ steps.vars.outputs.build-flang }}
       release-binary-basename: ${{ steps.vars.outputs.release-binary-basename 
}}
       release-binary-filename: ${{ steps.vars.outputs.release-binary-filename 
}}
+      release-binary-filename-zstd: ${{ 
steps.vars.outputs.release-binary-filename-zstd }}
       build-runs-on: ${{ steps.vars.outputs.build-runs-on }}
       test-runs-on: ${{ steps.vars.outputs.build-runs-on }}
       attestation-name: ${{ steps.vars.outputs.attestation-name }}
@@ -151,6 +152,7 @@ jobs:
         fi
         echo "release-binary-basename=$release_binary_basename" >> 
$GITHUB_OUTPUT
         echo "release-binary-filename=$release_binary_basename.tar.xz" >> 
$GITHUB_OUTPUT
+        echo "release-binary-filename-zstd=$release_binary_basename.tar.zst" 
>> $GITHUB_OUTPUT
 
         target="$RUNNER_OS-$RUNNER_ARCH"
 
@@ -292,6 +294,14 @@ jobs:
         mv $tarball $env:GITHUB_WORKSPACE
         echo "windows-installer-filename=$(Split-Path -Path $installer -Leaf)" 
>> $env:GITHUB_OUTPUT
 
+    - name: Create zstd compressed tarball
+      shell: bash
+      env:
+        RELEASE_BINARY_FILENAME: ${{ 
needs.prepare.outputs.release-binary-filename }}
+        RELEASE_BINARY_FILENAME_ZSTD: ${{ 
needs.prepare.outputs.release-binary-filename-zstd }}
+      run: |
+        xz -dc "$RELEASE_BINARY_FILENAME" | zstd --ultra -22 -T0 -o 
"$RELEASE_BINARY_FILENAME_ZSTD"
+
     - name: Generate sha256 digest for binaries
       id: digest
       shell: bash
@@ -299,6 +309,7 @@ jobs:
         RELEASE_BINARY_FILENAME: ${{ 
needs.prepare.outputs.release-binary-filename }}
         # This will be empty on non-Windows builds.
         WINDOWS_INSTALLER_FILENAME: ${{ 
steps.build-windows.outputs.windows-installer-filename }}
+        RELEASE_BINARY_FILENAME_ZSTD: ${{ 
needs.prepare.outputs.release-binary-filename-zstd }}
       run: |
           if [ "$RUNNER_OS" = "macOS" ]; then
             # Mac runners don't have sha256sum.
@@ -306,7 +317,7 @@ jobs:
           else
             sha256sum="sha256sum"
           fi
-          echo "digest=$(cat $WINDOWS_INSTALLER_FILENAME 
$RELEASE_BINARY_FILENAME | $sha256sum | cut -d ' ' -f 1)" >> $GITHUB_OUTPUT
+          echo "digest=$(cat $WINDOWS_INSTALLER_FILENAME 
$RELEASE_BINARY_FILENAME $RELEASE_BINARY_FILENAME_ZSTD | $sha256sum | cut -d ' 
' -f 1)" >> $GITHUB_OUTPUT
 
     - uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # 
v6.0.0
       id: artifact-upload
@@ -317,6 +328,7 @@ jobs:
         # The steps.build-windows.* variables will be empty on Linux/MacOS.
         path: |
           ${{ needs.prepare.outputs.release-binary-filename }}
+          ${{ needs.prepare.outputs.release-binary-filename-zstd }}
           ${{ steps.build-windows.outputs.windows-installer-filename }}
 
     - name: Run Tests
diff --git a/llvm/utils/release/github-upload-release.py 
b/llvm/utils/release/github-upload-release.py
index 3eb592bb27462..ea1a1e53d9901 100755
--- a/llvm/utils/release/github-upload-release.py
+++ b/llvm/utils/release/github-upload-release.py
@@ -55,18 +55,22 @@
     (
         (
             "LINUX_X86",
-            "* [Linux x86_64]({0}) ([signature]({1}))",
+            "* Linux x86_64: [xz archive]({0}) ([signature]({1})), [zstd 
archive]({2}) ([signature]({3}))",
             (
                 "LLVM-{release}-Linux-X64.tar.xz",
                 "LLVM-{release}-Linux-X64.tar.xz.jsonl",
+                "LLVM-{release}-Linux-X64.tar.zst",
+                "LLVM-{release}-Linux-X64.tar.zst.jsonl",
             ),
         ),
         (
             "LINUX_ARM64",
-            "* [Linux Arm64]({0}) ([signature]({1}))",
+            "* Linux Arm64: [xz archive]({0}) ([signature]({1})), [zstd 
archive]({2}) ([signature]({3}))",
             (
                 "LLVM-{release}-Linux-ARM64.tar.xz",
                 "LLVM-{release}-Linux-ARM64.tar.xz.jsonl",
+                "LLVM-{release}-Linux-ARM64.tar.zst",
+                "LLVM-{release}-Linux-ARM64.tar.zst.jsonl",
             ),
         ),
         (
@@ -81,30 +85,36 @@
     (
         (
             "MACOS_ARM64",
-            "* [macOS Apple Silicon]({0}) (ARM64) ([signature]({1}))",
+            "* macOS Apple Silicon (ARM64): [xz archive]({0}) 
([signature]({1})), [zstd archive]({2}) ([signature]({3}))",
             (
                 "LLVM-{release}-macOS-ARM64.tar.xz",
                 "LLVM-{release}-macOS-ARM64.tar.xz.jsonl",
+                "LLVM-{release}-macOS-ARM64.tar.zst",
+                "LLVM-{release}-macOS-ARM64.tar.zst.jsonl",
             ),
         ),
         (
             "MACOS_X86",
-            "* [macOS Intel]({0}) (x86-64) ([signature]({1}))",
+            "* macOS Intel (x86-64): [xz archive]({0}) ([signature]({1})), 
[zstd archive]({2}) ([signature]({3}))",
             (
                 "LLVM-{release}-macOS-X64.tar.xz",
                 "LLVM-{release}-macOS-X64.tar.xz.jsonl",
+                "LLVM-{release}-macOS-X64.tar.zst",
+                "LLVM-{release}-macOS-X64.tar.zst.jsonl",
             ),
         ),
     ),
     (
         (
             "WINDOWS_X64",
-            "* Windows x64 (64-bit): [installer]({0}) ([signature]({1})), 
[archive]({2}) ([signature]({3}))",
+            "* Windows x64 (64-bit): [installer]({0}) ([signature]({1})), [xz 
archive]({2}) ([signature]({3})), [zstd archive]({4}) ([signature]({5}))",
             (
                 "LLVM-{release}-win64.exe",
                 "LLVM-{release}-win64.exe.jsonl",
                 "clang+llvm-{release}-x86_64-pc-windows-msvc.tar.xz",
                 "clang+llvm-{release}-x86_64-pc-windows-msvc.tar.xz.jsonl",
+                "clang+llvm-{release}-x86_64-pc-windows-msvc.tar.zst",
+                "clang+llvm-{release}-x86_64-pc-windows-msvc.tar.zst.jsonl",
             ),
         ),
         (
@@ -114,12 +124,14 @@
         ),
         (
             "WINDOWS_ARM64",
-            "* Windows on Arm (ARM64): [installer]({0}) ([signature]({1})), 
[archive]({2}) ([signature]({3}))",
+            "* Windows on Arm (ARM64): [installer]({0}) ([signature]({1})), 
[xz archive]({2}) ([signature]({3})), [zstd archive]({4}) ([signature]({5}))",
             (
                 "LLVM-{release}-woa64.exe",
                 "LLVM-{release}-woa64.exe.jsonl",
                 "clang+llvm-{release}-aarch64-pc-windows-msvc.tar.xz",
                 "clang+llvm-{release}-aarch64-pc-windows-msvc.tar.xz.jsonl",
+                "clang+llvm-{release}-aarch64-pc-windows-msvc.tar.zst",
+                "clang+llvm-{release}-aarch64-pc-windows-msvc.tar.zst.jsonl",
             ),
         ),
     ),
@@ -170,7 +182,7 @@ def create_release(repo, release, tag=None, name=None, 
message=None):
 
 ## Package Types
 
-Each platform has one binary release package. The file name starts with either 
`LLVM-` or `clang+llvm-` and ends with the platform's name. For example, 
`LLVM-{release}-Linux-ARM64.tar.xz` contains LLVM binaries for Arm64 Linux.
+Each platform has binary release packages. The file name starts with either 
`LLVM-` or `clang+llvm-` and ends with the platform's name. For example, 
`LLVM-{release}-Linux-ARM64.tar.xz` contains LLVM binaries for Arm64 Linux. 
Binary archive packages may be available as `.tar.xz` or `.tar.zst` files. The 
`.tar.zst` files contain the same package contents, but use zstd compression.
 
 Except for Windows. Where `LLVM-*.exe` is an installer intended for using LLVM 
as a toolchain and the archive `clang+llvm-` contains the contents of the 
installer, plus libraries and tools not normally used in a toolchain. You most 
likely want the `LLVM-` installer, unless you are developing software which 
itself uses LLVM, in which case choose `clang+llvm-`.
 

>From 9f776e9662381abbef282c1ecd3e170f08778599 Mon Sep 17 00:00:00 2001
From: Francisco Pombal <[email protected]>
Date: Sat, 6 Jun 2026 04:31:27 +0100
Subject: [PATCH 2/2] [release] fix building zstd archives on Windows 11 ARM
 builds

The Windows 11 ARM runner doesn't have zstd installed by default.
This installs zstd from source through vcpkg to address this.

Fixes https://github.com/llvm/llvm-project/pull/201518.
---
 .github/workflows/release-binaries.yml | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/.github/workflows/release-binaries.yml 
b/.github/workflows/release-binaries.yml
index 90aec02bc760f..fedad4cb62c98 100644
--- a/.github/workflows/release-binaries.yml
+++ b/.github/workflows/release-binaries.yml
@@ -79,6 +79,13 @@ jobs:
         vcpkg install openssl:arm64-windows-static-md
         echo 
"OPENSSL_DIR=$env:VCPKG_INSTALLATION_ROOT\installed\arm64-windows-static-md" >> 
$env:GITHUB_ENV
 
+    # zstd is missing from the windows-11-arm runner
+    - name: Install zstd on windows-11-arm runner
+      if: runner.os == 'Windows' && runner.arch == 'ARM64'
+      run: |
+        vcpkg install "zstd[tools]:arm64-windows"
+        echo "$env:VCPKG_INSTALLATION_ROOT\installed\arm64-windows\bin" >> 
$env:GITHUB_PATH
+
     - name: Checkout LLVM
       uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
 

_______________________________________________
llvm-branch-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits

Reply via email to