Skip to content

Commit d9bde93

Browse files
committed
Rearrange where target is created when creating session
1 parent 236ac91 commit d9bde93

File tree

4 files changed

+48
-20
lines changed

4 files changed

+48
-20
lines changed

compiler/rustc_interface/src/tests.rs

+12-1
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,16 @@ fn mk_session(handler: &mut EarlyErrorHandler, matches: getopts::Matches) -> (Se
3535
output_file: None,
3636
temps_dir,
3737
};
38+
39+
let sysroot = match &sessopts.maybe_sysroot {
40+
Some(sysroot) => sysroot.clone(),
41+
None => {
42+
rustc_session::filesearch::get_or_default_sysroot().expect("Failed finding sysroot")
43+
}
44+
};
45+
46+
let target_cfg = rustc_session::config::build_target_config(handler, &sessopts, None, &sysroot);
47+
3848
let sess = build_session(
3949
handler,
4050
sessopts,
@@ -44,7 +54,8 @@ fn mk_session(handler: &mut EarlyErrorHandler, matches: getopts::Matches) -> (Se
4454
vec![],
4555
Default::default(),
4656
None,
47-
None,
57+
target_cfg,
58+
sysroot,
4859
"",
4960
None,
5061
Arc::default(),

compiler/rustc_interface/src/util.rs

+33-11
Original file line numberDiff line numberDiff line change
@@ -69,18 +69,39 @@ pub fn create_session(
6969
using_internal_features: Arc<AtomicBool>,
7070
expanded_args: Vec<String>,
7171
) -> (Session, Box<dyn CodegenBackend>) {
72-
let codegen_backend = if let Some(make_codegen_backend) = make_codegen_backend {
73-
make_codegen_backend(&sopts)
74-
} else {
75-
get_codegen_backend(
76-
handler,
77-
&sopts.maybe_sysroot,
78-
sopts.unstable_opts.codegen_backend.as_deref(),
79-
)
72+
let sysroot = match &sopts.maybe_sysroot {
73+
Some(sysroot) => sysroot.clone(),
74+
None => filesearch::get_or_default_sysroot().expect("Failed finding sysroot"),
8075
};
8176

82-
// target_override is documented to be called before init(), so this is okay
83-
let target_override = codegen_backend.target_override(&sopts);
77+
let (codegen_backend, target_cfg) = match make_codegen_backend {
78+
Some(make_codegen_backend) => {
79+
let backend = make_codegen_backend(&sopts);
80+
81+
// target_override is documented to be called before init(), so this is okay
82+
let target_override = backend.target_override(&sopts);
83+
84+
let target = config::build_target_config(handler, &sopts, target_override, &sysroot);
85+
86+
(backend, target)
87+
}
88+
None => {
89+
let _target = config::build_target_config(handler, &sopts, None, &sysroot);
90+
91+
let backend = get_codegen_backend(
92+
handler,
93+
&sopts.maybe_sysroot,
94+
sopts.unstable_opts.codegen_backend.as_deref(),
95+
);
96+
97+
// target_override is documented to be called before init(), so this is okay
98+
let target_override = backend.target_override(&sopts);
99+
100+
let target = config::build_target_config(handler, &sopts, target_override, &sysroot);
101+
102+
(backend, target)
103+
}
104+
};
84105

85106
let bundle = match rustc_errors::fluent_bundle(
86107
sopts.maybe_sysroot.clone(),
@@ -107,7 +128,8 @@ pub fn create_session(
107128
locale_resources,
108129
lint_caps,
109130
file_loader,
110-
target_override,
131+
target_cfg,
132+
sysroot,
111133
rustc_version_str().unwrap_or("unknown"),
112134
ice_file,
113135
using_internal_features,

compiler/rustc_session/src/config.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1559,7 +1559,7 @@ pub fn build_configuration(sess: &Session, mut user_cfg: Cfg) -> Cfg {
15591559
user_cfg
15601560
}
15611561

1562-
pub(super) fn build_target_config(
1562+
pub fn build_target_config(
15631563
handler: &EarlyErrorHandler,
15641564
opts: &Options,
15651565
target_override: Option<Target>,

compiler/rustc_session/src/session.rs

+2-7
Original file line numberDiff line numberDiff line change
@@ -1392,7 +1392,8 @@ pub fn build_session(
13921392
fluent_resources: Vec<&'static str>,
13931393
driver_lint_caps: FxHashMap<lint::LintId, lint::Level>,
13941394
file_loader: Option<Box<dyn FileLoader + Send + Sync + 'static>>,
1395-
target_override: Option<Target>,
1395+
target_cfg: Target,
1396+
sysroot: PathBuf,
13961397
cfg_version: &'static str,
13971398
ice_file: Option<PathBuf>,
13981399
using_internal_features: Arc<AtomicBool>,
@@ -1409,12 +1410,6 @@ pub fn build_session(
14091410
let cap_lints_allow = sopts.lint_cap.is_some_and(|cap| cap == lint::Allow);
14101411
let can_emit_warnings = !(warnings_allow || cap_lints_allow);
14111412

1412-
let sysroot = match &sopts.maybe_sysroot {
1413-
Some(sysroot) => sysroot.clone(),
1414-
None => filesearch::get_or_default_sysroot().expect("Failed finding sysroot"),
1415-
};
1416-
1417-
let target_cfg = config::build_target_config(handler, &sopts, target_override, &sysroot);
14181413
let host_triple = TargetTriple::from_triple(config::host_triple());
14191414
let (host, target_warnings) = Target::search(&host_triple, &sysroot)
14201415
.unwrap_or_else(|e| handler.early_error(format!("Error loading host specification: {e}")));

0 commit comments

Comments
 (0)