import rust-1.65.0-1.module+el8.8.0+17801+6acbb1c8

This commit is contained in:
CentOS Sources 2023-01-27 19:32:15 +00:00 committed by Stepan Oksanichenko
parent 989522387e
commit e746b400a0
11 changed files with 415 additions and 197 deletions

4
.gitignore vendored
View File

@ -1,2 +1,2 @@
SOURCES/rustc-1.61.0-src.tar.xz SOURCES/rustc-1.65.0-src.tar.xz
SOURCES/wasi-libc-9886d3d6200fcc3726329966860fc058707406cd.tar.gz SOURCES/wasi-libc-wasi-sdk-16.tar.gz

View File

@ -1,2 +1,2 @@
c4672825b751f22647b610583ea75b8cd4d55ec3 SOURCES/rustc-1.61.0-src.tar.xz 920c591d3eff79705ada847aac7f77fa616dc40f SOURCES/rustc-1.65.0-src.tar.xz
22625595caa645e86282b79b5564abb40250d244 SOURCES/wasi-libc-9886d3d6200fcc3726329966860fc058707406cd.tar.gz ed5b6eda840f9c96fcd9307c7f5ce81fbf372def SOURCES/wasi-libc-wasi-sdk-16.tar.gz

View File

@ -1,36 +0,0 @@
From beb4e16f055aa7925194fd2c360105a6d55f10f6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Lo=C3=AFc=20BRANSTETT?= <lolo.branstett@numericable.fr>
Date: Wed, 27 Apr 2022 19:11:56 +0200
Subject: [PATCH] Add missing `target_feature` to the list of well known cfg
names
---
compiler/rustc_session/src/config.rs | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/compiler/rustc_session/src/config.rs b/compiler/rustc_session/src/config.rs
index 12c5c4445d46..330201dd8fef 100644
--- a/compiler/rustc_session/src/config.rs
+++ b/compiler/rustc_session/src/config.rs
@@ -1038,6 +1038,7 @@ fn fill_well_known_names(&mut self) {
sym::target_has_atomic_load_store,
sym::target_has_atomic,
sym::target_has_atomic_equal_alignment,
+ sym::target_feature,
sym::panic,
sym::sanitize,
sym::debug_assertions,
@@ -1081,6 +1082,10 @@ fn fill_well_known_values(&mut self) {
.into_iter()
.map(|sanitizer| Symbol::intern(sanitizer.as_str().unwrap()));
+ // Unknown possible values:
+ // - `feature`
+ // - `target_feature`
+
// No-values
for name in [
sym::doc,
--
2.36.1

View File

@ -0,0 +1,182 @@
From 92b0b20e4119241aaeabb4b91189a9fca8ff8b5d Mon Sep 17 00:00:00 2001
From: Josh Stone <jistone@redhat.com>
Date: Fri, 14 Oct 2022 16:11:28 -0700
Subject: [PATCH] compiletest: set the dylib path when gathering target cfg
If the compiler is built with `rpath = false`, then it won't find its
own libraries unless the library search path is set. We already do that
while running the actual compiletests, but #100260 added another rustc
command for getting the target cfg.
Check compiletest suite=codegen mode=codegen (x86_64-unknown-linux-gnu -> x86_64-unknown-linux-gnu)
thread 'main' panicked at 'error: failed to get cfg info from "[...]/build/x86_64-unknown-linux-gnu/stage1/bin/rustc"
--- stdout
--- stderr
[...]/build/x86_64-unknown-linux-gnu/stage1/bin/rustc: error while loading shared libraries: librustc_driver-a2a76dc626cd02d2.so: cannot open shared object file: No such file or directory
', src/tools/compiletest/src/common.rs:476:13
Now the library path is set here as well, so it works without rpath.
(cherry picked from commit 97c3608326d123f5462e3504409a3a069611c0fb)
---
src/tools/compiletest/src/common.rs | 17 ++++++++++-------
src/tools/compiletest/src/runtest.rs | 27 +++------------------------
src/tools/compiletest/src/util.rs | 23 +++++++++++++++++++++++
3 files changed, 36 insertions(+), 31 deletions(-)
diff --git a/src/tools/compiletest/src/common.rs b/src/tools/compiletest/src/common.rs
index 64df76e27720..53b64e7d1fc3 100644
--- a/src/tools/compiletest/src/common.rs
+++ b/src/tools/compiletest/src/common.rs
@@ -2,11 +2,12 @@
use std::ffi::OsString;
use std::fmt;
+use std::iter;
use std::path::{Path, PathBuf};
use std::process::Command;
use std::str::FromStr;
-use crate::util::PathBufExt;
+use crate::util::{add_dylib_path, PathBufExt};
use lazycell::LazyCell;
use test::ColorConfig;
@@ -389,7 +390,7 @@ pub fn run_enabled(&self) -> bool {
}
fn target_cfg(&self) -> &TargetCfg {
- self.target_cfg.borrow_with(|| TargetCfg::new(&self.rustc_path, &self.target))
+ self.target_cfg.borrow_with(|| TargetCfg::new(self))
}
pub fn matches_arch(&self, arch: &str) -> bool {
@@ -455,20 +456,22 @@ pub enum Endian {
}
impl TargetCfg {
- fn new(rustc_path: &Path, target: &str) -> TargetCfg {
- let output = match Command::new(rustc_path)
+ fn new(config: &Config) -> TargetCfg {
+ let mut command = Command::new(&config.rustc_path);
+ add_dylib_path(&mut command, iter::once(&config.compile_lib_path));
+ let output = match command
.arg("--print=cfg")
.arg("--target")
- .arg(target)
+ .arg(&config.target)
.output()
{
Ok(output) => output,
- Err(e) => panic!("error: failed to get cfg info from {:?}: {e}", rustc_path),
+ Err(e) => panic!("error: failed to get cfg info from {:?}: {e}", config.rustc_path),
};
if !output.status.success() {
panic!(
"error: failed to get cfg info from {:?}\n--- stdout\n{}\n--- stderr\n{}",
- rustc_path,
+ config.rustc_path,
String::from_utf8(output.stdout).unwrap(),
String::from_utf8(output.stderr).unwrap(),
);
diff --git a/src/tools/compiletest/src/runtest.rs b/src/tools/compiletest/src/runtest.rs
index 8f289876f730..eb467170249d 100644
--- a/src/tools/compiletest/src/runtest.rs
+++ b/src/tools/compiletest/src/runtest.rs
@@ -13,7 +13,7 @@
use crate::header::TestProps;
use crate::json;
use crate::read2::read2_abbreviated;
-use crate::util::{logv, PathBufExt};
+use crate::util::{add_dylib_path, dylib_env_var, logv, PathBufExt};
use crate::ColorConfig;
use regex::{Captures, Regex};
use rustfix::{apply_suggestions, get_suggestions_from_json, Filter};
@@ -26,6 +26,7 @@
use std::hash::{Hash, Hasher};
use std::io::prelude::*;
use std::io::{self, BufReader};
+use std::iter;
use std::path::{Path, PathBuf};
use std::process::{Child, Command, ExitStatus, Output, Stdio};
use std::str;
@@ -72,19 +73,6 @@ fn disable_error_reporting<F: FnOnce() -> R, R>(f: F) -> R {
f()
}
-/// The name of the environment variable that holds dynamic library locations.
-pub fn dylib_env_var() -> &'static str {
- if cfg!(windows) {
- "PATH"
- } else if cfg!(target_os = "macos") {
- "DYLD_LIBRARY_PATH"
- } else if cfg!(target_os = "haiku") {
- "LIBRARY_PATH"
- } else {
- "LD_LIBRARY_PATH"
- }
-}
-
/// The platform-specific library name
pub fn get_lib_name(lib: &str, dylib: bool) -> String {
// In some casess (e.g. MUSL), we build a static
@@ -1826,16 +1814,7 @@ fn compose_and_run(
// Need to be sure to put both the lib_path and the aux path in the dylib
// search path for the child.
- let mut path =
- env::split_paths(&env::var_os(dylib_env_var()).unwrap_or_default()).collect::<Vec<_>>();
- if let Some(p) = aux_path {
- path.insert(0, PathBuf::from(p))
- }
- path.insert(0, PathBuf::from(lib_path));
-
- // Add the new dylib search path var
- let newpath = env::join_paths(&path).unwrap();
- command.env(dylib_env_var(), newpath);
+ add_dylib_path(&mut command, iter::once(lib_path).chain(aux_path));
let mut child = disable_error_reporting(|| command.spawn())
.unwrap_or_else(|_| panic!("failed to exec `{:?}`", &command));
diff --git a/src/tools/compiletest/src/util.rs b/src/tools/compiletest/src/util.rs
index 9d047b63c859..4b73be0fbb90 100644
--- a/src/tools/compiletest/src/util.rs
+++ b/src/tools/compiletest/src/util.rs
@@ -2,6 +2,7 @@
use std::env;
use std::ffi::OsStr;
use std::path::PathBuf;
+use std::process::Command;
use tracing::*;
@@ -105,3 +106,25 @@ fn with_extra_extension<S: AsRef<OsStr>>(&self, extension: S) -> PathBuf {
}
}
}
+
+/// The name of the environment variable that holds dynamic library locations.
+pub fn dylib_env_var() -> &'static str {
+ if cfg!(windows) {
+ "PATH"
+ } else if cfg!(target_os = "macos") {
+ "DYLD_LIBRARY_PATH"
+ } else if cfg!(target_os = "haiku") {
+ "LIBRARY_PATH"
+ } else {
+ "LD_LIBRARY_PATH"
+ }
+}
+
+/// Adds a list of lookup paths to `cmd`'s dynamic library lookup path.
+/// If the dylib_path_var is already set for this cmd, the old value will be overwritten!
+pub fn add_dylib_path(cmd: &mut Command, paths: impl Iterator<Item = impl Into<PathBuf>>) {
+ let path_env = env::var_os(dylib_env_var());
+ let old_paths = path_env.as_ref().map(env::split_paths);
+ let new_paths = paths.map(Into::into).chain(old_paths.into_iter().flatten());
+ cmd.env(dylib_env_var(), env::join_paths(new_paths).unwrap());
+}
--
2.37.3

View File

@ -0,0 +1,52 @@
From a72666ed56ec5f1b6d254c7020cf86143edc6dbd Mon Sep 17 00:00:00 2001
From: Josh Stone <jistone@redhat.com>
Date: Tue, 20 Sep 2022 13:03:43 -0700
Subject: [PATCH] rustc_transmute: fix big-endian discriminants
---
compiler/rustc_transmute/src/layout/tree.rs | 22 +++++++++++++++------
1 file changed, 16 insertions(+), 6 deletions(-)
diff --git a/compiler/rustc_transmute/src/layout/tree.rs b/compiler/rustc_transmute/src/layout/tree.rs
index 211c813b8001..acd4fa63d782 100644
--- a/compiler/rustc_transmute/src/layout/tree.rs
+++ b/compiler/rustc_transmute/src/layout/tree.rs
@@ -404,7 +404,7 @@ fn from_repr_c_variant(
.unwrap();
trace!(?discr_layout, "computed discriminant layout");
variant_layout = variant_layout.extend(discr_layout).unwrap().0;
- tree = tree.then(Self::from_disr(discr, tcx, layout_summary.discriminant_size));
+ tree = tree.then(Self::from_discr(discr, tcx, layout_summary.discriminant_size));
}
// Next come fields.
@@ -444,11 +444,21 @@ fn from_repr_c_variant(
Ok(tree)
}
- pub fn from_disr(discr: Discr<'tcx>, tcx: TyCtxt<'tcx>, size: usize) -> Self {
- // FIXME(@jswrenn): I'm certain this is missing needed endian nuance.
- let bytes = discr.val.to_ne_bytes();
- let bytes = &bytes[..size];
- Self::Seq(bytes.into_iter().copied().map(|b| Self::from_bits(b)).collect())
+ pub fn from_discr(discr: Discr<'tcx>, tcx: TyCtxt<'tcx>, size: usize) -> Self {
+ use rustc_target::abi::Endian;
+
+ let bytes: [u8; 16];
+ let bytes = match tcx.data_layout.endian {
+ Endian::Little => {
+ bytes = discr.val.to_le_bytes();
+ &bytes[..size]
+ }
+ Endian::Big => {
+ bytes = discr.val.to_be_bytes();
+ &bytes[bytes.len() - size..]
+ }
+ };
+ Self::Seq(bytes.iter().map(|&b| Self::from_bits(b)).collect())
}
}
--
2.37.3

View File

@ -1,42 +0,0 @@
--- rustc-1.59.0-src/Cargo.lock.orig 2022-02-21 18:48:37.000000000 -0800
+++ rustc-1.59.0-src/Cargo.lock 2022-02-22 10:16:10.381962862 -0800
@@ -1935,7 +1935,6 @@
dependencies = [
"cc",
"libc",
- "libssh2-sys",
"libz-sys",
"openssl-sys",
"pkg-config",
@@ -1968,20 +1967,6 @@
]
[[package]]
-name = "libssh2-sys"
-version = "0.2.23"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b094a36eb4b8b8c8a7b4b8ae43b2944502be3e59cd87687595cf6b0a71b3f4ca"
-dependencies = [
- "cc",
- "libc",
- "libz-sys",
- "openssl-sys",
- "pkg-config",
- "vcpkg",
-]
-
-[[package]]
name = "libz-sys"
version = "1.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
--- rustc-1.59.0-src/vendor/git2/Cargo.toml.orig 2022-02-21 20:14:37.000000000 -0800
+++ rustc-1.59.0-src/vendor/git2/Cargo.toml 2022-02-22 10:12:23.021772490 -0800
@@ -51,7 +51,7 @@
version = "0.1.39"
[features]
-default = ["ssh", "https", "ssh_key_from_memory"]
+default = ["https"]
https = ["libgit2-sys/https", "openssl-sys", "openssl-probe"]
ssh = ["libgit2-sys/ssh"]
ssh_key_from_memory = ["libgit2-sys/ssh_key_from_memory"]

View File

@ -1,13 +0,0 @@
diff --git a/src/tools/compiletest/src/header.rs b/src/tools/compiletest/src/header.rs
index 1bdea33dffaf..1c21d5e87b68 100644
--- a/src/tools/compiletest/src/header.rs
+++ b/src/tools/compiletest/src/header.rs
@@ -807,7 +807,7 @@ pub fn make_test_description<R: Read>(
) -> test::TestDesc {
let mut ignore = false;
#[cfg(not(bootstrap))]
- let ignore_message: Option<String> = None;
+ let ignore_message = None;
let mut should_fail = false;
let rustc_has_profiler_support = env::var_os("RUSTC_PROFILER_SUPPORT").is_some();

View File

@ -1,6 +1,6 @@
--- rustc-beta-src/Cargo.lock.orig 2022-04-28 15:34:11.668960640 -0700 --- rustc-beta-src/Cargo.lock.orig 2022-10-04 10:55:48.797517289 -0700
+++ rustc-beta-src/Cargo.lock 2022-04-28 15:35:24.542419588 -0700 +++ rustc-beta-src/Cargo.lock 2022-10-04 10:55:48.799517248 -0700
@@ -951,7 +951,6 @@ @@ -1026,7 +1026,6 @@
dependencies = [ dependencies = [
"cc", "cc",
"libc", "libc",
@ -8,7 +8,7 @@
"libz-sys", "libz-sys",
"openssl-sys", "openssl-sys",
"pkg-config", "pkg-config",
@@ -2002,16 +2001,6 @@ @@ -1993,16 +1992,6 @@
checksum = "7fc7aa29613bd6a620df431842069224d8bc9011086b1db4c0e0cd47fa03ec9a" checksum = "7fc7aa29613bd6a620df431842069224d8bc9011086b1db4c0e0cd47fa03ec9a"
[[package]] [[package]]
@ -25,20 +25,20 @@
name = "libz-sys" name = "libz-sys"
version = "1.1.3" version = "1.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
--- 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.orig 2022-10-04 10:55:48.799517248 -0700
+++ rustc-beta-src/src/tools/cargo/Cargo.toml 2022-04-28 15:34:11.670960598 -0700 +++ rustc-beta-src/src/tools/cargo/Cargo.toml 2022-10-04 11:00:55.057162743 -0700
@@ -22,7 +22,7 @@ @@ -21,7 +21,7 @@
cargo-util = { path = "crates/cargo-util", version = "0.1.2" } cargo-platform = { path = "crates/cargo-platform", version = "0.1.2" }
cargo-util = { path = "crates/cargo-util", version = "0.2.1" }
crates-io = { path = "crates/crates-io", version = "0.34.0" } crates-io = { path = "crates/crates-io", version = "0.34.0" }
crossbeam-utils = "0.8" -curl = { version = "0.4.43", features = ["http2"] }
-curl = { version = "0.4.41", features = ["http2"] } +curl = { version = "0.4.43", features = [] }
+curl = { version = "0.4.41", features = [] } curl-sys = "0.4.55"
curl-sys = "0.4.50"
env_logger = "0.9.0" env_logger = "0.9.0"
pretty_env_logger = { version = "0.4", optional = true } pretty_env_logger = { version = "0.4", optional = true }
--- 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.orig 2022-09-24 10:23:17.000000000 -0700
+++ rustc-beta-src/src/tools/cargo/src/cargo/sources/registry/http_remote.rs 2022-04-28 15:34:11.670960598 -0700 +++ rustc-beta-src/src/tools/cargo/src/cargo/sources/registry/http_remote.rs 2022-10-04 10:55:48.799517248 -0700
@@ -183,16 +183,8 @@ @@ -192,16 +192,8 @@
} }
self.fetch_started = true; self.fetch_started = true;
@ -57,8 +57,8 @@
self.config self.config
.shell() .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.orig 2022-09-24 10:23:17.000000000 -0700
+++ rustc-beta-src/src/tools/cargo/src/cargo/core/package.rs 2022-04-28 15:34:11.670960598 -0700 +++ rustc-beta-src/src/tools/cargo/src/cargo/core/package.rs 2022-10-04 10:55:48.800517227 -0700
@@ -403,16 +403,9 @@ @@ -403,16 +403,9 @@
sources: SourceMap<'cfg>, sources: SourceMap<'cfg>,
config: &'cfg Config, config: &'cfg Config,

View File

@ -0,0 +1,43 @@
--- rustc-beta-src/Cargo.lock.orig 2022-09-24 10:20:14.000000000 -0700
+++ rustc-beta-src/Cargo.lock 2022-10-04 10:26:35.490270607 -0700
@@ -1971,7 +1971,6 @@
dependencies = [
"cc",
"libc",
- "libssh2-sys",
"libz-sys",
"openssl-sys",
"pkg-config",
@@ -2004,20 +2003,6 @@
]
[[package]]
-name = "libssh2-sys"
-version = "0.2.23"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b094a36eb4b8b8c8a7b4b8ae43b2944502be3e59cd87687595cf6b0a71b3f4ca"
-dependencies = [
- "cc",
- "libc",
- "libz-sys",
- "openssl-sys",
- "pkg-config",
- "vcpkg",
-]
-
-[[package]]
name = "libz-sys"
version = "1.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
--- rustc-beta-src/vendor/git2/Cargo.toml.orig 2022-10-04 10:26:35.490270607 -0700
+++ rustc-beta-src/vendor/git2/Cargo.toml 2022-10-04 10:28:14.002187686 -0700
@@ -58,9 +58,7 @@
[features]
default = [
- "ssh",
"https",
- "ssh_key_from_memory",
]
https = [
"libgit2-sys/https",

View File

@ -1,8 +1,6 @@
diff --git a/compiler/rustc_codegen_ssa/src/back/link.rs b/compiler/rustc_codegen_ssa/src/back/link.rs --- rustc-beta-src/compiler/rustc_codegen_ssa/src/back/link.rs.orig 2022-09-24 10:20:14.000000000 -0700
index 638b2a7b5a9f..79d4ecf4cb91 100644 +++ rustc-beta-src/compiler/rustc_codegen_ssa/src/back/link.rs 2022-10-05 11:24:21.759564185 -0700
--- a/compiler/rustc_codegen_ssa/src/back/link.rs @@ -755,7 +755,7 @@
+++ b/compiler/rustc_codegen_ssa/src/back/link.rs
@@ -763,7 +763,7 @@ fn link_natively<'a, B: ArchiveBuilder<'a>>(
&& cmd.get_args().iter().any(|e| e.to_string_lossy() == "-no-pie") && cmd.get_args().iter().any(|e| e.to_string_lossy() == "-no-pie")
{ {
info!("linker output: {:?}", out); info!("linker output: {:?}", out);
@ -11,7 +9,7 @@ index 638b2a7b5a9f..79d4ecf4cb91 100644
for arg in cmd.take_args() { for arg in cmd.take_args() {
if arg.to_string_lossy() != "-no-pie" { if arg.to_string_lossy() != "-no-pie" {
cmd.arg(arg); cmd.arg(arg);
@@ -782,7 +782,7 @@ fn link_natively<'a, B: ArchiveBuilder<'a>>( @@ -774,7 +774,7 @@
&& cmd.get_args().iter().any(|e| e.to_string_lossy() == "-static-pie") && cmd.get_args().iter().any(|e| e.to_string_lossy() == "-static-pie")
{ {
info!("linker output: {:?}", out); info!("linker output: {:?}", out);
@ -20,12 +18,13 @@ index 638b2a7b5a9f..79d4ecf4cb91 100644
"Linker does not support -static-pie command line option. Retrying with -static instead." "Linker does not support -static-pie command line option. Retrying with -static instead."
); );
// Mirror `add_(pre,post)_link_objects` to replace CRT objects. // Mirror `add_(pre,post)_link_objects` to replace CRT objects.
@@ -1507,15 +1507,14 @@ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { @@ -1520,15 +1520,15 @@
} }
fn link_output_kind(sess: &Session, crate_type: CrateType) -> LinkOutputKind { fn link_output_kind(sess: &Session, crate_type: CrateType) -> LinkOutputKind {
- let kind = match (crate_type, sess.crt_static(Some(crate_type)), sess.relocation_model()) { - let kind = match (crate_type, sess.crt_static(Some(crate_type)), sess.relocation_model()) {
+ // Only use PIE if explicitly specified. + // Only use PIE if explicitly specified.
+ #[allow(rustc::bad_opt_access)]
+ let explicit_pic = + let explicit_pic =
+ matches!(sess.opts.cg.relocation_model, Some(RelocModel::Pic | RelocModel::Pie)); + matches!(sess.opts.cg.relocation_model, Some(RelocModel::Pic | RelocModel::Pie));
+ let kind = match (crate_type, sess.crt_static(Some(crate_type)), explicit_pic) { + let kind = match (crate_type, sess.crt_static(Some(crate_type)), explicit_pic) {

View File

@ -8,9 +8,9 @@
# To bootstrap from scratch, set the channel and date from src/stage0.json # 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 # e.g. 1.59.0 wants rustc: 1.58.0-2022-01-13
# or nightly wants some beta-YYYY-MM-DD # or nightly wants some beta-YYYY-MM-DD
%global bootstrap_version 1.60.0 %global bootstrap_version 1.64.0
%global bootstrap_channel 1.60.0 %global bootstrap_channel 1.64.0
%global bootstrap_date 2022-04-07 %global bootstrap_date 2022-09-22
# Only the specified arches will use bootstrap binaries. # Only the specified arches will use bootstrap binaries.
# NOTE: Those binaries used to be uploaded with every new release, but that was # NOTE: Those binaries used to be uploaded with every new release, but that was
@ -39,9 +39,9 @@
# src/ci/docker/host-x86_64/dist-various-2/build-wasi-toolchain.sh # src/ci/docker/host-x86_64/dist-various-2/build-wasi-toolchain.sh
# (updated per https://github.com/rust-lang/rust/pull/96907) # (updated per https://github.com/rust-lang/rust/pull/96907)
%global wasi_libc_url https://github.com/WebAssembly/wasi-libc %global wasi_libc_url https://github.com/WebAssembly/wasi-libc
%global wasi_libc_commit 9886d3d6200fcc3726329966860fc058707406cd %global wasi_libc_ref wasi-sdk-16
%global wasi_libc_name wasi-libc-%{wasi_libc_commit} %global wasi_libc_name wasi-libc-%{wasi_libc_ref}
%global wasi_libc_source %{wasi_libc_url}/archive/%{wasi_libc_commit}/%{wasi_libc_name}.tar.gz %global wasi_libc_source %{wasi_libc_url}/archive/%{wasi_libc_ref}/%{wasi_libc_name}.tar.gz
%global wasi_libc_dir %{_builddir}/%{wasi_libc_name} %global wasi_libc_dir %{_builddir}/%{wasi_libc_name}
# Using llvm-static may be helpful as an opt-in, e.g. to aid LLVM rebases. # Using llvm-static may be helpful as an opt-in, e.g. to aid LLVM rebases.
@ -49,15 +49,15 @@
# We can also choose to just use Rust's bundled LLVM, in case the system LLVM # We can also choose to just use Rust's bundled LLVM, in case the system LLVM
# is insufficient. Rust currently requires LLVM 12.0+. # is insufficient. Rust currently requires LLVM 12.0+.
%global min_llvm_version 12.0.0 %global min_llvm_version 13.0.0
%global bundled_llvm_version 14.0.0 %global bundled_llvm_version 15.0.0
%bcond_with bundled_llvm %bcond_with bundled_llvm
# Requires stable libgit2 1.4, and not the next minor soname change. # Requires stable libgit2 1.5, and not the next minor soname change.
# This needs to be consistent with the bindings in vendor/libgit2-sys. # This needs to be consistent with the bindings in vendor/libgit2-sys.
%global min_libgit2_version 1.4.0 %global min_libgit2_version 1.5.0
%global next_libgit2_version 1.5.0~ %global next_libgit2_version 1.6.0~
%global bundled_libgit2_version 1.4.2 %global bundled_libgit2_version 1.5.0
%if 0%{?fedora} >= 99 %if 0%{?fedora} >= 99
%bcond_with bundled_libgit2 %bcond_with bundled_libgit2
%else %else
@ -87,7 +87,7 @@
%endif %endif
Name: rust Name: rust
Version: 1.61.0 Version: 1.65.0
Release: 1%{?dist} Release: 1%{?dist}
Summary: The Rust Programming Language Summary: The Rust Programming Language
License: (ASL 2.0 or MIT) and (BSD and MIT) License: (ASL 2.0 or MIT) and (BSD and MIT)
@ -110,12 +110,11 @@ Patch1: 0001-Use-lld-provided-by-system-for-wasm.patch
# Set a substitute-path in rust-gdb for standard library sources. # Set a substitute-path in rust-gdb for standard library sources.
Patch2: rustc-1.61.0-rust-gdb-substitute-path.patch Patch2: rustc-1.61.0-rust-gdb-substitute-path.patch
# Infer the type that compiletest uses for TestDesc ignore_message # https://github.com/rust-lang/rust/pull/102076
Patch3: rustc-1.61.0-fix-compiletest-ignore_message.patch Patch3: 0001-rustc_transmute-fix-big-endian-discriminants.patch
# Add missing target_feature to the list of well known cfg names # https://github.com/rust-lang/rust/pull/103072
# https://github.com/rust-lang/rust/pull/96483 Patch4: 0001-compiletest-set-the-dylib-path-when-gathering-target.patch
Patch4: 0001-Add-missing-target_feature-to-the-list-of-well-known.patch
### RHEL-specific patches below ### ### RHEL-specific patches below ###
@ -123,15 +122,15 @@ Patch4: 0001-Add-missing-target_feature-to-the-list-of-well-known.patch
Source100: macros.rust-toolset Source100: macros.rust-toolset
# Disable cargo->libgit2->libssh2 on RHEL, as it's not approved for FIPS (rhbz1732949) # Disable cargo->libgit2->libssh2 on RHEL, as it's not approved for FIPS (rhbz1732949)
Patch100: rustc-1.59.0-disable-libssh2.patch Patch100: rustc-1.65.0-disable-libssh2.patch
# libcurl on RHEL7 doesn't have http2, but since cargo requests it, curl-sys # 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. # will try to build it statically -- instead we turn off the feature.
Patch101: rustc-1.61.0-disable-http2.patch Patch101: rustc-1.65.0-disable-http2.patch
# kernel rh1410097 causes too-small stacks for PIE. # kernel rh1410097 causes too-small stacks for PIE.
# (affects RHEL6 kernels when building for RHEL7) # (affects RHEL6 kernels when building for RHEL7)
Patch102: rustc-1.58.0-no-default-pie.patch Patch102: rustc-1.65.0-no-default-pie.patch
# Get the Rust triple for any arch. # Get the Rust triple for any arch.
@ -247,6 +246,9 @@ BuildRequires: procps-ng
# debuginfo-gdb tests need gdb # debuginfo-gdb tests need gdb
BuildRequires: gdb BuildRequires: gdb
# For src/test/run-make/static-pie
BuildRequires: glibc-static
# Virtual provides for folks who attempt "dnf install rustc" # Virtual provides for folks who attempt "dnf install rustc"
Provides: rustc = %{version}-%{release} Provides: rustc = %{version}-%{release}
Provides: rustc%{?_isa} = %{version}-%{release} Provides: rustc%{?_isa} = %{version}-%{release}
@ -446,6 +448,12 @@ Summary: Documentation for Rust
# Koji will fail the build in rpmdiff if two architectures build a noarch # Koji will fail the build in rpmdiff if two architectures build a noarch
# subpackage differently, so instead we have to keep its arch. # subpackage differently, so instead we have to keep its arch.
# Cargo no longer builds its own documentation
# https://github.com/rust-lang/cargo/pull/4904
# We used to keep a shim cargo-doc package, but now that's merged too.
Obsoletes: cargo-doc < 1.65.0~
Provides: cargo-doc = %{version}-%{release}
%description doc %description doc
This package includes HTML documentation for the Rust programming language and This package includes HTML documentation for the Rust programming language and
its standard library. its standard library.
@ -471,17 +479,6 @@ Cargo is a tool that allows Rust projects to declare their various dependencies
and ensure that you'll always get a repeatable build. and ensure that you'll always get a repeatable build.
%package -n cargo-doc
Summary: Documentation for Cargo
BuildArch: noarch
# Cargo no longer builds its own documentation
# https://github.com/rust-lang/cargo/pull/4904
Requires: %{name}-doc = %{version}-%{release}
%description -n cargo-doc
This package includes HTML documentation for Cargo.
%package -n rustfmt %package -n rustfmt
Summary: Tool to find and fix Rust formatting issues Summary: Tool to find and fix Rust formatting issues
Requires: cargo Requires: cargo
@ -494,24 +491,26 @@ Provides: rustfmt-preview = %{version}-%{release}
A tool for formatting Rust code according to style guidelines. A tool for formatting Rust code according to style guidelines.
%package -n rls %package analyzer
Summary: Rust Language Server for IDE integration Summary: Rust implementation of the Language Server Protocol
%if %with bundled_libgit2
Provides: bundled(libgit2) = %{bundled_libgit2_version}
%endif
Requires: %{name}-analysis
# /usr/bin/rls is dynamically linked against internal rustc libs
Requires: %{name}%{?_isa} = %{version}-%{release}
# The standard library sources are needed for most functionality.
%if 0%{?rhel} && 0%{?rhel} < 8
Requires: %{name}-src
%else
Recommends: %{name}-src
%endif
# RLS is no longer available as of Rust 1.65, but we're including the stub
# binary that implements LSP just enough to recommend rust-analyzer.
Obsoletes: rls < 1.65.0~
# The component/package was rls-preview until Rust 1.31. # The component/package was rls-preview until Rust 1.31.
Obsoletes: rls-preview < 1.31.6 Obsoletes: rls-preview < 1.31.6
Provides: rls-preview = %{version}-%{release}
%description -n rls %description analyzer
The Rust Language Server provides a server that runs in the background, rust-analyzer is an implementation of Language Server Protocol for the Rust
providing IDEs, editors, and other tools with information about Rust programs. programming language. It provides features like completion and goto definition
It supports functionality such as 'goto definition', symbol search, for many code editors, including VS Code, Emacs and Vim.
reformatting, and code completion, and enables renaming and refactorings.
%package -n clippy %package -n clippy
@ -531,6 +530,11 @@ A collection of lints to catch common mistakes and improve your Rust code.
%package src %package src
Summary: Sources for the Rust standard library Summary: Sources for the Rust standard library
BuildArch: noarch BuildArch: noarch
%if 0%{?rhel} && 0%{?rhel} < 8
Requires: %{name}-std-static = %{version}-%{release}
%else
Supplements: %{name}-std-static = %{version}-%{release}
%endif
%description src %description src
This package includes source files for the Rust standard library. It may be This package includes source files for the Rust standard library. It may be
@ -539,7 +543,11 @@ useful as a reference for code completion tools in various editors.
%package analysis %package analysis
Summary: Compiler analysis data for the Rust standard library Summary: Compiler analysis data for the Rust standard library
%if 0%{?rhel} && 0%{?rhel} < 8
Requires: %{name}-std-static%{?_isa} = %{version}-%{release} Requires: %{name}-std-static%{?_isa} = %{version}-%{release}
%else
Supplements: %{name}-std-static%{?_isa} = %{version}-%{release}
%endif
%description analysis %description analysis
This package contains analysis data files produced with rustc's -Zsave-analysis This package contains analysis data files produced with rustc's -Zsave-analysis
@ -641,7 +649,7 @@ ln -s /usr/bin/cmake3 cmake-bin/cmake
# Static linking to distro LLVM needs to add -lffi # Static linking to distro LLVM needs to add -lffi
# https://github.com/rust-lang/rust/issues/34486 # https://github.com/rust-lang/rust/issues/34486
sed -i.ffi -e '$a #[link(name = "ffi")] extern {}' \ sed -i.ffi -e '$a #[link(name = "ffi")] extern {}' \
src/librustc_llvm/lib.rs compiler/rustc_llvm/src/lib.rs
%endif %endif
# The configure macro will modify some autoconf-related files, which upsets # The configure macro will modify some autoconf-related files, which upsets
@ -669,7 +677,7 @@ find -name '*.rs' -type f -perm /111 -exec chmod -v -x '{}' '+'
%build %build
%{export_rust_env} %{export_rust_env}
%ifarch %{arm} %{ix86} s390x %ifarch %{arm} %{ix86}
# full debuginfo is exhausting memory; just do libstd for now # full debuginfo is exhausting memory; just do libstd for now
# https://github.com/rust-lang/rust/issues/45854 # https://github.com/rust-lang/rust/issues/45854
%if 0%{?rhel} && 0%{?rhel} < 8 %if 0%{?rhel} && 0%{?rhel} < 8
@ -746,19 +754,23 @@ end}
--disable-rpath \ --disable-rpath \
%{enable_debuginfo} \ %{enable_debuginfo} \
--set rust.codegen-units-std=1 \ --set rust.codegen-units-std=1 \
--set build.build-stage=2 \
--set build.doc-stage=2 \
--set build.install-stage=2 \
--set build.test-stage=2 \
--enable-extended \ --enable-extended \
--tools=analysis,cargo,clippy,rls,rustfmt,src \ --tools=analysis,cargo,clippy,rls,rust-analyzer,rustfmt,src \
--enable-vendor \ --enable-vendor \
--enable-verbose-tests \ --enable-verbose-tests \
--dist-compression-formats=gz \ --dist-compression-formats=gz \
--release-channel=%{channel} \ --release-channel=%{channel} \
--release-description="%{?fedora:Fedora }%{?rhel:Red Hat }%{version}-%{release}" --release-description="%{?fedora:Fedora }%{?rhel:Red Hat }%{version}-%{release}"
%{__python3} ./x.py build -j "$ncpus" --stage 2 %{__python3} ./x.py build -j "$ncpus"
%{__python3} ./x.py doc --stage 2 %{__python3} ./x.py doc
for triple in %{?mingw_targets} %{?wasm_targets}; do for triple in %{?mingw_targets} %{?wasm_targets}; do
%{__python3} ./x.py build --stage 2 --target=$triple std %{__python3} ./x.py build --target=$triple std
done done
%install %install
@ -770,6 +782,9 @@ for triple in %{?mingw_targets} %{?wasm_targets}; do
DESTDIR=%{buildroot} %{__python3} ./x.py install --target=$triple std DESTDIR=%{buildroot} %{__python3} ./x.py install --target=$triple std
done done
# The rls stub doesn't have an install target, but we can just copy it.
%{__install} -t %{buildroot}%{_bindir} build/%{rust_triple}/stage2-tools-bin/rls
# These are transient files used by x.py dist and install # These are transient files used by x.py dist and install
rm -rf ./build/dist/ ./build/tmp/ rm -rf ./build/dist/ ./build/tmp/
@ -787,15 +802,15 @@ find %{buildroot}%{_libdir} -maxdepth 1 -type f -name '*.so' \
# The libdir libraries are identical to those under rustlib/. It's easier on # The libdir libraries are identical to those under rustlib/. It's easier on
# library loading if we keep them in libdir, but we do need them in rustlib/ # library loading if we keep them in libdir, but we do need them in rustlib/
# to support dynamic linking for compiler plugins, so we'll symlink. # to support dynamic linking for compiler plugins, so we'll symlink.
(cd "%{buildroot}%{rustlibdir}/%{rust_triple}/lib" && find %{buildroot}%{rustlibdir}/%{rust_triple}/lib/ -maxdepth 1 -type f -name '*.so' |
find ../../../../%{_lib} -maxdepth 1 -name '*.so' |
while read lib; do while read lib; do
if [ -f "${lib##*/}" ]; then lib2="%{buildroot}%{_libdir}/${lib##*/}"
if [ -f "$lib2" ]; then
# make sure they're actually identical! # make sure they're actually identical!
cmp "$lib" "${lib##*/}" cmp "$lib" "$lib2"
ln -v -f -s -t . "$lib" ln -v -f -r -s -T "$lib2" "$lib"
fi fi
done) done
# Remove installer artifacts (manifests, uninstall scripts, etc.) # Remove installer artifacts (manifests, uninstall scripts, etc.)
find %{buildroot}%{rustlibdir} -maxdepth 1 -type f -exec rm -v '{}' '+' find %{buildroot}%{rustlibdir} -maxdepth 1 -type f -exec rm -v '{}' '+'
@ -863,18 +878,17 @@ done
# The results are not stable on koji, so mask errors and just log it. # The results are not stable on koji, so mask errors and just log it.
# Some of the larger test artifacts are manually cleaned to save space. # Some of the larger test artifacts are manually cleaned to save space.
%{__python3} ./x.py test --no-fail-fast --stage 2 || : timeout -v 90m %{__python3} ./x.py test --no-fail-fast || :
rm -rf "./build/%{rust_triple}/test/" rm -rf "./build/%{rust_triple}/test/"
%{__python3} ./x.py test --no-fail-fast --stage 2 cargo || : timeout -v 30m %{__python3} ./x.py test --no-fail-fast cargo || :
rm -rf "./build/%{rust_triple}/stage2-tools/%{rust_triple}/cit/" rm -rf "./build/%{rust_triple}/stage2-tools/%{rust_triple}/cit/"
%{__python3} ./x.py test --no-fail-fast --stage 2 clippy || : timeout -v 30m %{__python3} ./x.py test --no-fail-fast clippy || :
env RLS_TEST_WAIT_FOR_AGES=1 \ timeout -v 30m %{__python3} ./x.py test --no-fail-fast rust-analyzer || :
%{__python3} ./x.py test --no-fail-fast --stage 2 rls || :
%{__python3} ./x.py test --no-fail-fast --stage 2 rustfmt || : timeout -v 30m %{__python3} ./x.py test --no-fail-fast rustfmt || :
%ldconfig_scriptlets %ldconfig_scriptlets
@ -886,6 +900,7 @@ env RLS_TEST_WAIT_FOR_AGES=1 \
%{_bindir}/rustc %{_bindir}/rustc
%{_bindir}/rustdoc %{_bindir}/rustdoc
%{_libdir}/*.so %{_libdir}/*.so
%{_libexecdir}/rust-analyzer-proc-macro-srv
%{_mandir}/man1/rustc.1* %{_mandir}/man1/rustc.1*
%{_mandir}/man1/rustdoc.1* %{_mandir}/man1/rustdoc.1*
%dir %{rustlibdir} %dir %{rustlibdir}
@ -984,14 +999,17 @@ end}
%{_docdir}/%{name}/html/*.js %{_docdir}/%{name}/html/*.js
%{_docdir}/%{name}/html/*.png %{_docdir}/%{name}/html/*.png
%{_docdir}/%{name}/html/*.svg %{_docdir}/%{name}/html/*.svg
%{_docdir}/%{name}/html/*.woff
%{_docdir}/%{name}/html/*.woff2 %{_docdir}/%{name}/html/*.woff2
%license %{_docdir}/%{name}/html/*.txt %license %{_docdir}/%{name}/html/*.txt
%license %{_docdir}/%{name}/html/*.md %license %{_docdir}/%{name}/html/*.md
# former cargo-doc
%docdir %{_docdir}/cargo
%dir %{_docdir}/cargo
%{_docdir}/cargo/html
%files -n cargo %files -n cargo
%license src/tools/cargo/LICENSE-APACHE src/tools/cargo/LICENSE-MIT src/tools/cargo/LICENSE-THIRD-PARTY %license src/tools/cargo/LICENSE-{APACHE,MIT,THIRD-PARTY}
%doc src/tools/cargo/README.md %doc src/tools/cargo/README.md
%{_bindir}/cargo %{_bindir}/cargo
%{_libexecdir}/cargo* %{_libexecdir}/cargo*
@ -1002,12 +1020,6 @@ end}
%dir %{_datadir}/cargo/registry %dir %{_datadir}/cargo/registry
%files -n cargo-doc
%docdir %{_docdir}/cargo
%dir %{_docdir}/cargo
%{_docdir}/cargo/html
%files -n rustfmt %files -n rustfmt
%{_bindir}/rustfmt %{_bindir}/rustfmt
%{_bindir}/cargo-fmt %{_bindir}/cargo-fmt
@ -1015,10 +1027,11 @@ end}
%license src/tools/rustfmt/LICENSE-{APACHE,MIT} %license src/tools/rustfmt/LICENSE-{APACHE,MIT}
%files -n rls %files analyzer
%{_bindir}/rls %{_bindir}/rls
%doc src/tools/rls/{README.md,COPYRIGHT,debugging.md} %{_bindir}/rust-analyzer
%license src/tools/rls/LICENSE-{APACHE,MIT} %doc src/tools/rust-analyzer/README.md
%license src/tools/rust-analyzer/LICENSE-{APACHE,MIT}
%files -n clippy %files -n clippy
@ -1044,6 +1057,26 @@ end}
%changelog %changelog
* Fri Jan 06 2023 Josh Stone <jistone@redhat.com> - 1.65.0-1
- Update to 1.65.0.
- rust-analyzer now obsoletes rls.
* Thu Sep 22 2022 Josh Stone <jistone@redhat.com> - 1.64.0-1
- Update to 1.64.0.
- Add rust-analyzer.
* Wed Sep 07 2022 Josh Stone <jistone@redhat.com> - 1.63.0-1
- Update to 1.63.0.
* Tue Jul 19 2022 Josh Stone <jistone@redhat.com> - 1.62.1-1
- Update to 1.62.1.
* Wed Jul 13 2022 Josh Stone <jistone@redhat.com> - 1.62.0-2
- Prevent unsound coercions from functions with opaque return types.
* Thu Jun 30 2022 Josh Stone <jistone@redhat.com> - 1.62.0-1
- Update to 1.62.0.
* Fri Jun 03 2022 Josh Stone <jistone@redhat.com> - 1.61.0-1 * Fri Jun 03 2022 Josh Stone <jistone@redhat.com> - 1.61.0-1
- Update to 1.61.0. - Update to 1.61.0.
- Add rust-toolset as a subpackage. - Add rust-toolset as a subpackage.