Skip to content

Commit 328c6c8

Browse files
committed
on-demand dylib dependency formats
1 parent 532a08b commit 328c6c8

File tree

5 files changed

+23
-18
lines changed

5 files changed

+23
-18
lines changed

src/librustc/middle/cstore.rs

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -247,8 +247,6 @@ pub trait CrateStore {
247247
fn is_statically_included_foreign_item(&self, def_id: DefId) -> bool;
248248

249249
// crate metadata
250-
fn dylib_dependency_formats(&self, cnum: CrateNum)
251-
-> Vec<(CrateNum, LinkagePreference)>;
252250
fn dep_kind(&self, cnum: CrateNum) -> DepKind;
253251
fn export_macros(&self, cnum: CrateNum);
254252
fn lang_items(&self, cnum: CrateNum) -> Vec<(DefIndex, usize)>;
@@ -367,9 +365,6 @@ impl CrateStore for DummyCrateStore {
367365
fn is_statically_included_foreign_item(&self, def_id: DefId) -> bool { false }
368366

369367
// crate metadata
370-
fn dylib_dependency_formats(&self, cnum: CrateNum)
371-
-> Vec<(CrateNum, LinkagePreference)>
372-
{ bug!("dylib_dependency_formats") }
373368
fn lang_items(&self, cnum: CrateNum) -> Vec<(DefIndex, usize)>
374369
{ bug!("lang_items") }
375370
fn missing_lang_items(&self, cnum: CrateNum) -> Vec<lang_items::LangItem>

src/librustc/middle/dependency_format.rs

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ use hir::def_id::CrateNum;
6565

6666
use session;
6767
use session::config;
68+
use ty::TyCtxt;
6869
use middle::cstore::DepKind;
6970
use middle::cstore::LinkagePreference::{self, RequireStatic, RequireDynamic};
7071
use util::nodemap::FxHashMap;
@@ -91,18 +92,22 @@ pub enum Linkage {
9192
Dynamic,
9293
}
9394

94-
pub fn calculate(sess: &session::Session) {
95+
pub fn calculate<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>) {
96+
let sess = &tcx.sess;
9597
let mut fmts = sess.dependency_formats.borrow_mut();
9698
for &ty in sess.crate_types.borrow().iter() {
97-
let linkage = calculate_type(sess, ty);
99+
let linkage = calculate_type(tcx, ty);
98100
verify_ok(sess, &linkage);
99101
fmts.insert(ty, linkage);
100102
}
101103
sess.abort_if_errors();
102104
}
103105

104-
fn calculate_type(sess: &session::Session,
105-
ty: config::CrateType) -> DependencyList {
106+
fn calculate_type<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>,
107+
ty: config::CrateType) -> DependencyList {
108+
109+
let sess = &tcx.sess;
110+
106111
if !sess.opts.output_types.should_trans() {
107112
return Vec::new();
108113
}
@@ -167,8 +172,8 @@ fn calculate_type(sess: &session::Session,
167172
if src.dylib.is_some() {
168173
info!("adding dylib: {}", name);
169174
add_library(sess, cnum, RequireDynamic, &mut formats);
170-
let deps = sess.cstore.dylib_dependency_formats(cnum);
171-
for &(depnum, style) in &deps {
175+
let deps = tcx.dylib_dependency_formats(cnum);
176+
for &(depnum, style) in deps.iter() {
172177
info!("adding {:?}: {}", style,
173178
sess.cstore.crate_name(depnum));
174179
add_library(sess, depnum, style, &mut formats);

src/librustc/ty/maps.rs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ use hir::def_id::{CrateNum, CRATE_DEF_INDEX, DefId, LOCAL_CRATE};
1313
use hir::def::Def;
1414
use hir;
1515
use middle::const_val;
16+
use middle::cstore::LinkagePreference;
1617
use middle::privacy::AccessLevels;
1718
use middle::region::RegionMaps;
1819
use mir;
@@ -482,6 +483,12 @@ impl<'tcx> QueryDescription for queries::is_const_fn<'tcx> {
482483
}
483484
}
484485

486+
impl<'tcx> QueryDescription for queries::dylib_dependency_formats<'tcx> {
487+
fn describe(_: TyCtxt, _: CrateNum) -> String {
488+
"dylib dependency formats of crate".to_string()
489+
}
490+
}
491+
485492
macro_rules! define_maps {
486493
(<$tcx:tt>
487494
$($(#[$attr:meta])*
@@ -938,6 +945,9 @@ define_maps! { <'tcx>
938945
[] needs_drop_raw: needs_drop_dep_node(ty::ParamEnvAnd<'tcx, Ty<'tcx>>) -> bool,
939946
[] layout_raw: layout_dep_node(ty::ParamEnvAnd<'tcx, Ty<'tcx>>)
940947
-> Result<&'tcx Layout, LayoutError<'tcx>>,
948+
949+
[] dylib_dependency_formats: MetaDataByCrateNum(CrateNum)
950+
-> Rc<Vec<(CrateNum, LinkagePreference)>>,
941951
}
942952

943953
fn type_param_predicates((item_id, param_id): (DefId, DefId)) -> DepConstructor {

src/librustc_driver/driver.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1049,7 +1049,7 @@ pub fn phase_4_translate_to_llvm<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>,
10491049

10501050
time(time_passes,
10511051
"resolving dependency formats",
1052-
|| dependency_format::calculate(&tcx.sess));
1052+
|| dependency_format::calculate(tcx));
10531053

10541054
let translation =
10551055
time(time_passes,

src/librustc_metadata/cstore_impl.rs

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,7 @@ provide! { <'tcx> tcx, def_id, cdata, cnum,
153153
}
154154

155155
ByCrateNum {
156+
dylib_dependency_formats => { Rc::new(cdata.get_dylib_dependency_formats(&tcx.dep_graph)) }
156157
}
157158
}
158159

@@ -229,12 +230,6 @@ impl CrateStore for cstore::CStore {
229230
}
230231
}
231232

232-
fn dylib_dependency_formats(&self, cnum: CrateNum)
233-
-> Vec<(CrateNum, LinkagePreference)>
234-
{
235-
self.get_crate_data(cnum).get_dylib_dependency_formats(&self.dep_graph)
236-
}
237-
238233
fn dep_kind(&self, cnum: CrateNum) -> DepKind
239234
{
240235
let data = self.get_crate_data(cnum);

0 commit comments

Comments
 (0)