From 2a66685ebfdcd58a3c3fff0caeff6b13774543f5 Mon Sep 17 00:00:00 2001 From: Ryan Levick Date: Wed, 17 Feb 2021 15:07:36 +0100 Subject: [PATCH] Make sure pdbs are copied along with exe and dlls when bootstrapping --- src/bootstrap/compile.rs | 6 ++++-- src/bootstrap/util.rs | 6 ++++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/bootstrap/compile.rs b/src/bootstrap/compile.rs index dee0c154201..7d5e3d05b11 100644 --- a/src/bootstrap/compile.rs +++ b/src/bootstrap/compile.rs @@ -27,7 +27,7 @@ use crate::config::TargetSelection; use crate::dist; use crate::native; use crate::tool::SourceType; -use crate::util::{exe, is_dylib, symlink_dir}; +use crate::util::{exe, is_debug_info, is_dylib, symlink_dir}; use crate::{Compiler, DependencyType, GitRepo, Mode}; #[derive(Debug, PartialOrd, Ord, Copy, Clone, PartialEq, Eq, Hash)] @@ -1049,7 +1049,8 @@ impl Step for Assemble { let src_libdir = builder.sysroot_libdir(build_compiler, host); for f in builder.read_dir(&src_libdir) { let filename = f.file_name().into_string().unwrap(); - if is_dylib(&filename) && !proc_macros.contains(&filename) { + if (is_dylib(&filename) || is_debug_info(&filename)) && !proc_macros.contains(&filename) + { builder.copy(&f.path(), &rustc_libdir.join(&filename)); } } @@ -1166,6 +1167,7 @@ pub fn run_cargo( if !(filename.ends_with(".rlib") || filename.ends_with(".lib") || filename.ends_with(".a") + || is_debug_info(&filename) || is_dylib(&filename) || (is_check && filename.ends_with(".rmeta"))) { diff --git a/src/bootstrap/util.rs b/src/bootstrap/util.rs index b35d1b99fa5..b4421a82714 100644 --- a/src/bootstrap/util.rs +++ b/src/bootstrap/util.rs @@ -32,6 +32,12 @@ pub fn is_dylib(name: &str) -> bool { name.ends_with(".dylib") || name.ends_with(".so") || name.ends_with(".dll") } +/// Returns `true` if the file name given looks like a debug info file +pub fn is_debug_info(name: &str) -> bool { + // FIXME: consider split debug info on other platforms (e.g., Linux, macOS) + name.ends_with(".pdb") +} + /// Returns the corresponding relative library directory that the compiler's /// dylibs will be found in. pub fn libdir(target: TargetSelection) -> &'static str {