From ca2ff089f37e3b3186df8f4b4bd85d82eb5facc7 Mon Sep 17 00:00:00 2001 From: bjorn3 Date: Fri, 1 Mar 2019 16:53:21 +0100 Subject: [PATCH] Remove MetadataOnlyCodegenBackend --- Cargo.lock | 1 - src/librustc_codegen_utils/Cargo.toml | 1 - src/librustc_codegen_utils/codegen_backend.rs | 146 +----------------- src/librustc_codegen_utils/lib.rs | 1 - src/librustc_interface/util.rs | 3 - 5 files changed, 2 insertions(+), 150 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 27f7f59165b..4951ed51cf2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2650,7 +2650,6 @@ dependencies = [ "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", "rustc 0.0.0", "rustc_data_structures 0.0.0", - "rustc_incremental 0.0.0", "rustc_metadata 0.0.0", "rustc_mir 0.0.0", "rustc_target 0.0.0", diff --git a/src/librustc_codegen_utils/Cargo.toml b/src/librustc_codegen_utils/Cargo.toml index 5f241eb20fb..c75208b9e06 100644 --- a/src/librustc_codegen_utils/Cargo.toml +++ b/src/librustc_codegen_utils/Cargo.toml @@ -21,4 +21,3 @@ rustc_target = { path = "../librustc_target" } rustc_data_structures = { path = "../librustc_data_structures" } rustc_metadata = { path = "../librustc_metadata" } rustc_mir = { path = "../librustc_mir" } -rustc_incremental = { path = "../librustc_incremental" } 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 { - let buf = fs::read(filename).map_err(|e| format!("metadata file open err: {:?}", e))?; - let buf: OwningRef, [u8]> = OwningRef::new(buf); - Ok(rustc_erase_owner!(buf.map_owner_box())) - } - - fn get_dylib_metadata(&self, target: &Target, filename: &Path) -> Result { - self.get_rlib_metadata(target, filename) - } -} - -pub struct MetadataOnlyCodegenBackend(()); -pub struct OngoingCodegen { - metadata: EncodedMetadata, - metadata_version: Vec, - crate_name: Symbol, -} - -impl MetadataOnlyCodegenBackend { - pub fn boxed() -> Box { - 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 { - 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 { - 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, - sess: &Session, - _dep_graph: &DepGraph, - outputs: &OutputFilenames, - ) -> Result<(), ErrorReported> { - let ongoing_codegen = ongoing_codegen.downcast::() - .expect("Expected MetadataOnlyCodegenBackend's OngoingCodegen, found Box"); - 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(()) - } -} diff --git a/src/librustc_codegen_utils/lib.rs b/src/librustc_codegen_utils/lib.rs index 466cf40a157..1a3914e6ef4 100644 --- a/src/librustc_codegen_utils/lib.rs +++ b/src/librustc_codegen_utils/lib.rs @@ -19,7 +19,6 @@ #[macro_use] extern crate rustc; -#[macro_use] extern crate rustc_data_structures; use rustc::ty::TyCtxt; use rustc::hir::def_id::LOCAL_CRATE; diff --git a/src/librustc_interface/util.rs b/src/librustc_interface/util.rs index 0f858d63206..b1ef4e315d9 100644 --- a/src/librustc_interface/util.rs +++ b/src/librustc_interface/util.rs @@ -266,9 +266,6 @@ pub fn get_codegen_backend(sess: &Session) -> Box { let codegen_name = sess.opts.debugging_opts.codegen_backend.as_ref() .unwrap_or(&sess.target.target.options.codegen_backend); let backend = match &codegen_name[..] { - "metadata_only" => { - rustc_codegen_utils::codegen_backend::MetadataOnlyCodegenBackend::boxed - } filename if filename.contains(".") => { load_backend_from_dylib(filename.as_ref()) }