Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 3e466e3

Browse files
committedMar 14, 2025
[bootstrap] Distribute split debuginfo if present
If debuginfo has been requested in `config.toml`, it should be packaged alongside the appropriate binary when running `x.py dist`. Currently, this is only implemented for msvc environments where split debuginfo is (basically) the only option. I've tested that this correctly packages the `.pdb` for each binary in the various dist packages.
1 parent 52daa7d commit 3e466e3

File tree

7 files changed

+255
-99
lines changed

7 files changed

+255
-99
lines changed
 

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

+34-22
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ use crate::utils::exec::command;
3333
use crate::utils::helpers::{
3434
exe, get_clang_cl_resource_dir, is_debug_info, is_dylib, symlink_dir, t, up_to_date,
3535
};
36-
use crate::{CLang, Compiler, DependencyType, GitRepo, LLVM_TOOLS, Mode, debug, trace};
36+
use crate::{CLang, Compiler, DependencyType, FileType, GitRepo, LLVM_TOOLS, Mode, debug, trace};
3737

3838
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
3939
pub struct Std {
@@ -321,7 +321,7 @@ fn copy_and_stamp(
321321
dependency_type: DependencyType,
322322
) {
323323
let target = libdir.join(name);
324-
builder.copy_link(&sourcedir.join(name), &target);
324+
builder.copy_link(&sourcedir.join(name), &target, FileType::Regular);
325325

326326
target_deps.push((target, dependency_type));
327327
}
@@ -330,7 +330,7 @@ fn copy_llvm_libunwind(builder: &Builder<'_>, target: TargetSelection, libdir: &
330330
let libunwind_path = builder.ensure(llvm::Libunwind { target });
331331
let libunwind_source = libunwind_path.join("libunwind.a");
332332
let libunwind_target = libdir.join("libunwind.a");
333-
builder.copy_link(&libunwind_source, &libunwind_target);
333+
builder.copy_link(&libunwind_source, &libunwind_target, FileType::NativeLibrary);
334334
libunwind_target
335335
}
336336

@@ -401,7 +401,7 @@ fn copy_self_contained_objects(
401401
for &obj in &["crtbegin.o", "crtbeginS.o", "crtend.o", "crtendS.o"] {
402402
let src = crt_path.join(obj);
403403
let target = libdir_self_contained.join(obj);
404-
builder.copy_link(&src, &target);
404+
builder.copy_link(&src, &target, FileType::NativeLibrary);
405405
target_deps.push((target, DependencyType::TargetSelfContained));
406406
}
407407
} else {
@@ -443,9 +443,9 @@ fn copy_self_contained_objects(
443443
} else if target.is_windows_gnu() {
444444
for obj in ["crt2.o", "dllcrt2.o"].iter() {
445445
let src = compiler_file(builder, &builder.cc(target), target, CLang::C, obj);
446-
let target = libdir_self_contained.join(obj);
447-
builder.copy_link(&src, &target);
448-
target_deps.push((target, DependencyType::TargetSelfContained));
446+
let dst = libdir_self_contained.join(obj);
447+
builder.copy_link(&src, &dst, FileType::NativeLibrary);
448+
target_deps.push((dst, DependencyType::TargetSelfContained));
449449
}
450450
}
451451

@@ -790,8 +790,11 @@ impl Step for StdLink {
790790
let file = t!(file);
791791
let path = file.path();
792792
if path.is_file() {
793-
builder
794-
.copy_link(&path, &sysroot.join("lib").join(path.file_name().unwrap()));
793+
builder.copy_link(
794+
&path,
795+
&sysroot.join("lib").join(path.file_name().unwrap()),
796+
FileType::Regular,
797+
);
795798
}
796799
}
797800
}
@@ -829,7 +832,7 @@ fn copy_sanitizers(
829832

830833
for runtime in &runtimes {
831834
let dst = libdir.join(&runtime.name);
832-
builder.copy_link(&runtime.path, &dst);
835+
builder.copy_link(&runtime.path, &dst, FileType::NativeLibrary);
833836

834837
// The `aarch64-apple-ios-macabi` and `x86_64-apple-ios-macabi` are also supported for
835838
// sanitizers, but they share a sanitizer runtime with `${arch}-apple-darwin`, so we do
@@ -934,9 +937,9 @@ impl Step for StartupObjects {
934937
.run(builder);
935938
}
936939

937-
let target = sysroot_dir.join((*file).to_string() + ".o");
938-
builder.copy_link(dst_file, &target);
939-
target_deps.push((target, DependencyType::Target));
940+
let obj = sysroot_dir.join((*file).to_string() + ".o");
941+
builder.copy_link(dst_file, &obj, FileType::NativeLibrary);
942+
target_deps.push((obj, DependencyType::Target));
940943
}
941944

942945
target_deps
@@ -952,7 +955,7 @@ fn cp_rustc_component_to_ci_sysroot(builder: &Builder<'_>, sysroot: &Path, conte
952955
if src.is_dir() {
953956
t!(fs::create_dir_all(dst));
954957
} else {
955-
builder.copy_link(&src, &dst);
958+
builder.copy_link(&src, &dst, FileType::Regular);
956959
}
957960
}
958961
}
@@ -1707,7 +1710,7 @@ fn copy_codegen_backends_to_sysroot(
17071710
let dot = filename.find('.').unwrap();
17081711
format!("{}-{}{}", &filename[..dash], builder.rust_release(), &filename[dot..])
17091712
};
1710-
builder.copy_link(file, &dst.join(target_filename));
1713+
builder.copy_link(file, &dst.join(target_filename), FileType::NativeLibrary);
17111714
}
17121715
}
17131716

@@ -2011,7 +2014,11 @@ impl Step for Assemble {
20112014
extra_features: vec![],
20122015
});
20132016
let tool_exe = exe("llvm-bitcode-linker", target_compiler.host);
2014-
builder.copy_link(&llvm_bitcode_linker.tool_path, &libdir_bin.join(tool_exe));
2017+
builder.copy_link(
2018+
&llvm_bitcode_linker.tool_path,
2019+
&libdir_bin.join(tool_exe),
2020+
FileType::Executable,
2021+
);
20152022
}
20162023
};
20172024

@@ -2072,8 +2079,8 @@ impl Step for Assemble {
20722079
builder.sysroot_target_libdir(target_compiler, target_compiler.host);
20732080
let dst_lib = libdir.join(&libenzyme).with_extension(lib_ext);
20742081
let target_dst_lib = target_libdir.join(&libenzyme).with_extension(lib_ext);
2075-
builder.copy_link(&src_lib, &dst_lib);
2076-
builder.copy_link(&src_lib, &target_dst_lib);
2082+
builder.copy_link(&src_lib, &dst_lib, FileType::NativeLibrary);
2083+
builder.copy_link(&src_lib, &target_dst_lib, FileType::NativeLibrary);
20772084
}
20782085

20792086
// Build the libraries for this compiler to link to (i.e., the libraries
@@ -2168,7 +2175,7 @@ impl Step for Assemble {
21682175
};
21692176

21702177
if is_dylib_or_debug && can_be_rustc_dynamic_dep && !is_proc_macro {
2171-
builder.copy_link(&f.path(), &rustc_libdir.join(&filename));
2178+
builder.copy_link(&f.path(), &rustc_libdir.join(&filename), FileType::Regular);
21722179
}
21732180
}
21742181

@@ -2196,7 +2203,11 @@ impl Step for Assemble {
21962203
// See <https://github.com/rust-lang/rust/issues/132719>.
21972204
let src_exe = exe("llvm-objcopy", target_compiler.host);
21982205
let dst_exe = exe("rust-objcopy", target_compiler.host);
2199-
builder.copy_link(&libdir_bin.join(src_exe), &libdir_bin.join(dst_exe));
2206+
builder.copy_link(
2207+
&libdir_bin.join(src_exe),
2208+
&libdir_bin.join(dst_exe),
2209+
FileType::Executable,
2210+
);
22002211
}
22012212

22022213
// In addition to `rust-lld` also install `wasm-component-ld` when
@@ -2212,6 +2223,7 @@ impl Step for Assemble {
22122223
builder.copy_link(
22132224
&wasm_component.tool_path,
22142225
&libdir_bin.join(wasm_component.tool_path.file_name().unwrap()),
2226+
FileType::Executable,
22152227
);
22162228
}
22172229

@@ -2234,7 +2246,7 @@ impl Step for Assemble {
22342246
t!(fs::create_dir_all(bindir));
22352247
let compiler = builder.rustc(target_compiler);
22362248
debug!(src = ?rustc, dst = ?compiler, "linking compiler binary itself");
2237-
builder.copy_link(&rustc, &compiler);
2249+
builder.copy_link(&rustc, &compiler, FileType::Executable);
22382250

22392251
target_compiler
22402252
}
@@ -2260,7 +2272,7 @@ pub fn add_to_sysroot(
22602272
DependencyType::Target => sysroot_dst,
22612273
DependencyType::TargetSelfContained => self_contained_dst,
22622274
};
2263-
builder.copy_link(&path, &dst.join(path.file_name().unwrap()));
2275+
builder.copy_link(&path, &dst.join(path.file_name().unwrap()), FileType::Regular);
22642276
}
22652277
}
22662278

There was a problem loading the remainder of the diff.

0 commit comments

Comments
 (0)
Failed to load comments.