@@ -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