Skip to content

Commit

Permalink
Rearrange where target is created when creating session
Browse files Browse the repository at this point in the history
  • Loading branch information
WaffleLapkin committed Nov 14, 2023
1 parent 236ac91 commit d9bde93
Show file tree
Hide file tree
Showing 4 changed files with 48 additions and 20 deletions.
13 changes: 12 additions & 1 deletion compiler/rustc_interface/src/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,16 @@ fn mk_session(handler: &mut EarlyErrorHandler, matches: getopts::Matches) -> (Se
output_file: None,
temps_dir,
};

let sysroot = match &sessopts.maybe_sysroot {
Some(sysroot) => sysroot.clone(),
None => {
rustc_session::filesearch::get_or_default_sysroot().expect("Failed finding sysroot")
}
};

let target_cfg = rustc_session::config::build_target_config(handler, &sessopts, None, &sysroot);

let sess = build_session(
handler,
sessopts,
Expand All @@ -44,7 +54,8 @@ fn mk_session(handler: &mut EarlyErrorHandler, matches: getopts::Matches) -> (Se
vec![],
Default::default(),
None,
None,
target_cfg,
sysroot,
"",
None,
Arc::default(),
Expand Down
44 changes: 33 additions & 11 deletions compiler/rustc_interface/src/util.rs
Original file line number Diff line number Diff line change
Expand Up @@ -69,18 +69,39 @@ pub fn create_session(
using_internal_features: Arc<AtomicBool>,
expanded_args: Vec<String>,
) -> (Session, Box<dyn CodegenBackend>) {
let codegen_backend = if let Some(make_codegen_backend) = make_codegen_backend {
make_codegen_backend(&sopts)
} else {
get_codegen_backend(
handler,
&sopts.maybe_sysroot,
sopts.unstable_opts.codegen_backend.as_deref(),
)
let sysroot = match &sopts.maybe_sysroot {
Some(sysroot) => sysroot.clone(),
None => filesearch::get_or_default_sysroot().expect("Failed finding sysroot"),
};

// target_override is documented to be called before init(), so this is okay
let target_override = codegen_backend.target_override(&sopts);
let (codegen_backend, target_cfg) = match make_codegen_backend {
Some(make_codegen_backend) => {
let backend = make_codegen_backend(&sopts);

// target_override is documented to be called before init(), so this is okay
let target_override = backend.target_override(&sopts);

let target = config::build_target_config(handler, &sopts, target_override, &sysroot);

(backend, target)
}
None => {
let _target = config::build_target_config(handler, &sopts, None, &sysroot);

let backend = get_codegen_backend(
handler,
&sopts.maybe_sysroot,
sopts.unstable_opts.codegen_backend.as_deref(),
);

// target_override is documented to be called before init(), so this is okay
let target_override = backend.target_override(&sopts);

let target = config::build_target_config(handler, &sopts, target_override, &sysroot);

(backend, target)
}
};

let bundle = match rustc_errors::fluent_bundle(
sopts.maybe_sysroot.clone(),
Expand All @@ -107,7 +128,8 @@ pub fn create_session(
locale_resources,
lint_caps,
file_loader,
target_override,
target_cfg,
sysroot,
rustc_version_str().unwrap_or("unknown"),
ice_file,
using_internal_features,
Expand Down
2 changes: 1 addition & 1 deletion compiler/rustc_session/src/config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1559,7 +1559,7 @@ pub fn build_configuration(sess: &Session, mut user_cfg: Cfg) -> Cfg {
user_cfg
}

pub(super) fn build_target_config(
pub fn build_target_config(
handler: &EarlyErrorHandler,
opts: &Options,
target_override: Option<Target>,
Expand Down
9 changes: 2 additions & 7 deletions compiler/rustc_session/src/session.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1392,7 +1392,8 @@ pub fn build_session(
fluent_resources: Vec<&'static str>,
driver_lint_caps: FxHashMap<lint::LintId, lint::Level>,
file_loader: Option<Box<dyn FileLoader + Send + Sync + 'static>>,
target_override: Option<Target>,
target_cfg: Target,
sysroot: PathBuf,
cfg_version: &'static str,
ice_file: Option<PathBuf>,
using_internal_features: Arc<AtomicBool>,
Expand All @@ -1409,12 +1410,6 @@ pub fn build_session(
let cap_lints_allow = sopts.lint_cap.is_some_and(|cap| cap == lint::Allow);
let can_emit_warnings = !(warnings_allow || cap_lints_allow);

let sysroot = match &sopts.maybe_sysroot {
Some(sysroot) => sysroot.clone(),
None => filesearch::get_or_default_sysroot().expect("Failed finding sysroot"),
};

let target_cfg = config::build_target_config(handler, &sopts, target_override, &sysroot);
let host_triple = TargetTriple::from_triple(config::host_triple());
let (host, target_warnings) = Target::search(&host_triple, &sysroot)
.unwrap_or_else(|e| handler.early_error(format!("Error loading host specification: {e}")));
Expand Down

0 comments on commit d9bde93

Please sign in to comment.