From 9c663cae43d2d025acf72dd4661394a2df8e2c2f Mon Sep 17 00:00:00 2001 From: Mads Marquart Date: Sat, 2 Nov 2024 02:10:27 +0100 Subject: [PATCH] Use `rustc`'s knowledge of LLVM/Clang target triples (#1252) * Rename Target -> TargetInfo * Add LLVM target triple to TargetInfo * Remove AppleOs wrapper struct * Simplify SDK name lookup code * Fix passing --target to Clang Use the same LLVM target triple as rustc does * Don't pass `--target` twice on Windows * Simplify LLVM target triple version removal * Appease clippy * Fix naming mistake * Simplify --- .github/workflows/regenerate-target-info.yml | 2 +- dev-tools/gen-target-info/src/main.rs | 25 +- src/lib.rs | 232 ++--- src/target.rs | 31 +- src/target/apple.rs | 19 + src/target/generated.rs | 838 ++++++++++++------- src/target/llvm.rs | 89 ++ src/windows/find_tools.rs | 4 +- tests/test.rs | 3 +- 9 files changed, 764 insertions(+), 479 deletions(-) create mode 100644 src/target/apple.rs create mode 100644 src/target/llvm.rs diff --git a/.github/workflows/regenerate-target-info.yml b/.github/workflows/regenerate-target-info.yml index c3b92546..d3b5afa7 100644 --- a/.github/workflows/regenerate-target-info.yml +++ b/.github/workflows/regenerate-target-info.yml @@ -52,4 +52,4 @@ jobs: env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | - gh pr create --base main --title "Update src/target_info.rs" --body "Automatically regenerated in CI" + gh pr create --base main --title "Update src/target/generated.rs" --body "Automatically regenerated in CI" diff --git a/dev-tools/gen-target-info/src/main.rs b/dev-tools/gen-target-info/src/main.rs index bc6a3d5e..27d8bd3c 100644 --- a/dev-tools/gen-target-info/src/main.rs +++ b/dev-tools/gen-target-info/src/main.rs @@ -11,10 +11,10 @@ const PRELUDE: &str = r#"//! This file is generated code. Please edit the genera "#; fn generate_target_mapping(f: &mut File, target_specs: &RustcTargetSpecs) -> std::io::Result<()> { - writeln!(f, "use super::Target;")?; + writeln!(f, "use super::TargetInfo;")?; writeln!(f, "use std::borrow::Cow;")?; writeln!(f)?; - writeln!(f, "pub(crate) const LIST: &[(&str, Target)] = &[")?; + writeln!(f, "pub(crate) const LIST: &[(&str, TargetInfo)] = &[")?; for (triple, spec) in &target_specs.0 { let full_arch = triple.split_once('-').unwrap().0; @@ -24,15 +24,34 @@ fn generate_target_mapping(f: &mut File, target_specs: &RustcTargetSpecs) -> std let env = spec.env.as_deref().unwrap_or(""); let abi = spec.abi.as_deref().unwrap_or(""); + // Remove deployment target information from LLVM target triples (we + // will add this in another part of CC). + // + // FIXME(madsmtm): Should become unnecessary after + // https://github.com/rust-lang/rust/pull/131037 + let unversioned_llvm_target = if spec.llvm_target.contains("apple") { + let mut components = spec.llvm_target.split("-").collect::>(); + + components[2] = components[2].trim_end_matches(|c: char| c.is_numeric() || c == '.'); + + components.join("-") + } else { + spec.llvm_target.clone() + }; + writeln!(f, " (")?; writeln!(f, " {triple:?},")?; - writeln!(f, " Target {{")?; + writeln!(f, " TargetInfo {{")?; writeln!(f, " full_arch: Cow::Borrowed({full_arch:?}),")?; writeln!(f, " arch: Cow::Borrowed({arch:?}),")?; writeln!(f, " vendor: Cow::Borrowed({vendor:?}),")?; writeln!(f, " os: Cow::Borrowed({os:?}),")?; writeln!(f, " env: Cow::Borrowed({env:?}),")?; writeln!(f, " abi: Cow::Borrowed({abi:?}),")?; + writeln!( + f, + " unversioned_llvm_target: Cow::Borrowed({unversioned_llvm_target:?})," + )?; writeln!(f, " }},")?; writeln!(f, " ),")?; } diff --git a/src/lib.rs b/src/lib.rs index 45faecd3..b08540de 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -219,7 +219,7 @@ use std::borrow::Cow; use std::collections::HashMap; use std::env; use std::ffi::{OsStr, OsString}; -use std::fmt::{self, Display, Formatter}; +use std::fmt::{self, Display}; use std::fs; use std::io::{self, Write}; use std::path::{Component, Path, PathBuf}; @@ -234,7 +234,7 @@ use shlex::Shlex; mod parallel; mod target; mod windows; -use target::Target; +use self::target::TargetInfo; // Regardless of whether this should be in this crate's public API, // it has been since 2015, so don't break it. pub use windows::find_tools as windows_registry; @@ -634,7 +634,7 @@ impl Build { &self, flag: &OsStr, compiler_path: &Path, - target: &Target, + target: &TargetInfo, ) -> Result { let compiler_flag = CompilerFlag { compiler: compiler_path.into(), @@ -1932,7 +1932,7 @@ impl Build { fn add_default_flags( &self, cmd: &mut Tool, - target: &Target, + target: &TargetInfo, opt_level: &str, ) -> Result<(), Error> { let raw_target = self.get_raw_target()?; @@ -1974,14 +1974,6 @@ impl Build { cmd.push_opt_unless_duplicate(format!("-O{}", opt_level).into()); } - if cmd.is_like_clang() && target.os == "windows" { - // Disambiguate mingw and msvc on Windows. Problem is that - // depending on the origin clang can default to a mismatchig - // run-time. - // FIXME: Convert rustc target to Clang target. - cmd.push_cc_arg(format!("--target={raw_target}").into()); - } - if cmd.is_like_clang() && target.os == "android" { // For compatibility with code that doesn't use pre-defined `__ANDROID__` macro. // If compiler used via ndk-build or cmake (officially supported build methods) @@ -2065,101 +2057,7 @@ impl Build { || (target.os == "android" && android_clang_compiler_uses_target_arg_internally(&cmd.path))) { - if target.os == "macos" { - let arch = map_darwin_target_from_rust_to_compiler_architecture(target); - cmd.args - .push(format!("--target={}-apple-darwin", arch).into()); - } else if target.abi == "macabi" { - let arch = map_darwin_target_from_rust_to_compiler_architecture(target); - cmd.args - .push(format!("--target={}-apple-ios-macabi", arch).into()); - } else if target.os == "ios" && target.abi == "sim" { - let arch = map_darwin_target_from_rust_to_compiler_architecture(target); - let sdk_details = - apple_os_sdk_parts(AppleOs::Ios, &AppleArchSpec::Simulator("")); - let deployment_target = - self.apple_deployment_version(AppleOs::Ios, None, &sdk_details.sdk); - cmd.args.push( - format!("--target={}-apple-ios{}-simulator", arch, deployment_target) - .into(), - ); - } else if target.os == "watchos" && target.abi == "sim" { - let arch = map_darwin_target_from_rust_to_compiler_architecture(target); - let sdk_details = - apple_os_sdk_parts(AppleOs::WatchOs, &AppleArchSpec::Simulator("")); - let deployment_target = - self.apple_deployment_version(AppleOs::WatchOs, None, &sdk_details.sdk); - cmd.args.push( - format!( - "--target={}-apple-watchos{}-simulator", - arch, deployment_target - ) - .into(), - ); - } else if target.os == "tvos" && target.abi == "sim" { - let arch = map_darwin_target_from_rust_to_compiler_architecture(target); - let sdk_details = - apple_os_sdk_parts(AppleOs::TvOs, &AppleArchSpec::Simulator("")); - let deployment_target = - self.apple_deployment_version(AppleOs::TvOs, None, &sdk_details.sdk); - cmd.args.push( - format!( - "--target={}-apple-tvos{}-simulator", - arch, deployment_target - ) - .into(), - ); - } else if target.os == "tvos" { - let arch = map_darwin_target_from_rust_to_compiler_architecture(target); - let sdk_details = - apple_os_sdk_parts(AppleOs::TvOs, &AppleArchSpec::Device("")); - let deployment_target = - self.apple_deployment_version(AppleOs::TvOs, None, &sdk_details.sdk); - cmd.args.push( - format!("--target={}-apple-tvos{}", arch, deployment_target).into(), - ); - } else if target.os == "visionos" && target.abi == "sim" { - let arch = map_darwin_target_from_rust_to_compiler_architecture(target); - let sdk_details = - apple_os_sdk_parts(AppleOs::VisionOS, &AppleArchSpec::Simulator("")); - let deployment_target = self.apple_deployment_version( - AppleOs::VisionOS, - None, - &sdk_details.sdk, - ); - cmd.args.push( - format!( - "--target={}-apple-xros{}-simulator", - arch, deployment_target - ) - .into(), - ); - } else if target.os == "visionos" { - let arch = map_darwin_target_from_rust_to_compiler_architecture(target); - let sdk_details = - apple_os_sdk_parts(AppleOs::VisionOS, &AppleArchSpec::Device("")); - let deployment_target = self.apple_deployment_version( - AppleOs::VisionOS, - None, - &sdk_details.sdk, - ); - cmd.args.push( - format!("--target={}-apple-xros{}", arch, deployment_target).into(), - ); - } else if target.arch == "riscv32" || target.arch == "riscv64" { - // FIXME: Convert rustc target to Clang target - let (_, rest) = raw_target.split_once('-').unwrap(); - cmd.args - .push(format!("--target={}-{}", &target.arch, rest).into()); - } else if target.os == "uefi" { - if target.arch == "x86_64" { - cmd.args.push("--target=x86_64-unknown-windows-gnu".into()); - } else if target.arch == "x86" { - cmd.args.push("--target=i686-unknown-windows-gnu".into()) - } else if target.arch == "aarch64" { - cmd.args.push("--target=aarch64-unknown-windows-gnu".into()) - } - } else if target.os == "freebsd" { + if target.os == "freebsd" { // FreeBSD only supports C++11 and above when compiling against libc++ // (available from FreeBSD 10 onwards). Under FreeBSD, clang uses libc++ by // default on FreeBSD 10 and newer unless `--target` is manually passed to @@ -2181,18 +2079,19 @@ impl Build { if self.cpp && self.cpp_set_stdlib.is_none() { cmd.push_cc_arg("-stdlib=libc++".into()); } + } - // FIXME: Convert rustc target to Clang target. - cmd.push_cc_arg(format!("--target={}", raw_target).into()); - } else if target.os == "windows" { - cmd.args.push( - format!("--target={}-pc-windows-{}", target.full_arch, target.env) - .into(), - ) + // Add version information to the target. + let llvm_target = if target.vendor == "apple" { + let deployment_target = self.apple_deployment_target(target); + target.versioned_llvm_target(Some(&deployment_target)) } else { - // FIXME: Convert rustc target to Clang target. - cmd.push_cc_arg(format!("--target={}", raw_target).into()); - } + target.versioned_llvm_target(None) + }; + + // Pass `--target` with the LLVM target to properly + // configure Clang even when cross-compiling. + cmd.args.push(format!("--target={llvm_target}").into()); } } ToolFamily::Msvc { clang_cl } => { @@ -2208,8 +2107,8 @@ impl Build { cmd.push_cc_arg("-m32".into()); cmd.push_cc_arg("-arch:IA32".into()); } else { - // FIXME: Convert rustc target to Clang target. - cmd.push_cc_arg(format!("--target={}", raw_target).into()); + let llvm_target = target.versioned_llvm_target(None); + cmd.push_cc_arg(format!("--target={llvm_target}").into()); } } else if target.full_arch == "i586" { cmd.push_cc_arg("-arch:IA32".into()); @@ -2629,18 +2528,6 @@ impl Build { fn apple_flags(&self, cmd: &mut Tool) -> Result<(), Error> { let target = self.get_target()?; - let os = if target.os == "macos" { - AppleOs::MacOs - } else if target.os == "watchos" { - AppleOs::WatchOs - } else if target.os == "tvos" { - AppleOs::TvOs - } else if target.os == "visionos" { - AppleOs::VisionOS - } else { - AppleOs::Ios - }; - let arch_str = &*target.full_arch; let arch = if target.os == "macos" { @@ -2689,14 +2576,14 @@ impl Build { _ => { return Err(Error::new( ErrorKind::ArchitectureInvalid, - format!("Unknown architecture for {:?} target.", os), + format!("Unknown architecture for {:?} target.", target.os), )); } } }; - let sdk_details = apple_os_sdk_parts(os, &arch); - let min_version = self.apple_deployment_version(os, Some(arch_str), &sdk_details.sdk); + let sdk_details = apple_os_sdk_parts(&target.os, &arch); + let min_version = self.apple_deployment_target(&target); match arch { AppleArchSpec::Device(_) if target.os == "macos" => { @@ -2708,7 +2595,7 @@ impl Build { cmd.args.push(arch.into()); // `-mxros-version-min` does not exist // https://github.com/llvm/llvm-project/issues/88271 - if os != AppleOs::VisionOS { + if target.os != "visionos" { cmd.args.push( format!("-m{}os-version-min={}", sdk_details.sdk_prefix, min_version) .into(), @@ -2723,7 +2610,7 @@ impl Build { cmd.args.push("-arch".into()); cmd.args.push(arch.into()); } - if os != AppleOs::VisionOS { + if target.os != "visionos" { cmd.args.push( format!( "-m{}simulator-version-min={}", @@ -2740,7 +2627,7 @@ impl Build { if cmd.is_xctoolchain_clang() || target.os != "macos" { self.cargo_output.print_metadata(&format_args!( "Detecting {:?} SDK path for {}", - os, sdk_details.sdk + target.os, sdk_details.sdk )); let sdk_path = self.apple_sdk_root(&sdk_details.sdk)?; @@ -3579,10 +3466,10 @@ impl Build { .or_else(|| prefixes.first().copied()) } - fn get_target(&self) -> Result { + fn get_target(&self) -> Result { match &self.target { Some(t) => t.parse(), - None => Target::from_cargo_environment_variables(), + None => TargetInfo::from_cargo_environment_variables(), } } @@ -3839,7 +3726,8 @@ impl Build { Ok(sdk_path) } - fn apple_deployment_version(&self, os: AppleOs, arch_str: Option<&str>, sdk: &str) -> Arc { + fn apple_deployment_target(&self, target: &TargetInfo) -> Arc { + let sdk = target.apple_sdk_name(); if let Some(ret) = self .apple_versions_cache .read() @@ -3890,8 +3778,8 @@ impl Build { .split('.') .map(|v| v.parse::().expect("integer version")); - match os { - AppleOs::MacOs => { + match &*target.os { + "macos" => { let major = deployment_target.next().unwrap_or(0); let minor = deployment_target.next().unwrap_or(0); @@ -3904,7 +3792,7 @@ impl Build { return None; } } - AppleOs::Ios => { + "ios" => { let major = deployment_target.next().unwrap_or(0); // If below 10.7, we ignore it and let the SDK's target definitions handle it. @@ -3935,12 +3823,12 @@ impl Build { // // The ordering of env -> XCode SDK -> old rustc defaults is intentional for performance when using // an explicit target. - let version: Arc = match os { - AppleOs::MacOs => deployment_from_env("MACOSX_DEPLOYMENT_TARGET") + let version: Arc = match &*target.os { + "macos" => deployment_from_env("MACOSX_DEPLOYMENT_TARGET") .and_then(maybe_cpp_version_baseline) .or_else(default_deployment_from_sdk) .unwrap_or_else(|| { - if arch_str == Some("aarch64") { + if target.arch == "aarch64" { "11.0".into() } else { let default: Arc = Arc::from("10.7"); @@ -3948,22 +3836,24 @@ impl Build { } }), - AppleOs::Ios => deployment_from_env("IPHONEOS_DEPLOYMENT_TARGET") + "ios" => deployment_from_env("IPHONEOS_DEPLOYMENT_TARGET") .and_then(maybe_cpp_version_baseline) .or_else(default_deployment_from_sdk) .unwrap_or_else(|| "7.0".into()), - AppleOs::WatchOs => deployment_from_env("WATCHOS_DEPLOYMENT_TARGET") + "watchos" => deployment_from_env("WATCHOS_DEPLOYMENT_TARGET") .or_else(default_deployment_from_sdk) .unwrap_or_else(|| "5.0".into()), - AppleOs::TvOs => deployment_from_env("TVOS_DEPLOYMENT_TARGET") + "tvos" => deployment_from_env("TVOS_DEPLOYMENT_TARGET") .or_else(default_deployment_from_sdk) .unwrap_or_else(|| "9.0".into()), - AppleOs::VisionOS => deployment_from_env("XROS_DEPLOYMENT_TARGET") + "visionos" => deployment_from_env("XROS_DEPLOYMENT_TARGET") .or_else(default_deployment_from_sdk) .unwrap_or_else(|| "1.0".into()), + + os => unreachable!("unknown Apple OS: {}", os), }; self.apple_versions_cache @@ -4040,12 +3930,12 @@ impl Build { None } - fn windows_registry_find(&self, target: &Target, tool: &str) -> Option { + fn windows_registry_find(&self, target: &TargetInfo, tool: &str) -> Option { self.windows_registry_find_tool(target, tool) .map(|c| c.to_command()) } - fn windows_registry_find_tool(&self, target: &Target, tool: &str) -> Option { + fn windows_registry_find_tool(&self, target: &TargetInfo, tool: &str) -> Option { struct BuildEnvGetter<'s>(&'s Build); impl windows_registry::EnvGetter for BuildEnvGetter<'_> { @@ -4069,43 +3959,23 @@ fn fail(s: &str) -> ! { std::process::exit(1); } -#[derive(Clone, Copy, PartialEq)] -enum AppleOs { - MacOs, - Ios, - WatchOs, - TvOs, - VisionOS, -} - -impl std::fmt::Debug for AppleOs { - fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result { - match self { - AppleOs::MacOs => f.write_str("macOS"), - AppleOs::Ios => f.write_str("iOS"), - AppleOs::WatchOs => f.write_str("WatchOS"), - AppleOs::TvOs => f.write_str("AppleTVOS"), - AppleOs::VisionOS => f.write_str("visionOS"), - } - } -} - struct AppleSdkTargetParts { sdk_prefix: &'static str, sim_prefix: &'static str, sdk: Cow<'static, str>, } -fn apple_os_sdk_parts(os: AppleOs, arch: &AppleArchSpec) -> AppleSdkTargetParts { +fn apple_os_sdk_parts(os: &str, arch: &AppleArchSpec) -> AppleSdkTargetParts { let (sdk_prefix, sim_prefix) = match os { - AppleOs::MacOs => ("macosx", ""), - AppleOs::Ios => ("iphone", "ios-"), - AppleOs::WatchOs => ("watch", "watch"), - AppleOs::TvOs => ("appletv", "appletv"), - AppleOs::VisionOS => ("xr", "xr"), + "macos" => ("macosx", ""), + "ios" => ("iphone", "ios-"), + "watchos" => ("watch", "watch"), + "tvos" => ("appletv", "appletv"), + "visionos" => ("xr", "xr"), + os => unreachable!("unknown Apple OS {}", os), }; let sdk = match arch { - AppleArchSpec::Device(_) if os == AppleOs::MacOs => Cow::Borrowed("macosx"), + AppleArchSpec::Device(_) if os == "macos" => Cow::Borrowed("macosx"), AppleArchSpec::Device(_) => format!("{}os", sdk_prefix).into(), AppleArchSpec::Simulator(_) => format!("{}simulator", sdk_prefix).into(), AppleArchSpec::Catalyst(_) => Cow::Borrowed("macosx"), @@ -4204,7 +4074,7 @@ fn autodetect_android_compiler(raw_target: &str, gnu: &str, clang: &str) -> Stri } // Rust and clang/cc don't agree on how to name the target. -fn map_darwin_target_from_rust_to_compiler_architecture(target: &Target) -> &str { +fn map_darwin_target_from_rust_to_compiler_architecture(target: &TargetInfo) -> &str { match &*target.full_arch { "aarch64" => "arm64", "arm64_32" => "arm64_32", diff --git a/src/target.rs b/src/target.rs index 61ce91ee..0f28e86e 100644 --- a/src/target.rs +++ b/src/target.rs @@ -6,13 +6,15 @@ use std::{borrow::Cow, env, str::FromStr}; use crate::{Error, ErrorKind}; +mod apple; mod generated; +mod llvm; -/// The parts of `rustc`'s target triple. +/// Information specific to a `rustc` target. /// /// See . #[derive(Debug, PartialEq, Clone)] -pub(crate) struct Target { +pub(crate) struct TargetInfo { /// The full architecture, including the subarchitecture. /// /// This differs from `cfg!(target_arch)`, which only specifies the @@ -38,9 +40,11 @@ pub(crate) struct Target { /// /// This is the same as the value of `cfg!(target_abi)`. pub abi: Cow<'static, str>, + /// The unversioned LLVM/Clang target triple. + unversioned_llvm_target: Cow<'static, str>, } -impl Target { +impl TargetInfo { pub fn from_cargo_environment_variables() -> Result { // `TARGET` must be present. // @@ -90,7 +94,7 @@ impl Target { // back back to data from the known set of target triples instead. // // See discussion in #1225 for further details. - let fallback_target = Target::from_str(&target_triple).ok(); + let fallback_target = TargetInfo::from_str(&target_triple).ok(); let ft = fallback_target.as_ref(); let arch = cargo_env("CARGO_CFG_TARGET_ARCH", ft.map(|t| t.arch.clone()))?; let vendor = cargo_env("CARGO_CFG_TARGET_VENDOR", ft.map(|t| t.vendor.clone()))?; @@ -102,6 +106,12 @@ impl Target { let abi = cargo_env("CARGO_CFG_TARGET_ABI", ft.map(|t| t.abi.clone())) .unwrap_or(Cow::Borrowed("")); + // Prefer `rustc`'s LLVM target triple information. + let unversioned_llvm_target = match fallback_target { + Some(ft) => ft.unversioned_llvm_target, + None => llvm::guess_llvm_target_triple(full_arch, &vendor, &os, &env, &abi).into(), + }; + Ok(Self { full_arch: full_arch.to_string().into(), arch, @@ -109,11 +119,12 @@ impl Target { os, env, abi, + unversioned_llvm_target, }) } } -impl FromStr for Target { +impl FromStr for TargetInfo { type Err = Error; /// This will fail when using a custom target triple unknown to `rustc`. @@ -121,8 +132,8 @@ impl FromStr for Target { if let Ok(index) = generated::LIST.binary_search_by_key(&target_triple, |(target_triple, _)| target_triple) { - let (_, target) = &generated::LIST[index]; - Ok(target.clone()) + let (_, info) = &generated::LIST[index]; + Ok(info.clone()) } else { Err(Error::new( ErrorKind::InvalidTarget, @@ -136,7 +147,7 @@ impl FromStr for Target { mod tests { use std::str::FromStr; - use super::Target; + use super::TargetInfo; // Test tier 1 targets #[test] @@ -155,7 +166,7 @@ mod tests { for target in targets { // Check that it parses - let _ = Target::from_str(target).unwrap(); + let _ = TargetInfo::from_str(target).unwrap(); } } @@ -177,7 +188,7 @@ mod tests { for target in targets { // Check that it does not parse - let _ = Target::from_str(target).unwrap_err(); + let _ = TargetInfo::from_str(target).unwrap_err(); } } } diff --git a/src/target/apple.rs b/src/target/apple.rs new file mode 100644 index 00000000..f5ec1d85 --- /dev/null +++ b/src/target/apple.rs @@ -0,0 +1,19 @@ +use super::TargetInfo; + +impl TargetInfo { + pub(crate) fn apple_sdk_name(&self) -> &'static str { + match (&*self.os, &*self.abi) { + ("macos", "") => "macosx", + ("ios", "") => "iphoneos", + ("ios", "sim") => "iphonesimulator", + ("ios", "macabi") => "macosx", + ("tvos", "") => "appletvos", + ("tvos", "sim") => "appletvsimulator", + ("watchos", "") => "watchos", + ("watchos", "sim") => "watchsimulator", + ("visionos", "") => "xros", + ("visionos", "sim") => "xrsimulator", + (os, _) => panic!("invalid Apple target OS {}", os), + } + } +} diff --git a/src/target/generated.rs b/src/target/generated.rs index d28b9223..0fa3ff3b 100644 --- a/src/target/generated.rs +++ b/src/target/generated.rs @@ -1,3066 +1,3344 @@ //! This file is generated code. Please edit the generator //! in dev-tools/gen-target-info if you need to make changes. -use super::Target; +use super::TargetInfo; use std::borrow::Cow; -pub(crate) const LIST: &[(&str, Target)] = &[ +pub(crate) const LIST: &[(&str, TargetInfo)] = &[ ( "aarch64-apple-darwin", - Target { + TargetInfo { full_arch: Cow::Borrowed("aarch64"), arch: Cow::Borrowed("aarch64"), vendor: Cow::Borrowed("apple"), os: Cow::Borrowed("macos"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("arm64-apple-macosx"), }, ), ( "aarch64-apple-ios", - Target { + TargetInfo { full_arch: Cow::Borrowed("aarch64"), arch: Cow::Borrowed("aarch64"), vendor: Cow::Borrowed("apple"), os: Cow::Borrowed("ios"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("arm64-apple-ios"), }, ), ( "aarch64-apple-ios-macabi", - Target { + TargetInfo { full_arch: Cow::Borrowed("aarch64"), arch: Cow::Borrowed("aarch64"), vendor: Cow::Borrowed("apple"), os: Cow::Borrowed("ios"), env: Cow::Borrowed(""), abi: Cow::Borrowed("macabi"), + unversioned_llvm_target: Cow::Borrowed("arm64-apple-ios-macabi"), }, ), ( "aarch64-apple-ios-sim", - Target { + TargetInfo { full_arch: Cow::Borrowed("aarch64"), arch: Cow::Borrowed("aarch64"), vendor: Cow::Borrowed("apple"), os: Cow::Borrowed("ios"), env: Cow::Borrowed(""), abi: Cow::Borrowed("sim"), + unversioned_llvm_target: Cow::Borrowed("arm64-apple-ios-simulator"), }, ), ( "aarch64-apple-tvos", - Target { + TargetInfo { full_arch: Cow::Borrowed("aarch64"), arch: Cow::Borrowed("aarch64"), vendor: Cow::Borrowed("apple"), os: Cow::Borrowed("tvos"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("arm64-apple-tvos"), }, ), ( "aarch64-apple-tvos-sim", - Target { + TargetInfo { full_arch: Cow::Borrowed("aarch64"), arch: Cow::Borrowed("aarch64"), vendor: Cow::Borrowed("apple"), os: Cow::Borrowed("tvos"), env: Cow::Borrowed(""), abi: Cow::Borrowed("sim"), + unversioned_llvm_target: Cow::Borrowed("arm64-apple-tvos-simulator"), }, ), ( "aarch64-apple-visionos", - Target { + TargetInfo { full_arch: Cow::Borrowed("aarch64"), arch: Cow::Borrowed("aarch64"), vendor: Cow::Borrowed("apple"), os: Cow::Borrowed("visionos"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("arm64-apple-xros"), }, ), ( "aarch64-apple-visionos-sim", - Target { + TargetInfo { full_arch: Cow::Borrowed("aarch64"), arch: Cow::Borrowed("aarch64"), vendor: Cow::Borrowed("apple"), os: Cow::Borrowed("visionos"), env: Cow::Borrowed(""), abi: Cow::Borrowed("sim"), + unversioned_llvm_target: Cow::Borrowed("arm64-apple-xros-simulator"), }, ), ( "aarch64-apple-watchos", - Target { + TargetInfo { full_arch: Cow::Borrowed("aarch64"), arch: Cow::Borrowed("aarch64"), vendor: Cow::Borrowed("apple"), os: Cow::Borrowed("watchos"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("arm64-apple-watchos"), }, ), ( "aarch64-apple-watchos-sim", - Target { + TargetInfo { full_arch: Cow::Borrowed("aarch64"), arch: Cow::Borrowed("aarch64"), vendor: Cow::Borrowed("apple"), os: Cow::Borrowed("watchos"), env: Cow::Borrowed(""), abi: Cow::Borrowed("sim"), + unversioned_llvm_target: Cow::Borrowed("arm64-apple-watchos-simulator"), }, ), ( "aarch64-fuchsia", - Target { + TargetInfo { full_arch: Cow::Borrowed("aarch64"), arch: Cow::Borrowed("aarch64"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("fuchsia"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("aarch64-fuchsia"), }, ), ( "aarch64-kmc-solid_asp3", - Target { + TargetInfo { full_arch: Cow::Borrowed("aarch64"), arch: Cow::Borrowed("aarch64"), vendor: Cow::Borrowed("kmc"), os: Cow::Borrowed("solid_asp3"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("aarch64-unknown-none"), }, ), ( "aarch64-linux-android", - Target { + TargetInfo { full_arch: Cow::Borrowed("aarch64"), arch: Cow::Borrowed("aarch64"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("android"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("aarch64-linux-android"), }, ), ( "aarch64-nintendo-switch-freestanding", - Target { + TargetInfo { full_arch: Cow::Borrowed("aarch64"), arch: Cow::Borrowed("aarch64"), vendor: Cow::Borrowed("nintendo"), os: Cow::Borrowed("horizon"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("aarch64-unknown-none"), }, ), ( "aarch64-pc-windows-gnullvm", - Target { + TargetInfo { full_arch: Cow::Borrowed("aarch64"), arch: Cow::Borrowed("aarch64"), vendor: Cow::Borrowed("pc"), os: Cow::Borrowed("windows"), env: Cow::Borrowed("gnu"), abi: Cow::Borrowed("llvm"), + unversioned_llvm_target: Cow::Borrowed("aarch64-pc-windows-gnu"), }, ), ( "aarch64-pc-windows-msvc", - Target { + TargetInfo { full_arch: Cow::Borrowed("aarch64"), arch: Cow::Borrowed("aarch64"), vendor: Cow::Borrowed("pc"), os: Cow::Borrowed("windows"), env: Cow::Borrowed("msvc"), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("aarch64-pc-windows-msvc"), }, ), ( "aarch64-unknown-freebsd", - Target { + TargetInfo { full_arch: Cow::Borrowed("aarch64"), arch: Cow::Borrowed("aarch64"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("freebsd"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("aarch64-unknown-freebsd"), }, ), ( "aarch64-unknown-fuchsia", - Target { + TargetInfo { full_arch: Cow::Borrowed("aarch64"), arch: Cow::Borrowed("aarch64"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("fuchsia"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("aarch64-unknown-fuchsia"), }, ), ( "aarch64-unknown-hermit", - Target { + TargetInfo { full_arch: Cow::Borrowed("aarch64"), arch: Cow::Borrowed("aarch64"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("hermit"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("aarch64-unknown-hermit"), }, ), ( "aarch64-unknown-illumos", - Target { + TargetInfo { full_arch: Cow::Borrowed("aarch64"), arch: Cow::Borrowed("aarch64"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("illumos"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("aarch64-unknown-solaris2.11"), }, ), ( "aarch64-unknown-linux-gnu", - Target { + TargetInfo { full_arch: Cow::Borrowed("aarch64"), arch: Cow::Borrowed("aarch64"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("linux"), env: Cow::Borrowed("gnu"), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("aarch64-unknown-linux-gnu"), }, ), ( "aarch64-unknown-linux-gnu_ilp32", - Target { + TargetInfo { full_arch: Cow::Borrowed("aarch64"), arch: Cow::Borrowed("aarch64"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("linux"), env: Cow::Borrowed("gnu"), abi: Cow::Borrowed("ilp32"), + unversioned_llvm_target: Cow::Borrowed("aarch64-unknown-linux-gnu_ilp32"), }, ), ( "aarch64-unknown-linux-musl", - Target { + TargetInfo { full_arch: Cow::Borrowed("aarch64"), arch: Cow::Borrowed("aarch64"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("linux"), env: Cow::Borrowed("musl"), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("aarch64-unknown-linux-musl"), }, ), ( "aarch64-unknown-linux-ohos", - Target { + TargetInfo { full_arch: Cow::Borrowed("aarch64"), arch: Cow::Borrowed("aarch64"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("linux"), env: Cow::Borrowed("ohos"), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("aarch64-unknown-linux-ohos"), }, ), ( "aarch64-unknown-netbsd", - Target { + TargetInfo { full_arch: Cow::Borrowed("aarch64"), arch: Cow::Borrowed("aarch64"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("netbsd"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("aarch64-unknown-netbsd"), }, ), ( "aarch64-unknown-none", - Target { + TargetInfo { full_arch: Cow::Borrowed("aarch64"), arch: Cow::Borrowed("aarch64"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("none"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("aarch64-unknown-none"), }, ), ( "aarch64-unknown-none-softfloat", - Target { + TargetInfo { full_arch: Cow::Borrowed("aarch64"), arch: Cow::Borrowed("aarch64"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("none"), env: Cow::Borrowed(""), abi: Cow::Borrowed("softfloat"), + unversioned_llvm_target: Cow::Borrowed("aarch64-unknown-none"), }, ), ( "aarch64-unknown-nto-qnx700", - Target { + TargetInfo { full_arch: Cow::Borrowed("aarch64"), arch: Cow::Borrowed("aarch64"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("nto"), env: Cow::Borrowed("nto70"), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("aarch64-unknown-unknown"), }, ), ( "aarch64-unknown-nto-qnx710", - Target { + TargetInfo { full_arch: Cow::Borrowed("aarch64"), arch: Cow::Borrowed("aarch64"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("nto"), env: Cow::Borrowed("nto71"), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("aarch64-unknown-unknown"), }, ), ( "aarch64-unknown-openbsd", - Target { + TargetInfo { full_arch: Cow::Borrowed("aarch64"), arch: Cow::Borrowed("aarch64"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("openbsd"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("aarch64-unknown-openbsd"), }, ), ( "aarch64-unknown-redox", - Target { + TargetInfo { full_arch: Cow::Borrowed("aarch64"), arch: Cow::Borrowed("aarch64"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("redox"), env: Cow::Borrowed("relibc"), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("aarch64-unknown-redox"), }, ), ( "aarch64-unknown-teeos", - Target { + TargetInfo { full_arch: Cow::Borrowed("aarch64"), arch: Cow::Borrowed("aarch64"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("teeos"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("aarch64-unknown-none"), }, ), ( "aarch64-unknown-trusty", - Target { + TargetInfo { full_arch: Cow::Borrowed("aarch64"), arch: Cow::Borrowed("aarch64"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("trusty"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("aarch64-unknown-unknown-musl"), }, ), ( "aarch64-unknown-uefi", - Target { + TargetInfo { full_arch: Cow::Borrowed("aarch64"), arch: Cow::Borrowed("aarch64"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("uefi"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("aarch64-unknown-windows"), }, ), ( "aarch64-uwp-windows-msvc", - Target { + TargetInfo { full_arch: Cow::Borrowed("aarch64"), arch: Cow::Borrowed("aarch64"), vendor: Cow::Borrowed("uwp"), os: Cow::Borrowed("windows"), env: Cow::Borrowed("msvc"), abi: Cow::Borrowed("uwp"), + unversioned_llvm_target: Cow::Borrowed("aarch64-pc-windows-msvc"), }, ), ( "aarch64-wrs-vxworks", - Target { + TargetInfo { full_arch: Cow::Borrowed("aarch64"), arch: Cow::Borrowed("aarch64"), vendor: Cow::Borrowed("wrs"), os: Cow::Borrowed("vxworks"), env: Cow::Borrowed("gnu"), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("aarch64-unknown-linux-gnu"), }, ), ( "aarch64_be-unknown-linux-gnu", - Target { + TargetInfo { full_arch: Cow::Borrowed("aarch64_be"), arch: Cow::Borrowed("aarch64"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("linux"), env: Cow::Borrowed("gnu"), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("aarch64_be-unknown-linux-gnu"), }, ), ( "aarch64_be-unknown-linux-gnu_ilp32", - Target { + TargetInfo { full_arch: Cow::Borrowed("aarch64_be"), arch: Cow::Borrowed("aarch64"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("linux"), env: Cow::Borrowed("gnu"), abi: Cow::Borrowed("ilp32"), + unversioned_llvm_target: Cow::Borrowed("aarch64_be-unknown-linux-gnu_ilp32"), }, ), ( "aarch64_be-unknown-netbsd", - Target { + TargetInfo { full_arch: Cow::Borrowed("aarch64_be"), arch: Cow::Borrowed("aarch64"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("netbsd"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("aarch64_be-unknown-netbsd"), }, ), ( "arm-linux-androideabi", - Target { + TargetInfo { full_arch: Cow::Borrowed("arm"), arch: Cow::Borrowed("arm"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("android"), env: Cow::Borrowed(""), abi: Cow::Borrowed("eabi"), + unversioned_llvm_target: Cow::Borrowed("arm-linux-androideabi"), }, ), ( "arm-unknown-linux-gnueabi", - Target { + TargetInfo { full_arch: Cow::Borrowed("arm"), arch: Cow::Borrowed("arm"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("linux"), env: Cow::Borrowed("gnu"), abi: Cow::Borrowed("eabi"), + unversioned_llvm_target: Cow::Borrowed("arm-unknown-linux-gnueabi"), }, ), ( "arm-unknown-linux-gnueabihf", - Target { + TargetInfo { full_arch: Cow::Borrowed("arm"), arch: Cow::Borrowed("arm"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("linux"), env: Cow::Borrowed("gnu"), abi: Cow::Borrowed("eabihf"), + unversioned_llvm_target: Cow::Borrowed("arm-unknown-linux-gnueabihf"), }, ), ( "arm-unknown-linux-musleabi", - Target { + TargetInfo { full_arch: Cow::Borrowed("arm"), arch: Cow::Borrowed("arm"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("linux"), env: Cow::Borrowed("musl"), abi: Cow::Borrowed("eabi"), + unversioned_llvm_target: Cow::Borrowed("arm-unknown-linux-gnueabi"), }, ), ( "arm-unknown-linux-musleabihf", - Target { + TargetInfo { full_arch: Cow::Borrowed("arm"), arch: Cow::Borrowed("arm"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("linux"), env: Cow::Borrowed("musl"), abi: Cow::Borrowed("eabihf"), + unversioned_llvm_target: Cow::Borrowed("arm-unknown-linux-gnueabihf"), }, ), ( "arm64_32-apple-watchos", - Target { + TargetInfo { full_arch: Cow::Borrowed("arm64_32"), arch: Cow::Borrowed("aarch64"), vendor: Cow::Borrowed("apple"), os: Cow::Borrowed("watchos"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("arm64_32-apple-watchos"), }, ), ( "arm64e-apple-darwin", - Target { + TargetInfo { full_arch: Cow::Borrowed("arm64e"), arch: Cow::Borrowed("aarch64"), vendor: Cow::Borrowed("apple"), os: Cow::Borrowed("macos"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("arm64e-apple-macosx"), }, ), ( "arm64e-apple-ios", - Target { + TargetInfo { full_arch: Cow::Borrowed("arm64e"), arch: Cow::Borrowed("aarch64"), vendor: Cow::Borrowed("apple"), os: Cow::Borrowed("ios"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("arm64e-apple-ios"), }, ), ( "arm64e-apple-tvos", - Target { + TargetInfo { full_arch: Cow::Borrowed("arm64e"), arch: Cow::Borrowed("aarch64"), vendor: Cow::Borrowed("apple"), os: Cow::Borrowed("tvos"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("arm64e-apple-tvos"), }, ), ( "arm64ec-pc-windows-msvc", - Target { + TargetInfo { full_arch: Cow::Borrowed("arm64ec"), arch: Cow::Borrowed("arm64ec"), vendor: Cow::Borrowed("pc"), os: Cow::Borrowed("windows"), env: Cow::Borrowed("msvc"), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("arm64ec-pc-windows-msvc"), }, ), ( "armeb-unknown-linux-gnueabi", - Target { + TargetInfo { full_arch: Cow::Borrowed("armeb"), arch: Cow::Borrowed("arm"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("linux"), env: Cow::Borrowed("gnu"), abi: Cow::Borrowed("eabi"), + unversioned_llvm_target: Cow::Borrowed("armeb-unknown-linux-gnueabi"), }, ), ( "armebv7r-none-eabi", - Target { + TargetInfo { full_arch: Cow::Borrowed("armebv7r"), arch: Cow::Borrowed("arm"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("none"), env: Cow::Borrowed(""), abi: Cow::Borrowed("eabi"), + unversioned_llvm_target: Cow::Borrowed("armebv7r-none-eabi"), }, ), ( "armebv7r-none-eabihf", - Target { + TargetInfo { full_arch: Cow::Borrowed("armebv7r"), arch: Cow::Borrowed("arm"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("none"), env: Cow::Borrowed(""), abi: Cow::Borrowed("eabihf"), + unversioned_llvm_target: Cow::Borrowed("armebv7r-none-eabihf"), }, ), ( "armv4t-none-eabi", - Target { + TargetInfo { full_arch: Cow::Borrowed("armv4t"), arch: Cow::Borrowed("arm"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("none"), env: Cow::Borrowed(""), abi: Cow::Borrowed("eabi"), + unversioned_llvm_target: Cow::Borrowed("armv4t-none-eabi"), }, ), ( "armv4t-unknown-linux-gnueabi", - Target { + TargetInfo { full_arch: Cow::Borrowed("armv4t"), arch: Cow::Borrowed("arm"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("linux"), env: Cow::Borrowed("gnu"), abi: Cow::Borrowed("eabi"), + unversioned_llvm_target: Cow::Borrowed("armv4t-unknown-linux-gnueabi"), }, ), ( "armv5te-none-eabi", - Target { + TargetInfo { full_arch: Cow::Borrowed("armv5te"), arch: Cow::Borrowed("arm"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("none"), env: Cow::Borrowed(""), abi: Cow::Borrowed("eabi"), + unversioned_llvm_target: Cow::Borrowed("armv5te-none-eabi"), }, ), ( "armv5te-unknown-linux-gnueabi", - Target { + TargetInfo { full_arch: Cow::Borrowed("armv5te"), arch: Cow::Borrowed("arm"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("linux"), env: Cow::Borrowed("gnu"), abi: Cow::Borrowed("eabi"), + unversioned_llvm_target: Cow::Borrowed("armv5te-unknown-linux-gnueabi"), }, ), ( "armv5te-unknown-linux-musleabi", - Target { + TargetInfo { full_arch: Cow::Borrowed("armv5te"), arch: Cow::Borrowed("arm"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("linux"), env: Cow::Borrowed("musl"), abi: Cow::Borrowed("eabi"), + unversioned_llvm_target: Cow::Borrowed("armv5te-unknown-linux-gnueabi"), }, ), ( "armv5te-unknown-linux-uclibceabi", - Target { + TargetInfo { full_arch: Cow::Borrowed("armv5te"), arch: Cow::Borrowed("arm"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("linux"), env: Cow::Borrowed("uclibc"), abi: Cow::Borrowed("eabi"), + unversioned_llvm_target: Cow::Borrowed("armv5te-unknown-linux-uclibcgnueabi"), }, ), ( "armv6-unknown-freebsd", - Target { + TargetInfo { full_arch: Cow::Borrowed("armv6"), arch: Cow::Borrowed("arm"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("freebsd"), env: Cow::Borrowed("gnu"), abi: Cow::Borrowed("eabihf"), + unversioned_llvm_target: Cow::Borrowed("armv6-unknown-freebsd-gnueabihf"), }, ), ( "armv6-unknown-netbsd-eabihf", - Target { + TargetInfo { full_arch: Cow::Borrowed("armv6"), arch: Cow::Borrowed("arm"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("netbsd"), env: Cow::Borrowed(""), abi: Cow::Borrowed("eabihf"), + unversioned_llvm_target: Cow::Borrowed("armv6-unknown-netbsdelf-eabihf"), }, ), ( "armv6k-nintendo-3ds", - Target { + TargetInfo { full_arch: Cow::Borrowed("armv6k"), arch: Cow::Borrowed("arm"), vendor: Cow::Borrowed("nintendo"), os: Cow::Borrowed("horizon"), env: Cow::Borrowed("newlib"), abi: Cow::Borrowed("eabihf"), + unversioned_llvm_target: Cow::Borrowed("armv6k-none-eabihf"), }, ), ( "armv7-apple-ios", - Target { + TargetInfo { full_arch: Cow::Borrowed("armv7"), arch: Cow::Borrowed("arm"), vendor: Cow::Borrowed("apple"), os: Cow::Borrowed("ios"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("armv7-apple-ios"), }, ), ( "armv7-linux-androideabi", - Target { + TargetInfo { full_arch: Cow::Borrowed("armv7"), arch: Cow::Borrowed("arm"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("android"), env: Cow::Borrowed(""), abi: Cow::Borrowed("eabi"), + unversioned_llvm_target: Cow::Borrowed("armv7-none-linux-android"), }, ), ( "armv7-rtems-eabihf", - Target { + TargetInfo { full_arch: Cow::Borrowed("armv7"), arch: Cow::Borrowed("arm"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("rtems"), env: Cow::Borrowed("newlib"), abi: Cow::Borrowed("eabihf"), + unversioned_llvm_target: Cow::Borrowed("armv7-unknown-none-eabihf"), }, ), ( "armv7-sony-vita-newlibeabihf", - Target { + TargetInfo { full_arch: Cow::Borrowed("armv7"), arch: Cow::Borrowed("arm"), vendor: Cow::Borrowed("sony"), os: Cow::Borrowed("vita"), env: Cow::Borrowed("newlib"), abi: Cow::Borrowed("eabihf"), + unversioned_llvm_target: Cow::Borrowed("thumbv7a-vita-eabihf"), }, ), ( "armv7-unknown-freebsd", - Target { + TargetInfo { full_arch: Cow::Borrowed("armv7"), arch: Cow::Borrowed("arm"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("freebsd"), env: Cow::Borrowed("gnu"), abi: Cow::Borrowed("eabihf"), + unversioned_llvm_target: Cow::Borrowed("armv7-unknown-freebsd-gnueabihf"), }, ), ( "armv7-unknown-linux-gnueabi", - Target { + TargetInfo { full_arch: Cow::Borrowed("armv7"), arch: Cow::Borrowed("arm"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("linux"), env: Cow::Borrowed("gnu"), abi: Cow::Borrowed("eabi"), + unversioned_llvm_target: Cow::Borrowed("armv7-unknown-linux-gnueabi"), }, ), ( "armv7-unknown-linux-gnueabihf", - Target { + TargetInfo { full_arch: Cow::Borrowed("armv7"), arch: Cow::Borrowed("arm"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("linux"), env: Cow::Borrowed("gnu"), abi: Cow::Borrowed("eabihf"), + unversioned_llvm_target: Cow::Borrowed("armv7-unknown-linux-gnueabihf"), }, ), ( "armv7-unknown-linux-musleabi", - Target { + TargetInfo { full_arch: Cow::Borrowed("armv7"), arch: Cow::Borrowed("arm"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("linux"), env: Cow::Borrowed("musl"), abi: Cow::Borrowed("eabi"), + unversioned_llvm_target: Cow::Borrowed("armv7-unknown-linux-gnueabi"), }, ), ( "armv7-unknown-linux-musleabihf", - Target { + TargetInfo { full_arch: Cow::Borrowed("armv7"), arch: Cow::Borrowed("arm"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("linux"), env: Cow::Borrowed("musl"), abi: Cow::Borrowed("eabihf"), + unversioned_llvm_target: Cow::Borrowed("armv7-unknown-linux-gnueabihf"), }, ), ( "armv7-unknown-linux-ohos", - Target { + TargetInfo { full_arch: Cow::Borrowed("armv7"), arch: Cow::Borrowed("arm"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("linux"), env: Cow::Borrowed("ohos"), abi: Cow::Borrowed("eabi"), + unversioned_llvm_target: Cow::Borrowed("armv7-unknown-linux-ohos"), }, ), ( "armv7-unknown-linux-uclibceabi", - Target { + TargetInfo { full_arch: Cow::Borrowed("armv7"), arch: Cow::Borrowed("arm"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("linux"), env: Cow::Borrowed("uclibc"), abi: Cow::Borrowed("eabi"), + unversioned_llvm_target: Cow::Borrowed("armv7-unknown-linux-gnueabi"), }, ), ( "armv7-unknown-linux-uclibceabihf", - Target { + TargetInfo { full_arch: Cow::Borrowed("armv7"), arch: Cow::Borrowed("arm"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("linux"), env: Cow::Borrowed("uclibc"), abi: Cow::Borrowed("eabihf"), + unversioned_llvm_target: Cow::Borrowed("armv7-unknown-linux-gnueabihf"), }, ), ( "armv7-unknown-netbsd-eabihf", - Target { + TargetInfo { full_arch: Cow::Borrowed("armv7"), arch: Cow::Borrowed("arm"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("netbsd"), env: Cow::Borrowed(""), abi: Cow::Borrowed("eabihf"), + unversioned_llvm_target: Cow::Borrowed("armv7-unknown-netbsdelf-eabihf"), }, ), ( "armv7-unknown-trusty", - Target { + TargetInfo { full_arch: Cow::Borrowed("armv7"), arch: Cow::Borrowed("arm"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("trusty"), env: Cow::Borrowed(""), abi: Cow::Borrowed("eabi"), + unversioned_llvm_target: Cow::Borrowed("armv7-unknown-unknown-gnueabi"), }, ), ( "armv7-wrs-vxworks-eabihf", - Target { + TargetInfo { full_arch: Cow::Borrowed("armv7"), arch: Cow::Borrowed("arm"), vendor: Cow::Borrowed("wrs"), os: Cow::Borrowed("vxworks"), env: Cow::Borrowed("gnu"), abi: Cow::Borrowed("eabihf"), + unversioned_llvm_target: Cow::Borrowed("armv7-unknown-linux-gnueabihf"), }, ), ( "armv7a-kmc-solid_asp3-eabi", - Target { + TargetInfo { full_arch: Cow::Borrowed("armv7a"), arch: Cow::Borrowed("arm"), vendor: Cow::Borrowed("kmc"), os: Cow::Borrowed("solid_asp3"), env: Cow::Borrowed(""), abi: Cow::Borrowed("eabi"), + unversioned_llvm_target: Cow::Borrowed("armv7a-none-eabi"), }, ), ( "armv7a-kmc-solid_asp3-eabihf", - Target { + TargetInfo { full_arch: Cow::Borrowed("armv7a"), arch: Cow::Borrowed("arm"), vendor: Cow::Borrowed("kmc"), os: Cow::Borrowed("solid_asp3"), env: Cow::Borrowed(""), abi: Cow::Borrowed("eabihf"), + unversioned_llvm_target: Cow::Borrowed("armv7a-none-eabihf"), }, ), ( "armv7a-none-eabi", - Target { + TargetInfo { full_arch: Cow::Borrowed("armv7a"), arch: Cow::Borrowed("arm"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("none"), env: Cow::Borrowed(""), abi: Cow::Borrowed("eabi"), + unversioned_llvm_target: Cow::Borrowed("armv7a-none-eabi"), }, ), ( "armv7a-none-eabihf", - Target { + TargetInfo { full_arch: Cow::Borrowed("armv7a"), arch: Cow::Borrowed("arm"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("none"), env: Cow::Borrowed(""), abi: Cow::Borrowed("eabihf"), + unversioned_llvm_target: Cow::Borrowed("armv7a-none-eabihf"), }, ), ( "armv7k-apple-watchos", - Target { + TargetInfo { full_arch: Cow::Borrowed("armv7k"), arch: Cow::Borrowed("arm"), vendor: Cow::Borrowed("apple"), os: Cow::Borrowed("watchos"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("armv7k-apple-watchos"), }, ), ( "armv7r-none-eabi", - Target { + TargetInfo { full_arch: Cow::Borrowed("armv7r"), arch: Cow::Borrowed("arm"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("none"), env: Cow::Borrowed(""), abi: Cow::Borrowed("eabi"), + unversioned_llvm_target: Cow::Borrowed("armv7r-none-eabi"), }, ), ( "armv7r-none-eabihf", - Target { + TargetInfo { full_arch: Cow::Borrowed("armv7r"), arch: Cow::Borrowed("arm"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("none"), env: Cow::Borrowed(""), abi: Cow::Borrowed("eabihf"), + unversioned_llvm_target: Cow::Borrowed("armv7r-none-eabihf"), }, ), ( "armv7s-apple-ios", - Target { + TargetInfo { full_arch: Cow::Borrowed("armv7s"), arch: Cow::Borrowed("arm"), vendor: Cow::Borrowed("apple"), os: Cow::Borrowed("ios"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("armv7s-apple-ios"), }, ), ( "armv8r-none-eabihf", - Target { + TargetInfo { full_arch: Cow::Borrowed("armv8r"), arch: Cow::Borrowed("arm"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("none"), env: Cow::Borrowed(""), abi: Cow::Borrowed("eabihf"), + unversioned_llvm_target: Cow::Borrowed("armv8r-none-eabihf"), }, ), ( "asmjs-unknown-emscripten", - Target { + TargetInfo { full_arch: Cow::Borrowed("asmjs"), arch: Cow::Borrowed("wasm32"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("emscripten"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("wasm32-unknown-emscripten"), }, ), ( "avr-unknown-gnu-atmega328", - Target { + TargetInfo { full_arch: Cow::Borrowed("avr"), arch: Cow::Borrowed("avr"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("none"), env: Cow::Borrowed("gnu"), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("avr-unknown-unknown"), }, ), ( "bpfeb-unknown-none", - Target { + TargetInfo { full_arch: Cow::Borrowed("bpfeb"), arch: Cow::Borrowed("bpf"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("none"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("bpfeb"), }, ), ( "bpfel-unknown-none", - Target { + TargetInfo { full_arch: Cow::Borrowed("bpfel"), arch: Cow::Borrowed("bpf"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("none"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("bpfel"), }, ), ( "csky-unknown-linux-gnuabiv2", - Target { + TargetInfo { full_arch: Cow::Borrowed("csky"), arch: Cow::Borrowed("csky"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("linux"), env: Cow::Borrowed("gnu"), abi: Cow::Borrowed("abiv2"), + unversioned_llvm_target: Cow::Borrowed("csky-unknown-linux-gnuabiv2"), }, ), ( "csky-unknown-linux-gnuabiv2hf", - Target { + TargetInfo { full_arch: Cow::Borrowed("csky"), arch: Cow::Borrowed("csky"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("linux"), env: Cow::Borrowed("gnu"), abi: Cow::Borrowed("abiv2hf"), + unversioned_llvm_target: Cow::Borrowed("csky-unknown-linux-gnuabiv2"), }, ), ( "hexagon-unknown-linux-musl", - Target { + TargetInfo { full_arch: Cow::Borrowed("hexagon"), arch: Cow::Borrowed("hexagon"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("linux"), env: Cow::Borrowed("musl"), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("hexagon-unknown-linux-musl"), }, ), ( "hexagon-unknown-none-elf", - Target { + TargetInfo { full_arch: Cow::Borrowed("hexagon"), arch: Cow::Borrowed("hexagon"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("none"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("hexagon-unknown-none-elf"), }, ), ( "i386-apple-ios", - Target { + TargetInfo { full_arch: Cow::Borrowed("i386"), arch: Cow::Borrowed("x86"), vendor: Cow::Borrowed("apple"), os: Cow::Borrowed("ios"), env: Cow::Borrowed(""), abi: Cow::Borrowed("sim"), + unversioned_llvm_target: Cow::Borrowed("i386-apple-ios-simulator"), }, ), ( "i586-pc-nto-qnx700", - Target { + TargetInfo { full_arch: Cow::Borrowed("i586"), arch: Cow::Borrowed("x86"), vendor: Cow::Borrowed("pc"), os: Cow::Borrowed("nto"), env: Cow::Borrowed("nto70"), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("i586-pc-unknown"), }, ), ( "i586-pc-windows-msvc", - Target { + TargetInfo { full_arch: Cow::Borrowed("i586"), arch: Cow::Borrowed("x86"), vendor: Cow::Borrowed("pc"), os: Cow::Borrowed("windows"), env: Cow::Borrowed("msvc"), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("i586-pc-windows-msvc"), }, ), ( "i586-unknown-linux-gnu", - Target { + TargetInfo { full_arch: Cow::Borrowed("i586"), arch: Cow::Borrowed("x86"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("linux"), env: Cow::Borrowed("gnu"), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("i586-unknown-linux-gnu"), }, ), ( "i586-unknown-linux-musl", - Target { + TargetInfo { full_arch: Cow::Borrowed("i586"), arch: Cow::Borrowed("x86"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("linux"), env: Cow::Borrowed("musl"), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("i586-unknown-linux-musl"), }, ), ( "i586-unknown-netbsd", - Target { + TargetInfo { full_arch: Cow::Borrowed("i586"), arch: Cow::Borrowed("x86"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("netbsd"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("i586-unknown-netbsdelf"), }, ), ( "i686-apple-darwin", - Target { + TargetInfo { full_arch: Cow::Borrowed("i686"), arch: Cow::Borrowed("x86"), vendor: Cow::Borrowed("apple"), os: Cow::Borrowed("macos"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("i686-apple-macosx"), }, ), ( "i686-linux-android", - Target { + TargetInfo { full_arch: Cow::Borrowed("i686"), arch: Cow::Borrowed("x86"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("android"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("i686-linux-android"), }, ), ( "i686-pc-windows-gnu", - Target { + TargetInfo { full_arch: Cow::Borrowed("i686"), arch: Cow::Borrowed("x86"), vendor: Cow::Borrowed("pc"), os: Cow::Borrowed("windows"), env: Cow::Borrowed("gnu"), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("i686-pc-windows-gnu"), }, ), ( "i686-pc-windows-gnullvm", - Target { + TargetInfo { full_arch: Cow::Borrowed("i686"), arch: Cow::Borrowed("x86"), vendor: Cow::Borrowed("pc"), os: Cow::Borrowed("windows"), env: Cow::Borrowed("gnu"), abi: Cow::Borrowed("llvm"), + unversioned_llvm_target: Cow::Borrowed("i686-pc-windows-gnu"), }, ), ( "i686-pc-windows-msvc", - Target { + TargetInfo { full_arch: Cow::Borrowed("i686"), arch: Cow::Borrowed("x86"), vendor: Cow::Borrowed("pc"), os: Cow::Borrowed("windows"), env: Cow::Borrowed("msvc"), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("i686-pc-windows-msvc"), }, ), ( "i686-unknown-freebsd", - Target { + TargetInfo { full_arch: Cow::Borrowed("i686"), arch: Cow::Borrowed("x86"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("freebsd"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("i686-unknown-freebsd"), }, ), ( "i686-unknown-haiku", - Target { + TargetInfo { full_arch: Cow::Borrowed("i686"), arch: Cow::Borrowed("x86"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("haiku"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("i686-unknown-haiku"), }, ), ( "i686-unknown-hurd-gnu", - Target { + TargetInfo { full_arch: Cow::Borrowed("i686"), arch: Cow::Borrowed("x86"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("hurd"), env: Cow::Borrowed("gnu"), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("i686-unknown-hurd-gnu"), }, ), ( "i686-unknown-linux-gnu", - Target { + TargetInfo { full_arch: Cow::Borrowed("i686"), arch: Cow::Borrowed("x86"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("linux"), env: Cow::Borrowed("gnu"), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("i686-unknown-linux-gnu"), }, ), ( "i686-unknown-linux-musl", - Target { + TargetInfo { full_arch: Cow::Borrowed("i686"), arch: Cow::Borrowed("x86"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("linux"), env: Cow::Borrowed("musl"), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("i686-unknown-linux-musl"), }, ), ( "i686-unknown-netbsd", - Target { + TargetInfo { full_arch: Cow::Borrowed("i686"), arch: Cow::Borrowed("x86"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("netbsd"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("i686-unknown-netbsdelf"), }, ), ( "i686-unknown-openbsd", - Target { + TargetInfo { full_arch: Cow::Borrowed("i686"), arch: Cow::Borrowed("x86"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("openbsd"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("i686-unknown-openbsd"), }, ), ( "i686-unknown-redox", - Target { + TargetInfo { full_arch: Cow::Borrowed("i686"), arch: Cow::Borrowed("x86"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("redox"), env: Cow::Borrowed("relibc"), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("i686-unknown-redox"), }, ), ( "i686-unknown-uefi", - Target { + TargetInfo { full_arch: Cow::Borrowed("i686"), arch: Cow::Borrowed("x86"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("uefi"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("i686-unknown-windows-gnu"), }, ), ( "i686-uwp-windows-gnu", - Target { + TargetInfo { full_arch: Cow::Borrowed("i686"), arch: Cow::Borrowed("x86"), vendor: Cow::Borrowed("uwp"), os: Cow::Borrowed("windows"), env: Cow::Borrowed("gnu"), abi: Cow::Borrowed("uwp"), + unversioned_llvm_target: Cow::Borrowed("i686-pc-windows-gnu"), }, ), ( "i686-uwp-windows-msvc", - Target { + TargetInfo { full_arch: Cow::Borrowed("i686"), arch: Cow::Borrowed("x86"), vendor: Cow::Borrowed("uwp"), os: Cow::Borrowed("windows"), env: Cow::Borrowed("msvc"), abi: Cow::Borrowed("uwp"), + unversioned_llvm_target: Cow::Borrowed("i686-pc-windows-msvc"), }, ), ( "i686-win7-windows-msvc", - Target { + TargetInfo { full_arch: Cow::Borrowed("i686"), arch: Cow::Borrowed("x86"), vendor: Cow::Borrowed("win7"), os: Cow::Borrowed("windows"), env: Cow::Borrowed("msvc"), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("i686-pc-windows-msvc"), }, ), ( "i686-wrs-vxworks", - Target { + TargetInfo { full_arch: Cow::Borrowed("i686"), arch: Cow::Borrowed("x86"), vendor: Cow::Borrowed("wrs"), os: Cow::Borrowed("vxworks"), env: Cow::Borrowed("gnu"), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("i686-unknown-linux-gnu"), }, ), ( "loongarch64-unknown-linux-gnu", - Target { + TargetInfo { full_arch: Cow::Borrowed("loongarch64"), arch: Cow::Borrowed("loongarch64"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("linux"), env: Cow::Borrowed("gnu"), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("loongarch64-unknown-linux-gnu"), }, ), ( "loongarch64-unknown-linux-musl", - Target { + TargetInfo { full_arch: Cow::Borrowed("loongarch64"), arch: Cow::Borrowed("loongarch64"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("linux"), env: Cow::Borrowed("musl"), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("loongarch64-unknown-linux-musl"), }, ), ( "loongarch64-unknown-linux-ohos", - Target { + TargetInfo { full_arch: Cow::Borrowed("loongarch64"), arch: Cow::Borrowed("loongarch64"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("linux"), env: Cow::Borrowed("ohos"), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("loongarch64-unknown-linux-ohos"), }, ), ( "loongarch64-unknown-none", - Target { + TargetInfo { full_arch: Cow::Borrowed("loongarch64"), arch: Cow::Borrowed("loongarch64"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("none"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("loongarch64-unknown-none"), }, ), ( "loongarch64-unknown-none-softfloat", - Target { + TargetInfo { full_arch: Cow::Borrowed("loongarch64"), arch: Cow::Borrowed("loongarch64"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("none"), env: Cow::Borrowed(""), abi: Cow::Borrowed("softfloat"), + unversioned_llvm_target: Cow::Borrowed("loongarch64-unknown-none"), }, ), ( "m68k-unknown-linux-gnu", - Target { + TargetInfo { full_arch: Cow::Borrowed("m68k"), arch: Cow::Borrowed("m68k"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("linux"), env: Cow::Borrowed("gnu"), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("m68k-unknown-linux-gnu"), }, ), ( "mips-unknown-linux-gnu", - Target { + TargetInfo { full_arch: Cow::Borrowed("mips"), arch: Cow::Borrowed("mips"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("linux"), env: Cow::Borrowed("gnu"), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("mips-unknown-linux-gnu"), }, ), ( "mips-unknown-linux-musl", - Target { + TargetInfo { full_arch: Cow::Borrowed("mips"), arch: Cow::Borrowed("mips"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("linux"), env: Cow::Borrowed("musl"), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("mips-unknown-linux-musl"), }, ), ( "mips-unknown-linux-uclibc", - Target { + TargetInfo { full_arch: Cow::Borrowed("mips"), arch: Cow::Borrowed("mips"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("linux"), env: Cow::Borrowed("uclibc"), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("mips-unknown-linux-uclibc"), }, ), ( "mips64-openwrt-linux-musl", - Target { + TargetInfo { full_arch: Cow::Borrowed("mips64"), arch: Cow::Borrowed("mips64"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("linux"), env: Cow::Borrowed("musl"), abi: Cow::Borrowed("abi64"), + unversioned_llvm_target: Cow::Borrowed("mips64-unknown-linux-musl"), }, ), ( "mips64-unknown-linux-gnuabi64", - Target { + TargetInfo { full_arch: Cow::Borrowed("mips64"), arch: Cow::Borrowed("mips64"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("linux"), env: Cow::Borrowed("gnu"), abi: Cow::Borrowed("abi64"), + unversioned_llvm_target: Cow::Borrowed("mips64-unknown-linux-gnuabi64"), }, ), ( "mips64-unknown-linux-muslabi64", - Target { + TargetInfo { full_arch: Cow::Borrowed("mips64"), arch: Cow::Borrowed("mips64"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("linux"), env: Cow::Borrowed("musl"), abi: Cow::Borrowed("abi64"), + unversioned_llvm_target: Cow::Borrowed("mips64-unknown-linux-musl"), }, ), ( "mips64el-unknown-linux-gnuabi64", - Target { + TargetInfo { full_arch: Cow::Borrowed("mips64el"), arch: Cow::Borrowed("mips64"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("linux"), env: Cow::Borrowed("gnu"), abi: Cow::Borrowed("abi64"), + unversioned_llvm_target: Cow::Borrowed("mips64el-unknown-linux-gnuabi64"), }, ), ( "mips64el-unknown-linux-muslabi64", - Target { + TargetInfo { full_arch: Cow::Borrowed("mips64el"), arch: Cow::Borrowed("mips64"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("linux"), env: Cow::Borrowed("musl"), abi: Cow::Borrowed("abi64"), + unversioned_llvm_target: Cow::Borrowed("mips64el-unknown-linux-musl"), }, ), ( "mipsel-sony-psp", - Target { + TargetInfo { full_arch: Cow::Borrowed("mipsel"), arch: Cow::Borrowed("mips"), vendor: Cow::Borrowed("sony"), os: Cow::Borrowed("psp"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("mipsel-sony-psp"), }, ), ( "mipsel-sony-psx", - Target { + TargetInfo { full_arch: Cow::Borrowed("mipsel"), arch: Cow::Borrowed("mips"), vendor: Cow::Borrowed("sony"), os: Cow::Borrowed("none"), env: Cow::Borrowed("psx"), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("mipsel-sony-psx"), }, ), ( "mipsel-unknown-linux-gnu", - Target { + TargetInfo { full_arch: Cow::Borrowed("mipsel"), arch: Cow::Borrowed("mips"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("linux"), env: Cow::Borrowed("gnu"), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("mipsel-unknown-linux-gnu"), }, ), ( "mipsel-unknown-linux-musl", - Target { + TargetInfo { full_arch: Cow::Borrowed("mipsel"), arch: Cow::Borrowed("mips"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("linux"), env: Cow::Borrowed("musl"), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("mipsel-unknown-linux-musl"), }, ), ( "mipsel-unknown-linux-uclibc", - Target { + TargetInfo { full_arch: Cow::Borrowed("mipsel"), arch: Cow::Borrowed("mips"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("linux"), env: Cow::Borrowed("uclibc"), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("mipsel-unknown-linux-uclibc"), }, ), ( "mipsel-unknown-netbsd", - Target { + TargetInfo { full_arch: Cow::Borrowed("mipsel"), arch: Cow::Borrowed("mips"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("netbsd"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("mipsel-unknown-netbsd"), }, ), ( "mipsel-unknown-none", - Target { + TargetInfo { full_arch: Cow::Borrowed("mipsel"), arch: Cow::Borrowed("mips"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("none"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("mipsel-unknown-none"), }, ), ( "mipsisa32r6-unknown-linux-gnu", - Target { + TargetInfo { full_arch: Cow::Borrowed("mipsisa32r6"), arch: Cow::Borrowed("mips32r6"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("linux"), env: Cow::Borrowed("gnu"), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("mipsisa32r6-unknown-linux-gnu"), }, ), ( "mipsisa32r6el-unknown-linux-gnu", - Target { + TargetInfo { full_arch: Cow::Borrowed("mipsisa32r6el"), arch: Cow::Borrowed("mips32r6"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("linux"), env: Cow::Borrowed("gnu"), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("mipsisa32r6el-unknown-linux-gnu"), }, ), ( "mipsisa64r6-unknown-linux-gnuabi64", - Target { + TargetInfo { full_arch: Cow::Borrowed("mipsisa64r6"), arch: Cow::Borrowed("mips64r6"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("linux"), env: Cow::Borrowed("gnu"), abi: Cow::Borrowed("abi64"), + unversioned_llvm_target: Cow::Borrowed("mipsisa64r6-unknown-linux-gnuabi64"), }, ), ( "mipsisa64r6el-unknown-linux-gnuabi64", - Target { + TargetInfo { full_arch: Cow::Borrowed("mipsisa64r6el"), arch: Cow::Borrowed("mips64r6"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("linux"), env: Cow::Borrowed("gnu"), abi: Cow::Borrowed("abi64"), + unversioned_llvm_target: Cow::Borrowed("mipsisa64r6el-unknown-linux-gnuabi64"), }, ), ( "msp430-none-elf", - Target { + TargetInfo { full_arch: Cow::Borrowed("msp430"), arch: Cow::Borrowed("msp430"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("none"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("msp430-none-elf"), }, ), ( "nvptx64-nvidia-cuda", - Target { + TargetInfo { full_arch: Cow::Borrowed("nvptx64"), arch: Cow::Borrowed("nvptx64"), vendor: Cow::Borrowed("nvidia"), os: Cow::Borrowed("cuda"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("nvptx64-nvidia-cuda"), }, ), ( "powerpc-unknown-freebsd", - Target { + TargetInfo { full_arch: Cow::Borrowed("powerpc"), arch: Cow::Borrowed("powerpc"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("freebsd"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("powerpc-unknown-freebsd13.0"), }, ), ( "powerpc-unknown-linux-gnu", - Target { + TargetInfo { full_arch: Cow::Borrowed("powerpc"), arch: Cow::Borrowed("powerpc"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("linux"), env: Cow::Borrowed("gnu"), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("powerpc-unknown-linux-gnu"), }, ), ( "powerpc-unknown-linux-gnuspe", - Target { + TargetInfo { full_arch: Cow::Borrowed("powerpc"), arch: Cow::Borrowed("powerpc"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("linux"), env: Cow::Borrowed("gnu"), abi: Cow::Borrowed("spe"), + unversioned_llvm_target: Cow::Borrowed("powerpc-unknown-linux-gnuspe"), }, ), ( "powerpc-unknown-linux-musl", - Target { + TargetInfo { full_arch: Cow::Borrowed("powerpc"), arch: Cow::Borrowed("powerpc"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("linux"), env: Cow::Borrowed("musl"), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("powerpc-unknown-linux-musl"), }, ), ( "powerpc-unknown-linux-muslspe", - Target { + TargetInfo { full_arch: Cow::Borrowed("powerpc"), arch: Cow::Borrowed("powerpc"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("linux"), env: Cow::Borrowed("musl"), abi: Cow::Borrowed("spe"), + unversioned_llvm_target: Cow::Borrowed("powerpc-unknown-linux-muslspe"), }, ), ( "powerpc-unknown-netbsd", - Target { + TargetInfo { full_arch: Cow::Borrowed("powerpc"), arch: Cow::Borrowed("powerpc"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("netbsd"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("powerpc-unknown-netbsd"), }, ), ( "powerpc-unknown-openbsd", - Target { + TargetInfo { full_arch: Cow::Borrowed("powerpc"), arch: Cow::Borrowed("powerpc"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("openbsd"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("powerpc-unknown-openbsd"), }, ), ( "powerpc-wrs-vxworks", - Target { + TargetInfo { full_arch: Cow::Borrowed("powerpc"), arch: Cow::Borrowed("powerpc"), vendor: Cow::Borrowed("wrs"), os: Cow::Borrowed("vxworks"), env: Cow::Borrowed("gnu"), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("powerpc-unknown-linux-gnu"), }, ), ( "powerpc-wrs-vxworks-spe", - Target { + TargetInfo { full_arch: Cow::Borrowed("powerpc"), arch: Cow::Borrowed("powerpc"), vendor: Cow::Borrowed("wrs"), os: Cow::Borrowed("vxworks"), env: Cow::Borrowed("gnu"), abi: Cow::Borrowed("spe"), + unversioned_llvm_target: Cow::Borrowed("powerpc-unknown-linux-gnuspe"), }, ), ( "powerpc64-ibm-aix", - Target { + TargetInfo { full_arch: Cow::Borrowed("powerpc64"), arch: Cow::Borrowed("powerpc64"), vendor: Cow::Borrowed("ibm"), os: Cow::Borrowed("aix"), env: Cow::Borrowed(""), abi: Cow::Borrowed("vec-extabi"), + unversioned_llvm_target: Cow::Borrowed("powerpc64-ibm-aix"), }, ), ( "powerpc64-unknown-freebsd", - Target { + TargetInfo { full_arch: Cow::Borrowed("powerpc64"), arch: Cow::Borrowed("powerpc64"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("freebsd"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("powerpc64-unknown-freebsd"), }, ), ( "powerpc64-unknown-linux-gnu", - Target { + TargetInfo { full_arch: Cow::Borrowed("powerpc64"), arch: Cow::Borrowed("powerpc64"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("linux"), env: Cow::Borrowed("gnu"), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("powerpc64-unknown-linux-gnu"), }, ), ( "powerpc64-unknown-linux-musl", - Target { + TargetInfo { full_arch: Cow::Borrowed("powerpc64"), arch: Cow::Borrowed("powerpc64"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("linux"), env: Cow::Borrowed("musl"), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("powerpc64-unknown-linux-musl"), }, ), ( "powerpc64-unknown-openbsd", - Target { + TargetInfo { full_arch: Cow::Borrowed("powerpc64"), arch: Cow::Borrowed("powerpc64"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("openbsd"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("powerpc64-unknown-openbsd"), }, ), ( "powerpc64-wrs-vxworks", - Target { + TargetInfo { full_arch: Cow::Borrowed("powerpc64"), arch: Cow::Borrowed("powerpc64"), vendor: Cow::Borrowed("wrs"), os: Cow::Borrowed("vxworks"), env: Cow::Borrowed("gnu"), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("powerpc64-unknown-linux-gnu"), }, ), ( "powerpc64le-unknown-freebsd", - Target { + TargetInfo { full_arch: Cow::Borrowed("powerpc64le"), arch: Cow::Borrowed("powerpc64"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("freebsd"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("powerpc64le-unknown-freebsd"), }, ), ( "powerpc64le-unknown-linux-gnu", - Target { + TargetInfo { full_arch: Cow::Borrowed("powerpc64le"), arch: Cow::Borrowed("powerpc64"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("linux"), env: Cow::Borrowed("gnu"), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("powerpc64le-unknown-linux-gnu"), }, ), ( "powerpc64le-unknown-linux-musl", - Target { + TargetInfo { full_arch: Cow::Borrowed("powerpc64le"), arch: Cow::Borrowed("powerpc64"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("linux"), env: Cow::Borrowed("musl"), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("powerpc64le-unknown-linux-musl"), }, ), ( "riscv32-wrs-vxworks", - Target { + TargetInfo { full_arch: Cow::Borrowed("riscv32"), arch: Cow::Borrowed("riscv32"), vendor: Cow::Borrowed("wrs"), os: Cow::Borrowed("vxworks"), env: Cow::Borrowed("gnu"), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("riscv32"), }, ), ( "riscv32e-unknown-none-elf", - Target { + TargetInfo { full_arch: Cow::Borrowed("riscv32e"), arch: Cow::Borrowed("riscv32"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("none"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("riscv32"), }, ), ( "riscv32em-unknown-none-elf", - Target { + TargetInfo { full_arch: Cow::Borrowed("riscv32em"), arch: Cow::Borrowed("riscv32"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("none"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("riscv32"), }, ), ( "riscv32emc-unknown-none-elf", - Target { + TargetInfo { full_arch: Cow::Borrowed("riscv32emc"), arch: Cow::Borrowed("riscv32"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("none"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("riscv32"), }, ), ( "riscv32gc-unknown-linux-gnu", - Target { + TargetInfo { full_arch: Cow::Borrowed("riscv32gc"), arch: Cow::Borrowed("riscv32"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("linux"), env: Cow::Borrowed("gnu"), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("riscv32-unknown-linux-gnu"), }, ), ( "riscv32gc-unknown-linux-musl", - Target { + TargetInfo { full_arch: Cow::Borrowed("riscv32gc"), arch: Cow::Borrowed("riscv32"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("linux"), env: Cow::Borrowed("musl"), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("riscv32-unknown-linux-musl"), }, ), ( "riscv32i-unknown-none-elf", - Target { + TargetInfo { full_arch: Cow::Borrowed("riscv32i"), arch: Cow::Borrowed("riscv32"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("none"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("riscv32"), }, ), ( "riscv32im-risc0-zkvm-elf", - Target { + TargetInfo { full_arch: Cow::Borrowed("riscv32im"), arch: Cow::Borrowed("riscv32"), vendor: Cow::Borrowed("risc0"), os: Cow::Borrowed("zkvm"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("riscv32"), }, ), ( "riscv32im-unknown-none-elf", - Target { + TargetInfo { full_arch: Cow::Borrowed("riscv32im"), arch: Cow::Borrowed("riscv32"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("none"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("riscv32"), }, ), ( "riscv32ima-unknown-none-elf", - Target { + TargetInfo { full_arch: Cow::Borrowed("riscv32ima"), arch: Cow::Borrowed("riscv32"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("none"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("riscv32"), }, ), ( "riscv32imac-esp-espidf", - Target { + TargetInfo { full_arch: Cow::Borrowed("riscv32imac"), arch: Cow::Borrowed("riscv32"), vendor: Cow::Borrowed("espressif"), os: Cow::Borrowed("espidf"), env: Cow::Borrowed("newlib"), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("riscv32"), }, ), ( "riscv32imac-unknown-none-elf", - Target { + TargetInfo { full_arch: Cow::Borrowed("riscv32imac"), arch: Cow::Borrowed("riscv32"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("none"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("riscv32"), }, ), ( "riscv32imac-unknown-nuttx-elf", - Target { + TargetInfo { full_arch: Cow::Borrowed("riscv32imac"), arch: Cow::Borrowed("riscv32"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("nuttx"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("riscv32"), }, ), ( "riscv32imac-unknown-xous-elf", - Target { + TargetInfo { full_arch: Cow::Borrowed("riscv32imac"), arch: Cow::Borrowed("riscv32"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("xous"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("riscv32"), }, ), ( "riscv32imafc-esp-espidf", - Target { + TargetInfo { full_arch: Cow::Borrowed("riscv32imafc"), arch: Cow::Borrowed("riscv32"), vendor: Cow::Borrowed("espressif"), os: Cow::Borrowed("espidf"), env: Cow::Borrowed("newlib"), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("riscv32"), }, ), ( "riscv32imafc-unknown-none-elf", - Target { + TargetInfo { full_arch: Cow::Borrowed("riscv32imafc"), arch: Cow::Borrowed("riscv32"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("none"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("riscv32"), }, ), ( "riscv32imafc-unknown-nuttx-elf", - Target { + TargetInfo { full_arch: Cow::Borrowed("riscv32imafc"), arch: Cow::Borrowed("riscv32"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("nuttx"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("riscv32"), }, ), ( "riscv32imc-esp-espidf", - Target { + TargetInfo { full_arch: Cow::Borrowed("riscv32imc"), arch: Cow::Borrowed("riscv32"), vendor: Cow::Borrowed("espressif"), os: Cow::Borrowed("espidf"), env: Cow::Borrowed("newlib"), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("riscv32"), }, ), ( "riscv32imc-unknown-none-elf", - Target { + TargetInfo { full_arch: Cow::Borrowed("riscv32imc"), arch: Cow::Borrowed("riscv32"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("none"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("riscv32"), }, ), ( "riscv32imc-unknown-nuttx-elf", - Target { + TargetInfo { full_arch: Cow::Borrowed("riscv32imc"), arch: Cow::Borrowed("riscv32"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("nuttx"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("riscv32"), }, ), ( "riscv64-linux-android", - Target { + TargetInfo { full_arch: Cow::Borrowed("riscv64"), arch: Cow::Borrowed("riscv64"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("android"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("riscv64-linux-android"), }, ), ( "riscv64-wrs-vxworks", - Target { + TargetInfo { full_arch: Cow::Borrowed("riscv64"), arch: Cow::Borrowed("riscv64"), vendor: Cow::Borrowed("wrs"), os: Cow::Borrowed("vxworks"), env: Cow::Borrowed("gnu"), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("riscv64"), }, ), ( "riscv64gc-unknown-freebsd", - Target { + TargetInfo { full_arch: Cow::Borrowed("riscv64gc"), arch: Cow::Borrowed("riscv64"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("freebsd"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("riscv64-unknown-freebsd"), }, ), ( "riscv64gc-unknown-fuchsia", - Target { + TargetInfo { full_arch: Cow::Borrowed("riscv64gc"), arch: Cow::Borrowed("riscv64"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("fuchsia"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("riscv64-unknown-fuchsia"), }, ), ( "riscv64gc-unknown-hermit", - Target { + TargetInfo { full_arch: Cow::Borrowed("riscv64gc"), arch: Cow::Borrowed("riscv64"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("hermit"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("riscv64-unknown-hermit"), }, ), ( "riscv64gc-unknown-linux-gnu", - Target { + TargetInfo { full_arch: Cow::Borrowed("riscv64gc"), arch: Cow::Borrowed("riscv64"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("linux"), env: Cow::Borrowed("gnu"), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("riscv64-unknown-linux-gnu"), }, ), ( "riscv64gc-unknown-linux-musl", - Target { + TargetInfo { full_arch: Cow::Borrowed("riscv64gc"), arch: Cow::Borrowed("riscv64"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("linux"), env: Cow::Borrowed("musl"), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("riscv64-unknown-linux-musl"), }, ), ( "riscv64gc-unknown-netbsd", - Target { + TargetInfo { full_arch: Cow::Borrowed("riscv64gc"), arch: Cow::Borrowed("riscv64"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("netbsd"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("riscv64-unknown-netbsd"), }, ), ( "riscv64gc-unknown-none-elf", - Target { + TargetInfo { full_arch: Cow::Borrowed("riscv64gc"), arch: Cow::Borrowed("riscv64"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("none"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("riscv64"), }, ), ( "riscv64gc-unknown-nuttx-elf", - Target { + TargetInfo { full_arch: Cow::Borrowed("riscv64gc"), arch: Cow::Borrowed("riscv64"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("nuttx"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("riscv64"), }, ), ( "riscv64gc-unknown-openbsd", - Target { + TargetInfo { full_arch: Cow::Borrowed("riscv64gc"), arch: Cow::Borrowed("riscv64"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("openbsd"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("riscv64-unknown-openbsd"), }, ), ( "riscv64imac-unknown-none-elf", - Target { + TargetInfo { full_arch: Cow::Borrowed("riscv64imac"), arch: Cow::Borrowed("riscv64"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("none"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("riscv64"), }, ), ( "riscv64imac-unknown-nuttx-elf", - Target { + TargetInfo { full_arch: Cow::Borrowed("riscv64imac"), arch: Cow::Borrowed("riscv64"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("nuttx"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("riscv64"), }, ), ( "s390x-unknown-linux-gnu", - Target { + TargetInfo { full_arch: Cow::Borrowed("s390x"), arch: Cow::Borrowed("s390x"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("linux"), env: Cow::Borrowed("gnu"), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("s390x-unknown-linux-gnu"), }, ), ( "s390x-unknown-linux-musl", - Target { + TargetInfo { full_arch: Cow::Borrowed("s390x"), arch: Cow::Borrowed("s390x"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("linux"), env: Cow::Borrowed("musl"), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("s390x-unknown-linux-musl"), }, ), ( "sparc-unknown-linux-gnu", - Target { + TargetInfo { full_arch: Cow::Borrowed("sparc"), arch: Cow::Borrowed("sparc"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("linux"), env: Cow::Borrowed("gnu"), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("sparc-unknown-linux-gnu"), }, ), ( "sparc-unknown-none-elf", - Target { + TargetInfo { full_arch: Cow::Borrowed("sparc"), arch: Cow::Borrowed("sparc"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("none"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("sparc-unknown-none-elf"), }, ), ( "sparc64-unknown-linux-gnu", - Target { + TargetInfo { full_arch: Cow::Borrowed("sparc64"), arch: Cow::Borrowed("sparc64"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("linux"), env: Cow::Borrowed("gnu"), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("sparc64-unknown-linux-gnu"), }, ), ( "sparc64-unknown-netbsd", - Target { + TargetInfo { full_arch: Cow::Borrowed("sparc64"), arch: Cow::Borrowed("sparc64"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("netbsd"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("sparc64-unknown-netbsd"), }, ), ( "sparc64-unknown-openbsd", - Target { + TargetInfo { full_arch: Cow::Borrowed("sparc64"), arch: Cow::Borrowed("sparc64"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("openbsd"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("sparc64-unknown-openbsd"), }, ), ( "sparcv9-sun-solaris", - Target { + TargetInfo { full_arch: Cow::Borrowed("sparcv9"), arch: Cow::Borrowed("sparc64"), vendor: Cow::Borrowed("sun"), os: Cow::Borrowed("solaris"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("sparcv9-sun-solaris"), }, ), ( "thumbv4t-none-eabi", - Target { + TargetInfo { full_arch: Cow::Borrowed("thumbv4t"), arch: Cow::Borrowed("arm"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("none"), env: Cow::Borrowed(""), abi: Cow::Borrowed("eabi"), + unversioned_llvm_target: Cow::Borrowed("thumbv4t-none-eabi"), }, ), ( "thumbv5te-none-eabi", - Target { + TargetInfo { full_arch: Cow::Borrowed("thumbv5te"), arch: Cow::Borrowed("arm"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("none"), env: Cow::Borrowed(""), abi: Cow::Borrowed("eabi"), + unversioned_llvm_target: Cow::Borrowed("thumbv5te-none-eabi"), }, ), ( "thumbv6m-none-eabi", - Target { + TargetInfo { full_arch: Cow::Borrowed("thumbv6m"), arch: Cow::Borrowed("arm"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("none"), env: Cow::Borrowed(""), abi: Cow::Borrowed("eabi"), + unversioned_llvm_target: Cow::Borrowed("thumbv6m-none-eabi"), }, ), ( "thumbv6m-nuttx-eabi", - Target { + TargetInfo { full_arch: Cow::Borrowed("thumbv6m"), arch: Cow::Borrowed("arm"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("nuttx"), env: Cow::Borrowed(""), abi: Cow::Borrowed("eabi"), + unversioned_llvm_target: Cow::Borrowed("thumbv6m-none-eabi"), }, ), ( "thumbv7a-pc-windows-msvc", - Target { + TargetInfo { full_arch: Cow::Borrowed("thumbv7a"), arch: Cow::Borrowed("arm"), vendor: Cow::Borrowed("pc"), os: Cow::Borrowed("windows"), env: Cow::Borrowed("msvc"), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("thumbv7a-pc-windows-msvc"), }, ), ( "thumbv7a-uwp-windows-msvc", - Target { + TargetInfo { full_arch: Cow::Borrowed("thumbv7a"), arch: Cow::Borrowed("arm"), vendor: Cow::Borrowed("uwp"), os: Cow::Borrowed("windows"), env: Cow::Borrowed("msvc"), abi: Cow::Borrowed("uwp"), + unversioned_llvm_target: Cow::Borrowed("thumbv7a-pc-windows-msvc"), }, ), ( "thumbv7em-none-eabi", - Target { + TargetInfo { full_arch: Cow::Borrowed("thumbv7em"), arch: Cow::Borrowed("arm"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("none"), env: Cow::Borrowed(""), abi: Cow::Borrowed("eabi"), + unversioned_llvm_target: Cow::Borrowed("thumbv7em-none-eabi"), }, ), ( "thumbv7em-none-eabihf", - Target { + TargetInfo { full_arch: Cow::Borrowed("thumbv7em"), arch: Cow::Borrowed("arm"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("none"), env: Cow::Borrowed(""), abi: Cow::Borrowed("eabihf"), + unversioned_llvm_target: Cow::Borrowed("thumbv7em-none-eabihf"), }, ), ( "thumbv7em-nuttx-eabi", - Target { + TargetInfo { full_arch: Cow::Borrowed("thumbv7em"), arch: Cow::Borrowed("arm"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("nuttx"), env: Cow::Borrowed(""), abi: Cow::Borrowed("eabi"), + unversioned_llvm_target: Cow::Borrowed("thumbv7em-none-eabi"), }, ), ( "thumbv7em-nuttx-eabihf", - Target { + TargetInfo { full_arch: Cow::Borrowed("thumbv7em"), arch: Cow::Borrowed("arm"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("nuttx"), env: Cow::Borrowed(""), abi: Cow::Borrowed("eabihf"), + unversioned_llvm_target: Cow::Borrowed("thumbv7em-none-eabihf"), }, ), ( "thumbv7m-none-eabi", - Target { + TargetInfo { full_arch: Cow::Borrowed("thumbv7m"), arch: Cow::Borrowed("arm"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("none"), env: Cow::Borrowed(""), abi: Cow::Borrowed("eabi"), + unversioned_llvm_target: Cow::Borrowed("thumbv7m-none-eabi"), }, ), ( "thumbv7m-nuttx-eabi", - Target { + TargetInfo { full_arch: Cow::Borrowed("thumbv7m"), arch: Cow::Borrowed("arm"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("nuttx"), env: Cow::Borrowed(""), abi: Cow::Borrowed("eabi"), + unversioned_llvm_target: Cow::Borrowed("thumbv7m-none-eabi"), }, ), ( "thumbv7neon-linux-androideabi", - Target { + TargetInfo { full_arch: Cow::Borrowed("thumbv7neon"), arch: Cow::Borrowed("arm"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("android"), env: Cow::Borrowed(""), abi: Cow::Borrowed("eabi"), + unversioned_llvm_target: Cow::Borrowed("armv7-none-linux-android"), }, ), ( "thumbv7neon-unknown-linux-gnueabihf", - Target { + TargetInfo { full_arch: Cow::Borrowed("thumbv7neon"), arch: Cow::Borrowed("arm"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("linux"), env: Cow::Borrowed("gnu"), abi: Cow::Borrowed("eabihf"), + unversioned_llvm_target: Cow::Borrowed("armv7-unknown-linux-gnueabihf"), }, ), ( "thumbv7neon-unknown-linux-musleabihf", - Target { + TargetInfo { full_arch: Cow::Borrowed("thumbv7neon"), arch: Cow::Borrowed("arm"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("linux"), env: Cow::Borrowed("musl"), abi: Cow::Borrowed("eabihf"), + unversioned_llvm_target: Cow::Borrowed("armv7-unknown-linux-gnueabihf"), }, ), ( "thumbv8m.base-none-eabi", - Target { + TargetInfo { full_arch: Cow::Borrowed("thumbv8m.base"), arch: Cow::Borrowed("arm"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("none"), env: Cow::Borrowed(""), abi: Cow::Borrowed("eabi"), + unversioned_llvm_target: Cow::Borrowed("thumbv8m.base-none-eabi"), }, ), ( "thumbv8m.base-nuttx-eabi", - Target { + TargetInfo { full_arch: Cow::Borrowed("thumbv8m.base"), arch: Cow::Borrowed("arm"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("nuttx"), env: Cow::Borrowed(""), abi: Cow::Borrowed("eabi"), + unversioned_llvm_target: Cow::Borrowed("thumbv8m.base-none-eabi"), }, ), ( "thumbv8m.main-none-eabi", - Target { + TargetInfo { full_arch: Cow::Borrowed("thumbv8m.main"), arch: Cow::Borrowed("arm"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("none"), env: Cow::Borrowed(""), abi: Cow::Borrowed("eabi"), + unversioned_llvm_target: Cow::Borrowed("thumbv8m.main-none-eabi"), }, ), ( "thumbv8m.main-none-eabihf", - Target { + TargetInfo { full_arch: Cow::Borrowed("thumbv8m.main"), arch: Cow::Borrowed("arm"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("none"), env: Cow::Borrowed(""), abi: Cow::Borrowed("eabihf"), + unversioned_llvm_target: Cow::Borrowed("thumbv8m.main-none-eabihf"), }, ), ( "thumbv8m.main-nuttx-eabi", - Target { + TargetInfo { full_arch: Cow::Borrowed("thumbv8m.main"), arch: Cow::Borrowed("arm"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("nuttx"), env: Cow::Borrowed(""), abi: Cow::Borrowed("eabi"), + unversioned_llvm_target: Cow::Borrowed("thumbv8m.main-none-eabi"), }, ), ( "thumbv8m.main-nuttx-eabihf", - Target { + TargetInfo { full_arch: Cow::Borrowed("thumbv8m.main"), arch: Cow::Borrowed("arm"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("nuttx"), env: Cow::Borrowed(""), abi: Cow::Borrowed("eabihf"), + unversioned_llvm_target: Cow::Borrowed("thumbv8m.main-none-eabihf"), }, ), ( "wasm32-unknown-emscripten", - Target { + TargetInfo { full_arch: Cow::Borrowed("wasm32"), arch: Cow::Borrowed("wasm32"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("emscripten"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("wasm32-unknown-emscripten"), }, ), ( "wasm32-unknown-unknown", - Target { + TargetInfo { full_arch: Cow::Borrowed("wasm32"), arch: Cow::Borrowed("wasm32"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("unknown"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("wasm32-unknown-unknown"), }, ), ( "wasm32-wasi", - Target { + TargetInfo { full_arch: Cow::Borrowed("wasm32"), arch: Cow::Borrowed("wasm32"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("wasi"), env: Cow::Borrowed("p1"), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("wasm32-wasi"), }, ), ( "wasm32-wasip1", - Target { + TargetInfo { full_arch: Cow::Borrowed("wasm32"), arch: Cow::Borrowed("wasm32"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("wasi"), env: Cow::Borrowed("p1"), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("wasm32-wasi"), }, ), ( "wasm32-wasip1-threads", - Target { + TargetInfo { full_arch: Cow::Borrowed("wasm32"), arch: Cow::Borrowed("wasm32"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("wasi"), env: Cow::Borrowed("p1"), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("wasm32-wasi"), }, ), ( "wasm32-wasip2", - Target { + TargetInfo { full_arch: Cow::Borrowed("wasm32"), arch: Cow::Borrowed("wasm32"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("wasi"), env: Cow::Borrowed("p2"), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("wasm32-wasip2"), }, ), ( "wasm32v1-none", - Target { + TargetInfo { full_arch: Cow::Borrowed("wasm32v1"), arch: Cow::Borrowed("wasm32"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("none"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("wasm32-unknown-unknown"), }, ), ( "wasm64-unknown-unknown", - Target { + TargetInfo { full_arch: Cow::Borrowed("wasm64"), arch: Cow::Borrowed("wasm64"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("unknown"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("wasm64-unknown-unknown"), }, ), ( "x86_64-apple-darwin", - Target { + TargetInfo { full_arch: Cow::Borrowed("x86_64"), arch: Cow::Borrowed("x86_64"), vendor: Cow::Borrowed("apple"), os: Cow::Borrowed("macos"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("x86_64-apple-macosx"), }, ), ( "x86_64-apple-ios", - Target { + TargetInfo { full_arch: Cow::Borrowed("x86_64"), arch: Cow::Borrowed("x86_64"), vendor: Cow::Borrowed("apple"), os: Cow::Borrowed("ios"), env: Cow::Borrowed(""), abi: Cow::Borrowed("sim"), + unversioned_llvm_target: Cow::Borrowed("x86_64-apple-ios-simulator"), }, ), ( "x86_64-apple-ios-macabi", - Target { + TargetInfo { full_arch: Cow::Borrowed("x86_64"), arch: Cow::Borrowed("x86_64"), vendor: Cow::Borrowed("apple"), os: Cow::Borrowed("ios"), env: Cow::Borrowed(""), abi: Cow::Borrowed("macabi"), + unversioned_llvm_target: Cow::Borrowed("x86_64-apple-ios-macabi"), }, ), ( "x86_64-apple-tvos", - Target { + TargetInfo { full_arch: Cow::Borrowed("x86_64"), arch: Cow::Borrowed("x86_64"), vendor: Cow::Borrowed("apple"), os: Cow::Borrowed("tvos"), env: Cow::Borrowed(""), abi: Cow::Borrowed("sim"), + unversioned_llvm_target: Cow::Borrowed("x86_64-apple-tvos-simulator"), }, ), ( "x86_64-apple-watchos-sim", - Target { + TargetInfo { full_arch: Cow::Borrowed("x86_64"), arch: Cow::Borrowed("x86_64"), vendor: Cow::Borrowed("apple"), os: Cow::Borrowed("watchos"), env: Cow::Borrowed(""), abi: Cow::Borrowed("sim"), + unversioned_llvm_target: Cow::Borrowed("x86_64-apple-watchos-simulator"), }, ), ( "x86_64-fortanix-unknown-sgx", - Target { + TargetInfo { full_arch: Cow::Borrowed("x86_64"), arch: Cow::Borrowed("x86_64"), vendor: Cow::Borrowed("fortanix"), os: Cow::Borrowed("unknown"), env: Cow::Borrowed("sgx"), abi: Cow::Borrowed("fortanix"), + unversioned_llvm_target: Cow::Borrowed("x86_64-elf"), }, ), ( "x86_64-fuchsia", - Target { + TargetInfo { full_arch: Cow::Borrowed("x86_64"), arch: Cow::Borrowed("x86_64"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("fuchsia"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("x86_64-fuchsia"), }, ), ( "x86_64-linux-android", - Target { + TargetInfo { full_arch: Cow::Borrowed("x86_64"), arch: Cow::Borrowed("x86_64"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("android"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("x86_64-linux-android"), }, ), ( "x86_64-pc-nto-qnx710", - Target { + TargetInfo { full_arch: Cow::Borrowed("x86_64"), arch: Cow::Borrowed("x86_64"), vendor: Cow::Borrowed("pc"), os: Cow::Borrowed("nto"), env: Cow::Borrowed("nto71"), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("x86_64-pc-unknown"), }, ), ( "x86_64-pc-solaris", - Target { + TargetInfo { full_arch: Cow::Borrowed("x86_64"), arch: Cow::Borrowed("x86_64"), vendor: Cow::Borrowed("pc"), os: Cow::Borrowed("solaris"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("x86_64-pc-solaris"), }, ), ( "x86_64-pc-windows-gnu", - Target { + TargetInfo { full_arch: Cow::Borrowed("x86_64"), arch: Cow::Borrowed("x86_64"), vendor: Cow::Borrowed("pc"), os: Cow::Borrowed("windows"), env: Cow::Borrowed("gnu"), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("x86_64-pc-windows-gnu"), }, ), ( "x86_64-pc-windows-gnullvm", - Target { + TargetInfo { full_arch: Cow::Borrowed("x86_64"), arch: Cow::Borrowed("x86_64"), vendor: Cow::Borrowed("pc"), os: Cow::Borrowed("windows"), env: Cow::Borrowed("gnu"), abi: Cow::Borrowed("llvm"), + unversioned_llvm_target: Cow::Borrowed("x86_64-pc-windows-gnu"), }, ), ( "x86_64-pc-windows-msvc", - Target { + TargetInfo { full_arch: Cow::Borrowed("x86_64"), arch: Cow::Borrowed("x86_64"), vendor: Cow::Borrowed("pc"), os: Cow::Borrowed("windows"), env: Cow::Borrowed("msvc"), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("x86_64-pc-windows-msvc"), }, ), ( "x86_64-sun-solaris", - Target { + TargetInfo { full_arch: Cow::Borrowed("x86_64"), arch: Cow::Borrowed("x86_64"), vendor: Cow::Borrowed("sun"), os: Cow::Borrowed("solaris"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("x86_64-pc-solaris"), }, ), ( "x86_64-unikraft-linux-musl", - Target { + TargetInfo { full_arch: Cow::Borrowed("x86_64"), arch: Cow::Borrowed("x86_64"), vendor: Cow::Borrowed("unikraft"), os: Cow::Borrowed("linux"), env: Cow::Borrowed("musl"), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("x86_64-unknown-linux-musl"), }, ), ( "x86_64-unknown-dragonfly", - Target { + TargetInfo { full_arch: Cow::Borrowed("x86_64"), arch: Cow::Borrowed("x86_64"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("dragonfly"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("x86_64-unknown-dragonfly"), }, ), ( "x86_64-unknown-freebsd", - Target { + TargetInfo { full_arch: Cow::Borrowed("x86_64"), arch: Cow::Borrowed("x86_64"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("freebsd"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("x86_64-unknown-freebsd"), }, ), ( "x86_64-unknown-fuchsia", - Target { + TargetInfo { full_arch: Cow::Borrowed("x86_64"), arch: Cow::Borrowed("x86_64"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("fuchsia"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("x86_64-unknown-fuchsia"), }, ), ( "x86_64-unknown-haiku", - Target { + TargetInfo { full_arch: Cow::Borrowed("x86_64"), arch: Cow::Borrowed("x86_64"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("haiku"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("x86_64-unknown-haiku"), }, ), ( "x86_64-unknown-hermit", - Target { + TargetInfo { full_arch: Cow::Borrowed("x86_64"), arch: Cow::Borrowed("x86_64"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("hermit"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("x86_64-unknown-hermit"), }, ), ( "x86_64-unknown-hurd-gnu", - Target { + TargetInfo { full_arch: Cow::Borrowed("x86_64"), arch: Cow::Borrowed("x86_64"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("hurd"), env: Cow::Borrowed("gnu"), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("x86_64-unknown-hurd-gnu"), }, ), ( "x86_64-unknown-illumos", - Target { + TargetInfo { full_arch: Cow::Borrowed("x86_64"), arch: Cow::Borrowed("x86_64"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("illumos"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("x86_64-pc-solaris"), }, ), ( "x86_64-unknown-l4re-uclibc", - Target { + TargetInfo { full_arch: Cow::Borrowed("x86_64"), arch: Cow::Borrowed("x86_64"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("l4re"), env: Cow::Borrowed("uclibc"), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("x86_64-unknown-l4re-uclibc"), }, ), ( "x86_64-unknown-linux-gnu", - Target { + TargetInfo { full_arch: Cow::Borrowed("x86_64"), arch: Cow::Borrowed("x86_64"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("linux"), env: Cow::Borrowed("gnu"), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("x86_64-unknown-linux-gnu"), }, ), ( "x86_64-unknown-linux-gnux32", - Target { + TargetInfo { full_arch: Cow::Borrowed("x86_64"), arch: Cow::Borrowed("x86_64"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("linux"), env: Cow::Borrowed("gnu"), abi: Cow::Borrowed("x32"), + unversioned_llvm_target: Cow::Borrowed("x86_64-unknown-linux-gnux32"), }, ), ( "x86_64-unknown-linux-musl", - Target { + TargetInfo { full_arch: Cow::Borrowed("x86_64"), arch: Cow::Borrowed("x86_64"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("linux"), env: Cow::Borrowed("musl"), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("x86_64-unknown-linux-musl"), }, ), ( "x86_64-unknown-linux-none", - Target { + TargetInfo { full_arch: Cow::Borrowed("x86_64"), arch: Cow::Borrowed("x86_64"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("linux"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("x86_64-unknown-linux-none"), }, ), ( "x86_64-unknown-linux-ohos", - Target { + TargetInfo { full_arch: Cow::Borrowed("x86_64"), arch: Cow::Borrowed("x86_64"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("linux"), env: Cow::Borrowed("ohos"), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("x86_64-unknown-linux-ohos"), }, ), ( "x86_64-unknown-netbsd", - Target { + TargetInfo { full_arch: Cow::Borrowed("x86_64"), arch: Cow::Borrowed("x86_64"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("netbsd"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("x86_64-unknown-netbsd"), }, ), ( "x86_64-unknown-none", - Target { + TargetInfo { full_arch: Cow::Borrowed("x86_64"), arch: Cow::Borrowed("x86_64"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("none"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("x86_64-unknown-none-elf"), }, ), ( "x86_64-unknown-none-linuxkernel", - Target { + TargetInfo { full_arch: Cow::Borrowed("x86_64"), arch: Cow::Borrowed("x86_64"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("none"), env: Cow::Borrowed("gnu"), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("x86_64-unknown-none-elf"), }, ), ( "x86_64-unknown-openbsd", - Target { + TargetInfo { full_arch: Cow::Borrowed("x86_64"), arch: Cow::Borrowed("x86_64"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("openbsd"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("x86_64-unknown-openbsd"), }, ), ( "x86_64-unknown-redox", - Target { + TargetInfo { full_arch: Cow::Borrowed("x86_64"), arch: Cow::Borrowed("x86_64"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("redox"), env: Cow::Borrowed("relibc"), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("x86_64-unknown-redox"), }, ), ( "x86_64-unknown-trusty", - Target { + TargetInfo { full_arch: Cow::Borrowed("x86_64"), arch: Cow::Borrowed("x86_64"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("trusty"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("x86_64-unknown-unknown-musl"), }, ), ( "x86_64-unknown-uefi", - Target { + TargetInfo { full_arch: Cow::Borrowed("x86_64"), arch: Cow::Borrowed("x86_64"), vendor: Cow::Borrowed("unknown"), os: Cow::Borrowed("uefi"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("x86_64-unknown-windows"), }, ), ( "x86_64-uwp-windows-gnu", - Target { + TargetInfo { full_arch: Cow::Borrowed("x86_64"), arch: Cow::Borrowed("x86_64"), vendor: Cow::Borrowed("uwp"), os: Cow::Borrowed("windows"), env: Cow::Borrowed("gnu"), abi: Cow::Borrowed("uwp"), + unversioned_llvm_target: Cow::Borrowed("x86_64-pc-windows-gnu"), }, ), ( "x86_64-uwp-windows-msvc", - Target { + TargetInfo { full_arch: Cow::Borrowed("x86_64"), arch: Cow::Borrowed("x86_64"), vendor: Cow::Borrowed("uwp"), os: Cow::Borrowed("windows"), env: Cow::Borrowed("msvc"), abi: Cow::Borrowed("uwp"), + unversioned_llvm_target: Cow::Borrowed("x86_64-pc-windows-msvc"), }, ), ( "x86_64-win7-windows-msvc", - Target { + TargetInfo { full_arch: Cow::Borrowed("x86_64"), arch: Cow::Borrowed("x86_64"), vendor: Cow::Borrowed("win7"), os: Cow::Borrowed("windows"), env: Cow::Borrowed("msvc"), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("x86_64-win7-windows-msvc"), }, ), ( "x86_64-wrs-vxworks", - Target { + TargetInfo { full_arch: Cow::Borrowed("x86_64"), arch: Cow::Borrowed("x86_64"), vendor: Cow::Borrowed("wrs"), os: Cow::Borrowed("vxworks"), env: Cow::Borrowed("gnu"), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("x86_64-unknown-linux-gnu"), }, ), ( "x86_64h-apple-darwin", - Target { + TargetInfo { full_arch: Cow::Borrowed("x86_64h"), arch: Cow::Borrowed("x86_64"), vendor: Cow::Borrowed("apple"), os: Cow::Borrowed("macos"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("x86_64h-apple-macosx"), }, ), ( "xtensa-esp32-espidf", - Target { + TargetInfo { full_arch: Cow::Borrowed("xtensa"), arch: Cow::Borrowed("xtensa"), vendor: Cow::Borrowed("espressif"), os: Cow::Borrowed("espidf"), env: Cow::Borrowed("newlib"), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("xtensa-none-elf"), }, ), ( "xtensa-esp32-none-elf", - Target { + TargetInfo { full_arch: Cow::Borrowed("xtensa"), arch: Cow::Borrowed("xtensa"), vendor: Cow::Borrowed("espressif"), os: Cow::Borrowed("none"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("xtensa-none-elf"), }, ), ( "xtensa-esp32s2-espidf", - Target { + TargetInfo { full_arch: Cow::Borrowed("xtensa"), arch: Cow::Borrowed("xtensa"), vendor: Cow::Borrowed("espressif"), os: Cow::Borrowed("espidf"), env: Cow::Borrowed("newlib"), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("xtensa-none-elf"), }, ), ( "xtensa-esp32s2-none-elf", - Target { + TargetInfo { full_arch: Cow::Borrowed("xtensa"), arch: Cow::Borrowed("xtensa"), vendor: Cow::Borrowed("espressif"), os: Cow::Borrowed("none"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("xtensa-none-elf"), }, ), ( "xtensa-esp32s3-espidf", - Target { + TargetInfo { full_arch: Cow::Borrowed("xtensa"), arch: Cow::Borrowed("xtensa"), vendor: Cow::Borrowed("espressif"), os: Cow::Borrowed("espidf"), env: Cow::Borrowed("newlib"), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("xtensa-none-elf"), }, ), ( "xtensa-esp32s3-none-elf", - Target { + TargetInfo { full_arch: Cow::Borrowed("xtensa"), arch: Cow::Borrowed("xtensa"), vendor: Cow::Borrowed("espressif"), os: Cow::Borrowed("none"), env: Cow::Borrowed(""), abi: Cow::Borrowed(""), + unversioned_llvm_target: Cow::Borrowed("xtensa-none-elf"), }, ), ]; diff --git a/src/target/llvm.rs b/src/target/llvm.rs new file mode 100644 index 00000000..ab1d1eea --- /dev/null +++ b/src/target/llvm.rs @@ -0,0 +1,89 @@ +use std::borrow::Cow; + +use super::TargetInfo; + +impl TargetInfo { + /// The versioned LLVM/Clang target triple. + pub(crate) fn versioned_llvm_target(&self, version: Option<&str>) -> Cow<'_, str> { + if let Some(version) = version { + // Only support versioned Apple targets for now. + assert_eq!(self.vendor, "apple"); + + let mut components = self.unversioned_llvm_target.split("-"); + let arch = components.next().expect("llvm_target should have arch"); + let vendor = components.next().expect("llvm_target should have vendor"); + let os = components.next().expect("LLVM target should have os"); + let environment = components.next(); + assert_eq!(components.next(), None, "too many LLVM target components"); + + Cow::Owned(if let Some(env) = environment { + format!("{arch}-{vendor}-{os}{version}-{env}") + } else { + format!("{arch}-{vendor}-{os}{version}") + }) + } else { + Cow::Borrowed(&self.unversioned_llvm_target) + } + } +} + +/// Rust and Clang don't really agree on naming, so do a best-effort +/// conversion to support out-of-tree / custom target-spec targets. +pub(crate) fn guess_llvm_target_triple( + full_arch: &str, + vendor: &str, + os: &str, + env: &str, + abi: &str, +) -> String { + let arch = match full_arch { + riscv32 if riscv32.starts_with("riscv32") => "riscv32", + riscv64 if riscv64.starts_with("riscv64") => "riscv64", + arch => arch, + }; + let os = match os { + "darwin" => "macosx", + "visionos" => "xros", + "uefi" => "windows", + os => os, + }; + let env = match env { + "newlib" | "nto70" | "nto71" | "ohos" | "p1" | "p2" | "relibc" | "sgx" | "uclibc" => "", + env => env, + }; + let abi = match abi { + "sim" => "simulator", + "llvm" | "softfloat" | "uwp" | "vec-extabi" => "", + "ilp32" => "_ilp32", + abi => abi, + }; + match (env, abi) { + ("", "") => format!("{arch}-{vendor}-{os}"), + (env, abi) => format!("{arch}-{vendor}-{os}-{env}{abi}"), + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_basic_llvm_triple_guessing() { + assert_eq!( + guess_llvm_target_triple("aarch64", "unknown", "linux", "", ""), + "aarch64-unknown-linux" + ); + assert_eq!( + guess_llvm_target_triple("x86_64", "unknown", "linux", "gnu", ""), + "x86_64-unknown-linux-gnu" + ); + assert_eq!( + guess_llvm_target_triple("x86_64", "unknown", "linux", "gnu", "eabi"), + "x86_64-unknown-linux-gnueabi" + ); + assert_eq!( + guess_llvm_target_triple("x86_64", "apple", "darwin", "", ""), + "x86_64-apple-macosx" + ); + } +} diff --git a/src/windows/find_tools.rs b/src/windows/find_tools.rs index 48e78a7f..389ba769 100644 --- a/src/windows/find_tools.rs +++ b/src/windows/find_tools.rs @@ -24,7 +24,7 @@ use std::{ }; use crate::ToolFamily; -use crate::{target::Target, Tool}; +use crate::{target::TargetInfo, Tool}; const MSVC_FAMILY: ToolFamily = ToolFamily::Msvc { clang_cl: false }; @@ -111,7 +111,7 @@ pub fn find_tool(target: &str, tool: &str) -> Option { } pub(crate) fn find_tool_inner( - target: &Target, + target: &TargetInfo, tool: &str, env_getter: &dyn EnvGetter, ) -> Option { diff --git a/tests/test.rs b/tests/test.rs index 02cda7c0..939e56e3 100644 --- a/tests/test.rs +++ b/tests/test.rs @@ -619,8 +619,7 @@ fn clang_apple_mac_catalyst() { .compile("foo"); let execution = test.cmd(0); - // TODO: Add version to target here - execution.must_have("--target=arm64-apple-ios-macabi"); + execution.must_have("--target=arm64-apple-ios15.0-macabi"); execution.must_have_in_order("-isysroot", sdkroot); execution.must_have_in_order( "-isystem",