Skip to content

Commit 0b0415f

Browse files
committed
Rearrange where target is created when creating session
1 parent 9ace9da commit 0b0415f

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
@@ -57,6 +57,16 @@ fn mk_session(handler: &mut EarlyErrorHandler, matches: getopts::Matches) -> (Se
5757
output_file: None,
5858
temps_dir,
5959
};
60+
61+
let sysroot = match &sessopts.maybe_sysroot {
62+
Some(sysroot) => sysroot.clone(),
63+
None => {
64+
rustc_session::filesearch::get_or_default_sysroot().expect("Failed finding sysroot")
65+
}
66+
};
67+
68+
let target_cfg = rustc_session::config::build_target_config(handler, &sessopts, None, &sysroot);
69+
6070
let sess = build_session(
6171
handler,
6272
sessopts,
@@ -66,7 +76,8 @@ fn mk_session(handler: &mut EarlyErrorHandler, matches: getopts::Matches) -> (Se
6676
vec![],
6777
Default::default(),
6878
None,
69-
None,
79+
target_cfg,
80+
sysroot,
7081
"",
7182
None,
7283
Default::default(),

compiler/rustc_interface/src/util.rs

+33-11
Original file line numberDiff line numberDiff line change
@@ -73,18 +73,39 @@ pub fn create_session(
7373
ice_file: Option<PathBuf>,
7474
expanded_args: Vec<String>,
7575
) -> (Session, Box<dyn CodegenBackend>) {
76-
let codegen_backend = if let Some(make_codegen_backend) = make_codegen_backend {
77-
make_codegen_backend(&sopts)
78-
} else {
79-
get_codegen_backend(
80-
handler,
81-
&sopts.maybe_sysroot,
82-
sopts.unstable_opts.codegen_backend.as_deref(),
83-
)
76+
let sysroot = match &sopts.maybe_sysroot {
77+
Some(sysroot) => sysroot.clone(),
78+
None => filesearch::get_or_default_sysroot().expect("Failed finding sysroot"),
8479
};
8580

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

89110
let bundle = match rustc_errors::fluent_bundle(
90111
sopts.maybe_sysroot.clone(),
@@ -111,7 +132,8 @@ pub fn create_session(
111132
locale_resources,
112133
lint_caps,
113134
file_loader,
114-
target_override,
135+
target_cfg,
136+
sysroot,
115137
rustc_version_str().unwrap_or("unknown"),
116138
ice_file,
117139
expanded_args,

compiler/rustc_session/src/config.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1554,7 +1554,7 @@ pub fn build_configuration(sess: &Session, mut user_cfg: CrateConfig) -> CrateCo
15541554
user_cfg
15551555
}
15561556

1557-
pub(super) fn build_target_config(
1557+
pub fn build_target_config(
15581558
handler: &EarlyErrorHandler,
15591559
opts: &Options,
15601560
target_override: Option<Target>,

compiler/rustc_session/src/session.rs

+2-7
Original file line numberDiff line numberDiff line change
@@ -1330,7 +1330,8 @@ pub fn build_session(
13301330
fluent_resources: Vec<&'static str>,
13311331
driver_lint_caps: FxHashMap<lint::LintId, lint::Level>,
13321332
file_loader: Option<Box<dyn FileLoader + Send + Sync + 'static>>,
1333-
target_override: Option<Target>,
1333+
target_cfg: Target,
1334+
sysroot: PathBuf,
13341335
cfg_version: &'static str,
13351336
ice_file: Option<PathBuf>,
13361337
expanded_args: Vec<String>,
@@ -1346,12 +1347,6 @@ pub fn build_session(
13461347
let cap_lints_allow = sopts.lint_cap.is_some_and(|cap| cap == lint::Allow);
13471348
let can_emit_warnings = !(warnings_allow || cap_lints_allow);
13481349

1349-
let sysroot = match &sopts.maybe_sysroot {
1350-
Some(sysroot) => sysroot.clone(),
1351-
None => filesearch::get_or_default_sysroot().expect("Failed finding sysroot"),
1352-
};
1353-
1354-
let target_cfg = config::build_target_config(handler, &sopts, target_override, &sysroot);
13551350
let host_triple = TargetTriple::from_triple(config::host_triple());
13561351
let (host, target_warnings) = Target::search(&host_triple, &sysroot)
13571352
.unwrap_or_else(|e| handler.early_error(format!("Error loading host specification: {e}")));

0 commit comments

Comments
 (0)