From 9eced46b1aac9db84021075026d2535df46fb17d Mon Sep 17 00:00:00 2001 From: Havard Eidnes Date: Sun, 23 Feb 2025 17:01:19 +0000 Subject: [PATCH] rust185: make a package for rust 1.85.0. Pkgsrc changes relative to rust184: * patch reorganization to deal with new version of upstream vendored crates, checksum updates. Version 1.85.0 (2025-02-20) ========================== Language -------- - [The 2024 Edition is now stable.] (https://github.com/rust-lang/rust/pull/133349) See [the edition guide] (https://doc.rust-lang.org/nightly/edition-guide/rust-2024/index.html) for more details. - [Stabilize async closures] (https://github.com/rust-lang/rust/pull/132706) See [RFC 3668] (https://rust-lang.github.io/rfcs/3668-async-closures.html) for more details. - [Stabilize `#[diagnostic::do_not_recommend]`] (https://github.com/rust-lang/rust/pull/132056) - [Add `unpredictable_function_pointer_comparisons` lint to warn against function pointer comparisons] (https://github.com/rust-lang/rust/pull/118833) - [Lint on combining `#[no_mangle]` and `#[export_name]` attributes.] (https://github.com/rust-lang/rust/pull/131558) Compiler -------- - [The unstable flag `-Zpolymorphize` has been removed] (https://github.com/rust-lang/rust/pull/133883), see https://github.com/rust-lang/compiler-team/issues/810 for some background. Platform Support ---------------- - [Promote `powerpc64le-unknown-linux-musl` to tier 2 with host tools] (https://github.com/rust-lang/rust/pull/133801) Refer to Rust's [platform support page][platform-support-doc] for more information on Rust's tiered platform support. Libraries --------- - [Panics in the standard library now have a leading `library/` in their path] (https://github.com/rust-lang/rust/pull/132390) - [`std::env::home_dir()` on Windows now ignores the non-standard `$HOME` environment variable] (https://github.com/rust-lang/rust/pull/132515) It will be un-deprecated in a subsequent release. - [Add `AsyncFn*` to the prelude in all editions.] (https://github.com/rust-lang/rust/pull/132611) Stabilized APIs --------------- - [`BuildHasherDefault::new`] (https://doc.rust-lang.org/stable/std/hash/struct.BuildHasherDefault.html#method.new) - [`ptr::fn_addr_eq`] (https://doc.rust-lang.org/std/ptr/fn.fn_addr_eq.html) - [`io::ErrorKind::QuotaExceeded`] (https://doc.rust-lang.org/stable/std/io/enum.ErrorKind.html#variant.QuotaExceeded) - [`io::ErrorKind::CrossesDevices`] (https://doc.rust-lang.org/stable/std/io/enum.ErrorKind.html#variant.CrossesDevices) - [`{float}::midpoint`] (https://doc.rust-lang.org/core/primitive.f32.html#method.midpoint) - [Unsigned `{integer}::midpoint`] (https://doc.rust-lang.org/std/primitive.u64.html#method.midpoint) - [`NonZeroU*::midpoint`] (https://doc.rust-lang.org/std/num/type.NonZeroU32.html#method.midpoint) - [impl `std::iter::Extend` for tuples with arity 1 through 12] (https://doc.rust-lang.org/stable/std/iter/trait.Extend.html#impl-Extend%3C(A,)%3E-for-(EA,)) - [`FromIterator<(A, ...)>` for tuples with arity 1 through 12] (https://doc.rust-lang.org/stable/std/iter/trait.FromIterator.html#impl-FromIterator%3C(EA,)%3E-for-(A,)) - [`std::task::Waker::noop`] (https://doc.rust-lang.org/stable/std/task/struct.Waker.html#method.noop) These APIs are now stable in const contexts: - [`mem::size_of_val`] (https://doc.rust-lang.org/stable/std/mem/fn.size_of_val.html) - [`mem::align_of_val`] (https://doc.rust-lang.org/stable/std/mem/fn.align_of_val.html) - [`Layout::for_value`] (https://doc.rust-lang.org/stable/std/alloc/struct.Layout.html#method.for_value) - [`Layout::align_to`] (https://doc.rust-lang.org/stable/std/alloc/struct.Layout.html#method.align_to) - [`Layout::pad_to_align`] (https://doc.rust-lang.org/stable/std/alloc/struct.Layout.html#method.pad_to_align) - [`Layout::extend`] (https://doc.rust-lang.org/stable/std/alloc/struct.Layout.html#method.extend) - [`Layout::array`] (https://doc.rust-lang.org/stable/std/alloc/struct.Layout.html#method.array) - [`std::mem::swap`] (https://doc.rust-lang.org/stable/std/mem/fn.swap.html) - [`std::ptr::swap`] (https://doc.rust-lang.org/stable/std/ptr/fn.swap.html) - [`NonNull::new`] (https://doc.rust-lang.org/stable/std/ptr/struct.NonNull.html#method.new) - [`HashMap::with_hasher`] (https://doc.rust-lang.org/stable/std/collections/struct.HashMap.html#method.with_hasher) - [`HashSet::with_hasher`] (https://doc.rust-lang.org/stable/std/collections/struct.HashSet.html#method.with_hasher) - [`BuildHasherDefault::new`] (https://doc.rust-lang.org/stable/std/hash/struct.BuildHasherDefault.html#method.new) - [`::recip`] (https://doc.rust-lang.org/stable/std/primitive.f32.html#method.recip) - [`::to_degrees`] (https://doc.rust-lang.org/stable/std/primitive.f32.html#method.to_degrees) - [`::to_radians`] (https://doc.rust-lang.org/stable/std/primitive.f32.html#method.to_radians) - [`::max`] (https://doc.rust-lang.org/stable/std/primitive.f32.html#method.max) - [`::min`] (https://doc.rust-lang.org/stable/std/primitive.f32.html#method.min) - [`::clamp`] (https://doc.rust-lang.org/stable/std/primitive.f32.html#method.clamp) - [`::abs`] (https://doc.rust-lang.org/stable/std/primitive.f32.html#method.abs) - [`::signum`] (https://doc.rust-lang.org/stable/std/primitive.f32.html#method.signum) - [`::copysign`] (https://doc.rust-lang.org/stable/std/primitive.f32.html#method.copysign) - [`MaybeUninit::write`] (https://doc.rust-lang.org/stable/std/mem/union.MaybeUninit.html#method.write) Cargo ----- - [Add future-incompatibility warning against keywords in cfgs and add raw-idents] (https://github.com/rust-lang/cargo/pull/14671/) - [Stabilize higher precedence trailing flags] (https://github.com/rust-lang/cargo/pull/14900/) - [Pass `CARGO_CFG_FEATURE` to build scripts] (https://github.com/rust-lang/cargo/pull/14902/) Rustdoc ----- - [Doc comment on impl blocks shows the first line, even when the impl block is collapsed] (https://github.com/rust-lang/rust/pull/132155) Compatibility Notes ------------------- - [`rustc` no longer treats the `test` cfg as a well known check-cfg] (https://github.com/rust-lang/rust/pull/131729), instead it is up to the build systems and users of `--check-cfg`[^check-cfg] to set it as a well known cfg using `--check-cfg=cfg(test)`. This is done to enable build systems like Cargo to set it conditionally, as not all source files are suitable for unit tests. [Cargo (for now) unconditionally sets the `test` cfg as a well known cfg] (https://github.com/rust-lang/cargo/pull/14963). [^check-cfg]: https://doc.rust-lang.org/nightly/rustc/check-cfg.html - [Disable potentially incorrect type inference if there are trivial and non-trivial where-clauses] (https://github.com/rust-lang/rust/pull/132325) - `std::env::home_dir()` has been deprecated for years, because it can give surprising results in some Windows configurations if the `HOME` environment variable is set (which is not the normal configuration on Windows). We had previously avoided changing its behavior, out of concern for compatibility with code depending on this non-standard configuration. Given how long this function has been deprecated, we're now fixing its behavior as a bugfix. A subsequent release will remove the deprecation for this function. - [Make `core::ffi::c_char` signedness more closely match that of the platform-default `char`] (https://github.com/rust-lang/rust/pull/132975) This changed `c_char` from an `i8` to `u8` or vice versa on many Tier 2 and 3 targets (mostly Arm and RISC-V embedded targets). The new definition may result in compilation failures but fixes compatibility issues with C. The `libc` crate matches this change as of its 0.2.169 release. - [When compiling a nested `macro_rules` macro from an external crate, the content of the inner `macro_rules` is now built with the edition of the external crate, not the local crate.] (https://github.com/rust-lang/rust/pull/133274) - [Increase `sparcv9-sun-solaris` and `x86_64-pc-solaris` Solaris baseline to 11.4.] (https://github.com/rust-lang/rust/pull/133293) - [Show `abi_unsupported_vector_types` lint in future breakage reports] (https://github.com/rust-lang/rust/pull/133374) - [Error if multiple super-trait instantiations of `dyn Trait` need associated types to be specified but only one is provided] (https://github.com/rust-lang/rust/pull/133392) - [Change `powerpc64-ibm-aix` default `codemodel` to large] (https://github.com/rust-lang/rust/pull/133811) Internal Changes ---------------- These changes do not affect any public interfaces of Rust, but they represent significant improvements to the performance or internals of rustc and related tools. - [Build `x86_64-unknown-linux-gnu` with LTO for C/C++ code (e.g., `jemalloc`)] (https://github.com/rust-lang/rust/pull/134690) --- rust185/DESCR | 13 + rust185/HOWTO-BOOTSTRAP | 85 ++ rust185/Makefile | 742 ++++++++++++++++++ rust185/buildlink3.mk | 17 + rust185/cargo.mk | 115 +++ rust185/cross.mk | 83 ++ rust185/distinfo | 164 ++++ rust185/do-cross.mk | 107 +++ rust185/files/gcc-wrap | 199 +++++ rust185/options.mk | 87 ++ ...ler_rustc__codegen__ssa_src_back_linker.rs | 27 + .../patch-compiler_rustc__llvm_build.rs | 50 ++ ...iler_rustc__target_src_spec_base_netbsd.rs | 32 + ...tch-compiler_rustc__target_src_spec_mod.rs | 14 + ...ec_targets_aarch64__be__unknown__netbsd.rs | 17 + ...c_spec_targets_aarch64__unknown__netbsd.rs | 17 + ..._spec_targets_mips64el__unknown__netbsd.rs | 35 + ...rc_spec_targets_mipsel__unknown__netbsd.rs | 14 + ...c_spec_targets_sparc64__unknown__netbsd.rs | 29 + ...h-library_backtrace_src_symbolize_gimli.rs | 14 + ...brary_backtrace_src_symbolize_gimli_elf.rs | 26 + .../patch-library_std_src_sys_pal_unix_mod.rs | 14 + ..._crates_std__detect_tests_cpu-detection.rs | 15 + .../patches/patch-src_bootstrap_bootstrap.py | 67 ++ ...bootstrap_src_core_build__steps_compile.rs | 15 + ...bootstrap_src_core_build__steps_install.rs | 13 + ...ch-src_bootstrap_src_core_builder_cargo.rs | 42 + .../patches/patch-src_bootstrap_src_lib.rs | 23 + ...patch-src_llvm-project_llvm_CMakeLists.txt | 18 + ...m-project_llvm_cmake_modules_AddLLVM.cmake | 49 ++ ...vm-project_llvm_include_llvm-c_DataTypes.h | 34 + ...vm_include_llvm_Analysis_ConstantFolding.h | 17 + ...project_llvm_utils_FileCheck_FileCheck.cpp | 15 + ...src_tools_cargo_src_cargo_core_profiles.rs | 17 + ...h-src_tools_cargo_tests_testsuite_build.rs | 39 + ...c_tools_rust-installer_install-template.sh | 179 +++++ ...atch-tests_assembly_targets_targets-elf.rs | 16 + ...ls_rust-analyzer_lib_line-index-src_lib.rs | 47 ++ .../patch-vendor_bytecount-0.6.8_src_lib.rs | 45 ++ ...endor_crossbeam-utils-0.8.18_no__atomic.rs | 14 + ....155_src_unix_bsd_netbsdlike_netbsd_mod.rs | 15 + ...ndor_libc-0.2.155_src_unix_solarish_mod.rs | 15 + ....158_src_unix_bsd_netbsdlike_netbsd_mod.rs | 15 + ...ndor_libc-0.2.158_src_unix_solarish_mod.rs | 15 + ....167_src_unix_bsd_netbsdlike_netbsd_mod.rs | 15 + ...ndor_libc-0.2.167_src_unix_solarish_mod.rs | 15 + ....169_src_unix_bsd_netbsdlike_netbsd_mod.rs | 15 + ...ndor_libc-0.2.169_src_unix_solarish_mod.rs | 15 + .../patch-vendor_line-index-0.1.2_src_lib.rs | 42 + .../patch-vendor_lzma-sys-0.1.20_config.h | 25 + ...or_memchr-2.7.4_src_arch_aarch64_memchr.rs | 24 + ...endor_memchr-2.7.4_src_arch_aarch64_mod.rs | 15 + .../patch-vendor_memchr-2.7.4_src_memchr.rs | 128 +++ ...vendor_memchr-2.7.4_src_memmem_searcher.rs | 78 ++ .../patch-vendor_memchr-2.7.4_src_vector.rs | 15 + ...1.1.1w_openssl_Configurations_10-main.conf | 18 + ...dor_openssl-src-111.28.2+1.1.1w_src_lib.rs | 62 ++ ..._openssl-sys-0.9.102_build_find__normal.rs | 30 + ...h-vendor_openssl-sys-0.9.102_build_main.rs | 23 + ...r_openssl-sys-0.9.92_build_find__normal.rs | 30 + ...ch-vendor_openssl-sys-0.9.92_build_main.rs | 23 + ...t_src_spec_aarch64__be__unknown__netbsd.rs | 27 + .../patch-vendor_zerocopy-0.7.32_src_lib.rs | 25 + .../patch-vendor_zerocopy-0.7.35_src_lib.rs | 25 + rust185/platform.mk | 31 + rust185/rust.mk | 56 ++ 66 files changed, 3363 insertions(+) create mode 100644 rust185/DESCR create mode 100644 rust185/HOWTO-BOOTSTRAP create mode 100644 rust185/Makefile create mode 100644 rust185/buildlink3.mk create mode 100644 rust185/cargo.mk create mode 100644 rust185/cross.mk create mode 100644 rust185/distinfo create mode 100644 rust185/do-cross.mk create mode 100644 rust185/files/gcc-wrap create mode 100644 rust185/options.mk create mode 100644 rust185/patches/patch-compiler_rustc__codegen__ssa_src_back_linker.rs create mode 100644 rust185/patches/patch-compiler_rustc__llvm_build.rs create mode 100644 rust185/patches/patch-compiler_rustc__target_src_spec_base_netbsd.rs create mode 100644 rust185/patches/patch-compiler_rustc__target_src_spec_mod.rs create mode 100644 rust185/patches/patch-compiler_rustc__target_src_spec_targets_aarch64__be__unknown__netbsd.rs create mode 100644 rust185/patches/patch-compiler_rustc__target_src_spec_targets_aarch64__unknown__netbsd.rs create mode 100644 rust185/patches/patch-compiler_rustc__target_src_spec_targets_mips64el__unknown__netbsd.rs create mode 100644 rust185/patches/patch-compiler_rustc__target_src_spec_targets_mipsel__unknown__netbsd.rs create mode 100644 rust185/patches/patch-compiler_rustc__target_src_spec_targets_sparc64__unknown__netbsd.rs create mode 100644 rust185/patches/patch-library_backtrace_src_symbolize_gimli.rs create mode 100644 rust185/patches/patch-library_backtrace_src_symbolize_gimli_elf.rs create mode 100644 rust185/patches/patch-library_std_src_sys_pal_unix_mod.rs create mode 100644 rust185/patches/patch-library_stdarch_crates_std__detect_tests_cpu-detection.rs create mode 100644 rust185/patches/patch-src_bootstrap_bootstrap.py create mode 100644 rust185/patches/patch-src_bootstrap_src_core_build__steps_compile.rs create mode 100644 rust185/patches/patch-src_bootstrap_src_core_build__steps_install.rs create mode 100644 rust185/patches/patch-src_bootstrap_src_core_builder_cargo.rs create mode 100644 rust185/patches/patch-src_bootstrap_src_lib.rs create mode 100644 rust185/patches/patch-src_llvm-project_llvm_CMakeLists.txt create mode 100644 rust185/patches/patch-src_llvm-project_llvm_cmake_modules_AddLLVM.cmake create mode 100644 rust185/patches/patch-src_llvm-project_llvm_include_llvm-c_DataTypes.h create mode 100644 rust185/patches/patch-src_llvm-project_llvm_include_llvm_Analysis_ConstantFolding.h create mode 100644 rust185/patches/patch-src_llvm-project_llvm_utils_FileCheck_FileCheck.cpp create mode 100644 rust185/patches/patch-src_tools_cargo_src_cargo_core_profiles.rs create mode 100644 rust185/patches/patch-src_tools_cargo_tests_testsuite_build.rs create mode 100644 rust185/patches/patch-src_tools_rust-installer_install-template.sh create mode 100644 rust185/patches/patch-tests_assembly_targets_targets-elf.rs create mode 100644 rust185/patches/patch-tools_rust-analyzer_lib_line-index-src_lib.rs create mode 100644 rust185/patches/patch-vendor_bytecount-0.6.8_src_lib.rs create mode 100644 rust185/patches/patch-vendor_crossbeam-utils-0.8.18_no__atomic.rs create mode 100644 rust185/patches/patch-vendor_libc-0.2.155_src_unix_bsd_netbsdlike_netbsd_mod.rs create mode 100644 rust185/patches/patch-vendor_libc-0.2.155_src_unix_solarish_mod.rs create mode 100644 rust185/patches/patch-vendor_libc-0.2.158_src_unix_bsd_netbsdlike_netbsd_mod.rs create mode 100644 rust185/patches/patch-vendor_libc-0.2.158_src_unix_solarish_mod.rs create mode 100644 rust185/patches/patch-vendor_libc-0.2.167_src_unix_bsd_netbsdlike_netbsd_mod.rs create mode 100644 rust185/patches/patch-vendor_libc-0.2.167_src_unix_solarish_mod.rs create mode 100644 rust185/patches/patch-vendor_libc-0.2.169_src_unix_bsd_netbsdlike_netbsd_mod.rs create mode 100644 rust185/patches/patch-vendor_libc-0.2.169_src_unix_solarish_mod.rs create mode 100644 rust185/patches/patch-vendor_line-index-0.1.2_src_lib.rs create mode 100644 rust185/patches/patch-vendor_lzma-sys-0.1.20_config.h create mode 100644 rust185/patches/patch-vendor_memchr-2.7.4_src_arch_aarch64_memchr.rs create mode 100644 rust185/patches/patch-vendor_memchr-2.7.4_src_arch_aarch64_mod.rs create mode 100644 rust185/patches/patch-vendor_memchr-2.7.4_src_memchr.rs create mode 100644 rust185/patches/patch-vendor_memchr-2.7.4_src_memmem_searcher.rs create mode 100644 rust185/patches/patch-vendor_memchr-2.7.4_src_vector.rs create mode 100644 rust185/patches/patch-vendor_openssl-src-111.28.2+1.1.1w_openssl_Configurations_10-main.conf create mode 100644 rust185/patches/patch-vendor_openssl-src-111.28.2+1.1.1w_src_lib.rs create mode 100644 rust185/patches/patch-vendor_openssl-sys-0.9.102_build_find__normal.rs create mode 100644 rust185/patches/patch-vendor_openssl-sys-0.9.102_build_main.rs create mode 100644 rust185/patches/patch-vendor_openssl-sys-0.9.92_build_find__normal.rs create mode 100644 rust185/patches/patch-vendor_openssl-sys-0.9.92_build_main.rs create mode 100644 rust185/patches/patch-vendor_rustc-ap-rustc__target_src_spec_aarch64__be__unknown__netbsd.rs create mode 100644 rust185/patches/patch-vendor_zerocopy-0.7.32_src_lib.rs create mode 100644 rust185/patches/patch-vendor_zerocopy-0.7.35_src_lib.rs create mode 100644 rust185/platform.mk create mode 100644 rust185/rust.mk diff --git a/rust185/DESCR b/rust185/DESCR new file mode 100644 index 00000000000..6dc90a671e6 --- /dev/null +++ b/rust185/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/rust185/HOWTO-BOOTSTRAP b/rust185/HOWTO-BOOTSTRAP new file mode 100644 index 00000000000..81133db2ec0 --- /dev/null +++ b/rust185/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-/build/dist/ +as + rust--.tar.xz +and + rust-std--.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/rust185/Makefile b/rust185/Makefile new file mode 100644 index 00000000000..108201f9e55 --- /dev/null +++ b/rust185/Makefile @@ -0,0 +1,742 @@ +# $NetBSD: Makefile,v 1.316 2024/07/31 12:30:43 he Exp $ + +DISTNAME= rustc-1.85.0-src +PKGNAME= ${DISTNAME:S/rustc/rust/:S/-src//} +CATEGORIES= lang +MASTER_SITES= https://static.rust-lang.org/dist/ + +MAINTAINER= pkgsrc-users@NetBSD.org +HOMEPAGE= https://www.rust-lang.org/ +COMMENT= Safe, concurrent, practical language +LICENSE= mit OR apache-2.0 + +CONFLICTS+= rust-bin-[0-9]* + +# LLVM uses -std=c++17 +USE_CXX_FEATURES+= c++17 +USE_GCC_RUNTIME= yes +USE_LANGUAGES= c c++ +USE_LIBTOOL= yes +USE_TOOLS+= bash grep gmake perl:build pkg-config + +# This is a bug: +# https://github.com/rust-lang/rust/issues/130708 +# "Building rust 1.81.0 does network access in the "build" phase" +# but set it for now to allow progress in finding other build issues. +#ALLOW_NETWORK_ACCESS= yes +# Ref. dist.vendor below. + +# The NetBSD bootstraps are built for NetBSD 9 (because rust doesn't +# build on 8 or earlier), or because the target didn't exist in 8 +# or 9 (as in riscv64). Therefore, mark earlier versions as broken. +BROKEN_ON_PLATFORM+= NetBSD-[1-8].*-* + +HAS_CONFIGURE= yes +PYTHON_FOR_BUILD_ONLY= tool +CONFIG_SHELL= ${TOOL_PYTHONBIN} +CONFIGURE_SCRIPT= src/bootstrap/configure.py +CONFIGURE_ARGS+= --prefix=${PREFIX} +CONFIGURE_ARGS+= --mandir=${PREFIX}/${PKGMANDIR} +CONFIGURE_ARGS+= --sysconfdir=${PKG_SYSCONFDIR} +CONFIGURE_ARGS+= --python=${TOOL_PYTHONBIN} +CONFIGURE_ARGS+= --release-channel=stable +CONFIGURE_ARGS+= --local-rust-root=${RUST_BOOTSTRAP_PATH} +CONFIGURE_ARGS+= --enable-extended # Build and install cargo too. +CONFIGURE_ARGS+= --enable-rpath +CONFIGURE_ARGS+= --disable-codegen-tests +CONFIGURE_ARGS+= --disable-compiler-docs +CONFIGURE_ARGS+= --disable-llvm-static-stdcpp +CONFIGURE_ARGS+= --disable-ninja +CONFIGURE_ARGS+= --dist-compression-formats=xz +# Ref. issue #130708 & backport of pull-request 130110 +CONFIGURE_ARGS+= --set dist.vendor=false + +# 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 +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" + +.if ${OPSYS} == "NetBSD" +TOOL_DEPENDS+= patchelf-[0-9]*:../../devel/patchelf +FORCE_RPATH= --force-rpath +.endif + +# Allow overriding MAKE_JOBS_SAFE +# some may chose to mostly build faster, +# and deal with any failures due to deadlocks +.if !empty(rust.MAKE_JOBS_SAFE) +. if ${rust.MAKE_JOBS_SAFE:tl} == "yes" +MAKE_JOBS_SAFE= yes +. endif +.endif + +.if !empty(rust.BUILD_TARGET) +BUILD_TARGET= ${rust.BUILD_TARGET} +.endif + +.if !empty(TARGET) +# Use "dist" build target for cross compile of bootstrap +BUILD_TARGET?= dist +.else +BUILD_TARGET?= build +.endif + +.if ${MACHINE_PLATFORM:MNetBSD-*-powerpc} || \ + ${MACHINE_PLATFORM:MNetBSD-*-earmv[67]hf} || \ + ${MACHINE_PLATFORM:MNetBSD-*-mipsel} || \ + !empty(TARGET:Marmv[67]-unknown-netbsd-eabihf) || \ + !empty(TARGET:Mmipsel-unknown-netbsd) +# Bootstrapping on NetBSD/powerpc requires no debug-info from rustc +# (both for amd64->powerpc built and powerpc->powerpc built bootstrap bits) +# Also try to downsize the armv[67] build. +CONFIGURE_ARGS+= --disable-debug +CONFIGURE_ARGS+= --disable-debug-assertions +CONFIGURE_ARGS+= --disable-llvm-release-debuginfo +CONFIGURE_ARGS+= --debuginfo-level=0 +CONFIGURE_ARGS+= --debuginfo-level-rustc=0 +CONFIGURE_ARGS+= --debuginfo-level-std=0 +CONFIGURE_ARGS+= --debuginfo-level-tools=0 +CONFIGURE_ARGS+= --debuginfo-level-tests=0 +.endif + +# Only build the ARM target on/for this host, due to resource constraints +.if ${MACHINE_PLATFORM:MNetBSD-*-earmv[67]hf} +CONFIGURE_ARGS+= --set llvm.targets="ARM" +.endif +# When cross-building for ARM on X86, X86 needs to go along due +# to 2-stage build process +.if !empty(TARGET:Marmv[67]-unknown-netbsd-eabihf) +CONFIGURE_ARGS+= --set llvm.targets="ARM;X86" +.endif +# Same for mips: +.if ${MACHINE_PLATFORM:MNetBSD-*-mipsel} +CONFIGURE_ARGS+= --set llvm.targets="Mips" +.endif +.if !empty(TARGET:Mmipsel-unknown-netbsd) +CONFIGURE_ARGS+= --set llvm.targets="Mips;X86" +.endif + +CHECK_INTERPRETER_SKIP+= lib/rustlib/src/rust/library/backtrace/ci/*.sh +CHECK_INTERPRETER_SKIP+= lib/rustlib/src/rust/library/core/src/unicode/printable.py +CHECK_INTERPRETER_SKIP+= lib/rustlib/src/rust/library/stdarch/ci/*.sh +CHECK_PORTABILITY_SKIP+= tests/run-make/dump-ice-to-disk/check.sh +CHECK_PORTABILITY_SKIP+= vendor/libdbus-sys-0.2.5/vendor/dbus/tools/cmake-format + +.if ${OPSYS} == "NetBSD" +# This block contains information about known trouble on NetBSD and workarounds. + +# Parallel builds failed on NetBSD due to dynamic linker locking bugs. +# \todo Explain if the build is believed to be sound if not parallel, +# or if a non-parallel build is merely more likely to work. +# +# See toolchain/54192 at +# http://gnats.netbsd.org/cgi-bin/query-pr-single.pl?number=54192 +# which was fixed in -current on 2020-04-19: +# http://mail-index.netbsd.org/source-changes/2020/04/16/msg116256.html +# http://mail-index.netbsd.org/source-changes/2020/04/19/msg116337.html +# These were pulled up to netbsd-9 on 2020-05-13: +# http://releng.netbsd.org/cgi-bin/req-9.cgi?show=907 +# This has not been pulled up to netbsd-8 +# \todo Explain if it's not applicable, shouldn't be pulled up, should be +# but hasn't, is too hard, etc. +# +# On pkgbuild for 2020Q1 9.0_RELEASE amd64, rust did not build despite +# MAKE_JOBS_SAFE=no, but setting MAKE_JOBS=1 resulted in success. (No +# PR is open for this.) \todo Understand and fix. +# +# If we aren't on 9-current, and are on 8.x or 9.x, avoid parallel. +# Release 9.x and 9.1 or later is OK. +. if ${OPSYS} == "NetBSD" && ${OPSYS_VERSION} > 090999 && ${OPSYS_VERSION} < 090900 +MAKE_JOBS_SAFE?= no +. endif + +# Open PRs +# +# Broken package with PREFIX not /usr/pkg: +# http://gnats.netbsd.org/cgi-bin/query-pr-single.pl?number=54453 +# + +.endif + +# +# Under NetBSD, do not use DT_RUNPATH +# +BUILDLINK_TRANSFORM.NetBSD+= rm:-Wl,--enable-new-dtags + +# +# Somewhere in the LLVM build "-arch x86_64" is passed on macOS/arm64 which +# breaks linking, see https://github.com/rust-lang/rust/issues/81790. Until +# this can be located (proving difficult!) we just force it. +# +.if ${MACHINE_PLATFORM:MDarwin-*-aarch64} +BUILDLINK_TRANSFORM+= opt:x86_64:arm64 +.endif + +# +# Rust unfortunately requires itself to build. On platforms which aren't +# supported by upstream (where they offer binary bootstraps), or where we do +# not trust random binaries from the Internet, we need to build and provide our +# own bootstrap. See the stage0-bootstrap below for more details. +# +DISTFILES:= ${DEFAULT_DISTFILES} + +.if ${MACHINE_PLATFORM:MDarwin-*-aarch64} || make(distinfo) || make (makesum) || make(mdi) +RUST_STAGE0_VER= 1.84.1 +RUST_ARCH:= aarch64-apple-darwin +RUST_STAGE0:= rust-${RUST_STAGE0_VER}-${RUST_ARCH}.tar.gz +RUST_STD_STAGE0:= rust-std-${RUST_STAGE0_VER}-${RUST_ARCH}.tar.gz +DISTFILES:= ${DISTFILES} ${RUST_STAGE0} ${RUST_STD_STAGE0} +.endif +.if ${MACHINE_PLATFORM:MDarwin-*-x86_64} || make(distinfo) || make (makesum) || make(mdi) +RUST_STAGE0_VER= 1.84.1 +RUST_ARCH:= x86_64-apple-darwin +RUST_STAGE0:= rust-${RUST_STAGE0_VER}-${RUST_ARCH}.tar.gz +RUST_STD_STAGE0:= rust-std-${RUST_STAGE0_VER}-${RUST_ARCH}.tar.gz +DISTFILES:= ${DISTFILES} ${RUST_STAGE0} ${RUST_STD_STAGE0} +.endif +.if ${MACHINE_PLATFORM:MLinux-*-aarch64} || make(distinfo) || make (makesum) || make(mdi) +RUST_STAGE0_VER= 1.84.1 +RUST_ARCH:= aarch64-unknown-linux-gnu +RUST_STAGE0:= rust-${RUST_STAGE0_VER}-${RUST_ARCH}.tar.gz +RUST_STD_STAGE0:= rust-std-${RUST_STAGE0_VER}-${RUST_ARCH}.tar.gz +DISTFILES:= ${DISTFILES} ${RUST_STAGE0} ${RUST_STD_STAGE0} +.endif +.if ${MACHINE_PLATFORM:MLinux-*-earmv6hf} || make(distinfo) || make (makesum) || make(mdi) +RUST_STAGE0_VER= 1.84.1 +RUST_ARCH:= arm-unknown-linux-gnueabihf +RUST_STAGE0:= rust-${RUST_STAGE0_VER}-${RUST_ARCH}.tar.gz +RUST_STD_STAGE0:= rust-std-${RUST_STAGE0_VER}-${RUST_ARCH}.tar.gz +DISTFILES:= ${DISTFILES} ${RUST_STAGE0} ${RUST_STD_STAGE0} +.endif +.if ${MACHINE_PLATFORM:MLinux-*-earmv7hf} || make(distinfo) || make (makesum) || make(mdi) +RUST_STAGE0_VER= 1.84.1 +RUST_ARCH:= armv7-unknown-linux-gnueabihf +RUST_STAGE0:= rust-${RUST_STAGE0_VER}-${RUST_ARCH}.tar.gz +RUST_STD_STAGE0:= rust-std-${RUST_STAGE0_VER}-${RUST_ARCH}.tar.gz +DISTFILES:= ${DISTFILES} ${RUST_STAGE0} ${RUST_STD_STAGE0} +.endif +.if ${MACHINE_PLATFORM:MLinux-*-i386} || make(distinfo) || make (makesum) || make(mdi) +RUST_STAGE0_VER= 1.84.1 +RUST_ARCH:= i686-unknown-linux-gnu +RUST_STAGE0:= rust-${RUST_STAGE0_VER}-${RUST_ARCH}.tar.gz +RUST_STD_STAGE0:= rust-std-${RUST_STAGE0_VER}-${RUST_ARCH}.tar.gz +DISTFILES:= ${DISTFILES} ${RUST_STAGE0} ${RUST_STD_STAGE0} +.endif +.if ${MACHINE_PLATFORM:MLinux-*-x86_64} || make(distinfo) || make (makesum) || make(mdi) +RUST_STAGE0_VER= 1.84.1 +RUST_ARCH:= x86_64-unknown-linux-gnu +RUST_STAGE0:= rust-${RUST_STAGE0_VER}-${RUST_ARCH}.tar.gz +RUST_STD_STAGE0:= rust-std-${RUST_STAGE0_VER}-${RUST_ARCH}.tar.gz +DISTFILES:= ${DISTFILES} ${RUST_STAGE0} ${RUST_STD_STAGE0} +.endif +# +# 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.84.1 +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.84.1 +RUST_ARCH:= x86_64-unknown-freebsd +RUST_STAGE0:= rust-${RUST_STAGE0_VER}-${RUST_ARCH}.tar.gz +RUST_STD_STAGE0:= rust-std-${RUST_STAGE0_VER}-${RUST_ARCH}.tar.gz +DISTFILES:= ${DISTFILES} ${RUST_STAGE0} ${RUST_STD_STAGE0} +.endif +.if ${MACHINE_PLATFORM:MNetBSD-*-i386} || make(distinfo) || make (makesum) || make(mdi) +RUST_STAGE0_VER= 1.84.1 +RUST_ARCH= i586-unknown-netbsd +RUST_STAGE0:= rust-${RUST_STAGE0_VER}-${RUST_ARCH}.tar.xz +RUST_STD_STAGE0:= rust-std-${RUST_STAGE0_VER}-${RUST_ARCH}.tar.xz +SITES.${RUST_STAGE0}= ${MASTER_SITE_LOCAL:=rust/} +SITES.${RUST_STD_STAGE0}= ${MASTER_SITE_LOCAL:=rust/} +DISTFILES:= ${DISTFILES} ${RUST_STAGE0} ${RUST_STD_STAGE0} +# Setting this changes it for every distfile, which doesn't match what is +# currently in distinfo. +#DIST_SUBDIR= ${PKGNAME} +# For atomic ops +CFLAGS+= -march=i586 +CONFIGURE_ARGS+= --build=${RUST_ARCH} +pre-build: pre-build-fix-paxctl +.PHONY: pre-build-fix-paxctl +pre-build-fix-paxctl: + ${TOOLS_PLATFORM.paxctl} +am ${WRKDIR}/rust-bootstrap/bin/cargo + ${TOOLS_PLATFORM.paxctl} +am ${WRKDIR}/rust-bootstrap/bin/rustc +.endif +.if ${MACHINE_PLATFORM:MNetBSD-*-x86_64} || make(distinfo) || make (makesum) || make(mdi) +RUST_STAGE0_VER= 1.84.1 +RUST_ARCH= x86_64-unknown-netbsd +RUST_STAGE0:= rust-${RUST_STAGE0_VER}-${RUST_ARCH}.tar.xz +RUST_STD_STAGE0:= rust-std-${RUST_STAGE0_VER}-${RUST_ARCH}.tar.xz +DISTFILES:= ${DISTFILES} ${RUST_STAGE0} ${RUST_STD_STAGE0} +.endif +.if ${MACHINE_PLATFORM:MNetBSD-*-powerpc} || make(distinfo) || make (makesum) || make(mdi) +RUST_STAGE0_VER= 1.84.1 +RUST_ARCH= powerpc-unknown-netbsd +RUST_STAGE0:= rust-${RUST_STAGE0_VER}-${RUST_ARCH}.tar.xz +RUST_STD_STAGE0:= rust-std-${RUST_STAGE0_VER}-${RUST_ARCH}.tar.xz +DISTFILES:= ${DISTFILES} ${RUST_STAGE0} ${RUST_STD_STAGE0} +SITES.${RUST_STAGE0}= ${MASTER_SITE_LOCAL:=rust/} +SITES.${RUST_STD_STAGE0}= ${MASTER_SITE_LOCAL:=rust/} +.endif +.if ${MACHINE_PLATFORM:MNetBSD-*-aarch64} || make(distinfo) || make (makesum) || make(mdi) +RUST_STAGE0_VER= 1.84.1 +RUST_ARCH= aarch64-unknown-netbsd +RUST_STAGE0:= rust-${RUST_STAGE0_VER}-${RUST_ARCH}.tar.xz +RUST_STD_STAGE0:= rust-std-${RUST_STAGE0_VER}-${RUST_ARCH}.tar.xz +DISTFILES:= ${DISTFILES} ${RUST_STAGE0} ${RUST_STD_STAGE0} +SITES.${RUST_STAGE0}= ${MASTER_SITE_LOCAL:=rust/} +SITES.${RUST_STD_STAGE0}= ${MASTER_SITE_LOCAL:=rust/} +.endif +.if ${MACHINE_PLATFORM:MNetBSD-*-aarch64eb} || make(distinfo) || make (makesum) || make(mdi) +RUST_STAGE0_VER= 1.84.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.84.1 +RUST_ARCH= sparc64-unknown-netbsd +RUST_STAGE0:= rust-${RUST_STAGE0_VER}-${RUST_ARCH}.tar.xz +RUST_STD_STAGE0:= rust-std-${RUST_STAGE0_VER}-${RUST_ARCH}.tar.xz +DISTFILES:= ${DISTFILES} ${RUST_STAGE0} ${RUST_STD_STAGE0} +SITES.${RUST_STAGE0}= ${MASTER_SITE_LOCAL:=rust/} +SITES.${RUST_STD_STAGE0}= ${MASTER_SITE_LOCAL:=rust/} +.endif +.if ${MACHINE_PLATFORM:MNetBSD-*-earmv7hf} || make(distinfo) || make (makesum) || make(mdi) +RUST_ARCH= armv7-unknown-netbsd-eabihf +RUST_STAGE0_VER= 1.84.1 +RUST_STAGE0:= rust-${RUST_STAGE0_VER}-${RUST_ARCH}.tar.xz +RUST_STD_STAGE0:= rust-std-${RUST_STAGE0_VER}-${RUST_ARCH}.tar.xz +DISTFILES:= ${DISTFILES} ${RUST_STAGE0} ${RUST_STD_STAGE0} +SITES.${RUST_STAGE0}= ${MASTER_SITE_LOCAL:=rust/} +SITES.${RUST_STD_STAGE0}= ${MASTER_SITE_LOCAL:=rust/} +.endif +.if ${MACHINE_PLATFORM:MNetBSD-*-earmv6hf} || make(distinfo) || make (makesum) || make(mdi) +RUST_ARCH= armv6-unknown-netbsd-eabihf +RUST_STAGE0_VER= 1.84.1 +RUST_STAGE0:= rust-${RUST_STAGE0_VER}-${RUST_ARCH}.tar.xz +RUST_STD_STAGE0:= rust-std-${RUST_STAGE0_VER}-${RUST_ARCH}.tar.xz +DISTFILES:= ${DISTFILES} ${RUST_STAGE0} ${RUST_STD_STAGE0} +SITES.${RUST_STAGE0}= ${MASTER_SITE_LOCAL:=rust/} +SITES.${RUST_STD_STAGE0}= ${MASTER_SITE_LOCAL:=rust/} +.endif +#.if ${MACHINE_PLATFORM:MNetBSD-*-mipsel} || make(distinfo) || make (makesum) || make(mdi) +#RUST_ARCH= mipsel-unknown-netbsd +#RUST_STAGE0_VER= 1.84.1 +#RUST_STAGE0:= rust-${RUST_STAGE0_VER}-${RUST_ARCH}.tar.xz +#RUST_STD_STAGE0:= rust-std-${RUST_STAGE0_VER}-${RUST_ARCH}.tar.xz +#DISTFILES:= ${DISTFILES} ${RUST_STAGE0} ${RUST_STD_STAGE0} +#SITES.${RUST_STAGE0}= ${MASTER_SITE_LOCAL:=rust/} +#SITES.${RUST_STD_STAGE0}= ${MASTER_SITE_LOCAL:=rust/} +#.endif +.if ${MACHINE_PLATFORM:MNetBSD-*-riscv64} || make(distinfo) || make (makesum) || make(mdi) +RUST_ARCH= riscv64gc-unknown-netbsd +RUST_STAGE0_VER= 1.84.1 +RUST_STAGE0:= rust-${RUST_STAGE0_VER}-${RUST_ARCH}.tar.xz +RUST_STD_STAGE0:= rust-std-${RUST_STAGE0_VER}-${RUST_ARCH}.tar.xz +DISTFILES:= ${DISTFILES} ${RUST_STAGE0} ${RUST_STD_STAGE0} +SITES.${RUST_STAGE0}= ${MASTER_SITE_LOCAL:=rust/} +SITES.${RUST_STD_STAGE0}= ${MASTER_SITE_LOCAL:=rust/} +.endif + +# You may override RUST_BOOTSTRAP_PATH and RUST_ARCH in mk.conf +# if you have a local bootstrap compiler. +.if !defined(RUST_ARCH) && !defined(RUST_BOOTSTRAP_PATH) +NOT_FOR_PLATFORM+= ${MACHINE_PLATFORM} +.else +RUST_BOOTSTRAP_PATH?= ${WRKDIR}/rust-bootstrap +.endif + +.if ${OPSYS} == "SunOS" +TOOL_DEPENDS+= coreutils>=0:../../sysutils/coreutils +TOOL_DEPENDS+= gzip>=0:../../archivers/gzip +TOOLS_CREATE+= md5sum +TOOLS_PATH.md5sum= ${TOOLBASE}/bin/gmd5sum +TOOLS_PLATFORM.gzcat= ${TOOLBASE}/bin/gzip -cd +.endif + +SUBST_CLASSES+= prefix +SUBST_STAGE.prefix= pre-configure +SUBST_FILES.prefix+= compiler/rustc_codegen_ssa/src/back/linker.rs +SUBST_FILES.prefix+= compiler/rustc_target/src/spec/base/netbsd.rs +SUBST_FILES.prefix+= src/bootstrap/src/core/build_steps/compile.rs +SUBST_FILES.prefix+= src/bootstrap/src/core/builder/cargo.rs +SUBST_FILES.prefix+= src/bootstrap/bootstrap.py +SUBST_VARS.prefix= PREFIX + +# +# Generate list of subst entries for various .cargo-checksum.json files. These +# are all handled together in one big substitution to simplify things rather +# than one substitution entry per file, but are kept separate below to ease +# updating and verification. +# + +CKSUM_CRATES+= vendor/crossbeam-utils-0.8.18 +CKSUMS+= 31a8276afd38e39987a169eeb02e9bed32670de5ca36d7eb74aab7e506cf9dc4 +CKSUMS+= ead4bda23c322bde8c01e48d4cd19b70e7b7e473a56466218d279f88463ab466 + +CKSUM_CRATES+= vendor/openssl-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 +CKSUMS+= b8d6f089fc8eb2cb59e45335a26c9ce871b846216c9859b553c6b91982f8de33 +CKSUMS+= d8c4a979ce9b406fb63c5aaf2827b616689294331341737fec392b8faa2126fa + +CKSUM_CRATES+= vendor/libc-0.2.158 +CKSUMS+= ab09cea2897ecd27fc7e35822dac23d6dcd53f8577c771db3ee8b015e8d82001 +CKSUMS+= a7ecf37f62e4756b30c92a063bac4b84d229947f854dc0bae9e8c8eeb1ecd237 +CKSUMS+= c0c5dfc406d728666010cdc2fe21b0df40547ed20dd7ad0eab65906e103b6d4b +CKSUMS+= dd2aa95b38dd9afaac3413f6a1af632de77050adf2fea66b8cdbfc8244d1f07e + +CKSUM_CRATES+= vendor/libc-0.2.167 +CKSUMS+= 2b6c62850c168e7200955ba1f52464fa03c329df7a4e77a30054544280308dc1 +CKSUMS+= ce9b6fb7a2c7377e6cfbe882f7195736baf20408559d4259f2ef70c160872024 +CKSUMS+= 742d6c0607ee20c81a2184a6378dc2d9c18f7180a0dc93aa91f830a0d1a06878 +CKSUMS+= 4f39616cd4010e5ac122d1162e022af0d0304f361cf718d5997819b666f8eb26 + +CKSUM_CRATES+= vendor/libc-0.2.169 +CKSUMS+= dc216609dfc6b2835e26f8c3e70f4c7c65425933eef04538de603f51e9429ec5 +CKSUMS+= 04004bda0ea97d55c3588a7d82fa1faf0d150c5390250a298216ff3cc899b911 +CKSUMS+= b5dae853ebfc3355b155f8c20f3a481517bce27e164e304f56dfff172e313098 +CKSUMS+= 55fb7f2c0877231286b2b6515e08eda1d5cac1311a402d0aa162c7eb867ee19b + +CKSUM_CRATES+= vendor/zerocopy-0.7.32 +CKSUMS+= 2f21f18a4ca1d4be2d997f037158cb21a7421b2ba2cc52f3e4c5f9410197ed27 +CKSUMS+= abe079743c2b2dea5b2c42564f98741a5eb9e24ff019e01742ace5581e53c06f + +CKSUM_CRATES+= vendor/zerocopy-0.7.35 +CKSUMS+= eb5033d1f2f3d5314625bc63353b1d105cb414d4bc68edf8700b401e4055d669 +CKSUMS+= bd504cc95f722a296a5f221c3a3068c9eaa946258beff163581d9492de6ccdce + +CKSUM_CRATES+= vendor/memchr-2.7.4 +CKSUMS+= 5bb70f915084e629d940dbc322f5b9096b2e658cf63fea8a2f6e7550412e73a0 +CKSUMS+= 34aaa34eb7048e8bba49d390942ab707990380952f37f388f3cca30970c53450 +CKSUMS+= 7763472d43c66df596ca0697c07db0b4666d38a6a14f64f9f298aaf756c4a715 +CKSUMS+= 1b26fca824c410077780fbc2f4c53c1d195ba3bdf6785b529ceb0a11f039cec2 +CKSUMS+= 3b15d5cb9715f26e655598eacbb8bbba74cbe8ddb2fb969d13aa75f216a118dd +CKSUMS+= 8844a2cd5e71abb8efdf8fc3ee54d9c66f3fedb529cdaf5984c279177f5f90af +CKSUMS+= 6ae779ec5d00f443075316e0105edf30b489a38e2e96325bec14ccecd014145b +CKSUMS+= 28d66e566b73f6f0f7add4092874dc967ce133bfb6dcbd81f03c9a04b6e4e1d0 +CKSUMS+= 44cd1a614bd66f1e66fc86c541d3c3b8d3a14a644c13e8bf816df3f555eac2d4 +CKSUMS+= 27f9bff08b24828e1a611b10a0282f5457d12e9e7254202040144d392297d720 + +CKSUM_CRATES+= vendor/bytecount-0.6.8 +CKSUMS+= 01cd755a128d8a5892f3edda195b26bb461be375be17dd72e6e4f061169e6dff +CKSUMS+= 7c6609685c161ac6b2c667f59bd6476c5c14c7269ec949fb2def5a0238198c25 + +CKSUM_CRATES+= vendor/line-index-0.1.2 +CKSUMS+= c4613b718951cf0b880a3a7829e102a9ec7196591437e3bc0cfd857c717bfb61 +CKSUMS+= 5183e802793932fb980b4e321656c65d1b6231de3febd1ac94dfa73de31245f0 + +CKSUM_CRATES+= vendor/lzma-sys-0.1.20 +CKSUMS+= 6fd5e9245db34c6f557b8bfcaf03db82fc88c3b06dbfbb5f03b2bcd138983ef9 +CKSUMS+= 2a68e3e635dce81c7dba25b3d3abfaa894ee729e1604f2d000ae3e201f7739a4 + +SUBST_CLASSES+= cksum +SUBST_STAGE.cksum= pre-configure +.for crate in ${CKSUM_CRATES} +SUBST_FILES.cksum+= ${crate}/.cargo-checksum.json +.endfor +.for from to in ${CKSUMS} +SUBST_SED.cksum+= -e 's,${from},${to},g' +.endfor + +post-extract: + set -e; \ + if ${TEST} -e ${WRKDIR}/rust-${RUST_STAGE0_VER}-${RUST_ARCH}/install.sh \ + -a ! -e ${RUST_BOOTSTRAP_PATH}/bin/rustc; then \ + cd ${WRKDIR}/rust-${RUST_STAGE0_VER}-${RUST_ARCH}; \ + env ${MAKE_ENV} ${TOOLS_BASH} \ + ./install.sh --prefix=${RUST_BOOTSTRAP_PATH}; \ + cd ${WRKDIR}/rust-std-${RUST_STAGE0_VER}-${RUST_ARCH}; \ + env ${MAKE_ENV} ${TOOLS_BASH} \ + ./install.sh --prefix=${RUST_BOOTSTRAP_PATH}; \ + fi +.if ${OPSYS} == "NetBSD" + SDIR=${WRKDIR}/scripts; \ + ${MKDIR} $${SDIR}; \ + cd $${SDIR}; \ + ${RM} -f c++-wrap; \ + ${RM} -f clang++-wrap; \ + ${RM} -f clang-wrap; \ + ${RM} -f ar-wrap; \ + ${CP} ${.CURDIR}/files/gcc-wrap .; \ + ${CHMOD} +x gcc-wrap; \ + ${LN} -s gcc-wrap c++-wrap; \ + ${LN} -s gcc-wrap clang++-wrap; \ + ${LN} -s gcc-wrap clang-wrap; \ + ${LN} -s gcc-wrap ar-wrap +.endif + +.if ${OPSYS} == "FreeBSD" +MAKE_ENV+= OPENSSL_DIR=${SSLBASE} +.endif + +.if ${OPSYS} == "NetBSD" && !empty(PKGSRC_COMPILER:Mclang) && !exists(/lib/libgcc_s.so) +BUILDLINK_TRANSFORM+= rm:-lgcc_s +MAKE_ENV+= PKGSRC_HAVE_LIBCPP=yes + +pre-build: provide-libgcc-for-bootstrap +.PHONY: provide-libgcc-for-bootstrap +provide-libgcc-for-bootstrap: +. if exists(${FILESDIR}/libgcc_s.so.1) + cp ${FILESDIR}/libgcc_s.so.1 ${RUST_BOOTSTRAP_PATH}/lib/. +. endif +.endif + +# Rust builds some bundled components with strict version requirements, ensure +# that any conflicting packages pulled in via dependencies are not buildlinked. +BUILDLINK_FILES_CMD.xz= ${TRUE} +MAKE_ENV+= LZMA_API_STATIC=1 +pre-configure: + ${RM} -rf ${BUILDLINK_DIR}/include/libssh2* + +# +# These are essentially copies of the "all", "test", and "install" Makefile +# targets, but are duplicated here so that we can specify -j. +# +do-build: + ${RUN}${_ULIMIT_CMD} \ + cd ${WRKSRC} && \ + ${SETENV} ${MAKE_ENV} \ + sh -c "if [ \"${BUILD_TARGET}\" = \"dist\" ]; then \ + unset DESTDIR; \ + ${TOOL_PYTHONBIN} ./x.py \ + ${BUILD_TARGET} -j ${_MAKE_JOBS_N}; \ + else \ + ${TOOL_PYTHONBIN} ./x.py \ + ${BUILD_TARGET} --stage 2 -j ${_MAKE_JOBS_N} && \ + ${TOOL_PYTHONBIN} ./x.py \ + doc --stage 2 -j ${_MAKE_JOBS_N}; \ + fi" + +do-test: + ${RUN}${_ULIMIT_CMD} \ + cd ${WRKSRC} && \ + ${SETENV} ${MAKE_ENV} \ + ${TOOL_PYTHONBIN} ./x.py test -j ${_MAKE_JOBS_N} + +PATCH_BINARIES+= bin/cargo +PATCH_BINARIES+= bin/cargo-clippy +PATCH_BINARIES+= bin/clippy-driver +PATCH_BINARIES+= bin/rust-analyzer +PATCH_BINARIES+= bin/rustc +PATCH_BINARIES+= bin/rustdoc +PATCH_BINARIES+= bin/rustfmt +PATCH_BINARIES+= libexec/rust-analyzer-proc-macro-srv + +do-install: + ${RUN}${_ULIMIT_CMD} \ + cd ${WRKSRC} && \ + ${SETENV} ${MAKE_ENV} ${INSTALL_ENV} \ + ${TOOL_PYTHONBIN} ./x.py install -j ${_MAKE_JOBS_N} +.if ${OPSYS} == "NetBSD" + for bin in ${PATCH_BINARIES}; do \ + f=${DESTDIR}${PREFIX}/$${bin}; \ + if [ -f $$f ]; then \ +cmd="${PREFIX}/bin/patchelf ${FORCE_RPATH} --set-rpath ${PREFIX}/lib $$f"; \ + echo $$cmd; \ + $$cmd; \ + fi; \ + done +.endif + +SUBST_CLASSES+= destdir +SUBST_STAGE.destdir= post-install +SUBST_FILES.destdir= ${DESTDIR}${PREFIX}/lib/rustlib/manifest-* +SUBST_SED.destdir= -e 's|file:${DESTDIR}${PREFIX}|file:${PREFIX}|' + +GENERATE_PLIST+= ${FIND} ${DESTDIR}${PREFIX} \( -type f -o -type l \) -print | \ + ${SED} -e 's,${DESTDIR}${PREFIX}/,,' | ${SORT} ; + +# Create a relocatable stage2 bootstrap from the bits we just built that can be +# used to build the next version of rust. Currently only tested on SmartOS. +# +# Use the alternate BOOTSTRAP_NAME when creating a nightly release. +# +#BOOTSTRAP_NAME= ${PKGNAME_NOREV:C/rust/rust-nightly/}-${RUST_ARCH} +BOOTSTRAP_NAME= ${PKGNAME_NOREV}-${RUST_ARCH} +BOOTSTRAP_TMPDIR= ${WRKDIR}/${BOOTSTRAP_NAME} +USE_TOOLS+= gtar + +# The NetBSD part is so far untested, because I could not convince +# the rust build to use the gcc wrapper when building natively, +# so that I could get a placeholder in the RPATH, because chrpath +# cannot extend the length of the RPATH... +ELFEDIT?= /usr/bin/elfedit + +.PHONY: stage0-bootstrap +stage0-bootstrap: install + ${RM} -rf ${BOOTSTRAP_TMPDIR} + ${MKDIR} ${BOOTSTRAP_TMPDIR} +.if ${OPSYS} == "NetBSD" + (cd ${BOOTSTRAP_TMPDIR}; \ + DISTDIR=${WRKSRC}/bild/dist; \ + VER_ARCH=${PKGVERSION}-${RUST_ARCH}; \ + RUSTC=rustc-$${VER_ARCH}; \ + RUSTC_FILE=$${RUSTC}.tar.gz; \ + RUST_STD=rust-std-$${VER_ARCH}; \ + RUST_STD_FILE=$${RUST_STD}.tar.gz; \ + ${GTAR} -xzf $${DISTDIR}/$${RUSTC_FILE}; \ + (cd ${RUSTC}; \ + RPATH='/usr/pkg/lib:/lib:/usr/lib:$$ORIGIN/../lib'; \ + for f in rls-preview/bin/rls rustc/bin/rustc rustc/bin/rustdoc; do \ + chrpath -r $$RPATH $$f; \ + done; \ + RPATH='/usr/pkg/lib:/lib:/usr/lib:$$ORIGIN'; \ + for f in rustc/lib/*.so*; do \ + chrpath -r $$RPATH $$f; \ + done; \ + RPATH='/usr/pkg/lib:/lib:/usr/lib:$$ORIGIN:$$ORIGIN/../../..'; \ + for f in rustc/lib/rustlib/*/*/*.so*; do \ + chrpath -r $$RPATH $$f; \ + done;); \ + ${GTAR} -czf $${RUSTC_FILE} $${RUSTC}; \ + ${CP} $${DISTDIR}/$${RUST_STD_FILE} .; \ + ${ECHO} "Fixed stage0 bootstrap in ${BOOTSTRAP_TMPDIR}:"; \ + ${ECHO} "$${RUSTC_FILE}"; \ + ${ECHO} "$${RUST_STD_FILE}"; \ + ) +.endif +.if ${OS_VARIANT} == "SmartOS" + ${CP} -R ${DESTDIR}/${PREFIX}/bin ${BOOTSTRAP_TMPDIR}/ + ${CP} -R ${DESTDIR}/${PREFIX}/lib ${BOOTSTRAP_TMPDIR}/ + ${MKDIR} ${BOOTSTRAP_TMPDIR}/lib/pkgsrc + set -e; \ + for lib in libgcc_s.so.1 libstdc++.so.6; do \ + ${CP} `${PKG_CC} -print-file-name=$${lib}` \ + ${BOOTSTRAP_TMPDIR}/lib/pkgsrc/; \ + done; \ + for lib in libLLVM.so.18.1 libcrypto.so.3 libcurl.so.4 \ + libssl.so.3 libz.so.1 libzstd.so.1; do \ + ${CP} ${PREFIX}/lib/$${lib} ${BOOTSTRAP_TMPDIR}/lib/pkgsrc/; \ + done; \ + for lib in libiconv.so.2 libidn2.so.0 libintl.so.8 liblber.so.2 \ + libldap.so.2 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* \ + ${BOOTSTRAP_TMPDIR}/lib/rustlib/*/bin/*; 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/zlib/buildlink3.mk" +.include "../../lang/python/tool.mk" +.include "../../mk/bsd.pkg.mk" diff --git a/rust185/buildlink3.mk b/rust185/buildlink3.mk new file mode 100644 index 00000000000..b8eeb79834a --- /dev/null +++ b/rust185/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/rust185/cargo.mk b/rust185/cargo.mk new file mode 100644 index 00000000000..5813c043215 --- /dev/null +++ b/rust185/cargo.mk @@ -0,0 +1,115 @@ +# $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 digest +CARGO_VENDOR_DIR= ${WRKDIR}/vendor +CARGO_WRKSRC?= ${WRKSRC} + +# TODO: some Cargo.lock files include git+https sources which need to be fetched from the URL (not necessarily resolving to a crate.io url) +DISTFILES?= ${DEFAULT_DISTFILES} +.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 + +.if ${RUST_TYPE} == "native" +CARGO= cargo +.else +CARGO= ${PREFIX}/bin/cargo +.endif +DEFAULT_CARGO_ARGS= --offline -j${_MAKE_JOBS_N} \ + ${CARGO_NO_DEFAULT_FEATURES:M[yY][eE][sS]:C/[yY][eE][sS]/--no-default-features/} \ + ${CARGO_FEATURES:C/.*/--features/W} \ + ${CARGO_FEATURES:S/ /,/Wg} +CARGO_ARGS?= build --release ${DEFAULT_CARGO_ARGS} +CARGO_INSTALL_ARGS?= install --path . --root ${DESTDIR}${PREFIX} ${DEFAULT_CARGO_ARGS} + +MAKE_ENV+= RUSTFLAGS=${RUSTFLAGS:Q} +ALL_ENV+= CARGO_HOME=${WRKDIR} + +.if !target(do-build) +do-build: do-cargo-build +.endif + +.PHONY: do-cargo-build +do-cargo-build: + ${RUN} cd ${CARGO_WRKSRC} && ${SETENV} ${MAKE_ENV} ${CARGO} ${CARGO_ARGS} + +.if !target(do-install) && ${GNU_CONFIGURE:Uno:tl} == no +do-install: do-cargo-install +.endif + +.PHONY: do-cargo-install +do-cargo-install: + ${RUN} cd ${CARGO_WRKSRC} && ${SETENV} ${MAKE_ENV} ${CARGO} ${CARGO_INSTALL_ARGS} + # remove files cargo uses for tracking installations + ${RM} -f ${DESTDIR}${PREFIX}/.crates.toml + ${RM} -f ${DESTDIR}${PREFIX}/.crates2.json + +.if ${OPSYS} == "Darwin" +.PHONY: do-cargo-post-install-darwin-fix-rpath +post-install: do-cargo-post-install-darwin-fix-rpath +do-cargo-post-install-darwin-fix-rpath: + ${RUN} cd ${DESTDIR}; \ + for i in $$(${FIND} .${PREFIX}/lib -name '*.so' | ${SED} -e 's|^\./||'); do \ + install_name_tool -id /$$i $$i; \ + done +.endif diff --git a/rust185/cross.mk b/rust185/cross.mk new file mode 100644 index 00000000000..47f2b3e006d --- /dev/null +++ b/rust185/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/rust185/distinfo b/rust185/distinfo new file mode 100644 index 00000000000..a8a633c19f9 --- /dev/null +++ b/rust185/distinfo @@ -0,0 +1,164 @@ +$NetBSD: distinfo,v 1.159 2023/06/19 14:46:47 bsiegert Exp $ + +BLAKE2s (rust-1.84.1-aarch64-apple-darwin.tar.gz) = 03cce3a3db081f808d366fe1c2cd6d1dbab5f83f69f27f562cba8e457101352f +SHA512 (rust-1.84.1-aarch64-apple-darwin.tar.gz) = da1715eb9c0c139e8ab78a288e0d9b46e6f08cd0fe7a3407266a6b3fd53f192a1f041dceefff3b23166fec18d506adabab84f144a22b9b8ef8cfeb6212b37bd2 +Size (rust-1.84.1-aarch64-apple-darwin.tar.gz) = 345901224 bytes +BLAKE2s (rust-1.84.1-aarch64-unknown-linux-gnu.tar.gz) = e8827ce1bbd7d703825c0cd80a9eb2903ec763d3dc73022407407eb1e73ae83f +SHA512 (rust-1.84.1-aarch64-unknown-linux-gnu.tar.gz) = 50ac52c40aa8d0849670aecc0797b418ae8062497a4b9066bf023a591aec5e47f4955419197d6b4189d10074847f135a14c40139d59f57c33fb4cc3ecaf8ee70 +Size (rust-1.84.1-aarch64-unknown-linux-gnu.tar.gz) = 492244033 bytes +BLAKE2s (rust-1.84.1-aarch64-unknown-netbsd.tar.xz) = 4f7eacec5d54e00044e107587cbf05aaaebf006578cccd64187e193f3f8c1863 +SHA512 (rust-1.84.1-aarch64-unknown-netbsd.tar.xz) = ecd587178877f6ae4538e0cb86bc2d650941c11955d2fbcbbaa4af3352c8310cb70b63b43f5a21a38eff6590a62b135f4ad9b66841530359ca3ae6e82054668f +Size (rust-1.84.1-aarch64-unknown-netbsd.tar.xz) = 207545496 bytes +BLAKE2s (rust-1.84.1-aarch64_be-unknown-netbsd.tar.xz) = 8d90beeca3acadc79cfa725f1ffafcd0f21a03b481b3b6fdbcc9e929ab725d77 +SHA512 (rust-1.84.1-aarch64_be-unknown-netbsd.tar.xz) = ad5f539e8ad3a12954b490a76f2e232eedfbabfb1791d025a0ce739c988d6a24582314a7ce53128d88b26783b1c4eb258ef7ee80c923c422532537765fe54aed +Size (rust-1.84.1-aarch64_be-unknown-netbsd.tar.xz) = 205111332 bytes +BLAKE2s (rust-1.84.1-arm-unknown-linux-gnueabihf.tar.gz) = 8187dfee2b6db35d9cf072f93bab423a02a82b4e9ba920abdb301f3620250b94 +SHA512 (rust-1.84.1-arm-unknown-linux-gnueabihf.tar.gz) = 40be1a405d0e79325e280bdea2153556621bedb8ff19b874afde50544d888a0bab9c5f302a3740272c8a87209d85490146562c68127fbdf7cd81ba039c92e132 +Size (rust-1.84.1-arm-unknown-linux-gnueabihf.tar.gz) = 386795821 bytes +BLAKE2s (rust-1.84.1-armv6-unknown-netbsd-eabihf.tar.xz) = 5c8fa9d0b8771e5b1097ba760d6f28469e2e26247039538e5380c2998ff054e7 +SHA512 (rust-1.84.1-armv6-unknown-netbsd-eabihf.tar.xz) = f5ce3c864c3bb870546e175bdf766da73d5ee9bae700c037ced933c96a430660b3ad88fb6f5c044f4108b59710e834babe8006eafbab49c3c81293064656ee87 +Size (rust-1.84.1-armv6-unknown-netbsd-eabihf.tar.xz) = 176752044 bytes +BLAKE2s (rust-1.84.1-armv7-unknown-linux-gnueabihf.tar.gz) = 6bbb27602077c3c80c20e170a6b770d060b9eb777292876902e787248a8c649d +SHA512 (rust-1.84.1-armv7-unknown-linux-gnueabihf.tar.gz) = 48253cc471828d24542a2110baee522e5bc5f8595d308219588100d3fe5f5d8a7eeab715b0acb1e26b9e2f2dceabc24fe809dd5ddd53f99f8701c54e50f512b2 +Size (rust-1.84.1-armv7-unknown-linux-gnueabihf.tar.gz) = 374492024 bytes +BLAKE2s (rust-1.84.1-armv7-unknown-netbsd-eabihf.tar.xz) = 52e777f3cea007343d9e471d122ca0d80ef525cb2d34b2e596176c9acb4556b9 +SHA512 (rust-1.84.1-armv7-unknown-netbsd-eabihf.tar.xz) = bd7eebade7bcadf683d7818a7ef98f9b061952049dadbe8a88178304dabd27fce988efba1c90101ba0f7e1f08c09f7ecdeacdcfccd5504bd0bb9c57d0f456f55 +Size (rust-1.84.1-armv7-unknown-netbsd-eabihf.tar.xz) = 177679360 bytes +BLAKE2s (rust-1.84.1-i586-unknown-netbsd.tar.xz) = 99c3aa68c051f7d7e3991b20af9ca49fe0cd8876917ee5fdac0176085919c88d +SHA512 (rust-1.84.1-i586-unknown-netbsd.tar.xz) = 0c01a3e5f817f44d3b9e75832be46bc0de07387e0584ad7fe5a7e54d42fd047d40dea9e8fd36b1fa0bf495a77601f89cc4aa33a6f1e9e3fe3ee31c8bd91b7a76 +Size (rust-1.84.1-i586-unknown-netbsd.tar.xz) = 228695868 bytes +BLAKE2s (rust-1.84.1-i686-unknown-linux-gnu.tar.gz) = fd414d680602d4d14d4d6a2a702a976963c514b9eecd2be94e58cb74c360590f +SHA512 (rust-1.84.1-i686-unknown-linux-gnu.tar.gz) = d38868010bce512d1d3c57231dacc79d5c845be6604bf8a5742a7b1848a4159d4b008629f739f854101cb00c39de3ff15266902a66ed2dd5129a28677dba5b2f +Size (rust-1.84.1-i686-unknown-linux-gnu.tar.gz) = 448299058 bytes +BLAKE2s (rust-1.84.1-powerpc-unknown-netbsd.tar.xz) = 59402d87040896dd45bcea325c35a05603e16da6e2a2c7ccbcb6030c870219e5 +SHA512 (rust-1.84.1-powerpc-unknown-netbsd.tar.xz) = 455fe5c6180d87196a657b68f8ffff6154bae424bb21f86384d46b393008e142a3fe1c8a9b28a9fdb57271c019b00509b4a6920d0340123fa53acc743dbc8cc8 +Size (rust-1.84.1-powerpc-unknown-netbsd.tar.xz) = 240340788 bytes +BLAKE2s (rust-1.84.1-riscv64gc-unknown-netbsd.tar.xz) = e05c1ba0ba9a385843e4c26ad4731d867283fd872af9ca63d0818e0bf59fc9e6 +SHA512 (rust-1.84.1-riscv64gc-unknown-netbsd.tar.xz) = efcf93b18edb7e6ae480b0c9b6f06c5c433452e6e3bfad9af9aefb266a779463120bc3baba9b480adc1da6551f8acc390203e403e1fe731918bfe18553d30ba9 +Size (rust-1.84.1-riscv64gc-unknown-netbsd.tar.xz) = 223173808 bytes +BLAKE2s (rust-1.84.1-sparc64-unknown-netbsd.tar.xz) = b4e1a495297a5b0b202ad526e76e6ad2e7336719ef642a536409cd38e4b16c22 +SHA512 (rust-1.84.1-sparc64-unknown-netbsd.tar.xz) = 8d6f14083e230526e334fbd60ec64b783c7a6ef4eb73d85ff5b6ffab21c51ffddc09ce0aa707a2362e38f5da5b521f8dc88e0ce04ebd0e9f2b76144696eb959a +Size (rust-1.84.1-sparc64-unknown-netbsd.tar.xz) = 204168440 bytes +BLAKE2s (rust-1.84.1-x86_64-apple-darwin.tar.gz) = 47cf4d7276811e4c174097716486d7fd82f38ab49948caa9a9edd1885a1cdb96 +SHA512 (rust-1.84.1-x86_64-apple-darwin.tar.gz) = 16475689bddcc704d51dbcfc9efefedd458ce7c90797aafa88f94ffd815fb822b5bb265e9c3779faf48d28fb269d5950072e7e15d11b6f8306bdc70a4d348ab2 +Size (rust-1.84.1-x86_64-apple-darwin.tar.gz) = 350673687 bytes +BLAKE2s (rust-1.84.1-x86_64-unknown-freebsd.tar.gz) = a842e40dbcd0f0366822f9be27ca5e06d0267b9416b4508b46c81fed6333bfc7 +SHA512 (rust-1.84.1-x86_64-unknown-freebsd.tar.gz) = 49472608b393ad76d37ec8711b8428b0cc606c83c660dbfa775410dbcb2edc1c11ecd3d853a667ac8078a05bc99577b960a2fe7745a0ec7146fc6406e4e6d072 +Size (rust-1.84.1-x86_64-unknown-freebsd.tar.gz) = 341896083 bytes +BLAKE2s (rust-1.84.1-x86_64-unknown-illumos.tar.gz) = ab5f7657ebe58b4d3a1da7cd0b86081f5e91524cf00cbccaba27b55911666d43 +SHA512 (rust-1.84.1-x86_64-unknown-illumos.tar.gz) = f49d42ee3e855f2d0b9c5efb101a23a57686e71ffbae46e44e80e79deeb5ab09ccfceb26bf1045aa73db591b3a5fb6cde75db443076b0fcc6e9fa6ae570e0eb1 +Size (rust-1.84.1-x86_64-unknown-illumos.tar.gz) = 234986557 bytes +BLAKE2s (rust-1.84.1-x86_64-unknown-linux-gnu.tar.gz) = e8f4f5309b8648146298907c9c3ec2bb62e0cf64dbffac6f5fc637eb0034a1b1 +SHA512 (rust-1.84.1-x86_64-unknown-linux-gnu.tar.gz) = 5d03f47a4b51dad9588f823d9c12537bcbf54f90cd47df6e7cc380e0afa0f18b8e115280cb7827fd021aea4aafe1e402631a7f82d18455f3d996df30d60139d1 +Size (rust-1.84.1-x86_64-unknown-linux-gnu.tar.gz) = 343864493 bytes +BLAKE2s (rust-1.84.1-x86_64-unknown-netbsd.tar.xz) = da896c25e13da677385afe2cbba7a566a80238018107a4a8a91f395d5e39a8e8 +SHA512 (rust-1.84.1-x86_64-unknown-netbsd.tar.xz) = 936f778eb34a0807d8479d8ea58681c45163a1b6ee574e18e42a9965967107b99956eb3ab8e6e20494eab71b40cb5ac5cdecf0beb48966a02eeebeee0785d4f6 +Size (rust-1.84.1-x86_64-unknown-netbsd.tar.xz) = 202312072 bytes +BLAKE2s (rust-std-1.84.1-aarch64-apple-darwin.tar.gz) = 0c1db7896558f471357e3d7a84eb719835216520bbd8eecf38d04c568cfba7ee +SHA512 (rust-std-1.84.1-aarch64-apple-darwin.tar.gz) = 11297995113dda6aff1a49692adb78096f0153cd26c1d53118fa7ee1276f35411c213357c176a1f9aa5b1daaff61a6fb7133a0d5406ee14a7c6326c2075ce98d +Size (rust-std-1.84.1-aarch64-apple-darwin.tar.gz) = 42525188 bytes +BLAKE2s (rust-std-1.84.1-aarch64-unknown-linux-gnu.tar.gz) = 97a7e7920d078c654343a159a0e61bfd1e0763d8674a4d1df8f42d2bae19cd26 +SHA512 (rust-std-1.84.1-aarch64-unknown-linux-gnu.tar.gz) = dc9d93a7c0d1435f314dd2395f3a409b40e653f15cd445093859b4809517d9f422054f3b4f90c1643d3efa9fde9fe669b355dbbb1d88df30203f7e9b5ce7c471 +Size (rust-std-1.84.1-aarch64-unknown-linux-gnu.tar.gz) = 58735378 bytes +BLAKE2s (rust-std-1.84.1-aarch64-unknown-netbsd.tar.xz) = 367a2423da6d2484c440c5f5d25925624d74ac9ef3a77910860c63f5994d0b05 +SHA512 (rust-std-1.84.1-aarch64-unknown-netbsd.tar.xz) = fe870ee8c5b72730156365255a04bcfa5082f2a6236445148555f13ce9c994fcf8725aa77d6eca509864f23ca28b512896ea236b9ef3e5dc597fd163f4ff51b6 +Size (rust-std-1.84.1-aarch64-unknown-netbsd.tar.xz) = 24341816 bytes +BLAKE2s (rust-std-1.84.1-aarch64_be-unknown-netbsd.tar.xz) = c88c853598710c904a89e18dcd922351e2b01f86620b6f919c09cd63bf92a01c +SHA512 (rust-std-1.84.1-aarch64_be-unknown-netbsd.tar.xz) = 598e828c00ccb7f5b69ccd398b88b705f69d810ccef27d9308f04d7ae6bd69ddaf1788e634df9b7ffda08b151824b2b865a026dbf8aa022f846dfece47d669cf +Size (rust-std-1.84.1-aarch64_be-unknown-netbsd.tar.xz) = 22735596 bytes +BLAKE2s (rust-std-1.84.1-arm-unknown-linux-gnueabihf.tar.gz) = e036f225fed46d2d484e69b61e8a330ae6c3fd43016bf58cfcdcd0371c8e3ef3 +SHA512 (rust-std-1.84.1-arm-unknown-linux-gnueabihf.tar.gz) = 6da3416733f54f05382ad9d3a56c340401e3ccf13c8b4c21d0c4d2968b382774cb7e1a3626bb7913ad1eaaaab372fe633a6d2d0abdf4992c2f19ec5aaf9b705c +Size (rust-std-1.84.1-arm-unknown-linux-gnueabihf.tar.gz) = 39467433 bytes +BLAKE2s (rust-std-1.84.1-armv6-unknown-netbsd-eabihf.tar.xz) = e159c44edfe314fd00610b359cf40cd5e21c319f5821b3eb4a0d1f6a20639f88 +SHA512 (rust-std-1.84.1-armv6-unknown-netbsd-eabihf.tar.xz) = 49864f090e4df344f9e3636a5ff9476ad93f60165ee3f507a1c20f3752fa9a2b54ea726c3a459d0762f847cdd6b7ee8dc903d4a4742a48224e853d96eaee0ab7 +Size (rust-std-1.84.1-armv6-unknown-netbsd-eabihf.tar.xz) = 22648616 bytes +BLAKE2s (rust-std-1.84.1-armv7-unknown-linux-gnueabihf.tar.gz) = 2f0d0106b017d0033ec10834ad352e28fa0849ce4406bc01484136485b943448 +SHA512 (rust-std-1.84.1-armv7-unknown-linux-gnueabihf.tar.gz) = bc0231497a9326dfb82a345065031c379f31db211f12f29ce11a4be94b27808ea39b8808302b76d788cb128270e12238439e7769cade2d03f948208620d0ac71 +Size (rust-std-1.84.1-armv7-unknown-linux-gnueabihf.tar.gz) = 40834306 bytes +BLAKE2s (rust-std-1.84.1-armv7-unknown-netbsd-eabihf.tar.xz) = 27efa4aafd91e0f12d4f5bcf76c0110767c3714c17a39eefa08bdc1d418e0cb9 +SHA512 (rust-std-1.84.1-armv7-unknown-netbsd-eabihf.tar.xz) = 48a4809eb43881550a05550e570d80e97ef10cc3e64f55080647c57e8d122172cdd7ea1cd73a137a2635ecd078f56aee11ad3fea6f21c72fc5d66df10b6bee08 +Size (rust-std-1.84.1-armv7-unknown-netbsd-eabihf.tar.xz) = 23570804 bytes +BLAKE2s (rust-std-1.84.1-i586-unknown-netbsd.tar.xz) = c6f1035e9f0ed28540936c38b797307e9d2582ba2662831ad5245e9368df6ee1 +SHA512 (rust-std-1.84.1-i586-unknown-netbsd.tar.xz) = 2e0fd258bc13e7b1ee3a56843a49c89170e5717d585c78fac0b2ce01a0bda462ac6dbac4794c3229cc9ba4f3226bc3f66337e862e12a162c00e10def803ce36c +Size (rust-std-1.84.1-i586-unknown-netbsd.tar.xz) = 25439480 bytes +BLAKE2s (rust-std-1.84.1-i686-unknown-linux-gnu.tar.gz) = b2d91b1b84d7e0b882ca2f4e025ce32ba2671cf8ca42eeb9b8fa5b57b0a8cdef +SHA512 (rust-std-1.84.1-i686-unknown-linux-gnu.tar.gz) = d386f1baeeec79b5d85f2a24f89bad05e2025a73d5938b4aff4d8403f3a5b05cc008b34a64dedbf1ae59b31d62aae527d4a72b01da9234909797f78b1ea8d566 +Size (rust-std-1.84.1-i686-unknown-linux-gnu.tar.gz) = 43606370 bytes +BLAKE2s (rust-std-1.84.1-powerpc-unknown-netbsd.tar.xz) = b098cc5e304bb3d4b97a6581ea14e2589719a85ab887c1cd3c9af4e5ce98a8d5 +SHA512 (rust-std-1.84.1-powerpc-unknown-netbsd.tar.xz) = 214975d93d7f78b9e1d6a876693a7250a9f82e1470e51914f8f2be2e82376e6da472cd299a07ab051312d031caddae9e3176bad7f23af9d347026fe1a5c53203 +Size (rust-std-1.84.1-powerpc-unknown-netbsd.tar.xz) = 23065944 bytes +BLAKE2s (rust-std-1.84.1-riscv64gc-unknown-netbsd.tar.xz) = 8b43e506d7cfc35b3d80c4c00bc2cb76ff8923c13dd63dc538dfbbb12fb439f1 +SHA512 (rust-std-1.84.1-riscv64gc-unknown-netbsd.tar.xz) = 4a319ae25238fc1a3d3af8eef3f8f1b9dd79906eacfefac060ae02c64b22945568ef3b39fb7b4182a953926bdf7df00b7548080412c8e53595804f0bc8fefd86 +Size (rust-std-1.84.1-riscv64gc-unknown-netbsd.tar.xz) = 22913380 bytes +BLAKE2s (rust-std-1.84.1-sparc64-unknown-netbsd.tar.xz) = 06c1821cc94df2245783761be1bc8d8560a6c8c496662f0984d277a56ad0973b +SHA512 (rust-std-1.84.1-sparc64-unknown-netbsd.tar.xz) = f1d52780ca71b90776fb40aca31c160642f83b34aa708ab116df3d49839b63701e5eda571ac989a0c832cd0fbad19b97a7770e193f73c07bcdd75803240202e7 +Size (rust-std-1.84.1-sparc64-unknown-netbsd.tar.xz) = 22607348 bytes +BLAKE2s (rust-std-1.84.1-x86_64-apple-darwin.tar.gz) = 2df152504cdc18884febfe09aca6008481bea09454f637eb1f0a13819402bb77 +SHA512 (rust-std-1.84.1-x86_64-apple-darwin.tar.gz) = 2a2a8c15e6e5748627832320c1fae0dd26988cf12389d44efd5a93162e8c32d91cbb43167a114ee1f6212b5074830e1d38f92e02f36898d68be1baa1b32f2716 +Size (rust-std-1.84.1-x86_64-apple-darwin.tar.gz) = 45721567 bytes +BLAKE2s (rust-std-1.84.1-x86_64-unknown-freebsd.tar.gz) = b650b074b67a75301871eb0d73b3e90691f92da92e9dfcc6104ebc1ed387ae02 +SHA512 (rust-std-1.84.1-x86_64-unknown-freebsd.tar.gz) = 6081f30c4223b2131afba14ad768ed2e433cdb9a5865d04646a406e2377485d184e9a270cb011f76f2d4e8e0e57e16d668c1688dee088ef6c637f98fa99be414 +Size (rust-std-1.84.1-x86_64-unknown-freebsd.tar.gz) = 47135456 bytes +BLAKE2s (rust-std-1.84.1-x86_64-unknown-linux-gnu.tar.gz) = e0cea2c2ea637da0463d6d49adb27d7acc38b58df06e0120713471478047c1d2 +SHA512 (rust-std-1.84.1-x86_64-unknown-linux-gnu.tar.gz) = 76646b145c9b330b8134b61c7e29a4fef2e06b585b0ebbca46db497a4fbfcdfbd0bd23313452b83e9ec471bccf24d85081f1eff22aad6ed1bf09a264adeb04c0 +Size (rust-std-1.84.1-x86_64-unknown-linux-gnu.tar.gz) = 49493999 bytes +BLAKE2s (rust-std-1.84.1-x86_64-unknown-netbsd.tar.xz) = 5d07b826b079c482efeef4f32bb64684121736436481b7ec2e463a78c079377f +SHA512 (rust-std-1.84.1-x86_64-unknown-netbsd.tar.xz) = 2a1418eb553efdce9d6234072c2fc9c8c2923bc9b94383da3cd4c46ce74fd867ead9edc04d6fbda96bc4286a3342f3cd11fefcc9df33e4fa0a0fce428eb3f0df +Size (rust-std-1.84.1-x86_64-unknown-netbsd.tar.xz) = 28078380 bytes +BLAKE2s (rustc-1.85.0-src.tar.gz) = 2b7a46d49064743c30bf6541eaee77630fc09063eb79f6f6bfe28a15bbe8617d +SHA512 (rustc-1.85.0-src.tar.gz) = 05bc1c1ad256f8fe4b1425650887360ec99ebd0e4c619994f66b55d2902f5f08b5dff448ce720fda798a32a44b225e96921e651e2bf6e80654db79f5a75d2be8 +Size (rustc-1.85.0-src.tar.gz) = 593324630 bytes +SHA1 (patch-compiler_rustc__codegen__ssa_src_back_linker.rs) = f2af6e3b4925e8ca21b7cd783f7831b72700384a +SHA1 (patch-compiler_rustc__llvm_build.rs) = 3acef995e3038a98b29b31b9bdd43286b1ac29f7 +SHA1 (patch-compiler_rustc__target_src_spec_base_netbsd.rs) = f6805317abaf61fa5e713af0b3599945a93a751a +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) = bbfbac8c4047340fc220e26bfaa8e7d7f5dcb284 +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) = 677c18f5945f22d6142287ceb5f56c563fbfc211 +SHA1 (patch-library_backtrace_src_symbolize_gimli.rs) = 9d5ef634c5a454e474ea5fee76da9bb768f5b3d9 +SHA1 (patch-library_backtrace_src_symbolize_gimli_elf.rs) = 8b18e1dbde59f3e8f20e93c7669618b2c7a13294 +SHA1 (patch-library_std_src_sys_pal_unix_mod.rs) = bfc59ae4568547e3ed71c8b31ba5b5b5363d5d40 +SHA1 (patch-library_stdarch_crates_std__detect_tests_cpu-detection.rs) = 97c3ad8ea39c25d41256fcad80fae1e6e4970124 +SHA1 (patch-src_bootstrap_bootstrap.py) = b2ccb6a2c3ca180a3a39493314d56285a7a6d8ea +SHA1 (patch-src_bootstrap_src_core_build__steps_compile.rs) = e928203ed4734c93cc33c5a3f7879cf18dcecc83 +SHA1 (patch-src_bootstrap_src_core_build__steps_install.rs) = cc6558df42c9c9ac28fdb2ff180bdaa7f22ce816 +SHA1 (patch-src_bootstrap_src_core_builder_cargo.rs) = 24c809e25e9397840edf044270d487dab5ec1a12 +SHA1 (patch-src_bootstrap_src_lib.rs) = 331f14cee4b89d306122c61a68dfc356c872f4f3 +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) = 333ec513b9b94750b2424a7c1b21c809e6ea25b8 +SHA1 (patch-src_tools_rust-installer_install-template.sh) = 6984546c34a2e4d55a6dbe59baa0d4958184e0b7 +SHA1 (patch-tests_assembly_targets_targets-elf.rs) = ee7d036c055ed2a2b3b303f381ad4694327c739b +SHA1 (patch-tools_rust-analyzer_lib_line-index-src_lib.rs) = 4ed527174447ee23fa81dd6840e18b9949d5a273 +SHA1 (patch-vendor_bytecount-0.6.8_src_lib.rs) = df3641afebac2b06dc9d266524e295c461c441d4 +SHA1 (patch-vendor_crossbeam-utils-0.8.18_no__atomic.rs) = d4d9288cb199af9bc7e321fbd2b42860aed954ec +SHA1 (patch-vendor_libc-0.2.155_src_unix_bsd_netbsdlike_netbsd_mod.rs) = 36d927a0c3fd6ef8d211da5389a981e077aedc29 +SHA1 (patch-vendor_libc-0.2.155_src_unix_solarish_mod.rs) = 97505b88875aa80fa2b5589b6090237c3786e143 +SHA1 (patch-vendor_libc-0.2.158_src_unix_bsd_netbsdlike_netbsd_mod.rs) = 6ca30a6873bc2ce462a9ed640e72e586b5e7db0b +SHA1 (patch-vendor_libc-0.2.158_src_unix_solarish_mod.rs) = 194bd1dbbc568cc596ab5c58a7ea3ee5c88a804c +SHA1 (patch-vendor_libc-0.2.167_src_unix_bsd_netbsdlike_netbsd_mod.rs) = 2cfc335e8ac0855fe04ffb1b870771b085316655 +SHA1 (patch-vendor_libc-0.2.167_src_unix_solarish_mod.rs) = e4304cbfdad03c7da68ab95260af3a07bdde7b64 +SHA1 (patch-vendor_libc-0.2.169_src_unix_bsd_netbsdlike_netbsd_mod.rs) = 02c4efefbf1e9e1bd98eb9524515677250ae7454 +SHA1 (patch-vendor_libc-0.2.169_src_unix_solarish_mod.rs) = e02c56106a092b4f2e27427ea8b5d96bf437c356 +SHA1 (patch-vendor_line-index-0.1.2_src_lib.rs) = 30aa5c82630ea0e8969abb527c11640712efba1e +SHA1 (patch-vendor_lzma-sys-0.1.20_config.h) = 4849052ddb2f04f539fd7060fc1b43cc3acf99c4 +SHA1 (patch-vendor_memchr-2.7.4_src_arch_aarch64_memchr.rs) = 3e17e9f068afe5e812d10bf57fd3f6d4c21baf0b +SHA1 (patch-vendor_memchr-2.7.4_src_arch_aarch64_mod.rs) = 24bbd69c8b571e5652d5306989b6598b58ec1966 +SHA1 (patch-vendor_memchr-2.7.4_src_memchr.rs) = 4c2f4fa4911f38acd3b36c311abd14d3c9751672 +SHA1 (patch-vendor_memchr-2.7.4_src_memmem_searcher.rs) = a5038873015004ab0c8769dda84edc16a9c55f24 +SHA1 (patch-vendor_memchr-2.7.4_src_vector.rs) = 50a901d061cf58a745b0c387a1c45ff2f0c54e89 +SHA1 (patch-vendor_openssl-src-111.28.2+1.1.1w_openssl_Configurations_10-main.conf) = 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 +SHA1 (patch-vendor_zerocopy-0.7.32_src_lib.rs) = d683e48900f427327f4ed518fe62b593e82c13d7 +SHA1 (patch-vendor_zerocopy-0.7.35_src_lib.rs) = b4b910405172f5653db4bf3286974b9410e77fab diff --git a/rust185/do-cross.mk b/rust185/do-cross.mk new file mode 100644 index 00000000000..36d5cd1a7f0 --- /dev/null +++ b/rust185/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/rust185/files/gcc-wrap b/rust185/files/gcc-wrap new file mode 100644 index 00000000000..957ebfa032f --- /dev/null +++ b/rust185/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 + # 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/rust185/options.mk b/rust185/options.mk new file mode 100644 index 00000000000..eb52f22cab0 --- /dev/null +++ b/rust185/options.mk @@ -0,0 +1,87 @@ +# $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 + +PKG_OPTIONS_LEGACY_OPTS+= rust-llvm:rust-internal-llvm + +# Bundle OpenSSL and curl into the cargo binary when producing +# bootstraps on NetBSD. +.if ${OPSYS} == "NetBSD" && ${BUILD_TARGET} == "dist" +PKG_SUGGESTED_OPTIONS+= rust-cargo-static +.endif + +.include "../../mk/bsd.options.mk" + +# NetBSD/sparc64 when using the internal LLVM needs +# to not use gcc 10.4 or 10.5 (as found in 10.0_BETA or 10.0), ref. +# https://github.com/rust-lang/rust/issues/117231 +# (however, gcc from 9.x produces a working LLVM, go figure). +.if ${MACHINE_PLATFORM:MNetBSD-10.*-sparc64} +. if !empty(PKG_OPTIONS:Mrust-internal-llvm) +# Require GCC 12 (from pkgsrc) to correctly build the embedded LLVM (18.x). +GCC_REQD+= 12 +. endif +.endif + +# Fix for problem seen during rust-installer run w/rust 1.84.1 on macppc, +# "of course" experienced near the end of the build process: +# assertion "memcmp(mf_ptr(mf) - 1, mf_ptr(mf) - matches[i].dist - 2, matches[i].len) == 0" failed: file "xz-5.2/src/liblzma/lz/lz_encoder_mf.c", line 40, function "lzma_mf_find" +# The above is seen with both in-tree gcc (10.5.0) and gcc12 from pkgsrc. +.if ${MACHINE_PLATFORM:MNetBSD-*-powerpc} +GCC_REQD+= 14 +.endif + +# +# Use the internal copy of LLVM or the external one? +# +.if empty(PKG_OPTIONS:Mrust-internal-llvm) +BUILDLINK_API_DEPENDS.llvm+= llvm>=18.0.0 +.include "../../lang/libunwind/buildlink3.mk" +.include "../../lang/llvm/buildlink3.mk" +CONFIGURE_ARGS+= --enable-llvm-link-shared +CONFIGURE_ARGS+= --llvm-libunwind=system +CONFIGURE_ARGS+= --llvm-root=${BUILDLINK_PREFIX.llvm} +# Also turn off build of the internal LLD, as the external LLVM +# may be older (e.g. 18) than the internal LLD (now 19.x), ref. +# https://github.com/rust-lang/rust/issues/131291 +CONFIGURE_ARGS+= --set rust.lld=false +.endif + +# +# 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/rust185/patches/patch-compiler_rustc__codegen__ssa_src_back_linker.rs b/rust185/patches/patch-compiler_rustc__codegen__ssa_src_back_linker.rs new file mode 100644 index 00000000000..cb953e761fb --- /dev/null +++ b/rust185/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.19 2024/11/25 14:37:35 tnn Exp $ + +Do not use @rpath on Darwin. +Find external libunwind on Linux. + +--- compiler/rustc_codegen_ssa/src/back/linker.rs.orig 2024-09-04 15:07:06.000000000 +0000 ++++ compiler/rustc_codegen_ssa/src/back/linker.rs +@@ -402,7 +402,7 @@ impl<'a> GccLinker<'a> { + // principled solution at some point to force the compiler to pass + // the right `-Wl,-install_name` with an `@rpath` in it. + if self.sess.opts.cg.rpath || self.sess.opts.unstable_opts.osx_rpath_install_name { +- let mut rpath = OsString::from("@rpath/"); ++ let mut rpath = OsString::from("@PREFIX@/lib/"); + rpath.push(out_filename.file_name().unwrap()); + self.link_arg("-install_name").link_arg(rpath); + } +@@ -528,6 +528,10 @@ impl<'a> Linker for GccLinker<'a> { + } + + fn link_dylib_by_name(&mut self, name: &str, verbatim: bool, as_needed: bool) { ++ if self.sess.target.os.contains("linux") && name == "unwind" { ++ self.link_arg("-rpath,@PREFIX@/lib"); ++ self.link_arg("-L@PREFIX@/lib"); ++ } + if self.sess.target.os == "illumos" && name == "c" { + // libc will be added via late_link_args on illumos so that it will + // appear last in the library search order. diff --git a/rust185/patches/patch-compiler_rustc__llvm_build.rs b/rust185/patches/patch-compiler_rustc__llvm_build.rs new file mode 100644 index 00000000000..74346dbe8ee --- /dev/null +++ b/rust185/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/rust185/patches/patch-compiler_rustc__target_src_spec_base_netbsd.rs b/rust185/patches/patch-compiler_rustc__target_src_spec_base_netbsd.rs new file mode 100644 index 00000000000..93997710be5 --- /dev/null +++ b/rust185/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::{RelroLevel, TargetOptions, cvs}; ++use crate::spec::{Cc, Lld, LinkerFlavor, RelroLevel, TargetOptions, cvs}; + + pub(crate) fn opts() -> TargetOptions { ++ let add_linker_paths = ++ &[ ++ // For the benefit of powerpc, when libatomic-links is installed, ++ "-Wl,-R@PREFIX@/lib/libatomic", ++ "-Wl,-L@PREFIX@/lib/libatomic", ++ ]; ++ let pre_link_args = TargetOptions::link_args( ++ LinkerFlavor::Gnu(Cc::Yes, Lld::No), ++ add_linker_paths ++ ); + TargetOptions { + os: "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/rust185/patches/patch-compiler_rustc__target_src_spec_mod.rs b/rust185/patches/patch-compiler_rustc__target_src_spec_mod.rs new file mode 100644 index 00000000000..48bba380a58 --- /dev/null +++ b/rust185/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/rust185/patches/patch-compiler_rustc__target_src_spec_targets_aarch64__be__unknown__netbsd.rs b/rust185/patches/patch-compiler_rustc__target_src_spec_targets_aarch64__be__unknown__netbsd.rs new file mode 100644 index 00000000000..64f75d7aa01 --- /dev/null +++ b/rust185/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/rust185/patches/patch-compiler_rustc__target_src_spec_targets_aarch64__unknown__netbsd.rs b/rust185/patches/patch-compiler_rustc__target_src_spec_targets_aarch64__unknown__netbsd.rs new file mode 100644 index 00000000000..870b6f0931c --- /dev/null +++ b/rust185/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/rust185/patches/patch-compiler_rustc__target_src_spec_targets_mips64el__unknown__netbsd.rs b/rust185/patches/patch-compiler_rustc__target_src_spec_targets_mips64el__unknown__netbsd.rs new file mode 100644 index 00000000000..e240c13f23b --- /dev/null +++ b/rust185/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(crate) fn target() -> Target { ++ let mut base = base::netbsd::opts(); ++ base.max_atomic_width = Some(32); ++ base.cpu = "mips32".into(); ++ ++ Target { ++ llvm_target: "mipsel-unknown-netbsd".into(), ++ metadata: 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/rust185/patches/patch-compiler_rustc__target_src_spec_targets_mipsel__unknown__netbsd.rs b/rust185/patches/patch-compiler_rustc__target_src_spec_targets_mipsel__unknown__netbsd.rs new file mode 100644 index 00000000000..9f9b89dbe0a --- /dev/null +++ b/rust185/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/rust185/patches/patch-compiler_rustc__target_src_spec_targets_sparc64__unknown__netbsd.rs b/rust185/patches/patch-compiler_rustc__target_src_spec_targets_sparc64__unknown__netbsd.rs new file mode 100644 index 00000000000..020ca7d9814 --- /dev/null +++ b/rust185/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 2025-01-27 23:20:59.000000000 +0000 ++++ compiler/rustc_target/src/spec/targets/sparc64_unknown_netbsd.rs +@@ -1,11 +1,13 @@ + use crate::abi::Endian; +-use crate::spec::{Cc, LinkerFlavor, Lld, Target, TargetOptions, base}; ++use crate::spec::{Cc, LinkerFlavor, Lld, Target, base}; + + pub(crate) 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(crate) fn target() -> Target { + pointer_width: 64, + data_layout: "E-m:e-i64:64-i128:128-n32:64-S128".into(), + arch: "sparc64".into(), +- options: TargetOptions { endian: Endian::Big, mcount: "__mcount".into(), ..base }, ++ options: base, + } + } diff --git a/rust185/patches/patch-library_backtrace_src_symbolize_gimli.rs b/rust185/patches/patch-library_backtrace_src_symbolize_gimli.rs new file mode 100644 index 00000000000..9084324dd82 --- /dev/null +++ b/rust185/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/rust185/patches/patch-library_backtrace_src_symbolize_gimli_elf.rs b/rust185/patches/patch-library_backtrace_src_symbolize_gimli_elf.rs new file mode 100644 index 00000000000..f49e07d14fc --- /dev/null +++ b/rust185/patches/patch-library_backtrace_src_symbolize_gimli_elf.rs @@ -0,0 +1,26 @@ +$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 +@@ -395,11 +395,18 @@ fn decompress_zstd(mut input: &[u8], mut + Some(()) + } + ++#[cfg(target_os = "netbsd")] ++const DEBUG_PATH: &str = "/usr/libdata/debug"; ++#[cfg(not(target_os = "netbsd"))] + const DEBUG_PATH: &str = "/usr/lib/debug"; + + fn debug_path_exists() -> bool { + cfg_if::cfg_if! { +- if #[cfg(any(target_os = "freebsd", target_os = "hurd", target_os = "linux"))] { ++ if #[cfg(any(target_os = "freebsd", ++ target_os = "netbsd", ++ target_os = "hurd", ++ target_os = "linux" ++ ))] { + use core::sync::atomic::{AtomicU8, Ordering}; + static DEBUG_PATH_EXISTS: AtomicU8 = AtomicU8::new(0); + diff --git a/rust185/patches/patch-library_std_src_sys_pal_unix_mod.rs b/rust185/patches/patch-library_std_src_sys_pal_unix_mod.rs new file mode 100644 index 00000000000..403ccd725e7 --- /dev/null +++ b/rust185/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/rust185/patches/patch-library_stdarch_crates_std__detect_tests_cpu-detection.rs b/rust185/patches/patch-library_stdarch_crates_std__detect_tests_cpu-detection.rs new file mode 100644 index 00000000000..d57e0bb62a8 --- /dev/null +++ b/rust185/patches/patch-library_stdarch_crates_std__detect_tests_cpu-detection.rs @@ -0,0 +1,15 @@ +$NetBSD$ + +On NetBSD/aarch64, do the same as FreeBSD and OpenBSD. + +--- library/stdarch/crates/std_detect/tests/cpu-detection.rs.orig 2024-11-10 17:39:05.836052531 +0000 ++++ library/stdarch/crates/std_detect/tests/cpu-detection.rs +@@ -166,7 +166,7 @@ fn aarch64_windows() { + #[test] + #[cfg(all( + target_arch = "aarch64", +- any(target_os = "freebsd", target_os = "openbsd") ++ any(target_os = "freebsd", target_os = "openbsd", target_os = "netbsd") + ))] + fn aarch64_bsd() { + println!("asimd: {:?}", is_aarch64_feature_detected!("asimd")); diff --git a/rust185/patches/patch-src_bootstrap_bootstrap.py b/rust185/patches/patch-src_bootstrap_bootstrap.py new file mode 100644 index 00000000000..7ec9a08b78f --- /dev/null +++ b/rust185/patches/patch-src_bootstrap_bootstrap.py @@ -0,0 +1,67 @@ +$NetBSD$ + +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 2025-02-17 18:17:27.000000000 +0000 ++++ src/bootstrap/bootstrap.py +@@ -323,6 +323,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] +@@ -427,10 +432,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": +@@ -688,11 +699,11 @@ class RustBuild(object): + ) + p = Pool(pool_size) + try: +- # FIXME: A cheap workaround for https://github.com/rust-lang/rust/issues/125578, +- # remove this once the issue is closed. +- bootstrap_build_artifacts = os.path.join(self.bootstrap_out(), "debug") +- if os.path.exists(bootstrap_build_artifacts): +- shutil.rmtree(bootstrap_build_artifacts) ++# # FIXME: A cheap workaround for https://github.com/rust-lang/rust/issues/125578, ++# # remove this once the issue is closed. ++# bootstrap_build_artifacts = os.path.join(self.bootstrap_out(), "debug") ++# if os.path.exists(bootstrap_build_artifacts): ++# shutil.rmtree(bootstrap_build_artifacts) + + p.map(unpack_component, tarballs_download_info) + finally: +@@ -839,7 +850,10 @@ class RustBuild(object): + self.nix_deps_dir = nix_deps_dir + + patchelf = "{}/bin/patchelf".format(nix_deps_dir) +- rpath_entries = [os.path.join(os.path.realpath(nix_deps_dir), "lib")] ++ rpath_entries = [ ++ "@PREFIX@/lib", ++ os.path.join(os.path.realpath(nix_deps_dir), "lib") ++ ] + patchelf_args = ["--add-rpath", ":".join(rpath_entries)] + if ".so" not in fname: + # Finally, set the correct .interp for binaries diff --git a/rust185/patches/patch-src_bootstrap_src_core_build__steps_compile.rs b/rust185/patches/patch-src_bootstrap_src_core_build__steps_compile.rs new file mode 100644 index 00000000000..92eee786477 --- /dev/null +++ b/rust185/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 +@@ -695,7 +695,7 @@ fn copy_sanitizers( + || target == "x86_64-apple-ios" + { + // Update the library’s install name to reflect that it has been renamed. +- apple_darwin_update_library_name(builder, &dst, &format!("@rpath/{}", runtime.name)); ++ apple_darwin_update_library_name(builder, &dst, &format!("@PREFIX@/lib/{}", runtime.name)); + // Upon renaming the install name, the code signature of the file will invalidate, + // so we will sign it again. + apple_darwin_sign_file(builder, &dst); diff --git a/rust185/patches/patch-src_bootstrap_src_core_build__steps_install.rs b/rust185/patches/patch-src_bootstrap_src_core_build__steps_install.rs new file mode 100644 index 00000000000..8fa745ac41a --- /dev/null +++ b/rust185/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/rust185/patches/patch-src_bootstrap_src_core_builder_cargo.rs b/rust185/patches/patch-src_bootstrap_src_core_builder_cargo.rs new file mode 100644 index 00000000000..46ebd90fbf4 --- /dev/null +++ b/rust185/patches/patch-src_bootstrap_src_core_builder_cargo.rs @@ -0,0 +1,42 @@ +$NetBSD$ + +Find external libunwind and libLLVM in pkgsrc (not just Linux). +Use @PREFIX@ in rpath. + +Adapt fix to +https://github.com/rust-lang/rust/issues/133629 +(files restructured upstream) + +--- src/bootstrap/src/core/builder/cargo.rs.orig 2025-01-27 23:20:59.000000000 +0000 ++++ src/bootstrap/src/core/builder/cargo.rs +@@ -238,7 +238,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@/lib")) + } else { + None + }; +@@ -648,7 +648,10 @@ impl Builder<'_> { + // Build proc macros both for the host and the target unless proc-macros are not + // supported by the target. + if target != compiler.host && cmd_kind != Kind::Check { +- let error = command(self.rustc(compiler)) ++ let mut rustc_cmd = command(self.rustc(compiler)); ++ self.add_rustc_lib_path(compiler, &mut rustc_cmd); ++ ++ let error = rustc_cmd + .arg("--target") + .arg(target.rustc_target_arg()) + .arg("--print=file-names") +@@ -1212,6 +1215,9 @@ impl Builder<'_> { + } + } + ++ // added for pkgsrc libunwind or external LLVM ++ rustflags.arg("-Clink-args=-Wl,-rpath,@PREFIX@/lib,-L@PREFIX/lib"); ++ + Cargo { + command: cargo, + compiler, diff --git a/rust185/patches/patch-src_bootstrap_src_lib.rs b/rust185/patches/patch-src_bootstrap_src_lib.rs new file mode 100644 index 00000000000..e7ca14bda13 --- /dev/null +++ b/rust185/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::>(); + + // 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/rust185/patches/patch-src_llvm-project_llvm_CMakeLists.txt b/rust185/patches/patch-src_llvm-project_llvm_CMakeLists.txt new file mode 100644 index 00000000000..d0dfe4e6da0 --- /dev/null +++ b/rust185/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/rust185/patches/patch-src_llvm-project_llvm_cmake_modules_AddLLVM.cmake b/rust185/patches/patch-src_llvm-project_llvm_cmake_modules_AddLLVM.cmake new file mode 100644 index 00000000000..6a701cd3aac --- /dev/null +++ b/rust185/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/rust185/patches/patch-src_llvm-project_llvm_include_llvm-c_DataTypes.h b/rust185/patches/patch-src_llvm-project_llvm_include_llvm-c_DataTypes.h new file mode 100644 index 00000000000..8722fdfe387 --- /dev/null +++ b/rust185/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 ++#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/rust185/patches/patch-src_llvm-project_llvm_include_llvm_Analysis_ConstantFolding.h b/rust185/patches/patch-src_llvm-project_llvm_include_llvm_Analysis_ConstantFolding.h new file mode 100644 index 00000000000..159d4a70de6 --- /dev/null +++ b/rust185/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 + + namespace llvm { diff --git a/rust185/patches/patch-src_llvm-project_llvm_utils_FileCheck_FileCheck.cpp b/rust185/patches/patch-src_llvm-project_llvm_utils_FileCheck_FileCheck.cpp new file mode 100644 index 00000000000..e255aa5af94 --- /dev/null +++ b/rust185/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/rust185/patches/patch-src_tools_cargo_src_cargo_core_profiles.rs b/rust185/patches/patch-src_tools_cargo_src_cargo_core_profiles.rs new file mode 100644 index 00000000000..0d2e97d952f --- /dev/null +++ b/rust185/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/rust185/patches/patch-src_tools_cargo_tests_testsuite_build.rs b/rust185/patches/patch-src_tools_cargo_tests_testsuite_build.rs new file mode 100644 index 00000000000..faee0c00f97 --- /dev/null +++ b/rust185/patches/patch-src_tools_cargo_tests_testsuite_build.rs @@ -0,0 +1,39 @@ +$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 2025-01-27 23:20:59.000000000 +0000 ++++ src/tools/cargo/tests/testsuite/build.rs +@@ -41,6 +41,7 @@ i am foo + .run(); + } + ++#[cfg(not(target_arch = "sparc64"))] + #[cargo_test] + fn build_with_symlink_to_path_dependency_with_build_script_in_git() { + if !symlink_supported() { +@@ -103,6 +104,7 @@ fn cargo_fail_with_no_stderr() { + + /// Checks that the `CARGO_INCREMENTAL` environment variable results in + /// `rustc` getting `-C incremental` passed to it. ++#[cfg(not(target_arch = "sparc64"))] + #[cargo_test] + fn cargo_compile_incremental() { + let p = project() +@@ -132,6 +134,7 @@ fn cargo_compile_incremental() { + .run(); + } + ++#[cfg(not(target_arch = "sparc64"))] + #[cargo_test] + fn incremental_profile() { + let p = project() +@@ -175,6 +178,7 @@ fn incremental_profile() { + .run(); + } + ++#[cfg(not(target_arch = "sparc64"))] + #[cargo_test] + fn incremental_config() { + let p = project() diff --git a/rust185/patches/patch-src_tools_rust-installer_install-template.sh b/rust185/patches/patch-src_tools_rust-installer_install-template.sh new file mode 100644 index 00000000000..556cade0570 --- /dev/null +++ b/rust185/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" != "" ] +- 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" != "" ]; 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/rust185/patches/patch-tests_assembly_targets_targets-elf.rs b/rust185/patches/patch-tests_assembly_targets_targets-elf.rs new file mode 100644 index 00000000000..8a2594e5037 --- /dev/null +++ b/rust185/patches/patch-tests_assembly_targets_targets-elf.rs @@ -0,0 +1,16 @@ +$NetBSD$ + +Fix test suite. + +--- tests/assembly/targets/targets-elf.rs.orig 2025-02-04 16:02:52.680691048 +0000 ++++ tests/assembly/targets/targets-elf.rs +@@ -276,6 +276,9 @@ + //@ revisions: mips64el_unknown_linux_muslabi64 + //@ [mips64el_unknown_linux_muslabi64] compile-flags: --target mips64el-unknown-linux-muslabi64 + //@ [mips64el_unknown_linux_muslabi64] needs-llvm-components: mips ++//@ revisions: mips64el_unknown_netbsd ++//@ [mips64el_unknown_netbsd] compile-flags: --target mips64el_unknown_netbsd-unknown-linux-muslabi64 ++//@ [mips64el_unknown_netbsd] needs-llvm-components: mips + //@ revisions: mips_unknown_linux_gnu + //@ [mips_unknown_linux_gnu] compile-flags: --target mips-unknown-linux-gnu + //@ [mips_unknown_linux_gnu] needs-llvm-components: mips diff --git a/rust185/patches/patch-tools_rust-analyzer_lib_line-index-src_lib.rs b/rust185/patches/patch-tools_rust-analyzer_lib_line-index-src_lib.rs new file mode 100644 index 00000000000..8b4f9fe0d2e --- /dev/null +++ b/rust185/patches/patch-tools_rust-analyzer_lib_line-index-src_lib.rs @@ -0,0 +1,47 @@ +$NetBSD$ + +Try to avoid using neon for big-endian aarch64. +Ref. https://github.com/rust-lang/rust/issues/129819 + +--- src/tools/rust-analyzer/lib/line-index/src/lib.rs.orig 2024-09-01 14:12:57.016998002 +0000 ++++ src/tools/rust-analyzer/lib/line-index/src/lib.rs +@@ -227,7 +227,7 @@ fn analyze_source_file_dispatch( + } + } + +-#[cfg(target_arch = "aarch64")] ++#[cfg(all(target_arch = "aarch64", target_endian = "little"))] + fn analyze_source_file_dispatch( + src: &str, + lines: &mut Vec, +@@ -339,7 +339,7 @@ unsafe fn analyze_source_file_sse2( + } + + #[target_feature(enable = "neon")] +-#[cfg(target_arch = "aarch64")] ++#[cfg(all(target_arch = "aarch64", target_endian = "little"))] + #[inline] + // See https://community.arm.com/arm-community-blogs/b/infrastructure-solutions-blog/posts/porting-x86-vector-bitmask-optimizations-to-arm-neon + // +@@ -354,7 +354,7 @@ unsafe fn move_mask(v: std::arch::aarch6 + } + + #[target_feature(enable = "neon")] +-#[cfg(target_arch = "aarch64")] ++#[cfg(all(target_arch = "aarch64", target_endian = "little"))] + unsafe fn analyze_source_file_neon( + src: &str, + lines: &mut Vec, +@@ -433,7 +433,11 @@ unsafe fn analyze_source_file_neon( + } + } + +-#[cfg(not(any(target_arch = "x86", target_arch = "x86_64", target_arch = "aarch64")))] ++#[cfg(not(any( ++ target_arch = "x86", ++ target_arch = "x86_64", ++ all(target_arch = "aarch64", target_endian = "little") ++)))] + // The target (or compiler version) does not support SSE2 ... + fn analyze_source_file_dispatch( + src: &str, diff --git a/rust185/patches/patch-vendor_bytecount-0.6.8_src_lib.rs b/rust185/patches/patch-vendor_bytecount-0.6.8_src_lib.rs new file mode 100644 index 00000000000..d587a1a8641 --- /dev/null +++ b/rust185/patches/patch-vendor_bytecount-0.6.8_src_lib.rs @@ -0,0 +1,45 @@ +$NetBSD$ + +Avoid using neon on big-endian aarch64. +Ref. https://github.com/rust-lang/rust/issues/129819 + +--- vendor/bytecount-0.6.8/src/lib.rs.orig 2024-09-01 16:29:37.478735730 +0000 ++++ vendor/bytecount-0.6.8/src/lib.rs +@@ -50,7 +50,10 @@ mod integer_simd; + feature = "runtime-dispatch-simd", + any(target_arch = "x86", target_arch = "x86_64") + ), +- target_arch = "aarch64", ++ all( ++ target_arch = "aarch64", ++ target_endian = "little" ++ ), + target_arch = "wasm32", + feature = "generic-simd" + ))] +@@ -93,7 +96,11 @@ pub fn count(haystack: &[u8], needle: u8 + } + } + } +- #[cfg(all(target_arch = "aarch64", not(feature = "generic_simd")))] ++ #[cfg(all( ++ target_arch = "aarch64", ++ target_endian = "little", ++ not(feature = "generic_simd") ++ ))] + { + unsafe { + return simd::aarch64::chunk_count(haystack, needle); +@@ -155,7 +162,11 @@ pub fn num_chars(utf8_chars: &[u8]) -> u + } + } + } +- #[cfg(all(target_arch = "aarch64", not(feature = "generic_simd")))] ++ #[cfg(all( ++ target_arch = "aarch64", ++ target_endian = "little", ++ not(feature = "generic_simd") ++ ))] + { + unsafe { + return simd::aarch64::chunk_num_chars(utf8_chars); diff --git a/rust185/patches/patch-vendor_crossbeam-utils-0.8.18_no__atomic.rs b/rust185/patches/patch-vendor_crossbeam-utils-0.8.18_no__atomic.rs new file mode 100644 index 00000000000..8a7b3793faf --- /dev/null +++ b/rust185/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/rust185/patches/patch-vendor_libc-0.2.155_src_unix_bsd_netbsdlike_netbsd_mod.rs b/rust185/patches/patch-vendor_libc-0.2.155_src_unix_bsd_netbsdlike_netbsd_mod.rs new file mode 100644 index 00000000000..1b6c7088be4 --- /dev/null +++ b/rust185/patches/patch-vendor_libc-0.2.155_src_unix_bsd_netbsdlike_netbsd_mod.rs @@ -0,0 +1,15 @@ +$NetBSD$ + +Apply https://github.com/rust-lang/libc/pull/4265/files +to fix getmntinfo() from rust. + +--- vendor/libc-0.2.155/src/unix/bsd/netbsdlike/netbsd/mod.rs.orig 2025-02-14 14:04:45.438043897 +0000 ++++ vendor/libc-0.2.155/src/unix/bsd/netbsdlike/netbsd/mod.rs +@@ -3142,6 +3142,7 @@ cfg_if! { + if #[cfg(libc_union)] { + extern { + // these functions use statvfs: ++ #[link_name = "__getmntinfo13"] + pub fn getmntinfo(mntbufp: *mut *mut ::statvfs, flags: ::c_int) -> ::c_int; + pub fn getvfsstat(buf: *mut statvfs, bufsize: ::size_t, flags: ::c_int) -> ::c_int; + } diff --git a/rust185/patches/patch-vendor_libc-0.2.155_src_unix_solarish_mod.rs b/rust185/patches/patch-vendor_libc-0.2.155_src_unix_solarish_mod.rs new file mode 100644 index 00000000000..ee6548b2173 --- /dev/null +++ b/rust185/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/rust185/patches/patch-vendor_libc-0.2.158_src_unix_bsd_netbsdlike_netbsd_mod.rs b/rust185/patches/patch-vendor_libc-0.2.158_src_unix_bsd_netbsdlike_netbsd_mod.rs new file mode 100644 index 00000000000..ae1c37f0d1c --- /dev/null +++ b/rust185/patches/patch-vendor_libc-0.2.158_src_unix_bsd_netbsdlike_netbsd_mod.rs @@ -0,0 +1,15 @@ +$NetBSD$ + +Apply https://github.com/rust-lang/libc/pull/4265/files +to fix getmntinfo() from rust. + +--- vendor/libc-0.2.158/src/unix/bsd/netbsdlike/netbsd/mod.rs.orig 2025-02-14 14:04:45.438043897 +0000 ++++ vendor/libc-0.2.158/src/unix/bsd/netbsdlike/netbsd/mod.rs +@@ -3142,6 +3142,7 @@ cfg_if! { + if #[cfg(libc_union)] { + extern { + // these functions use statvfs: ++ #[link_name = "__getmntinfo13"] + pub fn getmntinfo(mntbufp: *mut *mut ::statvfs, flags: ::c_int) -> ::c_int; + pub fn getvfsstat(buf: *mut statvfs, bufsize: ::size_t, flags: ::c_int) -> ::c_int; + } diff --git a/rust185/patches/patch-vendor_libc-0.2.158_src_unix_solarish_mod.rs b/rust185/patches/patch-vendor_libc-0.2.158_src_unix_solarish_mod.rs new file mode 100644 index 00000000000..16e07b1b96d --- /dev/null +++ b/rust185/patches/patch-vendor_libc-0.2.158_src_unix_solarish_mod.rs @@ -0,0 +1,15 @@ +$NetBSD$ + +Fix xattr build. + +--- vendor/libc-0.2.158/src/unix/solarish/mod.rs.orig 2024-08-29 18:03:17.866520790 +0000 ++++ vendor/libc-0.2.158/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/rust185/patches/patch-vendor_libc-0.2.167_src_unix_bsd_netbsdlike_netbsd_mod.rs b/rust185/patches/patch-vendor_libc-0.2.167_src_unix_bsd_netbsdlike_netbsd_mod.rs new file mode 100644 index 00000000000..ea3b603db64 --- /dev/null +++ b/rust185/patches/patch-vendor_libc-0.2.167_src_unix_bsd_netbsdlike_netbsd_mod.rs @@ -0,0 +1,15 @@ +$NetBSD$ + +Apply https://github.com/rust-lang/libc/pull/4265/files +to fix getmntinfo() from rust. + +--- vendor/libc-0.2.167/src/unix/bsd/netbsdlike/netbsd/mod.rs.orig 2025-02-14 14:04:45.438043897 +0000 ++++ vendor/libc-0.2.167/src/unix/bsd/netbsdlike/netbsd/mod.rs +@@ -2872,6 +2872,7 @@ extern "C" { + hint: *const c_void, + ) -> c_int; + ++ #[link_name = "__getmntinfo13"] + pub fn getmntinfo(mntbufp: *mut *mut crate::statvfs, flags: c_int) -> c_int; + pub fn getvfsstat(buf: *mut statvfs, bufsize: size_t, flags: c_int) -> c_int; + } diff --git a/rust185/patches/patch-vendor_libc-0.2.167_src_unix_solarish_mod.rs b/rust185/patches/patch-vendor_libc-0.2.167_src_unix_solarish_mod.rs new file mode 100644 index 00000000000..f3c8e1c4371 --- /dev/null +++ b/rust185/patches/patch-vendor_libc-0.2.167_src_unix_solarish_mod.rs @@ -0,0 +1,15 @@ +$NetBSD$ + +Fix xattr build. + +--- vendor/libc-0.2.167/src/unix/solarish/mod.rs.orig 2024-08-29 18:03:17.866520790 +0000 ++++ vendor/libc-0.2.167/src/unix/solarish/mod.rs +@@ -1441,6 +1441,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/rust185/patches/patch-vendor_libc-0.2.169_src_unix_bsd_netbsdlike_netbsd_mod.rs b/rust185/patches/patch-vendor_libc-0.2.169_src_unix_bsd_netbsdlike_netbsd_mod.rs new file mode 100644 index 00000000000..67b812ae9b2 --- /dev/null +++ b/rust185/patches/patch-vendor_libc-0.2.169_src_unix_bsd_netbsdlike_netbsd_mod.rs @@ -0,0 +1,15 @@ +$NetBSD$ + +Apply https://github.com/rust-lang/libc/pull/4265/files +to fix getmntinfo() from rust. + +--- vendor/libc-0.2.169/src/unix/bsd/netbsdlike/netbsd/mod.rs.orig 2025-02-14 14:04:45.438043897 +0000 ++++ vendor/libc-0.2.169/src/unix/bsd/netbsdlike/netbsd/mod.rs +@@ -2850,6 +2850,7 @@ extern "C" { + hint: *const c_void, + ) -> c_int; + ++ #[link_name = "__getmntinfo13"] + pub fn getmntinfo(mntbufp: *mut *mut crate::statvfs, flags: c_int) -> c_int; + pub fn getvfsstat(buf: *mut statvfs, bufsize: size_t, flags: c_int) -> c_int; + } diff --git a/rust185/patches/patch-vendor_libc-0.2.169_src_unix_solarish_mod.rs b/rust185/patches/patch-vendor_libc-0.2.169_src_unix_solarish_mod.rs new file mode 100644 index 00000000000..a1339953f13 --- /dev/null +++ b/rust185/patches/patch-vendor_libc-0.2.169_src_unix_solarish_mod.rs @@ -0,0 +1,15 @@ +$NetBSD$ + +Fix xattr build. + +--- vendor/libc-0.2.169/src/unix/solarish/mod.rs.orig 2024-08-29 18:03:17.866520790 +0000 ++++ vendor/libc-0.2.169/src/unix/solarish/mod.rs +@@ -1421,6 +1421,8 @@ pub const EOWNERDEAD: c_int = 58; + pub const ENOTRECOVERABLE: c_int = 59; + pub const ENOSTR: c_int = 60; + pub const ENODATA: c_int = 61; ++// This is not supported but is required for xattr ++pub const ENOATTR: ::c_int = ::ENODATA; + pub const ETIME: c_int = 62; + pub const ENOSR: c_int = 63; + pub const ENONET: c_int = 64; diff --git a/rust185/patches/patch-vendor_line-index-0.1.2_src_lib.rs b/rust185/patches/patch-vendor_line-index-0.1.2_src_lib.rs new file mode 100644 index 00000000000..4d144118661 --- /dev/null +++ b/rust185/patches/patch-vendor_line-index-0.1.2_src_lib.rs @@ -0,0 +1,42 @@ +$NetBSD$ + +Do not attempt use of neon extension in big-endian mode. + +--- vendor/line-index-0.1.2/src/lib.rs.orig 2025-02-03 07:59:39.771200202 +0000 ++++ vendor/line-index-0.1.2/src/lib.rs +@@ -235,7 +235,7 @@ fn analyze_source_file_dispatch( + } + } + +-#[cfg(target_arch = "aarch64")] ++#[cfg(all(target_arch = "aarch64", target_endian = "little"))] + fn analyze_source_file_dispatch( + src: &str, + lines: &mut Vec, +@@ -347,7 +347,7 @@ unsafe fn analyze_source_file_sse2( + } + + #[target_feature(enable = "neon")] +-#[cfg(target_arch = "aarch64")] ++#[cfg(all(target_arch = "aarch64", target_endian = "little"))] + #[inline] + // See https://community.arm.com/arm-community-blogs/b/infrastructure-solutions-blog/posts/porting-x86-vector-bitmask-optimizations-to-arm-neon + // +@@ -362,7 +362,7 @@ unsafe fn move_mask(v: std::arch::aarch6 + } + + #[target_feature(enable = "neon")] +-#[cfg(target_arch = "aarch64")] ++#[cfg(all(target_arch = "aarch64", target_endian = "little"))] + unsafe fn analyze_source_file_neon( + src: &str, + lines: &mut Vec, +@@ -441,7 +441,7 @@ unsafe fn analyze_source_file_neon( + } + } + +-#[cfg(not(any(target_arch = "x86", target_arch = "x86_64", target_arch = "aarch64")))] ++#[cfg(not(any(target_arch = "x86", target_arch = "x86_64", all(target_arch = "aarch64", target_endian = "little"))))] + // The target (or compiler version) does not support SSE2 ... + fn analyze_source_file_dispatch( + src: &str, diff --git a/rust185/patches/patch-vendor_lzma-sys-0.1.20_config.h b/rust185/patches/patch-vendor_lzma-sys-0.1.20_config.h new file mode 100644 index 00000000000..6eaa429abed --- /dev/null +++ b/rust185/patches/patch-vendor_lzma-sys-0.1.20_config.h @@ -0,0 +1,25 @@ +$NetBSD$ + +clock_gettime() is available also on NetBSD. + +This takes care of this build error: + + cargo:warning=xz-5.2/src/common/mythread.h: In function 'mythread_condtime_set': + cargo:warning=xz-5.2/src/common/mythread.h:312:9: error: implicit declaration of function 'gettimeofday' [-Wimplicit-function-declaration] + cargo:warning= 312 | gettimeofday(&now, NULL); + cargo:warning= | ^~~~~~~~~~~~ + +which popped up when switching powerpc to using gcc14, but strangely +was not triggered by gcc12 or in-tree gcc. + +--- vendor/lzma-sys-0.1.20/config.h.orig 2025-02-11 23:15:56.129312069 +0000 ++++ vendor/lzma-sys-0.1.20/config.h +@@ -39,7 +39,7 @@ + #define MYTHREAD_POSIX 1 + #endif + +-#if defined(__sun) ++#if defined(__sun) || defined(__NetBSD__) + #define HAVE_CLOCK_GETTIME 1 + #define HAVE_DECL_CLOCK_MONOTONIC 1 + #endif diff --git a/rust185/patches/patch-vendor_memchr-2.7.4_src_arch_aarch64_memchr.rs b/rust185/patches/patch-vendor_memchr-2.7.4_src_arch_aarch64_memchr.rs new file mode 100644 index 00000000000..06fbbc1f87f --- /dev/null +++ b/rust185/patches/patch-vendor_memchr-2.7.4_src_arch_aarch64_memchr.rs @@ -0,0 +1,24 @@ +$NetBSD$ + +Don't try to do neon / SIMD on big-endian aarch64. + +--- vendor/memchr-2.7.4/src/arch/aarch64/memchr.rs.orig 2024-09-22 14:55:32.455792108 +0000 ++++ vendor/memchr-2.7.4/src/arch/aarch64/memchr.rs +@@ -8,7 +8,7 @@ available for `aarch64` targets.) + + macro_rules! defraw { + ($ty:ident, $find:ident, $start:ident, $end:ident, $($needles:ident),+) => {{ +- #[cfg(target_feature = "neon")] ++ #[cfg(all(target_feature = "neon", target_endian = "little"))] + { + use crate::arch::aarch64::neon::memchr::$ty; + +@@ -19,7 +19,7 @@ macro_rules! defraw { + // enabled. + $ty::new_unchecked($($needles),+).$find($start, $end) + } +- #[cfg(not(target_feature = "neon"))] ++ #[cfg(not(all(target_feature = "neon", target_endian = "little")))] + { + use crate::arch::all::memchr::$ty; + diff --git a/rust185/patches/patch-vendor_memchr-2.7.4_src_arch_aarch64_mod.rs b/rust185/patches/patch-vendor_memchr-2.7.4_src_arch_aarch64_mod.rs new file mode 100644 index 00000000000..3fa3ec8c4db --- /dev/null +++ b/rust185/patches/patch-vendor_memchr-2.7.4_src_arch_aarch64_mod.rs @@ -0,0 +1,15 @@ +$NetBSD$ + +Don't try to do neon / SIMD on big-endian aarch64. + +--- vendor/memchr-2.7.4/src/arch/aarch64/mod.rs.orig 2024-09-22 19:17:13.167426584 +0000 ++++ vendor/memchr-2.7.4/src/arch/aarch64/mod.rs +@@ -2,6 +2,8 @@ + Vector algorithms for the `aarch64` target. + */ + ++#[cfg(target_endian = "little")] + pub mod neon; + ++#[cfg(target_endian = "little")] + pub(crate) mod memchr; diff --git a/rust185/patches/patch-vendor_memchr-2.7.4_src_memchr.rs b/rust185/patches/patch-vendor_memchr-2.7.4_src_memchr.rs new file mode 100644 index 00000000000..da85596fc14 --- /dev/null +++ b/rust185/patches/patch-vendor_memchr-2.7.4_src_memchr.rs @@ -0,0 +1,128 @@ +$NetBSD$ + +Don't try to do neon / SIMD on big-endian aarch64. + +--- vendor/memchr-2.7.4/src/memchr.rs.orig 2024-09-22 14:50:24.931022916 +0000 ++++ vendor/memchr-2.7.4/src/memchr.rs +@@ -518,14 +518,14 @@ unsafe fn memchr_raw( + { + crate::arch::wasm32::memchr::memchr_raw(needle, start, end) + } +- #[cfg(target_arch = "aarch64")] ++ #[cfg(all(target_arch = "aarch64", target_endian = "little"))] + { + crate::arch::aarch64::memchr::memchr_raw(needle, start, end) + } + #[cfg(not(any( + target_arch = "x86_64", + all(target_arch = "wasm32", target_feature = "simd128"), +- target_arch = "aarch64" ++ all(target_arch = "aarch64", target_endian = "little") + )))] + { + crate::arch::all::memchr::One::new(needle).find_raw(start, end) +@@ -551,14 +551,14 @@ unsafe fn memrchr_raw( + { + crate::arch::wasm32::memchr::memrchr_raw(needle, start, end) + } +- #[cfg(target_arch = "aarch64")] ++ #[cfg(all(target_arch = "aarch64", target_endian = "little"))] + { + crate::arch::aarch64::memchr::memrchr_raw(needle, start, end) + } + #[cfg(not(any( + target_arch = "x86_64", + all(target_arch = "wasm32", target_feature = "simd128"), +- target_arch = "aarch64" ++ all(target_arch = "aarch64", target_endian = "little") + )))] + { + crate::arch::all::memchr::One::new(needle).rfind_raw(start, end) +@@ -585,14 +585,14 @@ unsafe fn memchr2_raw( + { + crate::arch::wasm32::memchr::memchr2_raw(needle1, needle2, start, end) + } +- #[cfg(target_arch = "aarch64")] ++ #[cfg(all(target_arch = "aarch64", target_endian = "little"))] + { + crate::arch::aarch64::memchr::memchr2_raw(needle1, needle2, start, end) + } + #[cfg(not(any( + target_arch = "x86_64", + all(target_arch = "wasm32", target_feature = "simd128"), +- target_arch = "aarch64" ++ all(target_arch = "aarch64", target_endian = "little") + )))] + { + crate::arch::all::memchr::Two::new(needle1, needle2) +@@ -620,7 +620,7 @@ unsafe fn memrchr2_raw( + { + crate::arch::wasm32::memchr::memrchr2_raw(needle1, needle2, start, end) + } +- #[cfg(target_arch = "aarch64")] ++ #[cfg(all(target_arch = "aarch64", target_endian = "little"))] + { + crate::arch::aarch64::memchr::memrchr2_raw( + needle1, needle2, start, end, +@@ -629,7 +629,7 @@ unsafe fn memrchr2_raw( + #[cfg(not(any( + target_arch = "x86_64", + all(target_arch = "wasm32", target_feature = "simd128"), +- target_arch = "aarch64" ++ all(target_arch = "aarch64", target_endian = "little") + )))] + { + crate::arch::all::memchr::Two::new(needle1, needle2) +@@ -662,7 +662,7 @@ unsafe fn memchr3_raw( + needle1, needle2, needle3, start, end, + ) + } +- #[cfg(target_arch = "aarch64")] ++ #[cfg(all(target_arch = "aarch64", target_endian = "little"))] + { + crate::arch::aarch64::memchr::memchr3_raw( + needle1, needle2, needle3, start, end, +@@ -671,7 +671,7 @@ unsafe fn memchr3_raw( + #[cfg(not(any( + target_arch = "x86_64", + all(target_arch = "wasm32", target_feature = "simd128"), +- target_arch = "aarch64" ++ all(target_arch = "aarch64", target_endian = "little") + )))] + { + crate::arch::all::memchr::Three::new(needle1, needle2, needle3) +@@ -704,7 +704,7 @@ unsafe fn memrchr3_raw( + needle1, needle2, needle3, start, end, + ) + } +- #[cfg(target_arch = "aarch64")] ++ #[cfg(all(target_arch = "aarch64", target_endian = "little"))] + { + crate::arch::aarch64::memchr::memrchr3_raw( + needle1, needle2, needle3, start, end, +@@ -713,7 +713,7 @@ unsafe fn memrchr3_raw( + #[cfg(not(any( + target_arch = "x86_64", + all(target_arch = "wasm32", target_feature = "simd128"), +- target_arch = "aarch64" ++ all(target_arch = "aarch64", target_endian = "little") + )))] + { + crate::arch::all::memchr::Three::new(needle1, needle2, needle3) +@@ -736,14 +736,14 @@ unsafe fn count_raw(needle: u8, start: * + { + crate::arch::wasm32::memchr::count_raw(needle, start, end) + } +- #[cfg(target_arch = "aarch64")] ++ #[cfg(all(target_arch = "aarch64", target_endian = "little"))] + { + crate::arch::aarch64::memchr::count_raw(needle, start, end) + } + #[cfg(not(any( + target_arch = "x86_64", + all(target_arch = "wasm32", target_feature = "simd128"), +- target_arch = "aarch64" ++ all(target_arch = "aarch64", target_endian = "little") + )))] + { + crate::arch::all::memchr::One::new(needle).count_raw(start, end) diff --git a/rust185/patches/patch-vendor_memchr-2.7.4_src_memmem_searcher.rs b/rust185/patches/patch-vendor_memchr-2.7.4_src_memmem_searcher.rs new file mode 100644 index 00000000000..743d4886ee5 --- /dev/null +++ b/rust185/patches/patch-vendor_memchr-2.7.4_src_memmem_searcher.rs @@ -0,0 +1,78 @@ +$NetBSD$ + +Don't try to use neon / SIMD on big-endian aarch64. + +--- vendor/memchr-2.7.4/src/memmem/searcher.rs.orig 2024-09-22 14:44:21.224731060 +0000 ++++ vendor/memchr-2.7.4/src/memmem/searcher.rs +@@ -3,7 +3,7 @@ use crate::arch::all::{ + rabinkarp, twoway, + }; + +-#[cfg(target_arch = "aarch64")] ++#[cfg(all(target_arch = "aarch64", target_endian = "little"))] + use crate::arch::aarch64::neon::packedpair as neon; + #[cfg(all(target_arch = "wasm32", target_feature = "simd128"))] + use crate::arch::wasm32::simd128::packedpair as simd128; +@@ -129,7 +129,7 @@ impl Searcher { + Searcher::twoway(needle, rabinkarp, prestrat) + } + } +- #[cfg(target_arch = "aarch64")] ++ #[cfg(all(target_arch = "aarch64", target_endian = "little"))] + { + if let Some(pp) = neon::Finder::with_pair(needle, pair) { + if do_packed_search(needle) { +@@ -152,7 +152,7 @@ impl Searcher { + #[cfg(not(any( + all(target_arch = "x86_64", target_feature = "sse2"), + all(target_arch = "wasm32", target_feature = "simd128"), +- target_arch = "aarch64" ++ all(target_arch = "aarch64", target_endian = "little") + )))] + { + if prefilter.is_none() { +@@ -253,7 +253,7 @@ union SearcherKind { + avx2: crate::arch::x86_64::avx2::packedpair::Finder, + #[cfg(all(target_arch = "wasm32", target_feature = "simd128"))] + simd128: crate::arch::wasm32::simd128::packedpair::Finder, +- #[cfg(target_arch = "aarch64")] ++ #[cfg(all(target_arch = "aarch64", target_endian = "little"))] + neon: crate::arch::aarch64::neon::packedpair::Finder, + } + +@@ -421,7 +421,7 @@ unsafe fn searcher_kind_simd128( + /// # Safety + /// + /// Callers must ensure that the `searcher.kind.neon` union field is set. +-#[cfg(target_arch = "aarch64")] ++#[cfg(all(target_arch = "aarch64", target_endian = "little"))] + unsafe fn searcher_kind_neon( + searcher: &Searcher, + _prestate: &mut PrefilterState, +@@ -686,7 +686,7 @@ impl Prefilter { + } + + /// Return a prefilter using a aarch64 neon vector algorithm. +- #[cfg(target_arch = "aarch64")] ++ #[cfg(all(target_arch = "aarch64", target_endian = "little"))] + #[inline] + fn neon(finder: neon::Finder, needle: &[u8]) -> Prefilter { + trace!("building aarch64 neon prefilter"); +@@ -763,7 +763,7 @@ union PrefilterKind { + avx2: crate::arch::x86_64::avx2::packedpair::Finder, + #[cfg(all(target_arch = "wasm32", target_feature = "simd128"))] + simd128: crate::arch::wasm32::simd128::packedpair::Finder, +- #[cfg(target_arch = "aarch64")] ++ #[cfg(all(target_arch = "aarch64", target_endian = "little"))] + neon: crate::arch::aarch64::neon::packedpair::Finder, + } + +@@ -852,7 +852,7 @@ unsafe fn prefilter_kind_simd128( + /// # Safety + /// + /// Callers must ensure that the `strat.kind.neon` union field is set. +-#[cfg(target_arch = "aarch64")] ++#[cfg(all(target_arch = "aarch64", target_endian = "little"))] + unsafe fn prefilter_kind_neon( + strat: &Prefilter, + haystack: &[u8], diff --git a/rust185/patches/patch-vendor_memchr-2.7.4_src_vector.rs b/rust185/patches/patch-vendor_memchr-2.7.4_src_vector.rs new file mode 100644 index 00000000000..6851a4a4fd8 --- /dev/null +++ b/rust185/patches/patch-vendor_memchr-2.7.4_src_vector.rs @@ -0,0 +1,15 @@ +$NetBSD$ + +Don't try to do neon / SIMD on big-endian aarch64. + +--- vendor/memchr-2.7.4/src/vector.rs.orig 2024-09-22 14:16:06.473207292 +0000 ++++ vendor/memchr-2.7.4/src/vector.rs +@@ -289,7 +289,7 @@ mod x86avx2 { + } + } + +-#[cfg(target_arch = "aarch64")] ++#[cfg(all(target_arch = "aarch64", target_endian = "little"))] + mod aarch64neon { + use core::arch::aarch64::*; + diff --git a/rust185/patches/patch-vendor_openssl-src-111.28.2+1.1.1w_openssl_Configurations_10-main.conf b/rust185/patches/patch-vendor_openssl-src-111.28.2+1.1.1w_openssl_Configurations_10-main.conf new file mode 100644 index 00000000000..d7eb270fd17 --- /dev/null +++ b/rust185/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/rust185/patches/patch-vendor_openssl-src-111.28.2+1.1.1w_src_lib.rs b/rust185/patches/patch-vendor_openssl-src-111.28.2+1.1.1w_src_lib.rs new file mode 100644 index 00000000000..5924303d052 --- /dev/null +++ b/rust185/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/rust185/patches/patch-vendor_openssl-sys-0.9.102_build_find__normal.rs b/rust185/patches/patch-vendor_openssl-sys-0.9.102_build_find__normal.rs new file mode 100644 index 00000000000..80d98e247b2 --- /dev/null +++ b/rust185/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/rust185/patches/patch-vendor_openssl-sys-0.9.102_build_main.rs b/rust185/patches/patch-vendor_openssl-sys-0.9.102_build_main.rs new file mode 100644 index 00000000000..a15188f4728 --- /dev/null +++ b/rust185/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/rust185/patches/patch-vendor_openssl-sys-0.9.92_build_find__normal.rs b/rust185/patches/patch-vendor_openssl-sys-0.9.92_build_find__normal.rs new file mode 100644 index 00000000000..99108643b7e --- /dev/null +++ b/rust185/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/rust185/patches/patch-vendor_openssl-sys-0.9.92_build_main.rs b/rust185/patches/patch-vendor_openssl-sys-0.9.92_build_main.rs new file mode 100644 index 00000000000..0a70272949a --- /dev/null +++ b/rust185/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/rust185/patches/patch-vendor_rustc-ap-rustc__target_src_spec_aarch64__be__unknown__netbsd.rs b/rust185/patches/patch-vendor_rustc-ap-rustc__target_src_spec_aarch64__be__unknown__netbsd.rs new file mode 100644 index 00000000000..6c90dec84c5 --- /dev/null +++ b/rust185/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/rust185/patches/patch-vendor_zerocopy-0.7.32_src_lib.rs b/rust185/patches/patch-vendor_zerocopy-0.7.32_src_lib.rs new file mode 100644 index 00000000000..35ab52f6cb8 --- /dev/null +++ b/rust185/patches/patch-vendor_zerocopy-0.7.32_src_lib.rs @@ -0,0 +1,25 @@ +$NetBSD$ + +Attempt at skipping SIMD / neon on big-endian aarch64, +ref. https://github.com/rust-lang/rust/issues/129819. + +--- vendor/zerocopy-0.7.32/src/lib.rs.orig 2024-09-01 12:56:49.837065351 +0000 ++++ vendor/zerocopy-0.7.32/src/lib.rs +@@ -3715,7 +3715,7 @@ mod simd { + powerpc64, powerpc64, vector_bool_long, vector_double, vector_signed_long, vector_unsigned_long + ); + simd_arch_mod!( +- #[cfg(target_arch = "aarch64")] ++ #[cfg(all(target_arch = "aarch64", target_endian = "little"))] + aarch64, aarch64, float32x2_t, float32x4_t, float64x1_t, float64x2_t, int8x8_t, int8x8x2_t, + int8x8x3_t, int8x8x4_t, int8x16_t, int8x16x2_t, int8x16x3_t, int8x16x4_t, int16x4_t, + int16x8_t, int32x2_t, int32x4_t, int64x1_t, int64x2_t, poly8x8_t, poly8x8x2_t, poly8x8x3_t, +@@ -7998,7 +7998,7 @@ mod tests { + vector_signed_long, + vector_unsigned_long + ); +- #[cfg(target_arch = "aarch64")] ++ #[cfg(all(target_arch = "aarch64", target_endian = "little"))] + #[rustfmt::skip] + test_simd_arch_mod!( + aarch64, float32x2_t, float32x4_t, float64x1_t, float64x2_t, int8x8_t, int8x8x2_t, diff --git a/rust185/patches/patch-vendor_zerocopy-0.7.35_src_lib.rs b/rust185/patches/patch-vendor_zerocopy-0.7.35_src_lib.rs new file mode 100644 index 00000000000..d71d7d09246 --- /dev/null +++ b/rust185/patches/patch-vendor_zerocopy-0.7.35_src_lib.rs @@ -0,0 +1,25 @@ +$NetBSD$ + +Attempt at skipping SIMD / neon on big-endian aarch64, +ref. https://github.com/rust-lang/rust/issues/129819. + +--- vendor/zerocopy-0.7.35/src/lib.rs.orig 2024-08-31 21:15:29.602997509 +0000 ++++ vendor/zerocopy-0.7.35/src/lib.rs +@@ -3727,7 +3727,7 @@ mod simd { + powerpc64, powerpc64, vector_bool_long, vector_double, vector_signed_long, vector_unsigned_long + ); + simd_arch_mod!( +- #[cfg(target_arch = "aarch64")] ++ #[cfg(all(target_arch = "aarch64", target_endian = "little"))] + aarch64, aarch64, float32x2_t, float32x4_t, float64x1_t, float64x2_t, int8x8_t, int8x8x2_t, + int8x8x3_t, int8x8x4_t, int8x16_t, int8x16x2_t, int8x16x3_t, int8x16x4_t, int16x4_t, + int16x8_t, int32x2_t, int32x4_t, int64x1_t, int64x2_t, poly8x8_t, poly8x8x2_t, poly8x8x3_t, +@@ -8020,7 +8020,7 @@ mod tests { + vector_signed_long, + vector_unsigned_long + ); +- #[cfg(target_arch = "aarch64")] ++ #[cfg(all(target_arch = "aarch64", target_endian = "little"))] + #[rustfmt::skip] + test_simd_arch_mod!( + aarch64, float32x2_t, float32x4_t, float64x1_t, float64x2_t, int8x8_t, int8x8x2_t, diff --git a/rust185/platform.mk b/rust185/platform.mk new file mode 100644 index 00000000000..c6a01214d8a --- /dev/null +++ b/rust185/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/rust185/rust.mk b/rust185/rust.mk new file mode 100644 index 00000000000..5ecb4c2e463 --- /dev/null +++ b/rust185/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 native +# 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