From d9bde93d58fe69a836348cb3414e275723087672 Mon Sep 17 00:00:00 2001 From: Maybe Waffle Date: Mon, 16 Oct 2023 12:27:11 +0000 Subject: [PATCH] Rearrange where target is created when creating session --- compiler/rustc_interface/src/tests.rs | 13 +++++++- compiler/rustc_interface/src/util.rs | 44 ++++++++++++++++++++------- compiler/rustc_session/src/config.rs | 2 +- compiler/rustc_session/src/session.rs | 9 ++---- 4 files changed, 48 insertions(+), 20 deletions(-) diff --git a/compiler/rustc_interface/src/tests.rs b/compiler/rustc_interface/src/tests.rs index 594283168c98d..d25865090f30d 100644 --- a/compiler/rustc_interface/src/tests.rs +++ b/compiler/rustc_interface/src/tests.rs @@ -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, @@ -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(), diff --git a/compiler/rustc_interface/src/util.rs b/compiler/rustc_interface/src/util.rs index 5fde98c7c062e..b35b1e0756060 100644 --- a/compiler/rustc_interface/src/util.rs +++ b/compiler/rustc_interface/src/util.rs @@ -69,18 +69,39 @@ pub fn create_session( using_internal_features: Arc, expanded_args: Vec, ) -> (Session, Box) { - 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(), @@ -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, diff --git a/compiler/rustc_session/src/config.rs b/compiler/rustc_session/src/config.rs index a8ebab4ae333c..e514278e646a8 100644 --- a/compiler/rustc_session/src/config.rs +++ b/compiler/rustc_session/src/config.rs @@ -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, diff --git a/compiler/rustc_session/src/session.rs b/compiler/rustc_session/src/session.rs index f823b55615402..9ec001c63fc70 100644 --- a/compiler/rustc_session/src/session.rs +++ b/compiler/rustc_session/src/session.rs @@ -1392,7 +1392,8 @@ pub fn build_session( fluent_resources: Vec<&'static str>, driver_lint_caps: FxHashMap, file_loader: Option>, - target_override: Option, + target_cfg: Target, + sysroot: PathBuf, cfg_version: &'static str, ice_file: Option, using_internal_features: Arc, @@ -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}")));