From 17d5455d5cb4fc8474e42da043ad00dab7466ed2 Mon Sep 17 00:00:00 2001 From: helly25 Date: Tue, 11 Nov 2025 16:13:04 +0100 Subject: [PATCH 1/2] Update distros without download Instead of computing the SHA256s ourselves we get them from github directly. Also add additional 21.1.5 distros. --- toolchain/internal/llvm_distributions.bzl | 30 +++++++++++++++++++---- utils/llvm_checksums.sh | 16 ++++++++++-- 2 files changed, 39 insertions(+), 7 deletions(-) diff --git a/toolchain/internal/llvm_distributions.bzl b/toolchain/internal/llvm_distributions.bzl index 0db06d02..b1a99fef 100644 --- a/toolchain/internal/llvm_distributions.bzl +++ b/toolchain/internal/llvm_distributions.bzl @@ -706,12 +706,14 @@ _llvm_distributions = { "clang+llvm-21.1.4-x86_64-pc-windows-msvc.tar.xz": "511e4e7e0a43156cb1410578285f1db246ebb400db0018cd304c84a369562b6d", # 21.1.5 - "LLVM-21.1.5-Linux-ARM64.tar.xz": "c9a1ee5d1a1698a8eb0abda1c1e44c812378aec32f89cc4fbbb41865237359a9", - "LLVM-21.1.5-Linux-X64.tar.xz": "6279d78feeeb8e839a397f0bca7b1c0594972224d59525496416653d9b9c077f", - "clang+llvm-21.1.5-x86_64-pc-windows-msvc.tar.xz": "eba824f1379fdb1a385f6dff8d19275a57348f621c752ce93b6d11256741e349", + "clang+llvm-21.1.5-aarch64-pc-windows-msvc.tar.xz": "sha256:dcc7a6f9e3ff02f5b49b23e6f91abe2f9431972d72ab59f7b7d9f8b436ea1ca3", + "clang+llvm-21.1.5-armv7a-linux-gnueabihf.tar.gz": "sha256:42a964c0ea68764ef8e222f5f979a400a803a912e5df273358652d4017ca3411", + "clang+llvm-21.1.5-x86_64-pc-windows-msvc.tar.xz": "sha256:eba824f1379fdb1a385f6dff8d19275a57348f621c752ce93b6d11256741e349", + "LLVM-21.1.5-Linux-ARM64.tar.xz": "sha256:c9a1ee5d1a1698a8eb0abda1c1e44c812378aec32f89cc4fbbb41865237359a9", + "LLVM-21.1.5-Linux-X64.tar.xz": "sha256:6279d78feeeb8e839a397f0bca7b1c0594972224d59525496416653d9b9c077f", # Refer to variable declaration on how to update! - # Example update (without deleting): utils/llvm_checksums.sh -g -t /tmp/llvm -v 21.1.5 + # Example update (without download): utils/llvm_checksums.sh -D -g -t /tmp/llvm -v 21.1.5 } # Note: Unlike the user-specified llvm_mirror attribute, the URL prefixes in @@ -779,6 +781,13 @@ def _full_url(url): return "file://" + url return url +def _normalize_and_check_sha256(sha256): + if sha256: + sha256 = sha256.removeprefix("sha256:") + if len(sha256) != 64: + return None, "Attribute sha256 needs exactly 64 hex characters." + return sha256, None + def download_llvm(rctx): """Download the LLVM distribution for the given context.""" urls = [] @@ -793,9 +802,13 @@ def download_llvm(rctx): if not urls: urls, sha256, strip_prefix = _distribution_urls(rctx) + sha256, shaerr = _normalize_and_check_sha256(sha256) + if shaerr: + fail("ERROR: " + shaerr) + res = rctx.download_and_extract( [_full_url(url) for url in urls], - sha256 = sha256, + sha256, stripPrefix = strip_prefix, auth = _get_auth(rctx, urls), ) @@ -1443,6 +1456,13 @@ def _distributions_test_writer_impl(ctx): extra_llvm_distributions = extra_llvm_distributions, parsed_llvm_version = version, ) + for basename, distribution in all_llvm_distributions.items(): + sha256, shaerr = _normalize_and_check_sha256(distribution.sha256) + if shaerr: + output.append("err: {basename}: bad sha256: {shaerr}".format( + basename = basename, + shaerr = shaerr, + )) for arch in arch_list: for os in os_list: if version < MIN_VERSION: diff --git a/utils/llvm_checksums.sh b/utils/llvm_checksums.sh index 9e271285..3004e6d8 100755 --- a/utils/llvm_checksums.sh +++ b/utils/llvm_checksums.sh @@ -17,8 +17,9 @@ set -euo pipefail use_github_host=0 tmp_dir= +download=1 -while getopts "t:v:gh" opt; do +while getopts "t:v:ghD" opt; do case "${opt}" in "t") tmp_dir="${OPTARG}" ;; "v") llvm_version="${OPTARG}" ;; @@ -30,6 +31,7 @@ while getopts "t:v:gh" opt; do echo "-g - Use github to download releases." exit 2 ;; + "D") download=0 ;; *) echo "invalid option: -${OPTARG}" exit 1 @@ -67,11 +69,21 @@ llvm_host() { github_host() { output_dir="${tmp_dir}/${llvm_version}" mkdir -p "${output_dir}" + if ((download)); then + echo "" + echo "====" + echo "Checksums for clang+llvm distributions are (${output_dir}):" + echo " # ${llvm_version}" + curl -s "https://api.github.com/repos/llvm/llvm-project/releases/tags/llvmorg-${llvm_version}" | + tee ./releases.json | + jq -r '.assets[]|select(any(.name; test("^(clang[+]llvm|LLVM)-.*tar.(xz|gz)$")))|" \""+(.browser_download_url|split("/")|.[-1]|sub("%2B";"+"))+"\": \""+.digest+"\","' + exit 0 + fi ( cd "${output_dir}" curl -s "https://api.github.com/repos/llvm/llvm-project/releases/tags/llvmorg-${llvm_version}" | tee ./releases.json | - jq '.assets[]|select(any(.name; test("^(clang[+]llvm|LLVM)-.*tar.(xz|gz)$")))|.browser_download_url' | + jq '.assets[]|select(any(.name .digest; test("^(clang[+]llvm|LLVM)-.*tar.(xz|gz)$")))|.browser_download_url' | tee ./filtered_urls.txt | xargs -n1 curl -L -O -C - ) From 33309f0b64d480ac69273f5180cdeef00e5f31d7 Mon Sep 17 00:00:00 2001 From: helly25 Date: Tue, 11 Nov 2025 16:23:04 +0100 Subject: [PATCH 2/2] Make tooling happy --- toolchain/internal/llvm_distributions.bzl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/toolchain/internal/llvm_distributions.bzl b/toolchain/internal/llvm_distributions.bzl index b1a99fef..6e2e0e8a 100644 --- a/toolchain/internal/llvm_distributions.bzl +++ b/toolchain/internal/llvm_distributions.bzl @@ -808,7 +808,7 @@ def download_llvm(rctx): res = rctx.download_and_extract( [_full_url(url) for url in urls], - sha256, + sha256 = sha256, stripPrefix = strip_prefix, auth = _get_auth(rctx, urls), ) @@ -1457,7 +1457,7 @@ def _distributions_test_writer_impl(ctx): parsed_llvm_version = version, ) for basename, distribution in all_llvm_distributions.items(): - sha256, shaerr = _normalize_and_check_sha256(distribution.sha256) + _, shaerr = _normalize_and_check_sha256(distribution.sha256) if shaerr: output.append("err: {basename}: bad sha256: {shaerr}".format( basename = basename,