diff --git a/compiler/rustc_target/src/spec/aarch64_unknown_linux_dynmusl.rs b/compiler/rustc_target/src/spec/aarch64_unknown_linux_dynmusl.rs new file mode 100644 index 0000000000000..afceb1ea86669 --- /dev/null +++ b/compiler/rustc_target/src/spec/aarch64_unknown_linux_dynmusl.rs @@ -0,0 +1,14 @@ +use crate::spec::crt_objects::new; +use crate::spec::Target; + +pub fn target() -> Target { + let mut base = super::aarch64_unknown_linux_musl::target(); + + base.llvm_target = "aarch64-unknown-linux-musl".to_string(); + base.options.crt_static_default = false; + base.options.pre_link_objects_fallback = new(&[]); + base.options.post_link_objects_fallback = new(&[]); + base.options.crt_objects_fallback = None; + + base +} diff --git a/compiler/rustc_target/src/spec/arm_unknown_linux_dynmusleabihf.rs b/compiler/rustc_target/src/spec/arm_unknown_linux_dynmusleabihf.rs new file mode 100644 index 0000000000000..8f3717a23aa2f --- /dev/null +++ b/compiler/rustc_target/src/spec/arm_unknown_linux_dynmusleabihf.rs @@ -0,0 +1,14 @@ +use crate::spec::crt_objects::new; +use crate::spec::Target; + +pub fn target() -> Target { + let mut base = super::arm_unknown_linux_musleabihf::target(); + + base.llvm_target = "armv6-unknown-linux-musleabihf".to_string(); + base.options.crt_static_default = false; + base.options.pre_link_objects_fallback = new(&[]); + base.options.post_link_objects_fallback = new(&[]); + base.options.crt_objects_fallback = None; + + base +} diff --git a/compiler/rustc_target/src/spec/armv7_unknown_linux_dynmusleabihf.rs b/compiler/rustc_target/src/spec/armv7_unknown_linux_dynmusleabihf.rs new file mode 100644 index 0000000000000..faa1e6960af8e --- /dev/null +++ b/compiler/rustc_target/src/spec/armv7_unknown_linux_dynmusleabihf.rs @@ -0,0 +1,14 @@ +use crate::spec::crt_objects::new; +use crate::spec::Target; + +pub fn target() -> Target { + let mut base = super::armv7_unknown_linux_musleabihf::target(); + + base.llvm_target = "armv7-unknown-linux-musleabihf".to_string(); + base.options.crt_static_default = false; + base.options.pre_link_objects_fallback = new(&[]); + base.options.post_link_objects_fallback = new(&[]); + base.options.crt_objects_fallback = None; + + base +} diff --git a/compiler/rustc_target/src/spec/i586_unknown_linux_dynmusl.rs b/compiler/rustc_target/src/spec/i586_unknown_linux_dynmusl.rs new file mode 100644 index 0000000000000..e0cf053599b05 --- /dev/null +++ b/compiler/rustc_target/src/spec/i586_unknown_linux_dynmusl.rs @@ -0,0 +1,14 @@ +use crate::spec::crt_objects::new; +use crate::spec::Target; + +pub fn target() -> Target { + let mut base = super::i586_unknown_linux_musl::target(); + + base.llvm_target = "i586-unknown-linux-musl".to_string(); + base.options.crt_static_default = false; + base.options.pre_link_objects_fallback = new(&[]); + base.options.post_link_objects_fallback = new(&[]); + base.options.crt_objects_fallback = None; + + base +} diff --git a/compiler/rustc_target/src/spec/i686_unknown_linux_dynmusl.rs b/compiler/rustc_target/src/spec/i686_unknown_linux_dynmusl.rs new file mode 100644 index 0000000000000..23c460b08e24e --- /dev/null +++ b/compiler/rustc_target/src/spec/i686_unknown_linux_dynmusl.rs @@ -0,0 +1,14 @@ +use crate::spec::crt_objects::new; +use crate::spec::Target; + +pub fn target() -> Target { + let mut base = super::i686_unknown_linux_musl::target(); + + base.llvm_target = "i686-unknown-linux-musl".to_string(); + base.options.crt_static_default = false; + base.options.pre_link_objects_fallback = new(&[]); + base.options.post_link_objects_fallback = new(&[]); + base.options.crt_objects_fallback = None; + + base +} diff --git a/compiler/rustc_target/src/spec/mips64_unknown_linux_dynmuslabi64.rs b/compiler/rustc_target/src/spec/mips64_unknown_linux_dynmuslabi64.rs new file mode 100644 index 0000000000000..83407ab939fbe --- /dev/null +++ b/compiler/rustc_target/src/spec/mips64_unknown_linux_dynmuslabi64.rs @@ -0,0 +1,14 @@ +use crate::spec::crt_objects::new; +use crate::spec::Target; + +pub fn target() -> Target { + let mut base = super::mips64_unknown_linux_muslabi64::target(); + + base.llvm_target = "mips64-unknown-linux-musl".to_string(); + base.options.crt_static_default = false; + base.options.pre_link_objects_fallback = new(&[]); + base.options.post_link_objects_fallback = new(&[]); + base.options.crt_objects_fallback = None; + + base +} diff --git a/compiler/rustc_target/src/spec/mips64el_unknown_linux_dynmuslabi64.rs b/compiler/rustc_target/src/spec/mips64el_unknown_linux_dynmuslabi64.rs new file mode 100644 index 0000000000000..80a505dfc9781 --- /dev/null +++ b/compiler/rustc_target/src/spec/mips64el_unknown_linux_dynmuslabi64.rs @@ -0,0 +1,14 @@ +use crate::spec::crt_objects::new; +use crate::spec::Target; + +pub fn target() -> Target { + let mut base = super::mips64el_unknown_linux_muslabi64::target(); + + base.llvm_target = "mips64el-unknown-linux-musl".to_string(); + base.options.crt_static_default = false; + base.options.pre_link_objects_fallback = new(&[]); + base.options.post_link_objects_fallback = new(&[]); + base.options.crt_objects_fallback = None; + + base +} diff --git a/compiler/rustc_target/src/spec/mips_unknown_linux_dynmusl.rs b/compiler/rustc_target/src/spec/mips_unknown_linux_dynmusl.rs new file mode 100644 index 0000000000000..fcc5d7bc24f6a --- /dev/null +++ b/compiler/rustc_target/src/spec/mips_unknown_linux_dynmusl.rs @@ -0,0 +1,14 @@ +use crate::spec::crt_objects::new; +use crate::spec::Target; + +pub fn target() -> Target { + let mut base = super::mips_unknown_linux_musl::target(); + + base.llvm_target = "mips-unknown-linux-musl".to_string(); + base.options.crt_static_default = false; + base.options.pre_link_objects_fallback = new(&[]); + base.options.post_link_objects_fallback = new(&[]); + base.options.crt_objects_fallback = None; + + base +} diff --git a/compiler/rustc_target/src/spec/mipsel_unknown_linux_dynmusl.rs b/compiler/rustc_target/src/spec/mipsel_unknown_linux_dynmusl.rs new file mode 100644 index 0000000000000..5e8bbc6a18e16 --- /dev/null +++ b/compiler/rustc_target/src/spec/mipsel_unknown_linux_dynmusl.rs @@ -0,0 +1,14 @@ +use crate::spec::crt_objects::new; +use crate::spec::Target; + +pub fn target() -> Target { + let mut base = super::mipsel_unknown_linux_musl::target(); + + base.llvm_target = "mipsel-unknown-linux-musl".to_string(); + base.options.crt_static_default = false; + base.options.pre_link_objects_fallback = new(&[]); + base.options.post_link_objects_fallback = new(&[]); + base.options.crt_objects_fallback = None; + + base +} diff --git a/compiler/rustc_target/src/spec/mod.rs b/compiler/rustc_target/src/spec/mod.rs index 6cf1112820de1..32a3a02320680 100644 --- a/compiler/rustc_target/src/spec/mod.rs +++ b/compiler/rustc_target/src/spec/mod.rs @@ -626,6 +626,7 @@ supported_targets! { ("i686-unknown-linux-gnu", i686_unknown_linux_gnu), ("i586-unknown-linux-gnu", i586_unknown_linux_gnu), ("mips-unknown-linux-gnu", mips_unknown_linux_gnu), + ("mips-unknown-linux-dynmusl", mips_unknown_linux_dynmusl), ("mips64-unknown-linux-gnuabi64", mips64_unknown_linux_gnuabi64), ("mips64el-unknown-linux-gnuabi64", mips64el_unknown_linux_gnuabi64), ("mipsisa32r6-unknown-linux-gnu", mipsisa32r6_unknown_linux_gnu), @@ -633,21 +634,27 @@ supported_targets! { ("mipsisa64r6-unknown-linux-gnuabi64", mipsisa64r6_unknown_linux_gnuabi64), ("mipsisa64r6el-unknown-linux-gnuabi64", mipsisa64r6el_unknown_linux_gnuabi64), ("mipsel-unknown-linux-gnu", mipsel_unknown_linux_gnu), + ("mipsel-unknown-linux-dynmusl", mipsel_unknown_linux_dynmusl), ("powerpc-unknown-linux-gnu", powerpc_unknown_linux_gnu), ("powerpc-unknown-linux-gnuspe", powerpc_unknown_linux_gnuspe), ("powerpc-unknown-linux-musl", powerpc_unknown_linux_musl), + ("powerpc-unknown-linux-dynmusl", powerpc_unknown_linux_dynmusl), ("powerpc64-unknown-linux-gnu", powerpc64_unknown_linux_gnu), ("powerpc64-unknown-linux-musl", powerpc64_unknown_linux_musl), + ("powerpc64-unknown-linux-dynmusl", powerpc64_unknown_linux_dynmusl), ("powerpc64le-unknown-linux-gnu", powerpc64le_unknown_linux_gnu), ("powerpc64le-unknown-linux-musl", powerpc64le_unknown_linux_musl), + ("powerpc64le-unknown-linux-dynmusl", powerpc64le_unknown_linux_dynmusl), ("s390x-unknown-linux-gnu", s390x_unknown_linux_gnu), ("s390x-unknown-linux-musl", s390x_unknown_linux_musl), + ("s390x-unknown-linux-dynmusl", s390x_unknown_linux_dynmusl), ("sparc-unknown-linux-gnu", sparc_unknown_linux_gnu), ("sparc64-unknown-linux-gnu", sparc64_unknown_linux_gnu), ("arm-unknown-linux-gnueabi", arm_unknown_linux_gnueabi), ("arm-unknown-linux-gnueabihf", arm_unknown_linux_gnueabihf), ("arm-unknown-linux-musleabi", arm_unknown_linux_musleabi), ("arm-unknown-linux-musleabihf", arm_unknown_linux_musleabihf), + ("arm-unknown-linux-dynmusleabihf", arm_unknown_linux_dynmusleabihf), ("armv4t-unknown-linux-gnueabi", armv4t_unknown_linux_gnueabi), ("armv5te-unknown-linux-gnueabi", armv5te_unknown_linux_gnueabi), ("armv5te-unknown-linux-musleabi", armv5te_unknown_linux_musleabi), @@ -658,15 +665,22 @@ supported_targets! { ("thumbv7neon-unknown-linux-musleabihf", thumbv7neon_unknown_linux_musleabihf), ("armv7-unknown-linux-musleabi", armv7_unknown_linux_musleabi), ("armv7-unknown-linux-musleabihf", armv7_unknown_linux_musleabihf), + ("armv7-unknown-linux-dynmusleabihf", armv7_unknown_linux_dynmusleabihf), ("aarch64-unknown-linux-gnu", aarch64_unknown_linux_gnu), ("aarch64-unknown-linux-musl", aarch64_unknown_linux_musl), + ("aarch64-unknown-linux-dynmusl", aarch64_unknown_linux_dynmusl), ("x86_64-unknown-linux-musl", x86_64_unknown_linux_musl), + ("x86_64-unknown-linux-dynmusl", x86_64_unknown_linux_dynmusl), ("i686-unknown-linux-musl", i686_unknown_linux_musl), + ("i686-unknown-linux-dynmusl", i686_unknown_linux_dynmusl), ("i586-unknown-linux-musl", i586_unknown_linux_musl), + ("i586-unknown-linux-dynmusl", i586_unknown_linux_dynmusl), ("mips-unknown-linux-musl", mips_unknown_linux_musl), ("mipsel-unknown-linux-musl", mipsel_unknown_linux_musl), ("mips64-unknown-linux-muslabi64", mips64_unknown_linux_muslabi64), + ("mips64-unknown-linux-dynmuslabi64", mips64_unknown_linux_dynmuslabi64), ("mips64el-unknown-linux-muslabi64", mips64el_unknown_linux_muslabi64), + ("mips64el-unknown-linux-dynmuslabi64", mips64el_unknown_linux_dynmuslabi64), ("hexagon-unknown-linux-musl", hexagon_unknown_linux_musl), ("mips-unknown-linux-uclibc", mips_unknown_linux_uclibc), diff --git a/compiler/rustc_target/src/spec/powerpc64_unknown_linux_dynmusl.rs b/compiler/rustc_target/src/spec/powerpc64_unknown_linux_dynmusl.rs new file mode 100644 index 0000000000000..6cef03ef172f2 --- /dev/null +++ b/compiler/rustc_target/src/spec/powerpc64_unknown_linux_dynmusl.rs @@ -0,0 +1,14 @@ +use crate::spec::crt_objects::new; +use crate::spec::Target; + +pub fn target() -> Target { + let mut base = super::powerpc64_unknown_linux_musl::target(); + + base.llvm_target = "powerpc64-unknown-linux-musl".to_string(); + base.options.crt_static_default = false; + base.options.pre_link_objects_fallback = new(&[]); + base.options.post_link_objects_fallback = new(&[]); + base.options.crt_objects_fallback = None; + + base +} diff --git a/compiler/rustc_target/src/spec/powerpc64le_unknown_linux_dynmusl.rs b/compiler/rustc_target/src/spec/powerpc64le_unknown_linux_dynmusl.rs new file mode 100644 index 0000000000000..713b909c51538 --- /dev/null +++ b/compiler/rustc_target/src/spec/powerpc64le_unknown_linux_dynmusl.rs @@ -0,0 +1,14 @@ +use crate::spec::crt_objects::new; +use crate::spec::Target; + +pub fn target() -> Target { + let mut base = super::powerpc64le_unknown_linux_musl::target(); + + base.llvm_target = "powerpc64le-unknown-linux-musl".to_string(); + base.options.crt_static_default = false; + base.options.pre_link_objects_fallback = new(&[]); + base.options.post_link_objects_fallback = new(&[]); + base.options.crt_objects_fallback = None; + + base +} diff --git a/compiler/rustc_target/src/spec/powerpc_unknown_linux_dynmusl.rs b/compiler/rustc_target/src/spec/powerpc_unknown_linux_dynmusl.rs new file mode 100644 index 0000000000000..f89b964e542f1 --- /dev/null +++ b/compiler/rustc_target/src/spec/powerpc_unknown_linux_dynmusl.rs @@ -0,0 +1,14 @@ +use crate::spec::crt_objects::new; +use crate::spec::Target; + +pub fn target() -> Target { + let mut base = super::powerpc_unknown_linux_musl::target(); + + base.llvm_target = "powerpc-unknown-linux-musl".to_string(); + base.options.crt_static_default = false; + base.options.pre_link_objects_fallback = new(&[]); + base.options.post_link_objects_fallback = new(&[]); + base.options.crt_objects_fallback = None; + + base +} diff --git a/compiler/rustc_target/src/spec/s390x_unknown_linux_dynmusl.rs b/compiler/rustc_target/src/spec/s390x_unknown_linux_dynmusl.rs new file mode 100644 index 0000000000000..2c73a3c90a665 --- /dev/null +++ b/compiler/rustc_target/src/spec/s390x_unknown_linux_dynmusl.rs @@ -0,0 +1,14 @@ +use crate::spec::crt_objects::new; +use crate::spec::Target; + +pub fn target() -> Target { + let mut base = super::s390x_unknown_linux_musl::target(); + + base.llvm_target = "s390x-unknown-linux-musl".to_string(); + base.options.crt_static_default = false; + base.options.pre_link_objects_fallback = new(&[]); + base.options.post_link_objects_fallback = new(&[]); + base.options.crt_objects_fallback = None; + + base +} diff --git a/compiler/rustc_target/src/spec/x86_64_unknown_linux_dynmusl.rs b/compiler/rustc_target/src/spec/x86_64_unknown_linux_dynmusl.rs new file mode 100644 index 0000000000000..50a1bfaa0032f --- /dev/null +++ b/compiler/rustc_target/src/spec/x86_64_unknown_linux_dynmusl.rs @@ -0,0 +1,14 @@ +use crate::spec::crt_objects::new; +use crate::spec::Target; + +pub fn target() -> Target { + let mut base = super::x86_64_unknown_linux_musl::target(); + + base.llvm_target = "x86_64-unknown-linux-musl".to_string(); + base.options.crt_static_default = false; + base.options.pre_link_objects_fallback = new(&[]); + base.options.post_link_objects_fallback = new(&[]); + base.options.crt_objects_fallback = None; + + base +} diff --git a/src/bootstrap/compile.rs b/src/bootstrap/compile.rs index 7d5e3d05b11fa..578839e220b9c 100644 --- a/src/bootstrap/compile.rs +++ b/src/bootstrap/compile.rs @@ -177,7 +177,7 @@ fn copy_self_contained_objects( // to using gcc from a glibc-targeting toolchain for linking. // To do that we have to distribute musl startup objects as a part of Rust toolchain // and link with them manually in the self-contained mode. - if target.contains("musl") { + if target.contains("-musl") { let srcdir = builder.musl_libdir(target).unwrap(); for &obj in &["crt1.o", "Scrt1.o", "rcrt1.o", "crti.o", "crtn.o"] { copy_and_stamp( diff --git a/src/doc/rustc/src/platform-support.md b/src/doc/rustc/src/platform-support.md index ff44028390c27..f1ceb1755088b 100644 --- a/src/doc/rustc/src/platform-support.md +++ b/src/doc/rustc/src/platform-support.md @@ -69,41 +69,41 @@ target | std | host | notes `aarch64-fuchsia` | ✓ | | ARM64 Fuchsia `aarch64-linux-android` | ✓ | | ARM64 Android `aarch64-pc-windows-msvc` | ✓ | ✓ | ARM64 Windows MSVC -`aarch64-unknown-linux-musl` | ✓ | ✓ | ARM64 Linux with MUSL +`aarch64-unknown-linux-musl` | ✓ | ✓ | ARM64 Linux with musl libc `aarch64-unknown-none` | * | | Bare ARM64, hardfloat `aarch64-unknown-none-softfloat` | * | | Bare ARM64, softfloat `arm-linux-androideabi` | ✓ | | ARMv7 Android `arm-unknown-linux-gnueabi` | ✓ | ✓ | ARMv6 Linux (kernel 3.2, glibc 2.17) `arm-unknown-linux-gnueabihf` | ✓ | ✓ | ARMv6 Linux, hardfloat (kernel 3.2, glibc 2.17) -`arm-unknown-linux-musleabi` | ✓ | | ARMv6 Linux with MUSL -`arm-unknown-linux-musleabihf` | ✓ | | ARMv6 Linux with MUSL, hardfloat +`arm-unknown-linux-musleabi` | ✓ | | ARMv6 Linux with musl libc +`arm-unknown-linux-musleabihf` | ✓ | | ARMv6 Linux with musl libc, hardfloat `armebv7r-none-eabi` | * | | Bare ARMv7-R, Big Endian `armebv7r-none-eabihf` | * | | Bare ARMv7-R, Big Endian, hardfloat `armv5te-unknown-linux-gnueabi` | ✓ | | ARMv5TE Linux (kernel 4.4, glibc 2.23) -`armv5te-unknown-linux-musleabi` | ✓ | | ARMv5TE Linux with MUSL +`armv5te-unknown-linux-musleabi` | ✓ | | ARMv5TE Linux with musl libc `armv7-linux-androideabi` | ✓ | | ARMv7a Android `armv7a-none-eabi` | * | | Bare ARMv7-A `armv7r-none-eabi` | * | | Bare ARMv7-R `armv7r-none-eabihf` | * | | Bare ARMv7-R, hardfloat `armv7-unknown-linux-gnueabi` | ✓ | | ARMv7 Linux (kernel 4.15, glibc 2.27) `armv7-unknown-linux-gnueabihf` | ✓ | ✓ | ARMv7 Linux, hardfloat (kernel 3.2, glibc 2.17) -`armv7-unknown-linux-musleabi` | ✓ | | ARMv7 Linux, MUSL -`armv7-unknown-linux-musleabihf` | ✓ | | ARMv7 Linux with MUSL +`armv7-unknown-linux-musleabi` | ✓ | | ARMv7 Linux, musl libc +`armv7-unknown-linux-musleabihf` | ✓ | | ARMv7 Linux with musl libc `asmjs-unknown-emscripten` | ✓ | | asm.js via Emscripten `i586-pc-windows-msvc` | ✓ | | 32-bit Windows w/o SSE `i586-unknown-linux-gnu` | ✓ | | 32-bit Linux w/o SSE (kernel 4.4, glibc 2.23) -`i586-unknown-linux-musl` | ✓ | | 32-bit Linux w/o SSE, MUSL +`i586-unknown-linux-musl` | ✓ | | 32-bit Linux w/o SSE, musl libc `i686-linux-android` | ✓ | | 32-bit x86 Android `i686-unknown-freebsd` | ✓ | | 32-bit FreeBSD -`i686-unknown-linux-musl` | ✓ | | 32-bit Linux with MUSL +`i686-unknown-linux-musl` | ✓ | | 32-bit Linux with musl libc `mips-unknown-linux-gnu` | ✓ | ✓ | MIPS Linux (kernel 4.4, glibc 2.23) -`mips-unknown-linux-musl` | ✓ | | MIPS Linux with MUSL +`mips-unknown-linux-musl` | ✓ | | MIPS Linux with musl libc `mips64-unknown-linux-gnuabi64` | ✓ | ✓ | MIPS64 Linux, n64 ABI (kernel 4.4, glibc 2.23) -`mips64-unknown-linux-muslabi64` | ✓ | | MIPS64 Linux, n64 ABI, MUSL +`mips64-unknown-linux-muslabi64` | ✓ | | MIPS64 Linux, n64 ABI, musl libc `mips64el-unknown-linux-gnuabi64` | ✓ | ✓ | MIPS64 (LE) Linux, n64 ABI (kernel 4.4, glibc 2.23) -`mips64el-unknown-linux-muslabi64` | ✓ | | MIPS64 (LE) Linux, n64 ABI, MUSL +`mips64el-unknown-linux-muslabi64` | ✓ | | MIPS64 (LE) Linux, n64 ABI, musl libc `mipsel-unknown-linux-gnu` | ✓ | ✓ | MIPS (LE) Linux (kernel 4.4, glibc 2.23) -`mipsel-unknown-linux-musl` | ✓ | | MIPS (LE) Linux with MUSL +`mipsel-unknown-linux-musl` | ✓ | | MIPS (LE) Linux with musl libc `nvptx64-nvidia-cuda` | ✓ | | --emit=asm generates PTX code that [runs on NVIDIA GPUs] `powerpc-unknown-linux-gnu` | ✓ | ✓ | PowerPC Linux (kernel 2.6.32, glibc 2.11) `powerpc64-unknown-linux-gnu` | ✓ | ✓ | PPC64 Linux (kernel 2.6.32, glibc 2.11) @@ -138,7 +138,7 @@ target | std | host | notes `x86_64-unknown-freebsd` | ✓ | ✓ | 64-bit FreeBSD `x86_64-unknown-illumos` | ✓ | ✓ | illumos `x86_64-unknown-linux-gnux32` | ✓ | | 64-bit Linux (x32 ABI) (kernel 4.15, glibc 2.27) -`x86_64-unknown-linux-musl` | ✓ | ✓ | 64-bit Linux with MUSL +`x86_64-unknown-linux-musl` | ✓ | ✓ | 64-bit Linux with musl libc `x86_64-unknown-netbsd` | ✓ | ✓ | NetBSD/amd64 `x86_64-unknown-redox` | ✓ | | Redox OS @@ -158,6 +158,7 @@ target | std | host | notes `aarch64-unknown-freebsd` | ✓ | ✓ | ARM64 FreeBSD `aarch64-unknown-hermit` | ? | | `aarch64-unknown-linux-gnu_ilp32` | ✓ | ✓ | ARM64 Linux (ILP32 ABI) +`aarch64-unknown-linux-dynmusl` | | | ARM64 Linux (musl libc with dynamic linking) `aarch64-unknown-netbsd` | ✓ | ✓ | `aarch64-unknown-openbsd` | ✓ | ✓ | ARM64 OpenBSD `aarch64-unknown-redox` | ? | | ARM64 Redox OS @@ -165,12 +166,14 @@ target | std | host | notes `aarch64-wrs-vxworks` | ? | | `aarch64_be-unknown-linux-gnu` | ✓ | ✓ | ARM64 Linux (big-endian) `aarch64_be-unknown-linux-gnu_ilp32` | ✓ | ✓ | ARM64 Linux (big-endian, ILP32 ABI) +`arm-unknown-linux-dynmusleabihf` | | | ARMv6 Linux (musl libc with dynamic linking) `armv4t-unknown-linux-gnueabi` | ? | | `armv5te-unknown-linux-uclibceabi` | ? | | ARMv5TE Linux with uClibc `armv6-unknown-freebsd` | ✓ | ✓ | ARMv6 FreeBSD `armv6-unknown-netbsd-eabihf` | ? | | `armv7-apple-ios` | ✓ | | ARMv7 iOS, Cortex-a8 `armv7-unknown-freebsd` | ✓ | ✓ | ARMv7 FreeBSD +`armv7-unknown-linux-dynmusleabihf` | | | ARMv7 Linux (musl libc with dynamic linking) `armv7-unknown-netbsd-eabihf` | ✓ | ✓ | `armv7-wrs-vxworks-eabihf` | ? | | `armv7a-none-eabihf` | * | | ARM Cortex-A, hardfloat @@ -178,19 +181,25 @@ target | std | host | notes `avr-unknown-gnu-atmega328` | ✗ | | AVR. Requires `-Z build-std=core` `hexagon-unknown-linux-musl` | ? | | `i386-apple-ios` | ✓ | | 32-bit x86 iOS +`i586-unknown-linux-dynmusl` | | | 32-bit Pentium-class x86 Linux (musl libc with dynamic linking) `i686-apple-darwin` | ✓ | ✓ | 32-bit macOS (10.7+, Lion+) `i686-pc-windows-msvc` | ✓ | | 32-bit Windows XP support `i686-unknown-uefi` | ? | | 32-bit UEFI `i686-unknown-haiku` | ✓ | ✓ | 32-bit Haiku +`i686-unknown-linux-dynmusl` | | | 32-bit Pentium 4-class x86 Linux (musl libc with dynamic linking) `i686-unknown-netbsd` | ✓ | ✓ | NetBSD/i386 with SSE2 `i686-unknown-openbsd` | ✓ | ✓ | 32-bit OpenBSD `i686-uwp-windows-gnu` | ? | | `i686-uwp-windows-msvc` | ? | | `i686-wrs-vxworks` | ? | | +`mips-unknown-linux-dynmusl` | | | MIPS Linux, o32 ABI, musl libc with dynamic linking `mips-unknown-linux-uclibc` | ✓ | | MIPS Linux with uClibc +`mipsel-unknown-linux-dynmusl` | | | MIPS (LE) Linux, o32 ABI, musl libc with dynamic linking `mipsel-unknown-linux-uclibc` | ✓ | | MIPS (LE) Linux with uClibc `mipsel-unknown-none` | * | | Bare MIPS (LE) softfloat `mipsel-sony-psp` | * | | MIPS (LE) Sony PlayStation Portable (PSP) +`mips64-unknown-linux-dynmuslabi64` | | | MIPS64 Linux, n64 ABI, musl libc with dynamic linking +`mips64el-unknown-linux-dynmuslabi64` | | | MIPS64 (LE) Linux, n64 ABI, musl libc with dynamic linking `mipsisa32r6-unknown-linux-gnu` | ? | | `mipsisa32r6el-unknown-linux-gnu` | ? | | `mipsisa64r6-unknown-linux-gnuabi64` | ? | | @@ -198,23 +207,27 @@ target | std | host | notes `msp430-none-elf` | * | | 16-bit MSP430 microcontrollers `powerpc-unknown-linux-gnuspe` | ✓ | | PowerPC SPE Linux `powerpc-unknown-linux-musl` | ? | | +`powerpc-unknown-linux-dynmusl` | | | `powerpc-unknown-netbsd` | ✓ | ✓ | `powerpc-wrs-vxworks` | ? | | `powerpc-wrs-vxworks-spe` | ? | | `powerpc64-unknown-freebsd` | ✓ | ✓ | PPC64 FreeBSD (ELFv1 and ELFv2) `powerpc64-unknown-linux-musl` | ? | | +`powerpc64-unknown-linux-dynmusl` | | | `powerpc64-wrs-vxworks` | ? | | `powerpc64le-unknown-linux-musl` | ? | | +`powerpc64le-unknown-linux-dynmusl` | | | `riscv64gc-unknown-linux-musl` | | | RISC-V Linux (kernel 4.20, musl 1.2.0) `riscv32gc-unknown-linux-gnu` | | | RISC-V Linux (kernel 5.4, glibc 2.33) `riscv32gc-unknown-linux-musl` | | | RISC-V Linux (kernel 5.4, musl + RISCV32 support patches) -`s390x-unknown-linux-musl` | | | S390x Linux (kernel 2.6.32, MUSL) +`s390x-unknown-linux-musl` | | | S390x Linux (kernel 2.6.32, musl libc) +`s390x-unknown-linux-dynmusl` | | | S390x Linux (kernel 2.6.32, musl libc with dynamic linking) `sparc-unknown-linux-gnu` | ✓ | | 32-bit SPARC Linux `sparc64-unknown-netbsd` | ✓ | ✓ | NetBSD/sparc64 `sparc64-unknown-openbsd` | ? | | `thumbv7a-pc-windows-msvc` | ? | | `thumbv7a-uwp-windows-msvc` | ✓ | | -`thumbv7neon-unknown-linux-musleabihf` | ? | | Thumb2-mode ARMv7a Linux with NEON, MUSL +`thumbv7neon-unknown-linux-musleabihf` | ? | | Thumb2-mode ARMv7a Linux with NEON, musl libc `thumbv4t-none-eabi` | * | | ARMv4T T32 `x86_64-apple-ios-macabi` | ✓ | | Apple Catalyst on x86_64 `x86_64-apple-tvos` | * | | x86 64-bit tvOS @@ -226,6 +239,7 @@ target | std | host | notes `x86_64-unknown-hermit` | ? | | `x86_64-unknown-hermit-kernel` | ? | | HermitCore kernel `x86_64-unknown-l4re-uclibc` | ? | | +`x86_64-unknown-linux-dynmusl` | | | 64-bit x86 Linux, musl libc with dynamic linking `x86_64-unknown-openbsd` | ✓ | ✓ | 64-bit OpenBSD `x86_64-unknown-uefi` | ? | | `x86_64-uwp-windows-gnu` | ✓ | |