pkgsrc-WIP-changes archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

rust197: add a package for rust 1.97.0.



Module Name:	pkgsrc-wip
Committed By:	Havard Eidnes <he%NetBSD.org@localhost>
Pushed By:	he
Date:		Sat Jul 11 16:55:18 2026 +0000
Changeset:	c804000713be4840ce98633d1744d24c0e788606

Added Files:
	rust197/DESCR
	rust197/Makefile
	rust197/README.md
	rust197/buildlink3.mk
	rust197/cargo.mk
	rust197/cross.mk
	rust197/distinfo
	rust197/do-cross.mk
	rust197/files/gcc-wrap
	rust197/options.mk
	rust197/patches/patch-compiler_rustc__codegen__ssa_src_back_linker.rs
	rust197/patches/patch-compiler_rustc__llvm_build.rs
	rust197/patches/patch-compiler_rustc__target_src_spec_base_netbsd.rs
	rust197/patches/patch-compiler_rustc__target_src_spec_mod.rs
	rust197/patches/patch-compiler_rustc__target_src_spec_targets_aarch64__be__unknown__netbsd.rs
	rust197/patches/patch-compiler_rustc__target_src_spec_targets_aarch64__unknown__netbsd.rs
	rust197/patches/patch-compiler_rustc__target_src_spec_targets_m68k__unknown__netbsd.rs
	rust197/patches/patch-compiler_rustc__target_src_spec_targets_mips64el__unknown__netbsd.rs
	rust197/patches/patch-compiler_rustc__target_src_spec_targets_mipsel__unknown__netbsd.rs
	rust197/patches/patch-library_backtrace_src_symbolize_gimli.rs
	rust197/patches/patch-library_backtrace_src_symbolize_gimli_elf.rs
	rust197/patches/patch-src_bootstrap_bootstrap.py
	rust197/patches/patch-src_bootstrap_src_core_build__steps_compile.rs
	rust197/patches/patch-src_bootstrap_src_core_build__steps_install.rs
	rust197/patches/patch-src_bootstrap_src_core_builder_cargo.rs
	rust197/patches/patch-src_bootstrap_src_core_sanity.rs
	rust197/patches/patch-src_bootstrap_src_lib.rs
	rust197/patches/patch-src_llvm-project_llvm_CMakeLists.txt
	rust197/patches/patch-src_llvm-project_llvm_cmake_modules_AddLLVM.cmake
	rust197/patches/patch-src_llvm-project_llvm_include_llvm-c_DataTypes.h
	rust197/patches/patch-src_llvm-project_llvm_include_llvm_Analysis_ConstantFolding.h
	rust197/patches/patch-src_llvm-project_llvm_lib_TargetParser_TargetDataLayout.cpp
	rust197/patches/patch-src_llvm-project_llvm_utils_FileCheck_FileCheck.cpp
	rust197/patches/patch-src_tools_cargo_src_cargo_core_profiles.rs
	rust197/patches/patch-src_tools_cargo_tests_testsuite_build.rs
	rust197/patches/patch-src_tools_rust-installer_install-template.sh
	rust197/patches/patch-tests_assembly-llvm_targets_targets-elf.rs
	rust197/patches/patch-vendor_crossbeam-utils-0.8.18_no__atomic.rs
	rust197/patches/patch-vendor_libc-0.2.155_src_unix_bsd_netbsdlike_netbsd_mod.rs
	rust197/patches/patch-vendor_libc-0.2.155_src_unix_solarish_mod.rs
	rust197/patches/patch-vendor_libc-0.2.168_src_unix_bsd_netbsdlike_netbsd_mod.rs
	rust197/patches/patch-vendor_libc-0.2.168_src_unix_bsd_netbsdlike_netbsd_riscv64.rs
	rust197/patches/patch-vendor_libc-0.2.168_src_unix_solarish_mod.rs
	rust197/patches/patch-vendor_libc-0.2.169_src_unix_bsd_netbsdlike_netbsd_mod.rs
	rust197/patches/patch-vendor_libc-0.2.169_src_unix_bsd_netbsdlike_netbsd_riscv64.rs
	rust197/patches/patch-vendor_libc-0.2.169_src_unix_solarish_mod.rs
	rust197/patches/patch-vendor_libc-0.2.171_src_unix_bsd_netbsdlike_netbsd_riscv64.rs
	rust197/patches/patch-vendor_libc-0.2.172_src_unix_bsd_netbsdlike_netbsd_riscv64.rs
	rust197/patches/patch-vendor_libc-0.2.172_src_unix_solarish_mod.rs
	rust197/patches/patch-vendor_libc-0.2.175_src_unix_bsd_netbsdlike_netbsd_mod.rs
	rust197/patches/patch-vendor_libc-0.2.175_src_unix_bsd_netbsdlike_netbsd_riscv64.rs
	rust197/patches/patch-vendor_libc-0.2.177_src_unix_bsd_netbsdlike_netbsd_m68k.rs
	rust197/patches/patch-vendor_libc-0.2.177_src_unix_bsd_netbsdlike_netbsd_mod.rs
	rust197/patches/patch-vendor_libc-0.2.177_src_unix_bsd_netbsdlike_netbsd_riscv64.rs
	rust197/patches/patch-vendor_libc-0.2.180_src_unix_bsd_netbsdlike_netbsd_m68k.rs
	rust197/patches/patch-vendor_libc-0.2.180_src_unix_bsd_netbsdlike_netbsd_mod.rs
	rust197/patches/patch-vendor_libc-0.2.183_src_unix_bsd_netbsdlike_netbsd_m68k.rs
	rust197/patches/patch-vendor_libc-0.2.183_src_unix_bsd_netbsdlike_netbsd_mod.rs
	rust197/patches/patch-vendor_libc-0.2.184_src_unix_bsd_netbsdlike_netbsd_m68k.rs
	rust197/patches/patch-vendor_libc-0.2.184_src_unix_bsd_netbsdlike_netbsd_mod.rs
	rust197/patches/patch-vendor_libc-0.2.185_src_unix_bsd_netbsdlike_netbsd_m68k.rs
	rust197/patches/patch-vendor_libc-0.2.185_src_unix_bsd_netbsdlike_netbsd_mod.rs
	rust197/patches/patch-vendor_libc-0.2.186_src_unix_bsd_netbsdlike_netbsd_m68k.rs
	rust197/patches/patch-vendor_libc-0.2.186_src_unix_bsd_netbsdlike_netbsd_mod.rs
	rust197/patches/patch-vendor_line-index-0.1.2_src_lib.rs
	rust197/patches/patch-vendor_lzma-sys-0.1.20_config.h
	rust197/patches/patch-vendor_memchr-2.7.4_src_arch_aarch64_memchr.rs
	rust197/patches/patch-vendor_memchr-2.7.4_src_arch_aarch64_mod.rs
	rust197/patches/patch-vendor_memchr-2.7.4_src_memchr.rs
	rust197/patches/patch-vendor_memchr-2.7.4_src_memmem_searcher.rs
	rust197/patches/patch-vendor_memchr-2.7.4_src_vector.rs
	rust197/patches/patch-vendor_openssl-src-111.28.2+1.1.1w_openssl_Configurations_10-main.conf
	rust197/patches/patch-vendor_openssl-src-111.28.2+1.1.1w_openssl_crypto_aria_aria.c
	rust197/patches/patch-vendor_openssl-src-111.28.2+1.1.1w_src_lib.rs
	rust197/patches/patch-vendor_openssl-src-300.5.0+3.5.0_openssl_Configurations_10-main.conf
	rust197/patches/patch-vendor_openssl-src-300.5.0+3.5.0_openssl_crypto_aria_aria.c
	rust197/patches/patch-vendor_openssl-src-300.5.0+3.5.0_src_lib.rs
	rust197/patches/patch-vendor_openssl-src-300.6.0+3.6.2_openssl_Configurations_10-main.conf
	rust197/patches/patch-vendor_openssl-src-300.6.0+3.6.2_openssl_crypto_aria_aria.c
	rust197/patches/patch-vendor_openssl-src-300.6.0+3.6.2_src_lib.rs
	rust197/patches/patch-vendor_openssl-sys-0.9.107_build_find__normal.rs
	rust197/patches/patch-vendor_openssl-sys-0.9.107_build_main.rs
	rust197/patches/patch-vendor_openssl-sys-0.9.109_build_find__normal.rs
	rust197/patches/patch-vendor_openssl-sys-0.9.109_build_main.rs
	rust197/patches/patch-vendor_openssl-sys-0.9.114_build_find__normal.rs
	rust197/patches/patch-vendor_openssl-sys-0.9.114_build_main.rs
	rust197/patches/patch-vendor_openssl-sys-0.9.92_build_find__normal.rs
	rust197/patches/patch-vendor_openssl-sys-0.9.92_build_main.rs
	rust197/patches/patch-vendor_rustc-ap-rustc__target_src_spec_aarch64__be__unknown__netbsd.rs
	rust197/patches/patch-vendor_zerocopy-0.7.32_src_lib.rs
	rust197/patches/patch-vendor_zerocopy-0.7.35_src_lib.rs
	rust197/patches/patch-vendor_zeroize-1.8.1_src_lib.rs
	rust197/platform.mk
	rust197/rust.mk

Log Message:
rust197: add a package for rust 1.97.0.

Package updates relative to rust196:
 * Version & checksum changes
 * Applied patches to updated vendored crates

Upstream changes:

Version 1.97.0 (2026-07-09)
==========================

Language
--------
- [Consider `Result<T, Uninhabited>` and `ControlFlow<Uninhabited,
  T>` to be equivalent to `T` for must use lint]
  (https://github.com/rust-lang/rust/pull/148214)
- [Add allow-by-default `dead_code_pub_in_binary` lint for unused
  pub items in binary crates] (https://github.com/rust-lang/rust/pull/149509)
- [Stabilize the `div32`, `lam-bh`, `lamcas`, `ld-seq-sa` and `scq`
  target features] (https://github.com/rust-lang/rust/pull/154510)
- [Stabilize `cfg(target_has_atomic_primitive_alignment)`]
  (https://github.com/rust-lang/rust/pull/155006)
- [Allow trailing `self` in imports in more cases]
  (https://github.com/rust-lang/rust/pull/155137)

Platform Support
----------------
- [nvptx64-nvidia-cuda: drop support for old architectures and old ISAs]
  (https://github.com/rust-lang/rust/pull/152443)

Refer to Rust's [platform support page][platform-support-doc]
for more information on Rust's tiered platform support.

[platform-support-doc]: https://doc.rust-lang.org/rustc/platform-support.html

Stabilized APIs
---------------

- [`Default for RepeatN`]
  (https://doc.rust-lang.org/stable/std/iter/struct.RepeatN.html#impl-Default-for-RepeatN%3CA%3E)
- [`Copy for ffi::FromBytesUntilNulError`]
  (https://doc.rust-lang.org/stable/std/ffi/struct.FromBytesUntilNulError.html#impl-Copy-for-FromBytesUntilNulError)
- [`Send for std::fs::File` on UEFI]
  (https://github.com/rust-lang/rust/pull/154003)
- [`<{integer}>::isolate_highest_one`]
  (https://doc.rust-lang.org/stable/std/primitive.u32.html#method.isolate_highest_one)
- [`<{integer}>::isolate_lowest_one`]
  (https://doc.rust-lang.org/stable/std/primitive.u32.html#method.isolate_lowest_one)
- [`NonZero<{integer}>::isolate_highest_one`]
  (https://doc.rust-lang.org/stable/std/num/struct.NonZero.html#method.isolate_highest_one)
- [`NonZero<{integer}>::isolate_lowest_one`]
  (https://doc.rust-lang.org/stable/std/num/struct.NonZero.html#method.isolate_lowest_one)
- [`<{integer}>::bit_width`]
  (https://doc.rust-lang.org/stable/std/primitive.u32.html#method.bit_width)
- [`<{integer}>::lowest_one`]
  (https://doc.rust-lang.org/stable/std/primitive.u32.html#method.lowest_one)
- [`<{integer}>::highest_one`]
  (https://doc.rust-lang.org/stable/std/primitive.u32.html#method.highest_one)
- [`NonZero<{integer}>::bit_width`]
  (https://doc.rust-lang.org/stable/std/num/struct.NonZero.html#method.bit_width)
- [`NonZero<{integer}>::highest_one`]
  (https://doc.rust-lang.org/stable/std/num/struct.NonZero.html#method.highest_one)
- [`NonZero<{integer}>::lowest_one`]
  (https://doc.rust-lang.org/stable/std/num/struct.NonZero.html#method.lowest_one)

These previously stable APIs are now stable in const contexts:

- [`char::is_control`]
  (https://doc.rust-lang.org/stable/std/primitive.char.html#method.is_control)

Cargo
-----
- [Stabilize `build.warnings` config.]
  (https://github.com/rust-lang/cargo/pull/16796) This controls
  how lint warnings from local packages are treated. Useful for
  enforcing a warning-free build in CI, replacing `-Dwarnings`.
  [docs]
  (https://doc.rust-lang.org/nightly/cargo/reference/config.html#buildwarnings)
- [Stabilize `resolver.lockfile-path` config.]
  (https://github.com/rust-lang/cargo/pull/16694) This allows
  specifying the path to the lockfile to use when resolving
  dependencies. Useful when working with read-only source directories.  [docs]
  (https://doc.rust-lang.org/nightly/cargo/reference/config.html#resolverlockfile-path)
- [cargo-clean: Error when `--target-dir` doesn't look like a Cargo
  target directory.] (https://github.com/rust-lang/cargo/pull/16712)
  This prevents accidental deletion of non-target directories.
- [Add `-m` shorthand for `--manifest-path`]
  (https://github.com/rust-lang/cargo/pull/16858)
- [Remove `curl` dependency from `crates-io` crate]
  (https://github.com/rust-lang/cargo/pull/16936)

Rustdoc
-----
- [Stabilize `--emit` flag]
  (https://github.com/rust-lang/rust/pull/146220)
- [Stabilize `--remap-path-prefix`]
  (https://github.com/rust-lang/rust/pull/155307)

Compatibility Notes
-------------------
- [Emit a future-compatibility warning when relying on `f32:
  From<{float}>` to constrain `{float}`]
  (https://github.com/rust-lang/rust/pull/139087)
- [Rust will use the v0 symbol mangling scheme by default.]
  (https://github.com/rust-lang/rust/pull/151994) This may cause
  some tools (such as debuggers or profilers, especially with old
  versions) to fail to demangle symbols emitted by Rust. It may
  also cause the formatting of text in backtraces to change.
- [Prevent deref coercions in `pin!`, in order to prevent unsoundness.]
  (https://github.com/rust-lang/rust/pull/153457) The most likely
  case where this might impact users is: writing `pin!(x)` where
  `x` has type `&mut T` will now always correctly produce a value
  of type `Pin<&mut &mut T>`, instead of sometimes allowing a
  coercion that produces a value of type `Pin<&mut T>`. This coercion
  was previously incorrectly allowed since Rust 1.88.0.
- [Deprecate `std::char` constants and functions]
  (https://github.com/rust-lang/rust/pull/153873)
- [Warn on linker output by default]
  (https://github.com/rust-lang/rust/pull/153968)
- [Remove hidden `f64` methods which have been deprecated since 1.0]
  (https://github.com/rust-lang/rust/pull/153975)
- [report the `varargs_without_pattern` lint in deps]
  (https://github.com/rust-lang/rust/pull/154599)
- [Forbid passing generic arguments to module path segments even
  if the module reexports a generic enum variant]
  (https://github.com/rust-lang/rust/pull/154971)
- [Error on invalid macho `link_section` specifier]
  (https://github.com/rust-lang/rust/pull/155065)
- The encoding of certain `enum`s [have changed]
  (https://github.com/rust-lang/rust/pull/155473).  This is not a
  breaking change, as it only applies to `enum`s without layout
  guarantees, but is noted here as we've seen people impacted from
  having made assumptions about the layout algorithm.
- [Error on `#[export_name = "..."]` where the name is empty]
  (https://github.com/rust-lang/rust/pull/155515)
- [Syntactically reject tuple index shorthands in struct patterns]
  (https://github.com/rust-lang/rust/pull/155698)
- [validate `#[link_name = "..."]` & `#[link(name = "...")]` parameters]
  (https://github.com/rust-lang/rust/pull/155817)
- On Windows, after calling `shutdown` on a socket to shut down
  the write side, attempting to write to the socket will now produce
  a `BrokenPipe` error rather than `Other`. [Map `WSAESHUTDOWN` to
  `io::ErrorKind::BrokenPipe`]
  (https://github.com/rust-lang/rust/pull/156063)

To see a diff of this commit:
https://wip.pkgsrc.org/cgi-bin/gitweb.cgi?p=pkgsrc-wip.git;a=commitdiff;h=c804000713be4840ce98633d1744d24c0e788606

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

diffstat:
 rust197/DESCR                                      |  13 +
 rust197/Makefile                                   | 808 +++++++++++++++++++++
 rust197/README.md                                  |  38 +
 rust197/buildlink3.mk                              |  28 +
 rust197/cargo.mk                                   | 140 ++++
 rust197/cross.mk                                   |  86 +++
 rust197/distinfo                                   | 195 +++++
 rust197/do-cross.mk                                | 117 +++
 rust197/files/gcc-wrap                             | 215 ++++++
 rust197/options.mk                                 | 125 ++++
 ...compiler_rustc__codegen__ssa_src_back_linker.rs |  27 +
 .../patches/patch-compiler_rustc__llvm_build.rs    |  50 ++
 ...-compiler_rustc__target_src_spec_base_netbsd.rs |  32 +
 .../patch-compiler_rustc__target_src_spec_mod.rs   |  22 +
 ...rc_spec_targets_aarch64__be__unknown__netbsd.rs |  17 +
 ...et_src_spec_targets_aarch64__unknown__netbsd.rs |  17 +
 ...arget_src_spec_targets_m68k__unknown__netbsd.rs |  39 +
 ...t_src_spec_targets_mips64el__unknown__netbsd.rs |  39 +
 ...get_src_spec_targets_mipsel__unknown__netbsd.rs |  14 +
 .../patch-library_backtrace_src_symbolize_gimli.rs |  14 +
 ...ch-library_backtrace_src_symbolize_gimli_elf.rs |  26 +
 rust197/patches/patch-src_bootstrap_bootstrap.py   |  48 ++
 ...-src_bootstrap_src_core_build__steps_compile.rs |  15 +
 ...-src_bootstrap_src_core_build__steps_install.rs |  15 +
 .../patch-src_bootstrap_src_core_builder_cargo.rs  |  26 +
 .../patches/patch-src_bootstrap_src_core_sanity.rs |  26 +
 rust197/patches/patch-src_bootstrap_src_lib.rs     |  40 +
 .../patch-src_llvm-project_llvm_CMakeLists.txt     |  18 +
 ...c_llvm-project_llvm_cmake_modules_AddLLVM.cmake |  49 ++
 ...rc_llvm-project_llvm_include_llvm-c_DataTypes.h |  34 +
 ...ct_llvm_include_llvm_Analysis_ConstantFolding.h |  18 +
 ...ject_llvm_lib_TargetParser_TargetDataLayout.cpp |  74 ++
 ...llvm-project_llvm_utils_FileCheck_FileCheck.cpp |  15 +
 ...atch-src_tools_cargo_src_cargo_core_profiles.rs |  17 +
 .../patch-src_tools_cargo_tests_testsuite_build.rs |  39 +
 ...ch-src_tools_rust-installer_install-template.sh |  48 ++
 ...atch-tests_assembly-llvm_targets_targets-elf.rs |  16 +
 ...tch-vendor_crossbeam-utils-0.8.18_no__atomic.rs |  14 +
 ...c-0.2.155_src_unix_bsd_netbsdlike_netbsd_mod.rs |  15 +
 ...ch-vendor_libc-0.2.155_src_unix_solarish_mod.rs |  15 +
 ...c-0.2.168_src_unix_bsd_netbsdlike_netbsd_mod.rs |  15 +
 ...2.168_src_unix_bsd_netbsdlike_netbsd_riscv64.rs |  44 ++
 ...ch-vendor_libc-0.2.168_src_unix_solarish_mod.rs |  15 +
 ...c-0.2.169_src_unix_bsd_netbsdlike_netbsd_mod.rs |  15 +
 ...2.169_src_unix_bsd_netbsdlike_netbsd_riscv64.rs |  90 +++
 ...ch-vendor_libc-0.2.169_src_unix_solarish_mod.rs |  15 +
 ...2.171_src_unix_bsd_netbsdlike_netbsd_riscv64.rs |  90 +++
 ...2.172_src_unix_bsd_netbsdlike_netbsd_riscv64.rs |  89 +++
 ...ch-vendor_libc-0.2.172_src_unix_solarish_mod.rs |  15 +
 ...c-0.2.175_src_unix_bsd_netbsdlike_netbsd_mod.rs |  16 +
 ...2.175_src_unix_bsd_netbsdlike_netbsd_riscv64.rs |  71 ++
 ...-0.2.177_src_unix_bsd_netbsdlike_netbsd_m68k.rs |  17 +
 ...c-0.2.177_src_unix_bsd_netbsdlike_netbsd_mod.rs |  28 +
 ...2.177_src_unix_bsd_netbsdlike_netbsd_riscv64.rs |  71 ++
 ...-0.2.180_src_unix_bsd_netbsdlike_netbsd_m68k.rs |  17 +
 ...c-0.2.180_src_unix_bsd_netbsdlike_netbsd_mod.rs |  16 +
 ...-0.2.183_src_unix_bsd_netbsdlike_netbsd_m68k.rs |  17 +
 ...c-0.2.183_src_unix_bsd_netbsdlike_netbsd_mod.rs |  16 +
 ...-0.2.184_src_unix_bsd_netbsdlike_netbsd_m68k.rs |  17 +
 ...c-0.2.184_src_unix_bsd_netbsdlike_netbsd_mod.rs |  16 +
 ...-0.2.185_src_unix_bsd_netbsdlike_netbsd_m68k.rs |  17 +
 ...c-0.2.185_src_unix_bsd_netbsdlike_netbsd_mod.rs |  16 +
 ...-0.2.186_src_unix_bsd_netbsdlike_netbsd_m68k.rs |  17 +
 ...c-0.2.186_src_unix_bsd_netbsdlike_netbsd_mod.rs |  16 +
 .../patch-vendor_line-index-0.1.2_src_lib.rs       |  42 ++
 .../patches/patch-vendor_lzma-sys-0.1.20_config.h  |  25 +
 ...-vendor_memchr-2.7.4_src_arch_aarch64_memchr.rs |  24 +
 ...tch-vendor_memchr-2.7.4_src_arch_aarch64_mod.rs |  15 +
 .../patch-vendor_memchr-2.7.4_src_memchr.rs        | 128 ++++
 ...atch-vendor_memchr-2.7.4_src_memmem_searcher.rs |  78 ++
 .../patch-vendor_memchr-2.7.4_src_vector.rs        |  15 +
 ...28.2+1.1.1w_openssl_Configurations_10-main.conf |  18 +
 ...-src-111.28.2+1.1.1w_openssl_crypto_aria_aria.c |  18 +
 ...h-vendor_openssl-src-111.28.2+1.1.1w_src_lib.rs |  67 ++
 ...0.5.0+3.5.0_openssl_Configurations_10-main.conf |  18 +
 ...sl-src-300.5.0+3.5.0_openssl_crypto_aria_aria.c |  18 +
 ...tch-vendor_openssl-src-300.5.0+3.5.0_src_lib.rs |  30 +
 ...0.6.0+3.6.2_openssl_Configurations_10-main.conf |  18 +
 ...sl-src-300.6.0+3.6.2_openssl_crypto_aria_aria.c |  17 +
 ...tch-vendor_openssl-src-300.6.0+3.6.2_src_lib.rs |  30 +
 ...endor_openssl-sys-0.9.107_build_find__normal.rs |  30 +
 .../patch-vendor_openssl-sys-0.9.107_build_main.rs |  23 +
 ...endor_openssl-sys-0.9.109_build_find__normal.rs |  30 +
 .../patch-vendor_openssl-sys-0.9.109_build_main.rs |  23 +
 ...endor_openssl-sys-0.9.114_build_find__normal.rs |  30 +
 .../patch-vendor_openssl-sys-0.9.114_build_main.rs |  23 +
 ...vendor_openssl-sys-0.9.92_build_find__normal.rs |  30 +
 .../patch-vendor_openssl-sys-0.9.92_build_main.rs  |  23 +
 ...target_src_spec_aarch64__be__unknown__netbsd.rs |  27 +
 .../patch-vendor_zerocopy-0.7.32_src_lib.rs        |  25 +
 .../patch-vendor_zerocopy-0.7.35_src_lib.rs        |  25 +
 .../patches/patch-vendor_zeroize-1.8.1_src_lib.rs  |  15 +
 rust197/platform.mk                                |  34 +
 rust197/rust.mk                                    |  68 ++
 94 files changed, 4327 insertions(+)

diffs:
diff --git a/rust197/DESCR b/rust197/DESCR
new file mode 100644
index 0000000000..6dc90a671e
--- /dev/null
+++ b/rust197/DESCR
@@ -0,0 +1,13 @@
+Rust is a systems programming language focused on three goals: safety,
+speed, and concurrency.  It maintains these goals without having a
+garbage collector, making it a useful language for a number of use cases
+other languages aren't good at: embedding in other languages, programs
+with specific space and time requirements, and writing low-level code,
+like device drivers and operating systems.
+
+It improves on current languages targeting this space by having a number
+of compile-time safety checks that produce no runtime overhead, while
+eliminating all data races.  Rust also aims to achieve "zero-cost
+abstractions" even though some of these abstractions feel like those of
+a high-level language.  Even then, Rust still allows precise control
+like a low-level language would.
diff --git a/rust197/Makefile b/rust197/Makefile
new file mode 100644
index 0000000000..2e85fb0861
--- /dev/null
+++ b/rust197/Makefile
@@ -0,0 +1,808 @@
+# $NetBSD: Makefile,v 1.360 2026/05/14 16:41:22 ryoon Exp $
+
+DISTNAME=	rustc-1.97.0-src
+PKGNAME=	${DISTNAME:S/rustc/rust/:S/-src//}
+CATEGORIES=	lang
+MASTER_SITES=	https://static.rust-lang.org/dist/
+
+MAINTAINER=	pkgsrc-users%NetBSD.org@localhost
+HOMEPAGE=	https://www.rust-lang.org/
+COMMENT=	Safe, concurrent, practical language
+LICENSE=	mit OR apache-2.0
+
+CONFLICTS+=	rust-bin-[0-9]*
+
+# LLVM uses -std=c++17
+USE_CXX_FEATURES+=	c++17
+USE_GCC_RUNTIME=	yes
+USE_LANGUAGES=		c c++
+USE_LIBTOOL=		yes
+USE_TOOLS+=		bash grep gmake perl:build pkg-config
+
+# This is a bug:
+#   https://github.com/rust-lang/rust/issues/130708
+# "Building rust 1.81.0 does network access in the "build" phase"
+# but set it for now to allow progress in finding other build issues.
+#ALLOW_NETWORK_ACCESS=	yes
+# Ref. dist.vendor below.
+
+# The NetBSD bootstraps are built for NetBSD 9 (because rust doesn't
+# build on 8 or earlier), or because the target didn't exist in 8
+# or 9 (as in riscv64).  Therefore, mark earlier versions as broken.
+BROKEN_ON_PLATFORM+=	NetBSD-[1-8].*-*
+
+HAS_CONFIGURE=		yes
+PYTHON_FOR_BUILD_ONLY=	tool
+CONFIG_SHELL=		${TOOL_PYTHONBIN}
+CONFIGURE_SCRIPT=	src/bootstrap/configure.py
+CONFIGURE_ARGS+=	--prefix=${PREFIX}
+CONFIGURE_ARGS+=	--mandir=${PREFIX}/${PKGMANDIR}
+CONFIGURE_ARGS+=	--sysconfdir=${PKG_SYSCONFDIR}
+CONFIGURE_ARGS+=	--python=${TOOL_PYTHONBIN}
+CONFIGURE_ARGS+=	--release-channel=stable
+CONFIGURE_ARGS+=	--local-rust-root=${RUST_BOOTSTRAP_PATH}
+CONFIGURE_ARGS+=	--enable-extended	# Build and install cargo too.
+CONFIGURE_ARGS+=	--enable-rpath
+CONFIGURE_ARGS+=	--disable-codegen-tests
+CONFIGURE_ARGS+=	--disable-compiler-docs
+CONFIGURE_ARGS+=	--disable-llvm-static-stdcpp
+CONFIGURE_ARGS+=	--disable-ninja
+CONFIGURE_ARGS+=	--dist-compression-formats=xz
+# Ref. issue #130708 & backport of pull-request 130110
+CONFIGURE_ARGS+=	--set dist.vendor=false
+
+CGC=			compiler/rustc_codegen_cranelift
+REPLACE_BASH+=		${CGC}/.github/scripts/free-disk-space.sh
+REPLACE_BASH+=		library/portable-simd/subtree-sync.sh
+CB=			library/compiler-builtins
+REPLACE_BASH+=		${CB}/ci/bench-icount.sh
+REPLACE_BASH+=		${CB}/ci/miri.sh
+REPLACE_BASH+=		${CB}/ci/run-docker.sh
+REPLACE_BASH+=		${CB}/ci/run-extensive.sh
+REPLACE_BASH+=		${CB}/ci/run.sh
+
+REPLACE_PYTHON+=	${CB}/ci/ci-util.py
+REPLACE_PYTHON+=	${CB}/etc/update-api-list.py
+
+# Include (optional) settings to cross-build rust
+.include "cross.mk"
+
+# optional from do-cross.mk
+CONFIGURE_ARGS+=	${ADD_CONFIGURE_ARGS}
+
+# This should allow us to perform "offline" builds (so cargo doesn't fetch
+# dependencies during the build stage) but this isn't hooked up yet.
+CONFIGURE_ARGS+=	--enable-vendor
+
+# cargo defaults to using the number of available CPUs
+MAKE_ENV+=		CARGO_BUILD_JOBS=${_MAKE_JOBS_N}
+
+CFLAGS.SunOS+=		-D_POSIX_PTHREAD_SEMANTICS
+MAKE_ENV.SunOS+=	AR=gar
+MAKE_ENV.SunOS+=	BOOTSTRAP_SKIP_TARGET_SANITY=1
+
+# Debugging of crate resolution
+# Annoyingly, this makes the powerpc build succeed...
+#MAKE_ENV+=		RUSTC_LOG=rustc_metadata
+
+UNLIMIT_RESOURCES+=	cputime stacksize datasize virtualsize
+
+TEST_TARGET=	check
+
+# bin/* lib/*, but names vary
+CHECK_RELRO_SUPPORTED=	no
+CHECK_SSP_SUPPORTED=	no
+
+.include "../../mk/bsd.prefs.mk"
+
+.if ${OPSYS} == "NetBSD"
+# Getting RPATH with $ORIGIN into the bootstrap binaries is
+# problematic, since pkgsrc refuses to put $ORIGIN into RPATHs
+# of executables. So instead we need these so that the bootstrap
+# compiler can be run out of the $RUST_BOOTSTRAP_PATH directory as
+# part of the initial part of the rust compiler build.
+# This problem is not present with the amd64 bootstrap bits,
+# which are built by our upstream and uses $ORIGIN/../lib in RPATH.
+#
+# The above is only true on NetBSD, for other bootstrap kits (e.g. illumos)
+# the binaries are made to be relocatable after the build using elfedit or
+# similar.  It is unclear why this approach is not used by NetBSD too.
+#
+MAKE_ENV+=		LD_LIBRARY_PATH=${RUST_BOOTSTRAP_PATH:Q}/lib
+PKGSRC_MAKE_ENV+=	LD_LIBRARY_PATH=${RUST_BOOTSTRAP_PATH:Q}/lib
+.endif
+
+# TODO: Hack introduced for 1.86.0 as @loader_path is stripped from the
+# bootstrap compiler arguments and the stage1 libraries cannot be found.
+# Ideally this should be inserted only in the necessary points of the
+# bootstrap script.
+.if ${OPSYS} == "Darwin"
+MAKE_ENV+=	DYLD_LIBRARY_PATH="${WRKSRC}/build/${MACHINE_ARCH}-apple-darwin/stage1/lib:${WRKSRC}/build/${MACHINE_ARCH}-apple-darwin/stage2/lib"
+.endif
+
+# Allow overriding MAKE_JOBS_SAFE
+# some may chose to mostly build faster,
+# and deal with any failures due to deadlocks
+.if !empty(rust.MAKE_JOBS_SAFE)
+.  if ${rust.MAKE_JOBS_SAFE:tl} == "yes"
+MAKE_JOBS_SAFE=		yes
+.  endif
+.endif
+
+.if !empty(rust.BUILD_TARGET)
+BUILD_TARGET=	${rust.BUILD_TARGET}
+.endif
+
+.if !empty(TARGET)
+# Use "dist" build target for cross compile of bootstrap
+BUILD_TARGET?=		dist
+.else
+BUILD_TARGET?=		build
+.endif
+
+.if ${MACHINE_PLATFORM:MNetBSD-*-powerpc} || \
+    ${MACHINE_PLATFORM:MNetBSD-*-earmv[67]hf} || \
+    ${MACHINE_PLATFORM:MNetBSD-*-mipsel} || \
+    !empty(TARGET:Marmv[67]-unknown-netbsd-eabihf) || \
+    !empty(TARGET:Mmipsel-unknown-netbsd)
+# Bootstrapping on NetBSD/powerpc requires no debug-info from rustc
+# (both for amd64->powerpc built and powerpc->powerpc built bootstrap bits)
+# Also try to downsize the armv[67] build.
+CONFIGURE_ARGS+=	--disable-debug
+CONFIGURE_ARGS+=	--disable-debug-assertions
+CONFIGURE_ARGS+=	--disable-llvm-release-debuginfo
+CONFIGURE_ARGS+=	--debuginfo-level=0
+CONFIGURE_ARGS+=	--debuginfo-level-rustc=0
+CONFIGURE_ARGS+=	--debuginfo-level-std=0
+CONFIGURE_ARGS+=	--debuginfo-level-tools=0
+CONFIGURE_ARGS+=	--debuginfo-level-tests=0
+.endif
+
+# Only build the ARM target on/for this host, due to resource constraints
+.if ${MACHINE_PLATFORM:MNetBSD-*-earmv[67]hf}
+CONFIGURE_ARGS+=	--set llvm.targets="ARM"
+.endif
+# When cross-building for ARM on X86, X86 needs to go along due
+# to 2-stage build process
+.if !empty(TARGET:Marmv[67]-unknown-netbsd-eabihf)
+CONFIGURE_ARGS+=	--set llvm.targets="ARM;X86"
+.endif
+# Same for mips:
+.if ${MACHINE_PLATFORM:MNetBSD-*-mipsel}
+CONFIGURE_ARGS+=	--set llvm.targets="Mips"
+.endif
+.if !empty(TARGET:Mmipsel-unknown-netbsd)
+CONFIGURE_ARGS+=	--set llvm.targets="Mips;X86"
+.endif
+
+RUSTLIB_COMPILER=	lib/rustlib/rustc-src/rust/compiler
+RUSTC_CG_CRANELIFT=	${RUSTLIB_COMPILER}/rustc_codegen_cranelift
+
+CHECK_INTERPRETER_SKIP+=	${RUSTC_CG_CRANELIFT}/scripts/filter_profile.rs
+CHECK_INTERPRETER_SKIP+=	${RUSTC_CG_CRANELIFT}/scripts/rustup.sh
+CHECK_INTERPRETER_SKIP+=	${RUSTC_CG_CRANELIFT}/scripts/test_bootstrap.sh
+CHECK_INTERPRETER_SKIP+=	${RUSTC_CG_CRANELIFT}/scripts/test_rustc_tests.sh
+CHECK_INTERPRETER_SKIP+=	${RUSTLIB_COMPILER}/rustc_codegen_gcc/y.sh
+CHECK_INTERPRETER_SKIP+=	lib/rustlib/src/rust/library/backtrace/ci/*.sh
+CHECK_INTERPRETER_SKIP+=	lib/rustlib/src/rust/library/core/src/unicode/printable.py
+CHECK_INTERPRETER_SKIP+=	lib/rustlib/src/rust/library/stdarch/ci/*.sh
+CHECK_PORTABILITY_SKIP+=	tests/run-make/dump-ice-to-disk/check.sh
+CHECK_PORTABILITY_SKIP+=	vendor/libdbus-sys-0.2.5/vendor/dbus/tools/cmake-format
+
+.if ${OPSYS} == "NetBSD"
+# This block contains information about known trouble on NetBSD and workarounds.
+
+# Parallel builds failed on NetBSD due to dynamic linker locking bugs.
+# \todo Explain if the build is believed to be sound if not parallel,
+# or if a non-parallel build is merely more likely to work.
+#
+# See toolchain/54192 at
+#   http://gnats.netbsd.org/cgi-bin/query-pr-single.pl?number=54192
+# which was fixed in -current on 2020-04-19:
+#   http://mail-index.netbsd.org/source-changes/2020/04/16/msg116256.html
+#   http://mail-index.netbsd.org/source-changes/2020/04/19/msg116337.html
+# These  were pulled up to netbsd-9 on 2020-05-13:
+#   http://releng.netbsd.org/cgi-bin/req-9.cgi?show=907
+# This has not been pulled up to netbsd-8
+#   \todo Explain if it's not applicable, shouldn't be pulled up, should be
+#   but hasn't, is too hard, etc.
+#
+# On pkgbuild for 2020Q1 9.0_RELEASE amd64, rust did not build despite
+# MAKE_JOBS_SAFE=no, but setting MAKE_JOBS=1 resulted in success. (No
+# PR is open for this.)  \todo Understand and fix.
+#
+# If we aren't on 9-current, and are on 8.x or 9.x, avoid parallel.
+# Release 9.x and 9.1 or later is OK.
+.  if ${OPSYS} == "NetBSD" && ${OPSYS_VERSION} > 090999 && ${OPSYS_VERSION} < 090900
+MAKE_JOBS_SAFE?=	no
+.  endif
+
+# Open PRs
+#
+# Broken package with PREFIX not /usr/pkg:
+#   http://gnats.netbsd.org/cgi-bin/query-pr-single.pl?number=54453
+#
+
+.endif
+
+#
+# Under NetBSD, do not use DT_RUNPATH
+#
+BUILDLINK_TRANSFORM.NetBSD+=	rm:-Wl,--enable-new-dtags
+
+#
+# Somewhere in the LLVM build "-arch x86_64" is passed on macOS/arm64 which
+# breaks linking, see https://github.com/rust-lang/rust/issues/81790.  Until
+# this can be located (proving difficult!) we just force it.
+#
+.if ${MACHINE_PLATFORM:MDarwin-*-aarch64}
+BUILDLINK_TRANSFORM+=	opt:x86_64:arm64
+.endif
+
+#
+# Rust unfortunately requires itself to build.  On platforms which aren't
+# supported by upstream (where they offer binary bootstraps), or where we do
+# not trust random binaries from the Internet, we need to build and provide our
+# own bootstrap.  See the stage0-bootstrap below for more details.
+#
+DISTFILES:=		${DEFAULT_DISTFILES}
+
+.if ${MACHINE_PLATFORM:MDarwin-*-aarch64} || make(distinfo) || make (makesum) || make(mdi)
+RUST_STAGE0_VER=	1.96.1
+RUST_ARCH:=		aarch64-apple-darwin
+RUST_STAGE0:=		rust-${RUST_STAGE0_VER}-${RUST_ARCH}.tar.gz
+RUST_STD_STAGE0:=	rust-std-${RUST_STAGE0_VER}-${RUST_ARCH}.tar.gz
+DISTFILES:=		${DISTFILES} ${RUST_STAGE0} ${RUST_STD_STAGE0}
+.endif
+.if ${MACHINE_PLATFORM:MDarwin-*-x86_64} || make(distinfo) || make (makesum) || make(mdi)
+RUST_STAGE0_VER=	1.96.1
+RUST_ARCH:=		x86_64-apple-darwin
+RUST_STAGE0:=		rust-${RUST_STAGE0_VER}-${RUST_ARCH}.tar.gz
+RUST_STD_STAGE0:=	rust-std-${RUST_STAGE0_VER}-${RUST_ARCH}.tar.gz
+DISTFILES:=		${DISTFILES} ${RUST_STAGE0} ${RUST_STD_STAGE0}
+.endif
+.if ${MACHINE_PLATFORM:MLinux-*-aarch64} || make(distinfo) || make (makesum) || make(mdi)
+RUST_STAGE0_VER=	1.96.1
+RUST_ARCH:=		aarch64-unknown-linux-gnu
+RUST_STAGE0:=		rust-${RUST_STAGE0_VER}-${RUST_ARCH}.tar.gz
+RUST_STD_STAGE0:=	rust-std-${RUST_STAGE0_VER}-${RUST_ARCH}.tar.gz
+DISTFILES:=		${DISTFILES} ${RUST_STAGE0} ${RUST_STD_STAGE0}
+.endif
+.if ${MACHINE_PLATFORM:MLinux-*-earmv6hf} || make(distinfo) || make (makesum) || make(mdi)
+RUST_STAGE0_VER=	1.96.1
+RUST_ARCH:=		arm-unknown-linux-gnueabihf
+RUST_STAGE0:=		rust-${RUST_STAGE0_VER}-${RUST_ARCH}.tar.gz
+RUST_STD_STAGE0:=	rust-std-${RUST_STAGE0_VER}-${RUST_ARCH}.tar.gz
+DISTFILES:=		${DISTFILES} ${RUST_STAGE0} ${RUST_STD_STAGE0}
+.endif
+.if ${MACHINE_PLATFORM:MLinux-*-earmv7hf} || make(distinfo) || make (makesum) || make(mdi)
+RUST_STAGE0_VER=	1.96.1
+RUST_ARCH:=		armv7-unknown-linux-gnueabihf
+RUST_STAGE0:=		rust-${RUST_STAGE0_VER}-${RUST_ARCH}.tar.gz
+RUST_STD_STAGE0:=	rust-std-${RUST_STAGE0_VER}-${RUST_ARCH}.tar.gz
+DISTFILES:=		${DISTFILES} ${RUST_STAGE0} ${RUST_STD_STAGE0}
+.endif
+.if ${MACHINE_PLATFORM:MLinux-*-i386} || make(distinfo) || make (makesum) || make(mdi)
+RUST_STAGE0_VER=	1.96.1
+RUST_ARCH:=		i686-unknown-linux-gnu
+RUST_STAGE0:=		rust-${RUST_STAGE0_VER}-${RUST_ARCH}.tar.gz
+RUST_STD_STAGE0:=	rust-std-${RUST_STAGE0_VER}-${RUST_ARCH}.tar.gz
+DISTFILES:=		${DISTFILES} ${RUST_STAGE0} ${RUST_STD_STAGE0}
+.endif
+.if ${MACHINE_PLATFORM:MLinux-*-x86_64} || make(distinfo) || make (makesum) || make(mdi)
+RUST_STAGE0_VER=	1.96.1
+RUST_ARCH:=		x86_64-unknown-linux-gnu
+RUST_STAGE0:=		rust-${RUST_STAGE0_VER}-${RUST_ARCH}.tar.gz
+RUST_STD_STAGE0:=	rust-std-${RUST_STAGE0_VER}-${RUST_ARCH}.tar.gz
+DISTFILES:=		${DISTFILES} ${RUST_STAGE0} ${RUST_STD_STAGE0}
+.endif
+.if ${MACHINE_PLATFORM:MSunOS-*-x86_64} || make(distinfo) || make (makesum) || make(mdi)
+RUST_STAGE0_VER=	1.96.1
+RUST_ARCH:=		x86_64-unknown-illumos
+RUST_STAGE0:=		rust-${RUST_STAGE0_VER}-${RUST_ARCH}.tar.gz
+RUST_STD_STAGE0:=	rust-std-${RUST_STAGE0_VER}-${RUST_ARCH}.tar.gz
+DISTFILES:=		${DISTFILES} ${RUST_STAGE0} ${RUST_STD_STAGE0}
+# Override default "x86_64-sun-solaris" selection
+CONFIGURE_ARGS+=	--set=target.${RUST_ARCH}.llvm-config=${LLVM_CONFIG_PATH}
+CONFIGURE_ARGS+=	--build=${RUST_ARCH}
+CONFIGURE_ARGS+=	--host=${RUST_ARCH}
+CONFIGURE_ARGS+=	--target=${RUST_ARCH}
+.endif
+.if ${MACHINE_PLATFORM:MFreeBSD-*-x86_64} || make(distinfo) || make (makesum) || make(mdi)
+RUST_STAGE0_VER=	1.96.1
+RUST_ARCH:=		x86_64-unknown-freebsd
+RUST_STAGE0:=		rust-${RUST_STAGE0_VER}-${RUST_ARCH}.tar.gz
+RUST_STD_STAGE0:=	rust-std-${RUST_STAGE0_VER}-${RUST_ARCH}.tar.gz
+DISTFILES:=		${DISTFILES} ${RUST_STAGE0} ${RUST_STD_STAGE0}
+.endif
+.if ${MACHINE_PLATFORM:MNetBSD-*-i386} || make(distinfo) || make (makesum) || make(mdi)
+RUST_STAGE0_VER=	1.96.1
+RUST_ARCH=		i586-unknown-netbsd
+RUST_STAGE0:=		rust-${RUST_STAGE0_VER}-${RUST_ARCH}.tar.xz
+RUST_STD_STAGE0:=	rust-std-${RUST_STAGE0_VER}-${RUST_ARCH}.tar.xz
+SITES.${RUST_STAGE0}=	${MASTER_SITE_LOCAL:=rust/}
+SITES.${RUST_STD_STAGE0}=	${MASTER_SITE_LOCAL:=rust/}
+DISTFILES:=		${DISTFILES} ${RUST_STAGE0} ${RUST_STD_STAGE0}
+# Setting this changes it for every distfile, which doesn't match what is
+# currently in distinfo.
+#DIST_SUBDIR=		${PKGNAME}
+# For atomic ops
+CFLAGS+=		-march=i586
+CONFIGURE_ARGS+=	--build=${RUST_ARCH}
+pre-build: pre-build-fix-paxctl
+.PHONY: pre-build-fix-paxctl
+pre-build-fix-paxctl:
+	${TOOLS_PLATFORM.paxctl} +am ${WRKDIR}/rust-bootstrap/bin/cargo
+	${TOOLS_PLATFORM.paxctl} +am ${WRKDIR}/rust-bootstrap/bin/rustc
+.endif
+.if ${MACHINE_PLATFORM:MNetBSD-*-x86_64} || make(distinfo) || make (makesum) || make(mdi)
+RUST_STAGE0_VER=	1.96.1
+RUST_ARCH=		x86_64-unknown-netbsd
+RUST_STAGE0:=		rust-${RUST_STAGE0_VER}-${RUST_ARCH}.tar.xz
+RUST_STD_STAGE0:=	rust-std-${RUST_STAGE0_VER}-${RUST_ARCH}.tar.xz
+DISTFILES:=		${DISTFILES} ${RUST_STAGE0} ${RUST_STD_STAGE0}
+.endif
+.if ${MACHINE_PLATFORM:MNetBSD-*-powerpc} || make(distinfo) || make (makesum) || make(mdi)
+RUST_STAGE0_VER=		1.96.1
+RUST_ARCH=			powerpc-unknown-netbsd
+RUST_STAGE0:=			rust-${RUST_STAGE0_VER}-${RUST_ARCH}.tar.xz
+RUST_STD_STAGE0:=		rust-std-${RUST_STAGE0_VER}-${RUST_ARCH}.tar.xz
+DISTFILES:=			${DISTFILES} ${RUST_STAGE0} ${RUST_STD_STAGE0}
+SITES.${RUST_STAGE0}=		${MASTER_SITE_LOCAL:=rust/}
+SITES.${RUST_STD_STAGE0}=	${MASTER_SITE_LOCAL:=rust/}
+.endif
+.if ${MACHINE_PLATFORM:MNetBSD-*-aarch64} || make(distinfo) || make (makesum) || make(mdi)
+RUST_STAGE0_VER=		1.96.1
+RUST_ARCH=			aarch64-unknown-netbsd
+RUST_STAGE0:=			rust-${RUST_STAGE0_VER}-${RUST_ARCH}.tar.xz
+RUST_STD_STAGE0:=		rust-std-${RUST_STAGE0_VER}-${RUST_ARCH}.tar.xz
+DISTFILES:=			${DISTFILES} ${RUST_STAGE0} ${RUST_STD_STAGE0}
+SITES.${RUST_STAGE0}=		${MASTER_SITE_LOCAL:=rust/}
+SITES.${RUST_STD_STAGE0}=	${MASTER_SITE_LOCAL:=rust/}
+.endif
+.if ${MACHINE_PLATFORM:MNetBSD-*-aarch64eb} || make(distinfo) || make (makesum) || make(mdi)
+RUST_STAGE0_VER=		1.96.1
+RUST_ARCH=			aarch64_be-unknown-netbsd
+RUST_STAGE0:=			rust-${RUST_STAGE0_VER}-${RUST_ARCH}.tar.xz
+RUST_STD_STAGE0:=		rust-std-${RUST_STAGE0_VER}-${RUST_ARCH}.tar.xz
+DISTFILES:=			${DISTFILES} ${RUST_STAGE0} ${RUST_STD_STAGE0}
+SITES.${RUST_STAGE0}=		${MASTER_SITE_LOCAL:=rust/}
+SITES.${RUST_STD_STAGE0}=	${MASTER_SITE_LOCAL:=rust/}
+.endif
+.if ${MACHINE_PLATFORM:MNetBSD-*-sparc64} || make(distinfo) || make (makesum) || make(mdi)
+RUST_STAGE0_VER=		1.96.1
+RUST_ARCH=			sparc64-unknown-netbsd
+RUST_STAGE0:=			rust-${RUST_STAGE0_VER}-${RUST_ARCH}.tar.xz
+RUST_STD_STAGE0:=		rust-std-${RUST_STAGE0_VER}-${RUST_ARCH}.tar.xz
+DISTFILES:=			${DISTFILES} ${RUST_STAGE0} ${RUST_STD_STAGE0}
+SITES.${RUST_STAGE0}=		${MASTER_SITE_LOCAL:=rust/}
+SITES.${RUST_STD_STAGE0}=	${MASTER_SITE_LOCAL:=rust/}
+.endif
+.if ${MACHINE_PLATFORM:MNetBSD-*-earmv7hf} || make(distinfo) || make (makesum) || make(mdi)
+RUST_ARCH=			armv7-unknown-netbsd-eabihf
+RUST_STAGE0_VER=		1.96.1
+RUST_STAGE0:=			rust-${RUST_STAGE0_VER}-${RUST_ARCH}.tar.xz
+RUST_STD_STAGE0:=		rust-std-${RUST_STAGE0_VER}-${RUST_ARCH}.tar.xz
+DISTFILES:=			${DISTFILES} ${RUST_STAGE0} ${RUST_STD_STAGE0}
+SITES.${RUST_STAGE0}=		${MASTER_SITE_LOCAL:=rust/}
+SITES.${RUST_STD_STAGE0}=	${MASTER_SITE_LOCAL:=rust/}
+.endif
+.if ${MACHINE_PLATFORM:MNetBSD-*-earmv6hf} || make(distinfo) || make (makesum) || make(mdi)
+RUST_ARCH=			armv6-unknown-netbsd-eabihf
+RUST_STAGE0_VER=		1.96.1
+RUST_STAGE0:=			rust-${RUST_STAGE0_VER}-${RUST_ARCH}.tar.xz
+RUST_STD_STAGE0:=		rust-std-${RUST_STAGE0_VER}-${RUST_ARCH}.tar.xz
+DISTFILES:=			${DISTFILES} ${RUST_STAGE0} ${RUST_STD_STAGE0}
+SITES.${RUST_STAGE0}=		${MASTER_SITE_LOCAL:=rust/}
+SITES.${RUST_STD_STAGE0}=	${MASTER_SITE_LOCAL:=rust/}
+.endif
+#.if ${MACHINE_PLATFORM:MNetBSD-*-mipsel} || make(distinfo) || make (makesum) || make(mdi)
+#RUST_ARCH=			mipsel-unknown-netbsd
+#RUST_STAGE0_VER=		1.96.1
+#RUST_STAGE0:=			rust-${RUST_STAGE0_VER}-${RUST_ARCH}.tar.xz
+#RUST_STD_STAGE0:=		rust-std-${RUST_STAGE0_VER}-${RUST_ARCH}.tar.xz
+#DISTFILES:=			${DISTFILES} ${RUST_STAGE0} ${RUST_STD_STAGE0}
+#SITES.${RUST_STAGE0}=		${MASTER_SITE_LOCAL:=rust/}
+#SITES.${RUST_STD_STAGE0}=	${MASTER_SITE_LOCAL:=rust/}
+#.endif
+.if ${MACHINE_PLATFORM:MNetBSD-*-riscv64} || make(distinfo) || make (makesum) || make(mdi)
+RUST_ARCH=			riscv64gc-unknown-netbsd
+RUST_STAGE0_VER=		1.96.1
+RUST_STAGE0:=			rust-${RUST_STAGE0_VER}-${RUST_ARCH}.tar.xz
+RUST_STD_STAGE0:=		rust-std-${RUST_STAGE0_VER}-${RUST_ARCH}.tar.xz
+DISTFILES:=			${DISTFILES} ${RUST_STAGE0} ${RUST_STD_STAGE0}
+SITES.${RUST_STAGE0}=		${MASTER_SITE_LOCAL:=rust/}
+SITES.${RUST_STD_STAGE0}=	${MASTER_SITE_LOCAL:=rust/}
+.endif
+
+# You may override RUST_BOOTSTRAP_PATH and RUST_ARCH in mk.conf
+# if you have a local bootstrap compiler.
+.if !defined(RUST_ARCH) && !defined(RUST_BOOTSTRAP_PATH)
+NOT_FOR_PLATFORM+=	${MACHINE_PLATFORM}
+.else
+RUST_BOOTSTRAP_PATH?=	${WRKDIR}/rust-bootstrap
+.endif
+
+.if ${OPSYS} == "SunOS"
+TOOL_DEPENDS+=		coreutils>=0:../../sysutils/coreutils
+TOOL_DEPENDS+=		gzip>=0:../../archivers/gzip
+TOOLS_CREATE+=		md5sum
+TOOLS_PATH.md5sum=	${TOOLBASE}/bin/gmd5sum
+TOOLS_PLATFORM.gzcat=	${TOOLBASE}/bin/gzip -cd
+.endif
+
+SUBST_CLASSES+=		prefix
+SUBST_STAGE.prefix=	pre-configure
+SUBST_FILES.prefix+=	compiler/rustc_codegen_ssa/src/back/linker.rs
+SUBST_FILES.prefix+=	compiler/rustc_target/src/spec/base/netbsd.rs
+SUBST_FILES.prefix+=	src/bootstrap/src/core/build_steps/compile.rs
+SUBST_FILES.prefix+=	src/bootstrap/src/core/builder/cargo.rs
+SUBST_FILES.prefix+=	src/bootstrap/bootstrap.py
+SUBST_VARS.prefix=	PREFIX
+
+#
+# Generate list of subst entries for various .cargo-checksum.json files.  These
+# are all handled together in one big substitution to simplify things rather
+# than one substitution entry per file, but are kept separate below to ease
+# updating and verification.
+#
+
+CKSUM_CRATES+=	vendor/crossbeam-utils-0.8.18
+CKSUMS+=	31a8276afd38e39987a169eeb02e9bed32670de5ca36d7eb74aab7e506cf9dc4
+CKSUMS+=	ead4bda23c322bde8c01e48d4cd19b70e7b7e473a56466218d279f88463ab466
+
+CKSUM_CRATES+=	vendor/openssl-src-300.5.0+3.5.0
+CKSUMS+=	16c0b9fa70475cfb50ac21ad4ce049b494c45b3270fed386013785a28abb8d0a
+CKSUMS+=	e2817c457afa7efc0f2ca62ce9dab5254eb5ddd9a5fd9e75bba2789be92c7b14
+CKSUMS+=	6e62515e67910aea2f04b64c643aa2545732f9dd7bf0abf87d8accf8c2c1fb88
+CKSUMS+=	ccc5252660386fbfec2d66423f2dc87e6da74efd39ca0fcd7c7fd583056725c1
+CKSUMS+=	ac5501e7bff0f4384db0537307b362bf1bcb120d8b5859e5f08bd796e78feaea
+CKSUMS+=	6d2c2831119e059d35e81a89b08195a29e325f68acfd86a3a7157ebf8e78182d
+
+CKSUM_CRATES+=	vendor/openssl-src-300.6.0+3.6.2
+CKSUMS+=	f29bb8de5bfbace12cbf9f4fbf952fccc7a34e105d50105d35e99754df53f2df
+CKSUMS+=	7167b1e432a14fb4d52436b6549f358e998b494d8edb30e22ebd6e514f661769
+CKSUMS+=	ebaf5be4d2ab6cf1de443a970a575bbb533cd19a53dc82e2f2fa6ef9c629c36e
+CKSUMS+=	c67b20dee2ffe22c6e35ad3e2f39c76902b41e0595a4db62e1dce7887f59e8b4
+CKSUMS+=	0b3d584f0823ce98ec4bc36460c5a0e9fa3c50ac00b987f03d835bd9aef52361
+CKSUMS+=	bc61fdad9fa969c350171a3ec1b0a96b145257463c8c7f06c8c332f9bf26b0e8
+
+CKSUM_CRATES+=	vendor/openssl-sys-0.9.107
+CKSUMS+=	a0d47c624273b43b4250cff5fa2f9b75e4199ca76897608563b526aedcdf3a16
+CKSUMS+=	fcfc15ca30e1f881ed46cf57597a72bd2a8307269d0394c905f23e076a983e12
+CKSUMS+=	e6d478786035538d721d88b7736f602c965a38687a805cb377ebbe0ea1a14617
+CKSUMS+=	e2b2473bdf7ce5f854fcef6f07f984accc53b4382dba160d625c1fcbaba31612
+
+CKSUM_CRATES+=	vendor/openssl-sys-0.9.109
+CKSUMS+=	112fcb6f18b81f31c23c60e7be5fddc87603c05a595f2e22b6e8f7ed2ea89e5f
+CKSUMS+=	023a3e755d7d4c5ca6e4f8ce7a8b1dc2dd1e50cbfcaa43cc6fe809b251ee7037
+CKSUMS+=	f66ce762ec63c28621a0d6d48bd5872b96e71f0bfb6f88576a6e2cba0c229e12
+CKSUMS+=	656834a8bd87476b074f36bcc2aeb33a74a0a0a6db5d140c35c4b3eb385afebe
+
+CKSUM_CRATES+=	vendor/openssl-sys-0.9.114
+CKSUMS+=	906f7cc22c01c7e505abbbc861592f5546b9a8a66ac0d79b7d5c5e909bc58ac0
+CKSUMS+=	e3c1239f28dd508e145040022537b328b5e12371fa5fc45442fbbd6183d213a4
+CKSUMS+=	0c5a4bd38ed007182cfec3cf0824a4806e5c629b9d69e3cc2a5b6e9be3eec280
+CKSUMS+=	777a22f3cd39ad01f2e559ecf600bb9c03ec42e0b9fbe41746f42938e162d523
+
+CKSUM_CRATES+=	vendor/libc-0.2.155
+CKSUMS+=	3e550d95419169febf094c425451ca86b12821fa17839b4b0ba7520b145a5820
+CKSUMS+=	1cf38d9ddeca5295821b4234e17e1fc749f35b00307bdfdacb24c6892a288ad6
+CKSUMS+=	b8d6f089fc8eb2cb59e45335a26c9ce871b846216c9859b553c6b91982f8de33
+CKSUMS+=	d8c4a979ce9b406fb63c5aaf2827b616689294331341737fec392b8faa2126fa
+
+CKSUM_CRATES+=	vendor/libc-0.2.169
+CKSUMS+=	dc216609dfc6b2835e26f8c3e70f4c7c65425933eef04538de603f51e9429ec5
+CKSUMS+=	04004bda0ea97d55c3588a7d82fa1faf0d150c5390250a298216ff3cc899b911
+CKSUMS+=	b5dae853ebfc3355b155f8c20f3a481517bce27e164e304f56dfff172e313098
+CKSUMS+=	55fb7f2c0877231286b2b6515e08eda1d5cac1311a402d0aa162c7eb867ee19b
+CKSUMS+=	0b1936bad97b3a272c2d323d3435f6860fc355abe7603ca7ed8c4166cac75cc5
+CKSUMS+=	1eb383a057cdf2826d884b19142bf0b68b6b30c5bc20baf7ee10401a92a8ef22
+
+CKSUM_CRATES+=	vendor/libc-0.2.171
+CKSUMS+=	f3778a9bd2ba923220537d167cfb10b91580ffbf583100789a46d2807f7a1e3e
+CKSUMS+=	2dc054435fd2976536b6685d66ba6796d4eb143885bd573e686e9b042ae7257a
+CKSUMS+=	27feafe043662f005d622502fbb31d99877c1ed8d83b30f350dafcdb513fee69
+CKSUMS+=	2dc054435fd2976536b6685d66ba6796d4eb143885bd573e686e9b042ae7257a
+
+CKSUM_CRATES+=	vendor/libc-0.2.172
+CKSUMS+=	ec4c1dce83e8531df71b89e4aee1ab4d3b3b18d1b6d34b03d94573144c40e7c5
+CKSUMS+=	dc3179a14c65c5e3d250ce9819934236f11fc6c9bfa7afa8d4208931d28e4250
+CKSUMS+=	f3778a9bd2ba923220537d167cfb10b91580ffbf583100789a46d2807f7a1e3e
+CKSUMS+=	2dc054435fd2976536b6685d66ba6796d4eb143885bd573e686e9b042ae7257a
+
+CKSUM_CRATES+=	vendor/libc-0.2.175
+CKSUMS+=	efa1a156cff1ab2450439adbb3ab2113bed6b7de2205c99e9cba875aa2b1c153
+CKSUMS+=	f446c996f00e4d15fd25461a30c767c05d083df9e047b0da497ce7c545acfa96
+CKSUMS+=	40c61bfb238ba988391cabe55e389c33e7adce7cf1cdd8a6db56406401f566e3
+CKSUMS+=	65fe8c348242f176decd9c71be8dfce0baa005e7cb0cab2f3d2a05dae2593ecd
+
+CKSUM_CRATES+=	vendor/libc-0.2.177
+# covered by libc-0.2.175
+#CKSUMS+=	efa1a156cff1ab2450439adbb3ab2113bed6b7de2205c99e9cba875aa2b1c153
+#CKSUMS+=	f446c996f00e4d15fd25461a30c767c05d083df9e047b0da497ce7c545acfa96
+CKSUMS+=	461feb5dc8dddea353ab6d32519045bc9f16525a48449c93dc7148469d94c9c3
+CKSUMS+=	1cab8d313161004e10463c6fd37c0846b31dbb7ccd0dbb509dd4e3edd94dda5b
+
+CKSUM_CRATES+=	vendor/libc-0.2.180
+CKSUMS+=	7628a61b5d75750047eb9cb79d0dc89d45cf0cf32edc5786cf7ca45c5dab1114
+CKSUMS+=	85ab34c72fc39f2c5a5cf98aebe896e6629f8b53f0592dde614f22b2b271fc5a
+
+CKSUM_CRATES+=	vendor/libc-0.2.183
+CKSUMS+=	a782d53bc9e06c87c6c8b8182ee79cab693ce39be7d9ecb9dcd7ca285284734f
+CKSUMS+=	2113dd4a3bdacf81fc125eb14b6e42d34e79c7df8909ace69c41e639bea51b4f
+
+CKSUM_CRATES+=	vendor/libc-0.2.185
+CKSUM_CRATES+=	vendor/libc-0.2.186
+CKSUMS+=	12d1e288aa3c351000721502e3cbd7115d7d5584ffc5c37f5c00e9c56f657385
+CKSUMS+=	ba90b1b54ba7ec1368ade4eeebc5a6ac0f43aa2468ace5601b3a2d64b8b2e3af
+
+CKSUM_CRATES+=	vendor/zerocopy-0.7.32
+CKSUMS+=	2f21f18a4ca1d4be2d997f037158cb21a7421b2ba2cc52f3e4c5f9410197ed27
+CKSUMS+=	abe079743c2b2dea5b2c42564f98741a5eb9e24ff019e01742ace5581e53c06f
+
+CKSUM_CRATES+=	vendor/zerocopy-0.7.35
+CKSUMS+=	eb5033d1f2f3d5314625bc63353b1d105cb414d4bc68edf8700b401e4055d669
+CKSUMS+=	bd504cc95f722a296a5f221c3a3068c9eaa946258beff163581d9492de6ccdce
+
+CKSUM_CRATES+=	vendor/memchr-2.7.4
+CKSUMS+=	5bb70f915084e629d940dbc322f5b9096b2e658cf63fea8a2f6e7550412e73a0
+CKSUMS+=	34aaa34eb7048e8bba49d390942ab707990380952f37f388f3cca30970c53450
+CKSUMS+=	7763472d43c66df596ca0697c07db0b4666d38a6a14f64f9f298aaf756c4a715
+CKSUMS+=	1b26fca824c410077780fbc2f4c53c1d195ba3bdf6785b529ceb0a11f039cec2
+CKSUMS+=	3b15d5cb9715f26e655598eacbb8bbba74cbe8ddb2fb969d13aa75f216a118dd
+CKSUMS+=	8844a2cd5e71abb8efdf8fc3ee54d9c66f3fedb529cdaf5984c279177f5f90af
+CKSUMS+=	6ae779ec5d00f443075316e0105edf30b489a38e2e96325bec14ccecd014145b
+CKSUMS+=	28d66e566b73f6f0f7add4092874dc967ce133bfb6dcbd81f03c9a04b6e4e1d0
+CKSUMS+=	44cd1a614bd66f1e66fc86c541d3c3b8d3a14a644c13e8bf816df3f555eac2d4
+CKSUMS+=	27f9bff08b24828e1a611b10a0282f5457d12e9e7254202040144d392297d720
+
+CKSUM_CRATES+=	vendor/line-index-0.1.2
+CKSUMS+=	c4613b718951cf0b880a3a7829e102a9ec7196591437e3bc0cfd857c717bfb61
+CKSUMS+=	5183e802793932fb980b4e321656c65d1b6231de3febd1ac94dfa73de31245f0
+
+CKSUM_CRATES+=	vendor/lzma-sys-0.1.20
+CKSUMS+=	6fd5e9245db34c6f557b8bfcaf03db82fc88c3b06dbfbb5f03b2bcd138983ef9
+CKSUMS+=	2a68e3e635dce81c7dba25b3d3abfaa894ee729e1604f2d000ae3e201f7739a4
+
+CKSUM_CRATES+=	vendor/zeroize-1.8.1
+CKSUMS+=	9f59308c21265a2fb46935a6468d8bc2e86e4613c9a942fcfc91d61bec8cc878
+CKSUMS+=	9e20af81edc96e11f17c3e3a2933c073b6c6f9b86ca25cab0eabd763c6b80aee
+
+SUBST_CLASSES+=		cksum
+SUBST_STAGE.cksum=	pre-configure
+.for crate in ${CKSUM_CRATES}
+SUBST_FILES.cksum+=	${crate}/.cargo-checksum.json
+.endfor
+.for from to in ${CKSUMS}
+SUBST_SED.cksum+=	-e 's,${from},${to},g'
+.endfor
+
+post-extract:
+	set -e;									\
+	if ${TEST} -e ${WRKDIR}/rust-${RUST_STAGE0_VER}-${RUST_ARCH}/install.sh	\
+	  -a ! -e ${RUST_BOOTSTRAP_PATH}/bin/rustc; then \
+		cd ${WRKDIR}/rust-${RUST_STAGE0_VER}-${RUST_ARCH};	\
+		env ${MAKE_ENV} ${TOOLS_BASH} \
+			./install.sh --prefix=${RUST_BOOTSTRAP_PATH};	\
+		cd ${WRKDIR}/rust-std-${RUST_STAGE0_VER}-${RUST_ARCH};	\
+		env ${MAKE_ENV} ${TOOLS_BASH} \
+			./install.sh --prefix=${RUST_BOOTSTRAP_PATH};	\
+	fi
+.if ${OPSYS} == "NetBSD"
+	SDIR=${WRKDIR}/scripts; \
+	${MKDIR} $${SDIR}; \
+	cd $${SDIR}; \
+	${RM} -f c++-wrap; \
+	${RM} -f clang++-wrap; \
+	${RM} -f clang-wrap; \
+	${RM} -f ar-wrap; \
+	${CP} ${.CURDIR}/files/gcc-wrap .; \
+	${CHMOD} +x gcc-wrap; \
+	${LN} -s gcc-wrap c++-wrap; \
+	${LN} -s gcc-wrap clang++-wrap; \
+	${LN} -s gcc-wrap clang-wrap; \
+	${LN} -s gcc-wrap ar-wrap
+.endif
+
+.if ${OPSYS} == "FreeBSD"
+MAKE_ENV+=		OPENSSL_DIR=${SSLBASE}
+.endif
+
+.if ${OPSYS} == "NetBSD" && !empty(PKGSRC_COMPILER:Mclang) && !exists(/lib/libgcc_s.so)
+BUILDLINK_TRANSFORM+=	rm:-lgcc_s
+MAKE_ENV+=		PKGSRC_HAVE_LIBCPP=yes
+
+pre-build: provide-libgcc-for-bootstrap
+.PHONY: provide-libgcc-for-bootstrap
+provide-libgcc-for-bootstrap:
+.  if exists(${FILESDIR}/libgcc_s.so.1)
+	cp ${FILESDIR}/libgcc_s.so.1 ${RUST_BOOTSTRAP_PATH}/lib/.
+.  endif
+.endif
+
+# Rust builds some bundled components with strict version requirements, ensure
+# that any conflicting packages pulled in via dependencies are not buildlinked.
+BUILDLINK_FILES_CMD.xz=		${TRUE}
+MAKE_ENV+=			LZMA_API_STATIC=1
+pre-configure:
+	${RM} -rf ${BUILDLINK_DIR}/include/libssh2*
+
+#
+# These are essentially copies of the "all", "test", and "install" Makefile
+# targets, but are duplicated here so that we can specify -j.
+#
+do-build:
+	${RUN}${_ULIMIT_CMD}						\
+	cd ${WRKSRC} &&							\
+	${SETENV} ${MAKE_ENV}						\
+	sh -c "if [ \"${BUILD_TARGET}\" = \"dist\" ]; then		\
+		unset DESTDIR;						\
+		${TOOL_PYTHONBIN} ./x.py				\
+		    ${BUILD_TARGET} -j ${_MAKE_JOBS_N};			\
+	else								\
+		${TOOL_PYTHONBIN} ./x.py				\
+		    ${BUILD_TARGET} --stage 2 -j ${_MAKE_JOBS_N} &&	\
+		${TOOL_PYTHONBIN} ./x.py				\
+		    doc --stage 2 -j ${_MAKE_JOBS_N};			\
+	fi"
+
+do-test:
+	${RUN}${_ULIMIT_CMD}						\
+	cd ${WRKSRC} &&							\
+	${SETENV} ${MAKE_ENV}						\
+		${TOOL_PYTHONBIN} ./x.py test -j ${_MAKE_JOBS_N}
+
+do-install:
+	${RUN}${_ULIMIT_CMD}						\
+	cd ${WRKSRC} &&							\
+	${SETENV} ${MAKE_ENV} ${INSTALL_ENV} 				\
+		${TOOL_PYTHONBIN} ./x.py install -j ${_MAKE_JOBS_N}
+.if ${OPSYS} == "Darwin"
+	cd ${DESTDIR}${PREFIX}/lib && \
+	for lib in rustlib/*/lib/lib*.${SHLIB_EXT}; do \
+		install_name_tool -id ${PREFIX}/lib/$${lib##*/} $${lib}; \
+		${LN} -f $${lib} $${lib##*/}; \
+	done
+.endif
+
+.if ${MACHINE_PLATFORM:MNetBSD-*-i386}
+USE_TOOLS+=	paxctl
+# Turn off address space layout randomization
+# so that we can build firefox natively:
+post-install:
+	${TOOLS_PLATFORM.paxctl} +a ${DESTDIR}${PREFIX}/bin/rustc
+.endif
+
+SUBST_CLASSES+=		destdir
+SUBST_STAGE.destdir=	post-install
+SUBST_FILES.destdir=	${DESTDIR}${PREFIX}/lib/rustlib/manifest-*
+SUBST_SED.destdir=	-e 's|file:${DESTDIR}${PREFIX}|file:${PREFIX}|'
+
+GENERATE_PLIST+=	${FIND} ${DESTDIR}${PREFIX} \( -type f -o -type l \) -print | \
+			${SED} -e 's,${DESTDIR}${PREFIX}/,,' | ${SORT} ;
+
+# Create a relocatable stage2 bootstrap from the bits we just built that can be
+# used to build the next version of rust.  Currently only tested on SmartOS.
+#
+# Use the alternate BOOTSTRAP_NAME when creating a nightly release.
+#
+#BOOTSTRAP_NAME=	${PKGNAME_NOREV:C/rust/rust-nightly/}-${RUST_ARCH}
+BOOTSTRAP_NAME=		${PKGNAME_NOREV}-${RUST_ARCH}
+BOOTSTRAP_TMPDIR=	${WRKDIR}/${BOOTSTRAP_NAME}
+USE_TOOLS+=		gtar
+
+# The NetBSD part is so far untested, because I could not convince
+# the rust build to use the gcc wrapper when building natively,
+# so that I could get a placeholder in the RPATH, because chrpath
+# cannot extend the length of the RPATH...
+ELFEDIT?=	/usr/bin/elfedit
+
+.PHONY: stage0-bootstrap
+stage0-bootstrap: install
+	${RM} -rf ${BOOTSTRAP_TMPDIR}
+	${MKDIR} ${BOOTSTRAP_TMPDIR}
+.if ${OPSYS} == "NetBSD"
+	(cd ${BOOTSTRAP_TMPDIR}; \
+	DISTDIR=${WRKSRC}/bild/dist; \
+	VER_ARCH=${PKGVERSION}-${RUST_ARCH}; \
+	RUSTC=rustc-$${VER_ARCH}; \
+	RUSTC_FILE=$${RUSTC}.tar.gz; \
+	RUST_STD=rust-std-$${VER_ARCH}; \
+	RUST_STD_FILE=$${RUST_STD}.tar.gz; \
+	${GTAR} -xzf $${DISTDIR}/$${RUSTC_FILE}; \
+		(cd ${RUSTC}; \
+	RPATH='/usr/pkg/lib:/lib:/usr/lib:$$ORIGIN/../lib'; \
+	for f in rls-preview/bin/rls rustc/bin/rustc rustc/bin/rustdoc; do \
+		chrpath -r $$RPATH $$f; \
+	done; \
+	RPATH='/usr/pkg/lib:/lib:/usr/lib:$$ORIGIN'; \
+	for f in rustc/lib/*.so*; do \
+		chrpath -r $$RPATH $$f; \
+	done; \
+	RPATH='/usr/pkg/lib:/lib:/usr/lib:$$ORIGIN:$$ORIGIN/../../..'; \
+	for f in rustc/lib/rustlib/*/*/*.so*; do \
+		chrpath -r $$RPATH $$f; \
+	done;); \
+	${GTAR} -czf $${RUSTC_FILE} $${RUSTC}; \
+	${CP} $${DISTDIR}/$${RUST_STD_FILE} .; \
+	${ECHO} "Fixed stage0 bootstrap in ${BOOTSTRAP_TMPDIR}:"; \
+	${ECHO} "$${RUSTC_FILE}"; \
+	${ECHO} "$${RUST_STD_FILE}"; \
+	)
+.endif
+.if ${OS_VARIANT} == "SmartOS"
+	${CP} -R ${DESTDIR}${PREFIX}/bin ${BOOTSTRAP_TMPDIR}/
+	${CP} -R ${DESTDIR}${PREFIX}/lib ${BOOTSTRAP_TMPDIR}/
+	${MKDIR} ${BOOTSTRAP_TMPDIR}/lib/pkgsrc
+	set -e; \
+	for lib in libgcc_s.so.1 libstdc++.so.6; do \
+		${CP} `${PKG_CC} -print-file-name=$${lib}` \
+		    ${BOOTSTRAP_TMPDIR}/lib/pkgsrc/; \
+	done; \
+	for lib in libLLVM.so.21.1 libcrypto.so.3 libcurl.so.4 \
+		   libssl.so.3 libz.so.1 libzstd.so.1; do \
+		${CP} ${PREFIX}/lib/$${lib} ${BOOTSTRAP_TMPDIR}/lib/pkgsrc/; \
+	done; \
+	for lib in libiconv.so.2 libidn2.so.0 libintl.so.8 liblber.so.2 \
+		   libldap.so.2 liblzma.so.5 libnghttp2.so.14 libsasl2.so.3 \
+		   libssh2.so.1 libunistring.so.5 libxml2.so.16; do \
+		${CP} ${PREFIX}/lib/$${lib} ${BOOTSTRAP_TMPDIR}/lib/pkgsrc/; \
+	done; \
+	for f in ${BOOTSTRAP_TMPDIR}/bin/*; do \
+		/bin/file -b "$$f" | grep ^ELF >/dev/null || continue; \
+		${ELFEDIT} -e 'dyn:runpath $$ORIGIN/../lib:$$ORIGIN/../lib/pkgsrc' $$f; \
+	done; \
+	for f in ${BOOTSTRAP_TMPDIR}/lib/pkgsrc/*.so*; do \
+		${ELFEDIT} -e 'dyn:runpath $$ORIGIN' $$f; \
+	done; \
+	for f in ${BOOTSTRAP_TMPDIR}/lib/*.so*; do \
+		${ELFEDIT} -e 'dyn:runpath $$ORIGIN:$$ORIGIN/pkgsrc' $$f; \
+	done; \
+	for f in ${BOOTSTRAP_TMPDIR}/lib/rustlib/*/*/*.so* \
+		 ${BOOTSTRAP_TMPDIR}/lib/rustlib/*/bin/* \
+		 ${BOOTSTRAP_TMPDIR}/lib/rustlib/*/bin/*/*; do \
+		/bin/file -b "$$f" | grep ^ELF >/dev/null || continue; \
+		${ELFEDIT} -e 'dyn:runpath $$ORIGIN:$$ORIGIN/../../..:$$ORIGIN/../../../pkgsrc' $$f; \
+	done; \
+	cd ${WRKDIR}; ${GTAR} -zcf ${BOOTSTRAP_NAME}.tar.gz ${BOOTSTRAP_NAME}
+	@${ECHO} ""
+	@${ECHO} "Verify correct library paths using the following:"
+	@${ECHO} ""
+	@${ECHO} "	cd ${BOOTSTRAP_TMPDIR}"
+	@${ECHO} "	find . -type f | xargs ldd 2>/dev/null | egrep 'not.found|${PREFIX}'"
+	@${ECHO} ""
+	@${ECHO} "If there is no output then this bootstrap kit is ready to go:"
+	@${ECHO} ""
+	@${ECHO} "	${WRKDIR}/${BOOTSTRAP_NAME}.tar.gz"
+	@${ECHO} ""
+.endif
+
+.include "options.mk"
+
+# These dependencies currently use the bundled sources as they require
+# development features not yet available in released versions.
+#
+#.include "../../devel/libgit2/buildlink3.mk"
+#.include "../../security/libssh2/buildlink3.mk"
+#.include "../../www/http-parser/buildlink3.mk"
+#.include "../../devel/jemalloc/buildlink3.mk"
+
+## Issues specific to: bootstrap AND NetBSD follow
+
+.include "../../mk/atomic64.mk"
+# This is for when we build natively:
+.if ${MACHINE_PLATFORM:MNetBSD-*-powerpc} || \
+    ${MACHINE_PLATFORM:MNetBSD-*-i386} || \
+    ${MACHINE_PLATFORM:MNetBSD-*-mipsel} || \
+    ${MACHINE_PLATFORM:MNetBSD-*-riscv64}
+# Make libatomic library available via a unique directory:
+DEPENDS+=	libatomic-links>=0:../../devel/libatomic-links
+.endif
+
+TOOL_DEPENDS+=	cmake-[0-9]*:../../devel/cmake
+
+.include "../../devel/zlib/buildlink3.mk"
+.include "../../lang/python/tool.mk"
+.include "../../lang/python/application.mk"
+.include "../../mk/bsd.pkg.mk"
diff --git a/rust197/README.md b/rust197/README.md
new file mode 100644
index 0000000000..95f9fe6393
--- /dev/null
+++ b/rust197/README.md
@@ -0,0 +1,38 @@
+# Rust Maintenance Plan
+
+$NetBSD: README.md,v 1.1 2023/10/23 17:10:23 gdt Exp $
+
+This file describes a plan for maintaining rust.  It's logically like
+comments in the Makefile.
+
+# Plan
+
+Generally, pkgsrc will update to each minor version (1.x) of rust in
+sequence, to enable people to bisect if they have to, and to reduce
+pain towards a future, even if theoretical, get-well plan for perhaps
+reproducible and from-source build chains.  (It might be that a
+version is only in for a few days.)
+
+pkgsrc will in general update rust and rust-bin at the same time.
+
+There will be platforms where rust or rust-bin won't work, because
+forward progress and no lossage are obviously incompatible in
+practice, at least for now.  We (currently, will evolve) insist on
+x86, i386, aarch64, earmv7hf-el working, would really like to see
+sparc64 and earmv7hf-el, and hope for powerpc, riscv64, mipsel.  See
+https://cdn.netbsd.org/pub/pkgsrc/distfiles/LOCAL_PORTS/rust/
+for status.
+
+We will try to stage each update in wip, so that people can test
+before it is committed.  These will be wip/rust1NN and wip/rust1NN-bin,
+so that N and N+1 can coexist if the 2nd version is being packaged
+before pkgsrc is updated to the first.
+
+
+# Goals
+
+We will attempt to document the bootstrap process such that people who
+are not rust experts but have the hardware (or have set up an
+
+Document the testing plan.  Attempt to minimize work while maximizing
+safety.
diff --git a/rust197/buildlink3.mk b/rust197/buildlink3.mk
new file mode 100644
index 0000000000..485765e95e
--- /dev/null
+++ b/rust197/buildlink3.mk
@@ -0,0 +1,28 @@
+# $NetBSD: buildlink3.mk,v 1.19 2026/04/02 19:06:34 wiz Exp $
+
+BUILDLINK_TREE+=	rust
+
+#
+# DO NOT include this directly! Use rust.mk instead.
+#
+
+.if !defined(RUST_BUILDLINK3_MK)
+RUST_BUILDLINK3_MK:=
+
+BUILDLINK_API_DEPENDS.rust+=	rust>=1.85.0
+BUILDLINK_PKGSRCDIR.rust?=	../../lang/rust
+BUILDLINK_PASSTHRU_DIRS+=	${PREFIX}/lib/rustlib
+
+.include "../../mk/bsd.fast.prefs.mk"
+
+pkgbase:= rust
+.include "../../mk/pkg-build-options.mk"
+# XXX: unclear why this is necessary, but is actively harmful on Darwin, and
+# likely broken for most uses anyway as rust defaults to DEPMETHOD=build.
+.if empty(PKG_BUILD_OPTIONS.rust:Mrust-internal-llvm) && ${OPSYS} != "Darwin"
+.  include "../../lang/libunwind/buildlink3.mk"
+.endif
+
+.endif
+
+BUILDLINK_TREE+=	-rust
diff --git a/rust197/cargo.mk b/rust197/cargo.mk
new file mode 100644
index 0000000000..dac26e10bb
--- /dev/null
+++ b/rust197/cargo.mk
@@ -0,0 +1,140 @@
+# $NetBSD: cargo.mk,v 1.47 2026/06/03 09:06:11 adam Exp $
+#
+# Common logic that can be used by packages that depend on cargo crates
+# from crates.io. This lets existing pkgsrc infrastructure fetch and verify
+# cargo crates instead of using the rust package manager in the build phase.
+# Inspired by cargo.mk from FreeBSD ports.
+#
+# Usage example:
+#
+# CARGO_CRATE_DEPENDS+=	sha1-0.20
+# .include "../../lang/rust/cargo.mk"
+#
+# If modifying the list of dependencies, re-run the build once without
+# --offline in CARGO_ARGS to generate a new valid Cargo.lock.
+# e.g: make CARGO_ARGS="build --release" build
+#
+# a list of CARGO_CRATE_DEPENDS can be generated via
+#      make print-cargo-depends > cargo-depends.mk
+#
+# See also www/geckodriver for a full example.
+#
+# Some dependencies are pulled in from git repositories directly (not
+# using crates.io). You can define CARGO_GITHUB_CRATES for
+# those. Every entry in CARGO_GITHUB_CRATES consists of three parts
+# ("user", "name", "hash") separated by spaces, where "user" is the
+# github user account (first part of the github URL), "name" is the
+# github project name (second part of the github URL) and "hash" is
+# the git revision to fetch. For example:
+#
+# CARGO_GITHUB_CRATES=	foo bar 12345
+#
+# will fetch https://github.com/foo/bar/ revision 12345
+
+MASTER_SITES?=	${MASTER_SITE_CRATESIO}${PKGBASE}/
+
+CHECK_SSP_SUPPORTED=	no
+
+.include "../../lang/rust/rust.mk"
+
+USE_TOOLS+=		bsdtar digest
+CARGO_VENDOR_DIR=	${WRKDIR}/vendor
+CARGO_WRKSRC?=		${WRKSRC}
+
+# TODO: some Cargo.lock files include git+https sources which need to be fetched from the URL (not necessarily resolving to a crate.io url)
+DISTFILES?=			${DEFAULT_DISTFILES}
+
+.if defined(CARGO_GITHUB_CRATES)
+SUBST_CLASSES+=			gitcrate
+SUBST_FILES.gitcrate+=		Cargo.toml
+SUBST_MESSAGE.gitcrate=		Replacing github crate path with local path.
+SUBST_STAGE.gitcrate=		pre-configure
+.  for user name hash in ${CARGO_GITHUB_CRATES}
+DISTFILES+=			${name}-${hash}.tar.gz
+SITES.${name}-${hash}.tar.gz+=	-${MASTER_SITE_GITHUB:=${user}/}${name}/archive/${hash}.tar.gz
+SUBST_SED.gitcrate+=		-E -e 's!git.*github.com/${user}/${name}.*${hash}(.)!path = \1../${name}-${hash}\1!'
+.  endfor
+.endif
+
+.for crate in ${CARGO_CRATE_DEPENDS}
+DISTFILES+=			${crate}.crate
+SITES.${crate}.crate+=		-${MASTER_SITE_CRATESIO}${crate:C/-[0-9]+\.[0-9.]+.*$//}/${crate}.crate
+EXTRACT_DIR.${crate}.crate?=	${CARGO_VENDOR_DIR}
+.endfor
+
+.include "../../mk/bsd.prefs.mk"
+# Triggers NetBSD ld.so bug (PR toolchain/54192)
+# See Makefile for further information.
+.if ${OPSYS} == "NetBSD" && ${OPSYS_VERSION} < 099957
+MAKE_JOBS_SAFE=	no
+.endif
+
+post-extract: cargo-vendor-crates
+.PHONY: cargo-vendor-crates
+cargo-vendor-crates:
+	@${STEP_MSG} "Extracting local cargo crates"
+	${RUN}${MKDIR} ${WRKDIR}/.cargo
+	${RUN}${PRINTF} "[source.crates-io]\nreplace-with = \"vendored-sources\"\n[source.vendored-sources]\ndirectory = \"${CARGO_VENDOR_DIR}\"\n" > ${WRKDIR}/.cargo/config.toml
+	${RUN}${MKDIR} ${CARGO_VENDOR_DIR}
+.for crate in ${CARGO_CRATE_DEPENDS}
+	${RUN}${PRINTF} '{"package":"%s","files":{}}'	\
+	  `${DIGEST} sha256 < ${_DISTDIR}/${crate}.crate` \
+	  > ${CARGO_VENDOR_DIR}/${crate}/.cargo-checksum.json
+.endfor
+
+# Legacy name
+.PHONY: show-cargo-depends
+show-cargo-depends: print-cargo-depends
+
+.PHONY: print-cargo-depends
+print-cargo-depends:
+	${RUN}${AWK} 'BEGIN {print "# $$Net" "BSD$$"; print;}		\
+		/^name = / { split($$3, a, "\""); name=a[2]; }		\
+		/^version = / { split($$3, a, "\""); vers=a[2]; }	\
+		/^source = / {						\
+			print "CARGO_CRATE_DEPENDS+=\t" name "-" vers;	\
+			}' ${CARGO_WRKSRC}/Cargo.lock
+
+.if ${RUST_TYPE} == "native"
+CARGO=			cargo
+.else
+CARGO=			${PREFIX}/bin/cargo
+.endif
+DEFAULT_CARGO_ARGS=	--offline -j${_MAKE_JOBS_N}	\
+			  ${CARGO_NO_DEFAULT_FEATURES:M[yY][eE][sS]:C/[yY][eE][sS]/--no-default-features/}	\
+			  ${CARGO_FEATURES:C/.*/--features/W}	\
+			  ${CARGO_FEATURES:S/ /,/Wg}
+CARGO_ARGS?=		build --release ${DEFAULT_CARGO_ARGS}
+CARGO_INSTALL_ARGS?=	install --path . --root ${DESTDIR}${PREFIX} ${DEFAULT_CARGO_ARGS}
+
+MAKE_ENV+=		RUSTFLAGS=${RUSTFLAGS:Q}
+ALL_ENV+=		CARGO_HOME=${WRKDIR}
+
+.if !target(do-build)
+do-build: do-cargo-build
+.endif
+
+.PHONY: do-cargo-build
+do-cargo-build:
+	${RUN} cd ${CARGO_WRKSRC} && ${SETENV} ${MAKE_ENV} ${CARGO} ${CARGO_ARGS}
+
+.if !target(do-install) && ${GNU_CONFIGURE:Uno:tl} == no
+do-install: do-cargo-install
+.endif
+
+.PHONY: do-cargo-install
+do-cargo-install:
+	${RUN} cd ${CARGO_WRKSRC} && ${SETENV} ${MAKE_ENV} ${CARGO} ${CARGO_INSTALL_ARGS}
+	# remove files cargo uses for tracking installations
+	${RM} -f ${DESTDIR}${PREFIX}/.crates.toml
+	${RM} -f ${DESTDIR}${PREFIX}/.crates2.json
+
+.if ${OPSYS} == "Darwin"
+.PHONY: do-cargo-post-install-darwin-fix-rpath
+post-install: do-cargo-post-install-darwin-fix-rpath
+do-cargo-post-install-darwin-fix-rpath:
+	${RUN} cd ${DESTDIR};								\
+	for i in $$(${FIND} .${PREFIX}/lib -name '*.so' | ${SED} -e 's|^\./||'); do	\
+	  install_name_tool -id /$$i $$i;						\
+	done
+.endif
diff --git a/rust197/cross.mk b/rust197/cross.mk
new file mode 100644
index 0000000000..3ccdc3e35b
--- /dev/null
+++ b/rust197/cross.mk
@@ -0,0 +1,86 @@
+# $NetBSD: cross.mk,v 1.16 2026/04/02 19:06:34 wiz Exp $
+
+# These settings may be used to cross-build rust.
+#
+# They interact with the files/gcc-wrap script to pick the
+# right compiler for the different phases of the build, and
+# use the headers for the target when required.  Note that the
+# cross-root tree will need to have the required binary packages
+# installed (curl etc., see list of buildlink3.mk includes in main
+# Makefile).
+
+# The gcc-wrap / c++-wrap script takes CROSS_ROOT environment variable
+# to do a cross-build.  The wrapper script assumes dest/ and tools/
+# as a result of a cross-build of NetBSD as subdirectories of this root
+#CROSS_ROOT=		/u/evbarm-armv7hf
+#CROSS_ROOT=		/u/evbarm-armv7hf-10.0
+#CROSS_ROOT=		/u/evbarm-armv6hf
+#CROSS_ROOT=		/u/sparc64
+#CROSS_ROOT=		/u/macppc
+#CROSS_ROOT=		/u/evbarm64
+#CROSS_ROOT=		/u/evbarm64eb
+#CROSS_ROOT=		/u/i386
+#CROSS_ROOT=		/u/mipsel
+#CROSS_ROOT=		/u/riscv64
+#CROSS_ROOT=		/u/m68k
+#CROSS_ROOT=		/
+#MAKE_ENV+=		CROSS_ROOT=${CROSS_ROOT}
+
+# The GNU cross target designation
+#GNU_CROSS_TARGET=	armv7--netbsdelf-eabihf
+#GNU_CROSS_TARGET=	armv6--netbsdelf-eabihf
+#GNU_CROSS_TARGET=	sparc64--netbsd
+#GNU_CROSS_TARGET=	powerpc--netbsd
+#GNU_CROSS_TARGET=	aarch64--netbsd
+#GNU_CROSS_TARGET=	aarch64_be--netbsd
+#GNU_CROSS_TARGET=	i486--netbsdelf
+#GNU_CROSS_TARGET=	mipsel--netbsd
+#GNU_CROSS_TARGET=	riscv64--netbsd
+#GNU_CROSS_TARGET=	m68k--netbsdelf
+#MAKE_ENV+=		GNU_CROSS_TARGET=${GNU_CROSS_TARGET}
+
+# To cross-build rust, you need to specify
+# the ultimate target to built for, as well as the
+# host the compiler is supposed to run on.
+# Rust's target designation
+#TARGET=		armv7-unknown-netbsd-eabihf
+#TARGET=		armv6-unknown-netbsd-eabihf
+#TARGET=		sparc64-unknown-netbsd
+#TARGET=		powerpc-unknown-netbsd
+#TARGET=		aarch64-unknown-netbsd
+#TARGET=		aarch64_be-unknown-netbsd
+#TARGET=		i686-unknown-netbsd
+#TARGET=		i586-unknown-netbsd
+#TARGET=		mipsel-unknown-netbsd
+#TARGET=		riscv64gc-unknown-netbsd
+#TARGET=		m68k-unknown-netbsd
+#
+#SCRIPTS=		${WRKDIR}/scripts
+#CONFIGURE_ARGS+=	--host=${TARGET}
+#CONFIGURE_ARGS+=	--target=${TARGET}
+#CONFIGURE_ARGS+=	--set=target.${TARGET}.cc=${SCRIPTS}/gcc-wrap
+#CONFIGURE_ARGS+=	--set=target.${TARGET}.cxx=${SCRIPTS}/c++-wrap
+#CONFIGURE_ARGS+=	--set=target.${TARGET}.linker=${SCRIPTS}/gcc-wrap
+# Pick one:
+#CONFIGURE_ARGS+=	--set=target.${TARGET}.ar=${CROSS_ROOT}/tools/bin/${GNU_CROSS_TARGET}-ar
+#CONFIGURE_ARGS+=	--set=target.${TARGET}.ar=${SCRIPTS}/ar-wrap
+
+# May be required when cross-building on NetBSD
+#MAKE_ENV+=		OPENSSL_DIR=/usr
+
+#
+# Cross-compile illumos target.  The host is identical, it's just the target
+# that is renamed from x86_64-sun-solaris to x86_64-unknown-illumos.
+#
+#TARGET=		x86_64-unknown-illumos
+#
+# Use these variables for "cross-compiling" from x86_64-sun-solaris.
+#
+#CONFIGURE_ARGS+=	--set=target.${TARGET}.llvm-config=${LLVM_CONFIG_PATH}
+#CONFIGURE_ARGS+=	--host=${TARGET}
+#CONFIGURE_ARGS+=	--target=${TARGET}
+#
+# Set this variable when using a native x86_64-unknown-illumos bootstrap, as
+# the build still defaults to x86_64-sun-solaris based on uname.
+#
+#CONFIGURE_ARGS+=	--build=${TARGET}
diff --git a/rust197/distinfo b/rust197/distinfo
new file mode 100644
index 0000000000..de8313ba2d
--- /dev/null
+++ b/rust197/distinfo
@@ -0,0 +1,195 @@
+$NetBSD: distinfo,v 1.199 2026/05/14 14:37:35 jperkin Exp $
+
+BLAKE2s (rust-1.96.1-aarch64-apple-darwin.tar.gz) = 9fabc760c93a472096726553ab53aabf4deaa9c26ec9a284b0a7240a56ae00ce
+SHA512 (rust-1.96.1-aarch64-apple-darwin.tar.gz) = 409edf8739c44d34daa4e234f63ecaf0cfffcc6eaec3a544fe6cc7df371aa732cf80eac33bd74e9def9271f6d5b279d883a3c5075817146801e5a4bf9ebd69e0
+Size (rust-1.96.1-aarch64-apple-darwin.tar.gz) = 394492145 bytes
+BLAKE2s (rust-1.96.1-aarch64-unknown-linux-gnu.tar.gz) = 23983ee118e02ad996cc155773e753eacb0813089ac84a614191c4c7b3db799a
+SHA512 (rust-1.96.1-aarch64-unknown-linux-gnu.tar.gz) = b942c3804c3eb92438afef5476f59381b65ed6f7e6763c7411f3272d5a0de0e7fa2f95eadd950193429f32e6a34571525bd9d6cf4b3742abadc5c12fb1328345
+Size (rust-1.96.1-aarch64-unknown-linux-gnu.tar.gz) = 325278254 bytes
+BLAKE2s (rust-1.96.1-aarch64-unknown-netbsd.tar.xz) = 86ba8869f2ccc7bea106a026109cf5c65c64380a06c6fc37fe001c99ea4b3349
+SHA512 (rust-1.96.1-aarch64-unknown-netbsd.tar.xz) = e6b216201e5ba8cfe328481bcc010f39d0e01d037fa1db4794d4d679da6230731689c7a9ca0fd39c620d53e43076d986be289d58315bffa89c1d8ec71f4f1be8
+Size (rust-1.96.1-aarch64-unknown-netbsd.tar.xz) = 210812444 bytes
+BLAKE2s (rust-1.96.1-aarch64_be-unknown-netbsd.tar.xz) = fadcd062b956a2dd5dc68d56d31606ad56c8e0b78015c23e237b67c20aef4bf0
+SHA512 (rust-1.96.1-aarch64_be-unknown-netbsd.tar.xz) = 00efb2d746919292dc5253c1058e8c792e966e82f26da37eb1fc59b27f83a56d551c61aaaf25b338ed9ee3555b60d080daca5e24f411303f01ababc9bb8bdd63
+Size (rust-1.96.1-aarch64_be-unknown-netbsd.tar.xz) = 209569480 bytes
+BLAKE2s (rust-1.96.1-arm-unknown-linux-gnueabihf.tar.gz) = 276d880f27fc27d00c70899e6ebbcf3bfe4a9bbc030048a51def0a855d052923
+SHA512 (rust-1.96.1-arm-unknown-linux-gnueabihf.tar.gz) = 922ebd65827074b22d814eb56a8c40364fde49ec5bf5e4bae69e516e8c99288c3f4692314f69848064e5bbd956b574f834a400ed8869e369b453ef01f339d415
+Size (rust-1.96.1-arm-unknown-linux-gnueabihf.tar.gz) = 448856602 bytes
+BLAKE2s (rust-1.96.1-armv6-unknown-netbsd-eabihf.tar.xz) = da6a3790825e4c697b1bd5adc3cf9c30442cc332da8ad9b6030ef07074c3484e
+SHA512 (rust-1.96.1-armv6-unknown-netbsd-eabihf.tar.xz) = 5a9c0d117476b63b4f7c1fabfb3ff9806d45533f1c7684c2fa7a60e5b8189b7fb04d79ffab34b28b5851774bfe63bbdba631b993636e171bdd82356ca8039228
+Size (rust-1.96.1-armv6-unknown-netbsd-eabihf.tar.xz) = 169207076 bytes
+BLAKE2s (rust-1.96.1-armv7-unknown-linux-gnueabihf.tar.gz) = da44cb2869d3d3acf40a8b374758c2cead75e0eadedfbd1820a62dcfff8cfb8f
+SHA512 (rust-1.96.1-armv7-unknown-linux-gnueabihf.tar.gz) = e437df3a21641254d40da0d64399c1e18aefba53328e50fd77d961a9e351757cc2c00f9c269ef3261f49b2839c4942356e90ba058e5a413595705b646082e776
+Size (rust-1.96.1-armv7-unknown-linux-gnueabihf.tar.gz) = 433210835 bytes
+BLAKE2s (rust-1.96.1-armv7-unknown-netbsd-eabihf.tar.xz) = 7010831148d1b08e44dccc844413ac99e307ae6561c127354e09699ddd2fa84d
+SHA512 (rust-1.96.1-armv7-unknown-netbsd-eabihf.tar.xz) = 624b2ad4dd1168fbf280fbbda5c7dacaba3b543b20f68f97ff7fc626da089430c63335caa054d1f2a4802e3a4a3b18e91e69743ddd9d01357037c2a7204c1b13
+Size (rust-1.96.1-armv7-unknown-netbsd-eabihf.tar.xz) = 171956824 bytes
+BLAKE2s (rust-1.96.1-i586-unknown-netbsd.tar.xz) = 9ab4c74e7bbf1c5f1be965227a556ddc6ba027f63b760eef43dabbb551128f81
+SHA512 (rust-1.96.1-i586-unknown-netbsd.tar.xz) = 35f004fe365ef5405e700e068db84e0c7775cf7e4dae408da34c17e5a8bbc23ad0a156859dc611267de526284feb3c893d1512a52c14d374f554b550127c2359
+Size (rust-1.96.1-i586-unknown-netbsd.tar.xz) = 231718512 bytes
+BLAKE2s (rust-1.96.1-i686-unknown-linux-gnu.tar.gz) = e76fe084568ba9987deda430a3dd12eddc1b51517784cf408f70d2692583c6c3
+SHA512 (rust-1.96.1-i686-unknown-linux-gnu.tar.gz) = c040b86e024fa22783fafd52588e8463a064d8762e59079fcdea60816dc37e815b058d5d3dabbd884726cf6369c57ca40c5e1ccce2ac030d7220b5a278690a01
+Size (rust-1.96.1-i686-unknown-linux-gnu.tar.gz) = 513568418 bytes
+BLAKE2s (rust-1.96.1-powerpc-unknown-netbsd.tar.xz) = a498cc472b88830f033fb781649fe54567ac0e7149d0efc9dc05f07bd08d2a93
+SHA512 (rust-1.96.1-powerpc-unknown-netbsd.tar.xz) = bfd7fd5a8f6468e6c47dbac9042a0050559239ca9b259dd5a02120c1105ecd4fe36f16c66113a3f03b57c01c44b889f5065d20e5d7e0688e84900d10f9286bef
+Size (rust-1.96.1-powerpc-unknown-netbsd.tar.xz) = 114810720 bytes
+BLAKE2s (rust-1.96.1-riscv64gc-unknown-netbsd.tar.xz) = c1cbe4a48c502ab151231cb774728831e9fdf548d6aed4fc6b471cb791e283fd
+SHA512 (rust-1.96.1-riscv64gc-unknown-netbsd.tar.xz) = a20801c207cc7b31010d4728ac34d1b37a5444d3b5a00aea13ce9736cc7cdc0f5cb4b10786143895e43723518c0e4b6f37305637366bb8c8ad68973f2e6fc81a
+Size (rust-1.96.1-riscv64gc-unknown-netbsd.tar.xz) = 228709128 bytes
+BLAKE2s (rust-1.96.1-sparc64-unknown-netbsd.tar.xz) = dd5d00a308d4072b8961b5e8f030e887afc9605a90bb14cc7bcb13cb7062f90e
+SHA512 (rust-1.96.1-sparc64-unknown-netbsd.tar.xz) = 1d52cf74038bf1b24d28057cf74d999accd74b1ade65a3ade4e18fd57c40357a4907a12a5f6dca16da53af34ef8d0f92dd08627663c934a573d4b1e64dd41caa
+Size (rust-1.96.1-sparc64-unknown-netbsd.tar.xz) = 206792228 bytes
+BLAKE2s (rust-1.96.1-x86_64-apple-darwin.tar.gz) = 9c618801154d5452dd27538bb05c97271edf476bf7be67558129c13c0faddd2d
+SHA512 (rust-1.96.1-x86_64-apple-darwin.tar.gz) = e675210bb203ad7a7ca27bd1f9cf7f5f55ec296dfa6e6da3cc4e472dcba7949be22d8ce98eac33659e4702e4026a4eee68c19eb36ba766d4bc0fe2f370107368
+Size (rust-1.96.1-x86_64-apple-darwin.tar.gz) = 338031166 bytes
+BLAKE2s (rust-1.96.1-x86_64-unknown-freebsd.tar.gz) = 49a8821f30acb0dda99bfff8a1c6daac86e9d261282555a366de0f6f23b51e75
+SHA512 (rust-1.96.1-x86_64-unknown-freebsd.tar.gz) = 17a113e4826d39f75d35a57eb4e12f10c9c404c21ca2162c915c5f53f66811c76699660fa7bf98505d47dc94c825aff0a4974ec9bf63cd6e8adde92ff6d0fa4d
+Size (rust-1.96.1-x86_64-unknown-freebsd.tar.gz) = 393935107 bytes
+BLAKE2s (rust-1.96.1-x86_64-unknown-illumos.tar.gz) = 7ee8f35bc316dc2e0bde75d51c52de51704f57d18fcd432c0310253390c07f02
+SHA512 (rust-1.96.1-x86_64-unknown-illumos.tar.gz) = 1c6f04d51d2877757ef61af4942f7da43fffeecd78d28d5e30b3ec525f88518680bc884a414d93f9a4391291091870261da9005f36645ad63096f455a8ddccc7
+Size (rust-1.96.1-x86_64-unknown-illumos.tar.gz) = 472217520 bytes
+BLAKE2s (rust-1.96.1-x86_64-unknown-linux-gnu.tar.gz) = 1d88b628231bd463d97681258a34ee5309a0335e3bc1bac9b20a702f19cfd746
+SHA512 (rust-1.96.1-x86_64-unknown-linux-gnu.tar.gz) = d7d950a3e2e937181cb2ee16b30a411ef657ae26aa006b5f2d92bd41bc903f5f9e42303f079540214ec19176051be15f4df05b922e313ee42c5cb584257d8774
+Size (rust-1.96.1-x86_64-unknown-linux-gnu.tar.gz) = 377140346 bytes
+BLAKE2s (rust-1.96.1-x86_64-unknown-netbsd.tar.xz) = 3c8665aa4422134955458cfe700ee2609a1b2220fb695cb57c0b9cf47da82d71
+SHA512 (rust-1.96.1-x86_64-unknown-netbsd.tar.xz) = 38790e2a6250c4ca5e7f5462d6a5d38e8461a8d505801b89f627664f3a283821c2962fb3214bc596739000d74ed8172303471557481ea12df9f39c96fd9c66bf
+Size (rust-1.96.1-x86_64-unknown-netbsd.tar.xz) = 230362120 bytes
+BLAKE2s (rust-std-1.96.1-aarch64-apple-darwin.tar.gz) = d39a8dc2560cc6e2bb77bb5e8ccea9aa521299157858463bac43b1a7644720c6
+SHA512 (rust-std-1.96.1-aarch64-apple-darwin.tar.gz) = bc3b0c5516096f5f966aefb7e0e60ba43bb53c8e5f0cc83348b1dbae9a063d2d36ea58f2b2bfbe8f8d714dfacd9abf2744685cb216815d47daec285409198478
+Size (rust-std-1.96.1-aarch64-apple-darwin.tar.gz) = 43100285 bytes
+BLAKE2s (rust-std-1.96.1-aarch64-unknown-linux-gnu.tar.gz) = e8e298dd8f948a59763200f6db4bdff6eee2e1aca73b65065fc5f229a6fc1a82
+SHA512 (rust-std-1.96.1-aarch64-unknown-linux-gnu.tar.gz) = ecbfaf23eef7fe33e96d1aecddf4bf837dcb8a0375363f15d1fecbf173a54f699ba7dd32989b2ff9141d18ddc2e2766e698d3c0e13d3b00bd4ac909dac883b19
+Size (rust-std-1.96.1-aarch64-unknown-linux-gnu.tar.gz) = 47234094 bytes
+BLAKE2s (rust-std-1.96.1-aarch64-unknown-netbsd.tar.xz) = 2bb1fb24c856f810bc19c53f037ecf1fbd0fd432e8a0269cefcb13a3e0c117b2
+SHA512 (rust-std-1.96.1-aarch64-unknown-netbsd.tar.xz) = d88d9b7f61cf8ffcd295c6ececef4a89cb198999e4f16d421d0b7822543122f6c578a541242ae76c05a35f939eb6058ee896bd9bfa0b91e56af93c579f787310
+Size (rust-std-1.96.1-aarch64-unknown-netbsd.tar.xz) = 23267500 bytes
+BLAKE2s (rust-std-1.96.1-aarch64_be-unknown-netbsd.tar.xz) = 8cac788cd16e72a02018beda626a79a1202518538784c44778292c4c20f7ba96
+SHA512 (rust-std-1.96.1-aarch64_be-unknown-netbsd.tar.xz) = 5c6bb348876b1e0b53b2bbc4152a1e59c49bd7334200882493ffb0a617d503337c46007ceadd8bf32f4b244f70f7147d3692423995e5f91763d1423aea4f332c
+Size (rust-std-1.96.1-aarch64_be-unknown-netbsd.tar.xz) = 23193852 bytes
+BLAKE2s (rust-std-1.96.1-arm-unknown-linux-gnueabihf.tar.gz) = 404bace10886005edfec09d7f464c7ad8f76a736b160c5ddef43409906edbedb
+SHA512 (rust-std-1.96.1-arm-unknown-linux-gnueabihf.tar.gz) = 71341f011558279a918c7cb033ee145aed4c6be981f22ca78b7dc0f7e8acc90bf870202849d39088629b801cc5e9280a01c0719c1d4c6b8b0b0e2214256e6b0a
+Size (rust-std-1.96.1-arm-unknown-linux-gnueabihf.tar.gz) = 38643736 bytes
+BLAKE2s (rust-std-1.96.1-armv6-unknown-netbsd-eabihf.tar.xz) = bab85417a4074fafc862c5abe28971b358bcc81b71f86082bce20842c977c01a
+SHA512 (rust-std-1.96.1-armv6-unknown-netbsd-eabihf.tar.xz) = 3be6bd3be8c536873e7708c1f22942317cf3f326bce09ee5b0c0f49c79f6e7b6e8b69ac12bef94ef29c51b3c48f58485a484c7bec232ea2f2fab5b9fa57ce7fa
+Size (rust-std-1.96.1-armv6-unknown-netbsd-eabihf.tar.xz) = 21257808 bytes
+BLAKE2s (rust-std-1.96.1-armv7-unknown-linux-gnueabihf.tar.gz) = 78b3cb00a80b7b839da8ea368bc38111ba5b834b2b657f4adec879ed026d2ef0
+SHA512 (rust-std-1.96.1-armv7-unknown-linux-gnueabihf.tar.gz) = 0f13955093652450037b7cc9a3bbad23e83b86d81145662b4dcec5e91c06850c95dccf4e2ab184d988bb68c375908ed591912ed69a6f8415fbc9c0795eae64d6
+Size (rust-std-1.96.1-armv7-unknown-linux-gnueabihf.tar.gz) = 40144103 bytes
+BLAKE2s (rust-std-1.96.1-armv7-unknown-netbsd-eabihf.tar.xz) = d8e711f8822329780dc6f5be572036c71f28902403a0071813b033d14bb1bde1
+SHA512 (rust-std-1.96.1-armv7-unknown-netbsd-eabihf.tar.xz) = 54ff507cbde4637eac96f47cb1a733e622c71ebd75a525ee348020521c643bdf3c43b7271ca65c3a4434cbaca22fd9e339a2e92836ecec2466419ab97f9654bf
+Size (rust-std-1.96.1-armv7-unknown-netbsd-eabihf.tar.xz) = 22165336 bytes
+BLAKE2s (rust-std-1.96.1-i586-unknown-netbsd.tar.xz) = f7b6722403344d0911bc87482cf5bf594a302bb346eced6047834321630005c9
+SHA512 (rust-std-1.96.1-i586-unknown-netbsd.tar.xz) = dfc443f3313d78da614c8bdd23a3e4bc93d68a44c58133d01c7d870cb55ab9e7005a663ebba10cf57d901c9a3d22cf8b40273aa5ea64052edce335f3ad7e38e0
+Size (rust-std-1.96.1-i586-unknown-netbsd.tar.xz) = 24137876 bytes
+BLAKE2s (rust-std-1.96.1-i686-unknown-linux-gnu.tar.gz) = c659b1648284b41a0f9d8ddecf5eafe621bbdf8a34496e60f1d3f256d8d9e7d8
+SHA512 (rust-std-1.96.1-i686-unknown-linux-gnu.tar.gz) = 78ccb7aebdfa4e0b0a50525760ed3d08cc4deb928c93a62b5b37a117f2c020146db4d500f57d578293b01caa0fb1dc96fe03958bf6c3ecb15e12d3192c3024ed
+Size (rust-std-1.96.1-i686-unknown-linux-gnu.tar.gz) = 43352528 bytes
+BLAKE2s (rust-std-1.96.1-powerpc-unknown-netbsd.tar.xz) = df7ac3000f9ad84fd7d023904efbaa1b0f9db20699852cc3b365807b1db513a4
+SHA512 (rust-std-1.96.1-powerpc-unknown-netbsd.tar.xz) = 1c3c4d0240d82c45c9159eaa6988a116670d494156de3de456f50623740cb8affc8f7ebcedd6be422282d7770e5ea2e5e7f8b2ef42693a11119352c79ff4caa5
+Size (rust-std-1.96.1-powerpc-unknown-netbsd.tar.xz) = 21298592 bytes
+BLAKE2s (rust-std-1.96.1-riscv64gc-unknown-netbsd.tar.xz) = 906991c1eca92f0f4beb32a639b6071f3cdb1115614ef598978cb77b619762aa
+SHA512 (rust-std-1.96.1-riscv64gc-unknown-netbsd.tar.xz) = 45eb1bf76c66e50be89ac07777498a9ce78ca1f3812643deee8f0b3c91e570bd7669fbdb352144fd50a39ba2d07573a3b9ffaee668c66364a7a57882240c21e8
+Size (rust-std-1.96.1-riscv64gc-unknown-netbsd.tar.xz) = 21508984 bytes
+BLAKE2s (rust-std-1.96.1-sparc64-unknown-netbsd.tar.xz) = 63f568e4c0f059d2af39d2be9a2319c372d4b75c4476414f314625b7d853523d
+SHA512 (rust-std-1.96.1-sparc64-unknown-netbsd.tar.xz) = c311c4028b3269e7d550724f7fb64d2cc051b009821f09fe0303df32d0fbe590beb726ef978428b587bf1e501f3b3685124b819fa6c78594f4f9439e5d04ec51
+Size (rust-std-1.96.1-sparc64-unknown-netbsd.tar.xz) = 21301376 bytes
+BLAKE2s (rust-std-1.96.1-x86_64-apple-darwin.tar.gz) = 15ef1d1c6d7bbc0a635107f6f686c66720eacd3edc5b3891c8ef42b4a0c48de2
+SHA512 (rust-std-1.96.1-x86_64-apple-darwin.tar.gz) = e593c0625a8ad7bc20937053e80ec85ce5c6ed8405fa1eacd506b9ec9cf5ecdc2f990ee8361c5fa8e12635f932c94666d1bc81e098e5c83183504ee24ffba8ff
+Size (rust-std-1.96.1-x86_64-apple-darwin.tar.gz) = 46111116 bytes
+BLAKE2s (rust-std-1.96.1-x86_64-unknown-freebsd.tar.gz) = 429b199803cf78d405664a92df34a7f0b8a19a04cc06d8ac825cf9953effc930
+SHA512 (rust-std-1.96.1-x86_64-unknown-freebsd.tar.gz) = e830328283d01e85cdd8db5ab812b487c16ecd4b6f7bb12af52d68024674950530f4d63b6b2b117b227e11f1248411a6f0402b90a84996e00ddc6748a63503fd
+Size (rust-std-1.96.1-x86_64-unknown-freebsd.tar.gz) = 46757526 bytes
+BLAKE2s (rust-std-1.96.1-x86_64-unknown-illumos.tar.gz) = 935aea15b375c6e1ae7b304a235839eef20e0ec68577267d8d1256e611331bb4
+SHA512 (rust-std-1.96.1-x86_64-unknown-illumos.tar.gz) = f46d4d6f1fbbf5971b0c88b38a5e6353542c9054878f887bda8bce6423d86992b99b5cb916830c6f025cb44dacdf512e251b57de6ba65ab4abed7f545d39170e
+Size (rust-std-1.96.1-x86_64-unknown-illumos.tar.gz) = 42782048 bytes
+BLAKE2s (rust-std-1.96.1-x86_64-unknown-linux-gnu.tar.gz) = aaf938b8ba200f319793ba118e43341bfdc4eca4a9425a284d596a90eed99f30
+SHA512 (rust-std-1.96.1-x86_64-unknown-linux-gnu.tar.gz) = 612a5f4d5517a04bea3a368e01836f92b1de4af76aa9e4388d6ffe75712687e35a1380269b5c13518482a458cfac8274594c5c205547bc88e44c43faca20851a
+Size (rust-std-1.96.1-x86_64-unknown-linux-gnu.tar.gz) = 49696207 bytes
+BLAKE2s (rust-std-1.96.1-x86_64-unknown-netbsd.tar.xz) = a9098ad64bfb411638a18c07ac6f08fe3dff91646d7bfcde5a22dc013287c1f4
+SHA512 (rust-std-1.96.1-x86_64-unknown-netbsd.tar.xz) = 72e005e7315aa12312b7d9d26116ba68fb1348bc8cbb087c9cbfd2eb1e5340ffec37a6f23a3b167c4746a2b7c98a3e78ce0b7cd6cce855025885e9381a8c5ee2
+Size (rust-std-1.96.1-x86_64-unknown-netbsd.tar.xz) = 27349356 bytes
+BLAKE2s (rustc-1.97.0-src.tar.gz) = b746a74babf009131e1f8c5fe62010d55f6c9c46ce0cdb6f8c1089abead4d273
+SHA512 (rustc-1.97.0-src.tar.gz) = afd503aa9b30acbe3378e3c81f1547d87c3d394169854a287219117dabe712e7810de76a8acf78da9f711cf353e933de167c56d1ed7d1bc1f531fd1b25d12fc0
+Size (rustc-1.97.0-src.tar.gz) = 527713347 bytes
+SHA1 (patch-compiler_rustc__codegen__ssa_src_back_linker.rs) = f6b18a54dd8c991f6304df35a59fee3d55b46ed3
+SHA1 (patch-compiler_rustc__llvm_build.rs) = 3acef995e3038a98b29b31b9bdd43286b1ac29f7
+SHA1 (patch-compiler_rustc__target_src_spec_base_netbsd.rs) = 4db00d8abecd8f343e3c22c272a8a4e1f9228532
+SHA1 (patch-compiler_rustc__target_src_spec_mod.rs) = a465dc5c8409202df63327a911b3482a0a00d166
+SHA1 (patch-compiler_rustc__target_src_spec_targets_aarch64__be__unknown__netbsd.rs) = 620eaf74c1dd030973af53dfe4f9aa998be5b123
+SHA1 (patch-compiler_rustc__target_src_spec_targets_aarch64__unknown__netbsd.rs) = 1a02f2dd61a5f9cc4be1f66ac3404c961810c731
+SHA1 (patch-compiler_rustc__target_src_spec_targets_m68k__unknown__netbsd.rs) = c23d8ac0d06f0f56b99824a77c7e5a2ce1ee35a3
+SHA1 (patch-compiler_rustc__target_src_spec_targets_mips64el__unknown__netbsd.rs) = 9445b3c05f62d612ec03ec2ed1f71df50ee8bd16
+SHA1 (patch-compiler_rustc__target_src_spec_targets_mipsel__unknown__netbsd.rs) = 650e453bbde7030490ad67c9b8d5c419a471db7a
+SHA1 (patch-library_backtrace_src_symbolize_gimli.rs) = 9d5ef634c5a454e474ea5fee76da9bb768f5b3d9
+SHA1 (patch-library_backtrace_src_symbolize_gimli_elf.rs) = 8b18e1dbde59f3e8f20e93c7669618b2c7a13294
+SHA1 (patch-src_bootstrap_bootstrap.py) = fb89adaaf01f558d636734db5d778af4a3c67fd6
+SHA1 (patch-src_bootstrap_src_core_build__steps_compile.rs) = e928203ed4734c93cc33c5a3f7879cf18dcecc83
+SHA1 (patch-src_bootstrap_src_core_build__steps_install.rs) = 5ecf4e371fa48bca72fa5b0adb55152c906bd813
+SHA1 (patch-src_bootstrap_src_core_builder_cargo.rs) = 295773b2b1c9ded25b4f4c1a9f80c75285fd807f
+SHA1 (patch-src_bootstrap_src_core_sanity.rs) = 09434fb0e7fd7e8989f4f6a1a148283a376a7a5e
+SHA1 (patch-src_bootstrap_src_lib.rs) = 735a3f6cbb3054200dd55eebce6e9acbd285f51e
+SHA1 (patch-src_llvm-project_llvm_CMakeLists.txt) = 91a46663881236016ac7db95e362232f60f7ae53
+SHA1 (patch-src_llvm-project_llvm_cmake_modules_AddLLVM.cmake) = 29438700020db4f5beaf747645ba1977f2f0865e
+SHA1 (patch-src_llvm-project_llvm_include_llvm-c_DataTypes.h) = cb011fc19957883c01725797f7c85ed1b20f96f1
+SHA1 (patch-src_llvm-project_llvm_include_llvm_Analysis_ConstantFolding.h) = 75019dcb3dbca6cda33ba329dbe483101dcf48e7
+SHA1 (patch-src_llvm-project_llvm_lib_TargetParser_TargetDataLayout.cpp) = 0e256d06d29e236a9918a951e8d4f4221d47236e
+SHA1 (patch-src_llvm-project_llvm_utils_FileCheck_FileCheck.cpp) = 2587c2f4d11ad8f75bf8a16de625135b26bacc15
+SHA1 (patch-src_tools_cargo_src_cargo_core_profiles.rs) = e1af7fde97416e0a269ee34efd37f4f47fcf7a95
+SHA1 (patch-src_tools_cargo_tests_testsuite_build.rs) = 333ec513b9b94750b2424a7c1b21c809e6ea25b8
+SHA1 (patch-src_tools_rust-installer_install-template.sh) = b31e2d8f9fa23beb5559c56de4b576f9b5e37d97
+SHA1 (patch-tests_assembly-llvm_targets_targets-elf.rs) = e92c0b7734008ccabc7b7fb8988f67192946d66d
+SHA1 (patch-vendor_crossbeam-utils-0.8.18_no__atomic.rs) = d4d9288cb199af9bc7e321fbd2b42860aed954ec
+SHA1 (patch-vendor_libc-0.2.155_src_unix_bsd_netbsdlike_netbsd_mod.rs) = 36d927a0c3fd6ef8d211da5389a981e077aedc29
+SHA1 (patch-vendor_libc-0.2.155_src_unix_solarish_mod.rs) = 97505b88875aa80fa2b5589b6090237c3786e143
+SHA1 (patch-vendor_libc-0.2.168_src_unix_bsd_netbsdlike_netbsd_mod.rs) = c5cd529719daee44aead47ffd97e682ca9d9a1ae
+SHA1 (patch-vendor_libc-0.2.168_src_unix_bsd_netbsdlike_netbsd_riscv64.rs) = acbd63b911637fef336a92169a8130133eb64c8c
+SHA1 (patch-vendor_libc-0.2.168_src_unix_solarish_mod.rs) = edbb81319e5f685fd9c2ffe94138c377855a982d
+SHA1 (patch-vendor_libc-0.2.169_src_unix_bsd_netbsdlike_netbsd_mod.rs) = 02c4efefbf1e9e1bd98eb9524515677250ae7454
+SHA1 (patch-vendor_libc-0.2.169_src_unix_bsd_netbsdlike_netbsd_riscv64.rs) = c5e1c2d896d5e9d32aeb56bc3e4d9fb26be9edf0
+SHA1 (patch-vendor_libc-0.2.169_src_unix_solarish_mod.rs) = e02c56106a092b4f2e27427ea8b5d96bf437c356
+SHA1 (patch-vendor_libc-0.2.171_src_unix_bsd_netbsdlike_netbsd_riscv64.rs) = adfc737db618e2fdbe99aafaee3e7802ee04ca26
+SHA1 (patch-vendor_libc-0.2.172_src_unix_bsd_netbsdlike_netbsd_riscv64.rs) = 3127715d2eb1e0ce148d67323b25dd0bc07b67ad
+SHA1 (patch-vendor_libc-0.2.172_src_unix_solarish_mod.rs) = 9365cab6fd25dd077ed56f6105cde22a4a3356dd
+SHA1 (patch-vendor_libc-0.2.175_src_unix_bsd_netbsdlike_netbsd_mod.rs) = e7dc8f13f851e9423f126de7ffce6de5ecb7b74a
+SHA1 (patch-vendor_libc-0.2.175_src_unix_bsd_netbsdlike_netbsd_riscv64.rs) = 866d84d8ff7740ca644fb8d63eb3289704b2746f
+SHA1 (patch-vendor_libc-0.2.177_src_unix_bsd_netbsdlike_netbsd_m68k.rs) = 1e1b495b23362c79fbceb74797a18ea7038fe2e0
+SHA1 (patch-vendor_libc-0.2.177_src_unix_bsd_netbsdlike_netbsd_mod.rs) = 4a9ba4f47ae75318862f501160c25bb4ccf7dc7d
+SHA1 (patch-vendor_libc-0.2.177_src_unix_bsd_netbsdlike_netbsd_riscv64.rs) = b2508d2e02883f69aba62e00490e2dd376ede2fd
+SHA1 (patch-vendor_libc-0.2.180_src_unix_bsd_netbsdlike_netbsd_m68k.rs) = 2aeff2a6804757ecacf3fa69c9e16bc0affb29ff
+SHA1 (patch-vendor_libc-0.2.180_src_unix_bsd_netbsdlike_netbsd_mod.rs) = 45f3b3a46fd4595ebc6e66104b35b479ddb5a0c9
+SHA1 (patch-vendor_libc-0.2.183_src_unix_bsd_netbsdlike_netbsd_m68k.rs) = d17449d53d361589f6b7fd5a6f599e613f89acbe
+SHA1 (patch-vendor_libc-0.2.183_src_unix_bsd_netbsdlike_netbsd_mod.rs) = 96933ca76be17c9d906e2cdc0bf0a87c8b3ba371
+SHA1 (patch-vendor_libc-0.2.184_src_unix_bsd_netbsdlike_netbsd_m68k.rs) = 3945c099a63e40e6f6fafc024293907c61d361af
+SHA1 (patch-vendor_libc-0.2.184_src_unix_bsd_netbsdlike_netbsd_mod.rs) = 3eb25ca7be3144f0749e856032ff1f3073f2d252
+SHA1 (patch-vendor_libc-0.2.185_src_unix_bsd_netbsdlike_netbsd_m68k.rs) = 3986649be10f92aa810c3e33010c638b7f1b4543
+SHA1 (patch-vendor_libc-0.2.185_src_unix_bsd_netbsdlike_netbsd_mod.rs) = b79d66c5cb6802d7efbd1964daf1db57b436041b
+SHA1 (patch-vendor_libc-0.2.186_src_unix_bsd_netbsdlike_netbsd_m68k.rs) = f87afd051a844b5b0a4e7a9f0b2e8904ef4e8b68
+SHA1 (patch-vendor_libc-0.2.186_src_unix_bsd_netbsdlike_netbsd_mod.rs) = df252ac69c390d1931d48f446b2b892b2c954f9e
+SHA1 (patch-vendor_line-index-0.1.2_src_lib.rs) = 30aa5c82630ea0e8969abb527c11640712efba1e
+SHA1 (patch-vendor_lzma-sys-0.1.20_config.h) = 4849052ddb2f04f539fd7060fc1b43cc3acf99c4
+SHA1 (patch-vendor_memchr-2.7.4_src_arch_aarch64_memchr.rs) = 3e17e9f068afe5e812d10bf57fd3f6d4c21baf0b
+SHA1 (patch-vendor_memchr-2.7.4_src_arch_aarch64_mod.rs) = 24bbd69c8b571e5652d5306989b6598b58ec1966
+SHA1 (patch-vendor_memchr-2.7.4_src_memchr.rs) = 4c2f4fa4911f38acd3b36c311abd14d3c9751672
+SHA1 (patch-vendor_memchr-2.7.4_src_memmem_searcher.rs) = a5038873015004ab0c8769dda84edc16a9c55f24
+SHA1 (patch-vendor_memchr-2.7.4_src_vector.rs) = 50a901d061cf58a745b0c387a1c45ff2f0c54e89
+SHA1 (patch-vendor_openssl-src-111.28.2+1.1.1w_openssl_Configurations_10-main.conf) = 8fc746574f16cd3294edce99beffc3e8c03a089b
+SHA1 (patch-vendor_openssl-src-111.28.2+1.1.1w_openssl_crypto_aria_aria.c) = 1373d2e4ab609956e0e51ca3d900861caf3ee70d
+SHA1 (patch-vendor_openssl-src-111.28.2+1.1.1w_src_lib.rs) = c3260bfdd670c31845189fcb6b4ed19385a03b2a
+SHA1 (patch-vendor_openssl-src-300.5.0+3.5.0_openssl_Configurations_10-main.conf) = 49803c889864dbeccba92095b9fa6f104ff0180a
+SHA1 (patch-vendor_openssl-src-300.5.0+3.5.0_openssl_crypto_aria_aria.c) = 895b5f4d80fb714973f6d6fb1a39d89907e4976d
+SHA1 (patch-vendor_openssl-src-300.5.0+3.5.0_src_lib.rs) = 98e99556c19c055f696f0d9bfbce4aaf207b1640
+SHA1 (patch-vendor_openssl-src-300.6.0+3.6.2_openssl_Configurations_10-main.conf) = 761bff163cf2e5d7e9afa29765276bbe10fc73be
+SHA1 (patch-vendor_openssl-src-300.6.0+3.6.2_openssl_crypto_aria_aria.c) = c5e5bd0b6c6c849b907d4c8f96813c9c8e17ff96
+SHA1 (patch-vendor_openssl-src-300.6.0+3.6.2_src_lib.rs) = 97390c320179183cdad40d5298a835ca486841ca
+SHA1 (patch-vendor_openssl-sys-0.9.107_build_find__normal.rs) = b3de2b9137882e3612291057c1b7793a27de760f
+SHA1 (patch-vendor_openssl-sys-0.9.107_build_main.rs) = 46627c013821166688d16d97f6f8ff4ccb552241
+SHA1 (patch-vendor_openssl-sys-0.9.109_build_find__normal.rs) = 96b7b6067e857ef1ef4c8b832dcbe13496e21ca4
+SHA1 (patch-vendor_openssl-sys-0.9.109_build_main.rs) = bc892cf8e13b6b8c6e30804fa41696bcedbabde3
+SHA1 (patch-vendor_openssl-sys-0.9.114_build_find__normal.rs) = 2d8918f2ceaa32438f6cdefd95e28e76be12910c
+SHA1 (patch-vendor_openssl-sys-0.9.114_build_main.rs) = db2de273c0743bc0a7e2901bb19eef5f0f6c9b27
+SHA1 (patch-vendor_openssl-sys-0.9.92_build_find__normal.rs) = 0ed143b603eea7c0bddf39e97916608c58978202
+SHA1 (patch-vendor_openssl-sys-0.9.92_build_main.rs) = 842ad74284518fbe8ff65222f7f6f81fb6381e49
+SHA1 (patch-vendor_rustc-ap-rustc__target_src_spec_aarch64__be__unknown__netbsd.rs) = 4e86aec4c89db9a331950a12f8ec7b8aaa50eed7
+SHA1 (patch-vendor_zerocopy-0.7.32_src_lib.rs) = d683e48900f427327f4ed518fe62b593e82c13d7
+SHA1 (patch-vendor_zerocopy-0.7.35_src_lib.rs) = b4b910405172f5653db4bf3286974b9410e77fab
+SHA1 (patch-vendor_zeroize-1.8.1_src_lib.rs) = 5e6c3a04e8a4974dc8427b86753bec18fa1aa5fe
diff --git a/rust197/do-cross.mk b/rust197/do-cross.mk
new file mode 100644
index 0000000000..6e5ad44c6b
--- /dev/null
+++ b/rust197/do-cross.mk
@@ -0,0 +1,117 @@
+# $NetBSD: do-cross.mk,v 1.17 2026/04/02 19:06:34 wiz Exp $
+# Do all the NetBSD cross builds
+# Collect the bootstrap kits in dist/
+
+VERSION!=	make show-var VARNAME=PKGVERSION
+V_NOREV!=	make show-var VARNAME=PKGVERSION_NOREV
+
+SHORT_TARGETS+=		armv7
+SHORT_TARGETS+=		armv6
+SHORT_TARGETS+=		sparc64
+SHORT_TARGETS+=		powerpc
+SHORT_TARGETS+=		arm64
+SHORT_TARGETS+=		arm64_be
+SHORT_TARGETS+=		i386
+SHORT_TARGETS+=		riscv64
+SHORT_TARGETS+=		mipsel	# produces mips32 (not mips1) executables
+#SHORT_TARGETS+=	m68k
+
+# Conditional local overrides of ROOT.* variables:
+.sinclude "local-roots.mk"
+
+# Root of target directories.
+# Must have dest/ (build.sh's DESTDIR) and tools/ subdirectories
+ROOT.armv7?=		/u/evbarm-armv7hf
+ROOT.armv6?=		/u/evbarm-armv6hf
+ROOT.sparc64?=		/u/sparc64
+ROOT.powerpc?=		/u/macppc
+ROOT.arm64?=		/u/evbarm64
+ROOT.arm64_be?=		/u/evbarm64eb
+ROOT.i386?=		/u/i386
+ROOT.mipsel?=		/u/mipsel
+ROOT.riscv64?=		/u/riscv64
+ROOT.m68k?=		/u/m68k
+
+# Mapping to GNU triple
+G_TGT.armv7=		armv7--netbsdelf-eabihf
+G_TGT.armv6=		armv6--netbsdelf-eabihf
+G_TGT.sparc64=		sparc64--netbsd
+G_TGT.powerpc=		powerpc--netbsd
+G_TGT.arm64=		aarch64--netbsd
+G_TGT.arm64_be=		aarch64_be--netbsd
+G_TGT.i386=		i486--netbsdelf
+G_TGT.mipsel=		mipsel--netbsd
+G_TGT.riscv64=		riscv64--netbsd
+G_TGT.m68k=		m68k--netbsdelf
+
+# Mapping to rust's TARGET specification
+TGT.armv7=		armv7-unknown-netbsd-eabihf
+TGT.armv6=		armv6-unknown-netbsd-eabihf
+TGT.sparc64=		sparc64-unknown-netbsd
+TGT.powerpc=		powerpc-unknown-netbsd
+TGT.arm64=		aarch64-unknown-netbsd
+TGT.arm64_be=		aarch64_be-unknown-netbsd
+TGT.i386=		i586-unknown-netbsd
+TGT.mipsel=		mipsel-unknown-netbsd
+TGT.riscv64=		riscv64gc-unknown-netbsd
+TGT.m68k=		m68k-unknown-netbsd
+
+# Optional target tweak for bootstrap files
+#TT.powerpc=		powerpc-unknown-netbsd90
+
+WRKDIR=		${.CURDIR}/work
+SCRIPTS=	${WRKDIR}/scripts
+
+#DEBUG=		echo
+ECHO?=		echo
+
+# Make list of make targets
+.for st in ${SHORT_TARGETS}
+MTGTS+=	do-${st}
+.endfor
+
+.PHONY:	all
+
+all: ${MTGTS}
+
+# Define the individual build targets, used above
+.for st in ${SHORT_TARGETS}
+CA.${st}=	--host=${TGT.${st}}
+CA.${st}+=	--target=${TGT.${st}}
+CA.${st}+=	--set=target.${TGT.${st}}.cc=${SCRIPTS}/gcc-wrap
+CA.${st}+=	--set=target.${TGT.${st}}.cxx=${SCRIPTS}/c++-wrap
+CA.${st}+=	--set=target.${TGT.${st}}.linker=${SCRIPTS}/gcc-wrap
+CA.${st}+=	--set=target.${TGT.${st}}.ar=${ROOT.${st}}/tools/bin/${G_TGT.${st}}-ar
+
+.PHONY:	do-${st}
+
+do-${st}:
+	mkdir -p dist
+	@${ECHO} "=======> Cross-building rust for ${st}"
+	${DEBUG} make -f Makefile clean
+	${DEBUG} env \
+		CROSS_ROOT=${ROOT.${st}} \
+		GNU_CROSS_TARGET=${G_TGT.${st}} \
+		make -f Makefile \
+			ADD_CONFIGURE_ARGS="${CA.${st}}" \
+			TARGET=${TGT.${st}}
+	if [ "${TT.${st}}" != "" ]; then \
+		TT=${TT.${st}}; \
+	else \
+		TT=${TGT.${st}}; \
+	fi; \
+	distdir=${WRKDIR}/rustc-${V_NOREV}-src/build/dist; \
+	for comp in rust rust-std; do \
+		src=$${distdir}/$${comp}-${V_NOREV}-${TGT.${st}}.tar.xz; \
+		tgt=dist/$${comp}-${VERSION}-$${TT}.tar.xz; \
+		if [ ! -f "$${tgt}" ]; then \
+			${ECHO} ln $${src} $${tgt}; \
+			${DEBUG} ln $${src} $${tgt}; \
+		fi; \
+	done; \
+	src_comp=rust-src-${V_NOREV}.tar.xz; \
+	if [ ! -f dist/$${src_comp} ]; then \
+		${ECHO} ln $${distdir}/$${src_comp} dist; \
+		${DEBUG} ln $${distdir}/$${src_comp} dist; \
+	fi
+.endfor
diff --git a/rust197/files/gcc-wrap b/rust197/files/gcc-wrap
new file mode 100644
index 0000000000..48cf4af822
--- /dev/null
+++ b/rust197/files/gcc-wrap
@@ -0,0 +1,215 @@
+#! /bin/sh
+
+# Root of targets tools + dest directories
+# or unset to default to a native build.
+
+# This script assumes target tools in $root/tools 
+# and target's destdir in $root/dest, the result of a NetBSD build.sh.
+# ...or the native root, when we don't cross-compile
+root=${CROSS_ROOT:-/}
+
+incadd=""
+native=false
+if [ $root = "/" ]; then
+	native=true
+else
+	# What's the tools/bin prefix (if we're cross-building)?
+	gnuarch=${GNU_CROSS_TARGET:?}
+
+	# A special hack for netbsd-8 targets.
+	# netbsd-8 has gcc 5.5, but llvm and rust needs >= 7
+	# so we build tools from -9, and try to use that, but
+	# then the include path becomes wrong, and <stdatomic.h>
+	# is no longer picked up automatically by the compiler
+	# from the target destination directory
+	case $gnuarch in
+		sparc64*)	incadd="-I=/usr/include/gcc-5"
+				;;
+
+				# immintrin & from gcc-5 not
+				# compatible with gcc7, apparently
+		i[3456]86*)	incadd="-I=/usr/include/gcc-7"
+				;;
+
+				# mips64 does soft-float
+		mips64*)	madd="-msoft-float"
+				;;
+		powerpc*)	# Now needed due to bloat
+				madd="-mlongcall"
+				;;
+		m68k-*)	# needed due to exceeding 16-bit offsets
+			# ref.
+			# relocation truncated to fit: R_68K_PC16 against ...
+				madd="-mlong-jump-table-offsets"
+				;;
+	esac
+	# We build both for -8 and -9 due to ABI differences,
+	# so can't just test $gnuarch...  Yes, a vile hack.
+	if [ "$root" = "/u/macppc" ]; then
+		incadd="-I=/usr/include/gcc-5"
+	fi
+fi
+
+# Who are we a wrapper for? (Typically either gcc or c++)
+who=$(basename $0 | sed -e 's/-wrap$//')
+
+args=""
+if [ ! -z "$madd" ]; then
+	args="$args $madd"
+fi
+
+# May need to add $linkadd before first -l or fist -L
+linkadd="-Wl,--sysroot=${root}/dest"
+# (perhaps this is overly cautious, other adjustments we do
+# below may be sufficient...)
+# Lib directories to ensure we search and have in run-path
+libs="/lib /usr/lib /usr/pkg/lib"
+
+for d in $libs; do
+	if ! $native; then
+		linkadd="$linkadd -L=$d"
+		linkadd="$linkadd -Wl,-rpath-link=${root}/dest/$d"
+	fi
+	# Run-path is for when we execute on the target,
+	# so no $root prefix
+	linkadd="$linkadd -Wl,-rpath,$d"
+done
+
+# ...and add a placeholder so we can tweak RPATH with chrpath,
+# since chrpath can't extend the length of the run path
+# (This may also not be needed, we use LD_LIBRARY_PATH instead)
+placeholder="placeholder-$(date | openssl dgst -sha1 | \
+	awk '{ print $2 }')"
+linkadd="$linkadd -Wl,-rpath,/$placeholder"
+# the / is a sneaky attempt to let it past cwrapper...
+
+# More debugging
+linkadd="$linkadd -Wl,--verbose"
+
+linktweaked=false
+
+# Step through args, tweak where required
+set -- "$@"
+while [ $# -gt 0 ]; do
+	case "$1" in
+# Insert = at the front of -isystem args.
+# This is to get --sysroot prepended, so that
+# we pick up the correct set of header files.
+# (I thought this wasn't reqired, but apparently it is...)
+		-isystem)
+			shift
+			case "$1" in
+			# Apparent mis-use of -isystem:
+			*/siphash/*)
+				args="$args -I $1"
+				;;
+			*)
+				args="$args -isystem =$1"
+				;;
+			esac
+			;;
+# Also doctor -I directives of known paths and
+# redirect them to the --sysroot.
+		-I/usr/include)
+			args="$args -I=/usr/include"
+			;;
+		-I/usr/include/krb5)
+			args="$args -I=/usr/include/krb5"
+			;;
+		-I/usr/pkg/include)
+# Try to drop this...
+			if ! $native; then
+				args="$args -I=/usr/pkg/include"
+			fi
+			;;
+		-I)
+			if [ $2 = "/usr/include" ]; then
+				args="$args -I=/usr/include"
+				shift
+			elif [ $2 = "/usr/include/krb5" ]; then
+				args="$args -I=/usr/include/krb5"
+				shift
+			elif [ $2 = "/usr/pkg/include" ]; then
+# Try to drop this too...
+				if ! $native; then
+					args="$args -I=/usr/pkg/include"
+				fi
+				shift
+			else
+				args="$args -I"
+			fi
+			;;
+		-l*)
+			if ! $linktweaked; then
+				args="$args $linkadd"
+				linktweaked=true
+			fi
+			args="$args $1"
+			;;
+		-L)
+			if ! $linktweaked; then
+				args="$args $linkadd"
+				linktweaked=true
+			fi
+			shift
+			tweaked=false
+			# redirect these to -Wl,--sysroot
+			for d in /lib /usr/lib /usr/pkg/lib; do
+				if [ $1 = $d ]; then
+					args="$args -L =$d"
+					tweaked=true
+				fi
+			done
+			# Not redirected?  If so we need to add
+			if ! $tweaked; then
+				args="$args -L $1"
+			fi
+			;;
+			
+		-L/lib)
+			if ! $linktweaked; then
+				args="$args $linkadd"
+				linktweaked=true
+			fi
+			args="$args -L=/lib"
+			;;
+		-L/usr/lib)
+			if ! $linktweaked; then
+				args="$args $linkadd"
+				linktweaked=true
+			fi
+			args="$args -L=/usr/lib"
+			;;
+		-L/usr/pkg/lib)
+			if ! $linktweaked; then
+				args="$args $linkadd"
+				linktweaked=true
+			fi
+			args="$args -L=/usr/pkg/lib"
+			;;
+		-Wl,--enable-new-dtags)
+			# ignore
+			;;
+		*)
+			args="$args $1"
+			;;
+	esac
+	shift
+done
+
+if $native; then
+	# Try to avoid cwrappers, which does "undocumented magic"
+	# by invoking the compiler "directly".
+	#cmd="/usr/bin/${who} $args"
+	# (however, this wrapper isn't used when buliding natively...)
+	cmd="${who} $args"
+else
+	cmd="${root}/tools/bin/${gnuarch}-${who} \
+		--sysroot=${root}/dest \
+		$incadd \
+		$args"
+fi
+
+# Cannot echo to stdout, messes up e.g. "gcc -print-prog-name=ld" output...
+#echo $cmd >> /tmp/gcc-wrap.log
+exec $cmd
diff --git a/rust197/options.mk b/rust197/options.mk
new file mode 100644
index 0000000000..ffdaf7b19a
--- /dev/null
+++ b/rust197/options.mk
@@ -0,0 +1,125 @@
+# $NetBSD: options.mk,v 1.55 2026/06/30 15:13:10 adam Exp $
+
+PKG_OPTIONS_VAR=	PKG_OPTIONS.rust
+PKG_SUPPORTED_OPTIONS+=	rust-cargo-static rust-docs rust-system-libgit2
+
+.include "../../mk/bsd.fast.prefs.mk"
+
+# The bundled LLVM current has issues building on SunOS.
+.if ${OPSYS} != "SunOS"
+PKG_SUPPORTED_OPTIONS+=		rust-internal-llvm
+# There may be compatibility issues with the base LLVM on e.g. NetBSD.
+.  if !empty(HAVE_LLVM)
+PKG_SUGGESTED_OPTIONS+=		rust-internal-llvm
+.  endif
+.endif
+
+# If cross-building, always use the internal LLVM
+.if !empty(TARGET)
+PKG_SUGGESTED_OPTIONS+=		rust-internal-llvm
+.endif
+
+PKG_OPTIONS_LEGACY_OPTS+=	rust-llvm:rust-internal-llvm
+
+# Bundle OpenSSL and curl into the cargo binary when producing
+# bootstraps on NetBSD.
+.if ${OPSYS} == "NetBSD" && ${BUILD_TARGET} == "dist"
+PKG_SUGGESTED_OPTIONS+=	rust-cargo-static
+.endif
+
+.include "../../mk/bsd.options.mk"
+
+# NetBSD/sparc64 when using the internal LLVM needs
+# to not use gcc 10.4 or 10.5 (as found in 10.0_BETA or 10.0), ref.
+# https://github.com/rust-lang/rust/issues/117231
+# (however, gcc from 9.x produces a working LLVM, go figure).
+.if ${MACHINE_PLATFORM:MNetBSD-10.*-sparc64}
+.  if !empty(PKG_OPTIONS:Mrust-internal-llvm)
+# Require GCC 12 (from pkgsrc) to correctly build the embedded LLVM (18.x).
+GCC_REQD+=	12
+.  endif
+.endif
+
+# Apparently, using pkgsrc LLVM 19.x does not work on
+# NetBSD/x86_64 9.x and NetBSD/i386 9.x unless rust is built
+# with a newer gcc than the platform-included 7.5.0.  Ref.
+# https://gnats.netbsd.org/59435 and
+# https://mail-index.netbsd.org/pkgsrc-users/2025/05/20/msg041603.html
+# and following discussion.
+.if empty(PKG_OPTIONS:Mrust-internal-llvm)
+.  if ${MACHINE_PLATFORM:MNetBSD-9.*-x86_64} || \
+      ${MACHINE_PLATFORM:MNetBSD-9.*-i386}
+GCC_REQD+=	10
+.  endif
+.endif
+
+# Fix for problem seen during rust-installer run w/rust 1.84.1 on macppc,
+# "of course" experienced near the end of the build process:
+# assertion "memcmp(mf_ptr(mf) - 1, mf_ptr(mf) - matches[i].dist - 2, matches[i].len) == 0" failed: file "xz-5.2/src/liblzma/lz/lz_encoder_mf.c", line 40, function "lzma_mf_find"
+# The above is seen with both in-tree gcc (10.5.0) and gcc12 from pkgsrc.
+.if ${MACHINE_PLATFORM:MNetBSD-*-powerpc}
+GCC_REQD+=	14
+.endif
+
+#
+# Use the internal copy of LLVM or the external one?
+#
+.if empty(PKG_OPTIONS:Mrust-internal-llvm)
+.include "../../lang/libunwind/buildlink3.mk"
+.include "../../lang/llvm/buildlink3.mk"
+CONFIGURE_ARGS+=	--enable-llvm-link-shared
+CONFIGURE_ARGS+=	--llvm-libunwind=system
+CONFIGURE_ARGS+=	--llvm-root=${BUILDLINK_PREFIX.llvm}
+# Also turn off build of the internal LLD, as the external LLVM
+# may be older (e.g., 18) than the internal LLD (now 19.x), ref.
+# https://github.com/rust-lang/rust/issues/131291
+CONFIGURE_ARGS+=	--set rust.lld=false
+.endif
+
+#
+# Use the external libgit2.
+#
+.if !empty(PKG_OPTIONS:Mrust-system-libgit2)
+.include "../../devel/libgit2/buildlink3.mk"
+CONFIGURE_ENV+=		LIBGIT2_NO_VENDOR=1
+.endif
+
+# Rust bumps into NetBSD's limit of 256 TLS keys per process, at least
+# on aarch64 with "fatal runtime error: out of TLS keys, aborting"
+# (for some incomprehensible reason this isn't triggered on NetBSD/amd64 10.1)
+.if ${MACHINE_PLATFORM:MNetBSD-*-aarch64*}
+# So try to bump that per-process limit:
+MAKE_ENV+=		PTHREAD_KEYS_MAX=512
+.endif
+
+#
+# Link cargo statically against "native" libraries.
+# (openssl and curl specifically).
+#
+.if !empty(PKG_OPTIONS:Mrust-cargo-static)
+CONFIGURE_ARGS+=	--enable-cargo-native-static
+.else
+BUILDLINK_API_DEPENDS.nghttp2+= nghttp2>=1.41.0
+BUILDLINK_API_DEPENDS.curl+= 	curl>=7.67.0
+.include "../../www/curl/buildlink3.mk"
+.include "../../security/openssl/buildlink3.mk"
+.endif
+
+# Work around https://github.com/rust-lang/rust/issues/148497
+# where the linking of rust-analyzer fails because it's now too big
+# for 24-bit word-based PC-relative relocation offsets.
+# Apply on or for powerpc:
+.if ${MACHINE_PLATFORM:MNetBSD-*-powerpc} || \
+    (!empty(TARGET) && ${TARGET:Mpowerpc-*})
+CONFIGURE_ARGS+=	--tools="cargo,clippy,rustdoc,rustfmt,analysis,src,wasm-component-ld"
+# rust-analyzer dropped from list
+.endif
+
+#
+# Install documentation.
+#
+.if !empty(PKG_OPTIONS:Mrust-docs)
+CONFIGURE_ARGS+=	--enable-docs
+.else
+CONFIGURE_ARGS+=	--disable-docs
+.endif
diff --git a/rust197/patches/patch-compiler_rustc__codegen__ssa_src_back_linker.rs b/rust197/patches/patch-compiler_rustc__codegen__ssa_src_back_linker.rs
new file mode 100644
index 0000000000..871c27f06e
--- /dev/null
+++ b/rust197/patches/patch-compiler_rustc__codegen__ssa_src_back_linker.rs
@@ -0,0 +1,27 @@
+$NetBSD: patch-compiler_rustc__codegen__ssa_src_back_linker.rs,v 1.22 2026/04/02 19:06:34 wiz Exp $
+
+Do not use @rpath on Darwin.
+Find external libunwind on Linux.
+
+--- compiler/rustc_codegen_ssa/src/back/linker.rs.orig	2026-01-24 10:12:53.935808570 +0000
++++ compiler/rustc_codegen_ssa/src/back/linker.rs
+@@ -454,7 +454,7 @@ impl<'a> GccLinker<'a> {
+             // principled solution at some point to force the compiler to pass
+             // the right `-Wl,-install_name` with an `@rpath` in it.
+             if self.sess.opts.cg.rpath || self.sess.opts.unstable_opts.osx_rpath_install_name {
+-                let mut rpath = OsString::from("@rpath/");
++                let mut rpath = OsString::from("@PREFIX@/lib/");
+                 rpath.push(out_filename.file_name().unwrap());
+                 self.link_arg("-install_name").link_arg(rpath);
+             }
+@@ -596,6 +596,10 @@ impl<'a> Linker for GccLinker<'a> {
+     }
+ 
+     fn link_dylib_by_name(&mut self, name: &str, verbatim: bool, as_needed: bool) {
++        if self.sess.target.llvm_target.contains("linux") && name == "unwind" {
++            self.link_arg("-R@PREFIX@/lib");
++            self.link_arg("-L@PREFIX@/lib");
++        }
+         if self.sess.target.os == Os::Illumos && name == "c" {
+             // libc will be added via late_link_args on illumos so that it will
+             // appear last in the library search order.
diff --git a/rust197/patches/patch-compiler_rustc__llvm_build.rs b/rust197/patches/patch-compiler_rustc__llvm_build.rs
new file mode 100644
index 0000000000..096133453c
--- /dev/null
+++ b/rust197/patches/patch-compiler_rustc__llvm_build.rs
@@ -0,0 +1,50 @@
+$NetBSD: patch-compiler_rustc__llvm_build.rs,v 1.20 2025/08/25 17:51:12 wiz Exp $
+
+Fix build on NetBSD HEAD-llvm. XXX there is probably a better way to do this.
+
+Pick up -latomic tweak from
+https://github.com/rust-lang/rust/issues/104220
+and
+https://github.com/rust-lang/rust/pull/104572
+
+--- compiler/rustc_llvm/build.rs.orig	2023-10-03 02:52:17.000000000 +0000
++++ compiler/rustc_llvm/build.rs
+@@ -249,6 +249,10 @@ fn main() {
+     {
+         // 32-bit targets need to link libatomic.
+         println!("cargo:rustc-link-lib=atomic");
++        if target.contains("netbsd")
++        {
++            println!("cargo:rustc-link-lib=z");
++        }
+     } else if target.contains("windows-gnu") {
+         println!("cargo:rustc-link-lib=shell32");
+         println!("cargo:rustc-link-lib=uuid");
+@@ -261,7 +265,11 @@ fn main() {
+         // On NetBSD/i386, gcc and g++ is built for i486 (to maximize backward compat)
+         // However, LLVM insists on using 64-bit atomics.
+         // This gives rise to a need to link rust itself with -latomic for these targets
+-        if target.starts_with("i586") || target.starts_with("i686") {
++        if target.starts_with("i386")
++           || target.starts_with("i486")
++           || target.starts_with("i586")
++           || target.starts_with("i686")
++        {
+             println!("cargo:rustc-link-lib=atomic");
+         }
+         println!("cargo:rustc-link-lib=z");
+@@ -352,7 +360,13 @@ fn main() {
+         "c++"
+     } else if target.contains("netbsd") && llvm_static_stdcpp.is_some() {
+         // NetBSD uses a separate library when relocation is required
+-        "stdc++_p"
++        if env::var_os("PKGSRC_HAVE_LIBCPP").is_some() {
++            "c++_pic"
++        } else {
++            "stdc++_pic"
++        }
++    } else if env::var_os("PKGSRC_HAVE_LIBCPP").is_some() {
++        "c++"
+     } else if llvm_use_libcxx.is_some() {
+         "c++"
+     } else {
diff --git a/rust197/patches/patch-compiler_rustc__target_src_spec_base_netbsd.rs b/rust197/patches/patch-compiler_rustc__target_src_spec_base_netbsd.rs
new file mode 100644
index 0000000000..122dcf7de6
--- /dev/null
+++ b/rust197/patches/patch-compiler_rustc__target_src_spec_base_netbsd.rs
@@ -0,0 +1,32 @@
+$NetBSD: patch-compiler_rustc__target_src_spec_base_netbsd.rs,v 1.7 2026/04/02 19:06:34 wiz Exp $
+
+For the benefit of powerpc, when libatomic-links is installed,
+search the directory containing the symlinks to -latomic.
+
+--- compiler/rustc_target/src/spec/base/netbsd.rs.orig	2024-01-06 19:57:14.887897867 +0000
++++ compiler/rustc_target/src/spec/base/netbsd.rs
+@@ -1,12 +1,23 @@
+-use crate::spec::{Os, RelroLevel, TargetOptions, cvs};
++use crate::spec::{Cc, Lld, LinkerFlavor, Os, RelroLevel, TargetOptions, cvs};
+ 
+ pub(crate) fn opts() -> TargetOptions {
++    let add_linker_paths =
++        &[
++            // For the benefit of powerpc, when libatomic-links is installed,
++            "-Wl,-R@PREFIX@/lib/libatomic",
++            "-Wl,-L@PREFIX@/lib/libatomic",
++        ];
++    let pre_link_args = TargetOptions::link_args(
++        LinkerFlavor::Gnu(Cc::Yes, Lld::No),
++        add_linker_paths
++    );
+     TargetOptions {
+         os: Os::NetBsd,
+         dynamic_linking: true,
+         families: cvs!["unix"],
+         no_default_libraries: false,
+         has_rpath: true,
++        pre_link_args,
+         position_independent_executables: true,
+         relro_level: RelroLevel::Full,
+         has_thread_local: true,
diff --git a/rust197/patches/patch-compiler_rustc__target_src_spec_mod.rs b/rust197/patches/patch-compiler_rustc__target_src_spec_mod.rs
new file mode 100644
index 0000000000..378fa5544a
--- /dev/null
+++ b/rust197/patches/patch-compiler_rustc__target_src_spec_mod.rs
@@ -0,0 +1,22 @@
+$NetBSD: patch-compiler_rustc__target_src_spec_mod.rs,v 1.18 2026/04/02 19:06:34 wiz Exp $
+
+Add entry for NetBSD/mips64el and NetBSD/m68k
+
+--- compiler/rustc_target/src/spec/mod.rs.orig	2026-02-11 07:30:54.000000000 +0000
++++ compiler/rustc_target/src/spec/mod.rs
+@@ -1440,6 +1440,7 @@ supported_targets! {
+     ("loongarch64-unknown-linux-musl", loongarch64_unknown_linux_musl),
+     ("m68k-unknown-linux-gnu", m68k_unknown_linux_gnu),
+     ("m68k-unknown-none-elf", m68k_unknown_none_elf),
++    ("m68k-unknown-netbsd", m68k_unknown_netbsd),
+     ("csky-unknown-linux-gnuabiv2", csky_unknown_linux_gnuabiv2),
+     ("csky-unknown-linux-gnuabiv2hf", csky_unknown_linux_gnuabiv2hf),
+     ("mips-unknown-linux-gnu", mips_unknown_linux_gnu),
+@@ -1529,6 +1530,7 @@ supported_targets! {
+     ("armv7-unknown-netbsd-eabihf", armv7_unknown_netbsd_eabihf),
+     ("i586-unknown-netbsd", i586_unknown_netbsd),
+     ("i686-unknown-netbsd", i686_unknown_netbsd),
++    ("mips64el-unknown-netbsd", mips64el_unknown_netbsd),
+     ("mipsel-unknown-netbsd", mipsel_unknown_netbsd),
+     ("powerpc-unknown-netbsd", powerpc_unknown_netbsd),
+     ("riscv64gc-unknown-netbsd", riscv64gc_unknown_netbsd),
diff --git a/rust197/patches/patch-compiler_rustc__target_src_spec_targets_aarch64__be__unknown__netbsd.rs b/rust197/patches/patch-compiler_rustc__target_src_spec_targets_aarch64__be__unknown__netbsd.rs
new file mode 100644
index 0000000000..764812dc4a
--- /dev/null
+++ b/rust197/patches/patch-compiler_rustc__target_src_spec_targets_aarch64__be__unknown__netbsd.rs
@@ -0,0 +1,17 @@
+$NetBSD: patch-compiler_rustc__target_src_spec_targets_aarch64__be__unknown__netbsd.rs,v 1.3 2025/08/25 17:51:12 wiz Exp $
+
+NetBSD aarch64 has a bug in the thread-local storage implementation,
+ref. PR#58154.  Turn it off for now.
+Ideally should check whether the version has the fix or not, but
+e.g. __NetBSD_Version__ isn't easily available here that I know...
+
+--- compiler/rustc_target/src/spec/targets/aarch64_be_unknown_netbsd.rs.orig	2024-07-23 19:21:34.344805113 +0000
++++ compiler/rustc_target/src/spec/targets/aarch64_be_unknown_netbsd.rs
+@@ -18,6 +18,7 @@ pub fn target() -> Target {
+             max_atomic_width: Some(128),
+             stack_probes: StackProbeType::Inline,
+             endian: Endian::Big,
++            has_thread_local: false, // ref. NetBSD PR#58154
+             ..base::netbsd::opts()
+         },
+     }
diff --git a/rust197/patches/patch-compiler_rustc__target_src_spec_targets_aarch64__unknown__netbsd.rs b/rust197/patches/patch-compiler_rustc__target_src_spec_targets_aarch64__unknown__netbsd.rs
new file mode 100644
index 0000000000..27ae9671f2
--- /dev/null
+++ b/rust197/patches/patch-compiler_rustc__target_src_spec_targets_aarch64__unknown__netbsd.rs
@@ -0,0 +1,17 @@
+$NetBSD: patch-compiler_rustc__target_src_spec_targets_aarch64__unknown__netbsd.rs,v 1.3 2025/08/25 17:51:12 wiz Exp $
+
+NetBSD aarch64 has a bug in the thread-local storage implementation,
+ref. PR#58154.  Turn it off for now.
+Ideally should check whether the version has the fix or not, but
+e.g. __NetBSD_Version__ isn't easily available here that I know...
+
+--- compiler/rustc_target/src/spec/targets/aarch64_unknown_netbsd.rs.orig	2024-07-23 19:18:44.116841966 +0000
++++ compiler/rustc_target/src/spec/targets/aarch64_unknown_netbsd.rs
+@@ -17,6 +17,7 @@ pub fn target() -> Target {
+             mcount: "__mcount".into(),
+             max_atomic_width: Some(128),
+             stack_probes: StackProbeType::Inline,
++            has_thread_local: false, // ref. NetBSD PR#58154
+             ..base::netbsd::opts()
+         },
+     }
diff --git a/rust197/patches/patch-compiler_rustc__target_src_spec_targets_m68k__unknown__netbsd.rs b/rust197/patches/patch-compiler_rustc__target_src_spec_targets_m68k__unknown__netbsd.rs
new file mode 100644
index 0000000000..0840603d4b
--- /dev/null
+++ b/rust197/patches/patch-compiler_rustc__target_src_spec_targets_m68k__unknown__netbsd.rs
@@ -0,0 +1,39 @@
+$NetBSD: patch-compiler_rustc__target_src_spec_targets_m68k__unknown__netbsd.rs,v 1.1 2026/04/02 19:06:34 wiz Exp $
+
+Add a target description for NetBSD/m68k.
+Align data_layout with new patch to llvm.
+
+--- /dev/null	2026-02-24 21:43:45.067063051 +0000
++++ compiler/rustc_target/src/spec/targets/m68k_unknown_netbsd.rs	2026-02-24 21:48:57.106967890 +0000
+@@ -0,0 +1,31 @@
++use rustc_abi::Endian;
++
++use crate::spec::{Arch, LinkSelfContainedDefault, Target, TargetMetadata, TargetOptions, base};
++
++pub(crate) fn target() -> Target {
++    let mut base = base::netbsd::opts();
++    base.cpu = "M68020".into();
++    base.max_atomic_width = Some(32);
++
++    Target {
++        llvm_target: "m68k-unknown-netbsd".into(),
++        metadata: TargetMetadata {
++            description: Some("Motorola 680x0 NetBSD".into()),
++            tier: Some(3),
++            host_tools: Some(false),
++            std: Some(true),
++        },
++        pointer_width: 32,
++        data_layout: "E-m:e-p:32:32:32-i8:8:8-i16:16:16-i32:32:32-n8:16:32-a:0:32-S32".into(),
++        arch: Arch::M68k,
++        options: TargetOptions {
++            endian: Endian::Big,
++            mcount: "_mcount".into(),
++
++            // LLD currently does not have support for M68k
++            link_self_contained: LinkSelfContainedDefault::False,
++            ..base
++        },
++    }
++}
++
diff --git a/rust197/patches/patch-compiler_rustc__target_src_spec_targets_mips64el__unknown__netbsd.rs b/rust197/patches/patch-compiler_rustc__target_src_spec_targets_mips64el__unknown__netbsd.rs
new file mode 100644
index 0000000000..718acb4411
--- /dev/null
+++ b/rust197/patches/patch-compiler_rustc__target_src_spec_targets_mips64el__unknown__netbsd.rs
@@ -0,0 +1,39 @@
+$NetBSD: patch-compiler_rustc__target_src_spec_targets_mips64el__unknown__netbsd.rs,v 1.8 2026/04/02 19:06:34 wiz Exp $
+
+Provide a mips64el target with N32, suitable for NetBSD/mips64el.
+
+--- compiler/rustc_target/src/spec/targets/mips64el_unknown_netbsd.rs.orig	2024-01-13 14:16:30.122042614 +0000
++++ compiler/rustc_target/src/spec/targets/mips64el_unknown_netbsd.rs
+@@ -0,0 +1,32 @@
++//! A target tuple for NetBSD/mips64
++
++use rustc_abi::Endian;
++
++use crate::spec::{Arch, CfgAbi, LlvmAbi, Target, TargetMetadata, TargetOptions, base};
++
++pub(crate) fn target() -> Target {
++    let mut base = base::netbsd::opts();
++    base.max_atomic_width = Some(32);
++    base.cpu = "mips32".into();
++
++    Target {
++        llvm_target: "mipsel-unknown-netbsd".into(),
++        metadata: TargetMetadata {
++            description: Some("NetBSD/mips64 with n32 ABI".into()),
++            tier: Some(3),
++            host_tools: Some(false),
++            std: Some(false),
++        },
++        pointer_width: 32,
++        data_layout: "e-m:m-p:32:32-i8:8:32-i16:16:32-i64:64-n32-S64".into(),
++        arch: Arch::Mips64,
++        options: TargetOptions {
++            cfg_abi: CfgAbi::AbiV2,
++            endian: Endian::Little,
++            features: "+soft-float,+abi=n32".into(),
++            llvm_abiname: LlvmAbi::N32,
++            mcount: "__mcount".into(),
++            ..base
++        },
++    }
++}
diff --git a/rust197/patches/patch-compiler_rustc__target_src_spec_targets_mipsel__unknown__netbsd.rs b/rust197/patches/patch-compiler_rustc__target_src_spec_targets_mipsel__unknown__netbsd.rs
new file mode 100644
index 0000000000..3e47866956
--- /dev/null
+++ b/rust197/patches/patch-compiler_rustc__target_src_spec_targets_mipsel__unknown__netbsd.rs
@@ -0,0 +1,14 @@
+$NetBSD: patch-compiler_rustc__target_src_spec_targets_mipsel__unknown__netbsd.rs,v 1.3 2025/08/25 17:51:12 wiz Exp $
+
+Let's see if turning off thread local storage makes a difference...
+
+--- compiler/rustc_target/src/spec/targets/mipsel_unknown_netbsd.rs.orig	2024-08-05 20:02:56.368978562 +0000
++++ compiler/rustc_target/src/spec/targets/mipsel_unknown_netbsd.rs
+@@ -23,6 +23,7 @@ pub(crate) fn target() -> Target {
+             llvm_abiname: LlvmAbi::O32,
+             mcount: "__mcount".into(),
+             endian: Endian::Little,
++            has_thread_local: false, // Let's see if there's a difference...
+             ..base
+         },
+     }
diff --git a/rust197/patches/patch-library_backtrace_src_symbolize_gimli.rs b/rust197/patches/patch-library_backtrace_src_symbolize_gimli.rs
new file mode 100644
index 0000000000..76eba086d0
--- /dev/null
+++ b/rust197/patches/patch-library_backtrace_src_symbolize_gimli.rs
@@ -0,0 +1,14 @@
+$NetBSD: patch-library_backtrace_src_symbolize_gimli.rs,v 1.9 2025/08/25 17:51:12 wiz Exp $
+
+Add NetBSD to the family who is in the unix class.
+
+--- library/backtrace/src/symbolize/gimli.rs.orig	2006-07-24 01:21:28.000000000 +0000
++++ library/backtrace/src/symbolize/gimli.rs
+@@ -40,6 +40,7 @@ cfg_if::cfg_if! {
+         target_os = "haiku",
+         target_os = "hurd",
+         target_os = "linux",
++        target_os = "netbsd",
+         target_os = "openbsd",
+         target_os = "solaris",
+         target_os = "illumos",
diff --git a/rust197/patches/patch-library_backtrace_src_symbolize_gimli_elf.rs b/rust197/patches/patch-library_backtrace_src_symbolize_gimli_elf.rs
new file mode 100644
index 0000000000..ced576df71
--- /dev/null
+++ b/rust197/patches/patch-library_backtrace_src_symbolize_gimli_elf.rs
@@ -0,0 +1,26 @@
+$NetBSD: patch-library_backtrace_src_symbolize_gimli_elf.rs,v 1.10 2025/08/25 17:51:12 wiz Exp $
+
+Make NetBSD also find its debug libraries, if present.
+
+--- library/backtrace/src/symbolize/gimli/elf.rs.orig	2022-04-04 09:41:26.000000000 +0000
++++ library/backtrace/src/symbolize/gimli/elf.rs
+@@ -395,11 +395,18 @@ fn decompress_zstd(mut input: &[u8], mut
+     Some(())
+ }
+ 
++#[cfg(target_os = "netbsd")]
++const DEBUG_PATH: &str = "/usr/libdata/debug";
++#[cfg(not(target_os = "netbsd"))]
+ const DEBUG_PATH: &str = "/usr/lib/debug";
+ 
+ fn debug_path_exists() -> bool {
+     cfg_if::cfg_if! {
+-        if #[cfg(any(target_os = "freebsd", target_os = "hurd", target_os = "linux"))] {
++        if #[cfg(any(target_os = "freebsd",
++		     target_os = "netbsd",
++                     target_os = "hurd",
++		     target_os = "linux"
++        ))] {
+             use core::sync::atomic::{AtomicU8, Ordering};
+             static DEBUG_PATH_EXISTS: AtomicU8 = AtomicU8::new(0);
+ 
diff --git a/rust197/patches/patch-src_bootstrap_bootstrap.py b/rust197/patches/patch-src_bootstrap_bootstrap.py
new file mode 100644
index 0000000000..d7d8d0ad43
--- /dev/null
+++ b/rust197/patches/patch-src_bootstrap_bootstrap.py
@@ -0,0 +1,48 @@
+$NetBSD: patch-src_bootstrap_bootstrap.py,v 1.28 2026/01/13 20:48:23 wiz Exp $
+
+Use `uname -p` on NetBSD, as that is reliable and sensible there.
+Use @PREFIX@ and not $ORIGIN in rpath.
+
+--- src/bootstrap/bootstrap.py.orig	2025-10-28 16:34:16.000000000 +0000
++++ src/bootstrap/bootstrap.py
+@@ -330,6 +330,11 @@ def default_build_triple(verbose):
+         "GNU": "unknown-hurd",
+     }
+ 
++    # For NetBSD, use `uname -p`, as there it is reliable & sensible
++    if kernel == 'NetBSD':
++        cputype = subprocess.check_output(
++            ['uname', '-p']).strip().decode(default_encoding)
++
+     # Consider the direct transformation first and then the special cases
+     if kernel in kerneltype_mapper:
+         kernel = kerneltype_mapper[kernel]
+@@ -706,11 +711,11 @@ class RustBuild(object):
+                 )
+             p = Pool(pool_size)
+             try:
+-                # FIXME: A cheap workaround for https://github.com/rust-lang/rust/issues/125578,
+-                # remove this once the issue is closed.
+-                bootstrap_build_artifacts = os.path.join(self.bootstrap_out(), "debug")
+-                if os.path.exists(bootstrap_build_artifacts):
+-                    shutil.rmtree(bootstrap_build_artifacts)
++#                # FIXME: A cheap workaround for https://github.com/rust-lang/rust/issues/125578,
++#                # remove this once the issue is closed.
++#                bootstrap_build_artifacts = os.path.join(self.bootstrap_out(), "debug")
++#                if os.path.exists(bootstrap_build_artifacts):
++#                    shutil.rmtree(bootstrap_build_artifacts)
+ 
+                 p.map(unpack_component, tarballs_download_info)
+             finally:
+@@ -857,7 +862,10 @@ class RustBuild(object):
+             self.nix_deps_dir = nix_deps_dir
+ 
+         patchelf = "{}/bin/patchelf".format(nix_deps_dir)
+-        rpath_entries = [os.path.join(os.path.realpath(nix_deps_dir), "lib")]
++        rpath_entries = [
++            "@PREFIX@/lib",
++            os.path.join(os.path.realpath(nix_deps_dir), "lib")
++        ]
+         patchelf_args = ["--add-rpath", ":".join(rpath_entries)]
+         if ".so" not in fname:
+             # Finally, set the correct .interp for binaries
diff --git a/rust197/patches/patch-src_bootstrap_src_core_build__steps_compile.rs b/rust197/patches/patch-src_bootstrap_src_core_build__steps_compile.rs
new file mode 100644
index 0000000000..291b0b70ad
--- /dev/null
+++ b/rust197/patches/patch-src_bootstrap_src_core_build__steps_compile.rs
@@ -0,0 +1,15 @@
+$NetBSD: patch-src_bootstrap_src_core_build__steps_compile.rs,v 1.5 2025/08/25 17:51:12 wiz Exp $
+
+On Darwin, do not use @rpath for internal libraries.
+
+--- src/bootstrap/src/core/build_steps/compile.rs.orig	2024-01-06 20:42:20.028206400 +0000
++++ src/bootstrap/src/core/build_steps/compile.rs
+@@ -695,7 +695,7 @@ fn copy_sanitizers(
+             || target == "x86_64-apple-ios"
+         {
+             // Update the library’s install name to reflect that it has been renamed.
+-            apple_darwin_update_library_name(builder, &dst, &format!("@rpath/{}", runtime.name));
++            apple_darwin_update_library_name(builder, &dst, &format!("@PREFIX@/lib/{}", runtime.name));
+             // Upon renaming the install name, the code signature of the file will invalidate,
+             // so we will sign it again.
+             apple_darwin_sign_file(builder, &dst);
diff --git a/rust197/patches/patch-src_bootstrap_src_core_build__steps_install.rs b/rust197/patches/patch-src_bootstrap_src_core_build__steps_install.rs
new file mode 100644
index 0000000000..2b14fb1b9e
--- /dev/null
+++ b/rust197/patches/patch-src_bootstrap_src_core_build__steps_install.rs
@@ -0,0 +1,15 @@
+$NetBSD: patch-src_bootstrap_src_core_build__steps_install.rs,v 1.5 2026/04/02 19:06:34 wiz Exp $
+
+Drop "docs" from installation (takes forever), add "rust".
+
+--- src/bootstrap/src/core/build_steps/install.rs.orig	2025-10-28 16:34:16.000000000 +0000
++++ src/bootstrap/src/core/build_steps/install.rs
+@@ -206,7 +206,7 @@ macro_rules! install {
+ install!((self, builder, _config),
+     Docs, path = "src/doc", _config.docs, IS_HOST: false, {
+         let tarball = builder.ensure(dist::Docs { host: self.target }).expect("missing docs");
+-        install_sh(builder, "docs", self.build_compiler, Some(self.target), &tarball);
++        install_sh(builder, "rust", self.build_compiler, Some(self.target), &tarball);
+     };
+     Std, path = "library/std", true, IS_HOST: false, {
+         // `expect` should be safe, only None when host != build, but this
diff --git a/rust197/patches/patch-src_bootstrap_src_core_builder_cargo.rs b/rust197/patches/patch-src_bootstrap_src_core_builder_cargo.rs
new file mode 100644
index 0000000000..3695f47e3e
--- /dev/null
+++ b/rust197/patches/patch-src_bootstrap_src_core_builder_cargo.rs
@@ -0,0 +1,26 @@
+$NetBSD: patch-src_bootstrap_src_core_builder_cargo.rs,v 1.4 2026/05/07 13:16:15 wiz Exp $
+
+Find external libunwind and libLLVM in pkgsrc (not just Linux).
+Use @PREFIX@ in rpath.
+
+--- src/bootstrap/src/core/builder/cargo.rs.orig	2026-04-14 19:55:32.000000000 +0000
++++ src/bootstrap/src/core/builder/cargo.rs
+@@ -299,7 +299,7 @@ impl Cargo {
+                 && !target.contains("xous")
+             {
+                 self.rustflags.arg("-Clink-args=-Wl,-z,origin");
+-                Some(format!("-Wl,-rpath,$ORIGIN/../{libdir}"))
++                Some(format!("-Wl,-rpath,@PREFIX@/lib"))
+             } else {
+                 None
+             };
+@@ -1422,6 +1422,9 @@ impl Builder<'_> {
+                 }
+             };
+ 
++        // added for pkgsrc libunwind or external LLVM
++        rustflags.arg("-Clink-args=-Wl,-rpath,@PREFIX@/lib,-L@PREFIX@/lib");
++
+         Cargo {
+             command: cargo,
+             args: vec![],
diff --git a/rust197/patches/patch-src_bootstrap_src_core_sanity.rs b/rust197/patches/patch-src_bootstrap_src_core_sanity.rs
new file mode 100644
index 0000000000..1c786813f1
--- /dev/null
+++ b/rust197/patches/patch-src_bootstrap_src_core_sanity.rs
@@ -0,0 +1,26 @@
+$NetBSD$
+
+Add m68k-unknown-netbsd to "missing stage0" list.
+
+--- src/bootstrap/src/core/sanity.rs.orig	2026-05-25 23:21:07.000000000 +0000
++++ src/bootstrap/src/core/sanity.rs
+@@ -37,6 +37,7 @@ pub struct Finder {
+ /// when the newly-bumped stage 0 compiler now knows about the formerly-missing targets.
+ const STAGE0_MISSING_TARGETS: &[&str] = &[
+     // just a dummy comment so the list doesn't get onelined
++    "m68k-unknown-netbsd",
+ ];
+ 
+ /// Minimum version threshold for libstdc++ required when using prebuilt LLVM
+@@ -265,7 +266,10 @@ than building it.
+                 for duplicated_target in duplicated_targets {
+                     println!("  {duplicated_target}");
+                 }
+-                std::process::exit(1);
++// For now don't make this a fatal error.
++// e.g. m68k-unknown-netbsd may be in the list for a while
++// until LLVM is fixed to not emit 16-bit PC-relative relocations only...
++//              std::process::exit(1);
+             }
+ 
+             // Check if it's a built-in target.
diff --git a/rust197/patches/patch-src_bootstrap_src_lib.rs b/rust197/patches/patch-src_bootstrap_src_lib.rs
new file mode 100644
index 0000000000..9f8eabe566
--- /dev/null
+++ b/rust197/patches/patch-src_bootstrap_src_lib.rs
@@ -0,0 +1,40 @@
+$NetBSD: patch-src_bootstrap_src_lib.rs,v 1.10 2026/01/14 06:44:31 wiz Exp $
+
+Don't filter out optimization flags.
+FreeBSD has a particular C++ runtime library name.
+Don't assume files in ${PREFIX}/lib are readable by the building user.
+
+--- src/bootstrap/src/lib.rs.orig	2025-09-14 15:05:11.000000000 +0000
++++ src/bootstrap/src/lib.rs
+@@ -1256,7 +1256,6 @@ impl Build {
+         base.args()
+             .iter()
+             .map(|s| s.to_string_lossy().into_owned())
+-            .filter(|s| !s.starts_with("-O") && !s.starts_with("/O"))
+             .collect::<Vec<String>>()
+     }
+ 
+@@ -1272,7 +1271,8 @@ impl Build {
+         // If we're compiling C++ on macOS then we add a flag indicating that
+         // we want libc++ (more filled out than libstdc++), ensuring that
+         // LLVM/etc are all properly compiled.
+-        if matches!(c, CLang::Cxx) && target.contains("apple-darwin") {
++        if matches!(c, CLang::Cxx) &&
++            (target.contains("apple-darwin") || target.contains("freebsd")) {
+             base.push("-stdlib=libc++".into());
+         }
+ 
+@@ -1813,7 +1813,12 @@ impl Build {
+             // but if that fails just fall back to a slow `copy` operation.
+         } else {
+             if let Err(e) = fs::copy(&src, dst) {
+-                panic!("failed to copy `{}` to `{}`: {}", src.display(), dst.display(), e)
++                if e.kind() == io::ErrorKind::PermissionDenied {
++                    eprintln!("Skipping copy of `{}` to `{}`: {}", src.display(), dst.display(), e);
++                    return;
++                } else {
++                    panic!("failed to copy `{}` to `{}`: {}", src.display(), dst.display(), e)
++                }
+             }
+             t!(fs::set_permissions(dst, metadata.permissions()));
+ 
diff --git a/rust197/patches/patch-src_llvm-project_llvm_CMakeLists.txt b/rust197/patches/patch-src_llvm-project_llvm_CMakeLists.txt
new file mode 100644
index 0000000000..8d04d986cc
--- /dev/null
+++ b/rust197/patches/patch-src_llvm-project_llvm_CMakeLists.txt
@@ -0,0 +1,18 @@
+$NetBSD: patch-src_llvm-project_llvm_CMakeLists.txt,v 1.16 2026/05/07 13:16:15 wiz Exp $
+
+Don't implement sys/regset.h workaround, fix source instead.
+
+--- src/llvm-project/llvm/CMakeLists.txt.orig	2026-04-14 19:55:32.000000000 +0000
++++ src/llvm-project/llvm/CMakeLists.txt
+@@ -1288,11 +1288,6 @@ if (CMAKE_SYSTEM_NAME MATCHES "OS390")
+   include_directories(SYSTEM "${LLVM_MAIN_INCLUDE_DIR}/llvm/Support/SystemZ/zos_wrappers" )
+ endif()
+ 
+-if( "${CMAKE_SYSTEM_NAME}" MATCHES SunOS )
+-   # special hack for Solaris to handle crazy system sys/regset.h
+-   include_directories("${LLVM_MAIN_INCLUDE_DIR}/llvm/Support/Solaris")
+-endif( "${CMAKE_SYSTEM_NAME}" MATCHES SunOS )
+-
+ # Make sure we don't get -rdynamic in every binary. For those that need it,
+ # use EXPORT_SYMBOLS argument.
+ set(CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS "")
diff --git a/rust197/patches/patch-src_llvm-project_llvm_cmake_modules_AddLLVM.cmake b/rust197/patches/patch-src_llvm-project_llvm_cmake_modules_AddLLVM.cmake
new file mode 100644
index 0000000000..a372168cb9
--- /dev/null
+++ b/rust197/patches/patch-src_llvm-project_llvm_cmake_modules_AddLLVM.cmake
@@ -0,0 +1,49 @@
+$NetBSD: patch-src_llvm-project_llvm_cmake_modules_AddLLVM.cmake,v 1.16 2026/05/07 13:16:15 wiz Exp $
+
+On Darwin, use correct install-name for shared libraries.
+
+Undo some of the RPATH magic so that cross-building
+works inside pkgsrc again (indirectly eliminates $ORIGIN rpath
+handling / editing, $ORIGIN handling is partially undone by cwrappers
+in pkgsrc).
+
+--- src/llvm-project/llvm/cmake/modules/AddLLVM.cmake.orig	2023-07-12 03:33:01.000000000 +0000
++++ src/llvm-project/llvm/cmake/modules/AddLLVM.cmake
+@@ -2554,7 +2554,7 @@ function(llvm_setup_rpath name)
+   endif()
+ 
+   if (APPLE)
+-    set(_install_name_dir INSTALL_NAME_DIR "@rpath")
++    set(_install_name_dir INSTALL_NAME_DIR "${CMAKE_INSTALL_PREFIX}/lib")
+     set(_install_rpath "@loader_path/../lib${LLVM_LIBDIR_SUFFIX}" ${extra_libdir})
+   elseif("${CMAKE_SYSTEM_NAME}" MATCHES "AIX" AND BUILD_SHARED_LIBS)
+     # $ORIGIN is not interpreted at link time by aix ld.
+@@ -2563,8 +2563,7 @@ function(llvm_setup_rpath name)
+     # FIXME: update this when there is better solution.
+     set(_install_rpath "${LLVM_LIBRARY_OUTPUT_INTDIR}" "${CMAKE_INSTALL_PREFIX}/lib${LLVM_LIBDIR_SUFFIX}" ${extra_libdir})
+   elseif(UNIX)
+-    set(_build_rpath "\$ORIGIN/../lib${LLVM_LIBDIR_SUFFIX}" ${extra_libdir})
+-    set(_install_rpath "\$ORIGIN/../lib${LLVM_LIBDIR_SUFFIX}")
++    set(_install_rpath "\$ORIGIN/../lib${LLVM_LIBDIR_SUFFIX}" ${extra_libdir})
+     if("${CMAKE_SYSTEM_NAME}" MATCHES "(FreeBSD|DragonFly)")
+       set_property(TARGET ${name} APPEND_STRING PROPERTY
+                    LINK_FLAGS " -Wl,-z,origin ")
+@@ -2578,16 +2577,9 @@ function(llvm_setup_rpath name)
+     return()
+   endif()
+ 
+-  # Enable BUILD_WITH_INSTALL_RPATH unless CMAKE_BUILD_RPATH is set and not
+-  # building for macOS or AIX, as those platforms seemingly require it.
+-  # On AIX, the tool chain doesn't support modifying rpaths/libpaths for XCOFF
+-  # on install at the moment, so BUILD_WITH_INSTALL_RPATH is required.
++  # Enable BUILD_WITH_INSTALL_RPATH unless CMAKE_BUILD_RPATH is set.
+   if("${CMAKE_BUILD_RPATH}" STREQUAL "")
+-    if("${CMAKE_SYSTEM_NAME}" MATCHES "Darwin|AIX")
+-      set_property(TARGET ${name} PROPERTY BUILD_WITH_INSTALL_RPATH ON)
+-    else()
+-      set_property(TARGET ${name} APPEND PROPERTY BUILD_RPATH "${_build_rpath}")
+-    endif()
++    set_property(TARGET ${name} PROPERTY BUILD_WITH_INSTALL_RPATH ON)
+   endif()
+ 
+   set_target_properties(${name} PROPERTIES
diff --git a/rust197/patches/patch-src_llvm-project_llvm_include_llvm-c_DataTypes.h b/rust197/patches/patch-src_llvm-project_llvm_include_llvm-c_DataTypes.h
new file mode 100644
index 0000000000..8722fdfe38
--- /dev/null
+++ b/rust197/patches/patch-src_llvm-project_llvm_include_llvm-c_DataTypes.h
@@ -0,0 +1,34 @@
+$NetBSD: patch-src_llvm-project_llvm_include_llvm-c_DataTypes.h,v 1.8 2024/04/18 09:29:42 pin Exp $
+
+Don't implement sys/regset.h workaround, fix source instead.
+
+--- src/llvm-project/llvm/include/llvm-c/DataTypes.h.orig	2021-04-17 01:50:37.000000000 +0000
++++ src/llvm-project/llvm/include/llvm-c/DataTypes.h
+@@ -77,4 +77,27 @@ typedef signed int ssize_t;
+ # define UINT64_MAX 0xffffffffffffffffULL
+ #endif
+ 
++#if defined(__sun)
++#include <sys/regset.h>
++#undef CS
++#undef DS
++#undef ES
++#undef FS
++#undef GS
++#undef SS
++#undef EAX
++#undef ECX
++#undef EDX
++#undef EBX
++#undef ESP
++#undef EBP
++#undef ESI
++#undef EDI
++#undef EIP
++#undef UESP
++#undef EFL
++#undef ERR
++#undef TRAPNO
++#endif
++
+ #endif /* LLVM_C_DATATYPES_H */
diff --git a/rust197/patches/patch-src_llvm-project_llvm_include_llvm_Analysis_ConstantFolding.h b/rust197/patches/patch-src_llvm-project_llvm_include_llvm_Analysis_ConstantFolding.h
new file mode 100644
index 0000000000..bfde112a80
--- /dev/null
+++ b/rust197/patches/patch-src_llvm-project_llvm_include_llvm_Analysis_ConstantFolding.h
@@ -0,0 +1,18 @@
+$NetBSD: patch-src_llvm-project_llvm_include_llvm_Analysis_ConstantFolding.h,v 1.11 2026/01/13 20:48:23 wiz Exp $
+
+Fix SunOS CS conflict not handled by include/llvm-c/DataTypes.h
+
+--- src/llvm-project/llvm/include/llvm/Analysis/ConstantFolding.h.orig	2025-10-28 16:34:16.000000000 +0000
++++ src/llvm-project/llvm/include/llvm/Analysis/ConstantFolding.h
+@@ -20,6 +20,11 @@
+ #define LLVM_ANALYSIS_CONSTANTFOLDING_H
+ 
+ #include "llvm/Support/Compiler.h"
++
++#ifdef __sun
++#undef CS
++#endif
++
+ #include <stdint.h>
+ 
+ namespace llvm {
diff --git a/rust197/patches/patch-src_llvm-project_llvm_lib_TargetParser_TargetDataLayout.cpp b/rust197/patches/patch-src_llvm-project_llvm_lib_TargetParser_TargetDataLayout.cpp
new file mode 100644
index 0000000000..2a1d4fc527
--- /dev/null
+++ b/rust197/patches/patch-src_llvm-project_llvm_lib_TargetParser_TargetDataLayout.cpp
@@ -0,0 +1,74 @@
+$NetBSD$
+
+Fix alignment on NetBSD/m68k.
+This is also submitted upstream at
+https://github.com/llvm/llvm-project/pull/207602
+
+--- src/llvm-project/llvm/lib/TargetParser/TargetDataLayout.cpp.orig	2026-07-05 19:50:17.410753296 +0000
++++ src/llvm-project/llvm/lib/TargetParser/TargetDataLayout.cpp
+@@ -122,6 +122,17 @@ static std::string computeLoongArchDataL
+   return "e-m:e-p:32:32-i64:64-n32-S128";
+ }
+ 
++// The Linux m68k target uses the ABI used
++// by Sun Microsystems for the old a.out-based binaries: 16-bit
++// alignment of int/long/pointer.
++//
++// NetBSD/m68k on the other hand uses the SVR4 ABI, which
++// aligns int/long/pointer/objects/stack on 32-bit boundaries.
++//
++// For now we just fix this for NetBSD/m68k.
++//
++// Ref. https://github.com/llvm/llvm-project/issues/199826
++
+ static std::string computeM68kDataLayout(const Triple &TT) {
+   std::string Ret = "";
+   // M68k is Big Endian
+@@ -131,21 +142,35 @@ static std::string computeM68kDataLayout
+   Ret += "-m:e";
+ 
+   // M68k pointers are always 32 bit wide even for 16-bit CPUs.
+-  // The ABI only specifies 16-bit alignment.
+-  // On at least the 68020+ with a 32-bit bus, there is a performance benefit
+-  // to having 32-bit alignment.
+-  Ret += "-p:32:16:32";
+-
+-  // Bytes do not require special alignment, words are word aligned and
+-  // long words are word aligned at minimum.
+-  Ret += "-i8:8:8-i16:16:16-i32:16:32";
++  if (! TT.isOSNetBSD()) {
++    // The ABI only specifies 16-bit alignment.
++    // On at least the 68020+ with a 32-bit bus, there is a performance benefit
++    // to having 32-bit alignment.
++    Ret += "-p:32:16:32";
++
++    // Bytes do not require special alignment, words are word aligned and
++    // long words are word aligned at minimum.
++    Ret += "-i8:8:8-i16:16:16-i32:16:32";
+ 
+-  // FIXME no floats at the moment
++    // The registers can hold 8, 16, 32 bits
++    Ret += "-n8:16:32";
+ 
+-  // The registers can hold 8, 16, 32 bits
+-  Ret += "-n8:16:32";
++    Ret += "-a:0:16-S16";
++  } else {
++    // NetBSD/m68k aligns long/pointer/stack/objects on 32-bits,
++    // ref. comment above.
++    Ret += "-p:32:32:32";
++    // Bytes do not require special alignment,
++    // 16-bit ints are 16-bit aligned and
++    // 32-bit ints are 32-bit aligned
++    Ret += "-i8:8:8-i16:16:16-i32:32:32";
++    // The registers can hold 8, 16, 32 bits
++    Ret += "-n8:16:32";
++    // object and stack alignment is also 32 bits
++    Ret += "-a:0:32-S32";
++  }
+ 
+-  Ret += "-a:0:16-S16";
++  // FIXME no floats at the moment
+ 
+   return Ret;
+ }
diff --git a/rust197/patches/patch-src_llvm-project_llvm_utils_FileCheck_FileCheck.cpp b/rust197/patches/patch-src_llvm-project_llvm_utils_FileCheck_FileCheck.cpp
new file mode 100644
index 0000000000..e255aa5af9
--- /dev/null
+++ b/rust197/patches/patch-src_llvm-project_llvm_utils_FileCheck_FileCheck.cpp
@@ -0,0 +1,15 @@
+$NetBSD: patch-src_llvm-project_llvm_utils_FileCheck_FileCheck.cpp,v 1.13 2024/04/18 09:29:42 pin Exp $
+
+Avoid ambiguous function call.
+
+--- src/llvm-project/llvm/utils/FileCheck/FileCheck.cpp.orig	2019-02-12 15:22:48.000000000 +0000
++++ src/llvm-project/llvm/utils/FileCheck/FileCheck.cpp
+@@ -592,7 +592,7 @@ static void DumpAnnotatedInput(raw_ostre
+   unsigned LineCount = InputFileText.count('\n');
+   if (InputFileEnd[-1] != '\n')
+     ++LineCount;
+-  unsigned LineNoWidth = std::log10(LineCount) + 1;
++  unsigned LineNoWidth = std::log10((float)LineCount) + 1;
+   // +3 below adds spaces (1) to the left of the (right-aligned) line numbers
+   // on input lines and (2) to the right of the (left-aligned) labels on
+   // annotation lines so that input lines and annotation lines are more
diff --git a/rust197/patches/patch-src_tools_cargo_src_cargo_core_profiles.rs b/rust197/patches/patch-src_tools_cargo_src_cargo_core_profiles.rs
new file mode 100644
index 0000000000..0d2e97d952
--- /dev/null
+++ b/rust197/patches/patch-src_tools_cargo_src_cargo_core_profiles.rs
@@ -0,0 +1,17 @@
+$NetBSD: patch-src_tools_cargo_src_cargo_core_profiles.rs,v 1.17 2024/04/18 09:29:42 pin Exp $
+
+Turn off incremental builds for sparc64, ref.
+https://sources.debian.org/patches/cargo/0.29.0-1/2007_sparc64_disable_incremental_build.patch/
+
+--- src/tools/cargo/src/cargo/core/profiles.rs.orig	2023-07-12 03:33:05.000000000 +0000
++++ src/tools/cargo/src/cargo/core/profiles.rs
+@@ -681,6 +681,9 @@ impl Profile {
+             debuginfo: DebugInfo::Resolved(TomlDebugInfo::Full),
+             debug_assertions: true,
+             overflow_checks: true,
++            #[cfg(target_arch = "sparc64")]
++            incremental: false,
++            #[cfg(not(target_arch = "sparc64"))]
+             incremental: true,
+             ..Profile::default()
+         }
diff --git a/rust197/patches/patch-src_tools_cargo_tests_testsuite_build.rs b/rust197/patches/patch-src_tools_cargo_tests_testsuite_build.rs
new file mode 100644
index 0000000000..093afa591b
--- /dev/null
+++ b/rust197/patches/patch-src_tools_cargo_tests_testsuite_build.rs
@@ -0,0 +1,39 @@
+$NetBSD: patch-src_tools_cargo_tests_testsuite_build.rs,v 1.18 2025/08/25 17:51:12 wiz Exp $
+
+Don't attempt incremental operations on sparc64, ref.
+https://sources.debian.org/patches/cargo/0.29.0-1/2007_sparc64_disable_incremental_build.patch/
+
+--- src/tools/cargo/tests/testsuite/build.rs.orig	2025-01-27 23:20:59.000000000 +0000
++++ src/tools/cargo/tests/testsuite/build.rs
+@@ -41,6 +41,7 @@ i am foo
+         .run();
+ }
+ 
++#[cfg(not(target_arch = "sparc64"))]
+ #[cargo_test]
+ fn build_with_symlink_to_path_dependency_with_build_script_in_git() {
+     if !symlink_supported() {
+@@ -103,6 +104,7 @@ fn cargo_fail_with_no_stderr() {
+ 
+ /// Checks that the `CARGO_INCREMENTAL` environment variable results in
+ /// `rustc` getting `-C incremental` passed to it.
++#[cfg(not(target_arch = "sparc64"))]
+ #[cargo_test]
+ fn cargo_compile_incremental() {
+     let p = project()
+@@ -132,6 +134,7 @@ fn cargo_compile_incremental() {
+         .run();
+ }
+ 
++#[cfg(not(target_arch = "sparc64"))]
+ #[cargo_test]
+ fn incremental_profile() {
+     let p = project()
+@@ -175,6 +178,7 @@ fn incremental_profile() {
+         .run();
+ }
+ 
++#[cfg(not(target_arch = "sparc64"))]
+ #[cargo_test]
+ fn incremental_config() {
+     let p = project()
diff --git a/rust197/patches/patch-src_tools_rust-installer_install-template.sh b/rust197/patches/patch-src_tools_rust-installer_install-template.sh
new file mode 100644
index 0000000000..54aa9d1655
--- /dev/null
+++ b/rust197/patches/patch-src_tools_rust-installer_install-template.sh
@@ -0,0 +1,48 @@
+$NetBSD$
+
+No logging to 'install.log'.
+Do not create 'uninstall.sh'.
+Do not make file backups (filename.old), so these will not end up in the final package.
+
+--- src/tools/rust-installer/install-template.sh.orig	2026-05-29 09:40:07.274418028 +0000
++++ src/tools/rust-installer/install-template.sh
+@@ -6,20 +6,12 @@ set -u
+ init_logging() {
+     local _abs_libdir="$1"
+     local _logfile="$_abs_libdir/$TEMPLATE_REL_MANIFEST_DIR/install.log"
+-    rm -f "$_logfile"
+-    need_ok "failed to remove old installation log"
+-    touch "$_logfile"
+-    need_ok "failed to create installation log"
+     LOGFILE="$_logfile"
+ }
+ 
+ log_line() {
+     local _line="$1"
+ 
+-    if [ -n "${LOGFILE-}" -a -e "${LOGFILE-}" ]; then
+-    echo "$_line" >> "$LOGFILE"
+-    # Ignore errors, which may happen e.g. after the manifest dir is deleted
+-    fi
+ }
+ 
+ msg() {
+@@ -628,8 +620,6 @@ install_components() {
+ 
+             verbose_msg "copying directory $_file_install_path"
+ 
+-            maybe_backup_path "$_file_install_path"
+-
+             run cp -R "$_src_dir/$_component/$_file" "$_file_install_path"
+             critical_need_ok "failed to copy directory"
+ 
+@@ -976,9 +966,6 @@ write_to_file "$TEMPLATE_RUST_INSTALLER_
+ 
+ critical_need_ok "failed to write installer version"
+ 
+-# Install the uninstaller
+-install_uninstaller "$src_dir" "$src_basename" "$abs_libdir"
+-
+ # Install each component
+ install_components "$src_dir" "$abs_libdir" "$dest_prefix" "$components"
+ 
diff --git a/rust197/patches/patch-tests_assembly-llvm_targets_targets-elf.rs b/rust197/patches/patch-tests_assembly-llvm_targets_targets-elf.rs
new file mode 100644
index 0000000000..84ce0e74eb
--- /dev/null
+++ b/rust197/patches/patch-tests_assembly-llvm_targets_targets-elf.rs
@@ -0,0 +1,16 @@
+$NetBSD: patch-tests_assembly-llvm_targets_targets-elf.rs,v 1.1 2025/10/18 17:14:35 he Exp $
+
+Fix test suite for mips64el-unknown-netbsd.
+
+--- tests/assembly-llvm/targets/targets-elf.rs.orig	2025-09-19 21:53:43.152938454 +0000
++++ tests/assembly-llvm/targets/targets-elf.rs
+@@ -301,6 +301,9 @@
+ //@ revisions: mips64el_unknown_linux_muslabi64
+ //@ [mips64el_unknown_linux_muslabi64] compile-flags: --target mips64el-unknown-linux-muslabi64
+ //@ [mips64el_unknown_linux_muslabi64] needs-llvm-components: mips
++//@ revisions: mips64el_unknown_netbsd
++//@ [mips64el_unknown_netbsd] compile-flags: --target mips64el_unknown_netbsd-unknown-linux-muslabi64
++//@ [mips64el_unknown_netbsd] needs-llvm-components: mips
+ //@ revisions: mips_unknown_linux_gnu
+ //@ [mips_unknown_linux_gnu] compile-flags: --target mips-unknown-linux-gnu
+ //@ [mips_unknown_linux_gnu] needs-llvm-components: mips
diff --git a/rust197/patches/patch-vendor_crossbeam-utils-0.8.18_no__atomic.rs b/rust197/patches/patch-vendor_crossbeam-utils-0.8.18_no__atomic.rs
new file mode 100644
index 0000000000..f289291ec4
--- /dev/null
+++ b/rust197/patches/patch-vendor_crossbeam-utils-0.8.18_no__atomic.rs
@@ -0,0 +1,14 @@
+$NetBSD: patch-vendor_crossbeam-utils-0.8.18_no__atomic.rs,v 1.3 2025/08/25 17:51:12 wiz Exp $
+
+Add NetBSD/mipsel to non-atomic targets.
+
+--- vendor/crossbeam-utils-0.8.18/no_atomic.rs.orig	2024-05-03 22:53:42.558166596 +0000
++++ vendor/crossbeam-utils-0.8.18/no_atomic.rs
+@@ -5,6 +5,7 @@ const NO_ATOMIC: &[&str] = &[
+     "bpfeb-unknown-none",
+     "bpfel-unknown-none",
+     "mipsel-sony-psx",
++    "mipsel-unknown-netbsd",
+     "msp430-none-elf",
+     "riscv32i-unknown-none-elf",
+     "riscv32im-unknown-none-elf",
diff --git a/rust197/patches/patch-vendor_libc-0.2.155_src_unix_bsd_netbsdlike_netbsd_mod.rs b/rust197/patches/patch-vendor_libc-0.2.155_src_unix_bsd_netbsdlike_netbsd_mod.rs
new file mode 100644
index 0000000000..24c498026b
--- /dev/null
+++ b/rust197/patches/patch-vendor_libc-0.2.155_src_unix_bsd_netbsdlike_netbsd_mod.rs
@@ -0,0 +1,15 @@
+$NetBSD: patch-vendor_libc-0.2.155_src_unix_bsd_netbsdlike_netbsd_mod.rs,v 1.2 2025/08/25 17:51:12 wiz Exp $
+
+Apply https://github.com/rust-lang/libc/pull/4265/files
+to fix getmntinfo() from rust.
+
+--- vendor/libc-0.2.155/src/unix/bsd/netbsdlike/netbsd/mod.rs.orig	2025-02-14 14:04:45.438043897 +0000
++++ vendor/libc-0.2.155/src/unix/bsd/netbsdlike/netbsd/mod.rs
+@@ -3142,6 +3142,7 @@ cfg_if! {
+     if #[cfg(libc_union)] {
+         extern {
+             // these functions use statvfs:
++            #[link_name = "__getmntinfo13"]
+             pub fn getmntinfo(mntbufp: *mut *mut ::statvfs, flags: ::c_int) -> ::c_int;
+             pub fn getvfsstat(buf: *mut statvfs, bufsize: ::size_t, flags: ::c_int) -> ::c_int;
+         }
diff --git a/rust197/patches/patch-vendor_libc-0.2.155_src_unix_solarish_mod.rs b/rust197/patches/patch-vendor_libc-0.2.155_src_unix_solarish_mod.rs
new file mode 100644
index 0000000000..276db25e8c
--- /dev/null
+++ b/rust197/patches/patch-vendor_libc-0.2.155_src_unix_solarish_mod.rs
@@ -0,0 +1,15 @@
+$NetBSD: patch-vendor_libc-0.2.155_src_unix_solarish_mod.rs,v 1.5 2025/10/18 17:14:35 he Exp $
+
+Fix xattr build.
+
+--- vendor/libc-0.2.155/src/unix/solarish/mod.rs.orig	2024-08-29 18:03:17.866520790 +0000
++++ vendor/libc-0.2.155/src/unix/solarish/mod.rs
+@@ -1524,6 +1524,8 @@ pub const EOWNERDEAD: ::c_int = 58;
+ pub const ENOTRECOVERABLE: ::c_int = 59;
+ pub const ENOSTR: ::c_int = 60;
+ pub const ENODATA: ::c_int = 61;
++// This is not supported but is required for xattr
++pub const ENOATTR: ::c_int = ::ENODATA;
+ pub const ETIME: ::c_int = 62;
+ pub const ENOSR: ::c_int = 63;
+ pub const ENONET: ::c_int = 64;
diff --git a/rust197/patches/patch-vendor_libc-0.2.168_src_unix_bsd_netbsdlike_netbsd_mod.rs b/rust197/patches/patch-vendor_libc-0.2.168_src_unix_bsd_netbsdlike_netbsd_mod.rs
new file mode 100644
index 0000000000..b33dd8a12f
--- /dev/null
+++ b/rust197/patches/patch-vendor_libc-0.2.168_src_unix_bsd_netbsdlike_netbsd_mod.rs
@@ -0,0 +1,15 @@
+$NetBSD: patch-vendor_libc-0.2.168_src_unix_bsd_netbsdlike_netbsd_mod.rs,v 1.3 2026/01/13 20:48:23 wiz Exp $
+
+Apply https://github.com/rust-lang/libc/pull/4265/files
+to fix getmntinfo() from rust.
+
+--- vendor/libc-0.2.168/src/unix/bsd/netbsdlike/netbsd/mod.rs.orig	2025-04-05 11:35:20.818765987 +0000
++++ vendor/libc-0.2.168/src/unix/bsd/netbsdlike/netbsd/mod.rs
+@@ -2850,6 +2850,7 @@ extern "C" {
+         hint: *const c_void,
+     ) -> c_int;
+ 
++    #[link_name = "__getmntinfo13"]
+     pub fn getmntinfo(mntbufp: *mut *mut crate::statvfs, flags: c_int) -> c_int;
+     pub fn getvfsstat(buf: *mut statvfs, bufsize: size_t, flags: c_int) -> c_int;
+ }
diff --git a/rust197/patches/patch-vendor_libc-0.2.168_src_unix_bsd_netbsdlike_netbsd_riscv64.rs b/rust197/patches/patch-vendor_libc-0.2.168_src_unix_bsd_netbsdlike_netbsd_riscv64.rs
new file mode 100644
index 0000000000..15a6cff36f
--- /dev/null
+++ b/rust197/patches/patch-vendor_libc-0.2.168_src_unix_bsd_netbsdlike_netbsd_riscv64.rs
@@ -0,0 +1,44 @@
+$NetBSD: patch-vendor_libc-0.2.168_src_unix_bsd_netbsdlike_netbsd_riscv64.rs,v 1.1 2025/08/25 17:51:12 wiz Exp $
+
+Unbreak this module.
+
+I admit to this entirely being based on "cargo cult", but at least
+the rust compiler (cross-)builds for NetBSD/risc64 with this,
+whereas it did not earlier.
+
+--- vendor/libc-0.2.168/src/unix/bsd/netbsdlike/netbsd/riscv64.rs.orig	2025-06-28 07:45:40.263146414 +0000
++++ vendor/libc-0.2.168/src/unix/bsd/netbsdlike/netbsd/riscv64.rs
+@@ -1,4 +1,4 @@
+-use PT_FIRSTMACH;
++use crate::PT_FIRSTMACH;
+ 
+ use crate::prelude::*;
+ 
+@@ -8,21 +8,18 @@ pub type c_char = u8;
+ pub type __greg_t = u64;
+ pub type __cpu_simple_lock_nv_t = c_int;
+ pub type __gregset = [__greg_t; _NGREG];
+-pub type __fregset = [__freg; _NFREG];
+-
+-s! {
+-    pub struct mcontext_t {
+-        pub __gregs: __gregset,
+-        pub __fregs: __fpregset,
+-        __spare: [crate::__greg_t; 7],
+-    }
+-}
++pub type __fregset = [__fpreg; _NFREG];
+ 
+ s_no_extra_traits! {
+     pub union __fpreg {
+         pub u_u64: u64,
+         pub u_d: c_double,
+     }
++    pub struct mcontext_t {
++        pub __gregs: __gregset,
++        pub __fregs: __fregset,
++        __spare: [crate::__greg_t; 7],
++    }
+ }
+ 
+ pub(crate) const _ALIGNBYTES: usize = mem::size_of::<c_long>() - 1;
diff --git a/rust197/patches/patch-vendor_libc-0.2.168_src_unix_solarish_mod.rs b/rust197/patches/patch-vendor_libc-0.2.168_src_unix_solarish_mod.rs
new file mode 100644
index 0000000000..ea6a93fe86
--- /dev/null
+++ b/rust197/patches/patch-vendor_libc-0.2.168_src_unix_solarish_mod.rs
@@ -0,0 +1,15 @@
+$NetBSD: patch-vendor_libc-0.2.168_src_unix_solarish_mod.rs,v 1.4 2025/10/18 17:14:35 he Exp $
+
+Fix xattr build.
+
+--- vendor/libc-0.2.168/src/unix/solarish/mod.rs.orig	2025-04-05 11:37:41.783212722 +0000
++++ vendor/libc-0.2.168/src/unix/solarish/mod.rs
+@@ -1421,6 +1421,8 @@ pub const EOWNERDEAD: c_int = 58;
+ pub const ENOTRECOVERABLE: c_int = 59;
+ pub const ENOSTR: c_int = 60;
+ pub const ENODATA: c_int = 61;
++// This is not supported but is required for xattr
++pub const ENOATTR: ::c_int = ::ENODATA;
+ pub const ETIME: c_int = 62;
+ pub const ENOSR: c_int = 63;
+ pub const ENONET: c_int = 64;
diff --git a/rust197/patches/patch-vendor_libc-0.2.169_src_unix_bsd_netbsdlike_netbsd_mod.rs b/rust197/patches/patch-vendor_libc-0.2.169_src_unix_bsd_netbsdlike_netbsd_mod.rs
new file mode 100644
index 0000000000..b4de45f7bb
--- /dev/null
+++ b/rust197/patches/patch-vendor_libc-0.2.169_src_unix_bsd_netbsdlike_netbsd_mod.rs
@@ -0,0 +1,15 @@
+$NetBSD: patch-vendor_libc-0.2.169_src_unix_bsd_netbsdlike_netbsd_mod.rs,v 1.2 2025/08/25 17:51:12 wiz Exp $
+
+Apply https://github.com/rust-lang/libc/pull/4265/files
+to fix getmntinfo() from rust.
+
+--- vendor/libc-0.2.169/src/unix/bsd/netbsdlike/netbsd/mod.rs.orig	2025-02-14 14:04:45.438043897 +0000
++++ vendor/libc-0.2.169/src/unix/bsd/netbsdlike/netbsd/mod.rs
+@@ -2850,6 +2850,7 @@ extern "C" {
+         hint: *const c_void,
+     ) -> c_int;
+ 
++    #[link_name = "__getmntinfo13"]
+     pub fn getmntinfo(mntbufp: *mut *mut crate::statvfs, flags: c_int) -> c_int;
+     pub fn getvfsstat(buf: *mut statvfs, bufsize: size_t, flags: c_int) -> c_int;
+ }
diff --git a/rust197/patches/patch-vendor_libc-0.2.169_src_unix_bsd_netbsdlike_netbsd_riscv64.rs b/rust197/patches/patch-vendor_libc-0.2.169_src_unix_bsd_netbsdlike_netbsd_riscv64.rs
new file mode 100644
index 0000000000..30d1f3d440
--- /dev/null
+++ b/rust197/patches/patch-vendor_libc-0.2.169_src_unix_bsd_netbsdlike_netbsd_riscv64.rs
@@ -0,0 +1,90 @@
+$NetBSD: patch-vendor_libc-0.2.169_src_unix_bsd_netbsdlike_netbsd_riscv64.rs,v 1.2 2025/08/25 17:51:12 wiz Exp $
+
+Unbreak this module.
+
+I admit to this entirely being based on "cargo cult", but at least
+the rust compiler (cross-)builds for NetBSD/risc64 with this,
+whereas it did not earlier.
+
+--- vendor/libc-0.2.169/src/unix/bsd/netbsdlike/netbsd/riscv64.rs.orig	2025-02-24 07:49:42.565876506 +0000
++++ vendor/libc-0.2.169/src/unix/bsd/netbsdlike/netbsd/riscv64.rs
+@@ -1,4 +1,4 @@
+-use PT_FIRSTMACH;
++use crate::PT_FIRSTMACH;
+ 
+ use crate::prelude::*;
+ 
+@@ -8,20 +8,66 @@ pub type c_char = u8;
+ pub type __greg_t = u64;
+ pub type __cpu_simple_lock_nv_t = c_int;
+ pub type __gregset = [__greg_t; _NGREG];
+-pub type __fregset = [__freg; _NFREG];
++pub type __fregset = [__fpreg; _NFREG];
+ 
+-s! {
++s_no_extra_traits! {
++    pub union __fpreg {
++        #[cfg(libc_union)]
++        pub u_u64: u64,
++        pub u_d: c_double,
++    }
+     pub struct mcontext_t {
+         pub __gregs: __gregset,
+-        pub __fregs: __fpregset,
++        pub __fregs: __fregset,
+         __spare: [crate::__greg_t; 7],
+     }
+ }
+ 
+-s_no_extra_traits! {
+-    pub union __fpreg {
+-        pub u_u64: u64,
+-        pub u_d: c_double,
++cfg_if! {
++    if #[cfg(feature = "extra_traits")] {
++//      use ::self::fmt;
++//      use ::self::hash;
++	use core::marker::Copy;
++	use core::clone::Clone;
++        #[cfg(libc_union)]
++        impl PartialEq for __fpreg {
++            fn eq(&self, other: &__fpreg) -> bool {
++                unsafe {
++                    self.u_64 == other.u_64
++                        || self.u_d == other.u_d
++                }
++            }
++        }
++        #[cfg(libc_union)]
++        impl Eq for __fpreg {}
++        #[cfg(libc_union)]
++        impl ::fmt::Debug for __fpreg {
++            fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result {
++                unsafe {
++                    f.debug_struct("__fpreg")
++                        .field("u_u64", &self.u_64)
++                        .field("u_d", &self.u_d)
++                        .finish()
++                }
++            }
++        }
++        #[cfg(libc_union)]
++        impl ::hash::Hash for __fpreg {
++            fn hash<H: ::hash::Hasher>(&self, state: &mut H) {
++                unsafe {
++                    self.u_64.hash(state);
++                    self.u_d.hash(state);
++                }
++            }
++        }
++        #[cfg(libc_union)]
++        impl ::Copy for __fpreg {}
++        #[cfg(libc_union)]
++        impl ::Clone for __fpreg {
++            fn clone(&self) -> __fpreg {
++                *self
++            }
++        }
+     }
+ }
+ 
diff --git a/rust197/patches/patch-vendor_libc-0.2.169_src_unix_solarish_mod.rs b/rust197/patches/patch-vendor_libc-0.2.169_src_unix_solarish_mod.rs
new file mode 100644
index 0000000000..f1ea8dc605
--- /dev/null
+++ b/rust197/patches/patch-vendor_libc-0.2.169_src_unix_solarish_mod.rs
@@ -0,0 +1,15 @@
+$NetBSD: patch-vendor_libc-0.2.169_src_unix_solarish_mod.rs,v 1.5 2025/10/18 17:14:35 he Exp $
+
+Fix xattr build.
+
+--- vendor/libc-0.2.169/src/unix/solarish/mod.rs.orig	2024-08-29 18:03:17.866520790 +0000
++++ vendor/libc-0.2.169/src/unix/solarish/mod.rs
+@@ -1421,6 +1421,8 @@ pub const EOWNERDEAD: c_int = 58;
+ pub const ENOTRECOVERABLE: c_int = 59;
+ pub const ENOSTR: c_int = 60;
+ pub const ENODATA: c_int = 61;
++// This is not supported but is required for xattr
++pub const ENOATTR: ::c_int = ::ENODATA;
+ pub const ETIME: c_int = 62;
+ pub const ENOSR: c_int = 63;
+ pub const ENONET: c_int = 64;
diff --git a/rust197/patches/patch-vendor_libc-0.2.171_src_unix_bsd_netbsdlike_netbsd_riscv64.rs b/rust197/patches/patch-vendor_libc-0.2.171_src_unix_bsd_netbsdlike_netbsd_riscv64.rs
new file mode 100644
index 0000000000..219b9ea7f7
--- /dev/null
+++ b/rust197/patches/patch-vendor_libc-0.2.171_src_unix_bsd_netbsdlike_netbsd_riscv64.rs
@@ -0,0 +1,90 @@
+$NetBSD: patch-vendor_libc-0.2.171_src_unix_bsd_netbsdlike_netbsd_riscv64.rs,v 1.1 2025/08/25 17:51:13 wiz Exp $
+
+Unbreak this module.
+
+I admit to this entirely being based on "cargo cult", but at least
+the rust compiler (cross-)builds for NetBSD/risc64 with this,
+whereas it did not earlier.
+
+--- vendor/libc-0.2.171/src/unix/bsd/netbsdlike/netbsd/riscv64.rs.orig	2025-05-19 22:03:59.982023413 +0000
++++ vendor/libc-0.2.171/src/unix/bsd/netbsdlike/netbsd/riscv64.rs
+@@ -1,24 +1,70 @@
+-use PT_FIRSTMACH;
++use crate::PT_FIRSTMACH;
+ 
+ use crate::prelude::*;
+ 
+ pub type __greg_t = u64;
+ pub type __cpu_simple_lock_nv_t = c_int;
+ pub type __gregset = [__greg_t; _NGREG];
+-pub type __fregset = [__freg; _NFREG];
++pub type __fregset = [__fpreg; _NFREG];
+ 
+-s! {
++s_no_extra_traits! {
++    pub union __fpreg {
++        #[cfg(libc_union)]
++        pub u_u64: u64,
++        pub u_d: c_double,
++    }
+     pub struct mcontext_t {
+         pub __gregs: __gregset,
+-        pub __fregs: __fpregset,
+-        __spare: [crate::__greg_t; 7],
++        pub __fregs: __fregset,
++        __spare: [crate::__greg_t; 7],
+     }
+ }
+ 
+-s_no_extra_traits! {
+-    pub union __fpreg {
+-        pub u_u64: u64,
+-        pub u_d: c_double,
++cfg_if! {
++    if #[cfg(feature = "extra_traits")] {
++//      use ::self::fmt;
++//      use ::self::hash;
++        use core::marker::Copy;
++        use core::clone::Clone;
++        #[cfg(libc_union)]
++        impl PartialEq for __fpreg {
++            fn eq(&self, other: &__fpreg) -> bool {
++                unsafe {
++                    self.u_64 == other.u_64
++                        || self.u_d == other.u_d
++                }
++            }
++        }
++        #[cfg(libc_union)]
++        impl Eq for __fpreg {}
++        #[cfg(libc_union)]
++        impl ::fmt::Debug for __fpreg {
++            fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result {
++                unsafe {
++                    f.debug_struct("__fpreg")
++                        .field("u_u64", &self.u_64)
++                        .field("u_d", &self.u_d)
++                        .finish()
++                }
++            }
++        }
++        #[cfg(libc_union)]
++        impl ::hash::Hash for __fpreg {
++            fn hash<H: ::hash::Hasher>(&self, state: &mut H) {
++                unsafe {
++                    self.u_64.hash(state);
++                    self.u_d.hash(state);
++                }
++            }
++        }
++        #[cfg(libc_union)]
++        impl ::Copy for __fpreg {}
++        #[cfg(libc_union)]
++        impl ::Clone for __fpreg {
++            fn clone(&self) -> __fpreg {
++                *self
++            }
++        }
+     }
+ }
+ 
diff --git a/rust197/patches/patch-vendor_libc-0.2.172_src_unix_bsd_netbsdlike_netbsd_riscv64.rs b/rust197/patches/patch-vendor_libc-0.2.172_src_unix_bsd_netbsdlike_netbsd_riscv64.rs
new file mode 100644
index 0000000000..208337cf90
--- /dev/null
+++ b/rust197/patches/patch-vendor_libc-0.2.172_src_unix_bsd_netbsdlike_netbsd_riscv64.rs
@@ -0,0 +1,89 @@
+$NetBSD: patch-vendor_libc-0.2.172_src_unix_bsd_netbsdlike_netbsd_riscv64.rs,v 1.1 2025/08/25 17:51:13 wiz Exp $
+
+Unbreak this module.
+
+I admit to this entirely being based on "cargo cult", but at least
+the rust compiler (cross-)builds for NetBSD/risc64 with this,
+whereas it did not earlier.
+
+--- vendor/libc-0.2.172/src/unix/bsd/netbsdlike/netbsd/riscv64.rs.orig	2025-06-28 07:50:50.001313003 +0000
++++ vendor/libc-0.2.172/src/unix/bsd/netbsdlike/netbsd/riscv64.rs
+@@ -1,24 +1,70 @@
+-use PT_FIRSTMACH;
++use crate::PT_FIRSTMACH;
+ 
+ use crate::prelude::*;
+ 
+ pub type __greg_t = u64;
+ pub type __cpu_simple_lock_nv_t = c_int;
+ pub type __gregset = [__greg_t; _NGREG];
+-pub type __fregset = [__freg; _NFREG];
++pub type __fregset = [__fpreg; _NFREG];
+ 
+-s! {
++s_no_extra_traits! {
++    pub union __fpreg {
++        #[cfg(libc_union)]
++        pub u_u64: u64,
++        pub u_d: c_double,
++    }
+     pub struct mcontext_t {
+         pub __gregs: __gregset,
+-        pub __fregs: __fpregset,
++        pub __fregs: __fregset,
+         __spare: [crate::__greg_t; 7],
+     }
+ }
+ 
+-s_no_extra_traits! {
+-    pub union __fpreg {
+-        pub u_u64: u64,
+-        pub u_d: c_double,
++cfg_if! {
++    if #[cfg(feature = "extra_traits")] {
++//      use ::self::fmt;
++//      use ::self::hash;
++        use core::marker::Copy;
++        use core::clone::Clone;
++        #[cfg(libc_union)]
++        impl PartialEq for __fpreg {
++            fn eq(&self, other: &__fpreg) -> bool {
++                unsafe {
++                    self.u_64 == other.u_64
++                        || self.u_d == other.u_d
++                }
++            }
++        }
++        #[cfg(libc_union)]
++        impl Eq for __fpreg {}
++        #[cfg(libc_union)]
++        impl ::fmt::Debug for __fpreg {
++            fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result {
++                unsafe {
++                    f.debug_struct("__fpreg")
++                        .field("u_u64", &self.u_64)
++                        .field("u_d", &self.u_d)
++                        .finish()
++                }
++            }
++        }
++        #[cfg(libc_union)]
++        impl ::hash::Hash for __fpreg {
++            fn hash<H: ::hash::Hasher>(&self, state: &mut H) {
++                unsafe {
++                    self.u_64.hash(state);
++                    self.u_d.hash(state);
++                }
++            }
++        }
++        #[cfg(libc_union)]
++        impl ::Copy for __fpreg {}
++        #[cfg(libc_union)]
++        impl ::Clone for __fpreg {
++            fn clone(&self) -> __fpreg {
++                *self
++            }
++        }
+     }
+ }
+ 
diff --git a/rust197/patches/patch-vendor_libc-0.2.172_src_unix_solarish_mod.rs b/rust197/patches/patch-vendor_libc-0.2.172_src_unix_solarish_mod.rs
new file mode 100644
index 0000000000..293aaab7fa
--- /dev/null
+++ b/rust197/patches/patch-vendor_libc-0.2.172_src_unix_solarish_mod.rs
@@ -0,0 +1,15 @@
+$NetBSD: patch-vendor_libc-0.2.172_src_unix_solarish_mod.rs,v 1.4 2025/10/21 08:54:19 jperkin Exp $
+
+Fix xattr build.
+
+--- vendor/libc-0.2.172/src/unix/solarish/mod.rs.orig	2025-06-28 07:52:15.632394747 +0000
++++ vendor/libc-0.2.172/src/unix/solarish/mod.rs
+@@ -1421,6 +1421,8 @@ pub const EBFONT: c_int = 57;
+ pub const EOWNERDEAD: c_int = 58;
+ pub const ENOTRECOVERABLE: c_int = 59;
+ pub const ENOSTR: c_int = 60;
++// This is not supported but is required for xattr
++pub const ENOATTR: c_int = ENODATA;
+ pub const ENODATA: c_int = 61;
+ pub const ETIME: c_int = 62;
+ pub const ENOSR: c_int = 63;
diff --git a/rust197/patches/patch-vendor_libc-0.2.175_src_unix_bsd_netbsdlike_netbsd_mod.rs b/rust197/patches/patch-vendor_libc-0.2.175_src_unix_bsd_netbsdlike_netbsd_mod.rs
new file mode 100644
index 0000000000..693a9443e8
--- /dev/null
+++ b/rust197/patches/patch-vendor_libc-0.2.175_src_unix_bsd_netbsdlike_netbsd_mod.rs
@@ -0,0 +1,16 @@
+$NetBSD: patch-vendor_libc-0.2.175_src_unix_bsd_netbsdlike_netbsd_mod.rs,v 1.1 2026/04/02 19:06:34 wiz Exp $
+
+Use __pthread_spin_t to define pthread_spin_t, not c_uchar which
+isn't universally this type on the various NetBSD targets.
+
+--- vendor/libc-0.2.175/src/unix/bsd/netbsdlike/netbsd/mod.rs.orig	2025-12-28 21:19:19.046785602 +0000
++++ vendor/libc-0.2.175/src/unix/bsd/netbsdlike/netbsd/mod.rs
+@@ -15,7 +15,7 @@ pub type lwpid_t = c_uint;
+ pub type shmatt_t = c_uint;
+ pub type cpuid_t = c_ulong;
+ pub type cpuset_t = _cpuset;
+-pub type pthread_spin_t = c_uchar;
++pub type pthread_spin_t = __pthread_spin_t;
+ pub type timer_t = c_int;
+ 
+ // elf.h
diff --git a/rust197/patches/patch-vendor_libc-0.2.175_src_unix_bsd_netbsdlike_netbsd_riscv64.rs b/rust197/patches/patch-vendor_libc-0.2.175_src_unix_bsd_netbsdlike_netbsd_riscv64.rs
new file mode 100644
index 0000000000..986f0dc42c
--- /dev/null
+++ b/rust197/patches/patch-vendor_libc-0.2.175_src_unix_bsd_netbsdlike_netbsd_riscv64.rs
@@ -0,0 +1,71 @@
+$NetBSD: patch-vendor_libc-0.2.175_src_unix_bsd_netbsdlike_netbsd_riscv64.rs,v 1.2 2026/04/02 19:06:34 wiz Exp $
+
+Unbreak this module.
+
+I admit to this entirely being based on "cargo cult" and based on
+what the compiler told me, but at least the rust compiler (cross-)builds
+for NetBSD/risc64 with this, whereas it did not earlier.
+
+--- vendor/libc-0.2.175/src/unix/bsd/netbsdlike/netbsd/riscv64.rs.orig	2025-11-02 16:57:14.244169978 +0000
++++ vendor/libc-0.2.175/src/unix/bsd/netbsdlike/netbsd/riscv64.rs
+@@ -1,28 +1,48 @@
+-use PT_FIRSTMACH;
+-
+ use crate::prelude::*;
++use crate::PT_FIRSTMACH;
+ 
+ pub type __greg_t = u64;
+-pub type __cpu_simple_lock_nv_t = c_int;
+-pub type __gregset = [__greg_t; _NGREG];
+-pub type __fregset = [__freg; _NFREG];
++pub type __cpu_simple_lock_nv_t = c_uint;
++pub type __gregset_t = [__greg_t; _NGREG];
++pub type __fregset_t = [__fpreg; _NFREG];
++
++s_no_extra_traits! {
++    pub union __fpreg {
++        pub u_u64: u64,
++        pub u_d: c_double,
++    }
++}
+ 
+ s! {
+     pub struct mcontext_t {
+-        pub __gregs: __gregset,
+-        pub __fregs: __fpregset,
++        pub __gregs: __gregset_t,
++        pub __fregs: __fregset_t,
+         __spare: [crate::__greg_t; 7],
+     }
+ }
+ 
+-s_no_extra_traits! {
+-    pub union __fpreg {
+-        pub u_u64: u64,
+-        pub u_d: c_double,
++cfg_if! {
++    if #[cfg(feature = "extra_traits")] {
++        impl PartialEq for __fpreg {
++            fn eq(&self, other: &__fpreg) -> bool {
++                unsafe { self.u_u64 == other.u_u64 || self.u_d == other.u_d }
++            }
++        }
++        impl Eq for __fpreg {}
++        impl hash::Hash for __fpreg {
++            fn hash<H: hash::Hasher>(&self, state: &mut H) {
++                unsafe {
++                    self.u_u64.hash(state);
++                }
++            }
++        }
+     }
+ }
+ 
+-pub(crate) const _ALIGNBYTES: usize = size_of::<c_long>() - 1;
++// gcc for riscv64 defines `BIGGEST_ALIGNMENT`, but it's mesured in bits.
++pub(crate) const __BIGGEST_ALIGNMENT_IN_BITS__: usize = 128;
++// `_ALIGNBYTES` is measured in, well, bytes.
++pub(crate) const _ALIGNBYTES: usize = (__BIGGEST_ALIGNMENT_IN_BITS__ / 8) - 1;
+ 
+ pub const PT_GETREGS: c_int = PT_FIRSTMACH + 0;
+ pub const PT_SETREGS: c_int = PT_FIRSTMACH + 1;
diff --git a/rust197/patches/patch-vendor_libc-0.2.177_src_unix_bsd_netbsdlike_netbsd_m68k.rs b/rust197/patches/patch-vendor_libc-0.2.177_src_unix_bsd_netbsdlike_netbsd_m68k.rs
new file mode 100644
index 0000000000..ec9782f6c8
--- /dev/null
+++ b/rust197/patches/patch-vendor_libc-0.2.177_src_unix_bsd_netbsdlike_netbsd_m68k.rs
@@ -0,0 +1,17 @@
+$NetBSD: patch-vendor_libc-0.2.177_src_unix_bsd_netbsdlike_netbsd_m68k.rs,v 1.1 2026/04/02 19:06:34 wiz Exp $
+
+Add cpu-specific file for m68k on NetBSD.
+
+--- /dev/null	2026-02-25 04:15:52.295235767 +0000
++++ vendor/libc-0.2.177/src/unix/bsd/netbsdlike/netbsd/m68k.rs	2026-02-25 10:17:54.356620620 +0000
+@@ -0,0 +1,10 @@
++use crate::prelude::*;
++use crate::PT_FIRSTMACH;
++
++pub type __cpu_simple_lock_nv_t = u8;
++
++pub(crate) const _ALIGNBYTES: usize = size_of::<c_int>() - 1;
++
++pub const PT_STEP: c_int = PT_FIRSTMACH + 0;
++pub const PT_GETREGS: c_int = PT_FIRSTMACH + 1;
++pub const PT_SETREGS: c_int = PT_FIRSTMACH + 2;
diff --git a/rust197/patches/patch-vendor_libc-0.2.177_src_unix_bsd_netbsdlike_netbsd_mod.rs b/rust197/patches/patch-vendor_libc-0.2.177_src_unix_bsd_netbsdlike_netbsd_mod.rs
new file mode 100644
index 0000000000..a73e4e1ab1
--- /dev/null
+++ b/rust197/patches/patch-vendor_libc-0.2.177_src_unix_bsd_netbsdlike_netbsd_mod.rs
@@ -0,0 +1,28 @@
+$NetBSD: patch-vendor_libc-0.2.177_src_unix_bsd_netbsdlike_netbsd_mod.rs,v 1.1 2026/04/02 19:06:34 wiz Exp $
+
+Use __pthread_spin_t to define pthread_spin_t, not c_uchar which
+isn't universally this type on the various NetBSD targets.
+
+Also add m68k target.
+
+--- vendor/libc-0.2.177/src/unix/bsd/netbsdlike/netbsd/mod.rs.orig	2026-02-11 07:30:54.000000000 +0000
++++ vendor/libc-0.2.177/src/unix/bsd/netbsdlike/netbsd/mod.rs
+@@ -15,7 +15,7 @@ pub type lwpid_t = c_uint;
+ pub type shmatt_t = c_uint;
+ pub type cpuid_t = c_ulong;
+ pub type cpuset_t = _cpuset;
+-pub type pthread_spin_t = c_uchar;
++pub type pthread_spin_t = __pthread_spin_t;
+ pub type timer_t = c_int;
+ 
+ // elf.h
+@@ -3001,6 +3001,9 @@ cfg_if! {
+     } else if #[cfg(target_arch = "riscv64")] {
+         mod riscv64;
+         pub use self::riscv64::*;
++    } else if #[cfg(target_arch = "m68k")] {
++        mod m68k;
++        pub use self::m68k::*;
+     } else {
+         // Unknown target_arch
+     }
diff --git a/rust197/patches/patch-vendor_libc-0.2.177_src_unix_bsd_netbsdlike_netbsd_riscv64.rs b/rust197/patches/patch-vendor_libc-0.2.177_src_unix_bsd_netbsdlike_netbsd_riscv64.rs
new file mode 100644
index 0000000000..6de8bf2df5
--- /dev/null
+++ b/rust197/patches/patch-vendor_libc-0.2.177_src_unix_bsd_netbsdlike_netbsd_riscv64.rs
@@ -0,0 +1,71 @@
+$NetBSD: patch-vendor_libc-0.2.177_src_unix_bsd_netbsdlike_netbsd_riscv64.rs,v 1.1 2026/04/02 19:06:34 wiz Exp $
+
+Unbreak this module.
+
+I admit to this entirely being based on "cargo cult" and based on
+what the compiler told me, but at least the rust compiler (cross-)builds
+for NetBSD/risc64 with this, whereas it did not earlier.
+
+--- vendor/libc-0.2.177/src/unix/bsd/netbsdlike/netbsd/riscv64.rs.orig	2025-11-02 16:57:14.244169978 +0000
++++ vendor/libc-0.2.177/src/unix/bsd/netbsdlike/netbsd/riscv64.rs
+@@ -1,28 +1,48 @@
+-use PT_FIRSTMACH;
+-
+ use crate::prelude::*;
++use crate::PT_FIRSTMACH;
+ 
+ pub type __greg_t = u64;
+-pub type __cpu_simple_lock_nv_t = c_int;
+-pub type __gregset = [__greg_t; _NGREG];
+-pub type __fregset = [__freg; _NFREG];
++pub type __cpu_simple_lock_nv_t = c_uint;
++pub type __gregset_t = [__greg_t; _NGREG];
++pub type __fregset_t = [__fpreg; _NFREG];
++
++s_no_extra_traits! {
++    pub union __fpreg {
++        pub u_u64: u64,
++        pub u_d: c_double,
++    }
++}
+ 
+ s! {
+     pub struct mcontext_t {
+-        pub __gregs: __gregset,
+-        pub __fregs: __fpregset,
++        pub __gregs: __gregset_t,
++        pub __fregs: __fregset_t,
+         __spare: [crate::__greg_t; 7],
+     }
+ }
+ 
+-s_no_extra_traits! {
+-    pub union __fpreg {
+-        pub u_u64: u64,
+-        pub u_d: c_double,
++cfg_if! {
++    if #[cfg(feature = "extra_traits")] {
++        impl PartialEq for __fpreg {
++            fn eq(&self, other: &__fpreg) -> bool {
++                unsafe { self.u_u64 == other.u_u64 || self.u_d == other.u_d }
++            }
++        }
++        impl Eq for __fpreg {}
++        impl hash::Hash for __fpreg {
++            fn hash<H: hash::Hasher>(&self, state: &mut H) {
++                unsafe {
++                    self.u_u64.hash(state);
++                }
++            }
++        }
+     }
+ }
+ 
+-pub(crate) const _ALIGNBYTES: usize = size_of::<c_long>() - 1;
++// gcc for riscv64 defines `BIGGEST_ALIGNMENT`, but it's mesured in bits.
++pub(crate) const __BIGGEST_ALIGNMENT_IN_BITS__: usize = 128;
++// `_ALIGNBYTES` is measured in, well, bytes.
++pub(crate) const _ALIGNBYTES: usize = (__BIGGEST_ALIGNMENT_IN_BITS__ / 8) - 1;
+ 
+ pub const PT_GETREGS: c_int = PT_FIRSTMACH + 0;
+ pub const PT_SETREGS: c_int = PT_FIRSTMACH + 1;
diff --git a/rust197/patches/patch-vendor_libc-0.2.180_src_unix_bsd_netbsdlike_netbsd_m68k.rs b/rust197/patches/patch-vendor_libc-0.2.180_src_unix_bsd_netbsdlike_netbsd_m68k.rs
new file mode 100644
index 0000000000..f7f123a071
--- /dev/null
+++ b/rust197/patches/patch-vendor_libc-0.2.180_src_unix_bsd_netbsdlike_netbsd_m68k.rs
@@ -0,0 +1,17 @@
+$NetBSD: patch-vendor_libc-0.2.180_src_unix_bsd_netbsdlike_netbsd_m68k.rs,v 1.1 2026/05/07 13:16:15 wiz Exp $
+
+Add cpu-specific file for m68k on NetBSD.
+
+--- /dev/null	2026-04-16 15:19:59.503167932 +0000
++++ vendor/libc-0.2.180/src/unix/bsd/netbsdlike/netbsd/m68k.rs	2026-04-16 15:19:11.760619011 +0000
+@@ -0,0 +1,10 @@
++use crate::prelude::*;
++use crate::PT_FIRSTMACH;
++
++pub type __cpu_simple_lock_nv_t = u8;
++
++pub(crate) const _ALIGNBYTES: usize = size_of::<c_int>() - 1;
++
++pub const PT_STEP: c_int = PT_FIRSTMACH + 0;
++pub const PT_GETREGS: c_int = PT_FIRSTMACH + 1;
++pub const PT_SETREGS: c_int = PT_FIRSTMACH + 2;
diff --git a/rust197/patches/patch-vendor_libc-0.2.180_src_unix_bsd_netbsdlike_netbsd_mod.rs b/rust197/patches/patch-vendor_libc-0.2.180_src_unix_bsd_netbsdlike_netbsd_mod.rs
new file mode 100644
index 0000000000..dc8f0fd284
--- /dev/null
+++ b/rust197/patches/patch-vendor_libc-0.2.180_src_unix_bsd_netbsdlike_netbsd_mod.rs
@@ -0,0 +1,16 @@
+$NetBSD: patch-vendor_libc-0.2.180_src_unix_bsd_netbsdlike_netbsd_mod.rs,v 1.1 2026/05/07 13:16:15 wiz Exp $
+
+Add m68k target.
+
+--- vendor/libc-0.2.180/src/unix/bsd/netbsdlike/netbsd/mod.rs.orig	2026-04-16 15:19:35.521206884 +0000
++++ vendor/libc-0.2.180/src/unix/bsd/netbsdlike/netbsd/mod.rs
+@@ -2442,6 +2442,9 @@ cfg_if! {
+     } else if #[cfg(target_arch = "riscv64")] {
+         mod riscv64;
+         pub use self::riscv64::*;
++    } else if #[cfg(target_arch = "m68k")] {
++        mod m68k;
++        pub use self::m68k::*;
+     } else {
+         // Unknown target_arch
+     }
diff --git a/rust197/patches/patch-vendor_libc-0.2.183_src_unix_bsd_netbsdlike_netbsd_m68k.rs b/rust197/patches/patch-vendor_libc-0.2.183_src_unix_bsd_netbsdlike_netbsd_m68k.rs
new file mode 100644
index 0000000000..7cfcdcb431
--- /dev/null
+++ b/rust197/patches/patch-vendor_libc-0.2.183_src_unix_bsd_netbsdlike_netbsd_m68k.rs
@@ -0,0 +1,17 @@
+$NetBSD: patch-vendor_libc-0.2.180_src_unix_bsd_netbsdlike_netbsd_m68k.rs,v 1.1 2026/05/07 13:16:15 wiz Exp $
+
+Add cpu-specific file for m68k on NetBSD.
+
+--- /dev/null	2026-04-16 15:19:59.503167932 +0000
++++ vendor/libc-0.2.183/src/unix/bsd/netbsdlike/netbsd/m68k.rs	2026-04-16 15:19:11.760619011 +0000
+@@ -0,0 +1,10 @@
++use crate::prelude::*;
++use crate::PT_FIRSTMACH;
++
++pub type __cpu_simple_lock_nv_t = u8;
++
++pub(crate) const _ALIGNBYTES: usize = size_of::<c_int>() - 1;
++
++pub const PT_STEP: c_int = PT_FIRSTMACH + 0;
++pub const PT_GETREGS: c_int = PT_FIRSTMACH + 1;
++pub const PT_SETREGS: c_int = PT_FIRSTMACH + 2;
diff --git a/rust197/patches/patch-vendor_libc-0.2.183_src_unix_bsd_netbsdlike_netbsd_mod.rs b/rust197/patches/patch-vendor_libc-0.2.183_src_unix_bsd_netbsdlike_netbsd_mod.rs
new file mode 100644
index 0000000000..3ca62878d2
--- /dev/null
+++ b/rust197/patches/patch-vendor_libc-0.2.183_src_unix_bsd_netbsdlike_netbsd_mod.rs
@@ -0,0 +1,16 @@
+$NetBSD: patch-vendor_libc-0.2.180_src_unix_bsd_netbsdlike_netbsd_mod.rs,v 1.1 2026/05/07 13:16:15 wiz Exp $
+
+Add m68k target.
+
+--- vendor/libc-0.2.183/src/unix/bsd/netbsdlike/netbsd/mod.rs.orig	2026-04-16 15:19:35.521206884 +0000
++++ vendor/libc-0.2.183/src/unix/bsd/netbsdlike/netbsd/mod.rs
+@@ -2442,6 +2442,9 @@ cfg_if! {
+     } else if #[cfg(target_arch = "riscv64")] {
+         mod riscv64;
+         pub use self::riscv64::*;
++    } else if #[cfg(target_arch = "m68k")] {
++        mod m68k;
++        pub use self::m68k::*;
+     } else {
+         // Unknown target_arch
+     }
diff --git a/rust197/patches/patch-vendor_libc-0.2.184_src_unix_bsd_netbsdlike_netbsd_m68k.rs b/rust197/patches/patch-vendor_libc-0.2.184_src_unix_bsd_netbsdlike_netbsd_m68k.rs
new file mode 100644
index 0000000000..3b497f33de
--- /dev/null
+++ b/rust197/patches/patch-vendor_libc-0.2.184_src_unix_bsd_netbsdlike_netbsd_m68k.rs
@@ -0,0 +1,17 @@
+$NetBSD: patch-vendor_libc-0.2.180_src_unix_bsd_netbsdlike_netbsd_m68k.rs,v 1.1 2026/05/07 13:16:15 wiz Exp $
+
+Add cpu-specific file for m68k on NetBSD.
+
+--- /dev/null	2026-04-16 15:19:59.503167932 +0000
++++ vendor/libc-0.2.184/src/unix/bsd/netbsdlike/netbsd/m68k.rs	2026-04-16 15:19:11.760619011 +0000
+@@ -0,0 +1,10 @@
++use crate::prelude::*;
++use crate::PT_FIRSTMACH;
++
++pub type __cpu_simple_lock_nv_t = u8;
++
++pub(crate) const _ALIGNBYTES: usize = size_of::<c_int>() - 1;
++
++pub const PT_STEP: c_int = PT_FIRSTMACH + 0;
++pub const PT_GETREGS: c_int = PT_FIRSTMACH + 1;
++pub const PT_SETREGS: c_int = PT_FIRSTMACH + 2;
diff --git a/rust197/patches/patch-vendor_libc-0.2.184_src_unix_bsd_netbsdlike_netbsd_mod.rs b/rust197/patches/patch-vendor_libc-0.2.184_src_unix_bsd_netbsdlike_netbsd_mod.rs
new file mode 100644
index 0000000000..888474f5fd
--- /dev/null
+++ b/rust197/patches/patch-vendor_libc-0.2.184_src_unix_bsd_netbsdlike_netbsd_mod.rs
@@ -0,0 +1,16 @@
+$NetBSD: patch-vendor_libc-0.2.180_src_unix_bsd_netbsdlike_netbsd_mod.rs,v 1.1 2026/05/07 13:16:15 wiz Exp $
+
+Add m68k target.
+
+--- vendor/libc-0.2.180/src/unix/bsd/netbsdlike/netbsd/mod.rs.orig	2026-04-16 15:19:35.521206884 +0000
++++ vendor/libc-0.2.184/src/unix/bsd/netbsdlike/netbsd/mod.rs
+@@ -2442,6 +2442,9 @@ cfg_if! {
+     } else if #[cfg(target_arch = "riscv64")] {
+         mod riscv64;
+         pub use self::riscv64::*;
++    } else if #[cfg(target_arch = "m68k")] {
++        mod m68k;
++        pub use self::m68k::*;
+     } else {
+         // Unknown target_arch
+     }
diff --git a/rust197/patches/patch-vendor_libc-0.2.185_src_unix_bsd_netbsdlike_netbsd_m68k.rs b/rust197/patches/patch-vendor_libc-0.2.185_src_unix_bsd_netbsdlike_netbsd_m68k.rs
new file mode 100644
index 0000000000..5413768f7e
--- /dev/null
+++ b/rust197/patches/patch-vendor_libc-0.2.185_src_unix_bsd_netbsdlike_netbsd_m68k.rs
@@ -0,0 +1,17 @@
+$NetBSD: patch-vendor_libc-0.2.180_src_unix_bsd_netbsdlike_netbsd_m68k.rs,v 1.1 2026/05/07 13:16:15 wiz Exp $
+
+Add cpu-specific file for m68k on NetBSD.
+
+--- /dev/null	2026-04-16 15:19:59.503167932 +0000
++++ vendor/libc-0.2.185/src/unix/bsd/netbsdlike/netbsd/m68k.rs	2026-04-16 15:19:11.760619011 +0000
+@@ -0,0 +1,10 @@
++use crate::prelude::*;
++use crate::PT_FIRSTMACH;
++
++pub type __cpu_simple_lock_nv_t = u8;
++
++pub(crate) const _ALIGNBYTES: usize = size_of::<c_int>() - 1;
++
++pub const PT_STEP: c_int = PT_FIRSTMACH + 0;
++pub const PT_GETREGS: c_int = PT_FIRSTMACH + 1;
++pub const PT_SETREGS: c_int = PT_FIRSTMACH + 2;
diff --git a/rust197/patches/patch-vendor_libc-0.2.185_src_unix_bsd_netbsdlike_netbsd_mod.rs b/rust197/patches/patch-vendor_libc-0.2.185_src_unix_bsd_netbsdlike_netbsd_mod.rs
new file mode 100644
index 0000000000..e5b4ad6e2d
--- /dev/null
+++ b/rust197/patches/patch-vendor_libc-0.2.185_src_unix_bsd_netbsdlike_netbsd_mod.rs
@@ -0,0 +1,16 @@
+$NetBSD: patch-vendor_libc-0.2.180_src_unix_bsd_netbsdlike_netbsd_mod.rs,v 1.1 2026/05/07 13:16:15 wiz Exp $
+
+Add m68k target.
+
+--- vendor/libc-0.2.185/src/unix/bsd/netbsdlike/netbsd/mod.rs.orig	2026-04-16 15:19:35.521206884 +0000
++++ vendor/libc-0.2.185/src/unix/bsd/netbsdlike/netbsd/mod.rs
+@@ -2442,6 +2442,9 @@ cfg_if! {
+     } else if #[cfg(target_arch = "riscv64")] {
+         mod riscv64;
+         pub use self::riscv64::*;
++    } else if #[cfg(target_arch = "m68k")] {
++        mod m68k;
++        pub use self::m68k::*;
+     } else {
+         // Unknown target_arch
+     }
diff --git a/rust197/patches/patch-vendor_libc-0.2.186_src_unix_bsd_netbsdlike_netbsd_m68k.rs b/rust197/patches/patch-vendor_libc-0.2.186_src_unix_bsd_netbsdlike_netbsd_m68k.rs
new file mode 100644
index 0000000000..02c634ce14
--- /dev/null
+++ b/rust197/patches/patch-vendor_libc-0.2.186_src_unix_bsd_netbsdlike_netbsd_m68k.rs
@@ -0,0 +1,17 @@
+$NetBSD: patch-vendor_libc-0.2.180_src_unix_bsd_netbsdlike_netbsd_m68k.rs,v 1.1 2026/05/07 13:16:15 wiz Exp $
+
+Add cpu-specific file for m68k on NetBSD.
+
+--- /dev/null	2026-04-16 15:19:59.503167932 +0000
++++ vendor/libc-0.2.186/src/unix/bsd/netbsdlike/netbsd/m68k.rs	2026-04-16 15:19:11.760619011 +0000
+@@ -0,0 +1,10 @@
++use crate::prelude::*;
++use crate::PT_FIRSTMACH;
++
++pub type __cpu_simple_lock_nv_t = u8;
++
++pub(crate) const _ALIGNBYTES: usize = size_of::<c_int>() - 1;
++
++pub const PT_STEP: c_int = PT_FIRSTMACH + 0;
++pub const PT_GETREGS: c_int = PT_FIRSTMACH + 1;
++pub const PT_SETREGS: c_int = PT_FIRSTMACH + 2;
diff --git a/rust197/patches/patch-vendor_libc-0.2.186_src_unix_bsd_netbsdlike_netbsd_mod.rs b/rust197/patches/patch-vendor_libc-0.2.186_src_unix_bsd_netbsdlike_netbsd_mod.rs
new file mode 100644
index 0000000000..4225ee8ee5
--- /dev/null
+++ b/rust197/patches/patch-vendor_libc-0.2.186_src_unix_bsd_netbsdlike_netbsd_mod.rs
@@ -0,0 +1,16 @@
+$NetBSD: patch-vendor_libc-0.2.180_src_unix_bsd_netbsdlike_netbsd_mod.rs,v 1.1 2026/05/07 13:16:15 wiz Exp $
+
+Add m68k target.
+
+--- vendor/libc-0.2.186/src/unix/bsd/netbsdlike/netbsd/mod.rs.orig	2026-04-16 15:19:35.521206884 +0000
++++ vendor/libc-0.2.186/src/unix/bsd/netbsdlike/netbsd/mod.rs
+@@ -2442,6 +2442,9 @@ cfg_if! {
+     } else if #[cfg(target_arch = "riscv64")] {
+         mod riscv64;
+         pub use self::riscv64::*;
++    } else if #[cfg(target_arch = "m68k")] {
++        mod m68k;
++        pub use self::m68k::*;
+     } else {
+         // Unknown target_arch
+     }
diff --git a/rust197/patches/patch-vendor_line-index-0.1.2_src_lib.rs b/rust197/patches/patch-vendor_line-index-0.1.2_src_lib.rs
new file mode 100644
index 0000000000..df65062259
--- /dev/null
+++ b/rust197/patches/patch-vendor_line-index-0.1.2_src_lib.rs
@@ -0,0 +1,42 @@
+$NetBSD: patch-vendor_line-index-0.1.2_src_lib.rs,v 1.2 2025/08/25 17:51:13 wiz Exp $
+
+Do not attempt use of neon extension in big-endian mode.
+
+--- vendor/line-index-0.1.2/src/lib.rs.orig	2025-02-03 07:59:39.771200202 +0000
++++ vendor/line-index-0.1.2/src/lib.rs
+@@ -235,7 +235,7 @@ fn analyze_source_file_dispatch(
+     }
+ }
+ 
+-#[cfg(target_arch = "aarch64")]
++#[cfg(all(target_arch = "aarch64", target_endian = "little"))]
+ fn analyze_source_file_dispatch(
+     src: &str,
+     lines: &mut Vec<TextSize>,
+@@ -347,7 +347,7 @@ unsafe fn analyze_source_file_sse2(
+ }
+ 
+ #[target_feature(enable = "neon")]
+-#[cfg(target_arch = "aarch64")]
++#[cfg(all(target_arch = "aarch64", target_endian = "little"))]
+ #[inline]
+ // See https://community.arm.com/arm-community-blogs/b/infrastructure-solutions-blog/posts/porting-x86-vector-bitmask-optimizations-to-arm-neon
+ //
+@@ -362,7 +362,7 @@ unsafe fn move_mask(v: std::arch::aarch6
+ }
+ 
+ #[target_feature(enable = "neon")]
+-#[cfg(target_arch = "aarch64")]
++#[cfg(all(target_arch = "aarch64", target_endian = "little"))]
+ unsafe fn analyze_source_file_neon(
+     src: &str,
+     lines: &mut Vec<TextSize>,
+@@ -441,7 +441,7 @@ unsafe fn analyze_source_file_neon(
+     }
+ }
+ 
+-#[cfg(not(any(target_arch = "x86", target_arch = "x86_64", target_arch = "aarch64")))]
++#[cfg(not(any(target_arch = "x86", target_arch = "x86_64", all(target_arch = "aarch64", target_endian = "little"))))]
+ // The target (or compiler version) does not support SSE2 ...
+ fn analyze_source_file_dispatch(
+     src: &str,
diff --git a/rust197/patches/patch-vendor_lzma-sys-0.1.20_config.h b/rust197/patches/patch-vendor_lzma-sys-0.1.20_config.h
new file mode 100644
index 0000000000..e2824c4f23
--- /dev/null
+++ b/rust197/patches/patch-vendor_lzma-sys-0.1.20_config.h
@@ -0,0 +1,25 @@
+$NetBSD: patch-vendor_lzma-sys-0.1.20_config.h,v 1.2 2025/08/25 17:51:13 wiz Exp $
+
+clock_gettime() is available also on NetBSD.
+
+This takes care of this build error:
+
+  cargo:warning=xz-5.2/src/common/mythread.h: In function 'mythread_condtime_set':
+  cargo:warning=xz-5.2/src/common/mythread.h:312:9: error: implicit declaration of function 'gettimeofday' [-Wimplicit-function-declaration]
+  cargo:warning=  312 |         gettimeofday(&now, NULL);
+  cargo:warning=      |         ^~~~~~~~~~~~
+
+which popped up when switching powerpc to using gcc14, but strangely
+was not triggered by gcc12 or in-tree gcc.
+
+--- vendor/lzma-sys-0.1.20/config.h.orig	2025-02-11 23:15:56.129312069 +0000
++++ vendor/lzma-sys-0.1.20/config.h
+@@ -39,7 +39,7 @@
+     #define MYTHREAD_POSIX 1
+ #endif
+ 
+-#if defined(__sun)
++#if defined(__sun) || defined(__NetBSD__)
+     #define HAVE_CLOCK_GETTIME 1
+     #define HAVE_DECL_CLOCK_MONOTONIC 1
+ #endif
diff --git a/rust197/patches/patch-vendor_memchr-2.7.4_src_arch_aarch64_memchr.rs b/rust197/patches/patch-vendor_memchr-2.7.4_src_arch_aarch64_memchr.rs
new file mode 100644
index 0000000000..1ca0cfa6c0
--- /dev/null
+++ b/rust197/patches/patch-vendor_memchr-2.7.4_src_arch_aarch64_memchr.rs
@@ -0,0 +1,24 @@
+$NetBSD: patch-vendor_memchr-2.7.4_src_arch_aarch64_memchr.rs,v 1.3 2025/08/25 17:51:13 wiz Exp $
+
+Don't try to do neon / SIMD on big-endian aarch64.
+
+--- vendor/memchr-2.7.4/src/arch/aarch64/memchr.rs.orig	2024-09-22 14:55:32.455792108 +0000
++++ vendor/memchr-2.7.4/src/arch/aarch64/memchr.rs
+@@ -8,7 +8,7 @@ available for `aarch64` targets.)
+ 
+ macro_rules! defraw {
+     ($ty:ident, $find:ident, $start:ident, $end:ident, $($needles:ident),+) => {{
+-        #[cfg(target_feature = "neon")]
++        #[cfg(all(target_feature = "neon", target_endian = "little"))]
+         {
+             use crate::arch::aarch64::neon::memchr::$ty;
+ 
+@@ -19,7 +19,7 @@ macro_rules! defraw {
+             // enabled.
+             $ty::new_unchecked($($needles),+).$find($start, $end)
+         }
+-        #[cfg(not(target_feature = "neon"))]
++        #[cfg(not(all(target_feature = "neon", target_endian = "little")))]
+         {
+             use crate::arch::all::memchr::$ty;
+ 
diff --git a/rust197/patches/patch-vendor_memchr-2.7.4_src_arch_aarch64_mod.rs b/rust197/patches/patch-vendor_memchr-2.7.4_src_arch_aarch64_mod.rs
new file mode 100644
index 0000000000..405f6b67fb
--- /dev/null
+++ b/rust197/patches/patch-vendor_memchr-2.7.4_src_arch_aarch64_mod.rs
@@ -0,0 +1,15 @@
+$NetBSD: patch-vendor_memchr-2.7.4_src_arch_aarch64_mod.rs,v 1.3 2025/08/25 17:51:13 wiz Exp $
+
+Don't try to do neon / SIMD on big-endian aarch64.
+
+--- vendor/memchr-2.7.4/src/arch/aarch64/mod.rs.orig	2024-09-22 19:17:13.167426584 +0000
++++ vendor/memchr-2.7.4/src/arch/aarch64/mod.rs
+@@ -2,6 +2,8 @@
+ Vector algorithms for the `aarch64` target.
+ */
+ 
++#[cfg(target_endian = "little")]
+ pub mod neon;
+ 
++#[cfg(target_endian = "little")]
+ pub(crate) mod memchr;
diff --git a/rust197/patches/patch-vendor_memchr-2.7.4_src_memchr.rs b/rust197/patches/patch-vendor_memchr-2.7.4_src_memchr.rs
new file mode 100644
index 0000000000..382494dc1d
--- /dev/null
+++ b/rust197/patches/patch-vendor_memchr-2.7.4_src_memchr.rs
@@ -0,0 +1,128 @@
+$NetBSD: patch-vendor_memchr-2.7.4_src_memchr.rs,v 1.3 2025/08/25 17:51:13 wiz Exp $
+
+Don't try to do neon / SIMD on big-endian aarch64.
+
+--- vendor/memchr-2.7.4/src/memchr.rs.orig	2024-09-22 14:50:24.931022916 +0000
++++ vendor/memchr-2.7.4/src/memchr.rs
+@@ -518,14 +518,14 @@ unsafe fn memchr_raw(
+     {
+         crate::arch::wasm32::memchr::memchr_raw(needle, start, end)
+     }
+-    #[cfg(target_arch = "aarch64")]
++    #[cfg(all(target_arch = "aarch64", target_endian = "little"))]
+     {
+         crate::arch::aarch64::memchr::memchr_raw(needle, start, end)
+     }
+     #[cfg(not(any(
+         target_arch = "x86_64",
+         all(target_arch = "wasm32", target_feature = "simd128"),
+-        target_arch = "aarch64"
++        all(target_arch = "aarch64", target_endian = "little")
+     )))]
+     {
+         crate::arch::all::memchr::One::new(needle).find_raw(start, end)
+@@ -551,14 +551,14 @@ unsafe fn memrchr_raw(
+     {
+         crate::arch::wasm32::memchr::memrchr_raw(needle, start, end)
+     }
+-    #[cfg(target_arch = "aarch64")]
++    #[cfg(all(target_arch = "aarch64", target_endian = "little"))]
+     {
+         crate::arch::aarch64::memchr::memrchr_raw(needle, start, end)
+     }
+     #[cfg(not(any(
+         target_arch = "x86_64",
+         all(target_arch = "wasm32", target_feature = "simd128"),
+-        target_arch = "aarch64"
++        all(target_arch = "aarch64", target_endian = "little")
+     )))]
+     {
+         crate::arch::all::memchr::One::new(needle).rfind_raw(start, end)
+@@ -585,14 +585,14 @@ unsafe fn memchr2_raw(
+     {
+         crate::arch::wasm32::memchr::memchr2_raw(needle1, needle2, start, end)
+     }
+-    #[cfg(target_arch = "aarch64")]
++    #[cfg(all(target_arch = "aarch64", target_endian = "little"))]
+     {
+         crate::arch::aarch64::memchr::memchr2_raw(needle1, needle2, start, end)
+     }
+     #[cfg(not(any(
+         target_arch = "x86_64",
+         all(target_arch = "wasm32", target_feature = "simd128"),
+-        target_arch = "aarch64"
++        all(target_arch = "aarch64", target_endian = "little")
+     )))]
+     {
+         crate::arch::all::memchr::Two::new(needle1, needle2)
+@@ -620,7 +620,7 @@ unsafe fn memrchr2_raw(
+     {
+         crate::arch::wasm32::memchr::memrchr2_raw(needle1, needle2, start, end)
+     }
+-    #[cfg(target_arch = "aarch64")]
++    #[cfg(all(target_arch = "aarch64", target_endian = "little"))]
+     {
+         crate::arch::aarch64::memchr::memrchr2_raw(
+             needle1, needle2, start, end,
+@@ -629,7 +629,7 @@ unsafe fn memrchr2_raw(
+     #[cfg(not(any(
+         target_arch = "x86_64",
+         all(target_arch = "wasm32", target_feature = "simd128"),
+-        target_arch = "aarch64"
++        all(target_arch = "aarch64", target_endian = "little")
+     )))]
+     {
+         crate::arch::all::memchr::Two::new(needle1, needle2)
+@@ -662,7 +662,7 @@ unsafe fn memchr3_raw(
+             needle1, needle2, needle3, start, end,
+         )
+     }
+-    #[cfg(target_arch = "aarch64")]
++    #[cfg(all(target_arch = "aarch64", target_endian = "little"))]
+     {
+         crate::arch::aarch64::memchr::memchr3_raw(
+             needle1, needle2, needle3, start, end,
+@@ -671,7 +671,7 @@ unsafe fn memchr3_raw(
+     #[cfg(not(any(
+         target_arch = "x86_64",
+         all(target_arch = "wasm32", target_feature = "simd128"),
+-        target_arch = "aarch64"
++        all(target_arch = "aarch64", target_endian = "little")
+     )))]
+     {
+         crate::arch::all::memchr::Three::new(needle1, needle2, needle3)
+@@ -704,7 +704,7 @@ unsafe fn memrchr3_raw(
+             needle1, needle2, needle3, start, end,
+         )
+     }
+-    #[cfg(target_arch = "aarch64")]
++    #[cfg(all(target_arch = "aarch64", target_endian = "little"))]
+     {
+         crate::arch::aarch64::memchr::memrchr3_raw(
+             needle1, needle2, needle3, start, end,
+@@ -713,7 +713,7 @@ unsafe fn memrchr3_raw(
+     #[cfg(not(any(
+         target_arch = "x86_64",
+         all(target_arch = "wasm32", target_feature = "simd128"),
+-        target_arch = "aarch64"
++        all(target_arch = "aarch64", target_endian = "little")
+     )))]
+     {
+         crate::arch::all::memchr::Three::new(needle1, needle2, needle3)
+@@ -736,14 +736,14 @@ unsafe fn count_raw(needle: u8, start: *
+     {
+         crate::arch::wasm32::memchr::count_raw(needle, start, end)
+     }
+-    #[cfg(target_arch = "aarch64")]
++    #[cfg(all(target_arch = "aarch64", target_endian = "little"))]
+     {
+         crate::arch::aarch64::memchr::count_raw(needle, start, end)
+     }
+     #[cfg(not(any(
+         target_arch = "x86_64",
+         all(target_arch = "wasm32", target_feature = "simd128"),
+-        target_arch = "aarch64"
++        all(target_arch = "aarch64", target_endian = "little")
+     )))]
+     {
+         crate::arch::all::memchr::One::new(needle).count_raw(start, end)
diff --git a/rust197/patches/patch-vendor_memchr-2.7.4_src_memmem_searcher.rs b/rust197/patches/patch-vendor_memchr-2.7.4_src_memmem_searcher.rs
new file mode 100644
index 0000000000..ac7b8cd586
--- /dev/null
+++ b/rust197/patches/patch-vendor_memchr-2.7.4_src_memmem_searcher.rs
@@ -0,0 +1,78 @@
+$NetBSD: patch-vendor_memchr-2.7.4_src_memmem_searcher.rs,v 1.3 2025/08/25 17:51:13 wiz Exp $
+
+Don't try to use neon / SIMD on big-endian aarch64.
+
+--- vendor/memchr-2.7.4/src/memmem/searcher.rs.orig	2024-09-22 14:44:21.224731060 +0000
++++ vendor/memchr-2.7.4/src/memmem/searcher.rs
+@@ -3,7 +3,7 @@ use crate::arch::all::{
+     rabinkarp, twoway,
+ };
+ 
+-#[cfg(target_arch = "aarch64")]
++#[cfg(all(target_arch = "aarch64", target_endian = "little"))]
+ use crate::arch::aarch64::neon::packedpair as neon;
+ #[cfg(all(target_arch = "wasm32", target_feature = "simd128"))]
+ use crate::arch::wasm32::simd128::packedpair as simd128;
+@@ -129,7 +129,7 @@ impl Searcher {
+                 Searcher::twoway(needle, rabinkarp, prestrat)
+             }
+         }
+-        #[cfg(target_arch = "aarch64")]
++        #[cfg(all(target_arch = "aarch64", target_endian = "little"))]
+         {
+             if let Some(pp) = neon::Finder::with_pair(needle, pair) {
+                 if do_packed_search(needle) {
+@@ -152,7 +152,7 @@ impl Searcher {
+         #[cfg(not(any(
+             all(target_arch = "x86_64", target_feature = "sse2"),
+             all(target_arch = "wasm32", target_feature = "simd128"),
+-            target_arch = "aarch64"
++            all(target_arch = "aarch64", target_endian = "little")
+         )))]
+         {
+             if prefilter.is_none() {
+@@ -253,7 +253,7 @@ union SearcherKind {
+     avx2: crate::arch::x86_64::avx2::packedpair::Finder,
+     #[cfg(all(target_arch = "wasm32", target_feature = "simd128"))]
+     simd128: crate::arch::wasm32::simd128::packedpair::Finder,
+-    #[cfg(target_arch = "aarch64")]
++    #[cfg(all(target_arch = "aarch64", target_endian = "little"))]
+     neon: crate::arch::aarch64::neon::packedpair::Finder,
+ }
+ 
+@@ -421,7 +421,7 @@ unsafe fn searcher_kind_simd128(
+ /// # Safety
+ ///
+ /// Callers must ensure that the `searcher.kind.neon` union field is set.
+-#[cfg(target_arch = "aarch64")]
++#[cfg(all(target_arch = "aarch64", target_endian = "little"))]
+ unsafe fn searcher_kind_neon(
+     searcher: &Searcher,
+     _prestate: &mut PrefilterState,
+@@ -686,7 +686,7 @@ impl Prefilter {
+     }
+ 
+     /// Return a prefilter using a aarch64 neon vector algorithm.
+-    #[cfg(target_arch = "aarch64")]
++    #[cfg(all(target_arch = "aarch64", target_endian = "little"))]
+     #[inline]
+     fn neon(finder: neon::Finder, needle: &[u8]) -> Prefilter {
+         trace!("building aarch64 neon prefilter");
+@@ -763,7 +763,7 @@ union PrefilterKind {
+     avx2: crate::arch::x86_64::avx2::packedpair::Finder,
+     #[cfg(all(target_arch = "wasm32", target_feature = "simd128"))]
+     simd128: crate::arch::wasm32::simd128::packedpair::Finder,
+-    #[cfg(target_arch = "aarch64")]
++    #[cfg(all(target_arch = "aarch64", target_endian = "little"))]
+     neon: crate::arch::aarch64::neon::packedpair::Finder,
+ }
+ 
+@@ -852,7 +852,7 @@ unsafe fn prefilter_kind_simd128(
+ /// # Safety
+ ///
+ /// Callers must ensure that the `strat.kind.neon` union field is set.
+-#[cfg(target_arch = "aarch64")]
++#[cfg(all(target_arch = "aarch64", target_endian = "little"))]
+ unsafe fn prefilter_kind_neon(
+     strat: &Prefilter,
+     haystack: &[u8],
diff --git a/rust197/patches/patch-vendor_memchr-2.7.4_src_vector.rs b/rust197/patches/patch-vendor_memchr-2.7.4_src_vector.rs
new file mode 100644
index 0000000000..a778790a6b
--- /dev/null
+++ b/rust197/patches/patch-vendor_memchr-2.7.4_src_vector.rs
@@ -0,0 +1,15 @@
+$NetBSD: patch-vendor_memchr-2.7.4_src_vector.rs,v 1.3 2025/08/25 17:51:13 wiz Exp $
+
+Don't try to do neon / SIMD on big-endian aarch64.
+
+--- vendor/memchr-2.7.4/src/vector.rs.orig	2024-09-22 14:16:06.473207292 +0000
++++ vendor/memchr-2.7.4/src/vector.rs
+@@ -289,7 +289,7 @@ mod x86avx2 {
+     }
+ }
+ 
+-#[cfg(target_arch = "aarch64")]
++#[cfg(all(target_arch = "aarch64", target_endian = "little"))]
+ mod aarch64neon {
+     use core::arch::aarch64::*;
+ 
diff --git a/rust197/patches/patch-vendor_openssl-src-111.28.2+1.1.1w_openssl_Configurations_10-main.conf b/rust197/patches/patch-vendor_openssl-src-111.28.2+1.1.1w_openssl_Configurations_10-main.conf
new file mode 100644
index 0000000000..73143bcc7b
--- /dev/null
+++ b/rust197/patches/patch-vendor_openssl-src-111.28.2+1.1.1w_openssl_Configurations_10-main.conf
@@ -0,0 +1,18 @@
+$NetBSD: patch-vendor_openssl-src-111.28.2+1.1.1w_openssl_Configurations_10-main.conf,v 1.4 2025/10/18 17:14:36 he Exp $
+
+Replicate part of
+https://github.com/openssl/openssl/pull/15086
+
+--- vendor/openssl-src-111.28.2+1.1.1w/openssl/Configurations/10-main.conf.orig	2025-05-18 13:23:47.013841572 +0000
++++ vendor/openssl-src-111.28.2+1.1.1w/openssl/Configurations/10-main.conf
+@@ -943,6 +943,10 @@ my %targets = (
+         shared_cflag     => "-fPIC",
+         shared_extension => ".so.\$(SHLIB_VERSION_NUMBER)",
+     },
++    "NetBSD-generic32" => {
++        inherit_from    => [ "BSD-generic32" ],
++        ex_libs         => add(threads("-latomic")),
++    },
+     "BSD-generic64" => {
+         inherit_from     => [ "BSD-generic32" ],
+         bn_ops           => "SIXTY_FOUR_BIT_LONG",
diff --git a/rust197/patches/patch-vendor_openssl-src-111.28.2+1.1.1w_openssl_crypto_aria_aria.c b/rust197/patches/patch-vendor_openssl-src-111.28.2+1.1.1w_openssl_crypto_aria_aria.c
new file mode 100644
index 0000000000..9f96455bcb
--- /dev/null
+++ b/rust197/patches/patch-vendor_openssl-src-111.28.2+1.1.1w_openssl_crypto_aria_aria.c
@@ -0,0 +1,18 @@
+$NetBSD: patch-vendor_openssl-src-111.28.2+1.1.1w_openssl_crypto_aria_aria.c,v 1.1 2025/10/18 17:14:36 he Exp $
+
+Make this build if bswap32 is already defined, as for NetBSD/i586.
+
+--- vendor/openssl-src-111.28.2+1.1.1w/openssl/crypto/aria/aria.c.orig	2025-05-19 20:01:02.477323075 +0000
++++ vendor/openssl-src-111.28.2+1.1.1w/openssl/crypto/aria/aria.c
+@@ -32,9 +32,11 @@
+ #define rotl32(v, r) (((uint32_t)(v) << (r)) | ((uint32_t)(v) >> (32 - r)))
+ #define rotr32(v, r) (((uint32_t)(v) >> (r)) | ((uint32_t)(v) << (32 - r)))
+ 
++#ifndef bswap32
+ #define bswap32(v)                                          \
+     (((v) << 24) ^ ((v) >> 24) ^                            \
+     (((v) & 0x0000ff00) << 8) ^ (((v) & 0x00ff0000) >> 8))
++#endif
+ 
+ #define GET_U8_BE(X, Y) ((uint8_t)((X) >> ((3 - Y) * 8)))
+ #define GET_U32_BE(X, Y) (                                  \
diff --git a/rust197/patches/patch-vendor_openssl-src-111.28.2+1.1.1w_src_lib.rs b/rust197/patches/patch-vendor_openssl-src-111.28.2+1.1.1w_src_lib.rs
new file mode 100644
index 0000000000..278b50f295
--- /dev/null
+++ b/rust197/patches/patch-vendor_openssl-src-111.28.2+1.1.1w_src_lib.rs
@@ -0,0 +1,67 @@
+$NetBSD: patch-vendor_openssl-src-111.28.2+1.1.1w_src_lib.rs,v 1.5 2026/04/02 19:06:35 wiz Exp $
+
+Add the various NetBSD targets.
+
+--- vendor/openssl-src-111.28.2+1.1.1w/src/lib.rs.orig	2026-02-11 07:30:54.000000000 +0000
++++ vendor/openssl-src-111.28.2+1.1.1w/src/lib.rs
+@@ -239,6 +239,8 @@ impl Build {
+             "aarch64-unknown-freebsd" => "BSD-generic64",
+             "aarch64-unknown-linux-gnu" => "linux-aarch64",
+             "aarch64-unknown-linux-musl" => "linux-aarch64",
++            "aarch64-unknown-netbsd" => "BSD-generic64",
++            "aarch64_be-unknown-netbsd" => "BSD-generic64",
+             "aarch64-pc-windows-msvc" => "VC-WIN64-ARM",
+             "arm-linux-androideabi" => "linux-armv4",
+             "armv7-linux-androideabi" => "linux-armv4",
+@@ -249,14 +251,17 @@ impl Build {
+             "armv5te-unknown-linux-gnueabi" => "linux-armv4",
+             "armv5te-unknown-linux-musleabi" => "linux-armv4",
+             "armv6-unknown-freebsd" => "BSD-generic32",
++            "armv6-unknown-netbsd-eabihf" => "BSD-generic32",
+             "armv7-unknown-freebsd" => "BSD-generic32",
+             "armv7-unknown-linux-gnueabi" => "linux-armv4",
+             "armv7-unknown-linux-musleabi" => "linux-armv4",
+             "armv7-unknown-linux-gnueabihf" => "linux-armv4",
+             "armv7-unknown-linux-musleabihf" => "linux-armv4",
++            "armv7-unknown-netbsd-eabihf" => "BSD-generic32",
+             "asmjs-unknown-emscripten" => "gcc",
+             "i586-unknown-linux-gnu" => "linux-elf",
+             "i586-unknown-linux-musl" => "linux-elf",
++            "i586-unknown-netbsd" => "BSD-x86-elf",
+             "i686-apple-darwin" => "darwin-i386-cc",
+             "i686-linux-android" => "linux-elf",
+             "i686-pc-windows-gnu" => "mingw",
+@@ -264,8 +269,10 @@ impl Build {
+             "i686-unknown-freebsd" => "BSD-x86-elf",
+             "i686-unknown-linux-gnu" => "linux-elf",
+             "i686-unknown-linux-musl" => "linux-elf",
++            "i686-unknown-netbsd" => "BSD-x86-elf",
+             "loongarch64-unknown-linux-gnu" => "linux-generic64",
+             "loongarch64-unknown-linux-musl" => "linux-generic64",
++            "m68k-unknown-netbsd" => NetBSD-generic32,
+             "mips-unknown-linux-gnu" => "linux-mips32",
+             "mips-unknown-linux-musl" => "linux-mips32",
+             "mips64-unknown-linux-gnuabi64" => "linux64-mips64",
+@@ -274,9 +281,11 @@ impl Build {
+             "mips64el-unknown-linux-muslabi64" => "linux64-mips64",
+             "mipsel-unknown-linux-gnu" => "linux-mips32",
+             "mipsel-unknown-linux-musl" => "linux-mips32",
++            "mipsel-unknown-netbsd" => "NetBSD-generic32",
+             "powerpc-unknown-freebsd" => "BSD-generic32",
+             "powerpc-unknown-linux-gnu" => "linux-ppc",
+             "powerpc-unknown-linux-gnuspe" => "linux-ppc",
++            "powerpc-unknown-netbsd" => "NetBSD-generic32",
+             "powerpc64-unknown-freebsd" => "BSD-generic64",
+             "powerpc64-unknown-linux-gnu" => "linux-ppc64",
+             "powerpc64-unknown-linux-musl" => "linux-ppc64",
+@@ -284,8 +293,10 @@ impl Build {
+             "powerpc64le-unknown-linux-gnu" => "linux-ppc64le",
+             "powerpc64le-unknown-linux-musl" => "linux-ppc64le",
+             "riscv64gc-unknown-linux-gnu" => "linux-generic64",
++            "riscv64gc-unknown-netbsd" => "BSD-generic64",
+             "s390x-unknown-linux-gnu" => "linux64-s390x",
+             "s390x-unknown-linux-musl" => "linux64-s390x",
++            "sparc64-unknown-netbsd" => "BSD-generic64",
+             "x86_64-apple-darwin" => "darwin64-x86_64-cc",
+             "x86_64-linux-android" => "linux-x86_64",
+             "x86_64-pc-windows-gnu" => "mingw64",
diff --git a/rust197/patches/patch-vendor_openssl-src-300.5.0+3.5.0_openssl_Configurations_10-main.conf b/rust197/patches/patch-vendor_openssl-src-300.5.0+3.5.0_openssl_Configurations_10-main.conf
new file mode 100644
index 0000000000..8b8658489d
--- /dev/null
+++ b/rust197/patches/patch-vendor_openssl-src-300.5.0+3.5.0_openssl_Configurations_10-main.conf
@@ -0,0 +1,18 @@
+$NetBSD: patch-vendor_openssl-src-300.5.0+3.5.0_openssl_Configurations_10-main.conf,v 1.1 2025/10/18 17:14:36 he Exp $
+
+Replicate part of
+https://github.com/openssl/openssl/pull/15086
+
+--- vendor/openssl-src-300.5.0+3.5.0/openssl/Configurations/10-main.conf.orig	2025-05-20 09:03:49.120083364 +0000
++++ vendor/openssl-src-300.5.0+3.5.0/openssl/Configurations/10-main.conf
+@@ -1033,6 +1033,10 @@ my %targets = (
+         shared_target    => "bsd-gcc-shared",
+         shared_cflag     => "-fPIC",
+     },
++    "NetBSD-generic32" => {
++        inherit_from    => [ "BSD-generic32" ],
++        ex_libs         => add(threads("-latomic")),
++    },
+     "BSD-generic64" => {
+         inherit_from     => [ "BSD-generic32" ],
+         bn_ops           => "SIXTY_FOUR_BIT_LONG",
diff --git a/rust197/patches/patch-vendor_openssl-src-300.5.0+3.5.0_openssl_crypto_aria_aria.c b/rust197/patches/patch-vendor_openssl-src-300.5.0+3.5.0_openssl_crypto_aria_aria.c
new file mode 100644
index 0000000000..77c8b0f3e0
--- /dev/null
+++ b/rust197/patches/patch-vendor_openssl-src-300.5.0+3.5.0_openssl_crypto_aria_aria.c
@@ -0,0 +1,18 @@
+$NetBSD: patch-vendor_openssl-src-300.5.0+3.5.0_openssl_crypto_aria_aria.c,v 1.1 2025/10/18 17:14:36 he Exp $
+
+Make this build also if bswap32 is already defined, as for NetBSD/i586.
+
+--- vendor/openssl-src-300.5.0+3.5.0/openssl/crypto/aria/aria.c.orig	2025-05-19 20:04:00.808387729 +0000
++++ vendor/openssl-src-300.5.0+3.5.0/openssl/crypto/aria/aria.c
+@@ -32,9 +32,11 @@
+ #define rotl32(v, r) (((uint32_t)(v) << (r)) | ((uint32_t)(v) >> (32 - r)))
+ #define rotr32(v, r) (((uint32_t)(v) >> (r)) | ((uint32_t)(v) << (32 - r)))
+ 
++#ifndef bswap32
+ #define bswap32(v)                                          \
+     (((v) << 24) ^ ((v) >> 24) ^                            \
+     (((v) & 0x0000ff00) << 8) ^ (((v) & 0x00ff0000) >> 8))
++#endif
+ 
+ #define GET_U8_BE(X, Y) ((uint8_t)((X) >> ((3 - Y) * 8)))
+ #define GET_U32_BE(X, Y) (                                  \
diff --git a/rust197/patches/patch-vendor_openssl-src-300.5.0+3.5.0_src_lib.rs b/rust197/patches/patch-vendor_openssl-src-300.5.0+3.5.0_src_lib.rs
new file mode 100644
index 0000000000..11a1eaf2db
--- /dev/null
+++ b/rust197/patches/patch-vendor_openssl-src-300.5.0+3.5.0_src_lib.rs
@@ -0,0 +1,30 @@
+$NetBSD: patch-vendor_openssl-src-300.5.0+3.5.0_src_lib.rs,v 1.2 2026/04/02 19:06:35 wiz Exp $
+
+Make this build on NetBSD for arm6, mipsel and m68k as well.
+
+--- vendor/openssl-src-300.5.0+3.5.0/src/lib.rs.orig	2026-02-11 07:30:54.000000000 +0000
++++ vendor/openssl-src-300.5.0+3.5.0/src/lib.rs
+@@ -321,6 +321,7 @@ impl Build {
+             "armv5te-unknown-linux-gnueabi" => "linux-armv4",
+             "armv5te-unknown-linux-musleabi" => "linux-armv4",
+             "armv6-unknown-freebsd" => "BSD-generic32",
++            "armv6-unknown-netbsd-eabihf" => "BSD-generic32",
+             "armv6-alpine-linux-musleabihf" => "linux-armv6",
+             "armv7-unknown-freebsd" => "BSD-armv4",
+             "armv7-unknown-linux-gnueabi" => "linux-armv4",
+@@ -348,6 +349,7 @@ impl Build {
+             "i686-uwp-windows-msvc" => "VC-WIN32-UWP",
+             "loongarch64-unknown-linux-gnu" => "linux-generic64",
+             "loongarch64-unknown-linux-musl" => "linux-generic64",
++            "m68k-unknown-netbsd" => "NetBSD-generic32",
+             "mips-unknown-linux-gnu" => "linux-mips32",
+             "mips-unknown-linux-musl" => "linux-mips32",
+             "mips64-unknown-linux-gnuabi64" => "linux64-mips64",
+@@ -356,6 +358,7 @@ impl Build {
+             "mips64el-unknown-linux-muslabi64" => "linux64-mips64",
+             "mipsel-unknown-linux-gnu" => "linux-mips32",
+             "mipsel-unknown-linux-musl" => "linux-mips32",
++            "mipsel-unknown-netbsd" => "NetBSD-generic32",
+             "powerpc-unknown-freebsd" => "BSD-ppc",
+             "powerpc-unknown-linux-gnu" => "linux-ppc",
+             "powerpc-unknown-linux-gnuspe" => "linux-ppc",
diff --git a/rust197/patches/patch-vendor_openssl-src-300.6.0+3.6.2_openssl_Configurations_10-main.conf b/rust197/patches/patch-vendor_openssl-src-300.6.0+3.6.2_openssl_Configurations_10-main.conf
new file mode 100644
index 0000000000..17ad0b79c0
--- /dev/null
+++ b/rust197/patches/patch-vendor_openssl-src-300.6.0+3.6.2_openssl_Configurations_10-main.conf
@@ -0,0 +1,18 @@
+$NetBSD: patch-vendor_openssl-src-300.5.4+3.5.4_openssl_Configurations_10-main.conf,v 1.1 2026/04/02 19:06:35 wiz Exp $
+
+Replicate part of
+https://github.com/openssl/openssl/pull/15086
+
+--- vendor/openssl-src-300.6.0+3.6.2/openssl/Configurations/10-main.conf.orig	2025-11-02 17:12:27.865420544 +0000
++++ vendor/openssl-src-300.6.0+3.6.2/openssl/Configurations/10-main.conf
+@@ -1033,6 +1033,10 @@ my %targets = (
+         shared_target    => "bsd-gcc-shared",
+         shared_cflag     => "-fPIC",
+     },
++    "NetBSD-generic32" => {
++        inherit_from    => [ "BSD-generic32" ],
++        ex_libs         => add(threads("-latomic")),
++    },
+     "BSD-generic64" => {
+         inherit_from     => [ "BSD-generic32" ],
+         bn_ops           => "SIXTY_FOUR_BIT_LONG",
diff --git a/rust197/patches/patch-vendor_openssl-src-300.6.0+3.6.2_openssl_crypto_aria_aria.c b/rust197/patches/patch-vendor_openssl-src-300.6.0+3.6.2_openssl_crypto_aria_aria.c
new file mode 100644
index 0000000000..e00e5badb3
--- /dev/null
+++ b/rust197/patches/patch-vendor_openssl-src-300.6.0+3.6.2_openssl_crypto_aria_aria.c
@@ -0,0 +1,17 @@
+$NetBSD: patch-vendor_openssl-src-300.5.4+3.5.4_openssl_crypto_aria_aria.c,v 1.1 2026/04/02 19:06:35 wiz Exp $
+
+Make this build also if bswap32 is already defined, as for NetBSD/i586.
+
+--- vendor/openssl-src-300.6.0+3.6.2/openssl/crypto/aria/aria.c.orig	2025-11-02 17:14:42.569500518 +0000
++++ vendor/openssl-src-300.6.0+3.6.2/openssl/crypto/aria/aria.c
+@@ -32,8 +32,10 @@
+ #define rotl32(v, r) (((uint32_t)(v) << (r)) | ((uint32_t)(v) >> (32 - r)))
+ #define rotr32(v, r) (((uint32_t)(v) >> (r)) | ((uint32_t)(v) << (32 - r)))
+ 
++#ifndef bswap32
+ #define bswap32(v) \
+     (((v) << 24) ^ ((v) >> 24) ^ (((v) & 0x0000ff00) << 8) ^ (((v) & 0x00ff0000) >> 8))
++#endif
+ 
+ #define GET_U8_BE(X, Y) ((uint8_t)((X) >> ((3 - Y) * 8)))
+ #define GET_U32_BE(X, Y) ( \
diff --git a/rust197/patches/patch-vendor_openssl-src-300.6.0+3.6.2_src_lib.rs b/rust197/patches/patch-vendor_openssl-src-300.6.0+3.6.2_src_lib.rs
new file mode 100644
index 0000000000..697242267f
--- /dev/null
+++ b/rust197/patches/patch-vendor_openssl-src-300.6.0+3.6.2_src_lib.rs
@@ -0,0 +1,30 @@
+$NetBSD: patch-vendor_openssl-src-300.5.4+3.5.4_src_lib.rs,v 1.1 2026/04/02 19:06:35 wiz Exp $
+
+Make this build on NetBSD for armv6, mipsel and m68k as well.
+
+--- vendor/openssl-src-300.6.0+3.6.2/src/lib.rs.orig	2026-02-11 07:30:54.000000000 +0000
++++ vendor/openssl-src-300.6.0+3.6.2/src/lib.rs
+@@ -326,6 +326,7 @@ impl Build {
+             "armv5te-unknown-linux-gnueabi" => "linux-armv4",
+             "armv5te-unknown-linux-musleabi" => "linux-armv4",
+             "armv6-unknown-freebsd" => "BSD-generic32",
++            "armv6-unknown-netbsd-eabihf" => "BSD-generic32",
+             "armv6-alpine-linux-musleabihf" => "linux-armv6",
+             "armv7-unknown-freebsd" => "BSD-armv4",
+             "armv7-unknown-linux-gnueabi" => "linux-armv4",
+@@ -353,6 +354,7 @@ impl Build {
+             "i686-uwp-windows-msvc" => "VC-WIN32-UWP",
+             "loongarch64-unknown-linux-gnu" => "linux-generic64",
+             "loongarch64-unknown-linux-musl" => "linux-generic64",
++            "m68k-unknown-netbsd" => "NetBSD-generic32",
+             "mips-unknown-linux-gnu" => "linux-mips32",
+             "mips-unknown-linux-musl" => "linux-mips32",
+             "mips64-unknown-linux-gnuabi64" => "linux64-mips64",
+@@ -361,6 +363,7 @@ impl Build {
+             "mips64el-unknown-linux-muslabi64" => "linux64-mips64",
+             "mipsel-unknown-linux-gnu" => "linux-mips32",
+             "mipsel-unknown-linux-musl" => "linux-mips32",
++            "mipsel-unknown-netbsd" => "NetBSD-generic32",
+             "powerpc-unknown-freebsd" => "BSD-ppc",
+             "powerpc-unknown-linux-gnu" => "linux-ppc",
+             "powerpc-unknown-linux-gnuspe" => "linux-ppc",
diff --git a/rust197/patches/patch-vendor_openssl-sys-0.9.107_build_find__normal.rs b/rust197/patches/patch-vendor_openssl-sys-0.9.107_build_find__normal.rs
new file mode 100644
index 0000000000..ec68e07374
--- /dev/null
+++ b/rust197/patches/patch-vendor_openssl-sys-0.9.107_build_find__normal.rs
@@ -0,0 +1,30 @@
+$NetBSD: patch-vendor_openssl-sys-0.9.107_build_find__normal.rs,v 1.1 2025/08/25 17:51:13 wiz Exp $
+
+Add hack for Darwin when homebrew is installed.
+
+--- vendor/openssl-sys-0.9.107/build/find_normal.rs.orig	2025-06-28 08:24:16.945712755 +0000
++++ vendor/openssl-sys-0.9.107/build/find_normal.rs
+@@ -72,23 +72,6 @@ fn resolve_with_wellknown_location(dir: 
+ fn find_openssl_dir(target: &str) -> OsString {
+     let host = env::var("HOST").unwrap();
+ 
+-    if host == target && target.ends_with("-apple-darwin") {
+-        let homebrew_dir = match target {
+-            "aarch64-apple-darwin" => "/opt/homebrew",
+-            _ => "/usr/local",
+-        };
+-
+-        if let Some(dir) = resolve_with_wellknown_homebrew_location(homebrew_dir) {
+-            return dir.into();
+-        } else if let Some(dir) = resolve_with_wellknown_location("/opt/pkg") {
+-            // pkgsrc
+-            return dir.into();
+-        } else if let Some(dir) = resolve_with_wellknown_location("/opt/local") {
+-            // MacPorts
+-            return dir.into();
+-        }
+-    }
+-
+     try_pkg_config();
+     try_vcpkg();
+ 
diff --git a/rust197/patches/patch-vendor_openssl-sys-0.9.107_build_main.rs b/rust197/patches/patch-vendor_openssl-sys-0.9.107_build_main.rs
new file mode 100644
index 0000000000..1af0475acb
--- /dev/null
+++ b/rust197/patches/patch-vendor_openssl-sys-0.9.107_build_main.rs
@@ -0,0 +1,23 @@
+$NetBSD: patch-vendor_openssl-sys-0.9.107_build_main.rs,v 1.1 2025/08/25 17:51:13 wiz Exp $
+
+Patterned after Linux and Android, on 32-bit NetBSD ports
+include -latomic.  Parts of this inspired by
+https://github.com/sfackler/rust-openssl/commit/a0a1d1d29263abb7c47fc2e58cef8dab13762a45
+
+--- vendor/openssl-sys-0.9.107/build/main.rs.orig	2025-06-28 08:26:57.774420907 +0000
++++ vendor/openssl-sys-0.9.107/build/main.rs
+@@ -269,6 +269,14 @@ fn main() {
+         println!("cargo:rustc-link-lib=atomic");
+     }
+ 
++    // Patterned of the above, make sure we include -latomic
++    // on ilp32 NetBSD ports (yes, this only tests the "p32" part).
++    if env::var("CARGO_CFG_TARGET_OS").unwrap() == "netbsd"
++       && env::var("CARGO_CFG_TARGET_POINTER_WIDTH").unwrap() == "32"
++    {
++       println!("cargo:rustc-link-lib=atomic");
++    }
++
+     if kind == "static" && target.contains("windows") {
+         println!("cargo:rustc-link-lib=dylib=gdi32");
+         println!("cargo:rustc-link-lib=dylib=user32");
diff --git a/rust197/patches/patch-vendor_openssl-sys-0.9.109_build_find__normal.rs b/rust197/patches/patch-vendor_openssl-sys-0.9.109_build_find__normal.rs
new file mode 100644
index 0000000000..ae3496cdbc
--- /dev/null
+++ b/rust197/patches/patch-vendor_openssl-sys-0.9.109_build_find__normal.rs
@@ -0,0 +1,30 @@
+$NetBSD: patch-vendor_openssl-sys-0.9.109_build_find__normal.rs,v 1.1 2025/10/18 17:14:36 he Exp $
+
+Add hack for Darwin when homebrew is installed.
+
+--- vendor/openssl-sys-0.9.109/build/find_normal.rs.orig	2025-06-28 08:28:59.789478187 +0000
++++ vendor/openssl-sys-0.9.109/build/find_normal.rs
+@@ -72,23 +72,6 @@ fn resolve_with_wellknown_location(dir: 
+ fn find_openssl_dir(target: &str) -> OsString {
+     let host = env::var("HOST").unwrap();
+ 
+-    if host == target && target.ends_with("-apple-darwin") {
+-        let homebrew_dir = match target {
+-            "aarch64-apple-darwin" => "/opt/homebrew",
+-            _ => "/usr/local",
+-        };
+-
+-        if let Some(dir) = resolve_with_wellknown_homebrew_location(homebrew_dir) {
+-            return dir.into();
+-        } else if let Some(dir) = resolve_with_wellknown_location("/opt/pkg") {
+-            // pkgsrc
+-            return dir.into();
+-        } else if let Some(dir) = resolve_with_wellknown_location("/opt/local") {
+-            // MacPorts
+-            return dir.into();
+-        }
+-    }
+-
+     try_pkg_config();
+     try_vcpkg();
+ 
diff --git a/rust197/patches/patch-vendor_openssl-sys-0.9.109_build_main.rs b/rust197/patches/patch-vendor_openssl-sys-0.9.109_build_main.rs
new file mode 100644
index 0000000000..1ac33e4b86
--- /dev/null
+++ b/rust197/patches/patch-vendor_openssl-sys-0.9.109_build_main.rs
@@ -0,0 +1,23 @@
+$NetBSD: patch-vendor_openssl-sys-0.9.109_build_main.rs,v 1.1 2025/10/18 17:14:36 he Exp $
+
+Patterned after Linux and Android, on 32-bit NetBSD ports
+include -latomic.  Parts of this inspired by
+https://github.com/sfackler/rust-openssl/commit/a0a1d1d29263abb7c47fc2e58cef8dab13762a45
+
+--- vendor/openssl-sys-0.9.109/build/main.rs.orig	2025-06-28 08:30:05.194163693 +0000
++++ vendor/openssl-sys-0.9.109/build/main.rs
+@@ -269,6 +269,14 @@ fn main() {
+         println!("cargo:rustc-link-lib=atomic");
+     }
+ 
++    // Patterned of the above, make sure we include -latomic
++    // on ilp32 ports (yes, this only tests the "p32" part).
++    if env::var("CARGO_CFG_TARGET_OS").unwrap() == "netbsd"
++       && env::var("CARGO_CFG_TARGET_POINTER_WIDTH").unwrap() == "32"
++    {
++       println!("cargo:rustc-link-lib=atomic");
++    }
++
+     if kind == "static" && target.contains("windows") {
+         println!("cargo:rustc-link-lib=dylib=gdi32");
+         println!("cargo:rustc-link-lib=dylib=user32");
diff --git a/rust197/patches/patch-vendor_openssl-sys-0.9.114_build_find__normal.rs b/rust197/patches/patch-vendor_openssl-sys-0.9.114_build_find__normal.rs
new file mode 100644
index 0000000000..35b4afac95
--- /dev/null
+++ b/rust197/patches/patch-vendor_openssl-sys-0.9.114_build_find__normal.rs
@@ -0,0 +1,30 @@
+$NetBSD: patch-vendor_openssl-sys-0.9.111_build_find__normal.rs,v 1.1 2026/04/02 19:06:35 wiz Exp $
+
+Add hack for Darwin when homebrew is installed.
+
+--- vendor/openssl-sys-0.9.114/build/find_normal.rs.orig	2026-01-25 08:56:08.257782732 +0000
++++ vendor/openssl-sys-0.9.114/build/find_normal.rs
+@@ -72,23 +72,6 @@ fn resolve_with_wellknown_location(dir: 
+ fn find_openssl_dir(target: &str) -> OsString {
+     let host = env::var("HOST").unwrap();
+ 
+-    if host == target && target.ends_with("-apple-darwin") {
+-        let homebrew_dir = match target {
+-            "aarch64-apple-darwin" => "/opt/homebrew",
+-            _ => "/usr/local",
+-        };
+-
+-        if let Some(dir) = resolve_with_wellknown_homebrew_location(homebrew_dir) {
+-            return dir.into();
+-        } else if let Some(dir) = resolve_with_wellknown_location("/opt/pkg") {
+-            // pkgsrc
+-            return dir.into();
+-        } else if let Some(dir) = resolve_with_wellknown_location("/opt/local") {
+-            // MacPorts
+-            return dir.into();
+-        }
+-    }
+-
+     try_pkg_config();
+     try_vcpkg();
+ 
diff --git a/rust197/patches/patch-vendor_openssl-sys-0.9.114_build_main.rs b/rust197/patches/patch-vendor_openssl-sys-0.9.114_build_main.rs
new file mode 100644
index 0000000000..0787fe42e5
--- /dev/null
+++ b/rust197/patches/patch-vendor_openssl-sys-0.9.114_build_main.rs
@@ -0,0 +1,23 @@
+$NetBSD: patch-vendor_openssl-sys-0.9.111_build_main.rs,v 1.1 2026/04/02 19:06:35 wiz Exp $
+
+Patterned after Linux and Android, on 32-bit NetBSD ports
+include -latomic.  Parts of this inspired by
+https://github.com/sfackler/rust-openssl/commit/a0a1d1d29263abb7c47fc2e58cef8dab13762a45
+
+--- vendor/openssl-sys-0.9.114/build/main.rs.orig	2026-01-25 08:57:28.677889187 +0000
++++ vendor/openssl-sys-0.9.114/build/main.rs
+@@ -279,6 +279,14 @@ fn main() {
+         println!("cargo:rustc-link-lib=atomic");
+     }
+ 
++    // Patterned of the above, make sure we include -latomic
++    // on ilp32 ports (yes, this only tests the "p32" part).
++    if env::var("CARGO_CFG_TARGET_OS").unwrap() == "netbsd"
++       && env::var("CARGO_CFG_TARGET_POINTER_WIDTH").unwrap() == "32"
++    {
++        println!("cargo:rustc-link-lib=atomic");
++    }
++
+     if kind == "static" && target.contains("windows") {
+         println!("cargo:rustc-link-lib=dylib=gdi32");
+         println!("cargo:rustc-link-lib=dylib=user32");
diff --git a/rust197/patches/patch-vendor_openssl-sys-0.9.92_build_find__normal.rs b/rust197/patches/patch-vendor_openssl-sys-0.9.92_build_find__normal.rs
new file mode 100644
index 0000000000..eadb21f4b0
--- /dev/null
+++ b/rust197/patches/patch-vendor_openssl-sys-0.9.92_build_find__normal.rs
@@ -0,0 +1,30 @@
+$NetBSD: patch-vendor_openssl-sys-0.9.92_build_find__normal.rs,v 1.4 2025/10/18 17:14:36 he Exp $
+
+Add hack for Darwin when homebrew is installed.
+
+--- vendor/openssl-sys-0.9.92/build/find_normal.rs.orig	2025-09-19 21:56:18.930723780 +0000
++++ vendor/openssl-sys-0.9.92/build/find_normal.rs
+@@ -72,23 +72,6 @@ fn resolve_with_wellknown_location(dir: 
+ fn find_openssl_dir(target: &str) -> OsString {
+     let host = env::var("HOST").unwrap();
+ 
+-    if host == target && target.ends_with("-apple-darwin") {
+-        let homebrew_dir = match target {
+-            "aarch64-apple-darwin" => "/opt/homebrew",
+-            _ => "/usr/local",
+-        };
+-
+-        if let Some(dir) = resolve_with_wellknown_homebrew_location(homebrew_dir) {
+-            return dir.into();
+-        } else if let Some(dir) = resolve_with_wellknown_location("/opt/pkg") {
+-            // pkgsrc
+-            return dir.into();
+-        } else if let Some(dir) = resolve_with_wellknown_location("/opt/local") {
+-            // MacPorts
+-            return dir.into();
+-        }
+-    }
+-
+     try_pkg_config();
+     try_vcpkg();
+ 
diff --git a/rust197/patches/patch-vendor_openssl-sys-0.9.92_build_main.rs b/rust197/patches/patch-vendor_openssl-sys-0.9.92_build_main.rs
new file mode 100644
index 0000000000..09c1b546a4
--- /dev/null
+++ b/rust197/patches/patch-vendor_openssl-sys-0.9.92_build_main.rs
@@ -0,0 +1,23 @@
+$NetBSD: patch-vendor_openssl-sys-0.9.92_build_main.rs,v 1.4 2025/10/18 17:14:37 he Exp $
+
+Patterned after Linux and Android, on 32-bit NetBSD ports
+include -latomic.  Parts of this inspired by
+https://github.com/sfackler/rust-openssl/commit/a0a1d1d29263abb7c47fc2e58cef8dab13762a45
+
+--- vendor/openssl-sys-0.9.92/build/main.rs.orig	2025-09-19 21:57:47.732695298 +0000
++++ vendor/openssl-sys-0.9.92/build/main.rs
+@@ -115,6 +115,14 @@ fn main() {
+         println!("cargo:rustc-link-lib={}={}", kind, lib);
+     }
+ 
++    // Patterned of the above, make sure we include -latomic
++    // on NetBSD ilp32 ports (yes, this only tests the "p32" part).
++    if env::var("CARGO_CFG_TARGET_OS").unwrap() == "netbsd"
++       && env::var("CARGO_CFG_TARGET_POINTER_WIDTH").unwrap() == "32"
++    {
++        println!("cargo:rustc-link-lib=atomic");
++    }
++
+     if kind == "static" && target.contains("windows") {
+         println!("cargo:rustc-link-lib=dylib=gdi32");
+         println!("cargo:rustc-link-lib=dylib=user32");
diff --git a/rust197/patches/patch-vendor_rustc-ap-rustc__target_src_spec_aarch64__be__unknown__netbsd.rs b/rust197/patches/patch-vendor_rustc-ap-rustc__target_src_spec_aarch64__be__unknown__netbsd.rs
new file mode 100644
index 0000000000..6c90dec84c
--- /dev/null
+++ b/rust197/patches/patch-vendor_rustc-ap-rustc__target_src_spec_aarch64__be__unknown__netbsd.rs
@@ -0,0 +1,27 @@
+$NetBSD: patch-vendor_rustc-ap-rustc__target_src_spec_aarch64__be__unknown__netbsd.rs,v 1.9 2024/04/18 09:29:43 pin Exp $
+
+Add aarch64_be NetBSD target.
+
+--- /dev/null	2021-04-26 00:02:43.147970692 +0200
++++ vendor/rustc-ap-rustc_target/src/spec/aarch64_be_unknown_netbsd.rs	2021-04-26 00:07:44.657579025 +0200
+@@ -0,0 +1,20 @@
++use crate::abi::Endian;
++use crate::spec::{Target, TargetOptions};
++
++pub fn target() -> Target {
++    let mut base = super::netbsd_base::opts();
++    base.max_atomic_width = Some(128);
++    base.unsupported_abis = super::arm_base::unsupported_abis();
++
++    Target {
++        llvm_target: "aarch64_be-unknown-netbsd".to_string(),
++        pointer_width: 64,
++        data_layout: "E-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128".to_string(),
++        arch: "aarch64".to_string(),
++        options: TargetOptions {
++            mcount: "__mcount".to_string(),
++            endian: Endian::Big,
++            ..base
++        },
++    }
++}
diff --git a/rust197/patches/patch-vendor_zerocopy-0.7.32_src_lib.rs b/rust197/patches/patch-vendor_zerocopy-0.7.32_src_lib.rs
new file mode 100644
index 0000000000..741f3d8024
--- /dev/null
+++ b/rust197/patches/patch-vendor_zerocopy-0.7.32_src_lib.rs
@@ -0,0 +1,25 @@
+$NetBSD: patch-vendor_zerocopy-0.7.32_src_lib.rs,v 1.3 2025/08/25 17:51:14 wiz Exp $
+
+Attempt at skipping SIMD / neon on big-endian aarch64,
+ref. https://github.com/rust-lang/rust/issues/129819.
+
+--- vendor/zerocopy-0.7.32/src/lib.rs.orig	2024-09-01 12:56:49.837065351 +0000
++++ vendor/zerocopy-0.7.32/src/lib.rs
+@@ -3715,7 +3715,7 @@ mod simd {
+             powerpc64, powerpc64, vector_bool_long, vector_double, vector_signed_long, vector_unsigned_long
+         );
+         simd_arch_mod!(
+-            #[cfg(target_arch = "aarch64")]
++            #[cfg(all(target_arch = "aarch64", target_endian = "little"))]
+             aarch64, aarch64, float32x2_t, float32x4_t, float64x1_t, float64x2_t, int8x8_t, int8x8x2_t,
+             int8x8x3_t, int8x8x4_t, int8x16_t, int8x16x2_t, int8x16x3_t, int8x16x4_t, int16x4_t,
+             int16x8_t, int32x2_t, int32x4_t, int64x1_t, int64x2_t, poly8x8_t, poly8x8x2_t, poly8x8x3_t,
+@@ -7998,7 +7998,7 @@ mod tests {
+                 vector_signed_long,
+                 vector_unsigned_long
+             );
+-            #[cfg(target_arch = "aarch64")]
++            #[cfg(all(target_arch = "aarch64", target_endian = "little"))]
+             #[rustfmt::skip]
+             test_simd_arch_mod!(
+                 aarch64, float32x2_t, float32x4_t, float64x1_t, float64x2_t, int8x8_t, int8x8x2_t,
diff --git a/rust197/patches/patch-vendor_zerocopy-0.7.35_src_lib.rs b/rust197/patches/patch-vendor_zerocopy-0.7.35_src_lib.rs
new file mode 100644
index 0000000000..02ae82da04
--- /dev/null
+++ b/rust197/patches/patch-vendor_zerocopy-0.7.35_src_lib.rs
@@ -0,0 +1,25 @@
+$NetBSD: patch-vendor_zerocopy-0.7.35_src_lib.rs,v 1.3 2025/08/25 17:51:14 wiz Exp $
+
+Attempt at skipping SIMD / neon on big-endian aarch64,
+ref. https://github.com/rust-lang/rust/issues/129819.
+
+--- vendor/zerocopy-0.7.35/src/lib.rs.orig	2024-08-31 21:15:29.602997509 +0000
++++ vendor/zerocopy-0.7.35/src/lib.rs
+@@ -3727,7 +3727,7 @@ mod simd {
+             powerpc64, powerpc64, vector_bool_long, vector_double, vector_signed_long, vector_unsigned_long
+         );
+         simd_arch_mod!(
+-            #[cfg(target_arch = "aarch64")]
++            #[cfg(all(target_arch = "aarch64", target_endian = "little"))]
+             aarch64, aarch64, float32x2_t, float32x4_t, float64x1_t, float64x2_t, int8x8_t, int8x8x2_t,
+             int8x8x3_t, int8x8x4_t, int8x16_t, int8x16x2_t, int8x16x3_t, int8x16x4_t, int16x4_t,
+             int16x8_t, int32x2_t, int32x4_t, int64x1_t, int64x2_t, poly8x8_t, poly8x8x2_t, poly8x8x3_t,
+@@ -8020,7 +8020,7 @@ mod tests {
+                 vector_signed_long,
+                 vector_unsigned_long
+             );
+-            #[cfg(target_arch = "aarch64")]
++            #[cfg(all(target_arch = "aarch64", target_endian = "little"))]
+             #[rustfmt::skip]
+             test_simd_arch_mod!(
+                 aarch64, float32x2_t, float32x4_t, float64x1_t, float64x2_t, int8x8_t, int8x8x2_t,
diff --git a/rust197/patches/patch-vendor_zeroize-1.8.1_src_lib.rs b/rust197/patches/patch-vendor_zeroize-1.8.1_src_lib.rs
new file mode 100644
index 0000000000..17e4970d08
--- /dev/null
+++ b/rust197/patches/patch-vendor_zeroize-1.8.1_src_lib.rs
@@ -0,0 +1,15 @@
+$NetBSD: patch-vendor_zeroize-1.8.1_src_lib.rs,v 1.2 2025/08/25 17:51:14 wiz Exp $
+
+Don't try to use the NEON-specific module in big-endian mode.
+
+--- vendor/zeroize-1.8.1/src/lib.rs.orig	2025-04-06 07:17:23.864281079 +0000
++++ vendor/zeroize-1.8.1/src/lib.rs
+@@ -245,7 +245,7 @@ extern crate std;
+ #[cfg(feature = "zeroize_derive")]
+ pub use zeroize_derive::{Zeroize, ZeroizeOnDrop};
+ 
+-#[cfg(target_arch = "aarch64")]
++#[cfg(all(target_arch = "aarch64", target_endian = "little"))]
+ mod aarch64;
+ #[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
+ mod x86;
diff --git a/rust197/platform.mk b/rust197/platform.mk
new file mode 100644
index 0000000000..c4c2911399
--- /dev/null
+++ b/rust197/platform.mk
@@ -0,0 +1,34 @@
+# $NetBSD: platform.mk,v 1.35 2026/03/17 07:02:08 nia Exp $
+
+# This file encodes whether a given platform has support for rust.
+
+# Platforms where rust ought to work but does not require a link to an
+# open PR.
+
+.if !defined(PLATFORM_SUPPORTS_RUST)
+
+# Rust needs NetBSD>8
+.for rust_arch in aarch64 earmv7hf i386 powerpc riscv64 sparc64 x86_64
+.  for rust_os in Darwin FreeBSD Linux NetBSD SunOS
+.    if ${OPSYS} != "NetBSD" || empty(OS_VERSION:M[0-8].*)
+RUST_PLATFORMS+=	${rust_os}-*-${rust_arch}
+.    endif
+.  endfor
+.endfor
+
+# rust does not build in the VA space available on earm.
+# \todo Consider extension to other platforms.
+.if ${NATIVE_MACHINE_PLATFORM:M*-*-earm*}
+RUST_TYPE?=	bin
+.endif
+
+RUST_DIR?=	../../lang/rust
+
+.for rust_platform in ${RUST_PLATFORMS}
+.  if !empty(MACHINE_PLATFORM:M${rust_platform})
+PLATFORM_SUPPORTS_RUST?=	yes
+.  endif
+.endfor
+PLATFORM_SUPPORTS_RUST?=	no
+
+.endif # !defined(PLATFORM_SUPPORTS_RUST)
diff --git a/rust197/rust.mk b/rust197/rust.mk
new file mode 100644
index 0000000000..5903baec65
--- /dev/null
+++ b/rust197/rust.mk
@@ -0,0 +1,68 @@
+# $NetBSD: rust.mk,v 1.20 2026/04/04 18:48:49 tnn Exp $
+#
+# This file determines the type of rust package to use.
+#
+# It should be included by rust-dependent packages that don't use
+# cargo.mk.
+#
+# === User-settable variables ===
+#
+# RUST_TYPE
+#	The preferred type of Rust release to use - either build from source,
+#	or use a binary installation.
+#
+#	Official Rust binaries are only published for certain platforms.  The
+#	"bin" option uses the lang/rust-bin package, whereas "native" uses
+#	binaries installed on the host system.  If using "native" with a rustup
+#	installation, you will probably also need to set RUSTUP_HOME in your
+#	MAKE_ENV pointing to the 'rustup show home' directory.  This is due to
+#	pkgsrc overwriting the HOME environment variable during build.
+#
+#	Possible values: src bin native
+#	Default: "src", except on 32-bit arm where it's "bin"
+#
+# === Package-settable variables ===
+#
+# RUST_REQ
+#	The minimum version of Rust required by the package.
+#
+#	Default: 1.85.0
+#
+# RUST_RUNTIME
+#	Whether rust is a runtime dependency.
+#	Usually it is only needed to build.
+#
+#	Possible values: yes no
+#	Default: no
+
+.include "../../mk/bsd.fast.prefs.mk"
+.include "platform.mk"
+
+RUST_REQ?=	1.85.0
+RUST_RUNTIME?=	no
+
+.if ${MACHINE_PLATFORM:M*-*-earm*}
+RUST_TYPE?=	bin
+.else
+RUST_TYPE?=	src
+.endif
+
+.if ${RUST_TYPE} == "bin"
+.  if ${RUST_RUNTIME} == "no"
+BUILDLINK_DEPMETHOD.rust-bin?=		build
+.  endif
+BUILDLINK_API_DEPENDS.rust-bin+=	rust-bin>=${RUST_REQ}
+.  include "${RUST_DIR}-bin/buildlink3.mk"
+.endif
+
+.if ${RUST_TYPE} == "src"
+.  if ${RUST_RUNTIME} == "no"
+BUILDLINK_DEPMETHOD.rust?=		build
+.  endif
+BUILDLINK_API_DEPENDS.rust+=		rust>=${RUST_REQ}
+.  include "${RUST_DIR}/buildlink3.mk"
+.endif
+
+.if ${OPSYS} == "NetBSD"
+ALL_ENV+=	PTHREAD_KEYS_MAX=512
+.endif


Home | Main Index | Thread Index | Old Index