Skip to content

Commit 1644376

Browse files
committed
Reorder rustc_private loading
1 parent 8716087 commit 1644376

File tree

1 file changed

+86
-87
lines changed
  • crates/project_model/src

1 file changed

+86
-87
lines changed

crates/project_model/src/lib.rs

Lines changed: 86 additions & 87 deletions
Original file line numberDiff line numberDiff line change
@@ -409,69 +409,6 @@ impl ProjectWorkspace {
409409
cfg_options.insert_atom("test".into());
410410
cfg_options.insert_atom("debug_assertions".into());
411411

412-
let mut rustc_pkg_crates = FxHashMap::default();
413-
414-
// Add crate roots for rustc_private libs if a path to source is provided
415-
if let Some(rustc_workspace) = rustc {
416-
for pkg in rustc_workspace.packages() {
417-
for &tgt in rustc_workspace[pkg].targets.iter() {
418-
if rustc_workspace[tgt].kind != TargetKind::Lib {
419-
continue;
420-
}
421-
// Exclude alloc / core / std
422-
if rustc_workspace[tgt]
423-
.root
424-
.components()
425-
.any(|c| c == Component::Normal("library".as_ref()))
426-
{
427-
continue;
428-
}
429-
430-
if let Some(crate_id) = add_target_crate_root(
431-
&mut crate_graph,
432-
&rustc_workspace[pkg],
433-
&rustc_workspace[tgt],
434-
&cfg_options,
435-
proc_macro_client,
436-
load,
437-
) {
438-
pkg_to_lib_crate.insert(pkg, crate_id);
439-
// Add dependencies on the core / std / alloc for rustc
440-
for (name, krate) in public_deps.iter() {
441-
if let Err(_) =
442-
crate_graph.add_dep(crate_id, name.clone(), *krate)
443-
{
444-
log::error!(
445-
"cyclic dependency on {} for {}",
446-
name,
447-
&cargo[pkg].name
448-
)
449-
}
450-
}
451-
rustc_pkg_crates.entry(pkg).or_insert_with(Vec::new).push(crate_id);
452-
}
453-
}
454-
}
455-
// Now add a dep edge from all targets of upstream to the lib
456-
// target of downstream.
457-
for pkg in rustc_workspace.packages() {
458-
for dep in rustc_workspace[pkg].dependencies.iter() {
459-
let name = CrateName::new(&dep.name).unwrap();
460-
if let Some(&to) = pkg_to_lib_crate.get(&dep.pkg) {
461-
for &from in rustc_pkg_crates.get(&pkg).into_iter().flatten() {
462-
if let Err(_) = crate_graph.add_dep(from, name.clone(), to) {
463-
log::error!(
464-
"cyclic dependency {} -> {}",
465-
&rustc_workspace[pkg].name,
466-
&rustc_workspace[dep.pkg].name
467-
)
468-
}
469-
}
470-
}
471-
}
472-
}
473-
};
474-
475412
let mut pkg_crates = FxHashMap::default();
476413

477414
// Next, create crates for each package, target pair
@@ -535,30 +472,6 @@ impl ProjectWorkspace {
535472
}
536473
}
537474

538-
// If we have access to the rust sources, create dependencies onto rustc_private libraries from all targets
539-
// that are members of the current workspace
540-
if let Some(rustc_workspace) = rustc {
541-
for dep in rustc_workspace.packages() {
542-
let name = CrateName::normalize_dashes(&rustc_workspace[dep].name);
543-
544-
if let Some(&from) = pkg_to_lib_crate.get(&dep) {
545-
for pkg in cargo.packages() {
546-
if !cargo[pkg].is_member {
547-
continue;
548-
}
549-
for &to in pkg_crates.get(&pkg).into_iter().flatten() {
550-
if let Err(_) = crate_graph.add_dep(to, name.clone(), from) {
551-
log::error!(
552-
"cyclic dependency22 {} -> {}",
553-
&cargo[pkg].name,
554-
&rustc_workspace[dep].name
555-
)
556-
}
557-
}
558-
}
559-
}
560-
}
561-
}
562475
// Now add a dep edge from all targets of upstream to the lib
563476
// target of downstream.
564477
for pkg in cargo.packages() {
@@ -577,6 +490,92 @@ impl ProjectWorkspace {
577490
}
578491
}
579492
}
493+
494+
let mut rustc_pkg_crates = FxHashMap::default();
495+
496+
// If the user provided a path to rustc sources, we add all the rustc_private crates
497+
// and create dependencies on them for the crates in the current workspace
498+
if let Some(rustc_workspace) = rustc {
499+
for pkg in rustc_workspace.packages() {
500+
for &tgt in rustc_workspace[pkg].targets.iter() {
501+
if rustc_workspace[tgt].kind != TargetKind::Lib {
502+
continue;
503+
}
504+
// Exclude alloc / core / std
505+
if rustc_workspace[tgt]
506+
.root
507+
.components()
508+
.any(|c| c == Component::Normal("library".as_ref()))
509+
{
510+
continue;
511+
}
512+
513+
if let Some(crate_id) = add_target_crate_root(
514+
&mut crate_graph,
515+
&rustc_workspace[pkg],
516+
&rustc_workspace[tgt],
517+
&cfg_options,
518+
proc_macro_client,
519+
load,
520+
) {
521+
pkg_to_lib_crate.insert(pkg, crate_id);
522+
// Add dependencies on the core / std / alloc for rustc
523+
for (name, krate) in public_deps.iter() {
524+
if let Err(_) =
525+
crate_graph.add_dep(crate_id, name.clone(), *krate)
526+
{
527+
log::error!(
528+
"cyclic dependency on {} for {}",
529+
name,
530+
&cargo[pkg].name
531+
)
532+
}
533+
}
534+
rustc_pkg_crates.entry(pkg).or_insert_with(Vec::new).push(crate_id);
535+
}
536+
}
537+
}
538+
// Now add a dep edge from all targets of upstream to the lib
539+
// target of downstream.
540+
for pkg in rustc_workspace.packages() {
541+
for dep in rustc_workspace[pkg].dependencies.iter() {
542+
let name = CrateName::new(&dep.name).unwrap();
543+
if let Some(&to) = pkg_to_lib_crate.get(&dep.pkg) {
544+
for &from in rustc_pkg_crates.get(&pkg).into_iter().flatten() {
545+
if let Err(_) = crate_graph.add_dep(from, name.clone(), to) {
546+
log::error!(
547+
"cyclic dependency {} -> {}",
548+
&rustc_workspace[pkg].name,
549+
&rustc_workspace[dep.pkg].name
550+
)
551+
}
552+
}
553+
}
554+
}
555+
}
556+
557+
// Add dependencies for all the crates of the current workspace to rustc_private libraries
558+
for dep in rustc_workspace.packages() {
559+
let name = CrateName::normalize_dashes(&rustc_workspace[dep].name);
560+
561+
if let Some(&to) = pkg_to_lib_crate.get(&dep) {
562+
for pkg in cargo.packages() {
563+
if !cargo[pkg].is_member {
564+
continue;
565+
}
566+
for &from in pkg_crates.get(&pkg).into_iter().flatten() {
567+
if let Err(_) = crate_graph.add_dep(from, name.clone(), to) {
568+
log::error!(
569+
"cyclic dependency {} -> {}",
570+
&cargo[pkg].name,
571+
&rustc_workspace[dep].name
572+
)
573+
}
574+
}
575+
}
576+
}
577+
}
578+
}
580579
}
581580
}
582581
if crate_graph.patch_cfg_if() {

0 commit comments

Comments
 (0)