summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZach van Rijn <me@zv.io>2024-12-16 15:54:47 -0600
committerZach van Rijn <me@zv.io>2024-12-17 01:03:14 -0600
commite84bcca8de8fc62b5bf0067072c0d4e81346e11d (patch)
tree6a980ea9463754170a72aab3455cb6dc2a59f1ff
parent98264c3e6fa550a221317a931aeec048eebd01cd (diff)
downloadpackages-e84bcca8de8fc62b5bf0067072c0d4e81346e11d.tar.gz
packages-e84bcca8de8fc62b5bf0067072c0d4e81346e11d.tar.bz2
packages-e84bcca8de8fc62b5bf0067072c0d4e81346e11d.tar.xz
packages-e84bcca8de8fc62b5bf0067072c0d4e81346e11d.zip
experimental/mrustc: new package.
-rw-r--r--experimental/mrustc/0001-Fix-two-typos.patch35
-rw-r--r--experimental/mrustc/0002-HIR-Const-Eval-Fix-uninitialised-variable-leading-to.patch22
-rw-r--r--experimental/mrustc/0003-Patches-Add-extra-context-to-1.74-patch-file-hopeful.patch55
-rw-r--r--experimental/mrustc/0004-Patches-Fix-incorrect-line-numbers-in-patches.patch48
-rw-r--r--experimental/mrustc/0005-Patches-Fix-it-this-time.patch48
-rw-r--r--experimental/mrustc/0006-Codegen-C-Turn-down-gcc-optimisation-level-to-work-a.patch24
-rw-r--r--experimental/mrustc/0007-HIR-Typecheck-Properly-pass-type-params-to-const-eva.patch102
-rw-r--r--experimental/mrustc/APKBUILD82
-rw-r--r--experimental/mrustc/add-adelie-targets.patch68
-rw-r--r--experimental/mrustc/use-cached-tarball.patch20
10 files changed, 504 insertions, 0 deletions
diff --git a/experimental/mrustc/0001-Fix-two-typos.patch b/experimental/mrustc/0001-Fix-two-typos.patch
new file mode 100644
index 000000000..fc58d2cd8
--- /dev/null
+++ b/experimental/mrustc/0001-Fix-two-typos.patch
@@ -0,0 +1,35 @@
+From ca30fdadc60b3cb42a0c1e30c1d14088fc2e5cac Mon Sep 17 00:00:00 2001
+From: Tobias Bucher <tobiasbucher5991@gmail.com>
+Date: Sun, 15 Dec 2024 12:43:13 +0100
+Subject: [PATCH 1/6] Fix two typos
+
+
+diff --git a/src/hir/hir_ops.cpp b/src/hir/hir_ops.cpp
+index 84698c74..0d7c128a 100644
+--- a/src/hir/hir_ops.cpp
++++ b/src/hir/hir_ops.cpp
+@@ -713,7 +713,7 @@ bool ::HIR::TraitImpl::overlaps_with(const Crate& crate, const ::HIR::TraitImpl&
+ DEBUG("- Params mismatch");
+ return false;
+ }
+- // Matched with second ording
++ // Matched with second ordering
+ }
+ else if( this->m_trait_args.match_test_generics_fuzz(sp, other.m_trait_args, cb_ident, matcher) != ::HIR::Compare::Equal )
+ {
+diff --git a/src/parse/lex.cpp b/src/parse/lex.cpp
+index 29fc6599..ddf3a168 100644
+--- a/src/parse/lex.cpp
++++ b/src/parse/lex.cpp
+@@ -43,7 +43,7 @@ Lexer::Lexer(const ::std::string& filename, AST::Edition edition, ParseState ps)
+ throw ::std::runtime_error("Incomplete BOM - missing \\xBB in second position");
+ }
+ if( this->getc_byte() != '\xbf' ) {
+- throw ::std::runtime_error("Incomplete BOM - missing \\xBF in second position");
++ throw ::std::runtime_error("Incomplete BOM - missing \\xBF in third position");
+ }
+ m_line_ofs = 0;
+ }
+--
+2.40.0
+
diff --git a/experimental/mrustc/0002-HIR-Const-Eval-Fix-uninitialised-variable-leading-to.patch b/experimental/mrustc/0002-HIR-Const-Eval-Fix-uninitialised-variable-leading-to.patch
new file mode 100644
index 000000000..34244422c
--- /dev/null
+++ b/experimental/mrustc/0002-HIR-Const-Eval-Fix-uninitialised-variable-leading-to.patch
@@ -0,0 +1,22 @@
+From ddd2642eb8374f72473a40fe98891a6f839aeeea Mon Sep 17 00:00:00 2001
+From: John Hodge <tpg@mutabah.net>
+Date: Mon, 16 Dec 2024 08:34:43 +0800
+Subject: [PATCH 2/6] HIR Const Eval - Fix uninitialised variable leading to
+ random failures with newer GCC versions (Fixes #346)
+
+
+diff --git a/src/hir_conv/constant_evaluation.cpp b/src/hir_conv/constant_evaluation.cpp
+index 399aab4c..77d0e25a 100644
+--- a/src/hir_conv/constant_evaluation.cpp
++++ b/src/hir_conv/constant_evaluation.cpp
+@@ -3099,6 +3099,7 @@ namespace {
+ , m_recurse_types(false)
+ , m_impl_params(nullptr)
+ , m_item_params(nullptr)
++ , m_pass(Pass::OuterOnly)
+ {}
+
+ ::HIR::Evaluator get_eval(const Span& sp, NewvalState& nvs) const
+--
+2.40.0
+
diff --git a/experimental/mrustc/0003-Patches-Add-extra-context-to-1.74-patch-file-hopeful.patch b/experimental/mrustc/0003-Patches-Add-extra-context-to-1.74-patch-file-hopeful.patch
new file mode 100644
index 000000000..b4a0adc6e
--- /dev/null
+++ b/experimental/mrustc/0003-Patches-Add-extra-context-to-1.74-patch-file-hopeful.patch
@@ -0,0 +1,55 @@
+From 07a942a858b940f2a76e00d88f5c4df084685b33 Mon Sep 17 00:00:00 2001
+From: John Hodge <tpg@mutabah.net>
+Date: Mon, 16 Dec 2024 14:21:28 +0800
+Subject: [PATCH 3/6] Patches - Add extra context to 1.74 patch file, hopefully
+ makes OSX happy. Ref #349
+
+
+diff --git a/rustc-1.74.0-src.patch b/rustc-1.74.0-src.patch
+index cacaa3dc..780afc6d 100644
+--- a/rustc-1.74.0-src.patch
++++ b/rustc-1.74.0-src.patch
+@@ -81,13 +81,15 @@
+ mod size_asserts {
+ --- compiler/rustc_middle/src/mir/consts.rs
+ +++ compiler/rustc_middle/src/mir/consts.rs
+-@@ -73,2 +73,2 @@
++@@ -73,3 +73,3 @@
++
+ -#[cfg(all(target_arch = "x86_64", target_pointer_width = "64"))]
+ +#[cfg(all(target_arch = "x86_64", target_pointer_width = "64", not(rust_compiler = "mrustc")))]
+ static_assert_size!(ConstValue<'_>, 24);
+ --- compiler/rustc_middle/src/mir/interpret/value.rs
+ +++ compiler/rustc_middle/src/mir/interpret/value.rs
+-@@ -37,2 +37,2 @@
++@@ -37,3 +37,3 @@
++
+ -#[cfg(all(target_arch = "x86_64", target_pointer_width = "64"))]
+ +#[cfg(all(target_arch = "x86_64", target_pointer_width = "64", not(rust_compiler = "mrustc")))]
+ static_assert_size!(Scalar, 24);
+@@ -107,7 +109,8 @@
+ mod size_asserts {
+ --- compiler/rustc_middle/src/ty/consts/kind.rs
+ +++ compiler/rustc_middle/src/ty/consts/kind.rs
+-@@ -75,2 +75,2 @@
++@@ -75,3 +75,3 @@
++
+ -#[cfg(all(target_arch = "x86_64", target_pointer_width = "64"))]
+ +#[cfg(all(target_arch = "x86_64", target_pointer_width = "64", not(rust_compiler = "mrustc")))]
+ static_assert_size!(Expr<'_>, 24);
+@@ -115,7 +118,9 @@
+ # MSVC Cannot handle structs larger than 32-bit, so disable this for windows with mrustc
+ --- vendor/hex/src/lib.rs
+ +++ vendor/hex/src/lib.rs
+-@@ -239,2 +239,2 @@
++@@ -239,3 +239,3 @@
++
+ -#[cfg(target_pointer_width = "64")]
+ +#[cfg(all(target_pointer_width = "64", not(rust_compiler = "mrustc")))]
+- from_hex_array_impl! {
+\ No newline at end of file
++ from_hex_array_impl! {
++
+--
+2.40.0
+
diff --git a/experimental/mrustc/0004-Patches-Fix-incorrect-line-numbers-in-patches.patch b/experimental/mrustc/0004-Patches-Fix-incorrect-line-numbers-in-patches.patch
new file mode 100644
index 000000000..3b7340a30
--- /dev/null
+++ b/experimental/mrustc/0004-Patches-Fix-incorrect-line-numbers-in-patches.patch
@@ -0,0 +1,48 @@
+From 012bc633560b5fb7fbaaa2e7733852c1eedbd8d5 Mon Sep 17 00:00:00 2001
+From: John Hodge <tpg@mutabah.net>
+Date: Mon, 16 Dec 2024 15:07:57 +0800
+Subject: [PATCH 4/6] Patches - Fix incorrect line numbers in patches
+
+
+diff --git a/rustc-1.74.0-src.patch b/rustc-1.74.0-src.patch
+index 780afc6d..8d3df778 100644
+--- a/rustc-1.74.0-src.patch
++++ b/rustc-1.74.0-src.patch
+@@ -81,14 +81,14 @@
+ mod size_asserts {
+ --- compiler/rustc_middle/src/mir/consts.rs
+ +++ compiler/rustc_middle/src/mir/consts.rs
+-@@ -73,3 +73,3 @@
++@@ -72,3 +73,3 @@
+
+ -#[cfg(all(target_arch = "x86_64", target_pointer_width = "64"))]
+ +#[cfg(all(target_arch = "x86_64", target_pointer_width = "64", not(rust_compiler = "mrustc")))]
+ static_assert_size!(ConstValue<'_>, 24);
+ --- compiler/rustc_middle/src/mir/interpret/value.rs
+ +++ compiler/rustc_middle/src/mir/interpret/value.rs
+-@@ -37,3 +37,3 @@
++@@ -36,3 +37,3 @@
+
+ -#[cfg(all(target_arch = "x86_64", target_pointer_width = "64"))]
+ +#[cfg(all(target_arch = "x86_64", target_pointer_width = "64", not(rust_compiler = "mrustc")))]
+@@ -109,7 +109,7 @@
+ mod size_asserts {
+ --- compiler/rustc_middle/src/ty/consts/kind.rs
+ +++ compiler/rustc_middle/src/ty/consts/kind.rs
+-@@ -75,3 +75,3 @@
++@@ -74,3 +75,3 @@
+
+ -#[cfg(all(target_arch = "x86_64", target_pointer_width = "64"))]
+ +#[cfg(all(target_arch = "x86_64", target_pointer_width = "64", not(rust_compiler = "mrustc")))]
+@@ -118,7 +118,7 @@
+ # MSVC Cannot handle structs larger than 32-bit, so disable this for windows with mrustc
+ --- vendor/hex/src/lib.rs
+ +++ vendor/hex/src/lib.rs
+-@@ -239,3 +239,3 @@
++@@ -238,3 +239,3 @@
+
+ -#[cfg(target_pointer_width = "64")]
+ +#[cfg(all(target_pointer_width = "64", not(rust_compiler = "mrustc")))]
+--
+2.40.0
+
diff --git a/experimental/mrustc/0005-Patches-Fix-it-this-time.patch b/experimental/mrustc/0005-Patches-Fix-it-this-time.patch
new file mode 100644
index 000000000..b3423a9e5
--- /dev/null
+++ b/experimental/mrustc/0005-Patches-Fix-it-this-time.patch
@@ -0,0 +1,48 @@
+From bb8b59f16c3cd234f4f08102b57558748766dec0 Mon Sep 17 00:00:00 2001
+From: John Hodge <tpg@mutabah.net>
+Date: Mon, 16 Dec 2024 15:39:57 +0800
+Subject: [PATCH 5/6] Patches - Fix it this time?
+
+
+diff --git a/rustc-1.74.0-src.patch b/rustc-1.74.0-src.patch
+index 8d3df778..f0ae6172 100644
+--- a/rustc-1.74.0-src.patch
++++ b/rustc-1.74.0-src.patch
+@@ -81,14 +81,14 @@
+ mod size_asserts {
+ --- compiler/rustc_middle/src/mir/consts.rs
+ +++ compiler/rustc_middle/src/mir/consts.rs
+-@@ -72,3 +73,3 @@
++@@ -72,3 +72,3 @@
+
+ -#[cfg(all(target_arch = "x86_64", target_pointer_width = "64"))]
+ +#[cfg(all(target_arch = "x86_64", target_pointer_width = "64", not(rust_compiler = "mrustc")))]
+ static_assert_size!(ConstValue<'_>, 24);
+ --- compiler/rustc_middle/src/mir/interpret/value.rs
+ +++ compiler/rustc_middle/src/mir/interpret/value.rs
+-@@ -36,3 +37,3 @@
++@@ -36,3 +36,3 @@
+
+ -#[cfg(all(target_arch = "x86_64", target_pointer_width = "64"))]
+ +#[cfg(all(target_arch = "x86_64", target_pointer_width = "64", not(rust_compiler = "mrustc")))]
+@@ -109,7 +109,7 @@
+ mod size_asserts {
+ --- compiler/rustc_middle/src/ty/consts/kind.rs
+ +++ compiler/rustc_middle/src/ty/consts/kind.rs
+-@@ -74,3 +75,3 @@
++@@ -74,3 +74,3 @@
+
+ -#[cfg(all(target_arch = "x86_64", target_pointer_width = "64"))]
+ +#[cfg(all(target_arch = "x86_64", target_pointer_width = "64", not(rust_compiler = "mrustc")))]
+@@ -118,7 +118,7 @@
+ # MSVC Cannot handle structs larger than 32-bit, so disable this for windows with mrustc
+ --- vendor/hex/src/lib.rs
+ +++ vendor/hex/src/lib.rs
+-@@ -238,3 +239,3 @@
++@@ -238,3 +238,3 @@
+
+ -#[cfg(target_pointer_width = "64")]
+ +#[cfg(all(target_pointer_width = "64", not(rust_compiler = "mrustc")))]
+--
+2.40.0
+
diff --git a/experimental/mrustc/0006-Codegen-C-Turn-down-gcc-optimisation-level-to-work-a.patch b/experimental/mrustc/0006-Codegen-C-Turn-down-gcc-optimisation-level-to-work-a.patch
new file mode 100644
index 000000000..f84c19b44
--- /dev/null
+++ b/experimental/mrustc/0006-Codegen-C-Turn-down-gcc-optimisation-level-to-work-a.patch
@@ -0,0 +1,24 @@
+From 994ddf817a554c48ae03840c8aaf82fb99ab5d27 Mon Sep 17 00:00:00 2001
+From: John Hodge <tpg@mutabah.net>
+Date: Mon, 16 Dec 2024 20:09:09 +0800
+Subject: [PATCH 6/6] Codegen C - Turn down gcc optimisation level to work
+ around #347
+
+
+diff --git a/src/trans/codegen_c.cpp b/src/trans/codegen_c.cpp
+index c40a8d98..6a3cdf25 100644
+--- a/src/trans/codegen_c.cpp
++++ b/src/trans/codegen_c.cpp
+@@ -1282,7 +1282,8 @@ namespace {
+ args.push_back("-O1");
+ break;
+ case 2:
+- args.push_back("-O2");
++ //args.push_back("-O2");
++ args.push_back("-O1"); // HACK: Work around mrustc #347 by reducing the optimisation level
+ break;
+ }
+ // HACK: Work around [https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117423] by disabling an optimisation stage
+--
+2.40.0
+
diff --git a/experimental/mrustc/0007-HIR-Typecheck-Properly-pass-type-params-to-const-eva.patch b/experimental/mrustc/0007-HIR-Typecheck-Properly-pass-type-params-to-const-eva.patch
new file mode 100644
index 000000000..d190dbb40
--- /dev/null
+++ b/experimental/mrustc/0007-HIR-Typecheck-Properly-pass-type-params-to-const-eva.patch
@@ -0,0 +1,102 @@
+From 5e01a76097265f4bb27b18885b9af3f2778180f9 Mon Sep 17 00:00:00 2001
+From: John Hodge <tpg@mutabah.net>
+Date: Tue, 17 Dec 2024 12:13:04 +0800
+Subject: [PATCH] HIR Typecheck - Properly pass type params to const evaluation
+ (re #322)
+
+
+diff --git a/samples/test/mrustc-322.rs b/samples/test/mrustc-322.rs
+new file mode 100644
+index 00000000..654f3ef7
+--- /dev/null
++++ b/samples/test/mrustc-322.rs
+@@ -0,0 +1,14 @@
++// ignore-test - Rustc doesn't allow this, plus it doesn't specify the type for the `Vec<_>`
++#![crate_type = "lib"]
++struct Assert<const COND: bool>;
++trait IsTrue {}
++impl IsTrue for Assert<true> {}
++trait IsNotZst {}
++impl<T> IsNotZst for T
++where
++ Assert<{ std::mem::size_of::<T>() > 0 }>: IsTrue,
++{}
++fn assert_not_zero_sized<T: IsNotZst>(_: T) {}
++fn main() {
++ assert_not_zero_sized(vec![]);
++}
+diff --git a/src/hir_conv/constant_evaluation.cpp b/src/hir_conv/constant_evaluation.cpp
+index 77d0e25a..9ae98604 100644
+--- a/src/hir_conv/constant_evaluation.cpp
++++ b/src/hir_conv/constant_evaluation.cpp
+@@ -3729,6 +3729,22 @@ void ConvertHIR_ConstantEvaluate_ArraySize(const Span& sp, const ::HIR::Crate& c
+ }
+ }
+
++namespace {
++ bool params_contain_ivars(const ::HIR::PathParams& params) {
++ for(const auto& t : params.m_types) {
++ if( visit_ty_with(t, [](const HIR::TypeRef& t){ return t.data().is_Infer(); })) {
++ return true;
++ }
++ }
++ for(const auto& v : params.m_values) {
++ if( v.is_Infer() ) {
++ return true;
++ }
++ }
++ return false;
++ }
++}
++
+ void ConvertHIR_ConstantEvaluate_MethodParams(
+ const Span& sp,
+ const ::HIR::Crate& crate, const HIR::SimplePath& mod_path, const ::HIR::GenericParams* impl_generics, const ::HIR::GenericParams* item_generics,
+@@ -3740,7 +3756,8 @@ void ConvertHIR_ConstantEvaluate_MethodParams(
+ {
+ if(v.is_Unevaluated())
+ {
+- const auto& e = *v.as_Unevaluated()->expr;
++ const auto& ue = *v.as_Unevaluated();
++ const auto& e = *ue.expr;
+ auto name = FMT("param_" << &v << "#");
+ TRACE_FUNCTION_FR(name, name);
+ auto nvs = NewvalState { crate.get_mod_by_path(Span(), mod_path), mod_path, name };
+@@ -3751,12 +3768,21 @@ void ConvertHIR_ConstantEvaluate_MethodParams(
+ // - Which, might not be known at this point - might be a UfcsInherent
+ try
+ {
++ // TODO: if there's an ivar in the param list, then throw defer
++ // - Caller should ensure that known ivars are expanded.
++ if( params_contain_ivars(ue.params_impl) || params_contain_ivars(ue.params_item) ) {
++ throw Defer();
++ }
++
+ auto idx = static_cast<size_t>(&v - &params.m_values.front());
+ ASSERT_BUG(sp, idx < params_def.m_values.size(), "");
+ const auto& ty = params_def.m_values[idx].m_type;
+ ASSERT_BUG(sp, !monomorphise_type_needed(ty), "" << ty);
++ MonomorphState ms;
++ ms.pp_impl = &ue.params_impl;
++ ms.pp_method = &ue.params_item;
+
+- auto val = eval.evaluate_constant( ::HIR::ItemPath(mod_path, name.c_str()), e, ty.clone() );
++ auto val = eval.evaluate_constant( ::HIR::ItemPath(mod_path, name.c_str()), e, ty.clone(), std::move(ms) );
+ v = ::HIR::ConstGeneric::make_Evaluated(std::move(val));
+ }
+ catch(const Defer& )
+diff --git a/src/hir_typeck/expr_cs.cpp b/src/hir_typeck/expr_cs.cpp
+index 63754207..02b333bd 100644
+--- a/src/hir_typeck/expr_cs.cpp
++++ b/src/hir_typeck/expr_cs.cpp
+@@ -2385,6 +2385,7 @@ void Context::equate_values(const Span& sp, const ::HIR::ConstGeneric& rl, const
+ this->m_ivars.set_ivar_val_to(r.as_Infer().index, l.clone());
+ }
+ else {
++ // TODO: What about unevaluated values due to type inference?
+ ERROR(sp, E0000, "Value mismatch between " << l << " and " << r);
+ }
+ }
+--
+2.40.0
+
diff --git a/experimental/mrustc/APKBUILD b/experimental/mrustc/APKBUILD
new file mode 100644
index 000000000..69891f37e
--- /dev/null
+++ b/experimental/mrustc/APKBUILD
@@ -0,0 +1,82 @@
+# Contributor: Zach van Rijn <me@zv.io>
+# Maintainer: Zach van Rijn <me@zv.io>
+pkgname=mrustc
+pkgver=0.11.0
+_rustcver=1.74.1
+_minorver=${_rustcver%.*}.0
+pkgrel=0
+pkgdesc="Alternative rust compiler (re-implementation)"
+url="https://github.com/thepowersgang/mrustc"
+arch="x86_64"
+license="MIT"
+depends=""
+makedepends="cmake python3 zlib-dev"
+subpackages=""
+source="mrustc-$pkgver.tar.gz::https://github.com/thepowersgang/mrustc/archive/refs/tags/v$pkgver.tar.gz
+ https://static.rust-lang.org/dist/rustc-${_rustcver}-src.tar.xz
+ use-cached-tarball.patch
+
+ 0001-Fix-two-typos.patch
+ 0002-HIR-Const-Eval-Fix-uninitialised-variable-leading-to.patch
+ 0003-Patches-Add-extra-context-to-1.74-patch-file-hopeful.patch
+ 0004-Patches-Fix-incorrect-line-numbers-in-patches.patch
+ 0005-Patches-Fix-it-this-time.patch
+ 0006-Codegen-C-Turn-down-gcc-optimisation-level-to-work-a.patch
+ 0007-HIR-Typecheck-Properly-pass-type-params-to-const-eva.patch
+
+ add-adelie-targets.patch
+ "
+
+prepare() {
+ default_prepare
+
+ # use our cached copy and do not download during build
+ mv "${srcdir}"/rustc-${_rustcver}-src "${builddir}"/rustc-${_minorver}-src
+}
+
+build() {
+ # experimental but do you really want to build llvm with -j1?
+ export PARLEVEL="${JOBS}"
+
+ export RUSTC_VERSION=${_minorver} MRUSTC_TARGET_VER=${_rustcver%.*} OUTDIR_SUF=-${_minorver}
+
+ make
+ make RUSTCSRC
+ make -f minicargo.mk LIBS
+
+ make test
+ make local_tests
+
+ RUSTC_INSTALL_BINDIR=bin make -f minicargo.mk output-${_minorver}/rustc
+
+ LIBGIT2_SYS_USE_PKG_CONFIG=1 make -f minicargo.mk -j ${PARLEVEL:-1} output-${_minorver}/cargo
+}
+
+check() {
+ cd "${builddir}"
+
+ ./output-${_minorver}/rustc --version
+ ./output-${_minorver}/cargo --version
+ ./output-${_minorver}/rustc samples/no_core.rs
+ #./output-${_minorver}/rustc samples/1.rs
+}
+
+package() {
+ mkdir -p "$pkgdir"/usr/bin
+
+ for k in cargo rustc; do
+ cp "$builddir"/output-${_minorver}/${k} "$pkgdir"/usr/bin
+ done
+}
+
+sha512sums="2cc4941f8747be4ddde4109ab93a1cec2792839b3083b5f4b39b8009823d212c43c95f9cc56a96901c416934033c4e94917d18ef3ff15899de8b2840e955bd3f mrustc-0.11.0.tar.gz
+14c7e7ed2f38ab60299d8c7d41d78f042b6b57ef822d577b5138e60bdde31cf141eccd4332a25bc5da3d58eb5313d63c1448b5dfe9e11b8055bb8ea133a9038d rustc-1.74.1-src.tar.xz
+f301120ea9488d90511d55a123ebbab4738ff67d0a1352427e7002b59642beaf8a8fd3908c41a6eeb59fd017509d66eb637e048dd7c96ed21b8b97df9c506f58 use-cached-tarball.patch
+90db8205bcefb71bdf248d5d3c1e170b43f7a6d672931f15bd9fd000de7528088b048f48b6a5f18b61432f2d61041da8f875e6f7a135f62d05dc36c05edaf712 0001-Fix-two-typos.patch
+53bf7c21f0ee3384d1d3c284654819027f1a132ddd32ca8b51d82eca97b87421f331a3cfb974de8f45b18aadf05144cdcef80441db1c78a8b4fe025dd38c4f62 0002-HIR-Const-Eval-Fix-uninitialised-variable-leading-to.patch
+76f2cf36a7efa66295d20b1b3d2faeff74087a9b240801f3d6c2a4beb34bbabffc540f363b96c26dd8024a0ce13f7018d4cab4816bc0fe00c6be459b8b544852 0003-Patches-Add-extra-context-to-1.74-patch-file-hopeful.patch
+debbc9d9a2d2398cd66987904ea62f26a64be078b97cbfa159e10b63c5fd2e1fbdf600a1326c9f6a7b4b3f7066fb0b0c66ebdb528232eac42b2e9c5bf56e18fa 0004-Patches-Fix-incorrect-line-numbers-in-patches.patch
+11fed26ae226c810b2f06f983f665639e146c3ef2da1b68d64586a35555de0b0e58e3e8765b5bc45085b237dfe74ca6c33e864bdf9d2e89f1be75050f63aa922 0005-Patches-Fix-it-this-time.patch
+7e879056bf3debdaf469ef0b17cf91b6e61d8802094521b8df1d0c07f9d889897009e2987e3654c3560d03e3fa775b26ec11543c5ba630bc059c50f6bbc8145e 0006-Codegen-C-Turn-down-gcc-optimisation-level-to-work-a.patch
+52a42716b73f13852c5507a9566250f174b6a87de0aed3752f5f54bdf25887930620b3c0ea597bdb86c33b8be00724fa94e5c38e156a7edadb3776e4c4a5fb39 0007-HIR-Typecheck-Properly-pass-type-params-to-const-eva.patch
+ef161a48c432c4338d48cf52ef45085aa8479ff13102af924a9f35d5786db90953163d79129f004eddc1dd67f41f7946228d211147d8b310a928548705079442 add-adelie-targets.patch"
diff --git a/experimental/mrustc/add-adelie-targets.patch b/experimental/mrustc/add-adelie-targets.patch
new file mode 100644
index 000000000..e37171945
--- /dev/null
+++ b/experimental/mrustc/add-adelie-targets.patch
@@ -0,0 +1,68 @@
+diff -ur a/src/trans/target.cpp b/src/trans/target.cpp
+--- a/src/trans/target.cpp 2024-12-16 21:41:45.380039459 +0000
++++ b/src/trans/target.cpp 2024-12-16 21:49:00.640039666 +0000
+@@ -411,7 +411,9 @@
+ {
+ return load_spec_from_file(target_name);
+ }
+- else if(target_name == "i586-linux-gnu" || target_name == "i586-unknown-linux-gnu")
++ else if(target_name == "i586-linux-gnu" || target_name == "i586-unknown-linux-gnu"
++ || target_name == "i586-linux-musl" || target_name == "i586-unknown-linux-musl"
++ || target_name == "i686-linux-musl" || target_name == "i686-unknown-linux-musl")
+ {
+ return TargetSpec {
+ "unix", "linux", "gnu", {CodegenMode::Gnu11, true, "i586-linux-gnu", BACKEND_C_OPTS_GNU},
+@@ -439,42 +441,47 @@
+ ARCH_X32
+ };
+ }
+- else if(target_name == "arm-linux-gnu" || target_name == "arm-unknown-linux-gnu")
++ else if(target_name == "arm-linux-gnu" || target_name == "arm-unknown-linux-gnu"
++ || target_name == "arm-linux-musl" || target_name == "arm-unknown-linux-musl"
++ || target_name == "armv7l-linux-musl" || target_name == "armv7l-unknown-linux-musl"
++ || target_name == "armv7-linux-musl" || target_name == "armv7-unknown-linux-musl")
+ {
+ return TargetSpec {
+ "unix", "linux", "gnu", {CodegenMode::Gnu11, true, "arm-elf-eabi", BACKEND_C_OPTS_GNU},
+ ARCH_ARM32
+ };
+ }
+- else if(target_name == "aarch64-linux-gnu" || target_name == "aarch64-unknown-linux-gnu")
++ else if(target_name == "aarch64-linux-gnu" || target_name == "aarch64-unknown-linux-gnu"
++ || target_name == "aarch64-linux-musl" || target_name == "aarch64-unknown-linux-musl")
+ {
+ return TargetSpec {
+ "unix", "linux", "gnu", {CodegenMode::Gnu11, false, "aarch64-linux-gnu", BACKEND_C_OPTS_GNU},
+ ARCH_ARM64
+ };
+ }
+- else if(target_name == "m68k-linux-gnu" || target_name == "m68k-unknown-linux-gnu")
++ else if(target_name == "m68k-linux-gnu" || target_name == "m68k-unknown-linux-gnu"
++ || target_name == "m68k-linux-musl" || target_name == "m68k-unknown-linux-musl")
+ {
+ return TargetSpec {
+ "unix", "linux", "gnu", {CodegenMode::Gnu11, true, "m68k-linux-gnu", BACKEND_C_OPTS_GNU},
+ ARCH_M68K
+ };
+ }
+- else if(target_name == "powerpc64-unknown-linux-gnu")
++ else if(target_name == "powerpc64-unknown-linux-gnu" || target_name == "powerpc64-unknown-linux-musl")
+ {
+ return TargetSpec {
+ "unix", "linux", "gnu", {CodegenMode::Gnu11, false, "powerpc64-unknown-linux-gnu", BACKEND_C_OPTS_GNU},
+ ARCH_POWERPC64
+ };
+ }
+- else if(target_name == "powerpc64le-unknown-linux-gnu")
++ else if(target_name == "powerpc64le-unknown-linux-gnu" || target_name == "powerpc64le-unknown-linux-musl")
+ {
+ return TargetSpec {
+ "unix", "linux", "gnu", {CodegenMode::Gnu11, false, "powerpc64le-unknown-linux-gnu", BACKEND_C_OPTS_GNU},
+ ARCH_POWERPC64LE
+ };
+ }
+- else if(target_name == "riscv64-unknown-linux-gnu")
++ else if(target_name == "riscv64-unknown-linux-gnu" || target_name == "riscv64-unknown-linux-musl")
+ {
+ return TargetSpec {
+ "unix", "linux", "gnu", {CodegenMode::Gnu11, false, "riscv64-unknown-linux-gnu", BACKEND_C_OPTS_GNU},
diff --git a/experimental/mrustc/use-cached-tarball.patch b/experimental/mrustc/use-cached-tarball.patch
new file mode 100644
index 000000000..9d66001bd
--- /dev/null
+++ b/experimental/mrustc/use-cached-tarball.patch
@@ -0,0 +1,20 @@
+diff -ur a/minicargo.mk b/minicargo.mk
+--- a/minicargo.mk 2024-12-17 05:12:59.834050504 +0000
++++ b/minicargo.mk 2024-12-17 05:22:54.039140295 +0000
+@@ -204,15 +204,7 @@
+ #
+ # rustc (with std/cargo) source download
+ #
+-RUSTC_SRC_TARBALL := rustc-$(RUSTC_VERSION)-src.tar.gz
+-$(RUSTC_SRC_TARBALL):
+- @echo [CURL] $@
+- @rm -f $@
+- @curl -sS https://static.rust-lang.org/dist/$@ -o $@
+-rustc-$(RUSTC_VERSION)-src/extracted: $(RUSTC_SRC_TARBALL)
+- tar -xf $(RUSTC_SRC_TARBALL)
+- touch $@
+-$(RUSTC_SRC_DL): rustc-$(RUSTC_VERSION)-src/extracted rustc-$(RUSTC_VERSION)-src.patch
++$(RUSTC_SRC_DL): rustc-$(RUSTC_VERSION)-src.patch
+ cd $(RUSTCSRC) && patch -p0 < ../rustc-$(RUSTC_VERSION)-src.patch;
+ touch $@
+