Skip to content

Commit 45bd4db

Browse files
helly25fmeum
andauthored
Add missing distributions and check for omissions (#486)
Add missing distributions. Starting with 19.0.0 verify which distributions we can actually automatically detect. --------- Co-authored-by: Fabian Meumertzheim <[email protected]>
1 parent 9981c77 commit 45bd4db

File tree

7 files changed

+291
-39
lines changed

7 files changed

+291
-39
lines changed

.github/workflows/tests.yml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,15 @@ jobs:
4141
USE_BAZEL_VERSION: ${{ matrix.bazel_version }}
4242
USE_BZLMOD: ${{ matrix.bzlmod }}
4343
run: tests/scripts/run_tests.sh
44+
toolchain_test:
45+
runs-on: ubuntu-latest
46+
steps:
47+
- uses: actions/checkout@v4
48+
- name: Test
49+
env:
50+
USE_BAZEL_VERSION: latest
51+
USE_BZLMOD: true
52+
run: tests/scripts/run_toolchain_tests.sh
4453
external_test:
4554
strategy:
4655
fail-fast: false

tests/scripts/run_toolchain_tests.sh

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
#!/bin/bash
2+
# Copyright 2018 The Bazel Authors.
3+
#
4+
# Licensed under the Apache License, Version 2.0 (the "License");
5+
# you may not use this file except in compliance with the License.
6+
# You may obtain a copy of the License at
7+
#
8+
# http://www.apache.org/licenses/LICENSE-2.0
9+
#
10+
# Unless required by applicable law or agreed to in writing, software
11+
# distributed under the License is distributed on an "AS IS" BASIS,
12+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
# See the License for the specific language governing permissions and
14+
# limitations under the License.
15+
16+
set -euo pipefail
17+
18+
while getopts "h" opt; do
19+
case "${opt}" in
20+
"h")
21+
echo "Usage: No options"
22+
exit 2
23+
;;
24+
*)
25+
echo "invalid option: -${OPTARG}"
26+
exit 1
27+
;;
28+
esac
29+
done
30+
31+
scripts_dir="$(dirname "${BASH_SOURCE[0]}")"
32+
source "${scripts_dir}/bazel.sh"
33+
"${bazel}" version
34+
35+
set -x
36+
test_args=(
37+
"--check_direct_dependencies=off"
38+
)
39+
40+
targets=(
41+
"//toolchain/..."
42+
)
43+
44+
"${bazel}" ${TEST_MIGRATION:+"--strict"} --bazelrc=/dev/null test \
45+
"${common_test_args[@]}" "${test_args[@]}" "${targets[@]}"

toolchain/internal/BUILD.bazel

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,19 @@
1212
# See the License for the specific language governing permissions and
1313
# limitations under the License.
1414

15+
load("@bazel_skylib//rules:diff_test.bzl", "diff_test")
16+
load("llvm_distributions.bzl", "write_distributions")
17+
1518
exports_files(["template.modulemap"])
19+
20+
write_distributions(
21+
name = "llvm_distributions",
22+
testonly = True,
23+
visibility = ["//visibility:private"],
24+
)
25+
26+
diff_test(
27+
name = "llvm_distributions_test",
28+
file1 = "llvm_distributions.golden.txt",
29+
file2 = "llvm_distributions",
30+
)

toolchain/internal/llvm_distributions.bzl

Lines changed: 134 additions & 6 deletions
Large diffs are not rendered by default.
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
version: 19.1.0
2+
version: 19.1.1
3+
version: 19.1.2
4+
version: 19.1.3
5+
version: 19.1.4
6+
version: 19.1.5
7+
version: 19.1.6
8+
version: 19.1.7
9+
version: 20.1.0
10+
version: 20.1.1
11+
version: 20.1.2
12+
version: 20.1.3
13+
del: clang+llvm-19.1.0-aarch64-linux-gnu.tar.xz
14+
del: clang+llvm-19.1.0-armv7a-linux-gnueabihf.tar.gz
15+
del: clang+llvm-19.1.0-x86_64-pc-windows-msvc.tar.xz
16+
del: clang+llvm-19.1.1-aarch64-linux-gnu.tar.xz
17+
del: clang+llvm-19.1.1-armv7a-linux-gnueabihf.tar.gz
18+
del: clang+llvm-19.1.1-x86_64-pc-windows-msvc.tar.xz
19+
del: clang+llvm-19.1.2-aarch64-linux-gnu.tar.xz
20+
del: clang+llvm-19.1.2-armv7a-linux-gnueabihf.tar.gz
21+
del: clang+llvm-19.1.2-x86_64-pc-windows-msvc.tar.xz
22+
del: clang+llvm-19.1.3-armv7a-linux-gnueabihf.tar.gz
23+
del: clang+llvm-19.1.3-x86_64-pc-windows-msvc.tar.xz
24+
del: clang+llvm-19.1.4-armv7a-linux-gnueabihf.tar.gz
25+
del: clang+llvm-19.1.4-x86_64-pc-windows-msvc.tar.xz
26+
del: clang+llvm-19.1.5-armv7a-linux-gnueabihf.tar.gz
27+
del: clang+llvm-19.1.5-x86_64-pc-windows-msvc.tar.xz
28+
del: clang+llvm-19.1.6-armv7a-linux-gnueabihf.tar.gz
29+
del: clang+llvm-19.1.6-x86_64-pc-windows-msvc.tar.xz
30+
del: clang+llvm-19.1.7-armv7a-linux-gnueabihf.tar.gz
31+
del: clang+llvm-19.1.7-x86_64-pc-windows-msvc.tar.xz
32+
del: clang+llvm-20.1.0-aarch64-pc-windows-msvc.tar.xz
33+
del: clang+llvm-20.1.0-armv7a-linux-gnueabihf.tar.gz
34+
del: clang+llvm-20.1.0-x86_64-pc-windows-msvc.tar.xz
35+
del: clang+llvm-20.1.1-aarch64-pc-windows-msvc.tar.xz
36+
del: clang+llvm-20.1.1-armv7a-linux-gnueabihf.tar.gz
37+
del: clang+llvm-20.1.1-x86_64-pc-windows-msvc.tar.xz
38+
del: clang+llvm-20.1.2-aarch64-pc-windows-msvc.tar.xz
39+
del: clang+llvm-20.1.2-armv7a-linux-gnueabihf.tar.gz
40+
del: clang+llvm-20.1.2-x86_64-pc-windows-msvc.tar.xz
41+
del: clang+llvm-20.1.3-aarch64-pc-windows-msvc.tar.xz
42+
del: clang+llvm-20.1.3-armv7a-linux-gnueabihf.tar.gz
43+
del: clang+llvm-20.1.3-x86_64-pc-windows-msvc.tar.xz

toolchain/internal/release_name.bzl

Lines changed: 21 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -211,27 +211,30 @@ def _resolve_version_for_suse(major_llvm_version, llvm_version):
211211
os_name = _ubuntu_osname("x86_64", "20.04", major_llvm_version, llvm_version)
212212
return os_name
213213

214+
def llvm_release_name_19(llvm_version, rctx_arch, rctx_os):
215+
arch = {
216+
"aarch64": "ARM64",
217+
"x86_64": "X64",
218+
}.get(rctx_arch, rctx_arch)
219+
os = {
220+
"darwin": "macOS",
221+
"linux": "Linux",
222+
"windows": "Windows",
223+
}.get(rctx_os, rctx_os)
224+
if arch == "ARM64" and os == "Linux" and llvm_version in ["19.1.7", "19.1.6", "19.1.5", "19.1.4", "19.1.3"]:
225+
return "clang+llvm-{llvm_version}-aarch64-linux-gnu.tar.xz".format(
226+
llvm_version = llvm_version,
227+
)
228+
return "LLVM-{llvm_version}-{os}-{arch}.tar.xz".format(
229+
llvm_version = llvm_version,
230+
arch = arch,
231+
os = os,
232+
)
233+
214234
def llvm_release_name(rctx, llvm_version):
215235
major_llvm_version = _major_llvm_version(llvm_version)
216236
if major_llvm_version >= 19:
217-
arch = {
218-
"aarch64": "ARM64",
219-
"x86_64": "X64",
220-
}[_arch(rctx)]
221-
os = {
222-
"darwin": "macOS",
223-
"linux": "Linux",
224-
"windows": "Windows",
225-
}[_os(rctx)]
226-
if arch == "ARM64" and os == "Linux" and llvm_version in ["19.1.7", "19.1.6", "19.1.5", "19.1.4", "19.1.3"]:
227-
return "clang+llvm-{llvm_version}-aarch64-linux-gnu.tar.xz".format(
228-
llvm_version = llvm_version,
229-
)
230-
return "LLVM-{llvm_version}-{os}-{arch}.tar.xz".format(
231-
llvm_version = llvm_version,
232-
arch = arch,
233-
os = os,
234-
)
237+
return llvm_release_name_19(llvm_version, _arch(rctx), _os(rctx))
235238
else:
236239
(os, version, arch) = _os_version_arch(rctx)
237240
if os == "darwin":

utils/llvm_checksums.sh

Lines changed: 24 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,18 @@
1616
set -euo pipefail
1717

1818
use_github_host=0
19+
tmp_dir=
1920

20-
while getopts "v:gh" opt; do
21+
while getopts "t:v:gh" opt; do
2122
case "${opt}" in
23+
"t") tmp_dir="${OPTARG}" ;;
2224
"v") llvm_version="${OPTARG}" ;;
2325
"g") use_github_host=1 ;;
2426
"h")
2527
echo "Usage:"
26-
echo "-v - Version of clang+llvm to use"
27-
echo "-g - Use github to download releases"
28+
echo "-t <tempdir> - Optional: Specify a temp directory to download distributions to."
29+
echo "-v <version> - Version of clang+llvm to use."
30+
echo "-g - Use github to download releases."
2831
exit 2
2932
;;
3033
*)
@@ -35,36 +38,42 @@ while getopts "v:gh" opt; do
3538
done
3639

3740
if [[ -z ${llvm_version-} ]]; then
38-
echo "Usage: ${BASH_SOURCE[0]} [-g] -v llvm_version"
41+
echo "Usage: ${BASH_SOURCE[0]} [-t <tempdir>] [-g] -v <llvm_version>"
3942
exit 1
4043
fi
4144

42-
tmp_dir="$(mktemp -d)"
43-
4445
cleanup() {
4546
rc=$?
4647
rm -rf "${tmp_dir}"
4748
exit "${rc}"
4849
}
49-
trap 'cleanup' INT HUP QUIT TERM EXIT
50+
51+
if [[ -z "${tmp_dir}" ]]; then
52+
tmp_dir="$(mktemp -d)"
53+
echo "Using temp dir: '${tmp_dir}'"
54+
trap 'cleanup' INT HUP QUIT TERM EXIT
55+
elif [[ ! -r "${tmp_dir}" ]]; then
56+
echo "Temp directory does not exist: '${tmp_dir}'."
57+
exit 2
58+
fi
5059

5160
llvm_host() {
5261
local url_base="releases.llvm.org/${llvm_version}"
5362
output_dir="${tmp_dir}/${url_base}"
5463
wget --recursive --level 1 --directory-prefix="${tmp_dir}" \
55-
--accept-regex "(clang%2bllvm|LLVM)-.*tar.xz$" "http://${url_base}/"
64+
--accept-regex "(clang%2bllvm|LLVM)-.*tar.(xz|gz)$" "http://${url_base}/"
5665
}
5766

5867
github_host() {
59-
output_dir="${tmp_dir}"
68+
output_dir="${tmp_dir}/${llvm_version}"
69+
mkdir -p "${output_dir}"
6070
(
6171
cd "${output_dir}"
6272
curl -s "https://api.github.com/repos/llvm/llvm-project/releases/tags/llvmorg-${llvm_version}" |
63-
jq .assets[].browser_download_url |
64-
tee ./urls.txt |
65-
grep -E '(clang%2Bllvm|LLVM)-.*tar.xz"$' |
73+
tee ./releases.json |
74+
jq '.assets[]|select(any(.name; test("^(clang[+]llvm|LLVM)-.*tar.(xz|gz)$")))|.browser_download_url' |
6675
tee ./filtered_urls.txt |
67-
xargs -n1 curl -L -O
76+
xargs -n1 curl -L -O -C -
6877
)
6978
}
7079

@@ -76,8 +85,8 @@ fi
7685

7786
echo ""
7887
echo "===="
79-
echo "Checksums for clang+llvm distributions are:"
80-
find "${output_dir}" -type f -name '*.xz' -exec shasum -a 256 {} \; |
88+
echo "Checksums for clang+llvm distributions are (${output_dir}):"
89+
find "${output_dir}" -type f \( -name 'clang%2?llvm-*.tar.*' -o -name 'LLVM-*.tar.*' \) \( -name '*.gz' -o -name '*.xz' \) -exec shasum -a 256 {} \; |
8190
sed -e "s@${output_dir}/@@" |
8291
awk '{ printf "\"%s\": \"%s\",\n", $2, $1 }' |
8392
sed -e 's/%2[Bb]/+/' |

0 commit comments

Comments
 (0)