Ask the user to use feature(rustc_private)
when linking to rustc_driver
This commit is contained in:
parent
3ee43259ac
commit
736a249954
4 changed files with 23 additions and 8 deletions
|
@ -41,6 +41,9 @@ metadata_crate_dep_multiple =
|
|||
metadata_crate_dep_not_static =
|
||||
`{$crate_name}` was unavailable as a static crate, preventing fully static linking
|
||||
|
||||
metadata_crate_dep_rustc_driver =
|
||||
`feature(rustc_private)` is needed to link to the compiler's `rustc_driver` library
|
||||
|
||||
metadata_crate_location_unknown_type =
|
||||
extern location for {$crate_name} is of an unknown type: {$path}
|
||||
|
||||
|
|
|
@ -59,12 +59,14 @@ use rustc_middle::ty::TyCtxt;
|
|||
use rustc_session::config::CrateType;
|
||||
use rustc_session::cstore::CrateDepKind;
|
||||
use rustc_session::cstore::LinkagePreference::{self, RequireDynamic, RequireStatic};
|
||||
use rustc_span::sym;
|
||||
use tracing::info;
|
||||
|
||||
use crate::creader::CStore;
|
||||
use crate::errors::{
|
||||
BadPanicStrategy, CrateDepMultiple, IncompatiblePanicInDropStrategy, LibRequired,
|
||||
NonStaticCrateDep, RequiredPanicStrategy, RlibRequired, RustcLibRequired, TwoPanicRuntimes,
|
||||
NonStaticCrateDep, RequiredPanicStrategy, RlibRequired, RustcDriverHelp, RustcLibRequired,
|
||||
TwoPanicRuntimes,
|
||||
};
|
||||
|
||||
pub(crate) fn calculate(tcx: TyCtxt<'_>) -> Dependencies {
|
||||
|
@ -197,14 +199,14 @@ fn calculate_type(tcx: TyCtxt<'_>, ty: CrateType) -> DependencyList {
|
|||
}
|
||||
|
||||
let name = tcx.crate_name(cnum);
|
||||
info!("adding dylib: {}", name);
|
||||
add_library(tcx, cnum, RequireDynamic, &mut formats, &mut unavailable_as_static);
|
||||
let deps = tcx.dylib_dependency_formats(cnum);
|
||||
for &(depnum, style) in deps.iter() {
|
||||
info!("adding {:?}: {}", style, tcx.crate_name(depnum));
|
||||
add_library(tcx, depnum, style, &mut formats, &mut unavailable_as_static);
|
||||
}
|
||||
info!("adding dylib: {}", name);
|
||||
add_library(tcx, cnum, RequireDynamic, &mut formats, &mut unavailable_as_static);
|
||||
let deps = tcx.dylib_dependency_formats(cnum);
|
||||
for &(depnum, style) in deps.iter() {
|
||||
info!("adding {:?}: {}", style, tcx.crate_name(depnum));
|
||||
add_library(tcx, depnum, style, &mut formats, &mut unavailable_as_static);
|
||||
}
|
||||
}
|
||||
|
||||
// Collect what we've got so far in the return vector.
|
||||
let last_crate = tcx.crates(()).len();
|
||||
|
@ -292,12 +294,15 @@ fn add_library(
|
|||
// This error is probably a little obscure, but I imagine that it
|
||||
// can be refined over time.
|
||||
if link2 != link || link == RequireStatic {
|
||||
let linking_to_rustc_driver = tcx.sess.psess.unstable_features.is_nightly_build()
|
||||
&& tcx.crates(()).iter().any(|&cnum| tcx.crate_name(cnum) == sym::rustc_driver);
|
||||
tcx.dcx().emit_err(CrateDepMultiple {
|
||||
crate_name: tcx.crate_name(cnum),
|
||||
non_static_deps: unavailable_as_static
|
||||
.drain(..)
|
||||
.map(|cnum| NonStaticCrateDep { crate_name: tcx.crate_name(cnum) })
|
||||
.collect(),
|
||||
rustc_driver_help: linking_to_rustc_driver.then_some(RustcDriverHelp),
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
@ -38,6 +38,8 @@ pub struct CrateDepMultiple {
|
|||
pub crate_name: Symbol,
|
||||
#[subdiagnostic]
|
||||
pub non_static_deps: Vec<NonStaticCrateDep>,
|
||||
#[subdiagnostic]
|
||||
pub rustc_driver_help: Option<RustcDriverHelp>,
|
||||
}
|
||||
|
||||
#[derive(Subdiagnostic)]
|
||||
|
@ -46,6 +48,10 @@ pub struct NonStaticCrateDep {
|
|||
pub crate_name: Symbol,
|
||||
}
|
||||
|
||||
#[derive(Subdiagnostic)]
|
||||
#[help(metadata_crate_dep_rustc_driver)]
|
||||
pub struct RustcDriverHelp;
|
||||
|
||||
#[derive(Diagnostic)]
|
||||
#[diag(metadata_two_panic_runtimes)]
|
||||
pub struct TwoPanicRuntimes {
|
||||
|
|
|
@ -1619,6 +1619,7 @@ symbols! {
|
|||
rustc_dirty,
|
||||
rustc_do_not_const_check,
|
||||
rustc_doc_primitive,
|
||||
rustc_driver,
|
||||
rustc_dummy,
|
||||
rustc_dump_def_parents,
|
||||
rustc_dump_item_bounds,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue