Skip to content

Commit 9dd9631

Browse files
committed
sync
1 parent 99ec2a7 commit 9dd9631

File tree

2 files changed

+49
-17482
lines changed

2 files changed

+49
-17482
lines changed

toolchain/internal/llvm_distributions.bzl

Lines changed: 49 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -787,23 +787,19 @@ def _get_llvm_version(rctx):
787787
)
788788
return llvm_version
789789

790-
def _get_all_llvm_distributions(*, extra_llvm_distributions):
791-
dists = {
792-
basename: struct(
790+
def _get_all_llvm_distributions(*, llvm_distributions, extra_llvm_distributions, parsed_llvm_version):
791+
distributions = {}
792+
for dist, sha256 in llvm_distributions.items() + (extra_llvm_distributions.items() if extra_llvm_distributions else []):
793+
basename = _distribution_basename(dist)
794+
version = _distribution_version(basename)
795+
if parsed_llvm_version and parsed_llvm_version != version:
796+
continue
797+
distributions[basename] = struct(
793798
distribution = basename,
794799
sha256 = sha256,
800+
version = version,
795801
)
796-
for basename, sha256 in _llvm_distributions.items()
797-
}
798-
if extra_llvm_distributions:
799-
dists = dists | {
800-
_distribution_basename(dist): struct(
801-
distribution = dist,
802-
sha256 = sha256,
803-
)
804-
for dist, sha256 in extra_llvm_distributions.items()
805-
}
806-
return dists
802+
return distributions
807803

808804
_UBUNTU_NAMES = [
809805
"arch",
@@ -1130,7 +1126,11 @@ def _required_llvm_release_name(*, version_or_requirements, all_llvm_distributio
11301126
return None, None, "ERROR: No matching distribution found."
11311127

11321128
def required_llvm_release_name_rctx(rctx, llvm_version):
1133-
all_llvm_distributions = _get_all_llvm_distributions(rctx)
1129+
all_llvm_distributions = _get_all_llvm_distributions(
1130+
llvm_distributions = _llvm_distributions,
1131+
extra_llvm_distributions = rctx.attr.extra_llvm_distributions,
1132+
parsed_llvm_version = _parse_version(llvm_version),
1133+
)
11341134
return _required_llvm_release_name(
11351135
version_or_requirements = llvm_version,
11361136
all_llvm_distributions = all_llvm_distributions,
@@ -1215,17 +1215,18 @@ def _distributions_test_writer_impl(ctx):
12151215
verify that predicted distributions have been configured. Otherwise the
12161216
algorithm could not know the hash value.
12171217
"""
1218-
all_llvm_distributions = _get_all_llvm_distributions(
1219-
# Inject version '0.0.0' that verifies additional behavior using `extra_llvm_distributions`.
1220-
extra_llvm_distributions = {
1221-
"LLVM-0.0.0-Linux-ARM64.tar.xz": "a6b8679be46bdaa383e0c7f13a473ca8f7a4f87233f2cc0e0a7ab19e1b6265e7",
1222-
"/foo/bar/LLVM-0.0.0-Linux-X64.tar.xz?xyz": "0a764a8ca521606532ca9ec4e5745c933b16b7d30f4701a47ee851d448fcdb74",
1223-
"http://server/foo/bar/LLVM-0.0.0-macOS-ARM64.tar.xz#xyz": "9da86f64a99f5ce9b679caf54e938736ca269c5e069d0c94ad08b995c5f25c16",
1224-
"http://server/foo/bar/LLVM-0.0.0-macOS-X64.tar.xz": "264f2f1e8b67f066749349ae8b4943d346cd44e099464164ef21b42a57663540",
1225-
"http://server/clang%2Bllvm-0.0.0-aarch64-pc-windows-msvc.tar.xz": "5916d93bf80e3ae504022cdd8cb8887be001f9b68a7a08bd268727e8d858afa4",
1226-
"http://server/path-to-file/clang%2Bllvm-0.0.0-x86_64-pc-windows-msvc.tar.xz#bla": "5916d93bf80e3ae504022cdd8cb8887be001f9b68a7a08bd268727e8d858afa4",
1227-
},
1228-
)
1218+
use_llvm_distributions = _llvm_distributions
1219+
1220+
# Inject version '0.0.0' that verifies additional behavior using `extra_llvm_distributions`.
1221+
extra_llvm_distributions = {
1222+
"LLVM-0.0.0-Linux-ARM64.tar.xz": "a6b8679be46bdaa383e0c7f13a473ca8f7a4f87233f2cc0e0a7ab19e1b6265e7",
1223+
"/foo/bar/LLVM-0.0.0-Linux-X64.tar.xz?xyz": "0a764a8ca521606532ca9ec4e5745c933b16b7d30f4701a47ee851d448fcdb74",
1224+
"http://server/foo/bar/LLVM-0.0.0-macOS-ARM64.tar.xz#xyz": "9da86f64a99f5ce9b679caf54e938736ca269c5e069d0c94ad08b995c5f25c16",
1225+
"http://server/foo/bar/LLVM-0.0.0-macOS-X64.tar.xz": "264f2f1e8b67f066749349ae8b4943d346cd44e099464164ef21b42a57663540",
1226+
"http://server/clang%2Bllvm-0.0.0-aarch64-pc-windows-msvc.tar.xz": "5916d93bf80e3ae504022cdd8cb8887be001f9b68a7a08bd268727e8d858afa4",
1227+
"http://server/path-to-file/clang%2Bllvm-0.0.0-x86_64-pc-windows-msvc.tar.xz#bla": "5916d93bf80e3ae504022cdd8cb8887be001f9b68a7a08bd268727e8d858afa4",
1228+
}
1229+
12291230
arch_list = [
12301231
"aarch64",
12311232
"armv7a",
@@ -1251,7 +1252,6 @@ def _distributions_test_writer_impl(ctx):
12511252
dist_dict_list = {
12521253
"linux": [
12531254
# keep sorted
1254-
struct(name = "ibm-aix", version = "7.2"),
12551255
struct(name = "amzn", version = ANY_VERSION),
12561256
struct(name = "arch", version = ANY_VERSION),
12571257
struct(name = "centos", version = "6"),
@@ -1266,6 +1266,7 @@ def _distributions_test_writer_impl(ctx):
12661266
struct(name = "freebsd", version = "11"),
12671267
struct(name = "freebsd", version = "12"),
12681268
struct(name = "freebsd", version = "13"),
1269+
struct(name = "ibm-aix", version = "7.2"),
12691270
struct(name = "linuxmint", version = "18"),
12701271
struct(name = "linuxmint", version = "19"),
12711272
struct(name = "pc-solaris", version = "2.11"),
@@ -1298,7 +1299,7 @@ def _distributions_test_writer_impl(ctx):
12981299
MAX_VERSION = _parse_version("20.1.3")
12991300
version_dict = {
13001301
_distribution_version(basename): None
1301-
for basename in all_llvm_distributions.keys()
1302+
for basename in use_llvm_distributions.keys() + extra_llvm_distributions.keys()
13021303
} | {
13031304
_parse_version(v): None
13041305
for v in _llvm_distributions_base_url.keys()
@@ -1314,8 +1315,8 @@ def _distributions_test_writer_impl(ctx):
13141315
# We keep track of versions in `not_found` and remove the ones we found.
13151316
# So at the end all version that were not found remain, hence the name.
13161317
not_found = {
1317-
basename: None
1318-
for basename in all_llvm_distributions.keys()
1318+
_distribution_basename(distribution): None
1319+
for distribution in use_llvm_distributions.keys() + extra_llvm_distributions.keys()
13191320
}
13201321

13211322
# While computing we add predicted versions that are not configured as True.
@@ -1327,6 +1328,11 @@ def _distributions_test_writer_impl(ctx):
13271328

13281329
# For all versions X arch X os check if we can compute the distribution.
13291330
for version in versions:
1331+
all_llvm_distributions = _get_all_llvm_distributions(
1332+
llvm_distributions = use_llvm_distributions,
1333+
extra_llvm_distributions = extra_llvm_distributions,
1334+
parsed_llvm_version = version,
1335+
)
13301336
for arch in arch_list:
13311337
for os in os_list:
13321338
if version < MIN_VERSION:
@@ -1353,17 +1359,17 @@ def _distributions_test_writer_impl(ctx):
13531359
all_llvm_distributions,
13541360
host_info,
13551361
)
1362+
skip_output = False
13561363
if error:
13571364
if error.startswith("ERROR: No matching config could be found for version"):
1358-
# Simplify test output:
1359-
error = "ERROR: No version selected"
1365+
skip_output = True
13601366
else:
13611367
if predicted.endswith(".exe"):
13621368
error = "ERROR: Windows .exe is not supported: " + predicted
13631369
elif predicted not in all_llvm_distributions:
13641370
error = "ERROR: Unavailable prediction: " + predicted
13651371
elif len(basenames) == 0:
1366-
error = "ERROR: No version selected"
1372+
skip_output = True
13671373
elif len(basenames) == 1:
13681374
predicted = basenames[0]
13691375
else:
@@ -1372,14 +1378,15 @@ def _distributions_test_writer_impl(ctx):
13721378
arch_found = [arch for arch in arch_list if arch in predicted]
13731379
if len(arch_found) == 1 and arch_found[0] not in arch_alias_dict.get(arch, [arch]):
13741380
error = "ERROR: Bad arch selection: " + predicted
1375-
select.append("{version}-{arch}-{os}/{dist_name}/{dist_version} -> {basename}".format(
1376-
version = _version_string(version),
1377-
arch = arch,
1378-
os = os,
1379-
dist_name = dist.name,
1380-
dist_version = dist.version,
1381-
basename = error or predicted,
1382-
))
1381+
if not skip_output:
1382+
select.append("{version}-{arch}-{os}/{dist_name}/{dist_version} -> {basename}".format(
1383+
version = _version_string(version),
1384+
arch = arch,
1385+
os = os,
1386+
dist_name = dist.name,
1387+
dist_version = dist.version,
1388+
basename = error or predicted,
1389+
))
13831390
if len(basenames) != 1:
13841391
if basenames:
13851392
dupes.append("dup: {version}-{arch}-{os}-{dist_name}-{dist_version} -> {count}".format(
@@ -1408,7 +1415,7 @@ def _distributions_test_writer_impl(ctx):
14081415
ctx.actions.write(ctx.outputs.select, "\n".join(select) + "\n")
14091416

14101417
write_distributions = rule(
1411-
implementation = _write_distributions_impl,
1418+
implementation = _distributions_test_writer_impl,
14121419
attrs = {
14131420
"output": attr.output(mandatory = True),
14141421
"select": attr.output(mandatory = True),

0 commit comments

Comments
 (0)