Skip to content

Commit 30f9471

Browse files
committed
[RFC 3127 - Trim Paths]: Add unstable option and parsing
1 parent 631a116 commit 30f9471

File tree

4 files changed

+58
-2
lines changed

4 files changed

+58
-2
lines changed

Cargo.lock

+1
Original file line numberDiff line numberDiff line change
@@ -4456,6 +4456,7 @@ dependencies = [
44564456
name = "rustc_session"
44574457
version = "0.0.0"
44584458
dependencies = [
4459+
"bitflags 1.3.2",
44594460
"getopts",
44604461
"libc",
44614462
"rustc_ast",

compiler/rustc_session/Cargo.toml

+1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ version = "0.0.0"
44
edition = "2021"
55

66
[dependencies]
7+
bitflags = "1.2.1"
78
getopts = "0.2"
89
rustc_macros = { path = "../rustc_macros" }
910
tracing = "0.1"

compiler/rustc_session/src/config.rs

+29-2
Original file line numberDiff line numberDiff line change
@@ -1018,6 +1018,32 @@ impl OutputFilenames {
10181018
}
10191019
}
10201020

1021+
bitflags::bitflags! {
1022+
/// Scopes used to determined if it need to apply to --remap-path-prefix
1023+
pub struct RemapPathScopeComponents: u8 {
1024+
/// Apply remappings to the expansion of std::file!() macro
1025+
const MACRO = 1 << 0;
1026+
/// Apply remappings to printed compiler diagnostics
1027+
const DIAGNOSTICS = 1 << 1;
1028+
/// Apply remappings to debug information only when they are written to
1029+
/// compiled executables or libraries, but not when they are in split
1030+
/// debuginfo files
1031+
const UNSPLIT_DEBUGINFO = 1 << 2;
1032+
/// Apply remappings to debug information only when they are written to
1033+
/// split debug information files, but not in compiled executables or
1034+
/// libraries
1035+
const SPLIT_DEBUGINFO = 1 << 3;
1036+
/// Apply remappings to the paths pointing to split debug information
1037+
/// files. Does nothing when these files are not generated.
1038+
const SPLIT_DEBUGINFO_PATH = 1 << 4;
1039+
1040+
/// An alias for macro,unsplit-debuginfo,split-debuginfo-path. This
1041+
/// ensures all paths in compiled executables or libraries are remapped
1042+
/// but not elsewhere.
1043+
const OBJECT = Self::MACRO.bits | Self::UNSPLIT_DEBUGINFO.bits | Self::SPLIT_DEBUGINFO_PATH.bits;
1044+
}
1045+
}
1046+
10211047
pub fn host_triple() -> &'static str {
10221048
// Get the host triple out of the build environment. This ensures that our
10231049
// idea of the host triple is the same as for the set of libraries we've
@@ -3173,8 +3199,8 @@ pub(crate) mod dep_tracking {
31733199
BranchProtection, CFGuard, CFProtection, CrateType, DebugInfo, DebugInfoCompression,
31743200
ErrorOutputType, InstrumentCoverage, InstrumentXRay, LinkerPluginLto, LocationDetail,
31753201
LtoCli, OomStrategy, OptLevel, OutFileName, OutputType, OutputTypes, Polonius,
3176-
ResolveDocLinks, SourceFileHashAlgorithm, SplitDwarfKind, SwitchWithOptPath,
3177-
SymbolManglingVersion, TraitSolver, TrimmedDefPaths,
3202+
RemapPathScopeComponents, ResolveDocLinks, SourceFileHashAlgorithm, SplitDwarfKind,
3203+
SwitchWithOptPath, SymbolManglingVersion, TraitSolver, TrimmedDefPaths,
31783204
};
31793205
use crate::lint;
31803206
use crate::options::WasiExecModel;
@@ -3268,6 +3294,7 @@ pub(crate) mod dep_tracking {
32683294
StackProtector,
32693295
SwitchWithOptPath,
32703296
SymbolManglingVersion,
3297+
RemapPathScopeComponents,
32713298
SourceFileHashAlgorithm,
32723299
TrimmedDefPaths,
32733300
OutFileName,

compiler/rustc_session/src/options.rs

+27
Original file line numberDiff line numberDiff line change
@@ -427,6 +427,7 @@ mod desc {
427427
pub const parse_proc_macro_execution_strategy: &str =
428428
"one of supported execution strategies (`same-thread`, or `cross-thread`)";
429429
pub const parse_dump_solver_proof_tree: &str = "one of: `always`, `on-request`, `on-error`";
430+
pub const parse_remap_path_scope: &str = "comma separated list of scopes: `macro`, `diagnostics`, `unsplit-debuginfo`, `split-debuginfo`, `split-debuginfo-path`, `object`, `all`";
430431
}
431432

432433
mod parse {
@@ -1095,6 +1096,30 @@ mod parse {
10951096
true
10961097
}
10971098

1099+
pub(crate) fn parse_remap_path_scope(
1100+
slot: &mut RemapPathScopeComponents,
1101+
v: Option<&str>,
1102+
) -> bool {
1103+
if let Some(v) = v {
1104+
*slot = RemapPathScopeComponents::empty();
1105+
for s in v.split(',') {
1106+
*slot |= match s {
1107+
"macro" => RemapPathScopeComponents::MACRO,
1108+
"diagnostics" => RemapPathScopeComponents::DIAGNOSTICS,
1109+
"unsplit-debuginfo" => RemapPathScopeComponents::UNSPLIT_DEBUGINFO,
1110+
"split-debuginfo" => RemapPathScopeComponents::SPLIT_DEBUGINFO,
1111+
"split-debuginfo-path" => RemapPathScopeComponents::SPLIT_DEBUGINFO_PATH,
1112+
"object" => RemapPathScopeComponents::OBJECT,
1113+
"all" => RemapPathScopeComponents::all(),
1114+
_ => return false,
1115+
}
1116+
}
1117+
true
1118+
} else {
1119+
false
1120+
}
1121+
}
1122+
10981123
pub(crate) fn parse_relocation_model(slot: &mut Option<RelocModel>, v: Option<&str>) -> bool {
10991124
match v.and_then(|s| RelocModel::from_str(s).ok()) {
11001125
Some(relocation_model) => *slot = Some(relocation_model),
@@ -1731,6 +1756,8 @@ options! {
17311756
"choose which RELRO level to use"),
17321757
remap_cwd_prefix: Option<PathBuf> = (None, parse_opt_pathbuf, [TRACKED],
17331758
"remap paths under the current working directory to this path prefix"),
1759+
remap_path_scope: RemapPathScopeComponents = (RemapPathScopeComponents::all(), parse_remap_path_scope, [TRACKED],
1760+
"remap path scope (default: all)"),
17341761
remark_dir: Option<PathBuf> = (None, parse_opt_pathbuf, [UNTRACKED],
17351762
"directory into which to write optimization remarks (if not specified, they will be \
17361763
written to standard error output)"),

0 commit comments

Comments
 (0)