remap cargo dependencies to /rust/deps

This commit is contained in:
Pietro Albini 2023-09-15 16:31:16 +02:00
parent 6eb3e97d55
commit 85c0ce24cc
No known key found for this signature in database
GPG Key ID: CD76B35F7734769E
4 changed files with 33 additions and 1 deletions

View File

@ -50,6 +50,7 @@ dependencies = [
"fd-lock",
"filetime",
"hex",
"home",
"ignore",
"junction",
"libc",
@ -350,6 +351,15 @@ version = "0.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
[[package]]
name = "home"
version = "0.5.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "747309b4b440c06d57b0b25f2aee03ee9b5e5397d288c60e21fc709bb98a7408"
dependencies = [
"winapi",
]
[[package]]
name = "ignore"
version = "0.4.18"

View File

@ -40,6 +40,7 @@ clap_complete = "4.4.3"
cmake = "0.1.38"
filetime = "0.2"
hex = "0.4"
home = "0.5.4"
ignore = "0.4.10"
libc = "0.2"
object = { version = "0.32.0", default-features = false, features = ["archive", "coff", "read_core", "unaligned"] }

View File

@ -124,6 +124,13 @@ fn main() {
if let Ok(map) = env::var("RUSTC_DEBUGINFO_MAP") {
cmd.arg("--remap-path-prefix").arg(&map);
}
// The remap flags for Cargo registry sources need to be passed after the remapping for the
// Rust source code directory, to handle cases when $CARGO_HOME is inside the source directory.
if let Ok(maps) = env::var("RUSTC_CARGO_REGISTRY_SRC_TO_REMAP") {
for map in maps.split('\t') {
cmd.arg("--remap-path-prefix").arg(map);
}
}
// Force all crates compiled by this compiler to (a) be unstable and (b)
// allow the `rustc_private` feature to link to other unstable crates

View File

@ -2,7 +2,7 @@
use std::cell::{Cell, RefCell};
use std::collections::BTreeSet;
use std::env;
use std::ffi::OsStr;
use std::ffi::{OsStr, OsString};
use std::fmt::{Debug, Write};
use std::fs::{self, File};
use std::hash::Hash;
@ -1767,6 +1767,20 @@ pub fn cargo(
cargo.env("CFG_VIRTUAL_RUST_SOURCE_BASE_DIR", map_to);
}
if self.config.rust_remap_debuginfo {
// FIXME: handle vendored sources
let registry_src = t!(home::cargo_home()).join("registry").join("src");
let mut env_var = OsString::new();
for entry in t!(std::fs::read_dir(registry_src)) {
if !env_var.is_empty() {
env_var.push("\t");
}
env_var.push(t!(entry).path());
env_var.push("=/rust/deps");
}
cargo.env("RUSTC_CARGO_REGISTRY_SRC_TO_REMAP", env_var);
}
// Enable usage of unstable features
cargo.env("RUSTC_BOOTSTRAP", "1");
self.add_rust_test_threads(&mut cargo);