@@ -65,16 +65,21 @@ pub fn create_session(
6565 lint_caps : FxHashMap < lint:: LintId , lint:: Level > ,
6666 descriptions : Registry ,
6767) -> ( Lrc < Session > , Lrc < Box < dyn CodegenBackend > > ) {
68+ let codegen_backend = get_codegen_backend ( sopts. debugging_opts . codegen_backend . as_deref ( ) ) ;
69+ // target_override is documented to be called before init(), so this is okay
70+ let target_override = codegen_backend. target_override ( & sopts) ;
71+
6872 let mut sess = session:: build_session (
6973 sopts,
7074 input_path,
7175 descriptions,
7276 diagnostic_output,
7377 lint_caps,
7478 file_loader,
79+ target_override,
7580 ) ;
7681
77- let codegen_backend = get_codegen_backend ( & sess) ;
82+ codegen_backend. init ( & sess) ;
7883
7984 let mut cfg = config:: build_configuration ( & sess, config:: to_crate_config ( cfg) ) ;
8085 add_configuration ( & mut cfg, & mut sess, & * codegen_backend) ;
@@ -219,13 +224,13 @@ fn load_backend_from_dylib(path: &Path) -> fn() -> Box<dyn CodegenBackend> {
219224 }
220225}
221226
222- pub fn get_codegen_backend ( sess : & Session ) -> Box < dyn CodegenBackend > {
227+ pub fn get_codegen_backend ( codegen_name : Option < & str > ) -> Box < dyn CodegenBackend > {
223228 static INIT : Once = Once :: new ( ) ;
224229
225230 static mut LOAD : fn ( ) -> Box < dyn CodegenBackend > = || unreachable ! ( ) ;
226231
227232 INIT . call_once ( || {
228- let codegen_name = sess . opts . debugging_opts . codegen_backend . as_deref ( ) . unwrap_or ( "llvm" ) ;
233+ let codegen_name = codegen_name . unwrap_or ( "llvm" ) ;
229234 let backend = match codegen_name {
230235 filename if filename. contains ( '.' ) => load_backend_from_dylib ( filename. as_ref ( ) ) ,
231236 codegen_name => get_builtin_codegen_backend ( codegen_name) ,
@@ -235,9 +240,7 @@ pub fn get_codegen_backend(sess: &Session) -> Box<dyn CodegenBackend> {
235240 LOAD = backend;
236241 }
237242 } ) ;
238- let backend = unsafe { LOAD ( ) } ;
239- backend. init ( sess) ;
240- backend
243+ unsafe { LOAD ( ) }
241244}
242245
243246// This is used for rustdoc, but it uses similar machinery to codegen backend
0 commit comments