Skip to content

Commit

Permalink
rust185: make a package for rust 1.85.0.
Browse files Browse the repository at this point in the history
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.]
  (rust-lang/rust#133349)
  See [the edition guide]
  (https://doc.rust-lang.org/nightly/edition-guide/rust-2024/index.html)
  for more details.
- [Stabilize async closures]
  (rust-lang/rust#132706)
  See [RFC 3668]
  (https://rust-lang.github.io/rfcs/3668-async-closures.html) for more details.
- [Stabilize `#[diagnostic::do_not_recommend]`]
  (rust-lang/rust#132056)
- [Add `unpredictable_function_pointer_comparisons` lint to warn
  against function pointer comparisons]
  (rust-lang/rust#118833)
- [Lint on combining `#[no_mangle]` and `#[export_name]` attributes.]
  (rust-lang/rust#131558)

Compiler
--------
- [The unstable flag `-Zpolymorphize` has been removed]
  (rust-lang/rust#133883), see
  rust-lang/compiler-team#810 for some
  background.

Platform Support
----------------
- [Promote `powerpc64le-unknown-linux-musl` to tier 2 with host tools]
  (rust-lang/rust#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]
  (rust-lang/rust#132390)
- [`std::env::home_dir()` on Windows now ignores the non-standard
  `$HOME` environment variable]
  (rust-lang/rust#132515)

  It will be un-deprecated in a subsequent release.
- [Add `AsyncFn*` to the prelude in all editions.]
  (rust-lang/rust#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)
- [`<float>::recip`]
  (https://doc.rust-lang.org/stable/std/primitive.f32.html#method.recip)
- [`<float>::to_degrees`]
  (https://doc.rust-lang.org/stable/std/primitive.f32.html#method.to_degrees)
- [`<float>::to_radians`]
  (https://doc.rust-lang.org/stable/std/primitive.f32.html#method.to_radians)
- [`<float>::max`]
  (https://doc.rust-lang.org/stable/std/primitive.f32.html#method.max)
- [`<float>::min`]
  (https://doc.rust-lang.org/stable/std/primitive.f32.html#method.min)
- [`<float>::clamp`]
  (https://doc.rust-lang.org/stable/std/primitive.f32.html#method.clamp)
- [`<float>::abs`]
  (https://doc.rust-lang.org/stable/std/primitive.f32.html#method.abs)
- [`<float>::signum`]
  (https://doc.rust-lang.org/stable/std/primitive.f32.html#method.signum)
- [`<float>::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] (rust-lang/cargo#14671)
- [Stabilize higher precedence trailing flags]
  (rust-lang/cargo#14900)
- [Pass `CARGO_CFG_FEATURE` to build scripts]
  (rust-lang/cargo#14902)

Rustdoc
-----
- [Doc comment on impl blocks shows the first line, even when the
  impl block is collapsed] (rust-lang/rust#132155)

Compatibility Notes
-------------------
- [`rustc` no longer treats the `test` cfg as a well known
  check-cfg] (rust-lang/rust#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]
  (rust-lang/cargo#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]
  (rust-lang/rust#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`]
  (rust-lang/rust#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.]
  (rust-lang/rust#133274)
- [Increase `sparcv9-sun-solaris` and `x86_64-pc-solaris` Solaris
  baseline to 11.4.]
  (rust-lang/rust#133293)
- [Show `abi_unsupported_vector_types` lint in future breakage reports]
  (rust-lang/rust#133374)
- [Error if multiple super-trait instantiations of `dyn Trait` need
  associated types to be specified but only one is provided]
  (rust-lang/rust#133392)
- [Change `powerpc64-ibm-aix` default `codemodel` to large]
  (rust-lang/rust#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`)]
  (rust-lang/rust#134690)
  • Loading branch information
he32 committed Feb 23, 2025
1 parent 3856b39 commit 9eced46
Show file tree
Hide file tree
Showing 66 changed files with 3,363 additions and 0 deletions.
13 changes: 13 additions & 0 deletions rust185/DESCR
Original file line number Diff line number Diff line change
@@ -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.
85 changes: 85 additions & 0 deletions rust185/HOWTO-BOOTSTRAP
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
How to build a rust bootstrap kit using pkgsrc
----------------------------------------------

A rust bootstrap kit is simply a pre-compiled binary of rust and
the rust standard library, and contains the "rust" and "rust-std"
build results, found in

work/rustc-<version>/build/dist/
as
rust-<version>-<target>.tar.xz
and
rust-std-<version>-<target>.tar.xz

These result files are produced when the "dist" build target is
used, ref. BUILD_TARGET. For a normal native build of the rust
pkgsrc package, the default BUILD_TARGET is "build", not "dist".

There are two possible ways to produce a bootstrap kit:

1) a native build. This requires minimum preparation, except
possibly for setting rust.BUILD_TARGET to "dist" via e.g.
/etc/mk.conf. Note that on NetBSD, using the "BUILD_TARGET" ==
"dist" results in the "rust-cargo-static" option being set, ref.
options.mk. This is so that the resulting bootstrap kits are
built with mostly-static linking, reducing the run-time dependencies
of the bootstrap kits.

2) a cross-build. This requires a bit of preparation:

For each target you want to cross-build rust for, you need
- the cross toolchain resulting from "build.sh tools" for
the intended target
- an OS distribution extracted, including the comp.tgz
set so that the target's include files can be used
- for 32-bit ports, the "libatomic" package needs to be
available. I'm sure there's a clever and long-winded
use of pkg_install which can be used to effect this;
I on my hand have always just extracted the tgz file
and done the minimal cleanup of the "cruft" files
which are part of the package meta-data.
- Pick a root directory for the target, e.g. /u/i386.
Below this directory place the "tools" containing
the cross-compiler in a "tools" sub-directory.
Similarly, the extracted OS distribution in the "dest"
sub-directory.

There are two methods available for doing the cross-compile:

a) Using the "cross.mk" file. For an i386 build against i586, the
following settings should be active:

CROSS_ROOT= /u/i386
MAKE_ENV+= CROSS_ROOT=${CROSS_ROOT}
GNU_CROSS_TARGET= i486--netbsdelf
MAKE_ENV+= GNU_CROSS_TARGET=${GNU_CROSS_TARGET}
TARGET= i586-unknown-netbsd
SCRIPTS= ${WRKDIR}/scripts
CONFIGURE_ARGS+= --host=${TARGET}
CONFIGURE_ARGS+= --target=${TARGET}
CONFIGURE_ARGS+= --set=target.${TARGET}.cc=${SCRIPTS}/gcc-wrap
CONFIGURE_ARGS+= --set=target.${TARGET}.cxx=${SCRIPTS}/c++-wrap
CONFIGURE_ARGS+= --set=target.${TARGET}.linker=${SCRIPTS}/gcc-wrap
CONFIGURE_ARGS+= --set=target.${TARGET}.ar=${CROSS_ROOT}/tools/bin/${GNU_CROSS_TARGET}-ar

Then doing a "make" will cross-build rust, including the LLVM
embedded in the rust distribution, ref. the defaulting of that
option when TARGET is defined ref. options.mk.

Note that when TARGET is set, the default build target for
the rust makefile becomes "dist", so there's no need to set
rust.BUILD_TARGET for cross-builds.

b) Using the "do-cross.mk" Makefile. This will attempt to
cross-build rust for all the targets listed in the SHORT_TARGETS
variable in that file. Overriding the root directories for
the various targets can be done by making your own "local-roots.mk"
file, ref. "do-cross.mk".

This will create a "dist" subdirectory in the rust pkgsrc
directory, and the bootstrap kits for each architecture, plus
the library source kit will be placed in this directory.

The bootstrap kits can then be placed in /usr/pkgsrc/distfiles, and
be used by the "next" rust version, where you can use "make makesum"
to compute the updated checksums for the bootstrap kits.
Loading

0 comments on commit 9eced46

Please sign in to comment.