@@ -641,6 +641,9 @@ _llvm_distributions = {
641641 # 20.1.5
642642 "LLVM-20.1.5-Linux-ARM64.tar.xz" : "a6b8679be46bdaa383e0c7f13a473ca8f7a4f87233f2cc0e0a7ab19e1b6265e7" ,
643643 "LLVM-20.1.5-Linux-X64.tar.xz" : "0a764a8ca521606532ca9ec4e5745c933b16b7d30f4701a47ee851d448fcdb74" ,
644+ "clang+llvm-20.1.5-aarch64-pc-windows-msvc.tar.xz" : "5916d93bf80e3ae504022cdd8cb8887be001f9b68a7a08bd268727e8d858afa4" ,
645+ "clang+llvm-20.1.5-armv7a-linux-gnueabihf.tar.gz" : "80d4b593ecc32bb4289ce75e2b4572c0b6f27e1ceba8ce362c37469c480d3140" ,
646+ "clang+llvm-20.1.5-x86_64-pc-windows-msvc.tar.xz" : "b8e566c0ccf948a5e5946bc0c9d16110b937991816c8f46b9c8b3d1cd9ac7c9a" ,
644647
645648 # Refer to variable declaration on how to update!
646649 # Example update, run: utils/llvm_checksums.sh -g -v 15.0.6
@@ -777,7 +780,20 @@ _UBUNTU_VERSIONS = [
777780 "unknown-linux-gnu-rhel86" ,
778781]
779782
783+ def _is_linux_dist (dist ):
784+ # Note: Both Ibm-AIX and Solaris have compatibility functionality that may
785+ # make them accept linux code. For Solaris that stopped in newer versions.
786+ # For Ibm-AIX that seems uncommon, so we ask to manually specify instead of
787+ # manual identifying.
788+ if "ibm-aix" in dist .name :
789+ return False
790+ if "solaris" in dist .name :
791+ return False
792+ return True
793+
780794def _dist_to_os_names (dist , default_os_names = []):
795+ if not _is_linux_dist (dist ):
796+ return [dist .name ]
781797 if dist .name in ["amzn" , "suse" ]:
782798 # For "amzn" based on the ID_LIKE field, sles seems like the closest
783799 # available distro for which LLVM releases are widely available.
@@ -866,22 +882,23 @@ def _find_llvm_basename_list(llvm_version, all_llvm_distributions, host_info):
866882 dist = host_info .dist
867883
868884 # Prefer new LLVM distributions if available
869- basenames = _find_llvm_basenames_by_stem ([
870- "LLVM-{llvm_version}-{os}-{arch}" .format (
871- llvm_version = llvm_version ,
872- arch = {
873- "aarch64" : "ARM64" ,
874- "x86_64" : "X64" ,
875- }.get (arch , arch ),
876- os = {
877- "darwin" : "macOS" ,
878- "linux" : "Linux" ,
879- "windows" : "Windows" ,
880- }.get (os , os ),
881- ),
882- ], all_llvm_distributions = all_llvm_distributions )
883- if basenames :
884- return basenames
885+ if os != "linux" or _is_linux_dist (dist ):
886+ basenames = _find_llvm_basenames_by_stem ([
887+ "LLVM-{llvm_version}-{os}-{arch}" .format (
888+ llvm_version = llvm_version ,
889+ arch = {
890+ "aarch64" : "ARM64" ,
891+ "x86_64" : "X64" ,
892+ }.get (arch , arch ),
893+ os = {
894+ "darwin" : "macOS" ,
895+ "linux" : "Linux" ,
896+ "windows" : "Windows" ,
897+ }.get (os , os ),
898+ ),
899+ ], all_llvm_distributions = all_llvm_distributions )
900+ if basenames :
901+ return basenames
885902
886903 # First by 'os'', then by 'dist', then the remaining Linux variants'...
887904 if os == "darwin" :
@@ -916,18 +933,32 @@ def _find_llvm_basename_list(llvm_version, all_llvm_distributions, host_info):
916933 if arch in ["aarch64" , "armv7a" , "mips" , "mipsel" , "sparc64" , "sparcv9" ]:
917934 arch_alias_list = {
918935 "sparc64" : ["sparc64" , "sparcv9" ],
919- "sparcv9" : ["sparc64 " , "sparcv9 " ],
936+ "sparcv9" : ["sparcv9 " , "sparc64 " ],
920937 }.get (arch , [arch ])
921-
922- return _find_llvm_basenames_by_stem ([
938+ os_name_list = _dist_to_os_names (dist )
939+ os_name_extra_list = []
940+ if _is_linux_dist (dist ) and [os for os in os_name_list if "linux" in os ]:
941+ os_name_extra_list = ["linux-gnu" , "unknown-linux-gnu" ]
942+ basenames = _find_llvm_basenames_by_stem ([
923943 "clang+llvm-{llvm_version}-{arch}-{os}" .format (
924944 llvm_version = llvm_version ,
925945 arch = arch_alias ,
926946 os = os_name ,
927947 )
928948 for arch_alias in arch_alias_list
929- for os_name in [ "linux-gnu" , "unknown-linux-gnu" ] + _dist_to_os_names ( dist )
949+ for os_name in os_name_list + os_name_extra_list
930950 ], all_llvm_distributions = all_llvm_distributions )
951+ if basenames or not os_name_list :
952+ return basenames
953+ return _find_llvm_basenames_by_stem ([
954+ "clang+llvm-{llvm_version}-{arch}-{os}" .format (
955+ llvm_version = llvm_version ,
956+ arch = arch_alias ,
957+ os = os_name ,
958+ )
959+ for arch_alias in arch_alias_list
960+ for os_name in os_name_list
961+ ], all_llvm_distributions = all_llvm_distributions , is_prefix = True )
931962
932963 arch_alias_list = {
933964 "x86_32" : ["x86_32" , "i386" , "i686" ],
@@ -1057,6 +1088,7 @@ def _write_distributions_impl(ctx):
10571088 "mipsel" ,
10581089 "powerpc64" ,
10591090 "powerpc64le" ,
1091+ "sparc64" ,
10601092 "sparcv9" ,
10611093 "x86_32" ,
10621094 "x86_64" ,
@@ -1069,8 +1101,8 @@ def _write_distributions_impl(ctx):
10691101 ANY_VERSION = "0" # Version does not matter, but must be a valid integer
10701102 dist_dict_list = {
10711103 "linux" : [
1072- # struct(name = "ibm-aix", version = "7.2"), unreachable
10731104 # keep sorted
1105+ struct (name = "ibm-aix" , version = "7.2" ),
10741106 struct (name = "amzn" , version = ANY_VERSION ),
10751107 struct (name = "arch" , version = ANY_VERSION ),
10761108 struct (name = "centos" , version = "6" ),
@@ -1154,6 +1186,10 @@ def _write_distributions_impl(ctx):
11541186 for os in os_list :
11551187 dist_list = dist_dict_list .get (os , [struct (name = os , version = "" )])
11561188 for dist in dist_list :
1189+ if arch == "sparc64" and dist .name != "sun-solaris" :
1190+ # Sparc64 and SparcV9 are handled in the same way, just different precedence.
1191+ # One is the architecture th other the ISA. Restrict to one to limit output.
1192+ continue
11571193 host_info = struct (
11581194 arch = arch ,
11591195 os = os ,
0 commit comments