@@ -59,6 +59,7 @@ use super::archive::{
5959use super :: command:: Command ;
6060use super :: linker:: { self , Linker } ;
6161use super :: metadata:: { MetadataPosition , create_wrapper_file} ;
62+ use super :: rmeta_link:: RmetaLinkCache ;
6263use super :: rpath:: { self , RPathConfig } ;
6364use super :: { apple, rmeta_link, versioned_llvm_target} ;
6465use crate :: base:: needs_allocator_shim_for_linking;
@@ -86,6 +87,7 @@ pub fn link_binary(
8687 let _timer = sess. timer ( "link_binary" ) ;
8788 let output_metadata = sess. opts . output_types . contains_key ( & OutputType :: Metadata ) ;
8889 let mut tempfiles_for_stdout_output: Vec < PathBuf > = Vec :: new ( ) ;
90+ let mut rmeta_link_cache = RmetaLinkCache :: default ( ) ;
8991 for & crate_type in & crate_info. crate_types {
9092 // Ignore executable crates if we have -Z no-codegen, as they will error.
9193 if ( sess. opts . unstable_opts . no_codegen || !sess. opts . output_types . should_codegen ( ) )
@@ -139,6 +141,7 @@ pub fn link_binary(
139141 link_staticlib (
140142 sess,
141143 archive_builder_builder,
144+ & mut rmeta_link_cache,
142145 & compiled_modules,
143146 & crate_info,
144147 & metadata,
@@ -150,6 +153,7 @@ pub fn link_binary(
150153 link_natively (
151154 sess,
152155 archive_builder_builder,
156+ & mut rmeta_link_cache,
153157 crate_type,
154158 & out_filename,
155159 & compiled_modules,
@@ -502,6 +506,7 @@ fn link_rlib<'a>(
502506fn link_staticlib (
503507 sess : & Session ,
504508 archive_builder_builder : & dyn ArchiveBuilderBuilder ,
509+ rmeta_link_cache : & mut RmetaLinkCache ,
505510 compiled_modules : & CompiledModules ,
506511 crate_info : & CrateInfo ,
507512 metadata : & EncodedMetadata ,
@@ -531,7 +536,7 @@ fn link_staticlib(
531536 let bundled_libs: FxIndexSet < _ > = native_libs. filter_map ( |lib| lib. filename ) . collect ( ) ;
532537 ab. add_archive (
533538 path,
534- AddArchiveKind :: Rlib ( & |fname : & str , entry_kind| {
539+ AddArchiveKind :: Rlib ( rmeta_link_cache , & |fname : & str , entry_kind| {
535540 // Ignore metadata and rmeta-link files.
536541 if fname == METADATA_FILENAME || fname == rmeta_link:: FILENAME {
537542 return true ;
@@ -939,6 +944,7 @@ fn report_linker_output(
939944fn link_natively (
940945 sess : & Session ,
941946 archive_builder_builder : & dyn ArchiveBuilderBuilder ,
947+ rmeta_link_cache : & mut RmetaLinkCache ,
942948 crate_type : CrateType ,
943949 out_filename : & Path ,
944950 compiled_modules : & CompiledModules ,
@@ -965,6 +971,7 @@ fn link_natively(
965971 flavor,
966972 sess,
967973 archive_builder_builder,
974+ rmeta_link_cache,
968975 crate_type,
969976 tmpdir,
970977 temp_filename,
@@ -2562,6 +2569,7 @@ fn linker_with_args(
25622569 flavor : LinkerFlavor ,
25632570 sess : & Session ,
25642571 archive_builder_builder : & dyn ArchiveBuilderBuilder ,
2572+ rmeta_link_cache : & mut RmetaLinkCache ,
25652573 crate_type : CrateType ,
25662574 tmpdir : & Path ,
25672575 out_filename : & Path ,
@@ -2690,6 +2698,7 @@ fn linker_with_args(
26902698 cmd,
26912699 sess,
26922700 archive_builder_builder,
2701+ rmeta_link_cache,
26932702 crate_info,
26942703 crate_type,
26952704 tmpdir,
@@ -3126,6 +3135,7 @@ fn add_upstream_rust_crates(
31263135 cmd : & mut dyn Linker ,
31273136 sess : & Session ,
31283137 archive_builder_builder : & dyn ArchiveBuilderBuilder ,
3138+ rmeta_link_cache : & mut RmetaLinkCache ,
31293139 crate_info : & CrateInfo ,
31303140 crate_type : CrateType ,
31313141 tmpdir : & Path ,
@@ -3178,6 +3188,7 @@ fn add_upstream_rust_crates(
31783188 cmd,
31793189 sess,
31803190 archive_builder_builder,
3191+ rmeta_link_cache,
31813192 crate_info,
31823193 tmpdir,
31833194 cnum,
@@ -3309,6 +3320,7 @@ fn add_static_crate(
33093320 cmd : & mut dyn Linker ,
33103321 sess : & Session ,
33113322 archive_builder_builder : & dyn ArchiveBuilderBuilder ,
3323+ rmeta_link_cache : & mut RmetaLinkCache ,
33123324 crate_info : & CrateInfo ,
33133325 tmpdir : & Path ,
33143326 cnum : CrateNum ,
@@ -3339,7 +3351,7 @@ fn add_static_crate(
33393351 let mut archive = archive_builder_builder. new_archive_builder ( sess) ;
33403352 if let Err ( error) = archive. add_archive (
33413353 cratepath,
3342- AddArchiveKind :: Rlib ( & |f, entry_kind| {
3354+ AddArchiveKind :: Rlib ( rmeta_link_cache , & |f, entry_kind| {
33433355 if f == METADATA_FILENAME || f == rmeta_link:: FILENAME {
33443356 return true ;
33453357 }
0 commit comments