@@ -73,7 +73,10 @@ pub fn create_session(
73
73
let codegen_backend = if let Some ( make_codegen_backend) = make_codegen_backend {
74
74
make_codegen_backend ( & sopts)
75
75
} else {
76
- get_codegen_backend ( & sopts)
76
+ get_codegen_backend (
77
+ & sopts. maybe_sysroot ,
78
+ sopts. debugging_opts . codegen_backend . as_ref ( ) . map ( |name| & name[ ..] ) ,
79
+ )
77
80
} ;
78
81
79
82
// target_override is documented to be called before init(), so this is okay
@@ -241,7 +244,13 @@ fn load_backend_from_dylib(path: &Path) -> fn() -> Box<dyn CodegenBackend> {
241
244
}
242
245
}
243
246
244
- pub fn get_codegen_backend ( sopts : & config:: Options ) -> Box < dyn CodegenBackend > {
247
+ /// Get the codegen backend based on the name and specified sysroot.
248
+ ///
249
+ /// A name of `None` indicates that the default backend should be used.
250
+ pub fn get_codegen_backend (
251
+ maybe_sysroot : & Option < PathBuf > ,
252
+ backend_name : Option < & str > ,
253
+ ) -> Box < dyn CodegenBackend > {
245
254
static INIT : Once = Once :: new ( ) ;
246
255
247
256
static mut LOAD : fn ( ) -> Box < dyn CodegenBackend > = || unreachable ! ( ) ;
@@ -253,16 +262,11 @@ pub fn get_codegen_backend(sopts: &config::Options) -> Box<dyn CodegenBackend> {
253
262
#[ cfg( not( feature = "llvm" ) ) ]
254
263
const DEFAULT_CODEGEN_BACKEND : & str = "cranelift" ;
255
264
256
- let codegen_name = sopts
257
- . debugging_opts
258
- . codegen_backend
259
- . as_ref ( )
260
- . map ( |name| & name[ ..] )
261
- . unwrap_or ( DEFAULT_CODEGEN_BACKEND ) ;
262
-
263
- let backend = match codegen_name {
265
+ let backend = match backend_name. unwrap_or ( DEFAULT_CODEGEN_BACKEND ) {
264
266
filename if filename. contains ( '.' ) => load_backend_from_dylib ( filename. as_ref ( ) ) ,
265
- codegen_name => get_builtin_codegen_backend ( & sopts. maybe_sysroot , codegen_name) ,
267
+ #[ cfg( feature = "llvm" ) ]
268
+ "llvm" => rustc_codegen_llvm:: LlvmCodegenBackend :: new,
269
+ backend_name => get_codegen_sysroot ( maybe_sysroot, backend_name) ,
266
270
} ;
267
271
268
272
unsafe {
@@ -387,17 +391,6 @@ fn sysroot_candidates() -> Vec<PathBuf> {
387
391
}
388
392
}
389
393
390
- pub fn get_builtin_codegen_backend (
391
- maybe_sysroot : & Option < PathBuf > ,
392
- backend_name : & str ,
393
- ) -> fn ( ) -> Box < dyn CodegenBackend > {
394
- match backend_name {
395
- #[ cfg( feature = "llvm" ) ]
396
- "llvm" => rustc_codegen_llvm:: LlvmCodegenBackend :: new,
397
- _ => get_codegen_sysroot ( maybe_sysroot, backend_name) ,
398
- }
399
- }
400
-
401
394
pub fn get_codegen_sysroot (
402
395
maybe_sysroot : & Option < PathBuf > ,
403
396
backend_name : & str ,
0 commit comments