Skip to content

Commit d11537d

Browse files
authored
Rollup merge of rust-lang#80187 - 0dvictor:nativelib, r=bjorn3
Exclude unnecessary info from CodegenResults `foreign_module` and `wasm_import_module` are not needed for linking, and hence can be removed from CodegenResults. Fixes rust-lang#77857
2 parents ba00a23 + e8a564e commit d11537d

File tree

4 files changed

+30
-7
lines changed

4 files changed

+30
-7
lines changed

compiler/rustc_codegen_ssa/src/back/link.rs

+3-2
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ use rustc_data_structures::fx::FxHashSet;
22
use rustc_data_structures::temp_dir::MaybeTempDir;
33
use rustc_fs_util::fix_windows_verbatim_for_gcc;
44
use rustc_hir::def_id::CrateNum;
5-
use rustc_middle::middle::cstore::{EncodedMetadata, LibSource, NativeLib};
5+
use rustc_middle::middle::cstore::{EncodedMetadata, LibSource};
66
use rustc_middle::middle::dependency_format::Linkage;
77
use rustc_session::config::{self, CFGuard, CrateType, DebugInfo};
88
use rustc_session::config::{OutputFilenames, OutputType, PrintRequest, SanitizerSet};
@@ -22,7 +22,8 @@ use super::command::Command;
2222
use super::linker::{self, Linker};
2323
use super::rpath::{self, RPathConfig};
2424
use crate::{
25-
looks_like_rust_object_file, CodegenResults, CompiledModule, CrateInfo, METADATA_FILENAME,
25+
looks_like_rust_object_file, CodegenResults, CompiledModule, CrateInfo, NativeLib,
26+
METADATA_FILENAME,
2627
};
2728

2829
use cc::windows_registry;

compiler/rustc_codegen_ssa/src/base.rs

+3-2
Original file line numberDiff line numberDiff line change
@@ -766,7 +766,7 @@ impl CrateInfo {
766766
profiler_runtime: None,
767767
is_no_builtins: Default::default(),
768768
native_libraries: Default::default(),
769-
used_libraries: tcx.native_libraries(LOCAL_CRATE),
769+
used_libraries: tcx.native_libraries(LOCAL_CRATE).iter().map(Into::into).collect(),
770770
link_args: tcx.link_args(LOCAL_CRATE),
771771
crate_name: Default::default(),
772772
used_crates_dynamic: cstore::used_crates(tcx, LinkagePreference::RequireDynamic),
@@ -787,7 +787,8 @@ impl CrateInfo {
787787
info.missing_lang_items.reserve(n_crates);
788788

789789
for &cnum in crates.iter() {
790-
info.native_libraries.insert(cnum, tcx.native_libraries(cnum));
790+
info.native_libraries
791+
.insert(cnum, tcx.native_libraries(cnum).iter().map(Into::into).collect());
791792
info.crate_name.insert(cnum, tcx.crate_name(cnum).to_string());
792793
info.used_crate_source.insert(cnum, tcx.used_crate_source(cnum));
793794
if tcx.is_panic_runtime(cnum) {

compiler/rustc_codegen_ssa/src/lib.rs

+18-3
Original file line numberDiff line numberDiff line change
@@ -21,15 +21,17 @@ extern crate tracing;
2121
#[macro_use]
2222
extern crate rustc_middle;
2323

24+
use rustc_ast as ast;
2425
use rustc_data_structures::fx::{FxHashMap, FxHashSet};
2526
use rustc_data_structures::sync::Lrc;
2627
use rustc_hir::def_id::CrateNum;
2728
use rustc_hir::LangItem;
2829
use rustc_middle::dep_graph::WorkProduct;
29-
use rustc_middle::middle::cstore::{CrateSource, LibSource, NativeLib};
30+
use rustc_middle::middle::cstore::{self, CrateSource, LibSource};
3031
use rustc_middle::middle::dependency_format::Dependencies;
3132
use rustc_middle::ty::query::Providers;
3233
use rustc_session::config::{OutputFilenames, OutputType, RUST_CGU_EXT};
34+
use rustc_session::utils::NativeLibKind;
3335
use rustc_span::symbol::Symbol;
3436
use std::path::{Path, PathBuf};
3537

@@ -105,6 +107,19 @@ bitflags::bitflags! {
105107
}
106108
}
107109

110+
#[derive(Clone, Debug, Encodable, Decodable, HashStable)]
111+
pub struct NativeLib {
112+
pub kind: NativeLibKind,
113+
pub name: Option<Symbol>,
114+
pub cfg: Option<ast::MetaItem>,
115+
}
116+
117+
impl From<&cstore::NativeLib> for NativeLib {
118+
fn from(lib: &cstore::NativeLib) -> Self {
119+
NativeLib { kind: lib.kind.clone(), name: lib.name.clone(), cfg: lib.cfg.clone() }
120+
}
121+
}
122+
108123
/// Misc info we load from metadata to persist beyond the tcx.
109124
///
110125
/// Note: though `CrateNum` is only meaningful within the same tcx, information within `CrateInfo`
@@ -119,9 +134,9 @@ pub struct CrateInfo {
119134
pub compiler_builtins: Option<CrateNum>,
120135
pub profiler_runtime: Option<CrateNum>,
121136
pub is_no_builtins: FxHashSet<CrateNum>,
122-
pub native_libraries: FxHashMap<CrateNum, Lrc<Vec<NativeLib>>>,
137+
pub native_libraries: FxHashMap<CrateNum, Vec<NativeLib>>,
123138
pub crate_name: FxHashMap<CrateNum, String>,
124-
pub used_libraries: Lrc<Vec<NativeLib>>,
139+
pub used_libraries: Vec<NativeLib>,
125140
pub link_args: Lrc<Vec<String>>,
126141
pub used_crate_source: FxHashMap<CrateNum, Lrc<CrateSource>>,
127142
pub used_crates_static: Vec<(CrateNum, LibSource)>,
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
-include ../tools.mk
2+
3+
all:
4+
echo 'fn main(){}' | $(RUSTC) -Z no-link -
5+
$(RUSTC) -Z link-only $(TMPDIR)/rust_out.rlink
6+
$(call RUN,rust_out)

0 commit comments

Comments
 (0)