Auto merge of #131188 - Kobzol:remove-libstd-so-from-sysroot, r=onur-… · rust-lang/rust@e561499 (original) (raw)

3 files changed

lines changed

Original file line number Diff line number Diff line change
@@ -95,7 +95,6 @@ fn main() {
95 95 // When statically linking `std` into `rustc_driver`, remove `-C prefer-dynamic`
96 96 if env::var("RUSTC_LINK_STD_INTO_RUSTC_DRIVER").unwrap() == "1"
97 97 && crate_name == Some("rustc_driver")
98 - && stage != "0"
99 98 {
100 99 if let Some(pos) = args.iter().enumerate().position(|(i, a)
101 100 a == "-C" && args.get(i + 1).map(|a
Original file line number Diff line number Diff line change
@@ -1923,8 +1923,24 @@ impl Step for Assemble {
1923 1923 let src_libdir = builder.sysroot_libdir(build_compiler, host);
1924 1924 for f in builder.read_dir(&src_libdir) {
1925 1925 let filename = f.file_name().into_string().unwrap();
1926 -if (is_dylib(&filename) |
1926 +
1927 +let is_proc_macro = proc_macros.contains(&filename);
1928 +let is_dylib_or_debug = is_dylib(&filename) |
1929 +
1930 +// If we link statically to stdlib, do not copy the libstd dynamic library file
1931 +// FIXME: Also do this for Windows once incremental post-optimization stage0 tests
1932 +// work without std.dll (see https://github.com/rust-lang/rust/pull/131188).
1933 +let can_be_rustc_dynamic_dep = if builder
1934 +.link_std_into_rustc_driver(target_compiler.host)
1935 + && !target_compiler.host.is_windows()
1927 1936 {
1937 +let is_std = filename.starts_with("std-") |
1938 + !is_std
1939 +} else {
1940 +true
1941 +};
1942 +
1943 +if is_dylib_or_debug && can_be_rustc_dynamic_dep && !is_proc_macro {
1928 1944 builder.copy_link(&f.path(), &rustc_libdir.join(&filename));
1929 1945 }
1930 1946 }
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
1 1 //@ run-pass
2 +//@ no-prefer-dynamic We move the binary around, so do not depend dynamically on libstd
2 3 //@ ignore-wasm32 no processes
3 4 //@ ignore-sgx no processes
4 5 //@ ignore-fuchsia Needs directory creation privilege