pkgsrc-WIP-changes archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
rust180: Add initial version.
Module Name: pkgsrc-wip
Committed By: Havard Eidnes <he%NetBSD.org@localhost>
Pushed By: he
Date: Fri Aug 30 10:54:29 2024 +0000
Changeset: 12b2fd797c6815c7538a470bbabdc65567a68fd0
Added Files:
rust180/DESCR
rust180/HOWTO-BOOTSTRAP
rust180/Makefile
rust180/buildlink3.mk
rust180/cargo.mk
rust180/cross.mk
rust180/distinfo
rust180/do-cross.mk
rust180/files/gcc-wrap
rust180/options.mk
rust180/patches/patch-compiler_rustc__codegen__ssa_src_back_linker.rs
rust180/patches/patch-compiler_rustc__llvm_build.rs
rust180/patches/patch-compiler_rustc__target_src_spec_base_netbsd.rs
rust180/patches/patch-compiler_rustc__target_src_spec_mod.rs
rust180/patches/patch-compiler_rustc__target_src_spec_targets_aarch64__be__unknown__netbsd.rs
rust180/patches/patch-compiler_rustc__target_src_spec_targets_aarch64__unknown__netbsd.rs
rust180/patches/patch-compiler_rustc__target_src_spec_targets_mips64el__unknown__netbsd.rs
rust180/patches/patch-compiler_rustc__target_src_spec_targets_mipsel__unknown__netbsd.rs
rust180/patches/patch-compiler_rustc__target_src_spec_targets_sparc64__unknown__netbsd.rs
rust180/patches/patch-library_backtrace_src_symbolize_gimli.rs
rust180/patches/patch-library_backtrace_src_symbolize_gimli_elf.rs
rust180/patches/patch-library_std_src_sys_pal_unix_mod.rs
rust180/patches/patch-src_bootstrap_bootstrap.py
rust180/patches/patch-src_bootstrap_src_core_build__steps_compile.rs
rust180/patches/patch-src_bootstrap_src_core_build__steps_install.rs
rust180/patches/patch-src_bootstrap_src_core_builder.rs
rust180/patches/patch-src_bootstrap_src_lib.rs
rust180/patches/patch-src_llvm-project_llvm_CMakeLists.txt
rust180/patches/patch-src_llvm-project_llvm_cmake_modules_AddLLVM.cmake
rust180/patches/patch-src_llvm-project_llvm_include_llvm-c_DataTypes.h
rust180/patches/patch-src_llvm-project_llvm_include_llvm_Analysis_ConstantFolding.h
rust180/patches/patch-src_llvm-project_llvm_utils_FileCheck_FileCheck.cpp
rust180/patches/patch-src_tools_cargo_src_cargo_core_profiles.rs
rust180/patches/patch-src_tools_cargo_tests_testsuite_build.rs
rust180/patches/patch-src_tools_rust-installer_install-template.sh
rust180/patches/patch-vendor_cc-1.0.73_src_lib.rs
rust180/patches/patch-vendor_crossbeam-utils-0.8.18_no__atomic.rs
rust180/patches/patch-vendor_libc-0.2.148_src_unix_bsd_netbsdlike_netbsd_mips.rs
rust180/patches/patch-vendor_libc-0.2.148_src_unix_bsd_netbsdlike_netbsd_riscv64.rs
rust180/patches/patch-vendor_libc-0.2.153_src_unix_solarish_mod.rs
rust180/patches/patch-vendor_libc-0.2.154_src_unix_solarish_mod.rs
rust180/patches/patch-vendor_libc-0.2.155_src_unix_solarish_mod.rs
rust180/patches/patch-vendor_openssl-src-111.28.2+1.1.1w_openssl_Configurations_10-main.conf
rust180/patches/patch-vendor_openssl-src-111.28.2+1.1.1w_src_lib.rs
rust180/patches/patch-vendor_openssl-sys-0.9.102_build_find__normal.rs
rust180/patches/patch-vendor_openssl-sys-0.9.102_build_main.rs
rust180/patches/patch-vendor_openssl-sys-0.9.92_build_find__normal.rs
rust180/patches/patch-vendor_openssl-sys-0.9.92_build_main.rs
rust180/patches/patch-vendor_rustc-ap-rustc__target_src_spec_aarch64__be__unknown__netbsd.rs
rust180/platform.mk
rust180/rust.mk
Log Message:
rust180: Add initial version.
Based on wip/rust179, with patches adapted / re-applied to new
crates etc. Build-verified natively on NetBSD/amd64, and cross-
builds OK for all the NetBSD targets on NetBSD/amd64.
Further testing / verification remains.
To see a diff of this commit:
https://wip.pkgsrc.org/cgi-bin/gitweb.cgi?p=pkgsrc-wip.git;a=commitdiff;h=12b2fd797c6815c7538a470bbabdc65567a68fd0
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
diffstat:
rust180/DESCR | 13 +
rust180/HOWTO-BOOTSTRAP | 85 +++
rust180/Makefile | 664 +++++++++++++++++++++
rust180/buildlink3.mk | 17 +
rust180/cargo.mk | 110 ++++
rust180/cross.mk | 83 +++
rust180/distinfo | 149 +++++
rust180/do-cross.mk | 107 ++++
rust180/files/gcc-wrap | 199 ++++++
rust180/options.mk | 74 +++
...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 | 14 +
...rc_spec_targets_aarch64__be__unknown__netbsd.rs | 17 +
...et_src_spec_targets_aarch64__unknown__netbsd.rs | 17 +
...t_src_spec_targets_mips64el__unknown__netbsd.rs | 35 ++
...get_src_spec_targets_mipsel__unknown__netbsd.rs | 14 +
...et_src_spec_targets_sparc64__unknown__netbsd.rs | 29 +
.../patch-library_backtrace_src_symbolize_gimli.rs | 14 +
...ch-library_backtrace_src_symbolize_gimli_elf.rs | 25 +
.../patch-library_std_src_sys_pal_unix_mod.rs | 14 +
rust180/patches/patch-src_bootstrap_bootstrap.py | 47 ++
...-src_bootstrap_src_core_build__steps_compile.rs | 15 +
...-src_bootstrap_src_core_build__steps_install.rs | 13 +
.../patch-src_bootstrap_src_core_builder.rs | 28 +
rust180/patches/patch-src_bootstrap_src_lib.rs | 23 +
.../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 | 17 +
...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 | 31 +
...ch-src_tools_rust-installer_install-template.sh | 179 ++++++
rust180/patches/patch-vendor_cc-1.0.73_src_lib.rs | 16 +
...tch-vendor_crossbeam-utils-0.8.18_no__atomic.rs | 14 +
...-0.2.148_src_unix_bsd_netbsdlike_netbsd_mips.rs | 29 +
...2.148_src_unix_bsd_netbsdlike_netbsd_riscv64.rs | 29 +
...ch-vendor_libc-0.2.153_src_unix_solarish_mod.rs | 15 +
...ch-vendor_libc-0.2.154_src_unix_solarish_mod.rs | 15 +
...ch-vendor_libc-0.2.155_src_unix_solarish_mod.rs | 15 +
...28.2+1.1.1w_openssl_Configurations_10-main.conf | 18 +
...h-vendor_openssl-src-111.28.2+1.1.1w_src_lib.rs | 62 ++
...endor_openssl-sys-0.9.102_build_find__normal.rs | 30 +
.../patch-vendor_openssl-sys-0.9.102_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 +
rust180/platform.mk | 31 +
rust180/rust.mk | 56 ++
51 files changed, 2708 insertions(+)
diffs:
diff --git a/rust180/DESCR b/rust180/DESCR
new file mode 100644
index 0000000000..6dc90a671e
--- /dev/null
+++ b/rust180/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/rust180/HOWTO-BOOTSTRAP b/rust180/HOWTO-BOOTSTRAP
new file mode 100644
index 0000000000..81133db2ec
--- /dev/null
+++ b/rust180/HOWTO-BOOTSTRAP
@@ -0,0 +1,85 @@
+How to build a rust bootstrap kit using pkgsrc
+----------------------------------------------
+
+A rust bootstrap kit is simply a pre-compiled binary of rust and
+the rust standard library, and contains the "rust" and "rust-std"
+build results, found in
+
+ work/rustc-<version>/build/dist/
+as
+ rust-<version>-<target>.tar.xz
+and
+ rust-std-<version>-<target>.tar.xz
+
+These result files are produced when the "dist" build target is
+used, ref. BUILD_TARGET. For a normal native build of the rust
+pkgsrc package, the default BUILD_TARGET is "build", not "dist".
+
+There are two possible ways to produce a bootstrap kit:
+
+1) a native build. This requires minimum preparation, except
+ possibly for setting rust.BUILD_TARGET to "dist" via e.g.
+ /etc/mk.conf. Note that on NetBSD, using the "BUILD_TARGET" ==
+ "dist" results in the "rust-cargo-static" option being set, ref.
+ options.mk. This is so that the resulting bootstrap kits are
+ built with mostly-static linking, reducing the run-time dependencies
+ of the bootstrap kits.
+
+2) a cross-build. This requires a bit of preparation:
+
+ For each target you want to cross-build rust for, you need
+ - the cross toolchain resulting from "build.sh tools" for
+ the intended target
+ - an OS distribution extracted, including the comp.tgz
+ set so that the target's include files can be used
+ - for 32-bit ports, the "libatomic" package needs to be
+ available. I'm sure there's a clever and long-winded
+ use of pkg_install which can be used to effect this;
+ I on my hand have always just extracted the tgz file
+ and done the minimal cleanup of the "cruft" files
+ which are part of the package meta-data.
+ - Pick a root directory for the target, e.g. /u/i386.
+ Below this directory place the "tools" containing
+ the cross-compiler in a "tools" sub-directory.
+ Similarly, the extracted OS distribution in the "dest"
+ sub-directory.
+
+ There are two methods available for doing the cross-compile:
+
+ a) Using the "cross.mk" file. For an i386 build against i586, the
+ following settings should be active:
+
+CROSS_ROOT= /u/i386
+MAKE_ENV+= CROSS_ROOT=${CROSS_ROOT}
+GNU_CROSS_TARGET= i486--netbsdelf
+MAKE_ENV+= GNU_CROSS_TARGET=${GNU_CROSS_TARGET}
+TARGET= i586-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
+CONFIGURE_ARGS+= --set=target.${TARGET}.ar=${CROSS_ROOT}/tools/bin/${GNU_CROSS_TARGET}-ar
+
+ Then doing a "make" will cross-build rust, including the LLVM
+ embedded in the rust distribution, ref. the defaulting of that
+ option when TARGET is defined ref. options.mk.
+
+ Note that when TARGET is set, the default build target for
+ the rust makefile becomes "dist", so there's no need to set
+ rust.BUILD_TARGET for cross-builds.
+
+ b) Using the "do-cross.mk" Makefile. This will attempt to
+ cross-build rust for all the targets listed in the SHORT_TARGETS
+ variable in that file. Overriding the root directories for
+ the various targets can be done by making your own "local-roots.mk"
+ file, ref. "do-cross.mk".
+
+ This will create a "dist" subdirectory in the rust pkgsrc
+ directory, and the bootstrap kits for each architecture, plus
+ the library source kit will be placed in this directory.
+
+The bootstrap kits can then be placed in /usr/pkgsrc/distfiles, and
+be used by the "next" rust version, where you can use "make makesum"
+to compute the updated checksums for the bootstrap kits.
diff --git a/rust180/Makefile b/rust180/Makefile
new file mode 100644
index 0000000000..06917fae40
--- /dev/null
+++ b/rust180/Makefile
@@ -0,0 +1,664 @@
+# $NetBSD: Makefile,v 1.316 2024/07/31 12:30:43 he Exp $
+
+DISTNAME= rustc-1.80.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
+
+# 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= yes
+CONFIG_SHELL= ${PYTHONBIN}
+CONFIGURE_SCRIPT= src/bootstrap/configure.py
+CONFIGURE_ARGS+= --prefix=${PREFIX}
+CONFIGURE_ARGS+= --mandir=${PREFIX}/${PKGMANDIR}
+CONFIGURE_ARGS+= --sysconfdir=${PKG_SYSCONFDIR}
+CONFIGURE_ARGS+= --python=${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
+
+# Include (optional) settings to cross-build rust
+.include "cross.mk"
+
+# optional from do-cross.mk
+CONFIGURE_ARGS+= ${ADD_CONFIGURE_ARGS}
+
+# Getting RPATH with $ORIGIN into bootstrap may be troublesome, so
+# uncommenting the LD_LIBRARY_PATH setting may be required to run
+# the bootstrap
+PKGSRC_MAKE_ENV+= LD_LIBRARY_PATH=${RUST_BOOTSTRAP_PATH:Q}/lib
+
+# 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}
+
+# MacOS X 10.7 is the oldest supported version. See
+# ${WRKSRC}/src/bootstrap/lib.rs
+MAKE_ENV.Darwin+= MACOSX_DEPLOYMENT_TARGET="10.7"
+
+CFLAGS.SunOS+= -D_POSIX_PTHREAD_SEMANTICS
+MAKE_ENV.SunOS+= AR=gar
+
+# 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"
+
+# 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
+
+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}
+
+NB= nb1
+
+.if ${MACHINE_PLATFORM:MDarwin-*-aarch64} || make(distinfo) || make (makesum) || make(mdi)
+RUST_STAGE0_VER= 1.79.0
+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.79.0
+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.79.0
+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.79.0
+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.79.0
+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.79.0
+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.79.0
+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
+#
+# The SunOS target defaults to illumos as that's what the current bootstraps
+# are built on. If you wish to target Oracle Solaris you'll need to create an
+# x86_64-sun-solaris bootstrap and comment out the overrides.
+#
+.if ${MACHINE_PLATFORM:MSunOS-*-x86_64} || make(distinfo) || make (makesum) || make(mdi)
+RUST_STAGE0_VER= 1.79.0
+RUST_ARCH:= x86_64-unknown-illumos
+RUST_STAGE0:= rust-${RUST_STAGE0_VER}-${RUST_ARCH}.tar.gz
+SITES.${RUST_STAGE0}= https://us-central.manta.mnx.io/pkgsrc/public/pkg-bootstraps/
+DISTFILES:= ${DISTFILES} ${RUST_STAGE0}
+RUST_BOOTSTRAP_PATH?= ${WRKDIR}/rust-${RUST_STAGE0_VER}-${RUST_ARCH}
+# 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.79.0
+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.79.0
+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.79.0
+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.79.0
+RUST_ARCH= powerpc-unknown-netbsd
+
+# Cross-built against NetBSD 9.0
+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.79.0
+RUST_ARCH= aarch64-unknown-netbsd
+RUST_STAGE0:= rust-${RUST_STAGE0_VER}-${RUST_ARCH}-${NB}.tar.xz
+RUST_STD_STAGE0:= rust-std-${RUST_STAGE0_VER}-${RUST_ARCH}-${NB}.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.77.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.79.0
+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.79.0
+RUST_STAGE0:= rust-${RUST_STAGE0_VER}-${RUST_ARCH}-${NB}.tar.xz
+RUST_STD_STAGE0:= rust-std-${RUST_STAGE0_VER}-${RUST_ARCH}-${NB}.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.79.0
+RUST_STAGE0:= rust-${RUST_STAGE0_VER}-${RUST_ARCH}-${NB}.tar.xz
+RUST_STD_STAGE0:= rust-std-${RUST_STAGE0_VER}-${RUST_ARCH}-${NB}.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.79.0
+#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.79.0
+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= ${PREFIX}/bin/gmd5sum
+TOOLS_PLATFORM.gzcat= ${PREFIX}/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.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-sys-0.9.92
+CKSUMS+= 33f814dba4ac9942266157cbe3dc8eadf5e477090370a92c36c53f916fa45d48
+CKSUMS+= f78ddd9b03c31a03350aa152d6f707c6cbb21b2ea0b493d05238aa473b80af09
+CKSUMS+= b2cbaa5bfac5e7d5550aa0eb8e5c65a9f7e86a3692b759fb13330ef6e3b26b30
+CKSUMS+= b303bf9ceae9fcffa4a0420ea858675d827fc2d75c358f8236e44274d58be1a0
+
+CKSUM_CRATES+= vendor/openssl-src-111.28.2+1.1.1w/
+CKSUMS+= 090744f85cf99a9b8412c23fca1eabb61eb45d830f0f9f0e7309be2572c1e827
+CKSUMS+= e8ca5ea1808323cd9f0cc9d53c7258bb2f3112e5eafc11dd457e010a80a9c8d8
+CKSUMS+= cf331474674b6c4fff7e361d592c14131c97918d6f756b36698a7ac8ec845adb
+CKSUMS+= bec36eddcf41c8639903ea7593751c92251100168241bc5696f8a776a55651fb
+
+CKSUM_CRATES+= vendor/libc-0.2.155
+CKSUMS+= 3e550d95419169febf094c425451ca86b12821fa17839b4b0ba7520b145a5820
+CKSUMS+= 1cf38d9ddeca5295821b4234e17e1fc749f35b00307bdfdacb24c6892a288ad6
+
+CKSUM_CRATES+= vendor/libc-0.2.154
+CKSUMS+= 3e550d95419169febf094c425451ca86b12821fa17839b4b0ba7520b145a5820
+CKSUMS+= 1cf38d9ddeca5295821b4234e17e1fc749f35b00307bdfdacb24c6892a288ad6
+
+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; \
+ ${PYTHONBIN} ./x.py -v \
+ ${BUILD_TARGET} -j ${_MAKE_JOBS_N}; \
+ else \
+ ${PYTHONBIN} ./x.py -v \
+ ${BUILD_TARGET} --stage 2 -j ${_MAKE_JOBS_N} && \
+ ${PYTHONBIN} ./x.py -v \
+ doc --stage 2 -j ${_MAKE_JOBS_N}; \
+ fi"
+
+do-test:
+ ${RUN}${_ULIMIT_CMD} \
+ cd ${WRKSRC} && \
+ ${SETENV} ${MAKE_ENV} \
+ ${PYTHONBIN} ./x.py -v test -j ${_MAKE_JOBS_N}
+
+do-install:
+ ${RUN}${_ULIMIT_CMD} \
+ cd ${WRKSRC} && \
+ ${SETENV} ${MAKE_ENV} ${INSTALL_ENV} \
+ ${PYTHONBIN} ./x.py -v install -j ${_MAKE_JOBS_N}
+
+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-17.so 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 libnghttp2.so.14 libsasl2.so.3 \
+ libssh2.so.1 libunistring.so.5; 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*; do \
+ ${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
+
+# rust i386 and sparc64 bootstraps are built for 8.0
+# and still depend on libstdc++.so.8.
+# Pull in compat80 on 9.x and newer.
+.if (${MACHINE_PLATFORM:MNetBSD-*-i386} || \
+ ${MACHINE_PLATFORM:MNetBSD-*-sparc64}) \
+ && empty(OS_VERSION:M8.*)
+TOOL_DEPENDS+= compat80>=0:../../emulators/compat80
+.endif
+
+.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/cmake/buildlink3.mk"
+.include "../../devel/zlib/buildlink3.mk"
+.include "../../lang/python/tool.mk"
+.include "../../mk/bsd.pkg.mk"
diff --git a/rust180/buildlink3.mk b/rust180/buildlink3.mk
new file mode 100644
index 0000000000..b8eeb79834
--- /dev/null
+++ b/rust180/buildlink3.mk
@@ -0,0 +1,17 @@
+# $NetBSD: buildlink3.mk,v 1.14 2023/10/25 05:50:43 pin 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.56.1
+BUILDLINK_PKGSRCDIR.rust?= ../../wip/rust
+BUILDLINK_PASSTHRU_DIRS+= ${PREFIX}/lib/rustlib
+.endif
+
+BUILDLINK_TREE+= -rust
diff --git a/rust180/cargo.mk b/rust180/cargo.mk
new file mode 100644
index 0000000000..2b75450d19
--- /dev/null
+++ b/rust180/cargo.mk
@@ -0,0 +1,110 @@
+# $NetBSD: cargo.mk,v 1.37 2024/05/04 20:06:55 tnn 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.
+
+MASTER_SITES?= -${MASTER_SITE_CRATESIO}${PKGBASE}/${PKGVERSION_NOREV}/download
+
+CHECK_SSP_SUPPORTED= no
+
+.include "../../lang/rust/rust.mk"
+
+USE_TOOLS+= bsdtar
+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}
+.for crate in ${CARGO_CRATE_DEPENDS}
+DISTFILES+= ${crate}.crate
+SITES.${crate}.crate+= -${MASTER_SITE_CRATESIO}${crate:C/-[0-9]+\.[0-9.]+.*$//}/${crate:C/^.*-([0-9]+\.[0-9.]+.*)$/\1/}/download
+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
+
+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} ${PREFIX}/bin/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} ${PREFIX}/bin/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/rust180/cross.mk b/rust180/cross.mk
new file mode 100644
index 0000000000..47f2b3e006
--- /dev/null
+++ b/rust180/cross.mk
@@ -0,0 +1,83 @@
+# $NetBSD: cross.mk,v 1.11 2023/07/10 12:01:24 he 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= /
+#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
+#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
+#
+#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/rust180/distinfo b/rust180/distinfo
new file mode 100644
index 0000000000..1790c20f29
--- /dev/null
+++ b/rust180/distinfo
@@ -0,0 +1,149 @@
+$NetBSD: distinfo,v 1.159 2023/06/19 14:46:47 bsiegert Exp $
+
+BLAKE2s (rust-1.77.1-aarch64_be-unknown-netbsd.tar.xz) = 5423dd837f47538992a67313a83983b583148f670f561da1d2a256fc98b5e24d
+SHA512 (rust-1.77.1-aarch64_be-unknown-netbsd.tar.xz) = 449b8520f0904e15163e6a55bec5dcdb18c0e423b6dd2450f99dd061edcdbd33e9c4fe5dc874ab09b4efabd6199f9ad595f13ecd4d69d708c68f9fc54c1da6c4
+Size (rust-1.77.1-aarch64_be-unknown-netbsd.tar.xz) = 159858112 bytes
+BLAKE2s (rust-1.79.0-aarch64-apple-darwin.tar.gz) = 9f50d07420f6344cdc67198ee3194b5fed2957260dd5dddc054a7af8c53d9afd
+SHA512 (rust-1.79.0-aarch64-apple-darwin.tar.gz) = d46685ba1542ea3c6f4e514d49538c41e21c8117d45a2cf1c7724604e5eb86a3a6e3a830fec271b117d52b2896fd77bc5b35aaa35e7e5e937f43ec34870d5fb9
+Size (rust-1.79.0-aarch64-apple-darwin.tar.gz) = 333587301 bytes
+BLAKE2s (rust-1.79.0-aarch64-unknown-linux-gnu.tar.gz) = 136afff99dc44f6744beb9fed6deab00a8f43ba52b58d1425c65abea62ffef29
+SHA512 (rust-1.79.0-aarch64-unknown-linux-gnu.tar.gz) = 2c7da6e98a3e4e253e52fcdbcccc9dedfdb318245d01ffa487b7c0e4a08be57074e5729c078656df1a4a62b3152b0d9570de5c7436a4e5e85706987f6cd0678c
+Size (rust-1.79.0-aarch64-unknown-linux-gnu.tar.gz) = 477659187 bytes
+BLAKE2s (rust-1.79.0-aarch64-unknown-netbsd-nb1.tar.xz) = c86fcc8553ab79979a707069f8601c7cfeeaff2ca098b2fda98e09829a29f371
+SHA512 (rust-1.79.0-aarch64-unknown-netbsd-nb1.tar.xz) = 71900dcb88166b7325aeb989d8e393963b4f4d175840edc7346b2d9a21cc533f1db6e9d6d79908016f67a7fee335f914f599381a858b30572ca89a49512a1ece
+Size (rust-1.79.0-aarch64-unknown-netbsd-nb1.tar.xz) = 170829728 bytes
+BLAKE2s (rust-1.79.0-arm-unknown-linux-gnueabihf.tar.gz) = 0bda605889f1664f1d007ecc8896ac4bd879372a7daea63ca3ac85775f28d9b7
+SHA512 (rust-1.79.0-arm-unknown-linux-gnueabihf.tar.gz) = 1194a450e5d977214dc3e73c303e6e2f3de0777957d16ec6c6bbb5bac8ea79b09b878cd7764ac59ec141f21b68107117c9e24da4defd5375f69b3fb8b9bd9a18
+Size (rust-1.79.0-arm-unknown-linux-gnueabihf.tar.gz) = 363633916 bytes
+BLAKE2s (rust-1.79.0-armv6-unknown-netbsd-eabihf-nb1.tar.xz) = bb347bcf94c7bf4534abd9fec799072badd3b2581c5089217864f44396c2a04e
+SHA512 (rust-1.79.0-armv6-unknown-netbsd-eabihf-nb1.tar.xz) = 4417738b8593db3b1cb21f1f1389640a33ec4b000f5fe76964a14a8bf0520b5c30f0ccf513f610d2dd47f7886b84bbe978574dcaa50d93ce690557170500b410
+Size (rust-1.79.0-armv6-unknown-netbsd-eabihf-nb1.tar.xz) = 146628408 bytes
+BLAKE2s (rust-1.79.0-armv7-unknown-linux-gnueabihf.tar.gz) = edf09f1edba4afd399bfc6bea239ab48ae1989187909aeb8f1181f190d38c69b
+SHA512 (rust-1.79.0-armv7-unknown-linux-gnueabihf.tar.gz) = 81399eccfd2766a31a824ec8130f8018c3abe668a7f86f6918780bebf761183063d1bf1af154f54cb44930e1ca755f451c654b24c9f20e00162481f0021e5167
+Size (rust-1.79.0-armv7-unknown-linux-gnueabihf.tar.gz) = 351946164 bytes
+BLAKE2s (rust-1.79.0-armv7-unknown-netbsd-eabihf-nb1.tar.xz) = cda96f407be700f67fd6b68e9f631d9a8119c794a1df497553336883f6318b98
+SHA512 (rust-1.79.0-armv7-unknown-netbsd-eabihf-nb1.tar.xz) = 7cec5490e07d18e8b5aaf5a27f758e38b77c6c54b2296187a06bd37c98da499a952835dd015c030800f095821f3d60211e23ceedee594ca0328a18d92ab8c264
+Size (rust-1.79.0-armv7-unknown-netbsd-eabihf-nb1.tar.xz) = 149672748 bytes
+BLAKE2s (rust-1.79.0-i586-unknown-netbsd.tar.xz) = 059c032bb835c281da45c95a979ef0d99ed2911b4b86c6a58841f471e738d11f
+SHA512 (rust-1.79.0-i586-unknown-netbsd.tar.xz) = 46f32ec247c2ae87e3414c262eb726bb7988341bcb9b37ed23b8ad4d6480cc8207657f2d18c0c9302292bbf2bcb806d85fd7b4f986579f00dc15b8178be593c9
+Size (rust-1.79.0-i586-unknown-netbsd.tar.xz) = 185694828 bytes
+BLAKE2s (rust-1.79.0-i686-unknown-linux-gnu.tar.gz) = 31d7466f796971968a518084ae9e2d2707f1f6e60957b661d587e8eba7254c80
+SHA512 (rust-1.79.0-i686-unknown-linux-gnu.tar.gz) = b2972d14c5dbb12df7b57cf2aed0d0402f2b8295b0fc80da7fd385803da03d63ab8d5e27c7d6693bdbe5802597d130e9fc9667bca616e5cc81d283c23fe347c7
+Size (rust-1.79.0-i686-unknown-linux-gnu.tar.gz) = 429029849 bytes
+BLAKE2s (rust-1.79.0-powerpc-unknown-netbsd.tar.xz) = 7885fb1fe5077ad82bdeb560bb9af4c21eabe9a3ff9f6afcd9e9f1dd1d641c7c
+SHA512 (rust-1.79.0-powerpc-unknown-netbsd.tar.xz) = 60820e694a88e85eda6f333c77950ee7b3adf67b3071b15c93220b120d0ce72ee54daf959e824e52d9ff0bfd76d0786db75d3aa2b2b17e1fb04475464c9a3076
+Size (rust-1.79.0-powerpc-unknown-netbsd.tar.xz) = 198348404 bytes
+BLAKE2s (rust-1.79.0-riscv64gc-unknown-netbsd.tar.xz) = bb67f5cdd034cf0bb3a873396de7090721254a6734556886f8f93e11cd1d8a03
+SHA512 (rust-1.79.0-riscv64gc-unknown-netbsd.tar.xz) = 2ddd905d72ddb65cd5ed84b09169983374c2e9868a375f77a477c8e1efe47e0fa72d894fd38ac6cc57e8dfef3a09bb16aa87eef42f1fb222ea287e90c923fe98
+Size (rust-1.79.0-riscv64gc-unknown-netbsd.tar.xz) = 187669196 bytes
+BLAKE2s (rust-1.79.0-sparc64-unknown-netbsd.tar.xz) = a1f76c31603cfc04d44a606f9be7a3fb0c50be5ed9f83f7e265fc4dcf89172a2
+SHA512 (rust-1.79.0-sparc64-unknown-netbsd.tar.xz) = 7671b15ed3290ee9ea1541b0770cd970c7baf6a9fcd615ae0757cd972665d9cf2e1ac54c47f89a8e45263c62090016852957778f78cf889d457aa6b1363008fb
+Size (rust-1.79.0-sparc64-unknown-netbsd.tar.xz) = 167745612 bytes
+BLAKE2s (rust-1.79.0-x86_64-apple-darwin.tar.gz) = 748d746565059239c098d3ecd03c12821393dd4c0202b4071265cb8dc4c19d69
+SHA512 (rust-1.79.0-x86_64-apple-darwin.tar.gz) = 978cacdb6c4e5d4b38a1b28eaaca38ed0eeb81bf67f68bdda2f6fde19da80b4bb58f4b305c661df51a4ee9085a7d2ee0859e89167afbe87806373af77363416b
+Size (rust-1.79.0-x86_64-apple-darwin.tar.gz) = 338174040 bytes
+BLAKE2s (rust-1.79.0-x86_64-unknown-freebsd.tar.gz) = 2be5e32b34aa254bdf24e59f5f58f7814926db30cf740df52d16b7fd5e08f99c
+SHA512 (rust-1.79.0-x86_64-unknown-freebsd.tar.gz) = 886e21c494d2bcaab307f51c66033bcda76100028804c86fcbb25c5eaab329b4cb05d060350270fc98e1291d6c6fea1dcf0c71668cc74517a4b405f6078c8fa2
+Size (rust-1.79.0-x86_64-unknown-freebsd.tar.gz) = 321707464 bytes
+BLAKE2s (rust-1.79.0-x86_64-unknown-illumos.tar.gz) = 935497255d398ab3264d8be8072836c7934ecdf136007b439b33ff5cbb1fbc25
+SHA512 (rust-1.79.0-x86_64-unknown-illumos.tar.gz) = 992bba31f2a17c9076ac265736f692b700afd957bce2058286930bf180ef01a931f0d56c0834194d245bc826d00bc88e8edb4f3ee3b5048f047e6eaa427b6e1d
+Size (rust-1.79.0-x86_64-unknown-illumos.tar.gz) = 213199204 bytes
+BLAKE2s (rust-1.79.0-x86_64-unknown-linux-gnu.tar.gz) = 62b441a4f50d7cf43ac0fc88d7f8cfa130660e631e7e054fb8ac09add329f497
+SHA512 (rust-1.79.0-x86_64-unknown-linux-gnu.tar.gz) = 70ce4774fea419b09b6ce4cce3de5392070d07db62c05c67964bd5317bf8de521705330c2bbbd6ad8418ca4e1cb37bfce8def83bdde9577fd66a57fbe48bc78e
+Size (rust-1.79.0-x86_64-unknown-linux-gnu.tar.gz) = 329537108 bytes
+BLAKE2s (rust-1.79.0-x86_64-unknown-netbsd.tar.xz) = 4971fcf283e43e1b3b2bc3819da73d9e8991537aece847d321d9972457f4b18c
+SHA512 (rust-1.79.0-x86_64-unknown-netbsd.tar.xz) = 7b1b94da389b79afce60e769578defd9bcec6427c95071ebf9556dee70a958e7cc38d40f3fb24a26955c2d662c4a2114657ed25f7091b0a282666505b89dde40
+Size (rust-1.79.0-x86_64-unknown-netbsd.tar.xz) = 163729172 bytes
+BLAKE2s (rust-std-1.77.1-aarch64_be-unknown-netbsd.tar.xz) = 7c0740d555c35930695d3a987a5dc6614308dcce5fab93fd670a32cee2d10af6
+SHA512 (rust-std-1.77.1-aarch64_be-unknown-netbsd.tar.xz) = 24c1aa3306701a8d3eea284fe316a7b369a2b6d97716a7de339561ed3e3090456fa503c0ec1d3272ac91591b2e231fda44bbd5c32f06ca55c2072233851070e6
+Size (rust-std-1.77.1-aarch64_be-unknown-netbsd.tar.xz) = 22754836 bytes
+BLAKE2s (rust-std-1.79.0-aarch64-apple-darwin.tar.gz) = 2a9c0de6207701699e0c1b7d68ea43e26d857e4d43d61ee4fbc28ae77b0017fa
+SHA512 (rust-std-1.79.0-aarch64-apple-darwin.tar.gz) = 431074b739f6fb9e21c68af8484e0bc3c496fde2be18e55ccb576514c76248775ca1bb5c9477b6062c9e0e5f68fedf9a18ff34e20ecf50a11157bd4c9dd4284a
+Size (rust-std-1.79.0-aarch64-apple-darwin.tar.gz) = 40079416 bytes
+BLAKE2s (rust-std-1.79.0-aarch64-unknown-linux-gnu.tar.gz) = 3143b18f7c86960717f04941efacaeebbf16363ce2db53e825afb0c2e47b688d
+SHA512 (rust-std-1.79.0-aarch64-unknown-linux-gnu.tar.gz) = b24d93f4d2b715912f097e6774570e6f8753e260b1f89043932a8ef8645266b4c63d7b4814364a96a5f77b08ab4bbe603bf053f000f8c8a8c8ad6115e8da39e2
+Size (rust-std-1.79.0-aarch64-unknown-linux-gnu.tar.gz) = 64793520 bytes
+BLAKE2s (rust-std-1.79.0-aarch64-unknown-netbsd-nb1.tar.xz) = fb51ee6c651efd914bfd99d66aebaa1539275335ef623a940434c35145c237d4
+SHA512 (rust-std-1.79.0-aarch64-unknown-netbsd-nb1.tar.xz) = a5c46b0ad9820e78ea7ee93ead375d7e62506255d6816eb8682a859a791cca87e79d7a7a15f65b65f7669bd73de4e52dee9e4ff6a94458c3b61cc8b4acb121de
+Size (rust-std-1.79.0-aarch64-unknown-netbsd-nb1.tar.xz) = 22716260 bytes
+BLAKE2s (rust-std-1.79.0-arm-unknown-linux-gnueabihf.tar.gz) = ce68e3890deebf05625baf3e092861a290a3aa50aee1684810b3a35f0310e192
+SHA512 (rust-std-1.79.0-arm-unknown-linux-gnueabihf.tar.gz) = ffac025928a27c71979b71c577ef98fed87c2defafb2dadc48a0e2fbe13a54a6489422abb72d1508c6794ad94c73e7e562156c91d5ff1cc51275e67eefe75772
+Size (rust-std-1.79.0-arm-unknown-linux-gnueabihf.tar.gz) = 36633906 bytes
+BLAKE2s (rust-std-1.79.0-armv6-unknown-netbsd-eabihf-nb1.tar.xz) = ea9792eb9210d3d6f954a5419d4d1f3fe0f968126fa024bff63e0b44944c3f23
+SHA512 (rust-std-1.79.0-armv6-unknown-netbsd-eabihf-nb1.tar.xz) = d4df5ddb3b1684d6d0b708ac99693b59141bfa0ace14e9a96903cf8cab30e4b51f296a52167a9f7dd423f414211d60a1fdbadd3629c39d11550f3b82570688d4
+Size (rust-std-1.79.0-armv6-unknown-netbsd-eabihf-nb1.tar.xz) = 21402768 bytes
+BLAKE2s (rust-std-1.79.0-armv7-unknown-linux-gnueabihf.tar.gz) = a0ade8d56901d1658cc6080a63cc41b7c04675aa2ace95d421e7902015c55e73
+SHA512 (rust-std-1.79.0-armv7-unknown-linux-gnueabihf.tar.gz) = 27995922b119d96df8bd52f186a6d5ed5b217012d7c7afc95e888414d1049c8446bee0585b83ecd063851496f5e5632d7975f2526c5e13bc07fa2a0ca1a5adf2
+Size (rust-std-1.79.0-armv7-unknown-linux-gnueabihf.tar.gz) = 38006875 bytes
+BLAKE2s (rust-std-1.79.0-armv7-unknown-netbsd-eabihf-nb1.tar.xz) = 262006ae1f3d8a962e98e3338946aab656216fefb48dc92e3d727e4d53fb3ab4
+SHA512 (rust-std-1.79.0-armv7-unknown-netbsd-eabihf-nb1.tar.xz) = 73084c0b1266964a33175a751219824110be77d705e976069b94d5daca072322c84cf028c9f6861d09990bd4164dd20a3d3e452a75523a2a44e2f7a1502a308b
+Size (rust-std-1.79.0-armv7-unknown-netbsd-eabihf-nb1.tar.xz) = 22236560 bytes
+BLAKE2s (rust-std-1.79.0-i586-unknown-netbsd.tar.xz) = 88024c08e8da6134bf68b402eea1eb2ebb17d62ff89db778863f517b78bcae6b
+SHA512 (rust-std-1.79.0-i586-unknown-netbsd.tar.xz) = 98d963da79b9959e63a9c240f2c8f7de34bf9901f33f5b2c518229e2d3b31c183d1b78fb04cc2e5b44b6c1d014195adda5fe7554dc5075e284509d0d88e4ea7b
+Size (rust-std-1.79.0-i586-unknown-netbsd.tar.xz) = 23206832 bytes
+BLAKE2s (rust-std-1.79.0-i686-unknown-linux-gnu.tar.gz) = ce1a9636585f59c3e688866f26f81bbf832092b4f721a3b272a730184856214f
+SHA512 (rust-std-1.79.0-i686-unknown-linux-gnu.tar.gz) = 2f449a6799a8df565fea267025a499a9191fc9de8a59d8400e42afc4fe7974f522bd6c236e2fb4f31828e542e4f3def2b48ddd5b44ff2574ea2c8ac16cd4ef35
+Size (rust-std-1.79.0-i686-unknown-linux-gnu.tar.gz) = 39691484 bytes
+BLAKE2s (rust-std-1.79.0-powerpc-unknown-netbsd.tar.xz) = 2dee1e3ea6419c883f86b11e54b32d6162bab9657b820f2da6be16103af7dacd
+SHA512 (rust-std-1.79.0-powerpc-unknown-netbsd.tar.xz) = 71178391f0d2c75b8edebc2106c63e760192bd1746002e8cce04802936ae678b0f650aa76e5d421631fca28abc3ddf6b378bc72ffecb2d87a7efed824062e1d0
+Size (rust-std-1.79.0-powerpc-unknown-netbsd.tar.xz) = 21572064 bytes
+BLAKE2s (rust-std-1.79.0-riscv64gc-unknown-netbsd.tar.xz) = 1d84d2509de80175b71e4c47fc98aa6873bd2fd7c36e0e5cdbf4c0d250d897f5
+SHA512 (rust-std-1.79.0-riscv64gc-unknown-netbsd.tar.xz) = 2ab1b358b028023facd1f948287a65ba0855aaf315ba504e09fb178093ae8119407188012a0ebbf5b2282679b0a0db24011ef66f82046319cc918c1bbe05c9a3
+Size (rust-std-1.79.0-riscv64gc-unknown-netbsd.tar.xz) = 21517900 bytes
+BLAKE2s (rust-std-1.79.0-sparc64-unknown-netbsd.tar.xz) = 53210e31662e2c379a875b3e979b36e86bfc4a2ac5d51afbe59e274e13433d7a
+SHA512 (rust-std-1.79.0-sparc64-unknown-netbsd.tar.xz) = 657f9b409c40c2b59ff7638b67c2e67af35ff789dfd60aab3e0b4d57874b56a6559320869528e9e7683e3abde005328358d5df908004c375ab8120c7a016887e
+Size (rust-std-1.79.0-sparc64-unknown-netbsd.tar.xz) = 21195912 bytes
+BLAKE2s (rust-std-1.79.0-x86_64-apple-darwin.tar.gz) = 795f2e1d819d72caa457261a4705067c3dd0d2c1f62d80d9d470015c88a3d6c4
+SHA512 (rust-std-1.79.0-x86_64-apple-darwin.tar.gz) = 213cac375caff4c6e4958b547ea8bddc65ffacba3b9b6a9f9a785605d9f6215ac6e765b319d8761dd162b1fc6dccdc81ed17f36611ccb549f4d0de132c8acfbb
+Size (rust-std-1.79.0-x86_64-apple-darwin.tar.gz) = 41816064 bytes
+BLAKE2s (rust-std-1.79.0-x86_64-unknown-freebsd.tar.gz) = aaecc0acec6b054b6a04222e86717cf0ce7bcf1521dfdad86de344578b2feb56
+SHA512 (rust-std-1.79.0-x86_64-unknown-freebsd.tar.gz) = 4a18c59f59b3be8d4e8507add54be24e5c2512f92d0ea6df94951de2113a8e884b19aa45566a96c7bd3f7a6b21cffe4105d6206148bc4f63cf2e9b3ba18147d5
+Size (rust-std-1.79.0-x86_64-unknown-freebsd.tar.gz) = 42728681 bytes
+BLAKE2s (rust-std-1.79.0-x86_64-unknown-linux-gnu.tar.gz) = c7c609fdc4cbc2b2b809fa38057c8b4e0e2fee4b27146f22c943e34d8df20c13
+SHA512 (rust-std-1.79.0-x86_64-unknown-linux-gnu.tar.gz) = aa836c267341c5b902a010e330931778d948c0dc202184fd95e5dc98efbfa9e1e0e3a79a5e0fc3bf1e22cf7862425c72e8ae853783fa5efd962ce8d6f5badffb
+Size (rust-std-1.79.0-x86_64-unknown-linux-gnu.tar.gz) = 45178826 bytes
+BLAKE2s (rust-std-1.79.0-x86_64-unknown-netbsd.tar.xz) = 539c691f46329683c01e37a065fff061c6fbc7c6aedc14bccff579844003c3b6
+SHA512 (rust-std-1.79.0-x86_64-unknown-netbsd.tar.xz) = f8f82e8c9a5f49ac60db401178777b7e7a12486c4a21ea9b555af4a9ea765b9122803d3e13eb0f16ce94790d1a92344f0bc75910ff39ffcb2d8559e9c00d4c1c
+Size (rust-std-1.79.0-x86_64-unknown-netbsd.tar.xz) = 25697328 bytes
+BLAKE2s (rustc-1.80.0-src.tar.gz) = a4e879f04dbd44e8279e2e74e6c41ce57cef8738efe90e8f4fa249b940e2ab64
+SHA512 (rustc-1.80.0-src.tar.gz) = e0d4c8b7ebc8b54d5cac044118ddd067a8e6529b5d4fc5d348d886c451e462e7ffef1c25fb95f3379ba716bda852b1a0d84f7dd32baaa560aea7dcca7b86740c
+Size (rustc-1.80.0-src.tar.gz) = 377929136 bytes
+SHA1 (patch-compiler_rustc__codegen__ssa_src_back_linker.rs) = f5336828d70f9fc684ea871a6869138ac7a18b4f
+SHA1 (patch-compiler_rustc__llvm_build.rs) = a4a66d449fc9eb99d648d02a041778a68f4f7ce8
+SHA1 (patch-compiler_rustc__target_src_spec_base_netbsd.rs) = 7d910631f49acf2c33fdd191fd3e0f261efae234
+SHA1 (patch-compiler_rustc__target_src_spec_mod.rs) = a22b5d28997ed9a5565deec9c34322165d563d00
+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_mips64el__unknown__netbsd.rs) = e97b7978cc525db7eadf967d51f4818a3c145754
+SHA1 (patch-compiler_rustc__target_src_spec_targets_mipsel__unknown__netbsd.rs) = 7deeb7d1d3306e96891dec144ac90398b88c6ad4
+SHA1 (patch-compiler_rustc__target_src_spec_targets_sparc64__unknown__netbsd.rs) = 847022a9c02d277f39e2c842f23a9ed401bc5534
+SHA1 (patch-library_backtrace_src_symbolize_gimli.rs) = 9d5ef634c5a454e474ea5fee76da9bb768f5b3d9
+SHA1 (patch-library_backtrace_src_symbolize_gimli_elf.rs) = 3b84a462c6bc8245d579452e4c37e3ce13314952
+SHA1 (patch-library_std_src_sys_pal_unix_mod.rs) = bfc59ae4568547e3ed71c8b31ba5b5b5363d5d40
+SHA1 (patch-src_bootstrap_bootstrap.py) = 5cd73003292c935ce0e405edd132180233a04857
+SHA1 (patch-src_bootstrap_src_core_build__steps_compile.rs) = 4696304623232acd419ad15597f539a10a014271
+SHA1 (patch-src_bootstrap_src_core_build__steps_install.rs) = cc6558df42c9c9ac28fdb2ff180bdaa7f22ce816
+SHA1 (patch-src_bootstrap_src_core_builder.rs) = e3fd19e0a18f1e79e287c85035ea431b98d91d9a
+SHA1 (patch-src_bootstrap_src_lib.rs) = d29bc3c0b335d5e788eecbb02fc08966beef0fb1
+SHA1 (patch-src_llvm-project_llvm_CMakeLists.txt) = 7abfabb6ec70df229a69355f8c76825610165c37
+SHA1 (patch-src_llvm-project_llvm_cmake_modules_AddLLVM.cmake) = e1b2eb2f0b3cf1cf87b443656ae306b3242f6b12
+SHA1 (patch-src_llvm-project_llvm_include_llvm-c_DataTypes.h) = cb011fc19957883c01725797f7c85ed1b20f96f1
+SHA1 (patch-src_llvm-project_llvm_include_llvm_Analysis_ConstantFolding.h) = 39d76e6659143d154ae690ac70781b698a2023d8
+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) = 60713699c968f3e389f486e796009d31a5048906
+SHA1 (patch-src_tools_rust-installer_install-template.sh) = 6984546c34a2e4d55a6dbe59baa0d4958184e0b7
+SHA1 (patch-vendor_cc-1.0.73_src_lib.rs) = 690b3feaa619050512254d7c18fd4f51da98e279
+SHA1 (patch-vendor_crossbeam-utils-0.8.18_no__atomic.rs) = d4d9288cb199af9bc7e321fbd2b42860aed954ec
+SHA1 (patch-vendor_libc-0.2.148_src_unix_bsd_netbsdlike_netbsd_mips.rs) = 0895df54084281263b9dae67e57f68168fb66bd4
+SHA1 (patch-vendor_libc-0.2.148_src_unix_bsd_netbsdlike_netbsd_riscv64.rs) = 8699853de4225d4e5953d6bf17b59bc463fa7b5d
+SHA1 (patch-vendor_libc-0.2.153_src_unix_solarish_mod.rs) = dfa5ec7f1c69e3ca4ff8574dcd248bdce6c82f0b
+SHA1 (patch-vendor_libc-0.2.154_src_unix_solarish_mod.rs) = e8f72fb13df8b9e111d296bcf3597343496219b5
+SHA1 (patch-vendor_libc-0.2.155_src_unix_solarish_mod.rs) = 97505b88875aa80fa2b5589b6090237c3786e143
+SHA1 (patch-vendor_openssl-src-111.28.2+1.1.1w_openssl_Configurations_10-main.conf) = ac2963bca8d1dc4e196693d9f5a264f38355314a
+SHA1 (patch-vendor_openssl-src-111.28.2+1.1.1w_src_lib.rs) = c87435bef2899b30b5cdb1b525193489988b2476
+SHA1 (patch-vendor_openssl-sys-0.9.102_build_find__normal.rs) = 2cf1432ed2be79677d41f267f9a08ff3082e9cbc
+SHA1 (patch-vendor_openssl-sys-0.9.102_build_main.rs) = 8861b7d3acc1643f7fe6f494b18d452ac70cf810
+SHA1 (patch-vendor_openssl-sys-0.9.92_build_find__normal.rs) = 91ad0d3e78055a5a205d55cd2c260cde70233bfe
+SHA1 (patch-vendor_openssl-sys-0.9.92_build_main.rs) = a47c0b7144466592aca3b622cb77498d59c5dfc4
+SHA1 (patch-vendor_rustc-ap-rustc__target_src_spec_aarch64__be__unknown__netbsd.rs) = 4e86aec4c89db9a331950a12f8ec7b8aaa50eed7
diff --git a/rust180/do-cross.mk b/rust180/do-cross.mk
new file mode 100644
index 0000000000..8c7070433d
--- /dev/null
+++ b/rust180/do-cross.mk
@@ -0,0 +1,107 @@
+# $NetBSD$
+# 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
+
+# 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
+
+# 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
+
+# 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
+
+# Optional target tweak for bootstrap files
+#TT.powerpc= powerpc-unknown-netbsd90
+
+WRKDIR= ${.CURDIR}/work
+SCRIPTS= ${WRKDIR}/scripts
+
+#DEBUG= echo
+
+# Make list of make targets
+.for st in ${SHORT_TARGETS}
+MTGTS+= do-${st}
+.endfor
+
+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
+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/rust180/files/gcc-wrap b/rust180/files/gcc-wrap
new file mode 100644
index 0000000000..957ebfa032
--- /dev/null
+++ b/rust180/files/gcc-wrap
@@ -0,0 +1,199 @@
+#! /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"
+ ;;
+ 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
+ args="$args -isystem =$1"
+ ;;
+# 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/rust180/options.mk b/rust180/options.mk
new file mode 100644
index 0000000000..3557dba720
--- /dev/null
+++ b/rust180/options.mk
@@ -0,0 +1,74 @@
+# $NetBSD: options.mk,v 1.26 2022/07/11 20:13:50 jperkin Exp $
+
+PKG_OPTIONS_VAR= PKG_OPTIONS.rust
+PKG_SUPPORTED_OPTIONS+= rust-cargo-static rust-docs
+
+.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) || ${MACHINE_PLATFORM:MDarwin-*-aarch64}
+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
+
+# 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).
+.if ${MACHINE_PLATFORM:MNetBSD-10.*-sparc64}
+. if !empty(PKG_OPTIONS:Mrust-internal-llvm)
+# Require GCC 12 (from pkgsrc) to correctly build the embedded LLVM (17.x).
+GCC_REQD+= 12
+. endif
+.endif
+
+# 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
+
+PKG_OPTIONS_LEGACY_OPTS+= rust-llvm:rust-internal-llvm
+
+.include "../../mk/bsd.options.mk"
+
+#
+# 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}
+.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
+
+#
+# Install documentation.
+#
+.if !empty(PKG_OPTIONS:Mrust-docs)
+CONFIGURE_ARGS+= --enable-docs
+.else
+CONFIGURE_ARGS+= --disable-docs
+.endif
diff --git a/rust180/patches/patch-compiler_rustc__codegen__ssa_src_back_linker.rs b/rust180/patches/patch-compiler_rustc__codegen__ssa_src_back_linker.rs
new file mode 100644
index 0000000000..b315aa9153
--- /dev/null
+++ b/rust180/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.17 2024/07/27 02:35:24 tnn Exp $
+
+Do not use @rpath on Darwin.
+Find external libunwind on Linux.
+
+--- compiler/rustc_codegen_ssa/src/back/linker.rs.orig 2006-07-24 01:21:28.000000000 +0000
++++ compiler/rustc_codegen_ssa/src/back/linker.rs
+@@ -312,7 +312,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.linker_args(&[OsString::from("-install_name"), rpath]);
+ }
+@@ -462,6 +462,10 @@ impl<'a> Linker for GccLinker<'a> {
+ self.linker_arg("--as-needed");
+ }
+ }
++ if self.sess.target.os.contains("linux") && name == "unwind" {
++ self.linker_arg("-rpath,@PREFIX@/lib");
++ self.linker_arg("-L@PREFIX@/lib");
++ }
+ }
+
+ fn link_framework_by_name(&mut self, name: &str, _verbatim: bool, as_needed: bool) {
diff --git a/rust180/patches/patch-compiler_rustc__llvm_build.rs b/rust180/patches/patch-compiler_rustc__llvm_build.rs
new file mode 100644
index 0000000000..4edd1eebea
--- /dev/null
+++ b/rust180/patches/patch-compiler_rustc__llvm_build.rs
@@ -0,0 +1,50 @@
+$NetBSD: patch-compiler_rustc__llvm_build.rs,v 1.17 2024/04/18 09:29:42 pin 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/rust180/patches/patch-compiler_rustc__target_src_spec_base_netbsd.rs b/rust180/patches/patch-compiler_rustc__target_src_spec_base_netbsd.rs
new file mode 100644
index 0000000000..c1ed446d2f
--- /dev/null
+++ b/rust180/patches/patch-compiler_rustc__target_src_spec_base_netbsd.rs
@@ -0,0 +1,32 @@
+$NetBSD$
+
+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::{cvs, RelroLevel, TargetOptions};
++use crate::spec::{cvs, Cc, Lld, RelroLevel, LinkerFlavor, TargetOptions};
+
+ pub 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: "netbsd".into(),
+ 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/rust180/patches/patch-compiler_rustc__target_src_spec_mod.rs b/rust180/patches/patch-compiler_rustc__target_src_spec_mod.rs
new file mode 100644
index 0000000000..48bba380a5
--- /dev/null
+++ b/rust180/patches/patch-compiler_rustc__target_src_spec_mod.rs
@@ -0,0 +1,14 @@
+$NetBSD: patch-compiler_rustc__target_src_spec_mod.rs,v 1.17 2024/04/18 09:29:42 pin Exp $
+
+Add entry for NetBSD/mips64el.
+
+--- compiler/rustc_target/src/spec/mod.rs.orig 2024-01-13 14:20:59.236278792 +0000
++++ compiler/rustc_target/src/spec/mod.rs
+@@ -1532,6 +1532,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/rust180/patches/patch-compiler_rustc__target_src_spec_targets_aarch64__be__unknown__netbsd.rs b/rust180/patches/patch-compiler_rustc__target_src_spec_targets_aarch64__be__unknown__netbsd.rs
new file mode 100644
index 0000000000..64f75d7aa0
--- /dev/null
+++ b/rust180/patches/patch-compiler_rustc__target_src_spec_targets_aarch64__be__unknown__netbsd.rs
@@ -0,0 +1,17 @@
+$NetBSD$
+
+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/rust180/patches/patch-compiler_rustc__target_src_spec_targets_aarch64__unknown__netbsd.rs b/rust180/patches/patch-compiler_rustc__target_src_spec_targets_aarch64__unknown__netbsd.rs
new file mode 100644
index 0000000000..870b6f0931
--- /dev/null
+++ b/rust180/patches/patch-compiler_rustc__target_src_spec_targets_aarch64__unknown__netbsd.rs
@@ -0,0 +1,17 @@
+$NetBSD$
+
+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/rust180/patches/patch-compiler_rustc__target_src_spec_targets_mips64el__unknown__netbsd.rs b/rust180/patches/patch-compiler_rustc__target_src_spec_targets_mips64el__unknown__netbsd.rs
new file mode 100644
index 0000000000..e4ff43501d
--- /dev/null
+++ b/rust180/patches/patch-compiler_rustc__target_src_spec_targets_mips64el__unknown__netbsd.rs
@@ -0,0 +1,35 @@
+$NetBSD$
+
+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,28 @@
++use crate::abi::Endian;
++use crate::spec::{base, Target, TargetOptions};
++
++pub 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: crate::spec::TargetMetadata {
++ description: None,
++ tier: None,
++ host_tools: None,
++ std: None,
++ },
++ pointer_width: 32,
++ data_layout: "e-m:m-p:32:32-i8:8:32-i16:16:32-i64:64-n32-S64".into(),
++ arch: "mips".into(),
++ options: TargetOptions {
++ abi: "n32".into(),
++ features: "+soft-float,+abi=n32".into(),
++ endian: Endian::Little,
++ mcount: "__mcount".into(),
++ ..base
++ },
++ }
++}
diff --git a/rust180/patches/patch-compiler_rustc__target_src_spec_targets_mipsel__unknown__netbsd.rs b/rust180/patches/patch-compiler_rustc__target_src_spec_targets_mipsel__unknown__netbsd.rs
new file mode 100644
index 0000000000..9f9b89dbe0
--- /dev/null
+++ b/rust180/patches/patch-compiler_rustc__target_src_spec_targets_mipsel__unknown__netbsd.rs
@@ -0,0 +1,14 @@
+$NetBSD$
+
+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
+@@ -21,6 +21,7 @@ pub fn target() -> Target {
+ features: "+soft-float".into(),
+ mcount: "__mcount".into(),
+ endian: Endian::Little,
++ has_thread_local: false, // Let's see if there's a difference...
+ ..base
+ },
+ }
diff --git a/rust180/patches/patch-compiler_rustc__target_src_spec_targets_sparc64__unknown__netbsd.rs b/rust180/patches/patch-compiler_rustc__target_src_spec_targets_sparc64__unknown__netbsd.rs
new file mode 100644
index 0000000000..c7ab248900
--- /dev/null
+++ b/rust180/patches/patch-compiler_rustc__target_src_spec_targets_sparc64__unknown__netbsd.rs
@@ -0,0 +1,29 @@
+$NetBSD$
+
+Make more similar to other sparc64 target specs.
+
+--- compiler/rustc_target/src/spec/targets/sparc64_unknown_netbsd.rs.orig 2006-07-24 01:21:28.000000000 +0000
++++ compiler/rustc_target/src/spec/targets/sparc64_unknown_netbsd.rs
+@@ -1,11 +1,13 @@
+ use crate::abi::Endian;
+-use crate::spec::{base, Cc, LinkerFlavor, Lld, Target, TargetOptions};
++use crate::spec::{base, Cc, LinkerFlavor, Lld, Target};
+
+ pub fn target() -> Target {
+ let mut base = base::netbsd::opts();
+ base.cpu = "v9".into();
+ base.add_pre_link_args(LinkerFlavor::Gnu(Cc::Yes, Lld::No), &["-m64"]);
+ base.max_atomic_width = Some(64);
++ base.endian = Endian::Big;
++ base.mcount = "__mcount".into();
+
+ Target {
+ llvm_target: "sparc64-unknown-netbsd".into(),
+@@ -18,6 +20,6 @@ pub fn target() -> Target {
+ pointer_width: 64,
+ data_layout: "E-m:e-i64:64-n32:64-S128".into(),
+ arch: "sparc64".into(),
+- options: TargetOptions { endian: Endian::Big, mcount: "__mcount".into(), ..base },
++ options: base,
+ }
+ }
diff --git a/rust180/patches/patch-library_backtrace_src_symbolize_gimli.rs b/rust180/patches/patch-library_backtrace_src_symbolize_gimli.rs
new file mode 100644
index 0000000000..9084324dd8
--- /dev/null
+++ b/rust180/patches/patch-library_backtrace_src_symbolize_gimli.rs
@@ -0,0 +1,14 @@
+$NetBSD$
+
+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/rust180/patches/patch-library_backtrace_src_symbolize_gimli_elf.rs b/rust180/patches/patch-library_backtrace_src_symbolize_gimli_elf.rs
new file mode 100644
index 0000000000..a262257884
--- /dev/null
+++ b/rust180/patches/patch-library_backtrace_src_symbolize_gimli_elf.rs
@@ -0,0 +1,25 @@
+$NetBSD: patch-library_backtrace_src_symbolize_gimli_elf.rs,v 1.8 2024/04/18 09:29:42 pin 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
+@@ -304,11 +304,17 @@ fn decompress_zlib(input: &[u8], output:
+ }
+ }
+
++#[cfg(target_os = "netbsd")]
++const DEBUG_PATH: &[u8] = b"/usr/libdata/debug";
++#[cfg(not(target_os = "netbsd"))]
+ const DEBUG_PATH: &[u8] = b"/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/rust180/patches/patch-library_std_src_sys_pal_unix_mod.rs b/rust180/patches/patch-library_std_src_sys_pal_unix_mod.rs
new file mode 100644
index 0000000000..403ccd725e
--- /dev/null
+++ b/rust180/patches/patch-library_std_src_sys_pal_unix_mod.rs
@@ -0,0 +1,14 @@
+$NetBSD$
+
+Add libexecinfo for backtrace() on NetBSD.
+
+--- library/std/src/sys/pal/unix/mod.rs.orig 2024-03-22 12:47:54.470537834 +0000
++++ library/std/src/sys/pal/unix/mod.rs
+@@ -384,6 +384,7 @@ cfg_if::cfg_if! {
+ #[link(name = "pthread")]
+ extern "C" {}
+ } else if #[cfg(target_os = "netbsd")] {
++ #[link(name = "execinfo")]
+ #[link(name = "pthread")]
+ #[link(name = "rt")]
+ extern "C" {}
diff --git a/rust180/patches/patch-src_bootstrap_bootstrap.py b/rust180/patches/patch-src_bootstrap_bootstrap.py
new file mode 100644
index 0000000000..b4d69452da
--- /dev/null
+++ b/rust180/patches/patch-src_bootstrap_bootstrap.py
@@ -0,0 +1,47 @@
+$NetBSD: patch-src_bootstrap_bootstrap.py,v 1.23 2024/04/18 09:29:42 pin Exp $
+
+Use `uname -p` on NetBSD, as that is reliable and sensible there.
+Handle earmv[67]hf for NetBSD.
+Also use @PREFIX@ and not $ORIGIN in rpath.
+
+--- src/bootstrap/bootstrap.py.orig 2023-07-12 03:32:40.000000000 +0000
++++ src/bootstrap/bootstrap.py
+@@ -271,6 +271,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]
+@@ -374,10 +379,16 @@ def default_build_triple(verbose):
+ kernel = 'linux-androideabi'
+ else:
+ kernel += 'eabihf'
+- elif cputype in {'armv7l', 'armv8l'}:
++ elif cputype in {'armv6hf', 'earmv6hf'}:
++ cputype = 'armv6'
++ if kernel == 'unknown-netbsd':
++ kernel += '-eabihf'
++ elif cputype in {'armv7l', 'earmv7hf', 'armv8l'}:
+ cputype = 'armv7'
+ if kernel == 'linux-android':
+ kernel = 'linux-androideabi'
++ elif kernel == 'unknown-netbsd':
++ kernel += '-eabihf'
+ else:
+ kernel += 'eabihf'
+ elif cputype == 'mips':
+@@ -735,7 +746,7 @@ class RustBuild(object):
+ rpath_entries = [
+ # Relative default, all binary and dynamic libraries we ship
+ # appear to have this (even when `../lib` is redundant).
+- "$ORIGIN/../lib",
++ "@PREFIX@/lib",
+ os.path.join(os.path.realpath(nix_deps_dir), "lib")
+ ]
+ patchelf_args = ["--set-rpath", ":".join(rpath_entries)]
diff --git a/rust180/patches/patch-src_bootstrap_src_core_build__steps_compile.rs b/rust180/patches/patch-src_bootstrap_src_core_build__steps_compile.rs
new file mode 100644
index 0000000000..485349b7ec
--- /dev/null
+++ b/rust180/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.2 2024/04/18 09:29:42 pin 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
+@@ -626,7 +626,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(&dst, &format!("@rpath/{}", &runtime.name));
++ apple_darwin_update_library_name(&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(&dst);
diff --git a/rust180/patches/patch-src_bootstrap_src_core_build__steps_install.rs b/rust180/patches/patch-src_bootstrap_src_core_build__steps_install.rs
new file mode 100644
index 0000000000..8fa745ac41
--- /dev/null
+++ b/rust180/patches/patch-src_bootstrap_src_core_build__steps_install.rs
@@ -0,0 +1,13 @@
+$NetBSD$
+
+--- src/bootstrap/src/core/build_steps/install.rs.orig 2006-07-24 01:21:28.000000000 +0000
++++ src/bootstrap/src/core/build_steps/install.rs
+@@ -200,7 +200,7 @@ macro_rules! install {
+ install!((self, builder, _config),
+ Docs, path = "src/doc", _config.docs, only_hosts: false, {
+ let tarball = builder.ensure(dist::Docs { host: self.target }).expect("missing docs");
+- install_sh(builder, "docs", self.compiler.stage, Some(self.target), &tarball);
++ install_sh(builder, "rust", self.compiler.stage, Some(self.target), &tarball);
+ };
+ Std, path = "library/std", true, only_hosts: false, {
+ // `expect` should be safe, only None when host != build, but this
diff --git a/rust180/patches/patch-src_bootstrap_src_core_builder.rs b/rust180/patches/patch-src_bootstrap_src_core_builder.rs
new file mode 100644
index 0000000000..7db4e8beb1
--- /dev/null
+++ b/rust180/patches/patch-src_bootstrap_src_core_builder.rs
@@ -0,0 +1,28 @@
+$NetBSD: patch-src_bootstrap_src_core_builder.rs,v 1.5 2024/07/27 02:35:24 tnn Exp $
+
+Find external libunwind on Linux.
+Use @PREFIX@, not $ORIGIN in rpath.
+
+--- src/bootstrap/src/core/builder.rs.orig 2006-07-24 01:21:28.000000000 +0000
++++ src/bootstrap/src/core/builder.rs
+@@ -2149,6 +2149,11 @@ impl<'a> Builder<'a> {
+ rustflags.arg(v);
+ });
+
++ // added for pkgsrc libunwind
++ if target.contains("linux") {
++ rustflags.arg("-Clink-args=-Wl,-rpath,@PREFIX@/lib,-L@PREFIX@/lib");
++ }
++
+ Cargo {
+ command: cargo,
+ compiler,
+@@ -2513,7 +2518,7 @@ impl Cargo {
+ Some(format!("-Wl,-rpath,@loader_path/../{libdir}"))
+ } else if !target.is_windows() && !target.contains("aix") && !target.contains("xous") {
+ self.rustflags.arg("-Clink-args=-Wl,-z,origin");
+- Some(format!("-Wl,-rpath,$ORIGIN/../{libdir}"))
++ Some(format!("-Wl,-rpath,@PREFIX@/{libdir}"))
+ } else {
+ None
+ };
diff --git a/rust180/patches/patch-src_bootstrap_src_lib.rs b/rust180/patches/patch-src_bootstrap_src_lib.rs
new file mode 100644
index 0000000000..d3d2e25ffb
--- /dev/null
+++ b/rust180/patches/patch-src_bootstrap_src_lib.rs
@@ -0,0 +1,23 @@
+$NetBSD: patch-src_bootstrap_src_lib.rs,v 1.2 2024/04/18 09:29:42 pin Exp $
+
+Don't filter out optimization flags.
+FreeBSD has a particular C++ runtime library name
+
+--- src/bootstrap/src/lib.rs.orig 2024-01-06 20:52:50.892941220 +0000
++++ src/bootstrap/src/lib.rs
+@@ -1195,13 +1195,13 @@ impl Build {
+ .args()
+ .iter()
+ .map(|s| s.to_string_lossy().into_owned())
+- .filter(|s| !s.starts_with("-O") && !s.starts_with("/O"))
+ .collect::<Vec<String>>();
+
+ // 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());
+ }
+
diff --git a/rust180/patches/patch-src_llvm-project_llvm_CMakeLists.txt b/rust180/patches/patch-src_llvm-project_llvm_CMakeLists.txt
new file mode 100644
index 0000000000..d0dfe4e6da
--- /dev/null
+++ b/rust180/patches/patch-src_llvm-project_llvm_CMakeLists.txt
@@ -0,0 +1,18 @@
+$NetBSD: patch-src_llvm-project_llvm_CMakeLists.txt,v 1.14 2024/04/18 09:29:42 pin Exp $
+
+Don't implement sys/regset.h workaround, fix source instead.
+
+--- src/llvm-project/llvm/CMakeLists.txt.orig 2018-03-10 02:51:13.000000000 +0000
++++ src/llvm-project/llvm/CMakeLists.txt
+@@ -939,11 +939,6 @@ if(LLVM_TARGET_IS_CROSSCOMPILE_HOST)
+ # (this is a variable that CrossCompile sets on recursive invocations)
+ 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_executable_symbols(target).
+ set(CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS "")
diff --git a/rust180/patches/patch-src_llvm-project_llvm_cmake_modules_AddLLVM.cmake b/rust180/patches/patch-src_llvm-project_llvm_cmake_modules_AddLLVM.cmake
new file mode 100644
index 0000000000..6a701cd3aa
--- /dev/null
+++ b/rust180/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.15 2024/04/18 09:29:42 pin 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
+@@ -2311,7 +2311,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.
+@@ -2320,8 +2320,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 ")
+@@ -2335,16 +2334,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/rust180/patches/patch-src_llvm-project_llvm_include_llvm-c_DataTypes.h b/rust180/patches/patch-src_llvm-project_llvm_include_llvm-c_DataTypes.h
new file mode 100644
index 0000000000..8722fdfe38
--- /dev/null
+++ b/rust180/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/rust180/patches/patch-src_llvm-project_llvm_include_llvm_Analysis_ConstantFolding.h b/rust180/patches/patch-src_llvm-project_llvm_include_llvm_Analysis_ConstantFolding.h
new file mode 100644
index 0000000000..159d4a70de
--- /dev/null
+++ b/rust180/patches/patch-src_llvm-project_llvm_include_llvm_Analysis_ConstantFolding.h
@@ -0,0 +1,17 @@
+$NetBSD: patch-src_llvm-project_llvm_include_llvm_Analysis_ConstantFolding.h,v 1.10 2024/04/18 09:29:42 pin Exp $
+
+Fix SunOS CS conflict not handled by include/llvm-c/DataTypes.h
+
+--- src/llvm-project/llvm/include/llvm/Analysis/ConstantFolding.h.orig 2018-08-01 16:32:37.000000000 +0000
++++ src/llvm-project/llvm/include/llvm/Analysis/ConstantFolding.h
+@@ -19,6 +19,10 @@
+ #ifndef LLVM_ANALYSIS_CONSTANTFOLDING_H
+ #define LLVM_ANALYSIS_CONSTANTFOLDING_H
+
++#ifdef __sun
++#undef CS
++#endif
++
+ #include <stdint.h>
+
+ namespace llvm {
diff --git a/rust180/patches/patch-src_llvm-project_llvm_utils_FileCheck_FileCheck.cpp b/rust180/patches/patch-src_llvm-project_llvm_utils_FileCheck_FileCheck.cpp
new file mode 100644
index 0000000000..e255aa5af9
--- /dev/null
+++ b/rust180/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/rust180/patches/patch-src_tools_cargo_src_cargo_core_profiles.rs b/rust180/patches/patch-src_tools_cargo_src_cargo_core_profiles.rs
new file mode 100644
index 0000000000..0d2e97d952
--- /dev/null
+++ b/rust180/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/rust180/patches/patch-src_tools_cargo_tests_testsuite_build.rs b/rust180/patches/patch-src_tools_cargo_tests_testsuite_build.rs
new file mode 100644
index 0000000000..9eab28030c
--- /dev/null
+++ b/rust180/patches/patch-src_tools_cargo_tests_testsuite_build.rs
@@ -0,0 +1,31 @@
+$NetBSD: patch-src_tools_cargo_tests_testsuite_build.rs,v 1.14 2024/04/18 09:29:42 pin 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 2019-08-13 06:27:40.000000000 +0000
++++ src/tools/cargo/tests/testsuite/build.rs
+@@ -47,6 +47,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()
+@@ -69,6 +70,7 @@ fn cargo_compile_incremental() {
+ .run();
+ }
+
++#[cfg(not(target_arch = "sparc64"))]
+ #[cargo_test]
+ fn incremental_profile() {
+ let p = project()
+@@ -111,6 +113,7 @@ fn incremental_profile() {
+ .run();
+ }
+
++#[cfg(not(target_arch = "sparc64"))]
+ #[cargo_test]
+ fn incremental_config() {
+ let p = project()
diff --git a/rust180/patches/patch-src_tools_rust-installer_install-template.sh b/rust180/patches/patch-src_tools_rust-installer_install-template.sh
new file mode 100644
index 0000000000..556cade057
--- /dev/null
+++ b/rust180/patches/patch-src_tools_rust-installer_install-template.sh
@@ -0,0 +1,179 @@
+$NetBSD: patch-src_tools_rust-installer_install-template.sh,v 1.14 2024/04/18 09:29:42 pin Exp $
+
+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.
+
+Rewrite to not use a whole lot of subprocesses just for doing
+pattern matching and substitution in the install phase using "grep"
+and "sed" when shell builtin "case" and "omit shortest match" ops
+should do just fine.
+
+--- src/tools/rust-installer/install-template.sh.orig 2023-12-21 16:55:28.000000000 +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() {
+@@ -433,8 +425,8 @@ uninstall_components() {
+ local _directive
+ while read _directive; do
+
+- local _command=`echo $_directive | cut -f1 -d:`
+- local _file=`echo $_directive | cut -f2 -d:`
++ local _command=${_directive%%:*}
++ local _file=${_directive#*:}
+
+ # Sanity checks
+ if [ ! -n "$_command" ]; then critical_err "malformed installation directive"; fi
+@@ -541,8 +533,8 @@ install_components() {
+ local _directive
+ while read _directive; do
+
+- local _command=`echo $_directive | cut -f1 -d:`
+- local _file=`echo $_directive | cut -f2 -d:`
++ local _command=${_directive%%:*}
++ local _file=${_directive#*:}
+
+ # Sanity checks
+ if [ ! -n "$_command" ]; then critical_err "malformed installation directive"; fi
+@@ -551,36 +543,24 @@ install_components() {
+ # Decide the destination of the file
+ local _file_install_path="$_dest_prefix/$_file"
+
+- if echo "$_file" | grep "^etc/" > /dev/null
+- then
+- local _f="$(echo "$_file" | sed 's/^etc\///')"
+- _file_install_path="$CFG_SYSCONFDIR/$_f"
+- fi
+-
+- if echo "$_file" | grep "^bin/" > /dev/null
+- then
+- local _f="$(echo "$_file" | sed 's/^bin\///')"
+- _file_install_path="$CFG_BINDIR/$_f"
+- fi
+-
+- if echo "$_file" | grep "^lib/" > /dev/null
+- then
+- local _f="$(echo "$_file" | sed 's/^lib\///')"
+- _file_install_path="$CFG_LIBDIR/$_f"
+- fi
+-
+- if echo "$_file" | grep "^share" > /dev/null
+- then
+- local _f="$(echo "$_file" | sed 's/^share\///')"
+- _file_install_path="$CFG_DATADIR/$_f"
+- fi
+-
+- if echo "$_file" | grep "^share/man/" > /dev/null
+- then
+- local _f="$(echo "$_file" | sed 's/^share\/man\///')"
+- _file_install_path="$CFG_MANDIR/$_f"
+- fi
+-
++ case "$_file" in
++ etc/*)
++ local _f=${_file#"etc/"}
++ _file_install_path="$CFG_DESTDIR_PREFIX/share/doc/cargo/$_f"
++ ;;
++ bin/*)
++ local _f=${_file#"bin/"}
++ _file_install_path="$CFG_BINDIR/$_f"
++ ;;
++ lib/*)
++ local _f=${_file#"lib/"}
++ _file_install_path="$CFG_LIBDIR/$_f"
++ ;;
++ share/man/*)
++ local _f=${_file#"share/man/"}
++ _file_install_path="$CFG_MANDIR/$_f"
++ ;;
++ share/doc/*)
+ # HACK: Try to support overriding --docdir. Paths with the form
+ # "share/doc/$product/" can be redirected to a single --docdir
+ # path. If the following detects that --docdir has been specified
+@@ -591,14 +571,17 @@ install_components() {
+ # contents of those directories are _not_ disjoint. Since this feature
+ # is almost entirely to support 'make install' anyway I don't expect
+ # this problem to be a big deal in practice.
+- if [ "$CFG_DOCDIR" != "<default>" ]
+- then
+- if echo "$_file" | grep "^share/doc/" > /dev/null
+- then
+- local _f="$(echo "$_file" | sed 's/^share\/doc\/[^/]*\///')"
+- _file_install_path="$CFG_DOCDIR/$_f"
+- fi
+- fi
++ if [ "$CFG_DOCDIR" != "<default>" ]; then
++ local _f=${_file#"share/doc/"*/}
++ _file_install_path="$CFG_DOCDIR/$_f"
++ fi
++ ;;
++ share/*)
++ local _f=${_file#"share/"}
++ _file_install_path="$CFG_DATADIR/$_f"
++ ;;
++ esac
++
+
+ # Make sure there's a directory for it
+ make_dir_recursive "$(dirname "$_file_install_path")"
+@@ -615,16 +598,16 @@ install_components() {
+
+ verbose_msg "copying file $_file_install_path"
+
+- maybe_backup_path "$_file_install_path"
+-
+- if echo "$_file" | grep "^bin/" > /dev/null || test -x "$_src_dir/$_component/$_file"
+- then
+- run cp "$_src_dir/$_component/$_file" "$_file_install_path"
+- run chmod 755 "$_file_install_path"
+- else
++ local mode=644
++ if test -x "$_src_dir/$_component/$_file"; then
++ mode=755
++ fi
++ case "$_file" in
++ bin/*) mode=755
++ ;;
++ esac
+ run cp "$_src_dir/$_component/$_file" "$_file_install_path"
+- run chmod 644 "$_file_install_path"
+- fi
++ run chmod $mode "$_file_install_path"
+ critical_need_ok "file creation failed"
+
+ # Update the manifest
+@@ -637,7 +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"
+@@ -986,7 +968,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/rust180/patches/patch-vendor_cc-1.0.73_src_lib.rs b/rust180/patches/patch-vendor_cc-1.0.73_src_lib.rs
new file mode 100644
index 0000000000..5a7ac7e4b6
--- /dev/null
+++ b/rust180/patches/patch-vendor_cc-1.0.73_src_lib.rs
@@ -0,0 +1,16 @@
+$NetBSD$
+
+Use correct ABI on NetBSD/riscv64.
+
+--- vendor/cc-1.0.79/src/lib.rs.orig 2024-08-29 17:57:16.678636324 +0000
++++ vendor/cc-1.0.79/src/lib.rs
+@@ -1946,6 +1946,9 @@ impl Build {
+ } else if target.contains("freebsd") && arch.starts_with("64") {
+ cmd.args.push(("-march=rv64gc").into());
+ cmd.args.push("-mabi=lp64d".into());
++ } else if target.contains("netbsd") && arch.starts_with("64") {
++ cmd.args.push(("-march=rv64gc").into());
++ cmd.args.push("-mabi=lp64d".into());
+ } else if target.contains("openbsd") && arch.starts_with("64") {
+ cmd.args.push(("-march=rv64gc").into());
+ cmd.args.push("-mabi=lp64d".into());
diff --git a/rust180/patches/patch-vendor_crossbeam-utils-0.8.18_no__atomic.rs b/rust180/patches/patch-vendor_crossbeam-utils-0.8.18_no__atomic.rs
new file mode 100644
index 0000000000..8a7b3793fa
--- /dev/null
+++ b/rust180/patches/patch-vendor_crossbeam-utils-0.8.18_no__atomic.rs
@@ -0,0 +1,14 @@
+$NetBSD$
+
+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/rust180/patches/patch-vendor_libc-0.2.148_src_unix_bsd_netbsdlike_netbsd_mips.rs b/rust180/patches/patch-vendor_libc-0.2.148_src_unix_bsd_netbsdlike_netbsd_mips.rs
new file mode 100644
index 0000000000..18aa4d7328
--- /dev/null
+++ b/rust180/patches/patch-vendor_libc-0.2.148_src_unix_bsd_netbsdlike_netbsd_mips.rs
@@ -0,0 +1,29 @@
+$NetBSD$
+
+Add entry for NetBSD/mips.
+
+--- vendor/libc-0.2.148/src/unix/bsd/netbsdlike/netbsd/mips.rs.orig 2024-01-06 21:03:21.781003759 +0000
++++ vendor/libc-0.2.148/src/unix/bsd/netbsdlike/netbsd/mips.rs 2024-01-06 22:27:31.830676317 +0000
+@@ -0,0 +1,22 @@
++use PT_FIRSTMACH;
++
++pub type c_long = i32;
++pub type c_ulong = u32;
++pub type c_char = i8;
++pub type __cpu_simple_lock_nv_t = ::c_int;
++
++// should be pub(crate), but that requires Rust 1.18.0
++cfg_if! {
++ if #[cfg(libc_const_size_of)] {
++ #[doc(hidden)]
++ pub const _ALIGNBYTES: usize = ::mem::size_of::<::c_longlong>() - 1;
++ } else {
++ #[doc(hidden)]
++ pub const _ALIGNBYTES: usize = 8 - 1;
++ }
++}
++
++pub const PT_GETREGS: ::c_int = PT_FIRSTMACH + 1;
++pub const PT_SETREGS: ::c_int = PT_FIRSTMACH + 2;
++pub const PT_GETFPREGS: ::c_int = PT_FIRSTMACH + 3;
++pub const PT_SETFPREGS: ::c_int = PT_FIRSTMACH + 4;
diff --git a/rust180/patches/patch-vendor_libc-0.2.148_src_unix_bsd_netbsdlike_netbsd_riscv64.rs b/rust180/patches/patch-vendor_libc-0.2.148_src_unix_bsd_netbsdlike_netbsd_riscv64.rs
new file mode 100644
index 0000000000..cc352ff279
--- /dev/null
+++ b/rust180/patches/patch-vendor_libc-0.2.148_src_unix_bsd_netbsdlike_netbsd_riscv64.rs
@@ -0,0 +1,29 @@
+$NetBSD: patch-vendor_libc-0.2.148_src_unix_bsd_netbsdlike_netbsd_riscv64.rs,v 1.2 2024/04/18 09:29:42 pin Exp $
+
+Add support for NetBSD/riscv64.
+
+--- vendor/libc-0.2.148/src/unix/bsd/netbsdlike/netbsd/riscv64.rs.orig 2024-01-06 21:03:21.781003759 +0000
++++ vendor/libc-0.2.148/src/unix/bsd/netbsdlike/netbsd/riscv64.rs 2024-01-06 22:31:25.289387359 +0000
+@@ -0,0 +1,22 @@
++use PT_FIRSTMACH;
++
++pub type c_long = i64;
++pub type c_ulong = u64;
++pub type c_char = u8;
++pub type __cpu_simple_lock_nv_t = ::c_int;
++
++// should be pub(crate), but that requires Rust 1.18.0
++cfg_if! {
++ if #[cfg(libc_const_size_of)] {
++ #[doc(hidden)]
++ pub const _ALIGNBYTES: usize = ::mem::size_of::<::c_long>() - 1;
++ } else {
++ #[doc(hidden)]
++ pub const _ALIGNBYTES: usize = 8 - 1;
++ }
++}
++
++pub const PT_GETREGS: ::c_int = PT_FIRSTMACH + 0;
++pub const PT_SETREGS: ::c_int = PT_FIRSTMACH + 1;
++pub const PT_GETFPREGS: ::c_int = PT_FIRSTMACH + 2;
++pub const PT_SETFPREGS: ::c_int = PT_FIRSTMACH + 3;
diff --git a/rust180/patches/patch-vendor_libc-0.2.153_src_unix_solarish_mod.rs b/rust180/patches/patch-vendor_libc-0.2.153_src_unix_solarish_mod.rs
new file mode 100644
index 0000000000..2877a1f276
--- /dev/null
+++ b/rust180/patches/patch-vendor_libc-0.2.153_src_unix_solarish_mod.rs
@@ -0,0 +1,15 @@
+$NetBSD$
+
+Fix xattr build.
+
+--- vendor/libc-0.2.153/src/unix/solarish/mod.rs.orig 2024-08-29 18:01:10.748819643 +0000
++++ vendor/libc-0.2.153/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/rust180/patches/patch-vendor_libc-0.2.154_src_unix_solarish_mod.rs b/rust180/patches/patch-vendor_libc-0.2.154_src_unix_solarish_mod.rs
new file mode 100644
index 0000000000..f55875f343
--- /dev/null
+++ b/rust180/patches/patch-vendor_libc-0.2.154_src_unix_solarish_mod.rs
@@ -0,0 +1,15 @@
+$NetBSD$
+
+Fix xattr build.
+
+--- vendor/libc-0.2.154/src/unix/solarish/mod.rs.orig 2024-08-29 18:02:22.936992533 +0000
++++ vendor/libc-0.2.154/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/rust180/patches/patch-vendor_libc-0.2.155_src_unix_solarish_mod.rs b/rust180/patches/patch-vendor_libc-0.2.155_src_unix_solarish_mod.rs
new file mode 100644
index 0000000000..ee6548b217
--- /dev/null
+++ b/rust180/patches/patch-vendor_libc-0.2.155_src_unix_solarish_mod.rs
@@ -0,0 +1,15 @@
+$NetBSD$
+
+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/rust180/patches/patch-vendor_openssl-src-111.28.2+1.1.1w_openssl_Configurations_10-main.conf b/rust180/patches/patch-vendor_openssl-src-111.28.2+1.1.1w_openssl_Configurations_10-main.conf
new file mode 100644
index 0000000000..d7eb270fd1
--- /dev/null
+++ b/rust180/patches/patch-vendor_openssl-src-111.28.2+1.1.1w_openssl_Configurations_10-main.conf
@@ -0,0 +1,18 @@
+$NetBSD$
+
+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 2024-08-29 18:07:36.845484717 +0000
++++ vendor/openssl-src-111.28.2+1.1.1w/openssl/Configurations/10-main.conf
+@@ -950,6 +950,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/rust180/patches/patch-vendor_openssl-src-111.28.2+1.1.1w_src_lib.rs b/rust180/patches/patch-vendor_openssl-src-111.28.2+1.1.1w_src_lib.rs
new file mode 100644
index 0000000000..5924303d05
--- /dev/null
+++ b/rust180/patches/patch-vendor_openssl-src-111.28.2+1.1.1w_src_lib.rs
@@ -0,0 +1,62 @@
+$NetBSD$
+
+--- vendor/openssl-src-111.28.2+1.1.1w/src/lib.rs.orig 2024-08-29 18:09:29.494697634 +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,6 +269,7 @@ 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",
+ "mips-unknown-linux-gnu" => "linux-mips32",
+@@ -274,9 +280,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" => "BSD-generic32",
+ "powerpc64-unknown-freebsd" => "BSD-generic64",
+ "powerpc64-unknown-linux-gnu" => "linux-ppc64",
+ "powerpc64-unknown-linux-musl" => "linux-ppc64",
+@@ -284,8 +292,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/rust180/patches/patch-vendor_openssl-sys-0.9.102_build_find__normal.rs b/rust180/patches/patch-vendor_openssl-sys-0.9.102_build_find__normal.rs
new file mode 100644
index 0000000000..80d98e247b
--- /dev/null
+++ b/rust180/patches/patch-vendor_openssl-sys-0.9.102_build_find__normal.rs
@@ -0,0 +1,30 @@
+$NetBSD$
+
+Add hack for Darwin when homebrew is installed.
+
+--- vendor/openssl-sys-0.9.102/build/find_normal.rs.orig 2006-07-24 01:21:28.000000000 +0000
++++ vendor/openssl-sys-0.9.102/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/rust180/patches/patch-vendor_openssl-sys-0.9.102_build_main.rs b/rust180/patches/patch-vendor_openssl-sys-0.9.102_build_main.rs
new file mode 100644
index 0000000000..a15188f472
--- /dev/null
+++ b/rust180/patches/patch-vendor_openssl-sys-0.9.102_build_main.rs
@@ -0,0 +1,23 @@
+$NetBSD$
+
+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.102/build/main.rs.orig 2006-07-24 01:21:28.000000000 +0000
++++ vendor/openssl-sys-0.9.102/build/main.rs
+@@ -142,6 +142,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/rust180/patches/patch-vendor_openssl-sys-0.9.92_build_find__normal.rs b/rust180/patches/patch-vendor_openssl-sys-0.9.92_build_find__normal.rs
new file mode 100644
index 0000000000..99108643b7
--- /dev/null
+++ b/rust180/patches/patch-vendor_openssl-sys-0.9.92_build_find__normal.rs
@@ -0,0 +1,30 @@
+$NetBSD$
+
+Add hack for Darwin when homebrew is installed.
+
+--- vendor/openssl-sys-0.9.92/build/find_normal.rs.orig 2006-07-24 01:21:28.000000000 +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/rust180/patches/patch-vendor_openssl-sys-0.9.92_build_main.rs b/rust180/patches/patch-vendor_openssl-sys-0.9.92_build_main.rs
new file mode 100644
index 0000000000..0a70272949
--- /dev/null
+++ b/rust180/patches/patch-vendor_openssl-sys-0.9.92_build_main.rs
@@ -0,0 +1,23 @@
+$NetBSD$
+
+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 2006-07-24 01:21:28.000000000 +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 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/rust180/patches/patch-vendor_rustc-ap-rustc__target_src_spec_aarch64__be__unknown__netbsd.rs b/rust180/patches/patch-vendor_rustc-ap-rustc__target_src_spec_aarch64__be__unknown__netbsd.rs
new file mode 100644
index 0000000000..6c90dec84c
--- /dev/null
+++ b/rust180/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/rust180/platform.mk b/rust180/platform.mk
new file mode 100644
index 0000000000..c6a01214d8
--- /dev/null
+++ b/rust180/platform.mk
@@ -0,0 +1,31 @@
+# $NetBSD: platform.mk,v 1.27 2024/08/01 15:24:39 tnn 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
+
+.if ${MACHINE_PLATFORM:MNetBSD-*-earm*} && ${OPSYS_VERSION} < 100000
+RUST_DIR?= ../../lang/rust176
+.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/rust180/rust.mk b/rust180/rust.mk
new file mode 100644
index 0000000000..2a29bc959e
--- /dev/null
+++ b/rust180/rust.mk
@@ -0,0 +1,56 @@
+# $NetBSD: rust.mk,v 1.9 2024/07/07 11:00:37 wiz 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 bootstrap-from-source or an official binary.
+#
+# Official Rust binaries are only published for certain platforms,
+# including Darwin, FreeBSD, Linux, and NetBSD x86_64.
+#
+# Possible values: src bin
+# Default: src
+#
+# === Package-settable variables ===
+#
+# RUST_REQ
+# The minimum version of Rust required by the package.
+#
+# Default: 1.56.1
+#
+# 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.56.1
+RUST_RUNTIME?= no
+
+RUST_TYPE?= src
+
+.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
Home |
Main Index |
Thread Index |
Old Index