From baca9d1de232c0e2a1471a4fe367d2234d48f5df Mon Sep 17 00:00:00 2001 From: helly25 Date: Thu, 13 Mar 2025 21:43:57 +0000 Subject: [PATCH 01/23] Add more missing distributions (all .gz). Add a test for the distribution finder. The test computes what would be found given all versions a nd a combination of arch and os. Then the test compares the result to what is configured and shows the difference. If the difference is empty then the finder is correct. There are currently only deleted entries with the last deleted enty in version 18.1.0. In other words starting with llvm version 18.1.1 the finder is correct. That also means as long as this is true, when someone adds information for a new version then the test does not need to be updated. --- .../internal/llvm_distributions.golden.txt | 164 ++++++++++++++++++ 1 file changed, 164 insertions(+) create mode 100644 toolchain/internal/llvm_distributions.golden.txt diff --git a/toolchain/internal/llvm_distributions.golden.txt b/toolchain/internal/llvm_distributions.golden.txt new file mode 100644 index 000000000..fb2acd378 --- /dev/null +++ b/toolchain/internal/llvm_distributions.golden.txt @@ -0,0 +1,164 @@ +del: clang+llvm-6.0.0-amd64-unknown-freebsd-10.tar.xz +del: clang+llvm-6.0.0-i386-unknown-freebsd-10.tar.xz +del: clang+llvm-6.0.0-i686-linux-gnu-Fedora27.tar.xz +del: clang+llvm-6.0.0-mips-linux-gnu.tar.xz +del: clang+llvm-6.0.0-mipsel-linux-gnu.tar.xz +del: clang+llvm-6.0.0-x86_64-linux-gnu-Fedora27.tar.xz +del: clang+llvm-6.0.0-x86_64-linux-gnu-debian8.tar.xz +del: clang+llvm-6.0.0-x86_64-linux-gnu-ubuntu-14.04.tar.xz +del: clang+llvm-6.0.0-x86_64-linux-gnu-ubuntu-16.04.tar.xz +del: clang+llvm-6.0.0-x86_64-linux-sles11.3.tar.xz +del: clang+llvm-6.0.0-x86_64-linux-sles12.2.tar.xz +del: clang+llvm-6.0.1-amd64-unknown-freebsd10.tar.xz +del: clang+llvm-6.0.1-i386-unknown-freebsd10.tar.xz +del: clang+llvm-6.0.1-x86_64-linux-gnu-ubuntu-14.04.tar.xz +del: clang+llvm-6.0.1-x86_64-linux-gnu-ubuntu-16.04.tar.xz +del: clang+llvm-6.0.1-x86_64-linux-sles11.3.tar.xz +del: clang+llvm-6.0.1-x86_64-linux-sles12.3.tar.xz +del: clang+llvm-7.0.0-amd64-unknown-freebsd-10.tar.xz +del: clang+llvm-7.0.0-i386-unknown-freebsd-10.tar.xz +del: clang+llvm-7.0.0-x86_64-linux-gnu-ubuntu-14.04.tar.xz +del: clang+llvm-7.0.0-x86_64-linux-gnu-ubuntu-16.04.tar.xz +del: clang+llvm-7.0.0-x86_64-linux-sles11.3.tar.xz +del: clang+llvm-7.0.0-x86_64-linux-sles12.3.tar.xz +del: clang+llvm-8.0.0-amd64-unknown-freebsd11.tar.xz +del: clang+llvm-8.0.0-i386-unknown-freebsd11.tar.xz +del: clang+llvm-8.0.0-x86_64-linux-gnu-ubuntu-14.04.tar.xz +del: clang+llvm-8.0.0-x86_64-linux-gnu-ubuntu-16.04.tar.xz +del: clang+llvm-8.0.0-x86_64-linux-gnu-ubuntu-18.04.tar.xz +del: clang+llvm-8.0.0-x86_64-linux-sles11.3.tar.xz +del: clang+llvm-8.0.1-amd64-unknown-freebsd11.tar.xz +del: clang+llvm-8.0.1-i386-unknown-freebsd11.tar.xz +del: clang+llvm-8.0.1-powerpc64le-linux-rhel-7.4.tar.xz +del: clang+llvm-8.0.1-powerpc64le-linux-ubuntu-16.04.tar.xz +del: clang+llvm-8.0.1-x86_64-linux-sles11.3.tar.xz +del: clang+llvm-9.0.0-amd64-unknown-freebsd11.tar.xz +del: clang+llvm-9.0.0-i386-unknown-freebsd11.tar.xz +del: clang+llvm-9.0.0-powerpc64le-linux-rhel-7.4.tar.xz +del: clang+llvm-9.0.0-powerpc64le-linux-ubuntu-16.04.tar.xz +del: clang+llvm-9.0.0-x86_64-darwin-apple.tar.xz +del: clang+llvm-9.0.0-x86_64-linux-gnu-ubuntu-14.04.tar.xz +del: clang+llvm-9.0.0-x86_64-linux-gnu-ubuntu-16.04.tar.xz +del: clang+llvm-9.0.0-x86_64-linux-gnu-ubuntu-18.04.tar.xz +del: clang+llvm-9.0.0-x86_64-linux-sles11.3.tar.xz +del: clang+llvm-9.0.0-x86_64-pc-linux-gnu.tar.xz +del: clang+llvm-10.0.0-amd64-unknown-freebsd11.tar.xz +del: clang+llvm-10.0.0-i386-unknown-freebsd11.tar.xz +del: clang+llvm-10.0.0-powerpc64le-linux-rhel-7.4.tar.xz +del: clang+llvm-10.0.0-powerpc64le-linux-ubuntu-16.04.tar.xz +del: clang+llvm-10.0.0-x86_64-linux-sles11.3.tar.xz +del: clang+llvm-10.0.1-amd64-unknown-freebsd11.tar.xz +del: clang+llvm-10.0.1-i386-unknown-freebsd11.tar.xz +del: clang+llvm-10.0.1-powerpc64le-linux-rhel-7.4.tar.xz +del: clang+llvm-10.0.1-powerpc64le-linux-ubuntu-16.04.tar.xz +del: clang+llvm-10.0.1-x86_64-linux-sles12.4.tar.xz +del: clang+llvm-11.0.0-x86_64-linux-gnu-ubuntu-16.04.tar.xz +del: clang+llvm-11.0.0-x86_64-linux-gnu-ubuntu-20.04.tar.xz +del: clang+llvm-11.0.0-x86_64-linux-sles12.4.tar.xz +del: clang+llvm-11.0.1-amd64-unknown-freebsd11.tar.xz +del: clang+llvm-11.0.1-amd64-unknown-freebsd12.tar.xz +del: clang+llvm-11.0.1-i386-unknown-freebsd11.tar.xz +del: clang+llvm-11.0.1-i386-unknown-freebsd12.tar.xz +del: clang+llvm-11.0.1-powerpc64le-linux-rhel-7.4.tar.xz +del: clang+llvm-11.0.1-powerpc64le-linux-ubuntu-18.04.tar.xz +del: clang+llvm-11.0.1-x86_64-linux-gnu-ubuntu-16.04.tar.xz +del: clang+llvm-11.0.1-x86_64-linux-gnu-ubuntu-20.10.tar.xz +del: clang+llvm-11.0.1-x86_64-linux-sles12.4.tar.xz +del: clang+llvm-11.1.0-amd64-unknown-freebsd11.tar.xz +del: clang+llvm-11.1.0-amd64-unknown-freebsd12.tar.xz +del: clang+llvm-11.1.0-i386-unknown-freebsd11.tar.xz +del: clang+llvm-11.1.0-i386-unknown-freebsd12.tar.xz +del: clang+llvm-11.1.0-powerpc64le-linux-rhel-7.4.tar.xz +del: clang+llvm-11.1.0-powerpc64le-linux-ubuntu-18.04.tar.xz +del: clang+llvm-11.1.0-x86_64-linux-gnu-ubuntu-16.04.tar.xz +del: clang+llvm-11.1.0-x86_64-linux-gnu-ubuntu-20.10.tar.xz +del: clang+llvm-12.0.0-amd64-unknown-freebsd11.tar.xz +del: clang+llvm-12.0.0-amd64-unknown-freebsd12.tar.xz +del: clang+llvm-12.0.0-i386-unknown-freebsd11.tar.xz +del: clang+llvm-12.0.0-i386-unknown-freebsd12.tar.xz +del: clang+llvm-12.0.0-x86_64-linux-gnu-ubuntu-16.04.tar.xz +del: clang+llvm-12.0.0-x86_64-linux-gnu-ubuntu-20.04.tar.xz +del: clang+llvm-12.0.0-x86_64-linux-sles12.4.tar.xz +del: clang+llvm-12.0.1-amd64-unknown-freebsd11.tar.xz +del: clang+llvm-12.0.1-amd64-unknown-freebsd12.tar.xz +del: clang+llvm-12.0.1-i386-unknown-freebsd11.tar.xz +del: clang+llvm-12.0.1-i386-unknown-freebsd12.tar.xz +del: clang+llvm-12.0.1-powerpc64le-linux-rhel-7.9.tar.xz +del: clang+llvm-12.0.1-powerpc64le-linux-ubuntu-18.04.tar.xz +del: clang+llvm-13.0.0-amd64-unknown-freebsd12.tar.xz +del: clang+llvm-13.0.0-amd64-unknown-freebsd13.tar.xz +del: clang+llvm-13.0.0-i386-unknown-freebsd12.tar.xz +del: clang+llvm-13.0.0-i386-unknown-freebsd13.tar.xz +del: clang+llvm-13.0.0-powerpc64le-linux-rhel-7.9.tar.xz +del: clang+llvm-13.0.0-powerpc64le-linux-ubuntu-18.04.tar.xz +del: clang+llvm-13.0.0-x86_64-linux-gnu-ubuntu-16.04.tar.xz +del: clang+llvm-13.0.0-x86_64-linux-gnu-ubuntu-20.04.tar.xz +del: clang+llvm-13.0.1-amd64-unknown-freebsd12.tar.xz +del: clang+llvm-13.0.1-amd64-unknown-freebsd13.tar.xz +del: clang+llvm-13.0.1-i386-unknown-freebsd12.tar.xz +del: clang+llvm-13.0.1-i386-unknown-freebsd13.tar.xz +del: clang+llvm-13.0.1-powerpc64le-linux-rhel-7.9.tar.xz +del: clang+llvm-13.0.1-powerpc64le-linux-ubuntu-18.04.5.tar.xz +del: clang+llvm-14.0.0-amd64-unknown-freebsd12.tar.xz +del: clang+llvm-14.0.0-amd64-unknown-freebsd13.tar.xz +del: clang+llvm-14.0.0-i386-unknown-freebsd12.tar.xz +del: clang+llvm-14.0.0-i386-unknown-freebsd13.tar.xz +del: clang+llvm-14.0.0-powerpc64le-linux-rhel-7.9.tar.xz +del: clang+llvm-14.0.0-powerpc64le-linux-ubuntu-18.04.tar.xz +del: clang+llvm-14.0.0-x86_64-linux-sles12.4.tar.xz +del: clang+llvm-14.0.1-amd64-unknown-freebsd12.tar.xz +del: clang+llvm-14.0.1-amd64-unknown-freebsd13.tar.xz +del: clang+llvm-14.0.1-powerpc64le-linux-rhel-8.4.tar.xz +del: clang+llvm-14.0.1-powerpc64le-linux-ubuntu-18.04.tar.xz +del: clang+llvm-14.0.2-amd64-unknown-freebsd12.tar.xz +del: clang+llvm-14.0.2-amd64-unknown-freebsd13.tar.xz +del: clang+llvm-14.0.3-amd64-unknown-freebsd12.tar.xz +del: clang+llvm-14.0.3-amd64-unknown-freebsd13.tar.xz +del: clang+llvm-14.0.3-powerpc64le-linux-rhel-8.4.tar.xz +del: clang+llvm-14.0.3-powerpc64le-linux-ubuntu-18.04.tar.xz +del: clang+llvm-14.0.4-amd64-unknown-freebsd12.tar.xz +del: clang+llvm-14.0.4-amd64-unknown-freebsd13.tar.xz +del: clang+llvm-14.0.4-powerpc64le-linux-rhel-8.4.tar.xz +del: clang+llvm-14.0.4-powerpc64le-linux-ubuntu-18.04.5.tar.xz +del: clang+llvm-14.0.5-amd64-unknown-freebsd12.tar.xz +del: clang+llvm-14.0.5-amd64-unknown-freebsd13.tar.xz +del: clang+llvm-14.0.5-powerpc64le-linux-rhel-8.4.tar.xz +del: clang+llvm-14.0.5-powerpc64le-linux-ubuntu-18.04.5.tar.xz +del: clang+llvm-14.0.6-amd64-unknown-freebsd12.tar.xz +del: clang+llvm-14.0.6-amd64-unknown-freebsd13.tar.xz +del: clang+llvm-14.0.6-powerpc64le-linux-rhel-8.4.tar.xz +del: clang+llvm-14.0.6-powerpc64le-linux-ubuntu-18.04.5.tar.xz +del: clang+llvm-15.0.0-powerpc64le-linux-rhel-8.4.tar.xz +del: clang+llvm-15.0.0-powerpc64le-linux-ubuntu-18.04.6.tar.xz +del: clang+llvm-15.0.0-sparc64-unknown-linux-gnu.tar.xz +del: clang+llvm-15.0.1-powerpc64le-linux-rhel-8.4.tar.xz +del: clang+llvm-15.0.1-powerpc64le-linux-ubuntu-18.04.5.tar.xz +del: clang+llvm-15.0.2-powerpc64le-linux-rhel-8.4.tar.xz +del: clang+llvm-15.0.2-powerpc64le-linux-ubuntu-18.04.5.tar.xz +del: clang+llvm-15.0.2-x86_64-unknown-linux-gnu-rhel86.tar.xz +del: clang+llvm-15.0.2-x86_64-unknown-linux-gnu-sles15.tar.xz +del: clang+llvm-15.0.3-powerpc64le-linux-rhel-8.4.tar.xz +del: clang+llvm-15.0.3-powerpc64le-linux-ubuntu-18.04.5.tar.xz +del: clang+llvm-15.0.4-powerpc64le-linux-rhel-8.4.tar.xz +del: clang+llvm-15.0.4-powerpc64le-linux-ubuntu-18.04.5.tar.xz +del: clang+llvm-15.0.5-powerpc64le-linux-rhel-8.4.tar.xz +del: clang+llvm-15.0.5-powerpc64le-linux-ubuntu-18.04.5.tar.xz +del: clang+llvm-15.0.6-powerpc64le-linux-rhel-8.4.tar.xz +del: clang+llvm-15.0.6-powerpc64le-linux-ubuntu-18.04.tar.xz +del: clang+llvm-15.0.7-powerpc64le-linux-rhel-8.4.tar.xz +del: clang+llvm-15.0.7-powerpc64le-linux-ubuntu-18.04.tar.xz +del: clang+llvm-16.0.0-amd64-unknown-freebsd13.tar.xz +del: clang+llvm-16.0.0-powerpc64le-linux-rhel-8.4.tar.xz +del: clang+llvm-16.0.0-powerpc64le-linux-ubuntu-18.04.tar.xz +del: clang+llvm-16.0.0-sparc64-unknown-linux-gnu.tar.xz +del: clang+llvm-16.0.1-amd64-unknown-freebsd13.tar.xz +del: clang+llvm-16.0.1-powerpc64le-linux-rhel-8.4.tar.xz +del: clang+llvm-16.0.1-powerpc64le-linux-ubuntu-20.04.tar.xz +del: clang+llvm-16.0.2-amd64-unknown-freebsd13.tar.xz +del: clang+llvm-16.0.4-amd64-unknown-freebsd13.tar.xz +del: clang+llvm-16.0.5-amd64-unknown-freebsd13.tar.xz +del: clang+llvm-17.0.1-final_powerpc64-ibm-aix-7.2.tar.xz +del: clang+llvm-17.0.1-sparc64-unknown-linux-gnu.tar.xz +del: clang+llvm-17.0.2-sparc64-unknown-linux-gnu.tar.xz +del: clang+llvm-18.1.0-sparcv9-sun-solaris2.11.tar.xz +del: clang+llvm-18.1.0-sparcv9-unknown-linux-gnu.tar.xz From ffc2fe5106e66ffd9724f392c25f449d56da7c13 Mon Sep 17 00:00:00 2001 From: helly25 Date: Thu, 13 Mar 2025 22:09:14 +0000 Subject: [PATCH 02/23] Add the ne platforms test to the actions release workflow --- tests/scripts/run_platforms_tests.sh | 46 ++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100755 tests/scripts/run_platforms_tests.sh diff --git a/tests/scripts/run_platforms_tests.sh b/tests/scripts/run_platforms_tests.sh new file mode 100755 index 000000000..b88e59107 --- /dev/null +++ b/tests/scripts/run_platforms_tests.sh @@ -0,0 +1,46 @@ +#!/bin/bash +# Copyright 2018 The Bazel Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +set -euo pipefail + +while getopts "h" opt; do + case "${opt}" in + "h") + echo "Usage:" + echo "-t - Toolchain name to use for testing; default is llvm_toolchain" + exit 2 + ;; + *) + echo "invalid option: -${OPTARG}" + exit 1 + ;; + esac +done + +scripts_dir="$(dirname "${BASH_SOURCE[0]}")" +source "${scripts_dir}/bazel.sh" +"${bazel}" version + +cd "${scripts_dir}" + +set -x +test_args=() + +targets=( + "//platforms/..." +) + +"${bazel}" ${TEST_MIGRATION:+"--strict"} --bazelrc=/dev/null test \ + "${common_test_args[@]}" "${test_args[@]}" "${targets[@]}" From e1c923df198d05511d2c5298855e1ea2e062abf1 Mon Sep 17 00:00:00 2001 From: helly25 Date: Thu, 13 Mar 2025 22:12:32 +0000 Subject: [PATCH 03/23] Better naming: should be toolchain_tests not platform_tests --- tests/scripts/run_platforms_tests.sh | 46 ---------------------------- 1 file changed, 46 deletions(-) delete mode 100755 tests/scripts/run_platforms_tests.sh diff --git a/tests/scripts/run_platforms_tests.sh b/tests/scripts/run_platforms_tests.sh deleted file mode 100755 index b88e59107..000000000 --- a/tests/scripts/run_platforms_tests.sh +++ /dev/null @@ -1,46 +0,0 @@ -#!/bin/bash -# Copyright 2018 The Bazel Authors. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -set -euo pipefail - -while getopts "h" opt; do - case "${opt}" in - "h") - echo "Usage:" - echo "-t - Toolchain name to use for testing; default is llvm_toolchain" - exit 2 - ;; - *) - echo "invalid option: -${OPTARG}" - exit 1 - ;; - esac -done - -scripts_dir="$(dirname "${BASH_SOURCE[0]}")" -source "${scripts_dir}/bazel.sh" -"${bazel}" version - -cd "${scripts_dir}" - -set -x -test_args=() - -targets=( - "//platforms/..." -) - -"${bazel}" ${TEST_MIGRATION:+"--strict"} --bazelrc=/dev/null test \ - "${common_test_args[@]}" "${test_args[@]}" "${targets[@]}" From 606b5e3080ebe3c90448d95d32199a2c4eefb549 Mon Sep 17 00:00:00 2001 From: helly25 Date: Thu, 13 Mar 2025 22:21:58 +0000 Subject: [PATCH 04/23] No switching directories for the new test --- tests/scripts/run_toolchain_tests.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/scripts/run_toolchain_tests.sh b/tests/scripts/run_toolchain_tests.sh index 1bc7cac24..540f35523 100755 --- a/tests/scripts/run_toolchain_tests.sh +++ b/tests/scripts/run_toolchain_tests.sh @@ -41,5 +41,5 @@ targets=( "//toolchain/..." ) -"${bazel}" ${TEST_MIGRATION:+"--strict"} --bazelrc=/dev/null test \ +"${bazel}" ${TEST_MIGRATION:+"--strict"} --bazelrc=/dev/null --check_direct_dependencies=off test \ "${common_test_args[@]}" "${test_args[@]}" "${targets[@]}" From bfaa5de04ce69eb446f4ec95040dc4c7ef6f6d0c Mon Sep 17 00:00:00 2001 From: helly25 Date: Thu, 13 Mar 2025 22:24:50 +0000 Subject: [PATCH 05/23] Use var array `test_args` to pass around the erquired flag. --- tests/scripts/run_toolchain_tests.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/scripts/run_toolchain_tests.sh b/tests/scripts/run_toolchain_tests.sh index 540f35523..1bc7cac24 100755 --- a/tests/scripts/run_toolchain_tests.sh +++ b/tests/scripts/run_toolchain_tests.sh @@ -41,5 +41,5 @@ targets=( "//toolchain/..." ) -"${bazel}" ${TEST_MIGRATION:+"--strict"} --bazelrc=/dev/null --check_direct_dependencies=off test \ +"${bazel}" ${TEST_MIGRATION:+"--strict"} --bazelrc=/dev/null test \ "${common_test_args[@]}" "${test_args[@]}" "${targets[@]}" From 8eed849f709ee32430e0116b6e314ad946eacce1 Mon Sep 17 00:00:00 2001 From: helly25 Date: Sat, 15 Mar 2025 13:08:15 +0000 Subject: [PATCH 06/23] Add ability to specify `llvm_version/s` as (semver) requirements. This allows to specifically require ranges, including minimum and maximum versions as well as version exclusions. That can be easier than figuring out which versions are available for which platform. Further this allows to automatically pick up relevant versions automatically as they become available later. --- MODULE.bazel | 1 + toolchain/internal/configure.bzl | 11 +++++++++++ toolchain/internal/repo.bzl | 4 +++- 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/MODULE.bazel b/MODULE.bazel index 8c2d556a5..27e14760b 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -22,6 +22,7 @@ module( bazel_dep(name = "bazel_skylib", version = "1.5.0") bazel_dep(name = "rules_cc", version = "0.0.17") bazel_dep(name = "platforms", version = "0.0.8") +bazel_dep(name = "helly25_bzl", version = "0.1.1") # TODO: Remove when protobuf is released with a version of rules_python that supports 8.x bazel_dep(name = "rules_python", version = "1.0.0", dev_dependency = True) diff --git a/toolchain/internal/configure.bzl b/toolchain/internal/configure.bzl index ba54e50d0..530c79585 100644 --- a/toolchain/internal/configure.bzl +++ b/toolchain/internal/configure.bzl @@ -37,6 +37,10 @@ load( _supported_targets = "SUPPORTED_TARGETS", _toolchain_tools = "toolchain_tools", ) +load( + "//toolchain/internal:llvm_distributions.bzl", + _latest_llvm_release_name_or_fail = "latest_llvm_release_name_or_fail", +) load( "//toolchain/internal:sysroot.bzl", _default_sysroot_path = "default_sysroot_path", @@ -80,6 +84,13 @@ def llvm_config_impl(rctx): if not toolchain_root: fail("LLVM toolchain root missing for ({}, {})".format(os, arch)) (_key, llvm_version) = _exec_os_arch_dict_value(rctx, "llvm_versions") + if llvm_version.startswith("latest"): + (llvm_version, distribution) = _latest_llvm_release_name_or_fail(rctx, llvm_version) + if llvm_version: + print("\nINFO: Resolved latest LLVM version to {llvm_version}: {distribution}".format( + distribution = distribution, + llvm_version = llvm_version, + )) # buildifier: disable=print if not llvm_version: # LLVM version missing for (os, arch) _empty_repository(rctx) diff --git a/toolchain/internal/repo.bzl b/toolchain/internal/repo.bzl index c4d9835ec..4008fe2ea 100644 --- a/toolchain/internal/repo.bzl +++ b/toolchain/internal/repo.bzl @@ -50,7 +50,9 @@ llvm_repo_attrs.update({ "llvm_version": attr.string( doc = ("One of the supported versions of LLVM, e.g. 12.0.0; used with the " + "`auto` value for the `distribution` attribute, and as a default value " + - "for the `llvm_versions` attribute."), + "for the `llvm_versions` attribute. This value can be set to `latest` " + + "in order to find the latest LLVM version supported on the OS/arch. " + + "Further, requirements can be provided, e.g. `latest:>=17.0.4,!=19.0.7`."), ), "extra_llvm_distributions": attr.string_dict( mandatory = False, From 594e53c95f0095543b761d5967284f725a8724dd Mon Sep 17 00:00:00 2001 From: helly25 Date: Sat, 15 Mar 2025 14:16:52 +0000 Subject: [PATCH 07/23] Add a requirements test and disable the tests in workspace mode as that is not setup correctly. Since it s going away there is also no point in adding and fixing it now. --- .github/workflows/tests.yml | 2 +- toolchain/deps.bzl | 7 ++ toolchain/internal/BUILD.bazel | 10 +- ...txt => llvm_distributions_test.golden.txt} | 0 .../llvm_requirements_test.golden.txt | 100 ++++++++++++++++++ 5 files changed, 117 insertions(+), 2 deletions(-) rename toolchain/internal/{llvm_distributions.golden.txt => llvm_distributions_test.golden.txt} (100%) create mode 100644 toolchain/internal/llvm_requirements_test.golden.txt diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 559351590..97a6d1f23 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -30,7 +30,7 @@ jobs: os: [macos-latest, ubuntu-latest] # TODO: Test with Bazel 8 after https://github.com/bazelbuild/bazel/pull/24154 has been released. bazel_version: [7.x, latest] # Minimum supported Bazel version is 7.x - bzlmod: [true, false] + bzlmod: [true] # Tests currently do not work as Workspaces have not been setup accordingly. runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v4 diff --git a/toolchain/deps.bzl b/toolchain/deps.bzl index 04903a5a8..997aa8359 100644 --- a/toolchain/deps.bzl +++ b/toolchain/deps.bzl @@ -36,3 +36,10 @@ def bazel_toolchain_dependencies(): ) # Skip bazel_skylib_workspace because we are not using lib/unittest.bzl + + if not native.existing_rule("helly25_bzl"): + http_archive( + name = "helly25_bzl", + url = "https://github.com/helly25/bzl/releases/download/0.1.1/bzl-0.1.1.tar.gz", + sha256 = "340c6f93dd11d274756b856a85d1dcdfe39b9c81986fb1a95ee36b6c7b680e3c", + ) diff --git a/toolchain/internal/BUILD.bazel b/toolchain/internal/BUILD.bazel index 7843ee088..0b43bb883 100644 --- a/toolchain/internal/BUILD.bazel +++ b/toolchain/internal/BUILD.bazel @@ -13,7 +13,7 @@ # limitations under the License. load("@bazel_skylib//rules:diff_test.bzl", "diff_test") -load("llvm_distributions.bzl", "write_distributions") +load("llvm_distributions.bzl", "distributions_test_writer", "requirements_test_writer") exports_files(["template.modulemap"]) @@ -25,6 +25,14 @@ write_distributions( visibility = ["//visibility:private"], ) +requirements_test_writer( + name = "llvm_requirements_test_output", + testonly = True, + output = "llvm_distributions.out.txt", + select = "llvm_distributions.sel.txt", + visibility = ["//visibility:private"], +) + diff_test( name = "llvm_distributions_output_test", file1 = "llvm_distributions.golden.out.txt", diff --git a/toolchain/internal/llvm_distributions.golden.txt b/toolchain/internal/llvm_distributions_test.golden.txt similarity index 100% rename from toolchain/internal/llvm_distributions.golden.txt rename to toolchain/internal/llvm_distributions_test.golden.txt diff --git a/toolchain/internal/llvm_requirements_test.golden.txt b/toolchain/internal/llvm_requirements_test.golden.txt new file mode 100644 index 000000000..04d64a9a3 --- /dev/null +++ b/toolchain/internal/llvm_requirements_test.golden.txt @@ -0,0 +1,100 @@ +[aarch64,darwin,"latest:<=20.1.0"]: 20.1.0 = LLVM-20.1.0-macOS-ARM64.tar.xz +[aarch64,darwin,"latest:<=20.1.0,>17.0.4,!=19.1.7"]: 20.1.0 = LLVM-20.1.0-macOS-ARM64.tar.xz +[aarch64,darwin,"latest:<20.1.0,>17.0.4,!=19.1.7"]: 19.1.6 = LLVM-19.1.6-macOS-ARM64.tar.xz +[aarch64,darwin,"latest:<20.1.0,>17.0.4"]: 19.1.7 = LLVM-19.1.7-macOS-ARM64.tar.xz +[aarch64,linux,"latest:<=20.1.0"]: 20.1.0 = LLVM-20.1.0-Linux-ARM64.tar.xz +[aarch64,linux,"latest:<=20.1.0,>17.0.4,!=19.1.7"]: 20.1.0 = LLVM-20.1.0-Linux-ARM64.tar.xz +[aarch64,linux,"latest:<20.1.0,>17.0.4,!=19.1.7"]: 19.1.6 = clang+llvm-19.1.6-aarch64-linux-gnu.tar.xz +[aarch64,linux,"latest:<20.1.0,>17.0.4"]: 19.1.7 = clang+llvm-19.1.7-aarch64-linux-gnu.tar.xz +[aarch64,raspbian,"latest:<=20.1.0"]: 20.1.0 = clang+llvm-20.1.0-armv7a-linux-gnueabihf.tar.gz +[aarch64,raspbian,"latest:<=20.1.0,>17.0.4,!=19.1.7"]: 20.1.0 = clang+llvm-20.1.0-armv7a-linux-gnueabihf.tar.gz +[aarch64,raspbian,"latest:<20.1.0,>17.0.4,!=19.1.7"]: 19.1.6 = clang+llvm-19.1.6-armv7a-linux-gnueabihf.tar.gz +[aarch64,raspbian,"latest:<20.1.0,>17.0.4"]: 19.1.7 = clang+llvm-19.1.7-armv7a-linux-gnueabihf.tar.gz +[aarch64,pc-solaris2.11,"latest:<=20.1.0"]: N/A +[aarch64,pc-solaris2.11,"latest:<=20.1.0,>17.0.4,!=19.1.7"]: N/A +[aarch64,pc-solaris2.11,"latest:<20.1.0,>17.0.4,!=19.1.7"]: N/A +[aarch64,pc-solaris2.11,"latest:<20.1.0,>17.0.4"]: N/A +[aarch64,windows,"latest:<=20.1.0"]: 20.1.0 = clang+llvm-20.1.0-aarch64-pc-windows-msvc.tar.xz +[aarch64,windows,"latest:<=20.1.0,>17.0.4,!=19.1.7"]: 20.1.0 = clang+llvm-20.1.0-aarch64-pc-windows-msvc.tar.xz +[aarch64,windows,"latest:<20.1.0,>17.0.4,!=19.1.7"]: N/A +[aarch64,windows,"latest:<20.1.0,>17.0.4"]: N/A +[powerpc64,darwin,"latest:<=20.1.0"]: 18.1.8 = clang+llvm-18.1.8-powerpc64-ibm-aix-7.2.tar.xz +[powerpc64,darwin,"latest:<=20.1.0,>17.0.4,!=19.1.7"]: 18.1.8 = clang+llvm-18.1.8-powerpc64-ibm-aix-7.2.tar.xz +[powerpc64,darwin,"latest:<20.1.0,>17.0.4,!=19.1.7"]: 18.1.8 = clang+llvm-18.1.8-powerpc64-ibm-aix-7.2.tar.xz +[powerpc64,darwin,"latest:<20.1.0,>17.0.4"]: 18.1.8 = clang+llvm-18.1.8-powerpc64-ibm-aix-7.2.tar.xz +[powerpc64,linux,"latest:<=20.1.0"]: 18.1.8 = clang+llvm-18.1.8-powerpc64-ibm-aix-7.2.tar.xz +[powerpc64,linux,"latest:<=20.1.0,>17.0.4,!=19.1.7"]: 18.1.8 = clang+llvm-18.1.8-powerpc64-ibm-aix-7.2.tar.xz +[powerpc64,linux,"latest:<20.1.0,>17.0.4,!=19.1.7"]: 18.1.8 = clang+llvm-18.1.8-powerpc64-ibm-aix-7.2.tar.xz +[powerpc64,linux,"latest:<20.1.0,>17.0.4"]: 18.1.8 = clang+llvm-18.1.8-powerpc64-ibm-aix-7.2.tar.xz +[powerpc64,raspbian,"latest:<=20.1.0"]: 20.1.0 = clang+llvm-20.1.0-armv7a-linux-gnueabihf.tar.gz +[powerpc64,raspbian,"latest:<=20.1.0,>17.0.4,!=19.1.7"]: 20.1.0 = clang+llvm-20.1.0-armv7a-linux-gnueabihf.tar.gz +[powerpc64,raspbian,"latest:<20.1.0,>17.0.4,!=19.1.7"]: 19.1.6 = clang+llvm-19.1.6-armv7a-linux-gnueabihf.tar.gz +[powerpc64,raspbian,"latest:<20.1.0,>17.0.4"]: 19.1.7 = clang+llvm-19.1.7-armv7a-linux-gnueabihf.tar.gz +[powerpc64,pc-solaris2.11,"latest:<=20.1.0"]: 18.1.8 = clang+llvm-18.1.8-powerpc64-ibm-aix-7.2.tar.xz +[powerpc64,pc-solaris2.11,"latest:<=20.1.0,>17.0.4,!=19.1.7"]: 18.1.8 = clang+llvm-18.1.8-powerpc64-ibm-aix-7.2.tar.xz +[powerpc64,pc-solaris2.11,"latest:<20.1.0,>17.0.4,!=19.1.7"]: 18.1.8 = clang+llvm-18.1.8-powerpc64-ibm-aix-7.2.tar.xz +[powerpc64,pc-solaris2.11,"latest:<20.1.0,>17.0.4"]: 18.1.8 = clang+llvm-18.1.8-powerpc64-ibm-aix-7.2.tar.xz +[powerpc64,windows,"latest:<=20.1.0"]: 18.1.8 = clang+llvm-18.1.8-powerpc64-ibm-aix-7.2.tar.xz +[powerpc64,windows,"latest:<=20.1.0,>17.0.4,!=19.1.7"]: 18.1.8 = clang+llvm-18.1.8-powerpc64-ibm-aix-7.2.tar.xz +[powerpc64,windows,"latest:<20.1.0,>17.0.4,!=19.1.7"]: 18.1.8 = clang+llvm-18.1.8-powerpc64-ibm-aix-7.2.tar.xz +[powerpc64,windows,"latest:<20.1.0,>17.0.4"]: 18.1.8 = clang+llvm-18.1.8-powerpc64-ibm-aix-7.2.tar.xz +[powerpc64le,darwin,"latest:<=20.1.0"]: 18.1.8 = clang+llvm-18.1.8-powerpc64le-linux-rhel-8.8.tar.xz +[powerpc64le,darwin,"latest:<=20.1.0,>17.0.4,!=19.1.7"]: 18.1.8 = clang+llvm-18.1.8-powerpc64le-linux-rhel-8.8.tar.xz +[powerpc64le,darwin,"latest:<20.1.0,>17.0.4,!=19.1.7"]: 18.1.8 = clang+llvm-18.1.8-powerpc64le-linux-rhel-8.8.tar.xz +[powerpc64le,darwin,"latest:<20.1.0,>17.0.4"]: 18.1.8 = clang+llvm-18.1.8-powerpc64le-linux-rhel-8.8.tar.xz +[powerpc64le,linux,"latest:<=20.1.0"]: 18.1.8 = clang+llvm-18.1.8-powerpc64le-linux-rhel-8.8.tar.xz +[powerpc64le,linux,"latest:<=20.1.0,>17.0.4,!=19.1.7"]: 18.1.8 = clang+llvm-18.1.8-powerpc64le-linux-rhel-8.8.tar.xz +[powerpc64le,linux,"latest:<20.1.0,>17.0.4,!=19.1.7"]: 18.1.8 = clang+llvm-18.1.8-powerpc64le-linux-rhel-8.8.tar.xz +[powerpc64le,linux,"latest:<20.1.0,>17.0.4"]: 18.1.8 = clang+llvm-18.1.8-powerpc64le-linux-rhel-8.8.tar.xz +[powerpc64le,raspbian,"latest:<=20.1.0"]: 20.1.0 = clang+llvm-20.1.0-armv7a-linux-gnueabihf.tar.gz +[powerpc64le,raspbian,"latest:<=20.1.0,>17.0.4,!=19.1.7"]: 20.1.0 = clang+llvm-20.1.0-armv7a-linux-gnueabihf.tar.gz +[powerpc64le,raspbian,"latest:<20.1.0,>17.0.4,!=19.1.7"]: 19.1.6 = clang+llvm-19.1.6-armv7a-linux-gnueabihf.tar.gz +[powerpc64le,raspbian,"latest:<20.1.0,>17.0.4"]: 19.1.7 = clang+llvm-19.1.7-armv7a-linux-gnueabihf.tar.gz +[powerpc64le,pc-solaris2.11,"latest:<=20.1.0"]: 18.1.8 = clang+llvm-18.1.8-powerpc64le-linux-rhel-8.8.tar.xz +[powerpc64le,pc-solaris2.11,"latest:<=20.1.0,>17.0.4,!=19.1.7"]: 18.1.8 = clang+llvm-18.1.8-powerpc64le-linux-rhel-8.8.tar.xz +[powerpc64le,pc-solaris2.11,"latest:<20.1.0,>17.0.4,!=19.1.7"]: 18.1.8 = clang+llvm-18.1.8-powerpc64le-linux-rhel-8.8.tar.xz +[powerpc64le,pc-solaris2.11,"latest:<20.1.0,>17.0.4"]: 18.1.8 = clang+llvm-18.1.8-powerpc64le-linux-rhel-8.8.tar.xz +[powerpc64le,windows,"latest:<=20.1.0"]: 18.1.8 = clang+llvm-18.1.8-powerpc64le-linux-rhel-8.8.tar.xz +[powerpc64le,windows,"latest:<=20.1.0,>17.0.4,!=19.1.7"]: 18.1.8 = clang+llvm-18.1.8-powerpc64le-linux-rhel-8.8.tar.xz +[powerpc64le,windows,"latest:<20.1.0,>17.0.4,!=19.1.7"]: 18.1.8 = clang+llvm-18.1.8-powerpc64le-linux-rhel-8.8.tar.xz +[powerpc64le,windows,"latest:<20.1.0,>17.0.4"]: 18.1.8 = clang+llvm-18.1.8-powerpc64le-linux-rhel-8.8.tar.xz +[sparcv9,darwin,"latest:<=20.1.0"]: 18.1.6 = clang+llvm-18.1.6-sparcv9-sun-solaris2.11.tar.xz +[sparcv9,darwin,"latest:<=20.1.0,>17.0.4,!=19.1.7"]: 18.1.6 = clang+llvm-18.1.6-sparcv9-sun-solaris2.11.tar.xz +[sparcv9,darwin,"latest:<20.1.0,>17.0.4,!=19.1.7"]: 18.1.6 = clang+llvm-18.1.6-sparcv9-sun-solaris2.11.tar.xz +[sparcv9,darwin,"latest:<20.1.0,>17.0.4"]: 18.1.6 = clang+llvm-18.1.6-sparcv9-sun-solaris2.11.tar.xz +[sparcv9,linux,"latest:<=20.1.0"]: 18.1.6 = clang+llvm-18.1.6-sparcv9-sun-solaris2.11.tar.xz +[sparcv9,linux,"latest:<=20.1.0,>17.0.4,!=19.1.7"]: 18.1.6 = clang+llvm-18.1.6-sparcv9-sun-solaris2.11.tar.xz +[sparcv9,linux,"latest:<20.1.0,>17.0.4,!=19.1.7"]: 18.1.6 = clang+llvm-18.1.6-sparcv9-sun-solaris2.11.tar.xz +[sparcv9,linux,"latest:<20.1.0,>17.0.4"]: 18.1.6 = clang+llvm-18.1.6-sparcv9-sun-solaris2.11.tar.xz +[sparcv9,raspbian,"latest:<=20.1.0"]: 20.1.0 = clang+llvm-20.1.0-armv7a-linux-gnueabihf.tar.gz +[sparcv9,raspbian,"latest:<=20.1.0,>17.0.4,!=19.1.7"]: 20.1.0 = clang+llvm-20.1.0-armv7a-linux-gnueabihf.tar.gz +[sparcv9,raspbian,"latest:<20.1.0,>17.0.4,!=19.1.7"]: 19.1.6 = clang+llvm-19.1.6-armv7a-linux-gnueabihf.tar.gz +[sparcv9,raspbian,"latest:<20.1.0,>17.0.4"]: 19.1.7 = clang+llvm-19.1.7-armv7a-linux-gnueabihf.tar.gz +[sparcv9,pc-solaris2.11,"latest:<=20.1.0"]: 18.1.6 = clang+llvm-18.1.6-sparcv9-sun-solaris2.11.tar.xz +[sparcv9,pc-solaris2.11,"latest:<=20.1.0,>17.0.4,!=19.1.7"]: 18.1.6 = clang+llvm-18.1.6-sparcv9-sun-solaris2.11.tar.xz +[sparcv9,pc-solaris2.11,"latest:<20.1.0,>17.0.4,!=19.1.7"]: 18.1.6 = clang+llvm-18.1.6-sparcv9-sun-solaris2.11.tar.xz +[sparcv9,pc-solaris2.11,"latest:<20.1.0,>17.0.4"]: 18.1.6 = clang+llvm-18.1.6-sparcv9-sun-solaris2.11.tar.xz +[sparcv9,windows,"latest:<=20.1.0"]: 18.1.6 = clang+llvm-18.1.6-sparcv9-sun-solaris2.11.tar.xz +[sparcv9,windows,"latest:<=20.1.0,>17.0.4,!=19.1.7"]: 18.1.6 = clang+llvm-18.1.6-sparcv9-sun-solaris2.11.tar.xz +[sparcv9,windows,"latest:<20.1.0,>17.0.4,!=19.1.7"]: 18.1.6 = clang+llvm-18.1.6-sparcv9-sun-solaris2.11.tar.xz +[sparcv9,windows,"latest:<20.1.0,>17.0.4"]: 18.1.6 = clang+llvm-18.1.6-sparcv9-sun-solaris2.11.tar.xz +[x86_64,darwin,"latest:<=20.1.0"]: 19.1.7 = LLVM-19.1.7-macOS-X64.tar.xz +[x86_64,darwin,"latest:<=20.1.0,>17.0.4,!=19.1.7"]: 19.1.6 = LLVM-19.1.6-macOS-X64.tar.xz +[x86_64,darwin,"latest:<20.1.0,>17.0.4,!=19.1.7"]: 19.1.6 = LLVM-19.1.6-macOS-X64.tar.xz +[x86_64,darwin,"latest:<20.1.0,>17.0.4"]: 19.1.7 = LLVM-19.1.7-macOS-X64.tar.xz +[x86_64,linux,"latest:<=20.1.0"]: 20.1.0 = LLVM-20.1.0-Linux-X64.tar.xz +[x86_64,linux,"latest:<=20.1.0,>17.0.4,!=19.1.7"]: 20.1.0 = LLVM-20.1.0-Linux-X64.tar.xz +[x86_64,linux,"latest:<20.1.0,>17.0.4,!=19.1.7"]: 19.1.6 = LLVM-19.1.6-Linux-X64.tar.xz +[x86_64,linux,"latest:<20.1.0,>17.0.4"]: 19.1.7 = LLVM-19.1.7-Linux-X64.tar.xz +[x86_64,raspbian,"latest:<=20.1.0"]: 20.1.0 = clang+llvm-20.1.0-armv7a-linux-gnueabihf.tar.gz +[x86_64,raspbian,"latest:<=20.1.0,>17.0.4,!=19.1.7"]: 20.1.0 = clang+llvm-20.1.0-armv7a-linux-gnueabihf.tar.gz +[x86_64,raspbian,"latest:<20.1.0,>17.0.4,!=19.1.7"]: 19.1.6 = clang+llvm-19.1.6-armv7a-linux-gnueabihf.tar.gz +[x86_64,raspbian,"latest:<20.1.0,>17.0.4"]: 19.1.7 = clang+llvm-19.1.7-armv7a-linux-gnueabihf.tar.gz +[x86_64,pc-solaris2.11,"latest:<=20.1.0"]: 18.1.6 = clang+llvm-18.1.6-amd64-pc-solaris2.11.tar.xz +[x86_64,pc-solaris2.11,"latest:<=20.1.0,>17.0.4,!=19.1.7"]: 18.1.6 = clang+llvm-18.1.6-amd64-pc-solaris2.11.tar.xz +[x86_64,pc-solaris2.11,"latest:<20.1.0,>17.0.4,!=19.1.7"]: 18.1.6 = clang+llvm-18.1.6-amd64-pc-solaris2.11.tar.xz +[x86_64,pc-solaris2.11,"latest:<20.1.0,>17.0.4"]: 18.1.6 = clang+llvm-18.1.6-amd64-pc-solaris2.11.tar.xz +[x86_64,windows,"latest:<=20.1.0"]: 20.1.0 = clang+llvm-20.1.0-x86_64-pc-windows-msvc.tar.xz +[x86_64,windows,"latest:<=20.1.0,>17.0.4,!=19.1.7"]: 20.1.0 = clang+llvm-20.1.0-x86_64-pc-windows-msvc.tar.xz +[x86_64,windows,"latest:<20.1.0,>17.0.4,!=19.1.7"]: 19.1.6 = clang+llvm-19.1.6-x86_64-pc-windows-msvc.tar.xz +[x86_64,windows,"latest:<20.1.0,>17.0.4"]: 19.1.7 = clang+llvm-19.1.7-x86_64-pc-windows-msvc.tar.xz From e2ffc9b2e3cec177b526854bc724ce0fa856ef3b Mon Sep 17 00:00:00 2001 From: helly25 Date: Sat, 15 Mar 2025 18:58:30 +0000 Subject: [PATCH 08/23] Make this work for workspaces Need to upgrade external helly25_bzl to 0.1.2 to fix its workspace file. Also important: Add the strip_prefix. Otherwise the workspaces dump the repo including the root directory. As a result the files cannot be found and BAzel only states there is no BUILD file. It should possibly suggest there is no such directory and no such bzl file in the first place. --- .github/workflows/tests.yml | 15 +++++++++++---- MODULE.bazel | 2 +- WORKSPACE | 9 +++++++++ toolchain/deps.bzl | 9 +-------- 4 files changed, 22 insertions(+), 13 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 97a6d1f23..6a1c081e8 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -30,7 +30,7 @@ jobs: os: [macos-latest, ubuntu-latest] # TODO: Test with Bazel 8 after https://github.com/bazelbuild/bazel/pull/24154 has been released. bazel_version: [7.x, latest] # Minimum supported Bazel version is 7.x - bzlmod: [true] # Tests currently do not work as Workspaces have not been setup accordingly. + bzlmod: [true, false] runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v4 @@ -42,13 +42,20 @@ jobs: USE_BZLMOD: ${{ matrix.bzlmod }} run: tests/scripts/run_tests.sh toolchain_test: - runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + os: [macos-latest, ubuntu-latest] + # TODO: Test with Bazel 8 after https://github.com/bazelbuild/bazel/pull/24154 has been released. + bazel_version: [7.x, latest] # Minimum supported Bazel version is 7.x + bzlmod: [true, false] + runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v4 - name: Test env: - USE_BAZEL_VERSION: latest - USE_BZLMOD: true + USE_BAZEL_VERSION: ${{ matrix.bazel_version }} + USE_BZLMOD: ${{ matrix.bzlmod }} run: tests/scripts/run_toolchain_tests.sh external_test: strategy: diff --git a/MODULE.bazel b/MODULE.bazel index 27e14760b..229faca2c 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -22,7 +22,7 @@ module( bazel_dep(name = "bazel_skylib", version = "1.5.0") bazel_dep(name = "rules_cc", version = "0.0.17") bazel_dep(name = "platforms", version = "0.0.8") -bazel_dep(name = "helly25_bzl", version = "0.1.1") +bazel_dep(name = "helly25_bzl", version = "0.1.2") # TODO: Remove when protobuf is released with a version of rules_python that supports 8.x bazel_dep(name = "rules_python", version = "1.0.0", dev_dependency = True) diff --git a/WORKSPACE b/WORKSPACE index d7c1f5d72..4bbf6d4ed 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -15,3 +15,12 @@ workspace( name = "toolchains_llvm", ) + +load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") + +http_archive( + name = "helly25_bzl", + sha256 = "404f8473bcaad2e370752e57d274d2093eb87ca94cb9a597c1a3553b76743206", + strip_prefix = "bzl-0.1.2", + url = "https://github.com/helly25/bzl/releases/download/0.1.2/bzl-0.1.2.tar.gz", +) diff --git a/toolchain/deps.bzl b/toolchain/deps.bzl index 997aa8359..813ad8a0f 100644 --- a/toolchain/deps.bzl +++ b/toolchain/deps.bzl @@ -35,11 +35,4 @@ def bazel_toolchain_dependencies(): sha256 = "bc283cdfcd526a52c3201279cda4bc298652efa898b10b4db0837dc51652756f", ) - # Skip bazel_skylib_workspace because we are not using lib/unittest.bzl - - if not native.existing_rule("helly25_bzl"): - http_archive( - name = "helly25_bzl", - url = "https://github.com/helly25/bzl/releases/download/0.1.1/bzl-0.1.1.tar.gz", - sha256 = "340c6f93dd11d274756b856a85d1dcdfe39b9c81986fb1a95ee36b6c7b680e3c", - ) + # Skip bazel_skylib_workspace because we are not using lib/unittest.bzl From 9d83ae4efa5ad9abd951e9c39d226adf3435531b Mon Sep 17 00:00:00 2001 From: helly25 Date: Sat, 15 Mar 2025 19:03:58 +0000 Subject: [PATCH 09/23] The dependency also needs to go into deps.bzl so run_tests.bzl works. --- toolchain/deps.bzl | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/toolchain/deps.bzl b/toolchain/deps.bzl index 813ad8a0f..e045318dc 100644 --- a/toolchain/deps.bzl +++ b/toolchain/deps.bzl @@ -36,3 +36,11 @@ def bazel_toolchain_dependencies(): ) # Skip bazel_skylib_workspace because we are not using lib/unittest.bzl + + if not native.existing_rule("helly25_bzl"): + http_archive( + name = "helly25_bzl", + strip_prefix = "bzl-0.1.2", + url = "https://github.com/helly25/bzl/releases/download/0.1.2/bzl-0.1.2.tar.gz", + sha256 = "404f8473bcaad2e370752e57d274d2093eb87ca94cb9a597c1a3553b76743206", + ) From e5810a0bdc9980217c80aeff119cf120c4643cb3 Mon Sep 17 00:00:00 2001 From: helly25 Date: Sun, 11 May 2025 18:44:23 +0000 Subject: [PATCH 10/23] Update (redo) after sync. --- README.md | 14 ++ toolchain/internal/BUILD.bazel | 23 ++- toolchain/internal/llvm_distributions.bzl | 127 +++++++++++- .../llvm_requirements_test.golden.txt | 190 +++++++++--------- 4 files changed, 243 insertions(+), 111 deletions(-) diff --git a/README.md b/README.md index 89eaa546b..881b2a3a1 100644 --- a/README.md +++ b/README.md @@ -123,6 +123,20 @@ See [bazel tutorial](https://docs.bazel.build/versions/main/tutorial/cc-toolchain-config.html) for how CC toolchains work in general. +### Requirements + +Version attributes can be requirements of the form `latest:` or `first:`. + +In case of `latest`, the latest distribution matching the `condition` will be selected. + +In case of `first`, the first distribution matching the `condition` will be selected. + +The condition consists of a commpara separated list of semver version comparisons supporting `<`, `<=`, `>`, `>=`, `==`, `!=`. Examples: + +- `latest:<=20.1.0` +- `latest:<=20.1.0,>17.0.4,!=19.1.7` +- `first:>=15.0.6,<16` + ### Selecting Toolchains If toolchains are registered (see Quickstart section above), you do not need to diff --git a/toolchain/internal/BUILD.bazel b/toolchain/internal/BUILD.bazel index 0b43bb883..6aac8a26b 100644 --- a/toolchain/internal/BUILD.bazel +++ b/toolchain/internal/BUILD.bazel @@ -13,7 +13,7 @@ # limitations under the License. load("@bazel_skylib//rules:diff_test.bzl", "diff_test") -load("llvm_distributions.bzl", "distributions_test_writer", "requirements_test_writer") +load("llvm_distributions.bzl", "requirements_test_writer", "write_distributions") exports_files(["template.modulemap"]) @@ -25,14 +25,6 @@ write_distributions( visibility = ["//visibility:private"], ) -requirements_test_writer( - name = "llvm_requirements_test_output", - testonly = True, - output = "llvm_distributions.out.txt", - select = "llvm_distributions.sel.txt", - visibility = ["//visibility:private"], -) - diff_test( name = "llvm_distributions_output_test", file1 = "llvm_distributions.golden.out.txt", @@ -44,3 +36,16 @@ diff_test( file1 = "llvm_distributions.golden.sel.txt", file2 = "llvm_distributions.sel.txt", ) + +requirements_test_writer( + name = "llvm_requirements_test_output", + testonly = True, + result = "llvm_requirements_test.output.txt", + visibility = ["//visibility:private"], +) + +diff_test( + name = "llvm_requirements_test", + file1 = "llvm_requirements_test.golden.txt", + file2 = "llvm_requirements_test.output.txt", +) diff --git a/toolchain/internal/llvm_distributions.bzl b/toolchain/internal/llvm_distributions.bzl index a06179c80..61dfd3e46 100644 --- a/toolchain/internal/llvm_distributions.bzl +++ b/toolchain/internal/llvm_distributions.bzl @@ -13,6 +13,7 @@ # limitations under the License. load("@bazel_tools//tools/build_defs/repo:utils.bzl", "read_netrc", "use_netrc") +load("@helly25_bzl//bzl/versions:versions.bzl", "versions") load( "//toolchain/internal:common.bzl", "attr_dict", @@ -1095,6 +1096,43 @@ def _find_llvm_basename_or_error(llvm_version, all_llvm_distributions, host_info return basenames[0], None +def _parse_version_requirements(version_requirements): + if version_requirements in ["latest", "first"]: + return [] + for prefix in ["latest:", "first:"]: + if version_requirements.startswith(prefix): + return versions.parse_requirements(version_requirements.removeprefix(prefix)) + fail("ERROR: Invalid version requirements: '{version_requirements}'.".format( + version_requirements = version_requirements, + )) + +def _get_llvm_versions(*, version_requirements, all_llvm_distributions): + llvm_versions = {} + for distribution in all_llvm_distributions.keys(): + version = distribution.split("-")[1] + llvm_versions[version] = None + if version_requirements.startswith("latest:"): + return reversed(llvm_versions.keys()) + else: + return llvm_versions.keys() + +def _required_llvm_release_name(*, version_requirements, all_llvm_distributions, host_info): + llvm_versions = _get_llvm_versions(version_requirements = version_requirements, all_llvm_distributions = all_llvm_distributions) + requires = _parse_version_requirements(version_requirements) + for llvm_version in llvm_versions: + if not versions.check_all_requirements(llvm_version, requires): + continue + basenames = _find_llvm_basename_list(llvm_version, all_llvm_distributions, host_info) + if len(basenames) == 1: + return llvm_version, basenames[0], None + return None, None, "ERROR: No matching distribution found." + +def _contains_any(str, chars): + for c in chars: + if c in str: + return True + return False + def _distribution_urls(rctx): """Return LLVM `urls`, `shha256` and `strip_prefix` for the given context.""" llvm_version = _get_llvm_version(rctx) @@ -1106,7 +1144,15 @@ def _distribution_urls(rctx): _, sha256, strip_prefix, _ = _key_attrs(rctx) if rctx.attr.distribution == "auto": - basename, error = _find_llvm_basename_or_error(llvm_version, all_llvm_distributions, host_info(rctx)) + rctx_host_info = host_info(rctx) + if _contains_any(llvm_version, ",:<>!="): + llvm_version, basename, error = _required_llvm_release_name( + version_requirements = _parse_version_requirements(llvm_version), + all_llvm_distributions = all_llvm_distributions, + host_info = rctx_host_info, + ) + else: + basename, error = _find_llvm_basename_or_error(llvm_version, all_llvm_distributions, rctx_host_info) if error: fail(error) dist_info = all_llvm_distributions[basename] @@ -1143,7 +1189,7 @@ def _distribution_urls(rctx): return urls, sha256, strip_prefix -def _write_distributions_impl(ctx): +def _distributions_test_writer_impl(ctx): """Analyze the configured versions and write to a file for test consumption. The test generated file '.out' contains the following lines: @@ -1360,3 +1406,80 @@ write_distributions = rule( "select": attr.output(mandatory = True), }, ) + +def _requirements_test_writer_impl(ctx): + """Analyze the configured versions and write to a file for test consumption. + The test generated file '.out' contains the following lines: + [,,]: + """ + all_llvm_distributions = _llvm_distributions + requirement_list = [ + "latest:<=20.1.0", + "latest:<=20.1.0,>17.0.4,!=19.1.7", + "latest:<20.1.0,>17.0.4,!=19.1.7", + "latest:<20.1.0,>17.0.4", + "latest:>=15.0.6,<16", + "first:>=15.0.6,<16", + ] + arch_list = [ + "aarch64", + "armv7a", + "x86_64", + ] + os_list = [ + "darwin", + "linux", + "windows", + ] + ANY_VERSION = "0" # Version does not matter, but must be a valid integer + dist_dict_list = { + "linux": [ + # keep sorted + struct(name = "ubuntu", version = ANY_VERSION), + struct(name = "raspbian", version = ANY_VERSION), + struct(name = "rhel", version = ANY_VERSION), + ], + } + result = [] + for arch in arch_list: + for os in os_list: + dist_list = dist_dict_list.get(os, [struct(name = os, version = "")]) + for dist in dist_list: + for requirement in requirement_list: + host_info = struct( + arch = arch, + os = os, + dist = dist, + ) + llvm_version, basename, error = _required_llvm_release_name( + version_requirements = requirement, + all_llvm_distributions = all_llvm_distributions, + host_info = host_info, + ) + if llvm_version and basename: + result.append("[{arch},{os}{dist_name}{dist_version},'{requirement}']: {llvm_version} = {basename}".format( + arch = arch, + os = os, + dist_name = "," + dist.name if os == "linux" else "", + dist_version = "," + dist.version if os == "linux" else "", + requirement = requirement, + llvm_version = llvm_version, + basename = basename, + )) + else: + result.append("[{arch},{os},\"{requirement}\"]: {error}".format( + arch = arch, + os = os, + requirement = requirement, + llvm_version = llvm_version, + basename = basename, + error = error or "ERROR: N/A", + )) + ctx.actions.write(ctx.outputs.result, "\n".join(result) + "\n") + +requirements_test_writer = rule( + implementation = _requirements_test_writer_impl, + attrs = { + "result": attr.output(mandatory = True), + }, +) diff --git a/toolchain/internal/llvm_requirements_test.golden.txt b/toolchain/internal/llvm_requirements_test.golden.txt index 04d64a9a3..eb8cafac1 100644 --- a/toolchain/internal/llvm_requirements_test.golden.txt +++ b/toolchain/internal/llvm_requirements_test.golden.txt @@ -1,100 +1,90 @@ -[aarch64,darwin,"latest:<=20.1.0"]: 20.1.0 = LLVM-20.1.0-macOS-ARM64.tar.xz -[aarch64,darwin,"latest:<=20.1.0,>17.0.4,!=19.1.7"]: 20.1.0 = LLVM-20.1.0-macOS-ARM64.tar.xz -[aarch64,darwin,"latest:<20.1.0,>17.0.4,!=19.1.7"]: 19.1.6 = LLVM-19.1.6-macOS-ARM64.tar.xz -[aarch64,darwin,"latest:<20.1.0,>17.0.4"]: 19.1.7 = LLVM-19.1.7-macOS-ARM64.tar.xz -[aarch64,linux,"latest:<=20.1.0"]: 20.1.0 = LLVM-20.1.0-Linux-ARM64.tar.xz -[aarch64,linux,"latest:<=20.1.0,>17.0.4,!=19.1.7"]: 20.1.0 = LLVM-20.1.0-Linux-ARM64.tar.xz -[aarch64,linux,"latest:<20.1.0,>17.0.4,!=19.1.7"]: 19.1.6 = clang+llvm-19.1.6-aarch64-linux-gnu.tar.xz -[aarch64,linux,"latest:<20.1.0,>17.0.4"]: 19.1.7 = clang+llvm-19.1.7-aarch64-linux-gnu.tar.xz -[aarch64,raspbian,"latest:<=20.1.0"]: 20.1.0 = clang+llvm-20.1.0-armv7a-linux-gnueabihf.tar.gz -[aarch64,raspbian,"latest:<=20.1.0,>17.0.4,!=19.1.7"]: 20.1.0 = clang+llvm-20.1.0-armv7a-linux-gnueabihf.tar.gz -[aarch64,raspbian,"latest:<20.1.0,>17.0.4,!=19.1.7"]: 19.1.6 = clang+llvm-19.1.6-armv7a-linux-gnueabihf.tar.gz -[aarch64,raspbian,"latest:<20.1.0,>17.0.4"]: 19.1.7 = clang+llvm-19.1.7-armv7a-linux-gnueabihf.tar.gz -[aarch64,pc-solaris2.11,"latest:<=20.1.0"]: N/A -[aarch64,pc-solaris2.11,"latest:<=20.1.0,>17.0.4,!=19.1.7"]: N/A -[aarch64,pc-solaris2.11,"latest:<20.1.0,>17.0.4,!=19.1.7"]: N/A -[aarch64,pc-solaris2.11,"latest:<20.1.0,>17.0.4"]: N/A -[aarch64,windows,"latest:<=20.1.0"]: 20.1.0 = clang+llvm-20.1.0-aarch64-pc-windows-msvc.tar.xz -[aarch64,windows,"latest:<=20.1.0,>17.0.4,!=19.1.7"]: 20.1.0 = clang+llvm-20.1.0-aarch64-pc-windows-msvc.tar.xz -[aarch64,windows,"latest:<20.1.0,>17.0.4,!=19.1.7"]: N/A -[aarch64,windows,"latest:<20.1.0,>17.0.4"]: N/A -[powerpc64,darwin,"latest:<=20.1.0"]: 18.1.8 = clang+llvm-18.1.8-powerpc64-ibm-aix-7.2.tar.xz -[powerpc64,darwin,"latest:<=20.1.0,>17.0.4,!=19.1.7"]: 18.1.8 = clang+llvm-18.1.8-powerpc64-ibm-aix-7.2.tar.xz -[powerpc64,darwin,"latest:<20.1.0,>17.0.4,!=19.1.7"]: 18.1.8 = clang+llvm-18.1.8-powerpc64-ibm-aix-7.2.tar.xz -[powerpc64,darwin,"latest:<20.1.0,>17.0.4"]: 18.1.8 = clang+llvm-18.1.8-powerpc64-ibm-aix-7.2.tar.xz -[powerpc64,linux,"latest:<=20.1.0"]: 18.1.8 = clang+llvm-18.1.8-powerpc64-ibm-aix-7.2.tar.xz -[powerpc64,linux,"latest:<=20.1.0,>17.0.4,!=19.1.7"]: 18.1.8 = clang+llvm-18.1.8-powerpc64-ibm-aix-7.2.tar.xz -[powerpc64,linux,"latest:<20.1.0,>17.0.4,!=19.1.7"]: 18.1.8 = clang+llvm-18.1.8-powerpc64-ibm-aix-7.2.tar.xz -[powerpc64,linux,"latest:<20.1.0,>17.0.4"]: 18.1.8 = clang+llvm-18.1.8-powerpc64-ibm-aix-7.2.tar.xz -[powerpc64,raspbian,"latest:<=20.1.0"]: 20.1.0 = clang+llvm-20.1.0-armv7a-linux-gnueabihf.tar.gz -[powerpc64,raspbian,"latest:<=20.1.0,>17.0.4,!=19.1.7"]: 20.1.0 = clang+llvm-20.1.0-armv7a-linux-gnueabihf.tar.gz -[powerpc64,raspbian,"latest:<20.1.0,>17.0.4,!=19.1.7"]: 19.1.6 = clang+llvm-19.1.6-armv7a-linux-gnueabihf.tar.gz -[powerpc64,raspbian,"latest:<20.1.0,>17.0.4"]: 19.1.7 = clang+llvm-19.1.7-armv7a-linux-gnueabihf.tar.gz -[powerpc64,pc-solaris2.11,"latest:<=20.1.0"]: 18.1.8 = clang+llvm-18.1.8-powerpc64-ibm-aix-7.2.tar.xz -[powerpc64,pc-solaris2.11,"latest:<=20.1.0,>17.0.4,!=19.1.7"]: 18.1.8 = clang+llvm-18.1.8-powerpc64-ibm-aix-7.2.tar.xz -[powerpc64,pc-solaris2.11,"latest:<20.1.0,>17.0.4,!=19.1.7"]: 18.1.8 = clang+llvm-18.1.8-powerpc64-ibm-aix-7.2.tar.xz -[powerpc64,pc-solaris2.11,"latest:<20.1.0,>17.0.4"]: 18.1.8 = clang+llvm-18.1.8-powerpc64-ibm-aix-7.2.tar.xz -[powerpc64,windows,"latest:<=20.1.0"]: 18.1.8 = clang+llvm-18.1.8-powerpc64-ibm-aix-7.2.tar.xz -[powerpc64,windows,"latest:<=20.1.0,>17.0.4,!=19.1.7"]: 18.1.8 = clang+llvm-18.1.8-powerpc64-ibm-aix-7.2.tar.xz -[powerpc64,windows,"latest:<20.1.0,>17.0.4,!=19.1.7"]: 18.1.8 = clang+llvm-18.1.8-powerpc64-ibm-aix-7.2.tar.xz -[powerpc64,windows,"latest:<20.1.0,>17.0.4"]: 18.1.8 = clang+llvm-18.1.8-powerpc64-ibm-aix-7.2.tar.xz -[powerpc64le,darwin,"latest:<=20.1.0"]: 18.1.8 = clang+llvm-18.1.8-powerpc64le-linux-rhel-8.8.tar.xz -[powerpc64le,darwin,"latest:<=20.1.0,>17.0.4,!=19.1.7"]: 18.1.8 = clang+llvm-18.1.8-powerpc64le-linux-rhel-8.8.tar.xz -[powerpc64le,darwin,"latest:<20.1.0,>17.0.4,!=19.1.7"]: 18.1.8 = clang+llvm-18.1.8-powerpc64le-linux-rhel-8.8.tar.xz -[powerpc64le,darwin,"latest:<20.1.0,>17.0.4"]: 18.1.8 = clang+llvm-18.1.8-powerpc64le-linux-rhel-8.8.tar.xz -[powerpc64le,linux,"latest:<=20.1.0"]: 18.1.8 = clang+llvm-18.1.8-powerpc64le-linux-rhel-8.8.tar.xz -[powerpc64le,linux,"latest:<=20.1.0,>17.0.4,!=19.1.7"]: 18.1.8 = clang+llvm-18.1.8-powerpc64le-linux-rhel-8.8.tar.xz -[powerpc64le,linux,"latest:<20.1.0,>17.0.4,!=19.1.7"]: 18.1.8 = clang+llvm-18.1.8-powerpc64le-linux-rhel-8.8.tar.xz -[powerpc64le,linux,"latest:<20.1.0,>17.0.4"]: 18.1.8 = clang+llvm-18.1.8-powerpc64le-linux-rhel-8.8.tar.xz -[powerpc64le,raspbian,"latest:<=20.1.0"]: 20.1.0 = clang+llvm-20.1.0-armv7a-linux-gnueabihf.tar.gz -[powerpc64le,raspbian,"latest:<=20.1.0,>17.0.4,!=19.1.7"]: 20.1.0 = clang+llvm-20.1.0-armv7a-linux-gnueabihf.tar.gz -[powerpc64le,raspbian,"latest:<20.1.0,>17.0.4,!=19.1.7"]: 19.1.6 = clang+llvm-19.1.6-armv7a-linux-gnueabihf.tar.gz -[powerpc64le,raspbian,"latest:<20.1.0,>17.0.4"]: 19.1.7 = clang+llvm-19.1.7-armv7a-linux-gnueabihf.tar.gz -[powerpc64le,pc-solaris2.11,"latest:<=20.1.0"]: 18.1.8 = clang+llvm-18.1.8-powerpc64le-linux-rhel-8.8.tar.xz -[powerpc64le,pc-solaris2.11,"latest:<=20.1.0,>17.0.4,!=19.1.7"]: 18.1.8 = clang+llvm-18.1.8-powerpc64le-linux-rhel-8.8.tar.xz -[powerpc64le,pc-solaris2.11,"latest:<20.1.0,>17.0.4,!=19.1.7"]: 18.1.8 = clang+llvm-18.1.8-powerpc64le-linux-rhel-8.8.tar.xz -[powerpc64le,pc-solaris2.11,"latest:<20.1.0,>17.0.4"]: 18.1.8 = clang+llvm-18.1.8-powerpc64le-linux-rhel-8.8.tar.xz -[powerpc64le,windows,"latest:<=20.1.0"]: 18.1.8 = clang+llvm-18.1.8-powerpc64le-linux-rhel-8.8.tar.xz -[powerpc64le,windows,"latest:<=20.1.0,>17.0.4,!=19.1.7"]: 18.1.8 = clang+llvm-18.1.8-powerpc64le-linux-rhel-8.8.tar.xz -[powerpc64le,windows,"latest:<20.1.0,>17.0.4,!=19.1.7"]: 18.1.8 = clang+llvm-18.1.8-powerpc64le-linux-rhel-8.8.tar.xz -[powerpc64le,windows,"latest:<20.1.0,>17.0.4"]: 18.1.8 = clang+llvm-18.1.8-powerpc64le-linux-rhel-8.8.tar.xz -[sparcv9,darwin,"latest:<=20.1.0"]: 18.1.6 = clang+llvm-18.1.6-sparcv9-sun-solaris2.11.tar.xz -[sparcv9,darwin,"latest:<=20.1.0,>17.0.4,!=19.1.7"]: 18.1.6 = clang+llvm-18.1.6-sparcv9-sun-solaris2.11.tar.xz -[sparcv9,darwin,"latest:<20.1.0,>17.0.4,!=19.1.7"]: 18.1.6 = clang+llvm-18.1.6-sparcv9-sun-solaris2.11.tar.xz -[sparcv9,darwin,"latest:<20.1.0,>17.0.4"]: 18.1.6 = clang+llvm-18.1.6-sparcv9-sun-solaris2.11.tar.xz -[sparcv9,linux,"latest:<=20.1.0"]: 18.1.6 = clang+llvm-18.1.6-sparcv9-sun-solaris2.11.tar.xz -[sparcv9,linux,"latest:<=20.1.0,>17.0.4,!=19.1.7"]: 18.1.6 = clang+llvm-18.1.6-sparcv9-sun-solaris2.11.tar.xz -[sparcv9,linux,"latest:<20.1.0,>17.0.4,!=19.1.7"]: 18.1.6 = clang+llvm-18.1.6-sparcv9-sun-solaris2.11.tar.xz -[sparcv9,linux,"latest:<20.1.0,>17.0.4"]: 18.1.6 = clang+llvm-18.1.6-sparcv9-sun-solaris2.11.tar.xz -[sparcv9,raspbian,"latest:<=20.1.0"]: 20.1.0 = clang+llvm-20.1.0-armv7a-linux-gnueabihf.tar.gz -[sparcv9,raspbian,"latest:<=20.1.0,>17.0.4,!=19.1.7"]: 20.1.0 = clang+llvm-20.1.0-armv7a-linux-gnueabihf.tar.gz -[sparcv9,raspbian,"latest:<20.1.0,>17.0.4,!=19.1.7"]: 19.1.6 = clang+llvm-19.1.6-armv7a-linux-gnueabihf.tar.gz -[sparcv9,raspbian,"latest:<20.1.0,>17.0.4"]: 19.1.7 = clang+llvm-19.1.7-armv7a-linux-gnueabihf.tar.gz -[sparcv9,pc-solaris2.11,"latest:<=20.1.0"]: 18.1.6 = clang+llvm-18.1.6-sparcv9-sun-solaris2.11.tar.xz -[sparcv9,pc-solaris2.11,"latest:<=20.1.0,>17.0.4,!=19.1.7"]: 18.1.6 = clang+llvm-18.1.6-sparcv9-sun-solaris2.11.tar.xz -[sparcv9,pc-solaris2.11,"latest:<20.1.0,>17.0.4,!=19.1.7"]: 18.1.6 = clang+llvm-18.1.6-sparcv9-sun-solaris2.11.tar.xz -[sparcv9,pc-solaris2.11,"latest:<20.1.0,>17.0.4"]: 18.1.6 = clang+llvm-18.1.6-sparcv9-sun-solaris2.11.tar.xz -[sparcv9,windows,"latest:<=20.1.0"]: 18.1.6 = clang+llvm-18.1.6-sparcv9-sun-solaris2.11.tar.xz -[sparcv9,windows,"latest:<=20.1.0,>17.0.4,!=19.1.7"]: 18.1.6 = clang+llvm-18.1.6-sparcv9-sun-solaris2.11.tar.xz -[sparcv9,windows,"latest:<20.1.0,>17.0.4,!=19.1.7"]: 18.1.6 = clang+llvm-18.1.6-sparcv9-sun-solaris2.11.tar.xz -[sparcv9,windows,"latest:<20.1.0,>17.0.4"]: 18.1.6 = clang+llvm-18.1.6-sparcv9-sun-solaris2.11.tar.xz -[x86_64,darwin,"latest:<=20.1.0"]: 19.1.7 = LLVM-19.1.7-macOS-X64.tar.xz -[x86_64,darwin,"latest:<=20.1.0,>17.0.4,!=19.1.7"]: 19.1.6 = LLVM-19.1.6-macOS-X64.tar.xz -[x86_64,darwin,"latest:<20.1.0,>17.0.4,!=19.1.7"]: 19.1.6 = LLVM-19.1.6-macOS-X64.tar.xz -[x86_64,darwin,"latest:<20.1.0,>17.0.4"]: 19.1.7 = LLVM-19.1.7-macOS-X64.tar.xz -[x86_64,linux,"latest:<=20.1.0"]: 20.1.0 = LLVM-20.1.0-Linux-X64.tar.xz -[x86_64,linux,"latest:<=20.1.0,>17.0.4,!=19.1.7"]: 20.1.0 = LLVM-20.1.0-Linux-X64.tar.xz -[x86_64,linux,"latest:<20.1.0,>17.0.4,!=19.1.7"]: 19.1.6 = LLVM-19.1.6-Linux-X64.tar.xz -[x86_64,linux,"latest:<20.1.0,>17.0.4"]: 19.1.7 = LLVM-19.1.7-Linux-X64.tar.xz -[x86_64,raspbian,"latest:<=20.1.0"]: 20.1.0 = clang+llvm-20.1.0-armv7a-linux-gnueabihf.tar.gz -[x86_64,raspbian,"latest:<=20.1.0,>17.0.4,!=19.1.7"]: 20.1.0 = clang+llvm-20.1.0-armv7a-linux-gnueabihf.tar.gz -[x86_64,raspbian,"latest:<20.1.0,>17.0.4,!=19.1.7"]: 19.1.6 = clang+llvm-19.1.6-armv7a-linux-gnueabihf.tar.gz -[x86_64,raspbian,"latest:<20.1.0,>17.0.4"]: 19.1.7 = clang+llvm-19.1.7-armv7a-linux-gnueabihf.tar.gz -[x86_64,pc-solaris2.11,"latest:<=20.1.0"]: 18.1.6 = clang+llvm-18.1.6-amd64-pc-solaris2.11.tar.xz -[x86_64,pc-solaris2.11,"latest:<=20.1.0,>17.0.4,!=19.1.7"]: 18.1.6 = clang+llvm-18.1.6-amd64-pc-solaris2.11.tar.xz -[x86_64,pc-solaris2.11,"latest:<20.1.0,>17.0.4,!=19.1.7"]: 18.1.6 = clang+llvm-18.1.6-amd64-pc-solaris2.11.tar.xz -[x86_64,pc-solaris2.11,"latest:<20.1.0,>17.0.4"]: 18.1.6 = clang+llvm-18.1.6-amd64-pc-solaris2.11.tar.xz -[x86_64,windows,"latest:<=20.1.0"]: 20.1.0 = clang+llvm-20.1.0-x86_64-pc-windows-msvc.tar.xz -[x86_64,windows,"latest:<=20.1.0,>17.0.4,!=19.1.7"]: 20.1.0 = clang+llvm-20.1.0-x86_64-pc-windows-msvc.tar.xz -[x86_64,windows,"latest:<20.1.0,>17.0.4,!=19.1.7"]: 19.1.6 = clang+llvm-19.1.6-x86_64-pc-windows-msvc.tar.xz -[x86_64,windows,"latest:<20.1.0,>17.0.4"]: 19.1.7 = clang+llvm-19.1.7-x86_64-pc-windows-msvc.tar.xz +[aarch64,darwin,'latest:<=20.1.0']: 20.1.0 = LLVM-20.1.0-macOS-ARM64.tar.xz +[aarch64,darwin,'latest:<=20.1.0,>17.0.4,!=19.1.7']: 20.1.0 = LLVM-20.1.0-macOS-ARM64.tar.xz +[aarch64,darwin,'latest:<20.1.0,>17.0.4,!=19.1.7']: 19.1.6 = LLVM-19.1.6-macOS-ARM64.tar.xz +[aarch64,darwin,'latest:<20.1.0,>17.0.4']: 19.1.7 = LLVM-19.1.7-macOS-ARM64.tar.xz +[aarch64,darwin,'latest:>=15.0.6,<16']: 15.0.7 = clang+llvm-15.0.7-arm64-apple-darwin22.0.tar.xz +[aarch64,darwin,'first:>=15.0.6,<16']: 15.0.6 = clang+llvm-15.0.6-arm64-apple-darwin21.0.tar.xz +[aarch64,linux,ubuntu,0,'latest:<=20.1.0']: 20.1.0 = LLVM-20.1.0-Linux-ARM64.tar.xz +[aarch64,linux,ubuntu,0,'latest:<=20.1.0,>17.0.4,!=19.1.7']: 20.1.0 = LLVM-20.1.0-Linux-ARM64.tar.xz +[aarch64,linux,ubuntu,0,'latest:<20.1.0,>17.0.4,!=19.1.7']: 19.1.6 = clang+llvm-19.1.6-aarch64-linux-gnu.tar.xz +[aarch64,linux,ubuntu,0,'latest:<20.1.0,>17.0.4']: 19.1.7 = clang+llvm-19.1.7-aarch64-linux-gnu.tar.xz +[aarch64,linux,ubuntu,0,'latest:>=15.0.6,<16']: 15.0.6 = clang+llvm-15.0.6-aarch64-linux-gnu.tar.xz +[aarch64,linux,ubuntu,0,'first:>=15.0.6,<16']: 15.0.6 = clang+llvm-15.0.6-aarch64-linux-gnu.tar.xz +[aarch64,linux,raspbian,0,'latest:<=20.1.0']: 20.1.0 = LLVM-20.1.0-Linux-ARM64.tar.xz +[aarch64,linux,raspbian,0,'latest:<=20.1.0,>17.0.4,!=19.1.7']: 20.1.0 = LLVM-20.1.0-Linux-ARM64.tar.xz +[aarch64,linux,raspbian,0,'latest:<20.1.0,>17.0.4,!=19.1.7']: 19.1.6 = clang+llvm-19.1.6-aarch64-linux-gnu.tar.xz +[aarch64,linux,raspbian,0,'latest:<20.1.0,>17.0.4']: 19.1.7 = clang+llvm-19.1.7-aarch64-linux-gnu.tar.xz +[aarch64,linux,raspbian,0,'latest:>=15.0.6,<16']: 15.0.6 = clang+llvm-15.0.6-aarch64-linux-gnu.tar.xz +[aarch64,linux,raspbian,0,'first:>=15.0.6,<16']: 15.0.6 = clang+llvm-15.0.6-aarch64-linux-gnu.tar.xz +[aarch64,linux,rhel,0,'latest:<=20.1.0']: 20.1.0 = LLVM-20.1.0-Linux-ARM64.tar.xz +[aarch64,linux,rhel,0,'latest:<=20.1.0,>17.0.4,!=19.1.7']: 20.1.0 = LLVM-20.1.0-Linux-ARM64.tar.xz +[aarch64,linux,rhel,0,'latest:<20.1.0,>17.0.4,!=19.1.7']: 19.1.6 = clang+llvm-19.1.6-aarch64-linux-gnu.tar.xz +[aarch64,linux,rhel,0,'latest:<20.1.0,>17.0.4']: 19.1.7 = clang+llvm-19.1.7-aarch64-linux-gnu.tar.xz +[aarch64,linux,rhel,0,'latest:>=15.0.6,<16']: 15.0.6 = clang+llvm-15.0.6-aarch64-linux-gnu.tar.xz +[aarch64,linux,rhel,0,'first:>=15.0.6,<16']: 15.0.6 = clang+llvm-15.0.6-aarch64-linux-gnu.tar.xz +[aarch64,windows,'latest:<=20.1.0']: 20.1.0 = clang+llvm-20.1.0-aarch64-pc-windows-msvc.tar.xz +[aarch64,windows,'latest:<=20.1.0,>17.0.4,!=19.1.7']: 20.1.0 = clang+llvm-20.1.0-aarch64-pc-windows-msvc.tar.xz +[aarch64,windows,"latest:<20.1.0,>17.0.4,!=19.1.7"]: ERROR: No matching distribution found. +[aarch64,windows,"latest:<20.1.0,>17.0.4"]: ERROR: No matching distribution found. +[aarch64,windows,"latest:>=15.0.6,<16"]: ERROR: No matching distribution found. +[aarch64,windows,"first:>=15.0.6,<16"]: ERROR: No matching distribution found. +[armv7a,darwin,"latest:<=20.1.0"]: ERROR: No matching distribution found. +[armv7a,darwin,"latest:<=20.1.0,>17.0.4,!=19.1.7"]: ERROR: No matching distribution found. +[armv7a,darwin,"latest:<20.1.0,>17.0.4,!=19.1.7"]: ERROR: No matching distribution found. +[armv7a,darwin,"latest:<20.1.0,>17.0.4"]: ERROR: No matching distribution found. +[armv7a,darwin,"latest:>=15.0.6,<16"]: ERROR: No matching distribution found. +[armv7a,darwin,"first:>=15.0.6,<16"]: ERROR: No matching distribution found. +[armv7a,linux,"latest:<=20.1.0"]: ERROR: No matching distribution found. +[armv7a,linux,"latest:<=20.1.0,>17.0.4,!=19.1.7"]: ERROR: No matching distribution found. +[armv7a,linux,"latest:<20.1.0,>17.0.4,!=19.1.7"]: ERROR: No matching distribution found. +[armv7a,linux,"latest:<20.1.0,>17.0.4"]: ERROR: No matching distribution found. +[armv7a,linux,"latest:>=15.0.6,<16"]: ERROR: No matching distribution found. +[armv7a,linux,"first:>=15.0.6,<16"]: ERROR: No matching distribution found. +[armv7a,linux,raspbian,0,'latest:<=20.1.0']: 20.1.0 = clang+llvm-20.1.0-armv7a-linux-gnueabihf.tar.gz +[armv7a,linux,raspbian,0,'latest:<=20.1.0,>17.0.4,!=19.1.7']: 20.1.0 = clang+llvm-20.1.0-armv7a-linux-gnueabihf.tar.gz +[armv7a,linux,raspbian,0,'latest:<20.1.0,>17.0.4,!=19.1.7']: 19.1.6 = clang+llvm-19.1.6-armv7a-linux-gnueabihf.tar.gz +[armv7a,linux,raspbian,0,'latest:<20.1.0,>17.0.4']: 19.1.7 = clang+llvm-19.1.7-armv7a-linux-gnueabihf.tar.gz +[armv7a,linux,raspbian,0,'latest:>=15.0.6,<16']: 15.0.6 = clang+llvm-15.0.6-armv7a-linux-gnueabihf.tar.xz +[armv7a,linux,raspbian,0,'first:>=15.0.6,<16']: 15.0.6 = clang+llvm-15.0.6-armv7a-linux-gnueabihf.tar.xz +[armv7a,linux,"latest:<=20.1.0"]: ERROR: No matching distribution found. +[armv7a,linux,"latest:<=20.1.0,>17.0.4,!=19.1.7"]: ERROR: No matching distribution found. +[armv7a,linux,"latest:<20.1.0,>17.0.4,!=19.1.7"]: ERROR: No matching distribution found. +[armv7a,linux,"latest:<20.1.0,>17.0.4"]: ERROR: No matching distribution found. +[armv7a,linux,"latest:>=15.0.6,<16"]: ERROR: No matching distribution found. +[armv7a,linux,"first:>=15.0.6,<16"]: ERROR: No matching distribution found. +[armv7a,windows,"latest:<=20.1.0"]: ERROR: No matching distribution found. +[armv7a,windows,"latest:<=20.1.0,>17.0.4,!=19.1.7"]: ERROR: No matching distribution found. +[armv7a,windows,"latest:<20.1.0,>17.0.4,!=19.1.7"]: ERROR: No matching distribution found. +[armv7a,windows,"latest:<20.1.0,>17.0.4"]: ERROR: No matching distribution found. +[armv7a,windows,"latest:>=15.0.6,<16"]: ERROR: No matching distribution found. +[armv7a,windows,"first:>=15.0.6,<16"]: ERROR: No matching distribution found. +[x86_64,darwin,'latest:<=20.1.0']: 19.1.7 = LLVM-19.1.7-macOS-X64.tar.xz +[x86_64,darwin,'latest:<=20.1.0,>17.0.4,!=19.1.7']: 19.1.6 = LLVM-19.1.6-macOS-X64.tar.xz +[x86_64,darwin,'latest:<20.1.0,>17.0.4,!=19.1.7']: 19.1.6 = LLVM-19.1.6-macOS-X64.tar.xz +[x86_64,darwin,'latest:<20.1.0,>17.0.4']: 19.1.7 = LLVM-19.1.7-macOS-X64.tar.xz +[x86_64,darwin,'latest:>=15.0.6,<16']: 15.0.7 = clang+llvm-15.0.7-x86_64-apple-darwin21.0.tar.xz +[x86_64,darwin,'first:>=15.0.6,<16']: 15.0.7 = clang+llvm-15.0.7-x86_64-apple-darwin21.0.tar.xz +[x86_64,linux,ubuntu,0,'latest:<=20.1.0']: 20.1.0 = LLVM-20.1.0-Linux-X64.tar.xz +[x86_64,linux,ubuntu,0,'latest:<=20.1.0,>17.0.4,!=19.1.7']: 20.1.0 = LLVM-20.1.0-Linux-X64.tar.xz +[x86_64,linux,ubuntu,0,'latest:<20.1.0,>17.0.4,!=19.1.7']: 19.1.6 = LLVM-19.1.6-Linux-X64.tar.xz +[x86_64,linux,ubuntu,0,'latest:<20.1.0,>17.0.4']: 19.1.7 = LLVM-19.1.7-Linux-X64.tar.xz +[x86_64,linux,ubuntu,0,'latest:>=15.0.6,<16']: 15.0.6 = clang+llvm-15.0.6-x86_64-linux-gnu-ubuntu-18.04.tar.xz +[x86_64,linux,ubuntu,0,'first:>=15.0.6,<16']: 15.0.6 = clang+llvm-15.0.6-x86_64-linux-gnu-ubuntu-18.04.tar.xz +[x86_64,linux,raspbian,0,'latest:<=20.1.0']: 20.1.0 = LLVM-20.1.0-Linux-X64.tar.xz +[x86_64,linux,raspbian,0,'latest:<=20.1.0,>17.0.4,!=19.1.7']: 20.1.0 = LLVM-20.1.0-Linux-X64.tar.xz +[x86_64,linux,raspbian,0,'latest:<20.1.0,>17.0.4,!=19.1.7']: 19.1.6 = LLVM-19.1.6-Linux-X64.tar.xz +[x86_64,linux,raspbian,0,'latest:<20.1.0,>17.0.4']: 19.1.7 = LLVM-19.1.7-Linux-X64.tar.xz +[x86_64,linux,"latest:>=15.0.6,<16"]: ERROR: No matching distribution found. +[x86_64,linux,"first:>=15.0.6,<16"]: ERROR: No matching distribution found. +[x86_64,linux,rhel,0,'latest:<=20.1.0']: 20.1.0 = LLVM-20.1.0-Linux-X64.tar.xz +[x86_64,linux,rhel,0,'latest:<=20.1.0,>17.0.4,!=19.1.7']: 20.1.0 = LLVM-20.1.0-Linux-X64.tar.xz +[x86_64,linux,rhel,0,'latest:<20.1.0,>17.0.4,!=19.1.7']: 19.1.6 = LLVM-19.1.6-Linux-X64.tar.xz +[x86_64,linux,rhel,0,'latest:<20.1.0,>17.0.4']: 19.1.7 = LLVM-19.1.7-Linux-X64.tar.xz +[x86_64,linux,rhel,0,'latest:>=15.0.6,<16']: 15.0.6 = clang+llvm-15.0.6-x86_64-linux-gnu-ubuntu-18.04.tar.xz +[x86_64,linux,rhel,0,'first:>=15.0.6,<16']: 15.0.6 = clang+llvm-15.0.6-x86_64-linux-gnu-ubuntu-18.04.tar.xz +[x86_64,windows,'latest:<=20.1.0']: 20.1.0 = clang+llvm-20.1.0-x86_64-pc-windows-msvc.tar.xz +[x86_64,windows,'latest:<=20.1.0,>17.0.4,!=19.1.7']: 20.1.0 = clang+llvm-20.1.0-x86_64-pc-windows-msvc.tar.xz +[x86_64,windows,'latest:<20.1.0,>17.0.4,!=19.1.7']: 19.1.6 = clang+llvm-19.1.6-x86_64-pc-windows-msvc.tar.xz +[x86_64,windows,'latest:<20.1.0,>17.0.4']: 19.1.7 = clang+llvm-19.1.7-x86_64-pc-windows-msvc.tar.xz +[x86_64,windows,"latest:>=15.0.6,<16"]: ERROR: No matching distribution found. +[x86_64,windows,"first:>=15.0.6,<16"]: ERROR: No matching distribution found. From baf774a87e29ee1e669dc4ae95af3acdbffb5cf7 Mon Sep 17 00:00:00 2001 From: helly25 Date: Sun, 11 May 2025 18:45:35 +0000 Subject: [PATCH 11/23] Example update# --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 881b2a3a1..d2274179d 100644 --- a/README.md +++ b/README.md @@ -133,8 +133,8 @@ In case of `first`, the first distribution matching the `condition` will be sele The condition consists of a commpara separated list of semver version comparisons supporting `<`, `<=`, `>`, `>=`, `==`, `!=`. Examples: -- `latest:<=20.1.0` -- `latest:<=20.1.0,>17.0.4,!=19.1.7` +- `latest:>=20.1.0` +- `latest:>17.0.4,!=19.1.7,<=20.1.0` - `first:>=15.0.6,<16` ### Selecting Toolchains From 1eea0e6c5d8f79b7a272b1028cbd4c0ce47d08ec Mon Sep 17 00:00:00 2001 From: helly25 Date: Sun, 11 May 2025 18:46:52 +0000 Subject: [PATCH 12/23] Readme update. --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index d2274179d..208a65c04 100644 --- a/README.md +++ b/README.md @@ -127,11 +127,11 @@ for how CC toolchains work in general. Version attributes can be requirements of the form `latest:` or `first:`. -In case of `latest`, the latest distribution matching the `condition` will be selected. +In case of `latest:`, the latest distribution matching the `condition` will be selected. -In case of `first`, the first distribution matching the `condition` will be selected. +In case of `first:`, the first distribution matching the `condition` will be selected. -The condition consists of a commpara separated list of semver version comparisons supporting `<`, `<=`, `>`, `>=`, `==`, `!=`. Examples: +The condition consists of a comma separated list of semver version comparisons supporting `<`, `<=`, `>`, `>=`, `==`, `!=`. Examples: - `latest:>=20.1.0` - `latest:>17.0.4,!=19.1.7,<=20.1.0` From 03d25407112223bf5daca3af6dea0ed066246568 Mon Sep 17 00:00:00 2001 From: helly25 Date: Sun, 11 May 2025 19:49:28 +0000 Subject: [PATCH 13/23] Update configure and tests. --- toolchain/internal/configure.bzl | 11 ++++--- toolchain/internal/llvm_distributions.bzl | 18 ++++++++--- .../llvm_requirements_test.golden.txt | 30 +++++++++++++++++++ 3 files changed, 49 insertions(+), 10 deletions(-) diff --git a/toolchain/internal/configure.bzl b/toolchain/internal/configure.bzl index 530c79585..13c819f82 100644 --- a/toolchain/internal/configure.bzl +++ b/toolchain/internal/configure.bzl @@ -37,10 +37,7 @@ load( _supported_targets = "SUPPORTED_TARGETS", _toolchain_tools = "toolchain_tools", ) -load( - "//toolchain/internal:llvm_distributions.bzl", - _latest_llvm_release_name_or_fail = "latest_llvm_release_name_or_fail", -) +load("//toolchain/internal:llvm_distributions.bzl", "required_llvm_release_name_rctx") load( "//toolchain/internal:sysroot.bzl", _default_sysroot_path = "default_sysroot_path", @@ -84,8 +81,10 @@ def llvm_config_impl(rctx): if not toolchain_root: fail("LLVM toolchain root missing for ({}, {})".format(os, arch)) (_key, llvm_version) = _exec_os_arch_dict_value(rctx, "llvm_versions") - if llvm_version.startswith("latest"): - (llvm_version, distribution) = _latest_llvm_release_name_or_fail(rctx, llvm_version) + if llvm_version.startswith("first") or llvm_version.startswith("latest"): + llvm_version, distribution, error = required_llvm_release_name_rctx(rctx, llvm_version) + if error: + fail(error) if llvm_version: print("\nINFO: Resolved latest LLVM version to {llvm_version}: {distribution}".format( distribution = distribution, diff --git a/toolchain/internal/llvm_distributions.bzl b/toolchain/internal/llvm_distributions.bzl index 61dfd3e46..3afa7cad9 100644 --- a/toolchain/internal/llvm_distributions.bzl +++ b/toolchain/internal/llvm_distributions.bzl @@ -1098,7 +1098,7 @@ def _find_llvm_basename_or_error(llvm_version, all_llvm_distributions, host_info def _parse_version_requirements(version_requirements): if version_requirements in ["latest", "first"]: - return [] + return None for prefix in ["latest:", "first:"]: if version_requirements.startswith(prefix): return versions.parse_requirements(version_requirements.removeprefix(prefix)) @@ -1111,22 +1111,30 @@ def _get_llvm_versions(*, version_requirements, all_llvm_distributions): for distribution in all_llvm_distributions.keys(): version = distribution.split("-")[1] llvm_versions[version] = None - if version_requirements.startswith("latest:"): + if version_requirements.startswith("latest"): return reversed(llvm_versions.keys()) else: return llvm_versions.keys() def _required_llvm_release_name(*, version_requirements, all_llvm_distributions, host_info): llvm_versions = _get_llvm_versions(version_requirements = version_requirements, all_llvm_distributions = all_llvm_distributions) - requires = _parse_version_requirements(version_requirements) + requirements = _parse_version_requirements(version_requirements) for llvm_version in llvm_versions: - if not versions.check_all_requirements(llvm_version, requires): + if requirements and not versions.check_all_requirements(llvm_version, requirements): continue basenames = _find_llvm_basename_list(llvm_version, all_llvm_distributions, host_info) if len(basenames) == 1: return llvm_version, basenames[0], None return None, None, "ERROR: No matching distribution found." +def required_llvm_release_name_rctx(rctx, llvm_version): + all_llvm_distributions = _get_all_llvm_distributions(rctx) + return _required_llvm_release_name( + version_requirements = llvm_version, + all_llvm_distributions = all_llvm_distributions, + host_info = host_info(rctx), + ) + def _contains_any(str, chars): for c in chars: if c in str: @@ -1420,6 +1428,8 @@ def _requirements_test_writer_impl(ctx): "latest:<20.1.0,>17.0.4", "latest:>=15.0.6,<16", "first:>=15.0.6,<16", + "latest", + "first", ] arch_list = [ "aarch64", diff --git a/toolchain/internal/llvm_requirements_test.golden.txt b/toolchain/internal/llvm_requirements_test.golden.txt index eb8cafac1..19400e50a 100644 --- a/toolchain/internal/llvm_requirements_test.golden.txt +++ b/toolchain/internal/llvm_requirements_test.golden.txt @@ -4,87 +4,117 @@ [aarch64,darwin,'latest:<20.1.0,>17.0.4']: 19.1.7 = LLVM-19.1.7-macOS-ARM64.tar.xz [aarch64,darwin,'latest:>=15.0.6,<16']: 15.0.7 = clang+llvm-15.0.7-arm64-apple-darwin22.0.tar.xz [aarch64,darwin,'first:>=15.0.6,<16']: 15.0.6 = clang+llvm-15.0.6-arm64-apple-darwin21.0.tar.xz +[aarch64,darwin,'latest']: 20.1.4 = LLVM-20.1.4-macOS-ARM64.tar.xz +[aarch64,darwin,'first']: 14.0.6 = clang+llvm-14.0.6-arm64-apple-darwin22.3.0.tar.xz [aarch64,linux,ubuntu,0,'latest:<=20.1.0']: 20.1.0 = LLVM-20.1.0-Linux-ARM64.tar.xz [aarch64,linux,ubuntu,0,'latest:<=20.1.0,>17.0.4,!=19.1.7']: 20.1.0 = LLVM-20.1.0-Linux-ARM64.tar.xz [aarch64,linux,ubuntu,0,'latest:<20.1.0,>17.0.4,!=19.1.7']: 19.1.6 = clang+llvm-19.1.6-aarch64-linux-gnu.tar.xz [aarch64,linux,ubuntu,0,'latest:<20.1.0,>17.0.4']: 19.1.7 = clang+llvm-19.1.7-aarch64-linux-gnu.tar.xz [aarch64,linux,ubuntu,0,'latest:>=15.0.6,<16']: 15.0.6 = clang+llvm-15.0.6-aarch64-linux-gnu.tar.xz [aarch64,linux,ubuntu,0,'first:>=15.0.6,<16']: 15.0.6 = clang+llvm-15.0.6-aarch64-linux-gnu.tar.xz +[aarch64,linux,ubuntu,0,'latest']: 20.1.4 = LLVM-20.1.4-Linux-ARM64.tar.xz +[aarch64,linux,ubuntu,0,'first']: 6.0.0 = clang+llvm-6.0.0-aarch64-linux-gnu.tar.xz [aarch64,linux,raspbian,0,'latest:<=20.1.0']: 20.1.0 = LLVM-20.1.0-Linux-ARM64.tar.xz [aarch64,linux,raspbian,0,'latest:<=20.1.0,>17.0.4,!=19.1.7']: 20.1.0 = LLVM-20.1.0-Linux-ARM64.tar.xz [aarch64,linux,raspbian,0,'latest:<20.1.0,>17.0.4,!=19.1.7']: 19.1.6 = clang+llvm-19.1.6-aarch64-linux-gnu.tar.xz [aarch64,linux,raspbian,0,'latest:<20.1.0,>17.0.4']: 19.1.7 = clang+llvm-19.1.7-aarch64-linux-gnu.tar.xz [aarch64,linux,raspbian,0,'latest:>=15.0.6,<16']: 15.0.6 = clang+llvm-15.0.6-aarch64-linux-gnu.tar.xz [aarch64,linux,raspbian,0,'first:>=15.0.6,<16']: 15.0.6 = clang+llvm-15.0.6-aarch64-linux-gnu.tar.xz +[aarch64,linux,raspbian,0,'latest']: 20.1.4 = LLVM-20.1.4-Linux-ARM64.tar.xz +[aarch64,linux,raspbian,0,'first']: 6.0.0 = clang+llvm-6.0.0-aarch64-linux-gnu.tar.xz [aarch64,linux,rhel,0,'latest:<=20.1.0']: 20.1.0 = LLVM-20.1.0-Linux-ARM64.tar.xz [aarch64,linux,rhel,0,'latest:<=20.1.0,>17.0.4,!=19.1.7']: 20.1.0 = LLVM-20.1.0-Linux-ARM64.tar.xz [aarch64,linux,rhel,0,'latest:<20.1.0,>17.0.4,!=19.1.7']: 19.1.6 = clang+llvm-19.1.6-aarch64-linux-gnu.tar.xz [aarch64,linux,rhel,0,'latest:<20.1.0,>17.0.4']: 19.1.7 = clang+llvm-19.1.7-aarch64-linux-gnu.tar.xz [aarch64,linux,rhel,0,'latest:>=15.0.6,<16']: 15.0.6 = clang+llvm-15.0.6-aarch64-linux-gnu.tar.xz [aarch64,linux,rhel,0,'first:>=15.0.6,<16']: 15.0.6 = clang+llvm-15.0.6-aarch64-linux-gnu.tar.xz +[aarch64,linux,rhel,0,'latest']: 20.1.4 = LLVM-20.1.4-Linux-ARM64.tar.xz +[aarch64,linux,rhel,0,'first']: 6.0.0 = clang+llvm-6.0.0-aarch64-linux-gnu.tar.xz [aarch64,windows,'latest:<=20.1.0']: 20.1.0 = clang+llvm-20.1.0-aarch64-pc-windows-msvc.tar.xz [aarch64,windows,'latest:<=20.1.0,>17.0.4,!=19.1.7']: 20.1.0 = clang+llvm-20.1.0-aarch64-pc-windows-msvc.tar.xz [aarch64,windows,"latest:<20.1.0,>17.0.4,!=19.1.7"]: ERROR: No matching distribution found. [aarch64,windows,"latest:<20.1.0,>17.0.4"]: ERROR: No matching distribution found. [aarch64,windows,"latest:>=15.0.6,<16"]: ERROR: No matching distribution found. [aarch64,windows,"first:>=15.0.6,<16"]: ERROR: No matching distribution found. +[aarch64,windows,'latest']: 20.1.3 = clang+llvm-20.1.3-aarch64-pc-windows-msvc.tar.xz +[aarch64,windows,'first']: 20.1.0 = clang+llvm-20.1.0-aarch64-pc-windows-msvc.tar.xz [armv7a,darwin,"latest:<=20.1.0"]: ERROR: No matching distribution found. [armv7a,darwin,"latest:<=20.1.0,>17.0.4,!=19.1.7"]: ERROR: No matching distribution found. [armv7a,darwin,"latest:<20.1.0,>17.0.4,!=19.1.7"]: ERROR: No matching distribution found. [armv7a,darwin,"latest:<20.1.0,>17.0.4"]: ERROR: No matching distribution found. [armv7a,darwin,"latest:>=15.0.6,<16"]: ERROR: No matching distribution found. [armv7a,darwin,"first:>=15.0.6,<16"]: ERROR: No matching distribution found. +[armv7a,darwin,"latest"]: ERROR: No matching distribution found. +[armv7a,darwin,"first"]: ERROR: No matching distribution found. [armv7a,linux,"latest:<=20.1.0"]: ERROR: No matching distribution found. [armv7a,linux,"latest:<=20.1.0,>17.0.4,!=19.1.7"]: ERROR: No matching distribution found. [armv7a,linux,"latest:<20.1.0,>17.0.4,!=19.1.7"]: ERROR: No matching distribution found. [armv7a,linux,"latest:<20.1.0,>17.0.4"]: ERROR: No matching distribution found. [armv7a,linux,"latest:>=15.0.6,<16"]: ERROR: No matching distribution found. [armv7a,linux,"first:>=15.0.6,<16"]: ERROR: No matching distribution found. +[armv7a,linux,"latest"]: ERROR: No matching distribution found. +[armv7a,linux,"first"]: ERROR: No matching distribution found. [armv7a,linux,raspbian,0,'latest:<=20.1.0']: 20.1.0 = clang+llvm-20.1.0-armv7a-linux-gnueabihf.tar.gz [armv7a,linux,raspbian,0,'latest:<=20.1.0,>17.0.4,!=19.1.7']: 20.1.0 = clang+llvm-20.1.0-armv7a-linux-gnueabihf.tar.gz [armv7a,linux,raspbian,0,'latest:<20.1.0,>17.0.4,!=19.1.7']: 19.1.6 = clang+llvm-19.1.6-armv7a-linux-gnueabihf.tar.gz [armv7a,linux,raspbian,0,'latest:<20.1.0,>17.0.4']: 19.1.7 = clang+llvm-19.1.7-armv7a-linux-gnueabihf.tar.gz [armv7a,linux,raspbian,0,'latest:>=15.0.6,<16']: 15.0.6 = clang+llvm-15.0.6-armv7a-linux-gnueabihf.tar.xz [armv7a,linux,raspbian,0,'first:>=15.0.6,<16']: 15.0.6 = clang+llvm-15.0.6-armv7a-linux-gnueabihf.tar.xz +[armv7a,linux,raspbian,0,'latest']: 20.1.3 = clang+llvm-20.1.3-armv7a-linux-gnueabihf.tar.gz +[armv7a,linux,raspbian,0,'first']: 6.0.0 = clang+llvm-6.0.0-armv7a-linux-gnueabihf.tar.xz [armv7a,linux,"latest:<=20.1.0"]: ERROR: No matching distribution found. [armv7a,linux,"latest:<=20.1.0,>17.0.4,!=19.1.7"]: ERROR: No matching distribution found. [armv7a,linux,"latest:<20.1.0,>17.0.4,!=19.1.7"]: ERROR: No matching distribution found. [armv7a,linux,"latest:<20.1.0,>17.0.4"]: ERROR: No matching distribution found. [armv7a,linux,"latest:>=15.0.6,<16"]: ERROR: No matching distribution found. [armv7a,linux,"first:>=15.0.6,<16"]: ERROR: No matching distribution found. +[armv7a,linux,"latest"]: ERROR: No matching distribution found. +[armv7a,linux,"first"]: ERROR: No matching distribution found. [armv7a,windows,"latest:<=20.1.0"]: ERROR: No matching distribution found. [armv7a,windows,"latest:<=20.1.0,>17.0.4,!=19.1.7"]: ERROR: No matching distribution found. [armv7a,windows,"latest:<20.1.0,>17.0.4,!=19.1.7"]: ERROR: No matching distribution found. [armv7a,windows,"latest:<20.1.0,>17.0.4"]: ERROR: No matching distribution found. [armv7a,windows,"latest:>=15.0.6,<16"]: ERROR: No matching distribution found. [armv7a,windows,"first:>=15.0.6,<16"]: ERROR: No matching distribution found. +[armv7a,windows,"latest"]: ERROR: No matching distribution found. +[armv7a,windows,"first"]: ERROR: No matching distribution found. [x86_64,darwin,'latest:<=20.1.0']: 19.1.7 = LLVM-19.1.7-macOS-X64.tar.xz [x86_64,darwin,'latest:<=20.1.0,>17.0.4,!=19.1.7']: 19.1.6 = LLVM-19.1.6-macOS-X64.tar.xz [x86_64,darwin,'latest:<20.1.0,>17.0.4,!=19.1.7']: 19.1.6 = LLVM-19.1.6-macOS-X64.tar.xz [x86_64,darwin,'latest:<20.1.0,>17.0.4']: 19.1.7 = LLVM-19.1.7-macOS-X64.tar.xz [x86_64,darwin,'latest:>=15.0.6,<16']: 15.0.7 = clang+llvm-15.0.7-x86_64-apple-darwin21.0.tar.xz [x86_64,darwin,'first:>=15.0.6,<16']: 15.0.7 = clang+llvm-15.0.7-x86_64-apple-darwin21.0.tar.xz +[x86_64,darwin,'latest']: 20.1.3 = LLVM-20.1.3-macOS-X64.tar.xz +[x86_64,darwin,'first']: 6.0.0 = clang+llvm-6.0.0-x86_64-apple-darwin.tar.xz [x86_64,linux,ubuntu,0,'latest:<=20.1.0']: 20.1.0 = LLVM-20.1.0-Linux-X64.tar.xz [x86_64,linux,ubuntu,0,'latest:<=20.1.0,>17.0.4,!=19.1.7']: 20.1.0 = LLVM-20.1.0-Linux-X64.tar.xz [x86_64,linux,ubuntu,0,'latest:<20.1.0,>17.0.4,!=19.1.7']: 19.1.6 = LLVM-19.1.6-Linux-X64.tar.xz [x86_64,linux,ubuntu,0,'latest:<20.1.0,>17.0.4']: 19.1.7 = LLVM-19.1.7-Linux-X64.tar.xz [x86_64,linux,ubuntu,0,'latest:>=15.0.6,<16']: 15.0.6 = clang+llvm-15.0.6-x86_64-linux-gnu-ubuntu-18.04.tar.xz [x86_64,linux,ubuntu,0,'first:>=15.0.6,<16']: 15.0.6 = clang+llvm-15.0.6-x86_64-linux-gnu-ubuntu-18.04.tar.xz +[x86_64,linux,ubuntu,0,'latest']: 20.1.4 = LLVM-20.1.4-Linux-X64.tar.xz +[x86_64,linux,ubuntu,0,'first']: 6.0.0 = clang+llvm-6.0.0-x86_64-linux-gnu-ubuntu-16.04.tar.xz [x86_64,linux,raspbian,0,'latest:<=20.1.0']: 20.1.0 = LLVM-20.1.0-Linux-X64.tar.xz [x86_64,linux,raspbian,0,'latest:<=20.1.0,>17.0.4,!=19.1.7']: 20.1.0 = LLVM-20.1.0-Linux-X64.tar.xz [x86_64,linux,raspbian,0,'latest:<20.1.0,>17.0.4,!=19.1.7']: 19.1.6 = LLVM-19.1.6-Linux-X64.tar.xz [x86_64,linux,raspbian,0,'latest:<20.1.0,>17.0.4']: 19.1.7 = LLVM-19.1.7-Linux-X64.tar.xz [x86_64,linux,"latest:>=15.0.6,<16"]: ERROR: No matching distribution found. [x86_64,linux,"first:>=15.0.6,<16"]: ERROR: No matching distribution found. +[x86_64,linux,raspbian,0,'latest']: 20.1.4 = LLVM-20.1.4-Linux-X64.tar.xz +[x86_64,linux,raspbian,0,'first']: 19.1.0 = LLVM-19.1.0-Linux-X64.tar.xz [x86_64,linux,rhel,0,'latest:<=20.1.0']: 20.1.0 = LLVM-20.1.0-Linux-X64.tar.xz [x86_64,linux,rhel,0,'latest:<=20.1.0,>17.0.4,!=19.1.7']: 20.1.0 = LLVM-20.1.0-Linux-X64.tar.xz [x86_64,linux,rhel,0,'latest:<20.1.0,>17.0.4,!=19.1.7']: 19.1.6 = LLVM-19.1.6-Linux-X64.tar.xz [x86_64,linux,rhel,0,'latest:<20.1.0,>17.0.4']: 19.1.7 = LLVM-19.1.7-Linux-X64.tar.xz [x86_64,linux,rhel,0,'latest:>=15.0.6,<16']: 15.0.6 = clang+llvm-15.0.6-x86_64-linux-gnu-ubuntu-18.04.tar.xz [x86_64,linux,rhel,0,'first:>=15.0.6,<16']: 15.0.6 = clang+llvm-15.0.6-x86_64-linux-gnu-ubuntu-18.04.tar.xz +[x86_64,linux,rhel,0,'latest']: 20.1.4 = LLVM-20.1.4-Linux-X64.tar.xz +[x86_64,linux,rhel,0,'first']: 6.0.0 = clang+llvm-6.0.0-x86_64-linux-gnu-ubuntu-16.04.tar.xz [x86_64,windows,'latest:<=20.1.0']: 20.1.0 = clang+llvm-20.1.0-x86_64-pc-windows-msvc.tar.xz [x86_64,windows,'latest:<=20.1.0,>17.0.4,!=19.1.7']: 20.1.0 = clang+llvm-20.1.0-x86_64-pc-windows-msvc.tar.xz [x86_64,windows,'latest:<20.1.0,>17.0.4,!=19.1.7']: 19.1.6 = clang+llvm-19.1.6-x86_64-pc-windows-msvc.tar.xz [x86_64,windows,'latest:<20.1.0,>17.0.4']: 19.1.7 = clang+llvm-19.1.7-x86_64-pc-windows-msvc.tar.xz [x86_64,windows,"latest:>=15.0.6,<16"]: ERROR: No matching distribution found. [x86_64,windows,"first:>=15.0.6,<16"]: ERROR: No matching distribution found. +[x86_64,windows,'latest']: 20.1.4 = clang+llvm-20.1.4-x86_64-pc-windows-msvc.tar.xz +[x86_64,windows,'first']: 18.1.0 = clang+llvm-18.1.0-x86_64-pc-windows-msvc.tar.xz From 2c4f855ad161f65512bb5e7703447768a71b863b Mon Sep 17 00:00:00 2001 From: helly25 Date: Sun, 11 May 2025 20:29:36 +0000 Subject: [PATCH 14/23] Use better requiement identification that is in line with the actual use. --- toolchain/internal/llvm_distributions.bzl | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/toolchain/internal/llvm_distributions.bzl b/toolchain/internal/llvm_distributions.bzl index 3afa7cad9..6bd10c8eb 100644 --- a/toolchain/internal/llvm_distributions.bzl +++ b/toolchain/internal/llvm_distributions.bzl @@ -1135,9 +1135,9 @@ def required_llvm_release_name_rctx(rctx, llvm_version): host_info = host_info(rctx), ) -def _contains_any(str, chars): - for c in chars: - if c in str: +def _is_requirement(str): + for prefix in ["first", "latest"]: + if str == prefix or str.startswith(prefix + ":"): return True return False @@ -1153,7 +1153,7 @@ def _distribution_urls(rctx): if rctx.attr.distribution == "auto": rctx_host_info = host_info(rctx) - if _contains_any(llvm_version, ",:<>!="): + if _is_requirement(llvm_version): llvm_version, basename, error = _required_llvm_release_name( version_requirements = _parse_version_requirements(llvm_version), all_llvm_distributions = all_llvm_distributions, From 71912b3ac4c8da1f91297c5f1aee5ddb9e14c912 Mon Sep 17 00:00:00 2001 From: helly25 Date: Sun, 11 May 2025 20:51:46 +0000 Subject: [PATCH 15/23] Updates & tweaks --- README.md | 13 +++++++++---- toolchain/internal/configure.bzl | 4 ++-- toolchain/internal/llvm_distributions.bzl | 4 ++-- toolchain/internal/repo.bzl | 7 ++++--- 4 files changed, 17 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 208a65c04..c0e552461 100644 --- a/README.md +++ b/README.md @@ -125,14 +125,19 @@ for how CC toolchains work in general. ### Requirements -Version attributes can be requirements of the form `latest:` or `first:`. +Version attributes can be requirements of the form `first`, `first:`, +`latest` or `latest:`. -In case of `latest:`, the latest distribution matching the `condition` will be selected. +In case of `latest`, the latest distribution matching the optional `condition` +will be selected. -In case of `first:`, the first distribution matching the `condition` will be selected. +In case of `first`, the first distribution matching the optional `condition` +will be selected. -The condition consists of a comma separated list of semver version comparisons supporting `<`, `<=`, `>`, `>=`, `==`, `!=`. Examples: +The condition consists of a comma separated list of semver version comparisons +supporting `<`, `<=`, `>`, `>=`, `==`, `!=`. Examples: +- `latest` - `latest:>=20.1.0` - `latest:>17.0.4,!=19.1.7,<=20.1.0` - `first:>=15.0.6,<16` diff --git a/toolchain/internal/configure.bzl b/toolchain/internal/configure.bzl index 13c819f82..3405ebfa3 100644 --- a/toolchain/internal/configure.bzl +++ b/toolchain/internal/configure.bzl @@ -37,7 +37,7 @@ load( _supported_targets = "SUPPORTED_TARGETS", _toolchain_tools = "toolchain_tools", ) -load("//toolchain/internal:llvm_distributions.bzl", "required_llvm_release_name_rctx") +load("//toolchain/internal:llvm_distributions.bzl", "is_requirement", "required_llvm_release_name_rctx") load( "//toolchain/internal:sysroot.bzl", _default_sysroot_path = "default_sysroot_path", @@ -81,7 +81,7 @@ def llvm_config_impl(rctx): if not toolchain_root: fail("LLVM toolchain root missing for ({}, {})".format(os, arch)) (_key, llvm_version) = _exec_os_arch_dict_value(rctx, "llvm_versions") - if llvm_version.startswith("first") or llvm_version.startswith("latest"): + if is_requirement(llvm_version): llvm_version, distribution, error = required_llvm_release_name_rctx(rctx, llvm_version) if error: fail(error) diff --git a/toolchain/internal/llvm_distributions.bzl b/toolchain/internal/llvm_distributions.bzl index 6bd10c8eb..6df90c96c 100644 --- a/toolchain/internal/llvm_distributions.bzl +++ b/toolchain/internal/llvm_distributions.bzl @@ -1135,7 +1135,7 @@ def required_llvm_release_name_rctx(rctx, llvm_version): host_info = host_info(rctx), ) -def _is_requirement(str): +def is_requirement(str): for prefix in ["first", "latest"]: if str == prefix or str.startswith(prefix + ":"): return True @@ -1153,7 +1153,7 @@ def _distribution_urls(rctx): if rctx.attr.distribution == "auto": rctx_host_info = host_info(rctx) - if _is_requirement(llvm_version): + if is_requirement(llvm_version): llvm_version, basename, error = _required_llvm_release_name( version_requirements = _parse_version_requirements(llvm_version), all_llvm_distributions = all_llvm_distributions, diff --git a/toolchain/internal/repo.bzl b/toolchain/internal/repo.bzl index 4008fe2ea..0957c3c21 100644 --- a/toolchain/internal/repo.bzl +++ b/toolchain/internal/repo.bzl @@ -50,9 +50,10 @@ llvm_repo_attrs.update({ "llvm_version": attr.string( doc = ("One of the supported versions of LLVM, e.g. 12.0.0; used with the " + "`auto` value for the `distribution` attribute, and as a default value " + - "for the `llvm_versions` attribute. This value can be set to `latest` " + - "in order to find the latest LLVM version supported on the OS/arch. " + - "Further, requirements can be provided, e.g. `latest:>=17.0.4,!=19.0.7`."), + "for the `llvm_versions` attribute. This value can be set to `first` or " + + "`latest` in order to find the respective first or latest LLVM version " + + "supported on the OS/arch. Further, requirements can be provided, e.g. " + + "`latest:>=17.0.4,!=19.0.7`."), ), "extra_llvm_distributions": attr.string_dict( mandatory = False, From 01e888e9fc0bc8b76a004a89eb15b0afc336e5e4 Mon Sep 17 00:00:00 2001 From: helly25 Date: Sun, 11 May 2025 20:57:01 +0000 Subject: [PATCH 16/23] Ensure common_test_args are present --- tests/scripts/run_toolchain_tests.sh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tests/scripts/run_toolchain_tests.sh b/tests/scripts/run_toolchain_tests.sh index 1bc7cac24..e522129dc 100755 --- a/tests/scripts/run_toolchain_tests.sh +++ b/tests/scripts/run_toolchain_tests.sh @@ -41,5 +41,9 @@ targets=( "//toolchain/..." ) +if [[ -z "${common_test_args:-}" ]]; then + common_test_args=() +fi + "${bazel}" ${TEST_MIGRATION:+"--strict"} --bazelrc=/dev/null test \ "${common_test_args[@]}" "${test_args[@]}" "${targets[@]}" From 313c56fb44aa73df806bc84f24965a98c5634bcf Mon Sep 17 00:00:00 2001 From: helly25 Date: Sun, 11 May 2025 21:12:46 +0000 Subject: [PATCH 17/23] one test is not always supported. --- .github/workflows/tests.yml | 3 +-- tests/scripts/run_toolchain_tests.sh | 6 +++++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 6a1c081e8..f6e13910b 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -46,8 +46,7 @@ jobs: fail-fast: false matrix: os: [macos-latest, ubuntu-latest] - # TODO: Test with Bazel 8 after https://github.com/bazelbuild/bazel/pull/24154 has been released. - bazel_version: [7.x, latest] # Minimum supported Bazel version is 7.x + bazel_version: [7.x, latest] bzlmod: [true, false] runs-on: ${{ matrix.os }} steps: diff --git a/tests/scripts/run_toolchain_tests.sh b/tests/scripts/run_toolchain_tests.sh index e522129dc..5f1c2074e 100755 --- a/tests/scripts/run_toolchain_tests.sh +++ b/tests/scripts/run_toolchain_tests.sh @@ -45,5 +45,9 @@ if [[ -z "${common_test_args:-}" ]]; then common_test_args=() fi +if [[ "${USE_BAZEL_VERSION}" == "7.x" ]] || [[ "${USE_BZLMOD}" == "false" ]]; then + targets+=("-//toolchain/internal:llvm_distributions_select_no_error_test") +fi + "${bazel}" ${TEST_MIGRATION:+"--strict"} --bazelrc=/dev/null test \ - "${common_test_args[@]}" "${test_args[@]}" "${targets[@]}" + "${common_test_args[@]}" "${test_args[@]}" -- "${targets[@]}" From d38fda78f0c9e48ee327c4757d667e2e72525bb5 Mon Sep 17 00:00:00 2001 From: helly25 Date: Mon, 12 May 2025 09:13:35 +0000 Subject: [PATCH 18/23] Small improvements. Pre-filter eligible versions and ensure actual correct version order. --- toolchain/internal/llvm_distributions.bzl | 64 ++++++++++++++--------- 1 file changed, 40 insertions(+), 24 deletions(-) diff --git a/toolchain/internal/llvm_distributions.bzl b/toolchain/internal/llvm_distributions.bzl index 6df90c96c..f1ffdefda 100644 --- a/toolchain/internal/llvm_distributions.bzl +++ b/toolchain/internal/llvm_distributions.bzl @@ -1070,6 +1070,10 @@ def _find_llvm_basename_list(llvm_version, all_llvm_distributions, host_info): return [] def _find_llvm_basename_or_error(llvm_version, all_llvm_distributions, host_info): + all_llvm_distributions = _filter_llvm_distributions( + llvm_version = llvm_version, + all_llvm_distributions = all_llvm_distributions, + ) basenames = _find_llvm_basename_list(llvm_version, all_llvm_distributions, host_info) if len(basenames) > 1: return None, "ERROR: Multiple configurations found for version {llvm_version} on {os}/{dist_name}/{dist_version} with arch {arch}: [{basenames}].".format( @@ -1096,29 +1100,32 @@ def _find_llvm_basename_or_error(llvm_version, all_llvm_distributions, host_info return basenames[0], None -def _parse_version_requirements(version_requirements): - if version_requirements in ["latest", "first"]: +def _parse_version_or_requirements(version_or_requirements): + if version_or_requirements in ["latest", "first"]: return None for prefix in ["latest:", "first:"]: - if version_requirements.startswith(prefix): - return versions.parse_requirements(version_requirements.removeprefix(prefix)) - fail("ERROR: Invalid version requirements: '{version_requirements}'.".format( - version_requirements = version_requirements, + if version_or_requirements.startswith(prefix): + return versions.parse_requirements(version_or_requirements.removeprefix(prefix)) + fail("ERROR: Invalid version requirements: '{version_or_requirements}'.".format( + version_or_requirements = version_or_requirements, )) -def _get_llvm_versions(*, version_requirements, all_llvm_distributions): - llvm_versions = {} +def _get_version_from_distribution(distribution): + # We assume here that the `distribution` is a basename of the form `LLVM--...` or + # `clang+llvm--...`. + return distribution.split("-")[1] + +def _get_llvm_versions(*, version_or_requirements, all_llvm_distributions): + llvm_version_dict = {} for distribution in all_llvm_distributions.keys(): - version = distribution.split("-")[1] - llvm_versions[version] = None - if version_requirements.startswith("latest"): - return reversed(llvm_versions.keys()) - else: - return llvm_versions.keys() + version = _get_version_from_distribution(distribution) + llvm_version_dict[_parse_version(version)] = version -def _required_llvm_release_name(*, version_requirements, all_llvm_distributions, host_info): - llvm_versions = _get_llvm_versions(version_requirements = version_requirements, all_llvm_distributions = all_llvm_distributions) - requirements = _parse_version_requirements(version_requirements) + return [v for k, v in sorted(llvm_version_dict.items(), reverse = version_or_requirements.startswith("latest"))] + +def _required_llvm_release_name(*, version_or_requirements, all_llvm_distributions, host_info): + llvm_versions = _get_llvm_versions(version_or_requirements = version_or_requirements, all_llvm_distributions = all_llvm_distributions) + requirements = _parse_version_or_requirements(version_or_requirements) for llvm_version in llvm_versions: if requirements and not versions.check_all_requirements(llvm_version, requirements): continue @@ -1130,19 +1137,28 @@ def _required_llvm_release_name(*, version_requirements, all_llvm_distributions, def required_llvm_release_name_rctx(rctx, llvm_version): all_llvm_distributions = _get_all_llvm_distributions(rctx) return _required_llvm_release_name( - version_requirements = llvm_version, + version_or_requirements = llvm_version, all_llvm_distributions = all_llvm_distributions, host_info = host_info(rctx), ) -def is_requirement(str): - for prefix in ["first", "latest"]: - if str == prefix or str.startswith(prefix + ":"): +def is_requirement(version_or_requirement): + """Return whether `version_or_requirement` is likely a requirement (True) or should be a version.""" + for prefix in ["first:", "latest:"]: + if version_or_requirement.startswith(prefix) or version_or_requirement == prefix[:-1]: return True return False +def _filter_llvm_distributions(*, llvm_version, all_llvm_distributions): + """Return (distribution: sha) entries from `all_llvm_distributions` that match `llvm_version`.""" + result = {} + for k, v in all_llvm_distributions.items(): + if _get_version_from_distribution(k) == llvm_version: + result[k] = v + return result + def _distribution_urls(rctx): - """Return LLVM `urls`, `shha256` and `strip_prefix` for the given context.""" + """Return LLVM `urls`, `sha256` and `strip_prefix` for the given context.""" llvm_version = _get_llvm_version(rctx) all_llvm_distributions = _get_all_llvm_distributions( llvm_distributions = _llvm_distributions, @@ -1155,7 +1171,7 @@ def _distribution_urls(rctx): rctx_host_info = host_info(rctx) if is_requirement(llvm_version): llvm_version, basename, error = _required_llvm_release_name( - version_requirements = _parse_version_requirements(llvm_version), + version_or_requirements = _parse_version_or_requirements(llvm_version), all_llvm_distributions = all_llvm_distributions, host_info = rctx_host_info, ) @@ -1462,7 +1478,7 @@ def _requirements_test_writer_impl(ctx): dist = dist, ) llvm_version, basename, error = _required_llvm_release_name( - version_requirements = requirement, + version_or_requirements = requirement, all_llvm_distributions = all_llvm_distributions, host_info = host_info, ) From d28ef85ebc83a8e09936c3ec5d646eb7b5f28fb4 Mon Sep 17 00:00:00 2001 From: helly25 Date: Mon, 12 May 2025 10:26:56 +0000 Subject: [PATCH 19/23] Attribute `extra_llvm_distributions` must be a common attribute. --- toolchain/internal/llvm_distributions.bzl | 2 +- toolchain/internal/repo.bzl | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/toolchain/internal/llvm_distributions.bzl b/toolchain/internal/llvm_distributions.bzl index f1ffdefda..c39e7e92e 100644 --- a/toolchain/internal/llvm_distributions.bzl +++ b/toolchain/internal/llvm_distributions.bzl @@ -1171,7 +1171,7 @@ def _distribution_urls(rctx): rctx_host_info = host_info(rctx) if is_requirement(llvm_version): llvm_version, basename, error = _required_llvm_release_name( - version_or_requirements = _parse_version_or_requirements(llvm_version), + version_or_requirements = llvm_version, all_llvm_distributions = all_llvm_distributions, host_info = rctx_host_info, ) diff --git a/toolchain/internal/repo.bzl b/toolchain/internal/repo.bzl index 0957c3c21..c68f14a52 100644 --- a/toolchain/internal/repo.bzl +++ b/toolchain/internal/repo.bzl @@ -35,6 +35,13 @@ common_attrs = { "in the list of known llvm_distributions using the provided version. " + "If unset, a default value is set from the `llvm_version` attribute."), ), + "extra_llvm_distributions": attr.string_dict( + mandatory = False, + doc = ("A dictionary that maps distributions to their SHA256 values. " + + "It allows for simple additon of llvm distributiosn using the " + + "'utils/lvm_checksums.sh' tool. This also allows to use the " + + "distributions lists of future toolchain versions."), + ), "exec_os": attr.string( mandatory = False, doc = "Execution platform OS, if different from host OS.", @@ -55,13 +62,6 @@ llvm_repo_attrs.update({ "supported on the OS/arch. Further, requirements can be provided, e.g. " + "`latest:>=17.0.4,!=19.0.7`."), ), - "extra_llvm_distributions": attr.string_dict( - mandatory = False, - doc = ("A dictionary that maps distributions to their SHA256 values. " + - "It allows for simple additon of llvm distributiosn using the " + - "'utils/lvm_checksums.sh' tool. This also allows to use the " + - "distributions lists of future toolchain versions."), - ), "urls": attr.string_list_dict( mandatory = False, doc = ("URLs to LLVM pre-built binary distribution archives, keyed by host OS " + From 5bd90e9d228ee2cc9ec0e55d330e30a073bb5847 Mon Sep 17 00:00:00 2001 From: helly25 Date: Fri, 16 May 2025 16:01:10 +0000 Subject: [PATCH 20/23] sync --- .../llvm_requirements_test.golden.txt | 50 +++++++++---------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/toolchain/internal/llvm_requirements_test.golden.txt b/toolchain/internal/llvm_requirements_test.golden.txt index 19400e50a..a3f438bd5 100644 --- a/toolchain/internal/llvm_requirements_test.golden.txt +++ b/toolchain/internal/llvm_requirements_test.golden.txt @@ -12,7 +12,7 @@ [aarch64,linux,ubuntu,0,'latest:<20.1.0,>17.0.4']: 19.1.7 = clang+llvm-19.1.7-aarch64-linux-gnu.tar.xz [aarch64,linux,ubuntu,0,'latest:>=15.0.6,<16']: 15.0.6 = clang+llvm-15.0.6-aarch64-linux-gnu.tar.xz [aarch64,linux,ubuntu,0,'first:>=15.0.6,<16']: 15.0.6 = clang+llvm-15.0.6-aarch64-linux-gnu.tar.xz -[aarch64,linux,ubuntu,0,'latest']: 20.1.4 = LLVM-20.1.4-Linux-ARM64.tar.xz +[aarch64,linux,ubuntu,0,'latest']: 20.1.5 = LLVM-20.1.5-Linux-ARM64.tar.xz [aarch64,linux,ubuntu,0,'first']: 6.0.0 = clang+llvm-6.0.0-aarch64-linux-gnu.tar.xz [aarch64,linux,raspbian,0,'latest:<=20.1.0']: 20.1.0 = LLVM-20.1.0-Linux-ARM64.tar.xz [aarch64,linux,raspbian,0,'latest:<=20.1.0,>17.0.4,!=19.1.7']: 20.1.0 = LLVM-20.1.0-Linux-ARM64.tar.xz @@ -20,7 +20,7 @@ [aarch64,linux,raspbian,0,'latest:<20.1.0,>17.0.4']: 19.1.7 = clang+llvm-19.1.7-aarch64-linux-gnu.tar.xz [aarch64,linux,raspbian,0,'latest:>=15.0.6,<16']: 15.0.6 = clang+llvm-15.0.6-aarch64-linux-gnu.tar.xz [aarch64,linux,raspbian,0,'first:>=15.0.6,<16']: 15.0.6 = clang+llvm-15.0.6-aarch64-linux-gnu.tar.xz -[aarch64,linux,raspbian,0,'latest']: 20.1.4 = LLVM-20.1.4-Linux-ARM64.tar.xz +[aarch64,linux,raspbian,0,'latest']: 20.1.5 = LLVM-20.1.5-Linux-ARM64.tar.xz [aarch64,linux,raspbian,0,'first']: 6.0.0 = clang+llvm-6.0.0-aarch64-linux-gnu.tar.xz [aarch64,linux,rhel,0,'latest:<=20.1.0']: 20.1.0 = LLVM-20.1.0-Linux-ARM64.tar.xz [aarch64,linux,rhel,0,'latest:<=20.1.0,>17.0.4,!=19.1.7']: 20.1.0 = LLVM-20.1.0-Linux-ARM64.tar.xz @@ -28,7 +28,7 @@ [aarch64,linux,rhel,0,'latest:<20.1.0,>17.0.4']: 19.1.7 = clang+llvm-19.1.7-aarch64-linux-gnu.tar.xz [aarch64,linux,rhel,0,'latest:>=15.0.6,<16']: 15.0.6 = clang+llvm-15.0.6-aarch64-linux-gnu.tar.xz [aarch64,linux,rhel,0,'first:>=15.0.6,<16']: 15.0.6 = clang+llvm-15.0.6-aarch64-linux-gnu.tar.xz -[aarch64,linux,rhel,0,'latest']: 20.1.4 = LLVM-20.1.4-Linux-ARM64.tar.xz +[aarch64,linux,rhel,0,'latest']: 20.1.5 = LLVM-20.1.5-Linux-ARM64.tar.xz [aarch64,linux,rhel,0,'first']: 6.0.0 = clang+llvm-6.0.0-aarch64-linux-gnu.tar.xz [aarch64,windows,'latest:<=20.1.0']: 20.1.0 = clang+llvm-20.1.0-aarch64-pc-windows-msvc.tar.xz [aarch64,windows,'latest:<=20.1.0,>17.0.4,!=19.1.7']: 20.1.0 = clang+llvm-20.1.0-aarch64-pc-windows-msvc.tar.xz @@ -36,7 +36,7 @@ [aarch64,windows,"latest:<20.1.0,>17.0.4"]: ERROR: No matching distribution found. [aarch64,windows,"latest:>=15.0.6,<16"]: ERROR: No matching distribution found. [aarch64,windows,"first:>=15.0.6,<16"]: ERROR: No matching distribution found. -[aarch64,windows,'latest']: 20.1.3 = clang+llvm-20.1.3-aarch64-pc-windows-msvc.tar.xz +[aarch64,windows,'latest']: 20.1.5 = clang+llvm-20.1.5-aarch64-pc-windows-msvc.tar.xz [aarch64,windows,'first']: 20.1.0 = clang+llvm-20.1.0-aarch64-pc-windows-msvc.tar.xz [armv7a,darwin,"latest:<=20.1.0"]: ERROR: No matching distribution found. [armv7a,darwin,"latest:<=20.1.0,>17.0.4,!=19.1.7"]: ERROR: No matching distribution found. @@ -46,30 +46,30 @@ [armv7a,darwin,"first:>=15.0.6,<16"]: ERROR: No matching distribution found. [armv7a,darwin,"latest"]: ERROR: No matching distribution found. [armv7a,darwin,"first"]: ERROR: No matching distribution found. -[armv7a,linux,"latest:<=20.1.0"]: ERROR: No matching distribution found. -[armv7a,linux,"latest:<=20.1.0,>17.0.4,!=19.1.7"]: ERROR: No matching distribution found. -[armv7a,linux,"latest:<20.1.0,>17.0.4,!=19.1.7"]: ERROR: No matching distribution found. -[armv7a,linux,"latest:<20.1.0,>17.0.4"]: ERROR: No matching distribution found. -[armv7a,linux,"latest:>=15.0.6,<16"]: ERROR: No matching distribution found. -[armv7a,linux,"first:>=15.0.6,<16"]: ERROR: No matching distribution found. -[armv7a,linux,"latest"]: ERROR: No matching distribution found. -[armv7a,linux,"first"]: ERROR: No matching distribution found. +[armv7a,linux,ubuntu,0,'latest:<=20.1.0']: 20.1.0 = clang+llvm-20.1.0-armv7a-linux-gnueabihf.tar.gz +[armv7a,linux,ubuntu,0,'latest:<=20.1.0,>17.0.4,!=19.1.7']: 20.1.0 = clang+llvm-20.1.0-armv7a-linux-gnueabihf.tar.gz +[armv7a,linux,ubuntu,0,'latest:<20.1.0,>17.0.4,!=19.1.7']: 19.1.6 = clang+llvm-19.1.6-armv7a-linux-gnueabihf.tar.gz +[armv7a,linux,ubuntu,0,'latest:<20.1.0,>17.0.4']: 19.1.7 = clang+llvm-19.1.7-armv7a-linux-gnueabihf.tar.gz +[armv7a,linux,ubuntu,0,'latest:>=15.0.6,<16']: 15.0.6 = clang+llvm-15.0.6-armv7a-linux-gnueabihf.tar.xz +[armv7a,linux,ubuntu,0,'first:>=15.0.6,<16']: 15.0.6 = clang+llvm-15.0.6-armv7a-linux-gnueabihf.tar.xz +[armv7a,linux,ubuntu,0,'latest']: 20.1.5 = clang+llvm-20.1.5-armv7a-linux-gnueabihf.tar.gz +[armv7a,linux,ubuntu,0,'first']: 6.0.0 = clang+llvm-6.0.0-armv7a-linux-gnueabihf.tar.xz [armv7a,linux,raspbian,0,'latest:<=20.1.0']: 20.1.0 = clang+llvm-20.1.0-armv7a-linux-gnueabihf.tar.gz [armv7a,linux,raspbian,0,'latest:<=20.1.0,>17.0.4,!=19.1.7']: 20.1.0 = clang+llvm-20.1.0-armv7a-linux-gnueabihf.tar.gz [armv7a,linux,raspbian,0,'latest:<20.1.0,>17.0.4,!=19.1.7']: 19.1.6 = clang+llvm-19.1.6-armv7a-linux-gnueabihf.tar.gz [armv7a,linux,raspbian,0,'latest:<20.1.0,>17.0.4']: 19.1.7 = clang+llvm-19.1.7-armv7a-linux-gnueabihf.tar.gz [armv7a,linux,raspbian,0,'latest:>=15.0.6,<16']: 15.0.6 = clang+llvm-15.0.6-armv7a-linux-gnueabihf.tar.xz [armv7a,linux,raspbian,0,'first:>=15.0.6,<16']: 15.0.6 = clang+llvm-15.0.6-armv7a-linux-gnueabihf.tar.xz -[armv7a,linux,raspbian,0,'latest']: 20.1.3 = clang+llvm-20.1.3-armv7a-linux-gnueabihf.tar.gz +[armv7a,linux,raspbian,0,'latest']: 20.1.5 = clang+llvm-20.1.5-armv7a-linux-gnueabihf.tar.gz [armv7a,linux,raspbian,0,'first']: 6.0.0 = clang+llvm-6.0.0-armv7a-linux-gnueabihf.tar.xz -[armv7a,linux,"latest:<=20.1.0"]: ERROR: No matching distribution found. -[armv7a,linux,"latest:<=20.1.0,>17.0.4,!=19.1.7"]: ERROR: No matching distribution found. -[armv7a,linux,"latest:<20.1.0,>17.0.4,!=19.1.7"]: ERROR: No matching distribution found. -[armv7a,linux,"latest:<20.1.0,>17.0.4"]: ERROR: No matching distribution found. -[armv7a,linux,"latest:>=15.0.6,<16"]: ERROR: No matching distribution found. -[armv7a,linux,"first:>=15.0.6,<16"]: ERROR: No matching distribution found. -[armv7a,linux,"latest"]: ERROR: No matching distribution found. -[armv7a,linux,"first"]: ERROR: No matching distribution found. +[armv7a,linux,rhel,0,'latest:<=20.1.0']: 20.1.0 = clang+llvm-20.1.0-armv7a-linux-gnueabihf.tar.gz +[armv7a,linux,rhel,0,'latest:<=20.1.0,>17.0.4,!=19.1.7']: 20.1.0 = clang+llvm-20.1.0-armv7a-linux-gnueabihf.tar.gz +[armv7a,linux,rhel,0,'latest:<20.1.0,>17.0.4,!=19.1.7']: 19.1.6 = clang+llvm-19.1.6-armv7a-linux-gnueabihf.tar.gz +[armv7a,linux,rhel,0,'latest:<20.1.0,>17.0.4']: 19.1.7 = clang+llvm-19.1.7-armv7a-linux-gnueabihf.tar.gz +[armv7a,linux,rhel,0,'latest:>=15.0.6,<16']: 15.0.6 = clang+llvm-15.0.6-armv7a-linux-gnueabihf.tar.xz +[armv7a,linux,rhel,0,'first:>=15.0.6,<16']: 15.0.6 = clang+llvm-15.0.6-armv7a-linux-gnueabihf.tar.xz +[armv7a,linux,rhel,0,'latest']: 20.1.5 = clang+llvm-20.1.5-armv7a-linux-gnueabihf.tar.gz +[armv7a,linux,rhel,0,'first']: 6.0.0 = clang+llvm-6.0.0-armv7a-linux-gnueabihf.tar.xz [armv7a,windows,"latest:<=20.1.0"]: ERROR: No matching distribution found. [armv7a,windows,"latest:<=20.1.0,>17.0.4,!=19.1.7"]: ERROR: No matching distribution found. [armv7a,windows,"latest:<20.1.0,>17.0.4,!=19.1.7"]: ERROR: No matching distribution found. @@ -92,7 +92,7 @@ [x86_64,linux,ubuntu,0,'latest:<20.1.0,>17.0.4']: 19.1.7 = LLVM-19.1.7-Linux-X64.tar.xz [x86_64,linux,ubuntu,0,'latest:>=15.0.6,<16']: 15.0.6 = clang+llvm-15.0.6-x86_64-linux-gnu-ubuntu-18.04.tar.xz [x86_64,linux,ubuntu,0,'first:>=15.0.6,<16']: 15.0.6 = clang+llvm-15.0.6-x86_64-linux-gnu-ubuntu-18.04.tar.xz -[x86_64,linux,ubuntu,0,'latest']: 20.1.4 = LLVM-20.1.4-Linux-X64.tar.xz +[x86_64,linux,ubuntu,0,'latest']: 20.1.5 = LLVM-20.1.5-Linux-X64.tar.xz [x86_64,linux,ubuntu,0,'first']: 6.0.0 = clang+llvm-6.0.0-x86_64-linux-gnu-ubuntu-16.04.tar.xz [x86_64,linux,raspbian,0,'latest:<=20.1.0']: 20.1.0 = LLVM-20.1.0-Linux-X64.tar.xz [x86_64,linux,raspbian,0,'latest:<=20.1.0,>17.0.4,!=19.1.7']: 20.1.0 = LLVM-20.1.0-Linux-X64.tar.xz @@ -100,7 +100,7 @@ [x86_64,linux,raspbian,0,'latest:<20.1.0,>17.0.4']: 19.1.7 = LLVM-19.1.7-Linux-X64.tar.xz [x86_64,linux,"latest:>=15.0.6,<16"]: ERROR: No matching distribution found. [x86_64,linux,"first:>=15.0.6,<16"]: ERROR: No matching distribution found. -[x86_64,linux,raspbian,0,'latest']: 20.1.4 = LLVM-20.1.4-Linux-X64.tar.xz +[x86_64,linux,raspbian,0,'latest']: 20.1.5 = LLVM-20.1.5-Linux-X64.tar.xz [x86_64,linux,raspbian,0,'first']: 19.1.0 = LLVM-19.1.0-Linux-X64.tar.xz [x86_64,linux,rhel,0,'latest:<=20.1.0']: 20.1.0 = LLVM-20.1.0-Linux-X64.tar.xz [x86_64,linux,rhel,0,'latest:<=20.1.0,>17.0.4,!=19.1.7']: 20.1.0 = LLVM-20.1.0-Linux-X64.tar.xz @@ -108,7 +108,7 @@ [x86_64,linux,rhel,0,'latest:<20.1.0,>17.0.4']: 19.1.7 = LLVM-19.1.7-Linux-X64.tar.xz [x86_64,linux,rhel,0,'latest:>=15.0.6,<16']: 15.0.6 = clang+llvm-15.0.6-x86_64-linux-gnu-ubuntu-18.04.tar.xz [x86_64,linux,rhel,0,'first:>=15.0.6,<16']: 15.0.6 = clang+llvm-15.0.6-x86_64-linux-gnu-ubuntu-18.04.tar.xz -[x86_64,linux,rhel,0,'latest']: 20.1.4 = LLVM-20.1.4-Linux-X64.tar.xz +[x86_64,linux,rhel,0,'latest']: 20.1.5 = LLVM-20.1.5-Linux-X64.tar.xz [x86_64,linux,rhel,0,'first']: 6.0.0 = clang+llvm-6.0.0-x86_64-linux-gnu-ubuntu-16.04.tar.xz [x86_64,windows,'latest:<=20.1.0']: 20.1.0 = clang+llvm-20.1.0-x86_64-pc-windows-msvc.tar.xz [x86_64,windows,'latest:<=20.1.0,>17.0.4,!=19.1.7']: 20.1.0 = clang+llvm-20.1.0-x86_64-pc-windows-msvc.tar.xz @@ -116,5 +116,5 @@ [x86_64,windows,'latest:<20.1.0,>17.0.4']: 19.1.7 = clang+llvm-19.1.7-x86_64-pc-windows-msvc.tar.xz [x86_64,windows,"latest:>=15.0.6,<16"]: ERROR: No matching distribution found. [x86_64,windows,"first:>=15.0.6,<16"]: ERROR: No matching distribution found. -[x86_64,windows,'latest']: 20.1.4 = clang+llvm-20.1.4-x86_64-pc-windows-msvc.tar.xz +[x86_64,windows,'latest']: 20.1.5 = clang+llvm-20.1.5-x86_64-pc-windows-msvc.tar.xz [x86_64,windows,'first']: 18.1.0 = clang+llvm-18.1.0-x86_64-pc-windows-msvc.tar.xz From 01cff84d9712a92f87f7bd0418ae04f377fe4dbc Mon Sep 17 00:00:00 2001 From: helly25 Date: Fri, 16 May 2025 16:20:16 +0000 Subject: [PATCH 21/23] Limit test to 20.1.3 to prevent unnecessary diffs. --- toolchain/internal/llvm_distributions.bzl | 7 +++++- .../llvm_requirements_test.golden.txt | 24 +++++++++---------- 2 files changed, 18 insertions(+), 13 deletions(-) diff --git a/toolchain/internal/llvm_distributions.bzl b/toolchain/internal/llvm_distributions.bzl index c39e7e92e..cc7ef2b9f 100644 --- a/toolchain/internal/llvm_distributions.bzl +++ b/toolchain/internal/llvm_distributions.bzl @@ -1436,7 +1436,12 @@ def _requirements_test_writer_impl(ctx): The test generated file '.out' contains the following lines: [,,]: """ - all_llvm_distributions = _llvm_distributions + all_llvm_distributions = { + # In order to prevent new distributions to interfere we cut at 20.1.3. + k: v + for k, v in _llvm_distributions.items() + if _parse_version(_get_version_from_distribution(k)) <= (20, 1, 3) + } requirement_list = [ "latest:<=20.1.0", "latest:<=20.1.0,>17.0.4,!=19.1.7", diff --git a/toolchain/internal/llvm_requirements_test.golden.txt b/toolchain/internal/llvm_requirements_test.golden.txt index a3f438bd5..97959e9aa 100644 --- a/toolchain/internal/llvm_requirements_test.golden.txt +++ b/toolchain/internal/llvm_requirements_test.golden.txt @@ -4,7 +4,7 @@ [aarch64,darwin,'latest:<20.1.0,>17.0.4']: 19.1.7 = LLVM-19.1.7-macOS-ARM64.tar.xz [aarch64,darwin,'latest:>=15.0.6,<16']: 15.0.7 = clang+llvm-15.0.7-arm64-apple-darwin22.0.tar.xz [aarch64,darwin,'first:>=15.0.6,<16']: 15.0.6 = clang+llvm-15.0.6-arm64-apple-darwin21.0.tar.xz -[aarch64,darwin,'latest']: 20.1.4 = LLVM-20.1.4-macOS-ARM64.tar.xz +[aarch64,darwin,'latest']: 20.1.3 = LLVM-20.1.3-macOS-ARM64.tar.xz [aarch64,darwin,'first']: 14.0.6 = clang+llvm-14.0.6-arm64-apple-darwin22.3.0.tar.xz [aarch64,linux,ubuntu,0,'latest:<=20.1.0']: 20.1.0 = LLVM-20.1.0-Linux-ARM64.tar.xz [aarch64,linux,ubuntu,0,'latest:<=20.1.0,>17.0.4,!=19.1.7']: 20.1.0 = LLVM-20.1.0-Linux-ARM64.tar.xz @@ -12,7 +12,7 @@ [aarch64,linux,ubuntu,0,'latest:<20.1.0,>17.0.4']: 19.1.7 = clang+llvm-19.1.7-aarch64-linux-gnu.tar.xz [aarch64,linux,ubuntu,0,'latest:>=15.0.6,<16']: 15.0.6 = clang+llvm-15.0.6-aarch64-linux-gnu.tar.xz [aarch64,linux,ubuntu,0,'first:>=15.0.6,<16']: 15.0.6 = clang+llvm-15.0.6-aarch64-linux-gnu.tar.xz -[aarch64,linux,ubuntu,0,'latest']: 20.1.5 = LLVM-20.1.5-Linux-ARM64.tar.xz +[aarch64,linux,ubuntu,0,'latest']: 20.1.3 = LLVM-20.1.3-Linux-ARM64.tar.xz [aarch64,linux,ubuntu,0,'first']: 6.0.0 = clang+llvm-6.0.0-aarch64-linux-gnu.tar.xz [aarch64,linux,raspbian,0,'latest:<=20.1.0']: 20.1.0 = LLVM-20.1.0-Linux-ARM64.tar.xz [aarch64,linux,raspbian,0,'latest:<=20.1.0,>17.0.4,!=19.1.7']: 20.1.0 = LLVM-20.1.0-Linux-ARM64.tar.xz @@ -20,7 +20,7 @@ [aarch64,linux,raspbian,0,'latest:<20.1.0,>17.0.4']: 19.1.7 = clang+llvm-19.1.7-aarch64-linux-gnu.tar.xz [aarch64,linux,raspbian,0,'latest:>=15.0.6,<16']: 15.0.6 = clang+llvm-15.0.6-aarch64-linux-gnu.tar.xz [aarch64,linux,raspbian,0,'first:>=15.0.6,<16']: 15.0.6 = clang+llvm-15.0.6-aarch64-linux-gnu.tar.xz -[aarch64,linux,raspbian,0,'latest']: 20.1.5 = LLVM-20.1.5-Linux-ARM64.tar.xz +[aarch64,linux,raspbian,0,'latest']: 20.1.3 = LLVM-20.1.3-Linux-ARM64.tar.xz [aarch64,linux,raspbian,0,'first']: 6.0.0 = clang+llvm-6.0.0-aarch64-linux-gnu.tar.xz [aarch64,linux,rhel,0,'latest:<=20.1.0']: 20.1.0 = LLVM-20.1.0-Linux-ARM64.tar.xz [aarch64,linux,rhel,0,'latest:<=20.1.0,>17.0.4,!=19.1.7']: 20.1.0 = LLVM-20.1.0-Linux-ARM64.tar.xz @@ -28,7 +28,7 @@ [aarch64,linux,rhel,0,'latest:<20.1.0,>17.0.4']: 19.1.7 = clang+llvm-19.1.7-aarch64-linux-gnu.tar.xz [aarch64,linux,rhel,0,'latest:>=15.0.6,<16']: 15.0.6 = clang+llvm-15.0.6-aarch64-linux-gnu.tar.xz [aarch64,linux,rhel,0,'first:>=15.0.6,<16']: 15.0.6 = clang+llvm-15.0.6-aarch64-linux-gnu.tar.xz -[aarch64,linux,rhel,0,'latest']: 20.1.5 = LLVM-20.1.5-Linux-ARM64.tar.xz +[aarch64,linux,rhel,0,'latest']: 20.1.3 = LLVM-20.1.3-Linux-ARM64.tar.xz [aarch64,linux,rhel,0,'first']: 6.0.0 = clang+llvm-6.0.0-aarch64-linux-gnu.tar.xz [aarch64,windows,'latest:<=20.1.0']: 20.1.0 = clang+llvm-20.1.0-aarch64-pc-windows-msvc.tar.xz [aarch64,windows,'latest:<=20.1.0,>17.0.4,!=19.1.7']: 20.1.0 = clang+llvm-20.1.0-aarch64-pc-windows-msvc.tar.xz @@ -36,7 +36,7 @@ [aarch64,windows,"latest:<20.1.0,>17.0.4"]: ERROR: No matching distribution found. [aarch64,windows,"latest:>=15.0.6,<16"]: ERROR: No matching distribution found. [aarch64,windows,"first:>=15.0.6,<16"]: ERROR: No matching distribution found. -[aarch64,windows,'latest']: 20.1.5 = clang+llvm-20.1.5-aarch64-pc-windows-msvc.tar.xz +[aarch64,windows,'latest']: 20.1.3 = clang+llvm-20.1.3-aarch64-pc-windows-msvc.tar.xz [aarch64,windows,'first']: 20.1.0 = clang+llvm-20.1.0-aarch64-pc-windows-msvc.tar.xz [armv7a,darwin,"latest:<=20.1.0"]: ERROR: No matching distribution found. [armv7a,darwin,"latest:<=20.1.0,>17.0.4,!=19.1.7"]: ERROR: No matching distribution found. @@ -52,7 +52,7 @@ [armv7a,linux,ubuntu,0,'latest:<20.1.0,>17.0.4']: 19.1.7 = clang+llvm-19.1.7-armv7a-linux-gnueabihf.tar.gz [armv7a,linux,ubuntu,0,'latest:>=15.0.6,<16']: 15.0.6 = clang+llvm-15.0.6-armv7a-linux-gnueabihf.tar.xz [armv7a,linux,ubuntu,0,'first:>=15.0.6,<16']: 15.0.6 = clang+llvm-15.0.6-armv7a-linux-gnueabihf.tar.xz -[armv7a,linux,ubuntu,0,'latest']: 20.1.5 = clang+llvm-20.1.5-armv7a-linux-gnueabihf.tar.gz +[armv7a,linux,ubuntu,0,'latest']: 20.1.3 = clang+llvm-20.1.3-armv7a-linux-gnueabihf.tar.gz [armv7a,linux,ubuntu,0,'first']: 6.0.0 = clang+llvm-6.0.0-armv7a-linux-gnueabihf.tar.xz [armv7a,linux,raspbian,0,'latest:<=20.1.0']: 20.1.0 = clang+llvm-20.1.0-armv7a-linux-gnueabihf.tar.gz [armv7a,linux,raspbian,0,'latest:<=20.1.0,>17.0.4,!=19.1.7']: 20.1.0 = clang+llvm-20.1.0-armv7a-linux-gnueabihf.tar.gz @@ -60,7 +60,7 @@ [armv7a,linux,raspbian,0,'latest:<20.1.0,>17.0.4']: 19.1.7 = clang+llvm-19.1.7-armv7a-linux-gnueabihf.tar.gz [armv7a,linux,raspbian,0,'latest:>=15.0.6,<16']: 15.0.6 = clang+llvm-15.0.6-armv7a-linux-gnueabihf.tar.xz [armv7a,linux,raspbian,0,'first:>=15.0.6,<16']: 15.0.6 = clang+llvm-15.0.6-armv7a-linux-gnueabihf.tar.xz -[armv7a,linux,raspbian,0,'latest']: 20.1.5 = clang+llvm-20.1.5-armv7a-linux-gnueabihf.tar.gz +[armv7a,linux,raspbian,0,'latest']: 20.1.3 = clang+llvm-20.1.3-armv7a-linux-gnueabihf.tar.gz [armv7a,linux,raspbian,0,'first']: 6.0.0 = clang+llvm-6.0.0-armv7a-linux-gnueabihf.tar.xz [armv7a,linux,rhel,0,'latest:<=20.1.0']: 20.1.0 = clang+llvm-20.1.0-armv7a-linux-gnueabihf.tar.gz [armv7a,linux,rhel,0,'latest:<=20.1.0,>17.0.4,!=19.1.7']: 20.1.0 = clang+llvm-20.1.0-armv7a-linux-gnueabihf.tar.gz @@ -68,7 +68,7 @@ [armv7a,linux,rhel,0,'latest:<20.1.0,>17.0.4']: 19.1.7 = clang+llvm-19.1.7-armv7a-linux-gnueabihf.tar.gz [armv7a,linux,rhel,0,'latest:>=15.0.6,<16']: 15.0.6 = clang+llvm-15.0.6-armv7a-linux-gnueabihf.tar.xz [armv7a,linux,rhel,0,'first:>=15.0.6,<16']: 15.0.6 = clang+llvm-15.0.6-armv7a-linux-gnueabihf.tar.xz -[armv7a,linux,rhel,0,'latest']: 20.1.5 = clang+llvm-20.1.5-armv7a-linux-gnueabihf.tar.gz +[armv7a,linux,rhel,0,'latest']: 20.1.3 = clang+llvm-20.1.3-armv7a-linux-gnueabihf.tar.gz [armv7a,linux,rhel,0,'first']: 6.0.0 = clang+llvm-6.0.0-armv7a-linux-gnueabihf.tar.xz [armv7a,windows,"latest:<=20.1.0"]: ERROR: No matching distribution found. [armv7a,windows,"latest:<=20.1.0,>17.0.4,!=19.1.7"]: ERROR: No matching distribution found. @@ -92,7 +92,7 @@ [x86_64,linux,ubuntu,0,'latest:<20.1.0,>17.0.4']: 19.1.7 = LLVM-19.1.7-Linux-X64.tar.xz [x86_64,linux,ubuntu,0,'latest:>=15.0.6,<16']: 15.0.6 = clang+llvm-15.0.6-x86_64-linux-gnu-ubuntu-18.04.tar.xz [x86_64,linux,ubuntu,0,'first:>=15.0.6,<16']: 15.0.6 = clang+llvm-15.0.6-x86_64-linux-gnu-ubuntu-18.04.tar.xz -[x86_64,linux,ubuntu,0,'latest']: 20.1.5 = LLVM-20.1.5-Linux-X64.tar.xz +[x86_64,linux,ubuntu,0,'latest']: 20.1.3 = LLVM-20.1.3-Linux-X64.tar.xz [x86_64,linux,ubuntu,0,'first']: 6.0.0 = clang+llvm-6.0.0-x86_64-linux-gnu-ubuntu-16.04.tar.xz [x86_64,linux,raspbian,0,'latest:<=20.1.0']: 20.1.0 = LLVM-20.1.0-Linux-X64.tar.xz [x86_64,linux,raspbian,0,'latest:<=20.1.0,>17.0.4,!=19.1.7']: 20.1.0 = LLVM-20.1.0-Linux-X64.tar.xz @@ -100,7 +100,7 @@ [x86_64,linux,raspbian,0,'latest:<20.1.0,>17.0.4']: 19.1.7 = LLVM-19.1.7-Linux-X64.tar.xz [x86_64,linux,"latest:>=15.0.6,<16"]: ERROR: No matching distribution found. [x86_64,linux,"first:>=15.0.6,<16"]: ERROR: No matching distribution found. -[x86_64,linux,raspbian,0,'latest']: 20.1.5 = LLVM-20.1.5-Linux-X64.tar.xz +[x86_64,linux,raspbian,0,'latest']: 20.1.3 = LLVM-20.1.3-Linux-X64.tar.xz [x86_64,linux,raspbian,0,'first']: 19.1.0 = LLVM-19.1.0-Linux-X64.tar.xz [x86_64,linux,rhel,0,'latest:<=20.1.0']: 20.1.0 = LLVM-20.1.0-Linux-X64.tar.xz [x86_64,linux,rhel,0,'latest:<=20.1.0,>17.0.4,!=19.1.7']: 20.1.0 = LLVM-20.1.0-Linux-X64.tar.xz @@ -108,7 +108,7 @@ [x86_64,linux,rhel,0,'latest:<20.1.0,>17.0.4']: 19.1.7 = LLVM-19.1.7-Linux-X64.tar.xz [x86_64,linux,rhel,0,'latest:>=15.0.6,<16']: 15.0.6 = clang+llvm-15.0.6-x86_64-linux-gnu-ubuntu-18.04.tar.xz [x86_64,linux,rhel,0,'first:>=15.0.6,<16']: 15.0.6 = clang+llvm-15.0.6-x86_64-linux-gnu-ubuntu-18.04.tar.xz -[x86_64,linux,rhel,0,'latest']: 20.1.5 = LLVM-20.1.5-Linux-X64.tar.xz +[x86_64,linux,rhel,0,'latest']: 20.1.3 = LLVM-20.1.3-Linux-X64.tar.xz [x86_64,linux,rhel,0,'first']: 6.0.0 = clang+llvm-6.0.0-x86_64-linux-gnu-ubuntu-16.04.tar.xz [x86_64,windows,'latest:<=20.1.0']: 20.1.0 = clang+llvm-20.1.0-x86_64-pc-windows-msvc.tar.xz [x86_64,windows,'latest:<=20.1.0,>17.0.4,!=19.1.7']: 20.1.0 = clang+llvm-20.1.0-x86_64-pc-windows-msvc.tar.xz @@ -116,5 +116,5 @@ [x86_64,windows,'latest:<20.1.0,>17.0.4']: 19.1.7 = clang+llvm-19.1.7-x86_64-pc-windows-msvc.tar.xz [x86_64,windows,"latest:>=15.0.6,<16"]: ERROR: No matching distribution found. [x86_64,windows,"first:>=15.0.6,<16"]: ERROR: No matching distribution found. -[x86_64,windows,'latest']: 20.1.5 = clang+llvm-20.1.5-x86_64-pc-windows-msvc.tar.xz +[x86_64,windows,'latest']: 20.1.3 = clang+llvm-20.1.3-x86_64-pc-windows-msvc.tar.xz [x86_64,windows,'first']: 18.1.0 = clang+llvm-18.1.0-x86_64-pc-windows-msvc.tar.xz From 01814d47153cab021198445e799ee5b786bf1b6f Mon Sep 17 00:00:00 2001 From: helly25 Date: Thu, 5 Jun 2025 12:44:23 +0000 Subject: [PATCH 22/23] sync --- toolchain/internal/llvm_distributions.bzl | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/toolchain/internal/llvm_distributions.bzl b/toolchain/internal/llvm_distributions.bzl index cc7ef2b9f..3e5b6ea14 100644 --- a/toolchain/internal/llvm_distributions.bzl +++ b/toolchain/internal/llvm_distributions.bzl @@ -789,7 +789,8 @@ def _get_llvm_version(rctx): def _get_all_llvm_distributions(*, llvm_distributions, extra_llvm_distributions, parsed_llvm_version): distributions = {} - for basename, sha256 in llvm_distributions.items(): + for dist, sha256 in llvm_distributions.items() + (extra_llvm_distributions.items() if extra_llvm_distributions else []): + basename = _distribution_basename(dist) version = _distribution_version(basename) if parsed_llvm_version and parsed_llvm_version != version: continue @@ -798,16 +799,6 @@ def _get_all_llvm_distributions(*, llvm_distributions, extra_llvm_distributions, sha256 = sha256, version = version, ) - if extra_llvm_distributions: - for dist, sha256 in extra_llvm_distributions.items(): - version = _distribution_version(dist) - if parsed_llvm_version and parsed_llvm_version != version: - continue - distributions[_distribution_basename(dist)] = struct( - distribution = dist, - sha256 = sha256, - version = version, - ) return distributions _UBUNTU_NAMES = [ @@ -1135,7 +1126,11 @@ def _required_llvm_release_name(*, version_or_requirements, all_llvm_distributio return None, None, "ERROR: No matching distribution found." def required_llvm_release_name_rctx(rctx, llvm_version): - all_llvm_distributions = _get_all_llvm_distributions(rctx) + all_llvm_distributions = _get_all_llvm_distributions( + llvm_distributions = _llvm_distributions, + extra_llvm_distributions = rctx.attr.extra_llvm_distributions, + parsed_llvm_version = _parse_version(llvm_version), + ) return _required_llvm_release_name( version_or_requirements = llvm_version, all_llvm_distributions = all_llvm_distributions, @@ -1424,7 +1419,7 @@ def _distributions_test_writer_impl(ctx): ctx.actions.write(ctx.outputs.select, "\n".join(select) + "\n") write_distributions = rule( - implementation = _write_distributions_impl, + implementation = _distributions_test_writer_impl, attrs = { "output": attr.output(mandatory = True), "select": attr.output(mandatory = True), From 83dc627a331601d6f82cce25c79b54704df04764 Mon Sep 17 00:00:00 2001 From: helly25 Date: Thu, 5 Jun 2025 14:49:50 +0000 Subject: [PATCH 23/23] No more llvm_distributions_select_no_error_test --- tests/scripts/run_toolchain_tests.sh | 4 ---- toolchain/internal/BUILD.bazel | 4 ++-- toolchain/internal/llvm_distributions.bzl | 2 +- 3 files changed, 3 insertions(+), 7 deletions(-) diff --git a/tests/scripts/run_toolchain_tests.sh b/tests/scripts/run_toolchain_tests.sh index 5f1c2074e..676bc98ff 100755 --- a/tests/scripts/run_toolchain_tests.sh +++ b/tests/scripts/run_toolchain_tests.sh @@ -45,9 +45,5 @@ if [[ -z "${common_test_args:-}" ]]; then common_test_args=() fi -if [[ "${USE_BAZEL_VERSION}" == "7.x" ]] || [[ "${USE_BZLMOD}" == "false" ]]; then - targets+=("-//toolchain/internal:llvm_distributions_select_no_error_test") -fi - "${bazel}" ${TEST_MIGRATION:+"--strict"} --bazelrc=/dev/null test \ "${common_test_args[@]}" "${test_args[@]}" -- "${targets[@]}" diff --git a/toolchain/internal/BUILD.bazel b/toolchain/internal/BUILD.bazel index 6aac8a26b..be8b93c14 100644 --- a/toolchain/internal/BUILD.bazel +++ b/toolchain/internal/BUILD.bazel @@ -13,11 +13,11 @@ # limitations under the License. load("@bazel_skylib//rules:diff_test.bzl", "diff_test") -load("llvm_distributions.bzl", "requirements_test_writer", "write_distributions") +load("llvm_distributions.bzl", "distributions_test_writer", "requirements_test_writer") exports_files(["template.modulemap"]) -write_distributions( +distributions_test_writer( name = "llvm_distributions", testonly = True, output = "llvm_distributions.out.txt", diff --git a/toolchain/internal/llvm_distributions.bzl b/toolchain/internal/llvm_distributions.bzl index 3e5b6ea14..84ccd8216 100644 --- a/toolchain/internal/llvm_distributions.bzl +++ b/toolchain/internal/llvm_distributions.bzl @@ -1418,7 +1418,7 @@ def _distributions_test_writer_impl(ctx): ctx.actions.write(ctx.outputs.output, "\n".join(output) + "\n") ctx.actions.write(ctx.outputs.select, "\n".join(select) + "\n") -write_distributions = rule( +distributions_test_writer = rule( implementation = _distributions_test_writer_impl, attrs = { "output": attr.output(mandatory = True),