mirror of
https://github.com/rust-lang/rust.git
synced 2026-05-03 17:35:28 +03:00
Move almost all run-make-fulldeps to run-make
They pass fine.
This commit is contained in:
@@ -0,0 +1,26 @@
|
||||
include ../tools.mk
|
||||
|
||||
# ignore-stage1
|
||||
|
||||
# This test both exists as a check that -Zcodegen-backend is capable of loading external codegen
|
||||
# backends and that this external codegen backend is only included in the dep info if
|
||||
# -Zbinary-dep-depinfo is used.
|
||||
|
||||
all:
|
||||
/bin/echo || exit 0 # This test requires /bin/echo to exist
|
||||
$(RUSTC) the_backend.rs --crate-name the_backend --crate-type dylib \
|
||||
-o $(TMPDIR)/the_backend.dylib
|
||||
|
||||
$(RUSTC) some_crate.rs --crate-name some_crate --crate-type lib -o $(TMPDIR)/some_crate \
|
||||
-Z codegen-backend=$(TMPDIR)/the_backend.dylib -Z unstable-options \
|
||||
--emit link,dep-info
|
||||
grep -x "This has been \"compiled\" successfully." $(TMPDIR)/libsome_crate.rlib
|
||||
# don't declare a dependency on the codegen backend if -Zbinary-dep-depinfo isn't used.
|
||||
grep -v "the_backend.dylib" $(TMPDIR)/some_crate.d
|
||||
|
||||
$(RUSTC) some_crate.rs --crate-name some_crate --crate-type lib -o $(TMPDIR)/some_crate \
|
||||
-Z codegen-backend=$(TMPDIR)/the_backend.dylib -Z unstable-options \
|
||||
--emit link,dep-info -Zbinary-dep-depinfo
|
||||
grep -x "This has been \"compiled\" successfully." $(TMPDIR)/libsome_crate.rlib
|
||||
# but declare a dependency on the codegen backend if -Zbinary-dep-depinfo it used.
|
||||
grep "the_backend.dylib" $(TMPDIR)/some_crate.d
|
||||
@@ -0,0 +1,2 @@
|
||||
#![feature(no_core)]
|
||||
#![no_core]
|
||||
@@ -0,0 +1,84 @@
|
||||
#![feature(rustc_private)]
|
||||
#![deny(warnings)]
|
||||
|
||||
extern crate rustc_codegen_ssa;
|
||||
extern crate rustc_data_structures;
|
||||
extern crate rustc_driver;
|
||||
extern crate rustc_errors;
|
||||
extern crate rustc_hir;
|
||||
extern crate rustc_metadata;
|
||||
extern crate rustc_middle;
|
||||
extern crate rustc_session;
|
||||
extern crate rustc_span;
|
||||
extern crate rustc_symbol_mangling;
|
||||
extern crate rustc_target;
|
||||
|
||||
use rustc_codegen_ssa::traits::CodegenBackend;
|
||||
use rustc_codegen_ssa::{CodegenResults, CrateInfo};
|
||||
use rustc_data_structures::fx::FxHashMap;
|
||||
use rustc_errors::ErrorGuaranteed;
|
||||
use rustc_metadata::EncodedMetadata;
|
||||
use rustc_middle::dep_graph::{WorkProduct, WorkProductId};
|
||||
use rustc_middle::ty::TyCtxt;
|
||||
use rustc_session::config::OutputFilenames;
|
||||
use rustc_session::Session;
|
||||
use std::any::Any;
|
||||
|
||||
struct TheBackend;
|
||||
|
||||
impl CodegenBackend for TheBackend {
|
||||
fn locale_resource(&self) -> &'static str { "" }
|
||||
|
||||
fn codegen_crate<'a, 'tcx>(
|
||||
&self,
|
||||
tcx: TyCtxt<'tcx>,
|
||||
metadata: EncodedMetadata,
|
||||
_need_metadata_module: bool,
|
||||
) -> Box<dyn Any> {
|
||||
Box::new(CodegenResults {
|
||||
modules: vec![],
|
||||
allocator_module: None,
|
||||
metadata_module: None,
|
||||
metadata,
|
||||
crate_info: CrateInfo::new(tcx, "fake_target_cpu".to_string()),
|
||||
})
|
||||
}
|
||||
|
||||
fn join_codegen(
|
||||
&self,
|
||||
ongoing_codegen: Box<dyn Any>,
|
||||
_sess: &Session,
|
||||
_outputs: &OutputFilenames,
|
||||
) -> Result<(CodegenResults, FxHashMap<WorkProductId, WorkProduct>), ErrorGuaranteed> {
|
||||
let codegen_results = ongoing_codegen
|
||||
.downcast::<CodegenResults>()
|
||||
.expect("in join_codegen: ongoing_codegen is not a CodegenResults");
|
||||
Ok((*codegen_results, FxHashMap::default()))
|
||||
}
|
||||
|
||||
fn link(
|
||||
&self,
|
||||
sess: &Session,
|
||||
codegen_results: CodegenResults,
|
||||
outputs: &OutputFilenames,
|
||||
) -> Result<(), ErrorGuaranteed> {
|
||||
use rustc_session::{config::CrateType, output::out_filename};
|
||||
use std::io::Write;
|
||||
let crate_name = codegen_results.crate_info.local_crate_name;
|
||||
for &crate_type in sess.opts.crate_types.iter() {
|
||||
if crate_type != CrateType::Rlib {
|
||||
sess.fatal(&format!("Crate type is {:?}", crate_type));
|
||||
}
|
||||
let output_name = out_filename(sess, crate_type, &outputs, crate_name);
|
||||
let mut out_file = ::std::fs::File::create(output_name).unwrap();
|
||||
write!(out_file, "This has been \"compiled\" successfully.").unwrap();
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
/// This is the entrypoint for a hot plugged rustc_codegen_llvm
|
||||
#[no_mangle]
|
||||
pub fn __rustc_codegen_backend() -> Box<dyn CodegenBackend> {
|
||||
Box::new(TheBackend)
|
||||
}
|
||||
Reference in New Issue
Block a user