guix_mirror_bot pushed a commit to branch rust-team
in repository guix.
commit fa8132df7d2e9f79707eefe8913851c8f6217a39
Author: Efraim Flashner <[email protected]>
AuthorDate: Thu Oct 1 13:44:16 2026 +0300
gnu: rust-bootstrap-1.90: Add support for aarch64-linux.
* gnu/packages/rust.scm (rust-bootstrap-1.90)[source]: Adjust for
aarch64-linux.
(supported-systems): Add aarch64-linux.
* gnu/packages/patches/mrustc-patches-1.90.patch: Add aarch64-linux
support.
---
gnu/packages/patches/mrustc-patches-1.90.patch | 118 +++++++++++++++++++++++++
gnu/packages/rust.scm | 2 +-
2 files changed, 119 insertions(+), 1 deletion(-)
diff --git a/gnu/packages/patches/mrustc-patches-1.90.patch
b/gnu/packages/patches/mrustc-patches-1.90.patch
index 879cba56059..1c4c84ddc0f 100644
--- a/gnu/packages/patches/mrustc-patches-1.90.patch
+++ b/gnu/packages/patches/mrustc-patches-1.90.patch
@@ -54,3 +54,121 @@ index 25ecc2a2..fe8aeef7 100644
# macos_weak only defines the fdopendir weak symbol for x86/x86_64; other
macOS targets emit neither arm.
# 10.4/10.5 have no $INODE64 variants, so the plain symbol is the correct one
there.
--- library/std/src/sys/unix/fs.rs
+diff --git a/src/expand/asm.cpp b/src/expand/asm.cpp
+index 95255cf4..a7d51f1c 100644
+--- a/src/expand/asm.cpp
++++ b/src/expand/asm.cpp
+@@ -219,6 +219,13 @@ namespace {
+ ERROR(sp, E0000, "Unknown register for x86/x86-64 - `" << str << "`");
+ }
+
++ AsmCommon::RegisterClass get_reg_class_aarch64(const Span &sp, const
RcString& str)
++ {
++ if(str == "reg" ) return AsmCommon::RegisterClass::aarch64_reg;
++ if(str == "vreg" ) return AsmCommon::RegisterClass::aarch64_vreg;
++ ERROR(sp, E0000, "Unknown register for aarch64 - `" << str << "`");
++ }
++
+ AsmCommon::RegisterClass get_reg_class_riscv(const Span &sp, const
RcString& str)
+ {
+ if(str == "reg" ) return AsmCommon::RegisterClass::riscv_reg;
+@@ -232,6 +239,8 @@ namespace {
+ return get_reg_class_x8664(sp, str);
+ if(Target_GetCurSpec().m_arch.m_name == "x86")
+ return get_reg_class_x8664(sp, str);
++ if (Target_GetCurSpec().m_arch.m_name == "aarch64")
++ return get_reg_class_aarch64(sp, str);
+ if (Target_GetCurSpec().m_arch.m_name == "riscv64")
+ return get_reg_class_riscv(sp, str);
+ ERROR(sp, E0000, "Unknown architecture for asm!");
+diff --git a/src/hir/asm.hpp b/src/hir/asm.hpp
+index c5180220..5c73fdb5 100644
+--- a/src/hir/asm.hpp
++++ b/src/hir/asm.hpp
+@@ -39,8 +39,8 @@ namespace AsmCommon {
+ //x86_mm, // Requires
+ x86_kreg,
+
+- //aarch64_reg,
+- //aarch64_vreg,
++ aarch64_reg,
++ aarch64_vreg,
+
+ //arm_reg,
+ //arm_sreg,
+@@ -106,6 +106,8 @@ namespace AsmCommon {
+ case RegisterClass::x86_ymm: return "ymm_reg";
+ case RegisterClass::x86_zmm: return "zmm_reg";
+ case RegisterClass::x86_kreg: return "kreg";
++ case RegisterClass::aarch64_reg: return "reg";
++ case RegisterClass::aarch64_vreg: return "vreg";
+ case RegisterClass::riscv_reg: return "reg";
+ case RegisterClass::riscv_freg: return "freg";
+ }
+diff --git a/src/trans/codegen_c.cpp b/src/trans/codegen_c.cpp
+index a01460b3..76bcde18 100644
+--- a/src/trans/codegen_c.cpp
++++ b/src/trans/codegen_c.cpp
+@@ -2898,6 +2898,10 @@ namespace {
+ {
+ m_of << "\tassert(!\"Unsupprorted LLVM x86 intrinsic: "
<< item.m_linkage.name << "\"); abort();\n";
+ }
++ else if( item.m_linkage.name == "llvm.aarch64.isb" ) {
++ m_of << "\t__asm__ __volatile__ (\"isb\");\n";
++ m_of << "\treturn ;\n";
++ }
+ else {
+ // TODO: Hand off to compiler-specific intrinsics
+ //MIR_TODO(*m_mir_res, "LLVM extern linkage: " <<
item.m_linkage.name);
+@@ -5582,6 +5586,31 @@ namespace {
+ m_of << ");\n";
+ return;
+ }
++ // AARCH64 CRC32 assembly instructions
++ else if( m.matches_template({"crc32b {0:w}, {0:w}, {1:w}"},
{"inout:reg", "in:reg"}) )
++ {
++ m_of << indent << "__builtin_aarch64_crc32b(";
emit_param(m.input(0)); m_of << ", "; emit_param(m.input(1));
++ m_of << ");\n";
++ return;
++ }
++ else if( m.matches_template({"crc32h {0:w}, {0:w}, {1:w}"},
{"inout:reg", "in:reg"}) )
++ {
++ m_of << indent << "__builtin_aarch64_crc32h(";
emit_param(m.input(0)); m_of << ", "; emit_param(m.input(1));
++ m_of << ");\n";
++ return;
++ }
++ else if( m.matches_template({"crc32w {0:w}, {0:w}, {1:w}"},
{"inout:reg", "in:reg"}) )
++ {
++ m_of << indent << "__builtin_aarch64_crc32w(";
emit_param(m.input(0)); m_of << ", "; emit_param(m.input(1));
++ m_of << ");\n";
++ return;
++ }
++ else if( m.matches_template({"crc32x {0:w}, {0:w}, {1:x}"},
{"inout:reg", "in:reg"}) )
++ {
++ m_of << indent << "__builtin_aarch64_crc32x(";
emit_param(m.input(0)); m_of << ", "; emit_param(m.input(1));
++ m_of << ");\n";
++ return;
++ }
+ // HACK: Abort on various `v*` operations, as they have overly
complex register specs that gcc doesn't like
+ else if( se.lines[0].frags.size() > 0 && (
+ false
+@@ -5743,6 +5772,9 @@ namespace {
+ case AsmCommon::RegisterClass::x86_ymm: m_of << "x";
break;
+ case AsmCommon::RegisterClass::x86_zmm: m_of << "v";
break;
+ case AsmCommon::RegisterClass::x86_kreg: m_of <<
"Yk"; break;
++ // aarch64
++ case AsmCommon::RegisterClass::aarch64_reg: m_of <<
"r"; break;
++ case AsmCommon::RegisterClass::aarch64_vreg: m_of <<
"w"; break;
+ // riscv
+ case AsmCommon::RegisterClass::riscv_reg: m_of <<
"r"; break;
+ case AsmCommon::RegisterClass::riscv_freg: m_of <<
"f"; break;
+@@ -5784,6 +5816,9 @@ namespace {
+ case AsmCommon::RegisterClass::x86_ymm: m_of <<
"x"; break;
+ case AsmCommon::RegisterClass::x86_zmm: m_of <<
"v"; break;
+ case AsmCommon::RegisterClass::x86_kreg: m_of <<
"Yk"; break;
++ // aarch64
++ case AsmCommon::RegisterClass::aarch64_reg: m_of
<< "r"; break;
++ case AsmCommon::RegisterClass::aarch64_vreg: m_of
<< "w"; break;
+ // riscv
+ case AsmCommon::RegisterClass::riscv_reg: m_of <<
"r"; break;
+ case AsmCommon::RegisterClass::riscv_freg: m_of
<< "f"; break;
diff --git a/gnu/packages/rust.scm b/gnu/packages/rust.scm
index 448f947a0b0..f50ce1ef953 100644
--- a/gnu/packages/rust.scm
+++ b/gnu/packages/rust.scm
@@ -749,7 +749,7 @@ safety and thread safety guarantees.")
(home-page "https://github.com/thepowersgang/mrustc")
;; List of systems where rust-bootstrap is explicitly known to build:
- (supported-systems '("x86_64-linux"))
+ (supported-systems '("x86_64-linux" "aarch64-linux"))
;; Dual licensed.
(license (list license:asl2.0 license:expat))))