Skip to content

Commit 61438eb

Browse files
committed
Do not include libstd.so in sysroot when we statically link to libstd
1 parent 302901b commit 61438eb

File tree

2 files changed

+10
-3
lines changed

2 files changed

+10
-3
lines changed

src/bootstrap/src/bin/rustc.rs

-1
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,6 @@ fn main() {
9595
// When statically linking `std` into `rustc_driver`, remove `-C prefer-dynamic`
9696
if env::var("RUSTC_LINK_STD_INTO_RUSTC_DRIVER").unwrap() == "1"
9797
&& crate_name == Some("rustc_driver")
98-
&& stage != "0"
9998
{
10099
if let Some(pos) = args.iter().enumerate().position(|(i, a)| {
101100
a == "-C" && args.get(i + 1).map(|a| a == "prefer-dynamic").unwrap_or(false)

src/bootstrap/src/core/build_steps/compile.rs

+10-2
Original file line numberDiff line numberDiff line change
@@ -1848,8 +1848,16 @@ impl Step for Assemble {
18481848
let src_libdir = builder.sysroot_libdir(build_compiler, host);
18491849
for f in builder.read_dir(&src_libdir) {
18501850
let filename = f.file_name().into_string().unwrap();
1851-
if (is_dylib(&filename) || is_debug_info(&filename)) && !proc_macros.contains(&filename)
1852-
{
1851+
1852+
let is_proc_macro = proc_macros.contains(&filename);
1853+
let is_dylib_or_debug = is_dylib(&filename) || is_debug_info(&filename);
1854+
1855+
// If we link statically to stdlib, do not copy the libstd dynamic library file
1856+
let is_std = filename.starts_with("std-") || filename.starts_with("libstd-");
1857+
let can_be_rustc_dynamic_dep =
1858+
!(is_std && builder.link_std_into_rustc_driver(target_compiler.host));
1859+
1860+
if is_dylib_or_debug && can_be_rustc_dynamic_dep && !is_proc_macro {
18531861
builder.copy_link(&f.path(), &rustc_libdir.join(&filename));
18541862
}
18551863
}

0 commit comments

Comments
 (0)