@@ -65,16 +65,21 @@ pub fn create_session(
65
65
lint_caps : FxHashMap < lint:: LintId , lint:: Level > ,
66
66
descriptions : Registry ,
67
67
) -> ( Lrc < Session > , Lrc < Box < dyn CodegenBackend > > ) {
68
+ let codegen_backend = get_codegen_backend ( & sopts) ;
69
+ // target_override is documented to be called before init(), so this is okay
70
+ let target_override = codegen_backend. target_override ( & sopts) ;
71
+
68
72
let mut sess = session:: build_session (
69
73
sopts,
70
74
input_path,
71
75
descriptions,
72
76
diagnostic_output,
73
77
lint_caps,
74
78
file_loader,
79
+ target_override,
75
80
) ;
76
81
77
- let codegen_backend = get_codegen_backend ( & sess) ;
82
+ codegen_backend. init ( & sess) ;
78
83
79
84
let mut cfg = config:: build_configuration ( & sess, config:: to_crate_config ( cfg) ) ;
80
85
add_configuration ( & mut cfg, & mut sess, & * codegen_backend) ;
@@ -219,13 +224,13 @@ fn load_backend_from_dylib(path: &Path) -> fn() -> Box<dyn CodegenBackend> {
219
224
}
220
225
}
221
226
222
- pub fn get_codegen_backend ( sess : & Session ) -> Box < dyn CodegenBackend > {
227
+ pub fn get_codegen_backend ( sopts : & config :: Options ) -> Box < dyn CodegenBackend > {
223
228
static INIT : Once = Once :: new ( ) ;
224
229
225
230
static mut LOAD : fn ( ) -> Box < dyn CodegenBackend > = || unreachable ! ( ) ;
226
231
227
232
INIT . call_once ( || {
228
- let codegen_name = sess . opts . debugging_opts . codegen_backend . as_deref ( ) . unwrap_or ( "llvm" ) ;
233
+ let codegen_name = sopts . debugging_opts . codegen_backend . as_deref ( ) . unwrap_or ( "llvm" ) ;
229
234
let backend = match codegen_name {
230
235
filename if filename. contains ( '.' ) => load_backend_from_dylib ( filename. as_ref ( ) ) ,
231
236
codegen_name => get_builtin_codegen_backend ( codegen_name) ,
@@ -235,9 +240,7 @@ pub fn get_codegen_backend(sess: &Session) -> Box<dyn CodegenBackend> {
235
240
LOAD = backend;
236
241
}
237
242
} ) ;
238
- let backend = unsafe { LOAD ( ) } ;
239
- backend. init ( sess) ;
240
- backend
243
+ unsafe { LOAD ( ) }
241
244
}
242
245
243
246
// This is used for rustdoc, but it uses similar machinery to codegen backend
0 commit comments