From bd61985bb63e22551c859c1d157d690ad0dfd285 Mon Sep 17 00:00:00 2001 From: Jeremy Soller Date: Fri, 3 Oct 2025 09:11:24 -0600 Subject: [PATCH 1/2] Disable crt_static_allows_dylibs in redox targets --- compiler/rustc_target/src/spec/base/redox.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/compiler/rustc_target/src/spec/base/redox.rs b/compiler/rustc_target/src/spec/base/redox.rs index e0a0c20c56d63..e9b47f3fa3fdb 100644 --- a/compiler/rustc_target/src/spec/base/redox.rs +++ b/compiler/rustc_target/src/spec/base/redox.rs @@ -12,7 +12,7 @@ pub(crate) fn opts() -> TargetOptions { has_thread_local: true, crt_static_default: true, crt_static_respected: true, - crt_static_allows_dylibs: true, + crt_static_allows_dylibs: false, late_link_args: TargetOptions::link_args(LinkerFlavor::Gnu(Cc::Yes, Lld::No), &["-lgcc"]), ..Default::default() } From fa0f1630d67d06c03ceb61b4a7fb970032b161db Mon Sep 17 00:00:00 2001 From: bjorn3 <17426603+bjorn3@users.noreply.github.com> Date: Sun, 26 Oct 2025 11:41:23 +0000 Subject: [PATCH 2/2] Add riscv64gc-unknown-redox Co-Authored-By: Jeremy Soller --- compiler/rustc_target/src/spec/mod.rs | 1 + .../spec/targets/riscv64gc_unknown_redox.rs | 25 +++++++++++++++++++ src/bootstrap/src/core/sanity.rs | 1 + src/doc/rustc/src/platform-support.md | 1 + src/doc/rustc/src/platform-support/redox.md | 2 ++ tests/assembly-llvm/targets/targets-elf.rs | 3 +++ 6 files changed, 33 insertions(+) create mode 100644 compiler/rustc_target/src/spec/targets/riscv64gc_unknown_redox.rs diff --git a/compiler/rustc_target/src/spec/mod.rs b/compiler/rustc_target/src/spec/mod.rs index 1638c87c9ca9a..39a260f9a9b44 100644 --- a/compiler/rustc_target/src/spec/mod.rs +++ b/compiler/rustc_target/src/spec/mod.rs @@ -1553,6 +1553,7 @@ supported_targets! { ("aarch64-unknown-redox", aarch64_unknown_redox), ("i586-unknown-redox", i586_unknown_redox), + ("riscv64gc-unknown-redox", riscv64gc_unknown_redox), ("x86_64-unknown-redox", x86_64_unknown_redox), ("x86_64-unknown-managarm-mlibc", x86_64_unknown_managarm_mlibc), diff --git a/compiler/rustc_target/src/spec/targets/riscv64gc_unknown_redox.rs b/compiler/rustc_target/src/spec/targets/riscv64gc_unknown_redox.rs new file mode 100644 index 0000000000000..01276a8be465e --- /dev/null +++ b/compiler/rustc_target/src/spec/targets/riscv64gc_unknown_redox.rs @@ -0,0 +1,25 @@ +use crate::spec::{CodeModel, Target, TargetMetadata, base}; + +pub(crate) fn target() -> Target { + let mut base = base::redox::opts(); + base.code_model = Some(CodeModel::Medium); + base.cpu = "generic-rv64".into(); + base.features = "+m,+a,+f,+d,+c".into(); + base.llvm_abiname = "lp64d".into(); + base.plt_by_default = false; + base.max_atomic_width = Some(64); + + Target { + llvm_target: "riscv64-unknown-redox".into(), + metadata: TargetMetadata { + description: Some("Redox OS".into()), + tier: Some(3), + host_tools: Some(false), + std: Some(true), + }, + pointer_width: 64, + data_layout: "e-m:e-p:64:64-i64:64-i128:128-n32:64-S128".into(), + arch: "riscv64".into(), + options: base, + } +} diff --git a/src/bootstrap/src/core/sanity.rs b/src/bootstrap/src/core/sanity.rs index d0405270f6634..08e5abc0a03b1 100644 --- a/src/bootstrap/src/core/sanity.rs +++ b/src/bootstrap/src/core/sanity.rs @@ -34,6 +34,7 @@ pub struct Finder { // Targets can be removed from this list once they are present in the stage0 compiler (usually by updating the beta compiler of the bootstrap). const STAGE0_MISSING_TARGETS: &[&str] = &[ // just a dummy comment so the list doesn't get onelined + "riscv64gc-unknown-redox", ]; /// Minimum version threshold for libstdc++ required when using prebuilt LLVM diff --git a/src/doc/rustc/src/platform-support.md b/src/doc/rustc/src/platform-support.md index 4eb0dabe5952c..99739ee734e4c 100644 --- a/src/doc/rustc/src/platform-support.md +++ b/src/doc/rustc/src/platform-support.md @@ -393,6 +393,7 @@ target | std | host | notes [`riscv64gc-unknown-netbsd`](platform-support/netbsd.md) | ✓ | ✓ | RISC-V NetBSD [`riscv64gc-unknown-nuttx-elf`](platform-support/nuttx.md) | ✓ | | RISC-V 64bit with NuttX [`riscv64gc-unknown-openbsd`](platform-support/openbsd.md) | ✓ | ✓ | OpenBSD/riscv64 +[`riscv64gc-unknown-redox`](platform-support/redox.md) | ✓ | | RISC-V 64bit Redox OS [`riscv64imac-unknown-nuttx-elf`](platform-support/nuttx.md) | ✓ | | RISC-V 64bit with NuttX [`riscv64a23-unknown-linux-gnu`](platform-support/riscv64a23-unknown-linux-gnu.md) | ✓ | ✓ | RISC-V Linux (kernel 6.8.0+, glibc 2.39) [`s390x-unknown-linux-musl`](platform-support/s390x-unknown-linux-musl.md) | ✓ | | S390x Linux (kernel 3.2, musl 1.2.3) diff --git a/src/doc/rustc/src/platform-support/redox.md b/src/doc/rustc/src/platform-support/redox.md index fc36a551c8617..02ba5254d196c 100644 --- a/src/doc/rustc/src/platform-support/redox.md +++ b/src/doc/rustc/src/platform-support/redox.md @@ -10,6 +10,7 @@ Target triplets available so far: - `x86_64-unknown-redox` (tier 2) - `aarch64-unknown-redox` (tier 3) - `i586-unknown-redox` (tier 3) +- `riscv64gc-unknown-redox` (tier 3) ## Target maintainers @@ -37,6 +38,7 @@ target = [ "x86_64-unknown-redox", "aarch64-unknown-redox", "i586-unknown-redox", + "riscv64gc-unknown-redox", ] ``` diff --git a/tests/assembly-llvm/targets/targets-elf.rs b/tests/assembly-llvm/targets/targets-elf.rs index e26c213837066..6c85dbcfed1a5 100644 --- a/tests/assembly-llvm/targets/targets-elf.rs +++ b/tests/assembly-llvm/targets/targets-elf.rs @@ -505,6 +505,9 @@ //@ revisions: riscv64gc_unknown_openbsd //@ [riscv64gc_unknown_openbsd] compile-flags: --target riscv64gc-unknown-openbsd //@ [riscv64gc_unknown_openbsd] needs-llvm-components: riscv +//@ revisions: riscv64gc_unknown_redox +//@ [riscv64gc_unknown_redox] compile-flags: --target riscv64gc-unknown-redox +//@ [riscv64gc_unknown_redox] needs-llvm-components: riscv //@ revisions: riscv64imac_unknown_none_elf //@ [riscv64imac_unknown_none_elf] compile-flags: --target riscv64imac-unknown-none-elf //@ [riscv64imac_unknown_none_elf] needs-llvm-components: riscv