Skip to content

Commit 736a249

Browse files
committed
Ask the user to use feature(rustc_private) when linking to rustc_driver
1 parent 3ee4325 commit 736a249

File tree

4 files changed

+23
-8
lines changed

4 files changed

+23
-8
lines changed

Diff for: compiler/rustc_metadata/messages.ftl

+3
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,9 @@ metadata_crate_dep_multiple =
4141
metadata_crate_dep_not_static =
4242
`{$crate_name}` was unavailable as a static crate, preventing fully static linking
4343
44+
metadata_crate_dep_rustc_driver =
45+
`feature(rustc_private)` is needed to link to the compiler's `rustc_driver` library
46+
4447
metadata_crate_location_unknown_type =
4548
extern location for {$crate_name} is of an unknown type: {$path}
4649

Diff for: compiler/rustc_metadata/src/dependency_format.rs

+13-8
Original file line numberDiff line numberDiff line change
@@ -59,12 +59,14 @@ use rustc_middle::ty::TyCtxt;
5959
use rustc_session::config::CrateType;
6060
use rustc_session::cstore::CrateDepKind;
6161
use rustc_session::cstore::LinkagePreference::{self, RequireDynamic, RequireStatic};
62+
use rustc_span::sym;
6263
use tracing::info;
6364

6465
use crate::creader::CStore;
6566
use crate::errors::{
6667
BadPanicStrategy, CrateDepMultiple, IncompatiblePanicInDropStrategy, LibRequired,
67-
NonStaticCrateDep, RequiredPanicStrategy, RlibRequired, RustcLibRequired, TwoPanicRuntimes,
68+
NonStaticCrateDep, RequiredPanicStrategy, RlibRequired, RustcDriverHelp, RustcLibRequired,
69+
TwoPanicRuntimes,
6870
};
6971

7072
pub(crate) fn calculate(tcx: TyCtxt<'_>) -> Dependencies {
@@ -197,14 +199,14 @@ fn calculate_type(tcx: TyCtxt<'_>, ty: CrateType) -> DependencyList {
197199
}
198200

199201
let name = tcx.crate_name(cnum);
200-
info!("adding dylib: {}", name);
201-
add_library(tcx, cnum, RequireDynamic, &mut formats, &mut unavailable_as_static);
202-
let deps = tcx.dylib_dependency_formats(cnum);
203-
for &(depnum, style) in deps.iter() {
204-
info!("adding {:?}: {}", style, tcx.crate_name(depnum));
205-
add_library(tcx, depnum, style, &mut formats, &mut unavailable_as_static);
206-
}
202+
info!("adding dylib: {}", name);
203+
add_library(tcx, cnum, RequireDynamic, &mut formats, &mut unavailable_as_static);
204+
let deps = tcx.dylib_dependency_formats(cnum);
205+
for &(depnum, style) in deps.iter() {
206+
info!("adding {:?}: {}", style, tcx.crate_name(depnum));
207+
add_library(tcx, depnum, style, &mut formats, &mut unavailable_as_static);
207208
}
209+
}
208210

209211
// Collect what we've got so far in the return vector.
210212
let last_crate = tcx.crates(()).len();
@@ -292,12 +294,15 @@ fn add_library(
292294
// This error is probably a little obscure, but I imagine that it
293295
// can be refined over time.
294296
if link2 != link || link == RequireStatic {
297+
let linking_to_rustc_driver = tcx.sess.psess.unstable_features.is_nightly_build()
298+
&& tcx.crates(()).iter().any(|&cnum| tcx.crate_name(cnum) == sym::rustc_driver);
295299
tcx.dcx().emit_err(CrateDepMultiple {
296300
crate_name: tcx.crate_name(cnum),
297301
non_static_deps: unavailable_as_static
298302
.drain(..)
299303
.map(|cnum| NonStaticCrateDep { crate_name: tcx.crate_name(cnum) })
300304
.collect(),
305+
rustc_driver_help: linking_to_rustc_driver.then_some(RustcDriverHelp),
301306
});
302307
}
303308
}

Diff for: compiler/rustc_metadata/src/errors.rs

+6
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ pub struct CrateDepMultiple {
3838
pub crate_name: Symbol,
3939
#[subdiagnostic]
4040
pub non_static_deps: Vec<NonStaticCrateDep>,
41+
#[subdiagnostic]
42+
pub rustc_driver_help: Option<RustcDriverHelp>,
4143
}
4244

4345
#[derive(Subdiagnostic)]
@@ -46,6 +48,10 @@ pub struct NonStaticCrateDep {
4648
pub crate_name: Symbol,
4749
}
4850

51+
#[derive(Subdiagnostic)]
52+
#[help(metadata_crate_dep_rustc_driver)]
53+
pub struct RustcDriverHelp;
54+
4955
#[derive(Diagnostic)]
5056
#[diag(metadata_two_panic_runtimes)]
5157
pub struct TwoPanicRuntimes {

Diff for: compiler/rustc_span/src/symbol.rs

+1
Original file line numberDiff line numberDiff line change
@@ -1619,6 +1619,7 @@ symbols! {
16191619
rustc_dirty,
16201620
rustc_do_not_const_check,
16211621
rustc_doc_primitive,
1622+
rustc_driver,
16221623
rustc_dummy,
16231624
rustc_dump_def_parents,
16241625
rustc_dump_item_bounds,

0 commit comments

Comments
 (0)