From 3c34da705bf9c41da7af552e50da1439f808258d Mon Sep 17 00:00:00 2001 From: Josh Stone Date: Thu, 19 May 2022 16:19:51 -0700 Subject: [PATCH] Update to 1.61.0. Add rust-toolset for ELN. --- .gitignore | 2 + ...-Use-lld-provided-by-system-for-wasm.patch | 10 +-- macros.rust-toolset | 51 +++++++++++++ rust-pr94505-mono-item-sort-local.patch | 34 --------- rust.spec | 76 +++++++++++++------ ....patch => rustc-1.61.0-disable-http2.patch | 50 ++++++++---- rustc-1.61.0-rust-gdb-substitute-path.patch | 18 +++++ sources | 4 +- wasi-libc-clang-14-compat.patch | 15 ---- 9 files changed, 169 insertions(+), 91 deletions(-) create mode 100644 macros.rust-toolset delete mode 100644 rust-pr94505-mono-item-sort-local.patch rename rustc-1.60.0-disable-http2.patch => rustc-1.61.0-disable-http2.patch (51%) create mode 100644 rustc-1.61.0-rust-gdb-substitute-path.patch delete mode 100644 wasi-libc-clang-14-compat.patch diff --git a/.gitignore b/.gitignore index 1b3ca29..18ac470 100644 --- a/.gitignore +++ b/.gitignore @@ -399,3 +399,5 @@ /rust-1.58.0-s390x-unknown-linux-gnu.tar.xz /rust-1.58.0-x86_64-unknown-linux-gnu.tar.xz /rustc-1.60.0-src.tar.xz +/rustc-1.61.0-src.tar.xz +/wasi-libc-9886d3d6200fcc3726329966860fc058707406cd.tar.gz diff --git a/0001-Use-lld-provided-by-system-for-wasm.patch b/0001-Use-lld-provided-by-system-for-wasm.patch index 681b21a..fa75ad3 100644 --- a/0001-Use-lld-provided-by-system-for-wasm.patch +++ b/0001-Use-lld-provided-by-system-for-wasm.patch @@ -1,4 +1,4 @@ -From 9ac837c237568a6c1c5f0e979fcce208cd9c926a Mon Sep 17 00:00:00 2001 +From b521511174b1a08dddfac243604d649b71cc7386 Mon Sep 17 00:00:00 2001 From: Ivan Mironov Date: Sun, 8 Dec 2019 17:23:08 +0500 Subject: [PATCH] Use lld provided by system for wasm @@ -8,7 +8,7 @@ Subject: [PATCH] Use lld provided by system for wasm 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/compiler/rustc_target/src/spec/wasm_base.rs b/compiler/rustc_target/src/spec/wasm_base.rs -index 4c954a1e567c..15c4f1bda5eb 100644 +index de7b7374af31..eebbe616e9b6 100644 --- a/compiler/rustc_target/src/spec/wasm_base.rs +++ b/compiler/rustc_target/src/spec/wasm_base.rs @@ -99,8 +99,7 @@ pub fn options() -> TargetOptions { @@ -16,11 +16,11 @@ index 4c954a1e567c..15c4f1bda5eb 100644 limit_rdylib_exports: false, - // we use the LLD shipped with the Rust toolchain by default -- linker: Some("rust-lld".to_owned()), -+ linker: Some("lld".to_owned()), +- linker: Some("rust-lld".into()), ++ linker: Some("lld".into()), lld_flavor: LldFlavor::Wasm, linker_is_gnu: false, -- -2.31.1 +2.35.1 diff --git a/macros.rust-toolset b/macros.rust-toolset new file mode 100644 index 0000000..41bb129 --- /dev/null +++ b/macros.rust-toolset @@ -0,0 +1,51 @@ +# Explicitly use bindir tools, in case others are in the PATH, +# like the rustup shims in a user's ~/.cargo/bin/. +# +# Since cargo 1.31, install only uses $CARGO_HOME/config, ignoring $PWD. +# https://github.com/rust-lang/cargo/issues/6397 +# But we can set CARGO_HOME locally, which is a good idea anyway to make sure +# it never writes to ~/.cargo during rpmbuild. +%__cargo %{_bindir}/env CARGO_HOME=.cargo %{_bindir}/cargo +%__rustc %{_bindir}/rustc +%__rustdoc %{_bindir}/rustdoc + +# Enable optimization, debuginfo, and link hardening. +%__global_rustflags -Copt-level=3 -Cdebuginfo=2 -Clink-arg=-Wl,-z,relro,-z,now + +%__global_rustflags_toml [%{lua: + for arg in string.gmatch(rpm.expand("%{__global_rustflags}"), "%S+") do + print('"' .. arg .. '", ') + end}] + +%cargo_prep(V:) (\ +%{__mkdir} -p .cargo \ +cat > .cargo/config << EOF \ +[build]\ +rustc = "%{__rustc}"\ +rustdoc = "%{__rustdoc}"\ +rustflags = %{__global_rustflags_toml}\ +\ +[install]\ +root = "%{buildroot}%{_prefix}"\ +\ +[term]\ +verbose = true\ +EOF\ +%if 0%{-V:1}\ +%{__tar} -xoaf %{S:%{-V*}}\ +cat >> .cargo/config << EOF \ +\ +[source.crates-io]\ +replace-with = "vendored-sources"\ +\ +[source.vendored-sources]\ +directory = "./vendor"\ +EOF\ +%endif\ +) + +%cargo_build %__cargo build --release %{?_smp_mflags} + +%cargo_test %__cargo test --release %{?_smp_mflags} --no-fail-fast + +%cargo_install %__cargo install --no-track --path . diff --git a/rust-pr94505-mono-item-sort-local.patch b/rust-pr94505-mono-item-sort-local.patch deleted file mode 100644 index 7710704..0000000 --- a/rust-pr94505-mono-item-sort-local.patch +++ /dev/null @@ -1,34 +0,0 @@ -diff --git a/compiler/rustc_middle/src/mir/mono.rs b/compiler/rustc_middle/src/mir/mono.rs -index 892808386dee..13c325a14e40 100644 ---- a/compiler/rustc_middle/src/mir/mono.rs -+++ b/compiler/rustc_middle/src/mir/mono.rs -@@ -7,6 +7,7 @@ - use rustc_data_structures::stable_hasher::{HashStable, StableHasher}; - use rustc_hir::def_id::{CrateNum, DefId, LOCAL_CRATE}; - use rustc_hir::ItemId; -+use rustc_index::vec::Idx; - use rustc_query_system::ich::{NodeIdHashingMode, StableHashingContext}; - use rustc_session::config::OptLevel; - use rustc_span::source_map::Span; -@@ -380,7 +381,7 @@ fn item_sort_key<'tcx>(tcx: TyCtxt<'tcx>, item: MonoItem<'tcx>) -> ItemSortKey<' - // instances into account. The others don't matter for - // the codegen tests and can even make item order - // unstable. -- InstanceDef::Item(def) => Some(def.did.index.as_usize()), -+ InstanceDef::Item(def) => def.did.as_local().map(Idx::index), - InstanceDef::VtableShim(..) - | InstanceDef::ReifyShim(..) - | InstanceDef::Intrinsic(..) -@@ -391,10 +392,8 @@ fn item_sort_key<'tcx>(tcx: TyCtxt<'tcx>, item: MonoItem<'tcx>) -> ItemSortKey<' - | InstanceDef::CloneShim(..) => None, - } - } -- MonoItem::Static(def_id) => Some(def_id.index.as_usize()), -- MonoItem::GlobalAsm(item_id) => { -- Some(item_id.def_id.to_def_id().index.as_usize()) -- } -+ MonoItem::Static(def_id) => def_id.as_local().map(Idx::index), -+ MonoItem::GlobalAsm(item_id) => Some(item_id.def_id.index()), - }, - item.symbol_name(tcx), - ) diff --git a/rust.spec b/rust.spec index fc844a8..fc424b9 100644 --- a/rust.spec +++ b/rust.spec @@ -8,9 +8,9 @@ # To bootstrap from scratch, set the channel and date from src/stage0.json # e.g. 1.59.0 wants rustc: 1.58.0-2022-01-13 # or nightly wants some beta-YYYY-MM-DD -%global bootstrap_version 1.59.0 -%global bootstrap_channel 1.59.0 -%global bootstrap_date 2022-02-24 +%global bootstrap_version 1.60.0 +%global bootstrap_channel 1.60.0 +%global bootstrap_date 2022-04-07 # Only the specified arches will use bootstrap binaries. # NOTE: Those binaries used to be uploaded with every new release, but that was @@ -33,8 +33,9 @@ # We need CRT files for *-wasi targets, at least as new as the commit in # src/ci/docker/host-x86_64/dist-various-2/build-wasi-toolchain.sh +# (updated per https://github.com/rust-lang/rust/pull/96907) %global wasi_libc_url https://github.com/WebAssembly/wasi-libc -%global wasi_libc_commit ad5133410f66b93a2381db5b542aad5e0964db96 +%global wasi_libc_commit 9886d3d6200fcc3726329966860fc058707406cd %global wasi_libc_name wasi-libc-%{wasi_libc_commit} %global wasi_libc_source %{wasi_libc_url}/archive/%{wasi_libc_commit}/%{wasi_libc_name}.tar.gz %global wasi_libc_dir %{_builddir}/%{wasi_libc_name} @@ -48,12 +49,12 @@ %global bundled_llvm_version 14.0.0 %bcond_with bundled_llvm -# Requires stable libgit2 1.3, and not the next minor soname change. +# Requires stable libgit2 1.4, and not the next minor soname change. # This needs to be consistent with the bindings in vendor/libgit2-sys. -%global min_libgit2_version 1.3.0 -%global next_libgit2_version 1.4.0~ -%global bundled_libgit2_version 1.3.0 -%if 0%{?fedora} >= 36 +%global min_libgit2_version 1.4.0 +%global next_libgit2_version 1.5.0~ +%global bundled_libgit2_version 1.4.2 +%if 0%{?fedora} >= 99 %bcond_with bundled_libgit2 %else %bcond_without bundled_libgit2 @@ -82,7 +83,7 @@ %endif Name: rust -Version: 1.60.0 +Version: 1.61.0 Release: 1%{?dist} Summary: The Rust Programming Language License: (ASL 2.0 or MIT) and (BSD and MIT) @@ -102,22 +103,20 @@ Source1: %{wasi_libc_source} # By default, rust tries to use "rust-lld" as a linker for WebAssembly. Patch1: 0001-Use-lld-provided-by-system-for-wasm.patch -# This regressed in 1.59, hanging builds on s390x, rhbz#2058803 -# https://github.com/rust-lang/rust/pull/94505 -Patch2: rust-pr94505-mono-item-sort-local.patch - -# Clang 14 adds new builtin macros that wasi-libc doesn't expect yet -# See https://github.com/WebAssembly/wasi-libc/pull/265 -Patch3: wasi-libc-clang-14-compat.patch +# Set a substitute-path in rust-gdb for standard library sources. +Patch2: rustc-1.61.0-rust-gdb-substitute-path.patch ### RHEL-specific patches below ### +# Simple rpm macros for rust-toolset (as opposed to full rust-packaging) +Source100: macros.rust-toolset + # Disable cargo->libgit2->libssh2 on RHEL, as it's not approved for FIPS (rhbz1732949) Patch100: rustc-1.59.0-disable-libssh2.patch # libcurl on RHEL7 doesn't have http2, but since cargo requests it, curl-sys # will try to build it statically -- instead we turn off the feature. -Patch101: rustc-1.60.0-disable-http2.patch +Patch101: rustc-1.61.0-disable-http2.patch # kernel rh1410097 causes too-small stacks for PIE. # (affects RHEL6 kernels when building for RHEL7) @@ -154,7 +153,7 @@ end} local channel = rpm.expand("%{bootstrap_channel}") local target_arch = rpm.expand("%{_target_cpu}") for i, arch in ipairs(bootstrap_arches) do - i = 100 + i * 3 + i = 1000 + i * 3 local suffix = channel.."-"..rust_triple(arch) print(string.format("Source%d: %s/cargo-%s.tar.xz\n", i, base, suffix)) print(string.format("Source%d: %s/rustc-%s.tar.xz\n", i+1, base, suffix)) @@ -536,6 +535,20 @@ feature for the Rust standard library. The RLS (Rust Language Server) uses this data to provide information about the Rust standard library. +%if 0%{?rhel} && 0%{?rhel} >= 8 + +%package toolset +Summary: Rust Toolset +Requires: rust%{?_isa} = %{version}-%{release} +Requires: cargo%{?_isa} = %{version}-%{release} + +%description toolset +This is the metapackage for Rust Toolset, bringing in the Rust compiler, +the Cargo package manager, and a few convenience macros for rpm builds. + +%endif + + %prep %ifarch %{bootstrap_arches} @@ -552,7 +565,6 @@ test -f '%{local_rust_root}/bin/rustc' %if %defined wasm_targets %setup -q -n %{wasi_libc_name} -T -b 1 -%patch3 -p1 %endif %setup -q -n %{rustc_package} @@ -576,6 +588,9 @@ rm -rf vendor/libnghttp2-sys/ # Use our explicit python3 first sed -i.try-python -e '/^try python3 /i try "%{__python3}" "$@"' ./configure +# Set a substitute-path in rust-gdb for standard library sources. +sed -i.rust-src -e "s#@BUILDDIR@#$PWD#" ./src/etc/rust-gdb + %if %without bundled_llvm rm -rf src/llvm-project/ mkdir -p src/llvm-project/libunwind/ @@ -583,7 +598,8 @@ mkdir -p src/llvm-project/libunwind/ # Remove other unused vendored libraries rm -rf vendor/curl-sys/curl/ -rm -rf vendor/jemalloc-sys/jemalloc/ +rm -rf vendor/*jemalloc-sys*/jemalloc/ +rm -rf vendor/libmimalloc-sys/c_src/mimalloc/ rm -rf vendor/libssh2-sys/libssh2/ rm -rf vendor/libz-sys/src/zlib/ rm -rf vendor/libz-sys/src/zlib-ng/ @@ -683,7 +699,7 @@ end} %endif %if %defined wasm_targets -%make_build --quiet -C %{wasi_libc_dir} +%make_build --quiet -C %{wasi_libc_dir} CC=clang AR=llvm-ar NM=llvm-nm %{lua: do local wasi_root = rpm.expand("%{wasi_libc_dir}") .. "/sysroot" local cfg = "" @@ -712,6 +728,7 @@ end} %{!?with_bundled_llvm: --llvm-root=%{llvm_root} \ %{!?llvm_has_filecheck: --disable-codegen-tests} \ %{!?with_llvm_static: --enable-llvm-link-shared } } \ + --disable-llvm-static-stdcpp \ --disable-rpath \ %{enable_debuginfo} \ --set rust.codegen-units-std=1 \ @@ -808,6 +825,11 @@ rm -f %{buildroot}%{rustlibdir}/etc/lldb_* # We don't want Rust copies of LLVM tools (rust-lld, rust-llvm-dwp) rm -f %{buildroot}%{rustlibdir}/%{rust_triple}/bin/rust-ll* +%if 0%{?rhel} && 0%{?rhel} >= 8 +# This allows users to build packages using Rust Toolset. +%{__install} -D -m 644 %{S:100} %{buildroot}%{rpmmacrodir}/macros.rust-toolset +%endif + %check %{export_rust_env} @@ -1001,7 +1023,17 @@ end} %{rustlibdir}/%{rust_triple}/analysis/ +%if 0%{?rhel} && 0%{?rhel} >= 8 +%files toolset +%{rpmmacrodir}/macros.rust-toolset +%endif + + %changelog +* Thu May 19 2022 Josh Stone - 1.61.0-1 +- Update to 1.61.0. +- Add rust-toolset for ELN. + * Thu Apr 07 2022 Josh Stone - 1.60.0-1 - Update to 1.60.0. diff --git a/rustc-1.60.0-disable-http2.patch b/rustc-1.61.0-disable-http2.patch similarity index 51% rename from rustc-1.60.0-disable-http2.patch rename to rustc-1.61.0-disable-http2.patch index a3a9e2c..97a8227 100644 --- a/rustc-1.60.0-disable-http2.patch +++ b/rustc-1.61.0-disable-http2.patch @@ -1,6 +1,6 @@ ---- rustc-beta-src/Cargo.lock.orig 2022-03-18 10:27:54.154949492 -0700 -+++ rustc-beta-src/Cargo.lock 2022-03-18 10:27:54.156949449 -0700 -@@ -958,7 +958,6 @@ +--- rustc-beta-src/Cargo.lock.orig 2022-04-28 15:34:11.668960640 -0700 ++++ rustc-beta-src/Cargo.lock 2022-04-28 15:35:24.542419588 -0700 +@@ -951,7 +951,6 @@ dependencies = [ "cc", "libc", @@ -8,7 +8,7 @@ "libz-sys", "openssl-sys", "pkg-config", -@@ -2009,16 +2008,6 @@ +@@ -2002,16 +2001,6 @@ checksum = "7fc7aa29613bd6a620df431842069224d8bc9011086b1db4c0e0cd47fa03ec9a" [[package]] @@ -25,8 +25,8 @@ name = "libz-sys" version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" ---- rustc-beta-src/src/tools/cargo/Cargo.toml.orig 2022-03-18 10:27:54.156949449 -0700 -+++ rustc-beta-src/src/tools/cargo/Cargo.toml 2022-03-18 10:29:15.967184238 -0700 +--- rustc-beta-src/src/tools/cargo/Cargo.toml.orig 2022-04-24 17:43:07.000000000 -0700 ++++ rustc-beta-src/src/tools/cargo/Cargo.toml 2022-04-28 15:34:11.670960598 -0700 @@ -22,7 +22,7 @@ cargo-util = { path = "crates/cargo-util", version = "0.1.2" } crates-io = { path = "crates/crates-io", version = "0.34.0" } @@ -36,12 +36,35 @@ curl-sys = "0.4.50" env_logger = "0.9.0" pretty_env_logger = { version = "0.4", optional = true } ---- rustc-beta-src/src/tools/cargo/src/cargo/core/package.rs.orig 2022-03-14 11:49:37.000000000 -0700 -+++ rustc-beta-src/src/tools/cargo/src/cargo/core/package.rs 2022-03-18 10:27:54.156949449 -0700 -@@ -412,14 +412,8 @@ - // Also note that pipelining is disabled as curl authors have indicated - // that it's buggy, and we've empirically seen that it's buggy with HTTP - // proxies. +--- rustc-beta-src/src/tools/cargo/src/cargo/sources/registry/http_remote.rs.orig 2022-04-24 17:43:07.000000000 -0700 ++++ rustc-beta-src/src/tools/cargo/src/cargo/sources/registry/http_remote.rs 2022-04-28 15:34:11.670960598 -0700 +@@ -183,16 +183,8 @@ + } + self.fetch_started = true; + +- // We've enabled the `http2` feature of `curl` in Cargo, so treat +- // failures here as fatal as it would indicate a build-time problem. +- self.multiplexing = self.config.http_config()?.multiplexing.unwrap_or(true); +- +- self.multi +- .pipelining(false, self.multiplexing) +- .with_context(|| "failed to enable multiplexing/pipelining in curl")?; +- +- // let's not flood the server with connections +- self.multi.set_max_host_connections(2)?; ++ // Multiplexing is disabled because the system libcurl doesn't support it. ++ self.multiplexing = false; + + self.config + .shell() +--- rustc-beta-src/src/tools/cargo/src/cargo/core/package.rs.orig 2022-04-24 17:43:07.000000000 -0700 ++++ rustc-beta-src/src/tools/cargo/src/cargo/core/package.rs 2022-04-28 15:34:11.670960598 -0700 +@@ -403,16 +403,9 @@ + sources: SourceMap<'cfg>, + config: &'cfg Config, + ) -> CargoResult> { +- // We've enabled the `http2` feature of `curl` in Cargo, so treat +- // failures here as fatal as it would indicate a build-time problem. - let mut multi = Multi::new(); - let multiplexing = config.http_config()?.multiplexing.unwrap_or(true); - multi @@ -50,12 +73,13 @@ - - // let's not flood crates.io with connections - multi.set_max_host_connections(2)?; ++ // Multiplexing is disabled because the system libcurl doesn't support it. + let multi = Multi::new(); + let multiplexing = false; Ok(PackageSet { packages: package_ids -@@ -648,7 +642,7 @@ +@@ -658,7 +651,7 @@ macro_rules! try_old_curl { ($e:expr, $msg:expr) => { let result = $e; diff --git a/rustc-1.61.0-rust-gdb-substitute-path.patch b/rustc-1.61.0-rust-gdb-substitute-path.patch new file mode 100644 index 0000000..b94e23e --- /dev/null +++ b/rustc-1.61.0-rust-gdb-substitute-path.patch @@ -0,0 +1,18 @@ +--- rustc-1.61.0-src/src/etc/rust-gdb.orig 2022-05-17 18:29:36.000000000 -0700 ++++ rustc-1.61.0-src/src/etc/rust-gdb 2022-05-18 11:18:13.732709661 -0700 +@@ -14,6 +14,9 @@ fi + RUSTC_SYSROOT="$("$RUSTC" --print=sysroot)" + GDB_PYTHON_MODULE_DIRECTORY="$RUSTC_SYSROOT/lib/rustlib/etc" + ++RUST_STD_BUILD="@BUILDDIR@/library/" ++RUST_STD_SRC="$RUSTC_SYSROOT/lib/rustlib/src/rust/library/" ++ + # Run GDB with the additional arguments that load the pretty printers + # Set the environment variable `RUST_GDB` to overwrite the call to a + # different/specific command (defaults to `gdb`). +@@ -21,4 +24,5 @@ RUST_GDB="${RUST_GDB:-gdb}" + PYTHONPATH="$PYTHONPATH:$GDB_PYTHON_MODULE_DIRECTORY" exec ${RUST_GDB} \ + --directory="$GDB_PYTHON_MODULE_DIRECTORY" \ + -iex "add-auto-load-safe-path $GDB_PYTHON_MODULE_DIRECTORY" \ ++ -iex "set substitute-path $RUST_STD_BUILD $RUST_STD_SRC" \ + "$@" diff --git a/sources b/sources index c832043..eb259eb 100644 --- a/sources +++ b/sources @@ -1,2 +1,2 @@ -SHA512 (rustc-1.60.0-src.tar.xz) = d0c113e8c2c67bf10773c9403dc4c4700c4deb2fb287bfec51e565d3473d2b481d8ae2c90b272cd67b3a87d7443ea25a34c7b40ba8cd7106bf5d71126ab141c3 -SHA512 (wasi-libc-ad5133410f66b93a2381db5b542aad5e0964db96.tar.gz) = 04cb3a25fef7949bf77f262bd939102f5b36e2ae85f28cdbfcd8a8984425fba54fae68049b777974bdbad96882fab383b44203e8f19a776d8a56a55475c4aab6 +SHA512 (rustc-1.61.0-src.tar.xz) = 9bbdcc1c37f7b889be0c8d195963b4c3b65267a63ea309315eda12bd3b2cd36e0060301805dfc7da440c0a8702d085ccb0bf763155b27035a078769333637fb3 +SHA512 (wasi-libc-9886d3d6200fcc3726329966860fc058707406cd.tar.gz) = 5b6af0f7133d31c2c068606737eff957126a3045e09c1e95bd2650e0c5637d4797d7036b9beb167829d38d58f6d4199852832f61b0c8836f05e945cd0cf68132 diff --git a/wasi-libc-clang-14-compat.patch b/wasi-libc-clang-14-compat.patch deleted file mode 100644 index 32d52f0..0000000 --- a/wasi-libc-clang-14-compat.patch +++ /dev/null @@ -1,15 +0,0 @@ -diff --git a/Makefile b/Makefile -index a93b10a6757a..518bab0aaf78 100644 ---- a/Makefile -+++ b/Makefile -@@ -538,6 +538,10 @@ check-symbols: startup_files libc - -U__GNUC_PATCHLEVEL__ \ - -U__VERSION__ \ - -U__FLOAT128__ \ -+ -U__NO_MATH_ERRNO__ \ -+ -U__BITINT_MAXWIDTH__ \ -+ | grep -vE '^#define __(BOOL|INT|LLONG|LONG|SHRT)_WIDTH__' \ -+ | grep -vE '^#define __INT_(FAST|LEAST)(8|16|32|64)_WIDTH__' \ - | sed -e 's/__[[:upper:][:digit:]]*_ATOMIC_\([[:upper:][:digit:]_]*\)_LOCK_FREE/__compiler_ATOMIC_\1_LOCK_FREE/' \ - | grep -v '^#define __FLT16_' \ - > "$(SYSROOT_SHARE)/predefined-macros.txt"