fix LTO with doctests (backported cargo PR#8657)
This commit is contained in:
parent
105a7c0012
commit
aacb4980d2
133
0002-Fix-LTO-with-doctests.patch
Normal file
133
0002-Fix-LTO-with-doctests.patch
Normal file
@ -0,0 +1,133 @@
|
|||||||
|
From 2c9deaabf99dab9998f6ddbbe496d19ff7ce31f0 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Fabio Valentini <decathorpe@gmail.com>
|
||||||
|
Date: Fri, 28 Aug 2020 21:56:45 +0200
|
||||||
|
Subject: [PATCH 2/2] Fix LTO with doctests
|
||||||
|
|
||||||
|
---
|
||||||
|
.../src/cargo/core/compiler/context/mod.rs | 3 +-
|
||||||
|
.../cargo/src/cargo/core/compiler/mod.rs | 59 +++++----------
|
||||||
|
src/tools/cargo/src/cargo/core/profiles.rs | 7 +-
|
||||||
|
src/tools/cargo/tests/testsuite/lto.rs | 71 ++++++++++++++++---
|
||||||
|
4 files changed, 85 insertions(+), 55 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/tools/cargo/src/cargo/core/compiler/context/mod.rs b/src/tools/cargo/src/cargo/core/compiler/context/mod.rs
|
||||||
|
index 52b954dd1..82831f423 100644
|
||||||
|
--- a/src/tools/cargo/src/cargo/core/compiler/context/mod.rs
|
||||||
|
+++ b/src/tools/cargo/src/cargo/core/compiler/context/mod.rs
|
||||||
|
@@ -210,7 +210,8 @@ impl<'a, 'cfg> Context<'a, 'cfg> {
|
||||||
|
// Collect information for `rustdoc --test`.
|
||||||
|
if unit.mode.is_doc_test() {
|
||||||
|
let mut unstable_opts = false;
|
||||||
|
- let args = compiler::extern_args(&self, unit, &mut unstable_opts)?;
|
||||||
|
+ let mut args = compiler::extern_args(&self, unit, &mut unstable_opts)?;
|
||||||
|
+ args.extend(compiler::lto_args(&self, unit));
|
||||||
|
self.compilation.to_doc_test.push(compilation::Doctest {
|
||||||
|
unit: unit.clone(),
|
||||||
|
args,
|
||||||
|
diff --git a/src/tools/cargo/src/cargo/core/compiler/mod.rs b/src/tools/cargo/src/cargo/core/compiler/mod.rs
|
||||||
|
index 9399c5042..47d2b9bb4 100644
|
||||||
|
--- a/src/tools/cargo/src/cargo/core/compiler/mod.rs
|
||||||
|
+++ b/src/tools/cargo/src/cargo/core/compiler/mod.rs
|
||||||
|
@@ -783,49 +783,9 @@ fn build_base_args(
|
||||||
|
cmd.arg("-C").arg(format!("panic={}", panic));
|
||||||
|
}
|
||||||
|
|
||||||
|
- match cx.lto[unit] {
|
||||||
|
- lto::Lto::Run(None) => {
|
||||||
|
- cmd.arg("-C").arg("lto");
|
||||||
|
- }
|
||||||
|
- lto::Lto::Run(Some(s)) => {
|
||||||
|
- cmd.arg("-C").arg(format!("lto={}", s));
|
||||||
|
- }
|
||||||
|
- lto::Lto::Off => {
|
||||||
|
- cmd.arg("-C").arg("lto=off");
|
||||||
|
- }
|
||||||
|
- lto::Lto::ObjectAndBitcode => {} // this is rustc's default
|
||||||
|
- lto::Lto::OnlyBitcode => {
|
||||||
|
- // Note that this compiler flag, like the one below, is just an
|
||||||
|
- // optimization in terms of build time. If we don't pass it then
|
||||||
|
- // both object code and bitcode will show up. This is lagely just
|
||||||
|
- // compat until the feature lands on stable and we can remove the
|
||||||
|
- // conditional branch.
|
||||||
|
- if cx
|
||||||
|
- .bcx
|
||||||
|
- .target_data
|
||||||
|
- .info(CompileKind::Host)
|
||||||
|
- .supports_embed_bitcode
|
||||||
|
- .unwrap()
|
||||||
|
- {
|
||||||
|
- cmd.arg("-Clinker-plugin-lto");
|
||||||
|
- }
|
||||||
|
- }
|
||||||
|
- lto::Lto::OnlyObject => {
|
||||||
|
- if cx
|
||||||
|
- .bcx
|
||||||
|
- .target_data
|
||||||
|
- .info(CompileKind::Host)
|
||||||
|
- .supports_embed_bitcode
|
||||||
|
- .unwrap()
|
||||||
|
- {
|
||||||
|
- cmd.arg("-Cembed-bitcode=no");
|
||||||
|
- }
|
||||||
|
- }
|
||||||
|
- }
|
||||||
|
+ cmd.args(<o_args(cx, unit));
|
||||||
|
|
||||||
|
if let Some(n) = codegen_units {
|
||||||
|
- // There are some restrictions with LTO and codegen-units, so we
|
||||||
|
- // only add codegen units when LTO is not used.
|
||||||
|
cmd.arg("-C").arg(&format!("codegen-units={}", n));
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -952,6 +912,23 @@ fn build_base_args(
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
+fn lto_args(cx: &Context<'_, '_>, unit: &Unit) -> Vec<OsString> {
|
||||||
|
+ let mut result = Vec::new();
|
||||||
|
+ let mut push = |arg: &str| {
|
||||||
|
+ result.push(OsString::from("-C"));
|
||||||
|
+ result.push(OsString::from(arg));
|
||||||
|
+ };
|
||||||
|
+ match cx.lto[unit] {
|
||||||
|
+ lto::Lto::Run(None) => push("lto"),
|
||||||
|
+ lto::Lto::Run(Some(s)) => push(&format!("lto={}", s)),
|
||||||
|
+ lto::Lto::Off => push("lto=off"),
|
||||||
|
+ lto::Lto::ObjectAndBitcode => {} // this is rustc's default
|
||||||
|
+ lto::Lto::OnlyBitcode => push("linker-plugin-lto"),
|
||||||
|
+ lto::Lto::OnlyObject => push("embed-bitcode=no"),
|
||||||
|
+ }
|
||||||
|
+ result
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
fn build_deps_args(
|
||||||
|
cmd: &mut ProcessBuilder,
|
||||||
|
cx: &mut Context<'_, '_>,
|
||||||
|
diff --git a/src/tools/cargo/src/cargo/core/profiles.rs b/src/tools/cargo/src/cargo/core/profiles.rs
|
||||||
|
index 6a28bd261..ca0c2e417 100644
|
||||||
|
--- a/src/tools/cargo/src/cargo/core/profiles.rs
|
||||||
|
+++ b/src/tools/cargo/src/cargo/core/profiles.rs
|
||||||
|
@@ -302,7 +302,7 @@ impl Profiles {
|
||||||
|
};
|
||||||
|
|
||||||
|
match mode {
|
||||||
|
- CompileMode::Test | CompileMode::Bench => {
|
||||||
|
+ CompileMode::Test | CompileMode::Bench | CompileMode::Doctest => {
|
||||||
|
if release {
|
||||||
|
(
|
||||||
|
InternedString::new("bench"),
|
||||||
|
@@ -315,10 +315,7 @@ impl Profiles {
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
- CompileMode::Build
|
||||||
|
- | CompileMode::Check { .. }
|
||||||
|
- | CompileMode::Doctest
|
||||||
|
- | CompileMode::RunCustomBuild => {
|
||||||
|
+ CompileMode::Build | CompileMode::Check { .. } | CompileMode::RunCustomBuild => {
|
||||||
|
// Note: `RunCustomBuild` doesn't normally use this code path.
|
||||||
|
// `build_unit_profiles` normally ensures that it selects the
|
||||||
|
// ancestor's profile. However, `cargo clean -p` can hit this
|
||||||
|
--
|
||||||
|
2.26.2
|
||||||
|
|
@ -53,7 +53,7 @@
|
|||||||
|
|
||||||
Name: rust
|
Name: rust
|
||||||
Version: 1.46.0
|
Version: 1.46.0
|
||||||
Release: 1%{?dist}
|
Release: 2%{?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)
|
||||||
# ^ written as: (rust itself) and (bundled libraries)
|
# ^ written as: (rust itself) and (bundled libraries)
|
||||||
@ -69,6 +69,8 @@ Source0: https://static.rust-lang.org/dist/%{rustc_package}.tar.xz
|
|||||||
|
|
||||||
# https://github.com/rust-lang/cargo/pull/8598
|
# https://github.com/rust-lang/cargo/pull/8598
|
||||||
Patch1: 0001-Fix-jobserver_exists-test-on-single-cpu-systems.patch
|
Patch1: 0001-Fix-jobserver_exists-test-on-single-cpu-systems.patch
|
||||||
|
# https://github.com/rust-lang/cargo/pull/8657 (backported)
|
||||||
|
Patch2: 0002-Fix-LTO-with-doctests.patch
|
||||||
|
|
||||||
### RHEL-specific patches below ###
|
### RHEL-specific patches below ###
|
||||||
|
|
||||||
@ -409,6 +411,7 @@ test -f '%{local_rust_root}/bin/rustc'
|
|||||||
%setup -q -n %{rustc_package}
|
%setup -q -n %{rustc_package}
|
||||||
|
|
||||||
%patch1 -p1 -d src/tools/cargo
|
%patch1 -p1 -d src/tools/cargo
|
||||||
|
%patch2 -p1
|
||||||
|
|
||||||
%if %with disabled_libssh2
|
%if %with disabled_libssh2
|
||||||
%patch100 -p1
|
%patch100 -p1
|
||||||
@ -744,6 +747,9 @@ rm -f %{buildroot}%{rustlibdir}/etc/lldb_*.py*
|
|||||||
|
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Fri Aug 28 2020 Fabio Valentini <decathorpe@gmail.com> - 1.46.0-2
|
||||||
|
- Fix LTO with doctests (backported cargo PR#8657).
|
||||||
|
|
||||||
* Thu Aug 27 2020 Josh Stone <jistone@redhat.com> - 1.46.0-1
|
* Thu Aug 27 2020 Josh Stone <jistone@redhat.com> - 1.46.0-1
|
||||||
- Update to 1.46.0.
|
- Update to 1.46.0.
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user