Skip to content

Commit 0c9d603

Browse files
committed
rust183: add a package for rust version 1.83.0.
Pkgsrc changes compared to rust182: * Remove patches related to rust-lang/rust#130110, which is now integrated upstream. * Remove patch to vendor/cc-1.0.79, now integrated in the current vendored cc crate. * Checksum updates. TODO: * Cross-compilation fails ref. rust-lang/rust#133629 Upstream changes: Version 1.83.0 (2024-11-28) ========================== Language -------- - [Stabilize `&mut`, `*mut`, `&Cell`, and `*const Cell` in const.] (rust-lang/rust#129195) - [Allow creating references to statics in `const` initializers.] (rust-lang/rust#129759) - [Implement raw lifetimes and labels (`'r#ident`).] (rust-lang/rust#126452) - [Define behavior when atomic and non-atomic reads race.] (rust-lang/rust#128778) - [Non-exhaustive structs may now be empty.] (rust-lang/rust#128934) - [Disallow implicit coercions from places of type `!`] (rust-lang/rust#129392) - [`const extern` functions can now be defined for other calling conventions.] (rust-lang/rust#129753) - [Stabilize `expr_2021` macro fragment specifier in all editions.] (rust-lang/rust#129972) - [The `non_local_definitions` lint now fires on less code and warns by default.] (rust-lang/rust#127117) Compiler -------- - [Deprecate unsound `-Csoft-float` flag.] (rust-lang/rust#129897) - Add many new tier 3 targets: - [`aarch64_unknown_nto_qnx700`] (rust-lang/rust#127897) - [`arm64e-apple-tvos`] (rust-lang/rust#130614) - [`armv7-rtems-eabihf`] (rust-lang/rust#127021) - [`loongarch64-unknown-linux-ohos`] (rust-lang/rust#130750) - [`riscv32-wrs-vxworks` and `riscv64-wrs-vxworks`] (rust-lang/rust#130549) - [`riscv32{e|em|emc}-unknown-none-elf`] (rust-lang/rust#130555) - [`x86_64-unknown-hurd-gnu`] (rust-lang/rust#128345) - [`x86_64-unknown-trusty`] (rust-lang/rust#130453) Refer to Rust's [platform support page][platform-support-doc] for more information on Rust's tiered platform support. Libraries --------- - [Implement `PartialEq` for `ExitCode`.] (rust-lang/rust#127633) - [Document that `catch_unwind` can deal with foreign exceptions without UB, although the exact behavior is unspecified.] (rust-lang/rust#128321) - [Implement `Default` for `HashMap`/`HashSet` iterators that don't already have it.] (rust-lang/rust#128711) - [Bump Unicode to version 16.0.0.] (rust-lang/rust#130183) - [Change documentation of `ptr::add`/`sub` to not claim equivalence with `offset`.] (rust-lang/rust#130229). Stabilized APIs --------------- - [`BufRead::skip_until`] (https://doc.rust-lang.org/stable/std/io/trait.BufRead.html#method.skip_until) - [`ControlFlow::break_value`] (https://doc.rust-lang.org/stable/core/ops/enum.ControlFlow.html#method.break_value) - [`ControlFlow::continue_value`] (https://doc.rust-lang.org/stable/core/ops/enum.ControlFlow.html#method.continue_value) - [`ControlFlow::map_break`] (https://doc.rust-lang.org/stable/core/ops/enum.ControlFlow.html#method.map_break) - [`ControlFlow::map_continue`] (https://doc.rust-lang.org/stable/core/ops/enum.ControlFlow.html#method.map_continue) - [`DebugList::finish_non_exhaustive`] (https://doc.rust-lang.org/stable/core/fmt/struct.DebugList.html#method.finish_non_exhaustive) - [`DebugMap::finish_non_exhaustive`] (https://doc.rust-lang.org/stable/core/fmt/struct.DebugMap.html#method.finish_non_exhaustive) - [`DebugSet::finish_non_exhaustive`] (https://doc.rust-lang.org/stable/core/fmt/struct.DebugSet.html#method.finish_non_exhaustive) - [`DebugTuple::finish_non_exhaustive`] (https://doc.rust-lang.org/stable/core/fmt/struct.DebugTuple.html#method.finish_non_exhaustive) - [`ErrorKind::ArgumentListTooLong`] (https://doc.rust-lang.org/stable/std/io/enum.ErrorKind.html#variant.ArgumentListTooLong) - [`ErrorKind::Deadlock`] (https://doc.rust-lang.org/stable/std/io/enum.ErrorKind.html#variant.Deadlock) - [`ErrorKind::DirectoryNotEmpty`] (https://doc.rust-lang.org/stable/std/io/enum.ErrorKind.html#variant.DirectoryNotEmpty) - [`ErrorKind::ExecutableFileBusy`] (https://doc.rust-lang.org/stable/std/io/enum.ErrorKind.html#variant.ExecutableFileBusy) - [`ErrorKind::FileTooLarge`] (https://doc.rust-lang.org/stable/std/io/enum.ErrorKind.html#variant.FileTooLarge) - [`ErrorKind::HostUnreachable`] (https://doc.rust-lang.org/stable/std/io/enum.ErrorKind.html#variant.HostUnreachable) - [`ErrorKind::IsADirectory`] (https://doc.rust-lang.org/stable/std/io/enum.ErrorKind.html#variant.IsADirectory) - [`ErrorKind::NetworkDown`] (https://doc.rust-lang.org/stable/std/io/enum.ErrorKind.html#variant.NetworkDown) - [`ErrorKind::NetworkUnreachable`] (https://doc.rust-lang.org/stable/std/io/enum.ErrorKind.html#variant.NetworkUnreachable) - [`ErrorKind::NotADirectory`] (https://doc.rust-lang.org/stable/std/io/enum.ErrorKind.html#variant.NotADirectory) - [`ErrorKind::NotSeekable`] (https://doc.rust-lang.org/stable/std/io/enum.ErrorKind.html#variant.NotSeekable) - [`ErrorKind::ReadOnlyFilesystem`] (https://doc.rust-lang.org/stable/std/io/enum.ErrorKind.html#variant.ReadOnlyFilesystem) - [`ErrorKind::ResourceBusy`] (https://doc.rust-lang.org/stable/std/io/enum.ErrorKind.html#variant.ResourceBusy) - [`ErrorKind::StaleNetworkFileHandle`] (https://doc.rust-lang.org/stable/std/io/enum.ErrorKind.html#variant.StaleNetworkFileHandle) - [`ErrorKind::StorageFull`] (https://doc.rust-lang.org/stable/std/io/enum.ErrorKind.html#variant.StorageFull) - [`ErrorKind::TooManyLinks`] (https://doc.rust-lang.org/stable/std/io/enum.ErrorKind.html#variant.TooManyLinks) - [`Option::get_or_insert_default`] (https://doc.rust-lang.org/stable/core/option/enum.Option.html#method.get_or_insert_default) - [`Waker::data`] (https://doc.rust-lang.org/stable/core/task/struct.Waker.html#method.data) - [`Waker::new`] (https://doc.rust-lang.org/stable/core/task/struct.Waker.html#method.new) - [`Waker::vtable`] (https://doc.rust-lang.org/stable/core/task/struct.Waker.html#method.vtable) - [`char::MIN`] (https://doc.rust-lang.org/stable/core/primitive.char.html#associatedconstant.MIN) - [`hash_map::Entry::insert_entry`] (https://doc.rust-lang.org/stable/std/collections/hash_map/enum.Entry.html#method.insert_entry) - [`hash_map::VacantEntry::insert_entry`] (https://doc.rust-lang.org/stable/std/collections/hash_map/struct.VacantEntry.html#method.insert_entry) These APIs are now stable in const contexts: - [`Cell::into_inner`] (https://doc.rust-lang.org/stable/core/cell/struct.Cell.html#method.into_inner) - [`Duration::as_secs_f32`] (https://doc.rust-lang.org/stable/core/time/struct.Duration.html#method.as_secs_f32) - [`Duration::as_secs_f64`] (https://doc.rust-lang.org/stable/core/time/struct.Duration.html#method.as_secs_f64) - [`Duration::div_duration_f32`] (https://doc.rust-lang.org/stable/core/time/struct.Duration.html#method.div_duration_f32) - [`Duration::div_duration_f64`] (https://doc.rust-lang.org/stable/core/time/struct.Duration.html#method.div_duration_f64) - [`MaybeUninit::as_mut_ptr`] (https://doc.rust-lang.org/stable/core/mem/union.MaybeUninit.html#method.as_mut_ptr) - [`NonNull::as_mut`] (https://doc.rust-lang.org/stable/core/ptr/struct.NonNull.html#method.as_mut) - [`NonNull::copy_from`] (https://doc.rust-lang.org/stable/core/ptr/struct.NonNull.html#method.copy_from) - [`NonNull::copy_from_nonoverlapping`] (https://doc.rust-lang.org/stable/core/ptr/struct.NonNull.html#method.copy_from_nonoverlapping) - [`NonNull::copy_to`] (https://doc.rust-lang.org/stable/core/ptr/struct.NonNull.html#method.copy_to) - [`NonNull::copy_to_nonoverlapping`] (https://doc.rust-lang.org/stable/core/ptr/struct.NonNull.html#method.copy_to_nonoverlapping) - [`NonNull::slice_from_raw_parts`] (https://doc.rust-lang.org/stable/core/ptr/struct.NonNull.html#method.slice_from_raw_parts) - [`NonNull::write`] (https://doc.rust-lang.org/stable/core/ptr/struct.NonNull.html#method.write) - [`NonNull::write_bytes`] (https://doc.rust-lang.org/stable/core/ptr/struct.NonNull.html#method.write_bytes) - [`NonNull::write_unaligned`] (https://doc.rust-lang.org/stable/core/ptr/struct.NonNull.html#method.write_unaligned) - [`OnceCell::into_inner`] (https://doc.rust-lang.org/stable/core/cell/struct.OnceCell.html#method.into_inner) - [`Option::as_mut`] (https://doc.rust-lang.org/stable/core/option/enum.Option.html#method.as_mut) - [`Option::expect`] (https://doc.rust-lang.org/stable/core/option/enum.Option.html#method.expect) - [`Option::replace`] (https://doc.rust-lang.org/stable/core/option/enum.Option.html#method.replace) - [`Option::take`] (https://doc.rust-lang.org/stable/core/option/enum.Option.html#method.take) - [`Option::unwrap`] (https://doc.rust-lang.org/stable/core/option/enum.Option.html#method.unwrap) - [`Option::unwrap_unchecked`] (https://doc.rust-lang.org/stable/core/option/enum.Option.html#method.unwrap_unchecked) - [`Option::<&_>::copied`] (https://doc.rust-lang.org/stable/core/option/enum.Option.html#method.copied) - [`Option::<&mut _>::copied`] (https://doc.rust-lang.org/stable/core/option/enum.Option.html#method.copied-1) - [`Option::<Option<_>>::flatten`] (https://doc.rust-lang.org/stable/core/option/enum.Option.html#method.flatten) - [`Option::<Result<_, _>>::transpose`] (https://doc.rust-lang.org/stable/core/option/enum.Option.html#method.transpose) - [`RefCell::into_inner`] (https://doc.rust-lang.org/stable/core/cell/struct.RefCell.html#method.into_inner) - [`Result::as_mut`] (https://doc.rust-lang.org/stable/core/result/enum.Result.html#method.as_mut) - [`Result::<&_, _>::copied`] (https://doc.rust-lang.org/stable/core/result/enum.Result.html#method.copied) - [`Result::<&mut _, _>::copied`] (https://doc.rust-lang.org/stable/core/result/enum.Result.html#method.copied-1) - [`Result::<Option<_>, _>::transpose`] (https://doc.rust-lang.org/stable/core/result/enum.Result.html#method.transpose) - [`UnsafeCell::get_mut`] (https://doc.rust-lang.org/stable/core/cell/struct.UnsafeCell.html#method.get_mut) - [`UnsafeCell::into_inner`] (https://doc.rust-lang.org/stable/core/cell/struct.UnsafeCell.html#method.into_inner) - [`array::from_mut`] (https://doc.rust-lang.org/stable/core/array/fn.from_mut.html) - [`char::encode_utf8`] (https://doc.rust-lang.org/stable/core/primitive.char.html#method.encode_utf8) - [`{float}::classify`] (https://doc.rust-lang.org/stable/core/primitive.f64.html#method.classify) - [`{float}::is_finite`] (https://doc.rust-lang.org/stable/core/primitive.f64.html#method.is_finite) - [`{float}::is_infinite`] (https://doc.rust-lang.org/stable/core/primitive.f64.html#method.is_infinite) - [`{float}::is_nan`] (https://doc.rust-lang.org/stable/core/primitive.f64.html#method.is_nan) - [`{float}::is_normal`] (https://doc.rust-lang.org/stable/core/primitive.f64.html#method.is_normal) - [`{float}::is_sign_negative`] (https://doc.rust-lang.org/stable/core/primitive.f64.html#method.is_sign_negative) - [`{float}::is_sign_positive`] (https://doc.rust-lang.org/stable/core/primitive.f64.html#method.is_sign_positive) - [`{float}::is_subnormal`] (https://doc.rust-lang.org/stable/core/primitive.f64.html#method.is_subnormal) - [`{float}::from_bits`] (https://doc.rust-lang.org/stable/core/primitive.f64.html#method.from_bits) - [`{float}::from_be_bytes`] (https://doc.rust-lang.org/stable/core/primitive.f64.html#method.from_be_bytes) - [`{float}::from_le_bytes`] (https://doc.rust-lang.org/stable/core/primitive.f64.html#method.from_le_bytes) - [`{float}::from_ne_bytes`] (https://doc.rust-lang.org/stable/core/primitive.f64.html#method.from_ne_bytes) - [`{float}::to_bits`] (https://doc.rust-lang.org/stable/core/primitive.f64.html#method.to_bits) - [`{float}::to_be_bytes`] (https://doc.rust-lang.org/stable/core/primitive.f64.html#method.to_be_bytes) - [`{float}::to_le_bytes`] (https://doc.rust-lang.org/stable/core/primitive.f64.html#method.to_le_bytes) - [`{float}::to_ne_bytes`] (https://doc.rust-lang.org/stable/core/primitive.f64.html#method.to_ne_bytes) - [`mem::replace`] (https://doc.rust-lang.org/stable/core/mem/fn.replace.html) - [`ptr::replace`] (https://doc.rust-lang.org/stable/core/ptr/fn.replace.html) - [`ptr::slice_from_raw_parts_mut`] (https://doc.rust-lang.org/stable/core/ptr/fn.slice_from_raw_parts_mut.html) - [`ptr::write`] (https://doc.rust-lang.org/stable/core/ptr/fn.write.html) - [`ptr::write_unaligned`] (https://doc.rust-lang.org/stable/core/ptr/fn.write_unaligned.html) - [`<*const _>::copy_to`] (https://doc.rust-lang.org/stable/core/primitive.pointer.html#method.copy_to) - [`<*const _>::copy_to_nonoverlapping`] (https://doc.rust-lang.org/stable/core/primitive.pointer.html#method.copy_to_nonoverlapping) - [`<*mut _>::copy_from`] (https://doc.rust-lang.org/stable/core/primitive.pointer.html#method.copy_from) - [`<*mut _>::copy_from_nonoverlapping`] (https://doc.rust-lang.org/stable/core/primitive.pointer.html#method.copy_from_nonoverlapping) - [`<*mut _>::copy_to`] (https://doc.rust-lang.org/stable/core/primitive.pointer.html#method.copy_to-1) - [`<*mut _>::copy_to_nonoverlapping`] (https://doc.rust-lang.org/stable/core/primitive.pointer.html#method.copy_to_nonoverlapping-1) - [`<*mut _>::write`] (https://doc.rust-lang.org/stable/core/primitive.pointer.html#method.write) - [`<*mut _>::write_bytes`] (https://doc.rust-lang.org/stable/core/primitive.pointer.html#method.write_bytes) - [`<*mut _>::write_unaligned`] (https://doc.rust-lang.org/stable/core/primitive.pointer.html#method.write_unaligned) - [`slice::from_mut`] (https://doc.rust-lang.org/stable/core/slice/fn.from_mut.html) - [`slice::from_raw_parts_mut`] (https://doc.rust-lang.org/stable/core/slice/fn.from_raw_parts_mut.html) - [`<[_]>::first_mut`] (https://doc.rust-lang.org/stable/core/primitive.slice.html#method.first_mut) - [`<[_]>::last_mut`] (https://doc.rust-lang.org/stable/core/primitive.slice.html#method.last_mut) - [`<[_]>::first_chunk_mut`] (https://doc.rust-lang.org/stable/core/primitive.slice.html#method.first_chunk_mut) - [`<[_]>::last_chunk_mut`] (https://doc.rust-lang.org/stable/core/primitive.slice.html#method.last_chunk_mut) - [`<[_]>::split_at_mut`] (https://doc.rust-lang.org/stable/core/primitive.slice.html#method.split_at_mut) - [`<[_]>::split_at_mut_checked`] (https://doc.rust-lang.org/stable/core/primitive.slice.html#method.split_at_mut_checked) - [`<[_]>::split_at_mut_unchecked`] (https://doc.rust-lang.org/stable/core/primitive.slice.html#method.split_at_mut_unchecked) - [`<[_]>::split_first_mut`] (https://doc.rust-lang.org/stable/core/primitive.slice.html#method.split_first_mut) - [`<[_]>::split_last_mut`] (https://doc.rust-lang.org/stable/core/primitive.slice.html#method.split_last_mut) - [`<[_]>::split_first_chunk_mut`] (https://doc.rust-lang.org/stable/core/primitive.slice.html#method.split_first_chunk_mut) - [`<[_]>::split_last_chunk_mut`] (https://doc.rust-lang.org/stable/core/primitive.slice.html#method.split_last_chunk_mut) - [`str::as_bytes_mut`] (https://doc.rust-lang.org/stable/core/primitive.str.html#method.as_bytes_mut) - [`str::as_mut_ptr`] (https://doc.rust-lang.org/stable/core/primitive.str.html#method.as_mut_ptr) - [`str::from_utf8_unchecked_mut`] (https://doc.rust-lang.org/stable/core/str/fn.from_utf8_unchecked_mut.html) Cargo ----- - [Introduced a new `CARGO_MANIFEST_PATH` environment variable, similar to `CARGO_MANIFEST_DIR` but pointing directly to the manifest file.] (rust-lang/cargo#14404) - [Added `package.autolib` to the manifest, allowing `[lib]` auto-discovery to be disabled.] (rust-lang/cargo#14591) - [Declare support level for each crate in Cargo's Charter / crate docs.] (rust-lang/cargo#14600) - [Declare new Intentional Artifacts as 'small' changes.] (rust-lang/cargo#14599) Rustdoc ------- - [The sidebar / hamburger menu table of contents now includes the `# headers` from the main item's doc comment] (rust-lang/rust#120736). This is similar to a third-party feature provided by the rustdoc-search-enhancements browser extension. Compatibility Notes ------------------- - [Warn against function pointers using unsupported ABI strings.] (rust-lang/rust#128784) - [Check well-formedness of the source type's signature in fn pointer casts.] (rust-lang/rust#129021) This partly closes a soundness hole that comes when casting a function item to function pointer - [Use equality instead of subtyping when resolving type dependent paths.] (rust-lang/rust#129073) - Linking on macOS now correctly includes Rust's default deployment target. Due to a linker bug, you might have to pass `MACOSX_DEPLOYMENT_TARGET` or fix your `#[link]` attributes to point to the correct frameworks. See <rust-lang/rust#129369>. - [Rust will now correctly raise an error for `repr(Rust)` written on non-`struct`/`enum`/`union` items, since it previous did not have any effect.] (rust-lang/rust#129422) - The future incompatibility lint `deprecated_cfg_attr_crate_type_name` [has been made into a hard error] (rust-lang/rust#129670). It was used to deny usage of `#![crate_type]` and `#![crate_name]` attributes in `#![cfg_attr]`, which required a hack in the compiler to be able to change the used crate type and crate name after cfg expansion. Users can use `--crate-type` instead of `#![cfg_attr(..., crate_type = "...")]` and `--crate-name` instead of `#![cfg_attr(..., crate_name = "...")]` when running `rustc`/`cargo rustc` on the command line. Use of those two attributes outside of `#![cfg_attr]` continue to be fully supported. - Until now, paths into the sysroot were always prefixed with `/rustc/$hash` in diagnostics, codegen, backtrace, e.g. ``` thread 'main' panicked at 'hello world', map-panic.rs:2:50 stack backtrace: 0: std::panicking::begin_panic at /rustc/a55dd71d5fb0ec5a6a3a9e8c27b2127ba491ce52/library/std/src/panicking.rs:616:12 1: map_panic::main::{{closure}} at ./map-panic.rs:2:50 2: core::option::Option<T>::map at /rustc/a55dd71d5fb0ec5a6a3a9e8c27b2127ba491ce52/library/core/src/option.rs:929:29 3: map_panic::main at ./map-panic.rs:2:30 4: core::ops::function::FnOnce::call_once at /rustc/a55dd71d5fb0ec5a6a3a9e8c27b2127ba491ce52/library/core/src/ops/function.rs:248:5 note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace. ``` [RFC 3127 said] (https://rust-lang.github.io/rfcs/3127-trim-paths.html#changing-handling-of-sysroot-path-in-rustc) > We want to change this behaviour such that, when `rust-src` source files can be discovered, the virtual path is discarded and therefore the local path will be embedded, unless there is a `--remap-path-prefix` that causes this local path to be remapped in the usual way. [#129687](rust-lang/rust#129687) implements this behaviour, when `rust-src` is present at compile time, `rustc` replaces `/rustc/$hash` with a real path into the local `rust-src` component with best effort. To sanitize this, users must explicitly supply `--remap-path-prefix=<path to rust-src>=foo` or not have the `rust-src` component installed. - The allow-by-default `missing_docs` lint used to disable itself when invoked through `rustc --test`/`cargo test`, resulting in `#[expect(missing_docs)]` emitting false positives due to the expectation being wrongly unfulfilled. This behavior [has now been removed] (rust-lang/rust#130025), which allows `#[expect(missing_docs)]` to be fulfilled in all scenarios, but will also report new `missing_docs` diagnostics for publicly reachable `#[cfg(test)]` items, [integration test] (https://doc.rust-lang.org/cargo/reference/cargo-targets.html#integration-tests) crate-level documentation, and publicly reachable items in integration tests. - [The `armv8r-none-eabihf` target now uses the Armv8-R required set of floating-point features.] (rust-lang/rust#130295) - [Fix a soundness bug where rustc wouldn't detect unconstrained higher-ranked lifetimes in a `dyn Trait`'s associated types that occur due to supertraits.] (rust-lang/rust#130367) - [Update the minimum external LLVM version to 18.] (rust-lang/rust#130487) - [Remove `aarch64-fuchsia` and `x86_64-fuchsia` target aliases in favor of `aarch64-unknown-fuchsia` and `x86_64-unknown-fuchsia` respectively.] (rust-lang/rust#130657) - [The ABI-level exception class of a Rust panic is now encoded with native-endian bytes, so it is legible in hex dumps.] (rust-lang/rust#130897) - [Visual Studio 2013 is no longer supported for MSVC targets.] (rust-lang/rust#131070) - [The sysroot no longer contains the `std` dynamic library in its top-level `lib/` dir.] (rust-lang/rust#131188)
1 parent c77a618 commit 0c9d603

File tree

58 files changed

+3086
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

58 files changed

+3086
-0
lines changed

rust183/DESCR

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
Rust is a systems programming language focused on three goals: safety,
2+
speed, and concurrency. It maintains these goals without having a
3+
garbage collector, making it a useful language for a number of use cases
4+
other languages aren't good at: embedding in other languages, programs
5+
with specific space and time requirements, and writing low-level code,
6+
like device drivers and operating systems.
7+
8+
It improves on current languages targeting this space by having a number
9+
of compile-time safety checks that produce no runtime overhead, while
10+
eliminating all data races. Rust also aims to achieve "zero-cost
11+
abstractions" even though some of these abstractions feel like those of
12+
a high-level language. Even then, Rust still allows precise control
13+
like a low-level language would.

rust183/HOWTO-BOOTSTRAP

+85
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
How to build a rust bootstrap kit using pkgsrc
2+
----------------------------------------------
3+
4+
A rust bootstrap kit is simply a pre-compiled binary of rust and
5+
the rust standard library, and contains the "rust" and "rust-std"
6+
build results, found in
7+
8+
work/rustc-<version>/build/dist/
9+
as
10+
rust-<version>-<target>.tar.xz
11+
and
12+
rust-std-<version>-<target>.tar.xz
13+
14+
These result files are produced when the "dist" build target is
15+
used, ref. BUILD_TARGET. For a normal native build of the rust
16+
pkgsrc package, the default BUILD_TARGET is "build", not "dist".
17+
18+
There are two possible ways to produce a bootstrap kit:
19+
20+
1) a native build. This requires minimum preparation, except
21+
possibly for setting rust.BUILD_TARGET to "dist" via e.g.
22+
/etc/mk.conf. Note that on NetBSD, using the "BUILD_TARGET" ==
23+
"dist" results in the "rust-cargo-static" option being set, ref.
24+
options.mk. This is so that the resulting bootstrap kits are
25+
built with mostly-static linking, reducing the run-time dependencies
26+
of the bootstrap kits.
27+
28+
2) a cross-build. This requires a bit of preparation:
29+
30+
For each target you want to cross-build rust for, you need
31+
- the cross toolchain resulting from "build.sh tools" for
32+
the intended target
33+
- an OS distribution extracted, including the comp.tgz
34+
set so that the target's include files can be used
35+
- for 32-bit ports, the "libatomic" package needs to be
36+
available. I'm sure there's a clever and long-winded
37+
use of pkg_install which can be used to effect this;
38+
I on my hand have always just extracted the tgz file
39+
and done the minimal cleanup of the "cruft" files
40+
which are part of the package meta-data.
41+
- Pick a root directory for the target, e.g. /u/i386.
42+
Below this directory place the "tools" containing
43+
the cross-compiler in a "tools" sub-directory.
44+
Similarly, the extracted OS distribution in the "dest"
45+
sub-directory.
46+
47+
There are two methods available for doing the cross-compile:
48+
49+
a) Using the "cross.mk" file. For an i386 build against i586, the
50+
following settings should be active:
51+
52+
CROSS_ROOT= /u/i386
53+
MAKE_ENV+= CROSS_ROOT=${CROSS_ROOT}
54+
GNU_CROSS_TARGET= i486--netbsdelf
55+
MAKE_ENV+= GNU_CROSS_TARGET=${GNU_CROSS_TARGET}
56+
TARGET= i586-unknown-netbsd
57+
SCRIPTS= ${WRKDIR}/scripts
58+
CONFIGURE_ARGS+= --host=${TARGET}
59+
CONFIGURE_ARGS+= --target=${TARGET}
60+
CONFIGURE_ARGS+= --set=target.${TARGET}.cc=${SCRIPTS}/gcc-wrap
61+
CONFIGURE_ARGS+= --set=target.${TARGET}.cxx=${SCRIPTS}/c++-wrap
62+
CONFIGURE_ARGS+= --set=target.${TARGET}.linker=${SCRIPTS}/gcc-wrap
63+
CONFIGURE_ARGS+= --set=target.${TARGET}.ar=${CROSS_ROOT}/tools/bin/${GNU_CROSS_TARGET}-ar
64+
65+
Then doing a "make" will cross-build rust, including the LLVM
66+
embedded in the rust distribution, ref. the defaulting of that
67+
option when TARGET is defined ref. options.mk.
68+
69+
Note that when TARGET is set, the default build target for
70+
the rust makefile becomes "dist", so there's no need to set
71+
rust.BUILD_TARGET for cross-builds.
72+
73+
b) Using the "do-cross.mk" Makefile. This will attempt to
74+
cross-build rust for all the targets listed in the SHORT_TARGETS
75+
variable in that file. Overriding the root directories for
76+
the various targets can be done by making your own "local-roots.mk"
77+
file, ref. "do-cross.mk".
78+
79+
This will create a "dist" subdirectory in the rust pkgsrc
80+
directory, and the bootstrap kits for each architecture, plus
81+
the library source kit will be placed in this directory.
82+
83+
The bootstrap kits can then be placed in /usr/pkgsrc/distfiles, and
84+
be used by the "next" rust version, where you can use "make makesum"
85+
to compute the updated checksums for the bootstrap kits.

0 commit comments

Comments
 (0)