about summary refs log tree commit diff
path: root/src/librustc_codegen_utils/codegen_backend.rs
diff options
context:
space:
mode:
authorbjorn3 <bjorn3@users.noreply.github.com>2019-03-01 16:53:21 +0100
committerbjorn3 <bjorn3@users.noreply.github.com>2019-03-16 10:54:38 +0100
commitca2ff089f37e3b3186df8f4b4bd85d82eb5facc7 (patch)
tree8dede54a98ab2823ca0a4ec2ca18227825bff5f7 /src/librustc_codegen_utils/codegen_backend.rs
parent52e885628e4317aa3f158622435927eb29b812e9 (diff)
downloadrust-ca2ff089f37e3b3186df8f4b4bd85d82eb5facc7.tar.gz
rust-ca2ff089f37e3b3186df8f4b4bd85d82eb5facc7.zip
Remove MetadataOnlyCodegenBackend
Diffstat (limited to 'src/librustc_codegen_utils/codegen_backend.rs')
-rw-r--r--src/librustc_codegen_utils/codegen_backend.rs146
1 files changed, 2 insertions, 144 deletions
diff --git a/src/librustc_codegen_utils/codegen_backend.rs b/src/librustc_codegen_utils/codegen_backend.rs
index 29bcb4f2e64..56eaffb1ca3 100644
--- a/src/librustc_codegen_utils/codegen_backend.rs
+++ b/src/librustc_codegen_utils/codegen_backend.rs
@@ -10,27 +10,16 @@
 #![feature(box_syntax)]
 
 use std::any::Any;
-use std::io::Write;
-use std::fs;
-use std::path::Path;
-use std::sync::{mpsc, Arc};
-
-use rustc_data_structures::owning_ref::OwningRef;
-use flate2::Compression;
-use flate2::write::DeflateEncoder;
+use std::sync::mpsc;
 
 use syntax::symbol::Symbol;
-use rustc::hir::def_id::LOCAL_CRATE;
 use rustc::session::Session;
 use rustc::util::common::ErrorReported;
-use rustc::session::config::{CrateType, OutputFilenames, PrintRequest};
+use rustc::session::config::{OutputFilenames, PrintRequest};
 use rustc::ty::TyCtxt;
 use rustc::ty::query::Providers;
-use rustc::middle::cstore::EncodedMetadata;
 use rustc::middle::cstore::MetadataLoader;
 use rustc::dep_graph::DepGraph;
-use rustc_target::spec::Target;
-use crate::link::out_filename;
 
 pub use rustc_data_structures::sync::MetadataRef;
 
@@ -64,134 +53,3 @@ pub trait CodegenBackend {
         outputs: &OutputFilenames,
     ) -> Result<(), ErrorReported>;
 }
-
-pub struct NoLlvmMetadataLoader;
-
-impl MetadataLoader for NoLlvmMetadataLoader {
-    fn get_rlib_metadata(&self, _: &Target, filename: &Path) -> Result<MetadataRef, String> {
-        let buf = fs::read(filename).map_err(|e| format!("metadata file open err: {:?}", e))?;
-        let buf: OwningRef<Vec<u8>, [u8]> = OwningRef::new(buf);
-        Ok(rustc_erase_owner!(buf.map_owner_box()))
-    }
-
-    fn get_dylib_metadata(&self, target: &Target, filename: &Path) -> Result<MetadataRef, String> {
-        self.get_rlib_metadata(target, filename)
-    }
-}
-
-pub struct MetadataOnlyCodegenBackend(());
-pub struct OngoingCodegen {
-    metadata: EncodedMetadata,
-    metadata_version: Vec<u8>,
-    crate_name: Symbol,
-}
-
-impl MetadataOnlyCodegenBackend {
-    pub fn boxed() -> Box<dyn CodegenBackend> {
-        box MetadataOnlyCodegenBackend(())
-    }
-}
-
-impl CodegenBackend for MetadataOnlyCodegenBackend {
-    fn init(&self, sess: &Session) {
-        for cty in sess.opts.crate_types.iter() {
-            match *cty {
-                CrateType::Rlib | CrateType::Dylib | CrateType::Executable => {},
-                _ => {
-                    sess.diagnostic().warn(
-                        &format!("LLVM unsupported, so output type {} is not supported", cty)
-                    );
-                },
-            }
-        }
-    }
-
-    fn metadata_loader(&self) -> Box<dyn MetadataLoader + Sync> {
-        box NoLlvmMetadataLoader
-    }
-
-    fn provide(&self, providers: &mut Providers<'_>) {
-        crate::symbol_names::provide(providers);
-
-        providers.target_features_whitelist = |_tcx, _cnum| {
-            Default::default() // Just a dummy
-        };
-        providers.is_reachable_non_generic = |_tcx, _defid| true;
-        providers.exported_symbols = |_tcx, _crate| Arc::new(Vec::new());
-    }
-    fn provide_extern(&self, providers: &mut Providers<'_>) {
-        providers.is_reachable_non_generic = |_tcx, _defid| true;
-    }
-
-    fn codegen_crate<'a, 'tcx>(
-        &self,
-        tcx: TyCtxt<'a, 'tcx, 'tcx>,
-        _rx: mpsc::Receiver<Box<dyn Any + Send>>
-    ) -> Box<dyn Any> {
-        use rustc_mir::monomorphize::item::MonoItem;
-
-        crate::check_for_rustc_errors_attr(tcx);
-        crate::symbol_names_test::report_symbol_names(tcx);
-        rustc_incremental::assert_dep_graph(tcx);
-        rustc_incremental::assert_module_sources::assert_module_sources(tcx);
-        // FIXME: Fix this
-        // rustc::middle::dependency_format::calculate(tcx);
-        let _ = tcx.link_args(LOCAL_CRATE);
-        let _ = tcx.native_libraries(LOCAL_CRATE);
-        let (_, cgus) = tcx.collect_and_partition_mono_items(LOCAL_CRATE);
-        for (mono_item, _) in cgus.iter().flat_map(|cgu| cgu.items().iter()) {
-            if let MonoItem::Fn(inst) = mono_item {
-                let def_id = inst.def_id();
-                if def_id.is_local() {
-                    let _ = tcx.codegen_fn_attrs(def_id);
-                }
-            }
-        }
-        tcx.sess.abort_if_errors();
-
-        let metadata = tcx.encode_metadata();
-
-        box OngoingCodegen {
-            metadata,
-            metadata_version: tcx.metadata_encoding_version().to_vec(),
-            crate_name: tcx.crate_name(LOCAL_CRATE),
-        }
-    }
-
-    fn join_codegen_and_link(
-        &self,
-        ongoing_codegen: Box<dyn Any>,
-        sess: &Session,
-        _dep_graph: &DepGraph,
-        outputs: &OutputFilenames,
-    ) -> Result<(), ErrorReported> {
-        let ongoing_codegen = ongoing_codegen.downcast::<OngoingCodegen>()
-            .expect("Expected MetadataOnlyCodegenBackend's OngoingCodegen, found Box<dyn Any>");
-        for &crate_type in sess.opts.crate_types.iter() {
-            if crate_type != CrateType::Rlib &&
-               crate_type != CrateType::Dylib {
-                continue;
-            }
-            let output_name =
-                out_filename(sess, crate_type, &outputs, &ongoing_codegen.crate_name.as_str());
-            let mut compressed = ongoing_codegen.metadata_version.clone();
-            let metadata = if crate_type == CrateType::Dylib {
-                DeflateEncoder::new(&mut compressed, Compression::fast())
-                    .write_all(&ongoing_codegen.metadata.raw_data)
-                    .unwrap();
-                &compressed
-            } else {
-                &ongoing_codegen.metadata.raw_data
-            };
-            fs::write(&output_name, metadata).unwrap();
-        }
-
-        sess.abort_if_errors();
-        if !sess.opts.crate_types.contains(&CrateType::Rlib)
-            && !sess.opts.crate_types.contains(&CrateType::Dylib)
-        {
-            sess.fatal("Executables are not supported by the metadata-only backend.");
-        }
-        Ok(())
-    }
-}