diff options
| author | bjorn3 <bjorn3@users.noreply.github.com> | 2021-05-29 15:14:05 +0200 |
|---|---|---|
| committer | bjorn3 <bjorn3@users.noreply.github.com> | 2021-06-04 13:20:04 +0200 |
| commit | 1870f9b05f42b36747a9acce8cbb0e3dc81a3c9c (patch) | |
| tree | 073dd0885d5fe60ae7eb0d6d7de134c54a9a87d7 /compiler/rustc_interface/src | |
| parent | f04a2d308e62c5ad0ab34b2e5fbcc0dfa32656fc (diff) | |
| download | rust-1870f9b05f42b36747a9acce8cbb0e3dc81a3c9c.tar.gz rust-1870f9b05f42b36747a9acce8cbb0e3dc81a3c9c.zip | |
Allow printing the version of the default codegen backend if it isn't llvm
Diffstat (limited to 'compiler/rustc_interface/src')
| -rw-r--r-- | compiler/rustc_interface/src/util.rs | 37 |
1 files changed, 15 insertions, 22 deletions
diff --git a/compiler/rustc_interface/src/util.rs b/compiler/rustc_interface/src/util.rs index 15cda299208..12309284dcd 100644 --- a/compiler/rustc_interface/src/util.rs +++ b/compiler/rustc_interface/src/util.rs @@ -73,7 +73,10 @@ pub fn create_session( let codegen_backend = if let Some(make_codegen_backend) = make_codegen_backend { make_codegen_backend(&sopts) } else { - get_codegen_backend(&sopts) + get_codegen_backend( + &sopts.maybe_sysroot, + sopts.debugging_opts.codegen_backend.as_ref().map(|name| &name[..]), + ) }; // 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> { } } -pub fn get_codegen_backend(sopts: &config::Options) -> Box<dyn CodegenBackend> { +/// Get the codegen backend based on the name and specified sysroot. +/// +/// A name of `None` indicates that the default backend should be used. +pub fn get_codegen_backend( + maybe_sysroot: &Option<PathBuf>, + backend_name: Option<&str>, +) -> Box<dyn CodegenBackend> { static INIT: Once = Once::new(); static mut LOAD: fn() -> Box<dyn CodegenBackend> = || unreachable!(); @@ -253,16 +262,11 @@ pub fn get_codegen_backend(sopts: &config::Options) -> Box<dyn CodegenBackend> { #[cfg(not(feature = "llvm"))] const DEFAULT_CODEGEN_BACKEND: &str = "cranelift"; - let codegen_name = sopts - .debugging_opts - .codegen_backend - .as_ref() - .map(|name| &name[..]) - .unwrap_or(DEFAULT_CODEGEN_BACKEND); - - let backend = match codegen_name { + let backend = match backend_name.unwrap_or(DEFAULT_CODEGEN_BACKEND) { filename if filename.contains('.') => load_backend_from_dylib(filename.as_ref()), - codegen_name => get_builtin_codegen_backend(&sopts.maybe_sysroot, codegen_name), + #[cfg(feature = "llvm")] + "llvm" => rustc_codegen_llvm::LlvmCodegenBackend::new, + backend_name => get_codegen_sysroot(maybe_sysroot, backend_name), }; unsafe { @@ -387,17 +391,6 @@ fn sysroot_candidates() -> Vec<PathBuf> { } } -pub fn get_builtin_codegen_backend( - maybe_sysroot: &Option<PathBuf>, - backend_name: &str, -) -> fn() -> Box<dyn CodegenBackend> { - match backend_name { - #[cfg(feature = "llvm")] - "llvm" => rustc_codegen_llvm::LlvmCodegenBackend::new, - _ => get_codegen_sysroot(maybe_sysroot, backend_name), - } -} - pub fn get_codegen_sysroot( maybe_sysroot: &Option<PathBuf>, backend_name: &str, |
