@@ -296,6 +296,9 @@ pub struct CrateData {
296296pub  dependencies :  Vec < Dependency > , 
297297    pub  origin :  CrateOrigin , 
298298    pub  is_proc_macro :  bool , 
299+     /// The working directory to run proc-macros in. This is the workspace root of the cargo workspace 
300+ /// for workspace members, the crate manifest dir otherwise. 
301+ pub  proc_macro_cwd :  Option < AbsPathBuf > , 
299302} 
300303
301304#[ derive( Default ,  Clone ,  PartialEq ,  Eq ) ]  
@@ -360,8 +363,9 @@ impl CrateGraph {
360363        cfg_options :  Arc < CfgOptions > , 
361364        potential_cfg_options :  Option < Arc < CfgOptions > > , 
362365        mut  env :  Env , 
363-         is_proc_macro :  bool , 
364366        origin :  CrateOrigin , 
367+         is_proc_macro :  bool , 
368+         proc_macro_cwd :  Option < AbsPathBuf > , 
365369    )  -> CrateId  { 
366370        env. entries . shrink_to_fit ( ) ; 
367371        let  data = CrateData  { 
@@ -375,6 +379,7 @@ impl CrateGraph {
375379            dependencies :  Vec :: new ( ) , 
376380            origin, 
377381            is_proc_macro, 
382+             proc_macro_cwd, 
378383        } ; 
379384        self . arena . alloc ( data) 
380385    } 
@@ -698,8 +703,9 @@ mod tests {
698703            Default :: default ( ) , 
699704            Default :: default ( ) , 
700705            Env :: default ( ) , 
701-             false , 
702706            CrateOrigin :: Local  {  repo :  None ,  name :  None  } , 
707+             false , 
708+             None , 
703709        ) ; 
704710        let  crate2 = graph. add_crate_root ( 
705711            FileId :: from_raw ( 2u32 ) , 
@@ -709,8 +715,9 @@ mod tests {
709715            Default :: default ( ) , 
710716            Default :: default ( ) , 
711717            Env :: default ( ) , 
712-             false , 
713718            CrateOrigin :: Local  {  repo :  None ,  name :  None  } , 
719+             false , 
720+             None , 
714721        ) ; 
715722        let  crate3 = graph. add_crate_root ( 
716723            FileId :: from_raw ( 3u32 ) , 
@@ -720,8 +727,9 @@ mod tests {
720727            Default :: default ( ) , 
721728            Default :: default ( ) , 
722729            Env :: default ( ) , 
723-             false , 
724730            CrateOrigin :: Local  {  repo :  None ,  name :  None  } , 
731+             false , 
732+             None , 
725733        ) ; 
726734        assert ! ( graph
727735            . add_dep( crate1,  Dependency :: new( CrateName :: new( "crate2" ) . unwrap( ) ,  crate2, ) ) 
@@ -745,8 +753,9 @@ mod tests {
745753            Default :: default ( ) , 
746754            Default :: default ( ) , 
747755            Env :: default ( ) , 
748-             false , 
749756            CrateOrigin :: Local  {  repo :  None ,  name :  None  } , 
757+             false , 
758+             None , 
750759        ) ; 
751760        let  crate2 = graph. add_crate_root ( 
752761            FileId :: from_raw ( 2u32 ) , 
@@ -756,8 +765,9 @@ mod tests {
756765            Default :: default ( ) , 
757766            Default :: default ( ) , 
758767            Env :: default ( ) , 
759-             false , 
760768            CrateOrigin :: Local  {  repo :  None ,  name :  None  } , 
769+             false , 
770+             None , 
761771        ) ; 
762772        assert ! ( graph
763773            . add_dep( crate1,  Dependency :: new( CrateName :: new( "crate2" ) . unwrap( ) ,  crate2, ) ) 
@@ -778,8 +788,9 @@ mod tests {
778788            Default :: default ( ) , 
779789            Default :: default ( ) , 
780790            Env :: default ( ) , 
781-             false , 
782791            CrateOrigin :: Local  {  repo :  None ,  name :  None  } , 
792+             false , 
793+             None , 
783794        ) ; 
784795        let  crate2 = graph. add_crate_root ( 
785796            FileId :: from_raw ( 2u32 ) , 
@@ -789,8 +800,9 @@ mod tests {
789800            Default :: default ( ) , 
790801            Default :: default ( ) , 
791802            Env :: default ( ) , 
792-             false , 
793803            CrateOrigin :: Local  {  repo :  None ,  name :  None  } , 
804+             false , 
805+             None , 
794806        ) ; 
795807        let  crate3 = graph. add_crate_root ( 
796808            FileId :: from_raw ( 3u32 ) , 
@@ -800,8 +812,9 @@ mod tests {
800812            Default :: default ( ) , 
801813            Default :: default ( ) , 
802814            Env :: default ( ) , 
803-             false , 
804815            CrateOrigin :: Local  {  repo :  None ,  name :  None  } , 
816+             false , 
817+             None , 
805818        ) ; 
806819        assert ! ( graph
807820            . add_dep( crate1,  Dependency :: new( CrateName :: new( "crate2" ) . unwrap( ) ,  crate2, ) ) 
@@ -822,8 +835,9 @@ mod tests {
822835            Default :: default ( ) , 
823836            Default :: default ( ) , 
824837            Env :: default ( ) , 
825-             false , 
826838            CrateOrigin :: Local  {  repo :  None ,  name :  None  } , 
839+             false , 
840+             None , 
827841        ) ; 
828842        let  crate2 = graph. add_crate_root ( 
829843            FileId :: from_raw ( 2u32 ) , 
@@ -833,8 +847,9 @@ mod tests {
833847            Default :: default ( ) , 
834848            Default :: default ( ) , 
835849            Env :: default ( ) , 
836-             false , 
837850            CrateOrigin :: Local  {  repo :  None ,  name :  None  } , 
851+             false , 
852+             None , 
838853        ) ; 
839854        assert ! ( graph
840855            . add_dep( 
0 commit comments