@@ -1547,29 +1547,40 @@ def rustc_compile_action(
15471547 for dep in getattr (ctx .attr , "deps" , []):
15481548 runfiles_list .append (dep [DefaultInfo ].default_runfiles )
15491549
1550- runfiles_list .append (ctx .runfiles (files = ([] if experimental_use_coverage_metadata_files else coverage_runfiles )))
1551-
1552- dynamic_libraries = [
1553- library_to_link .dynamic_library
1554- for dep in getattr (ctx .attr , "deps" , [])
1555- if CcInfo in dep
1556- for linker_input in dep [CcInfo ].linking_context .linker_inputs .to_list ()
1557- for library_to_link in linker_input .libraries
1558- if _is_dylib (library_to_link )
1559- ]
1560- runfiles_list .append (ctx .runfiles (files = dynamic_libraries ))
1561-
1562- runfiles = ctx .runfiles ().merge_all (runfiles_list )
1550+ if not experimental_use_coverage_metadata_files :
1551+ runfiles_list .append (ctx .runfiles (files = coverage_runfiles ))
15631552
1564- default_runfiles = ctx .runfiles (files = _get_dynamic_libraries_for_runtime (linking_context , True ))
1565- default_runfiles = runfiles .merge (default_runfiles )
1553+ common_runfiles = ctx .runfiles ().merge_all (runfiles_list )
15661554
1567- data_runfiles = ctx .runfiles (files = _get_dynamic_libraries_for_runtime (linking_context , False ))
1568- data_runfiles = runfiles .merge (data_runfiles )
1555+ dynamic_libraries = ctx .runfiles (
1556+ files = _get_dynamic_libraries_for_runtime (linking_context , True ),
1557+ )
1558+ library_default_runfiles = None
1559+ library_data_runfiles = None
1560+ binary_runfiles = None
1561+ if crate_info .type in ["rlib" , "lib" , "dylib" ]:
1562+ # Default runfiles for library include dynamic libraries that don't have
1563+ # a static library equivalent.
1564+ library_default_runfiles = common_runfiles .merge (dynamic_libraries )
1565+
1566+ data_runfiles = ctx .runfiles (
1567+ files = _get_dynamic_libraries_for_runtime (linking_context , False ),
1568+ )
15691569
1570- if getattr (ctx .attr , "crate" , None ):
1571- runfiles = runfiles .merge (ctx .attr .crate [DefaultInfo ].default_runfiles )
1572- runfiles = runfiles .merge (ctx .attr .crate [DefaultInfo ].data_runfiles )
1570+ # Data runfiles for library include dynamic libraries even when they have
1571+ # a static library equivalent.
1572+ library_data_runfiles = common_runfiles .merge (data_runfiles )
1573+ else :
1574+ binary_runfiles = common_runfiles .merge (dynamic_libraries )
1575+
1576+ if getattr (ctx .attr , "crate" , None ):
1577+ crate_default_info = ctx .attr .crate [DefaultInfo ]
1578+ binary_runfiles = binary_runfiles .merge_all (
1579+ [
1580+ crate_default_info .default_runfiles ,
1581+ crate_default_info .data_runfiles ,
1582+ ],
1583+ )
15731584
15741585 # TODO: Remove after some resolution to
15751586 # https://github.com/bazelbuild/rules_rust/issues/771
@@ -1592,9 +1603,9 @@ def rustc_compile_action(
15921603 DefaultInfo (
15931604 # nb. This field is required for cc_library to depend on our output.
15941605 files = depset (outputs ),
1595- default_runfiles = default_runfiles if crate_info . type not in [ "bin" , "staticlib" , "cdylib" ] else None ,
1596- data_runfiles = data_runfiles if crate_info . type not in [ "bin" , "staticlib" , "cdylib" ] else None ,
1597- runfiles = runfiles if crate_info . type in [ "bin" , "staticlib" , "cdylib" ] else None ,
1606+ default_runfiles = library_default_runfiles ,
1607+ data_runfiles = library_data_runfiles ,
1608+ runfiles = binary_runfiles ,
15981609 executable = executable ,
15991610 ),
16001611 ] + cc_info
0 commit comments