Skip to content

Commit e760204

Browse files
authored
Unrolled build for rust-lang#132820
Rollup merge of rust-lang#132820 - bjorn3:default_backend_link_impl, r=jieyouxu Add a default implementation for CodegenBackend::link As a side effect this should add raw-dylib support to cg_gcc as the default ArchiveBuilderBuilder that is used implements create_dll_import_lib. I haven't tested if the raw-dylib support actually works however.
2 parents 81eef2d + e8b1029 commit e760204

File tree

11 files changed

+22
-72
lines changed

11 files changed

+22
-72
lines changed

compiler/rustc_codegen_cranelift/src/archive.rs

-12
This file was deleted.

compiler/rustc_codegen_cranelift/src/lib.rs

-13
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@ use rustc_codegen_ssa::CodegenResults;
4343
use rustc_codegen_ssa::back::versioned_llvm_target;
4444
use rustc_codegen_ssa::traits::CodegenBackend;
4545
use rustc_data_structures::profiling::SelfProfilerRef;
46-
use rustc_errors::ErrorGuaranteed;
4746
use rustc_metadata::EncodedMetadata;
4847
use rustc_middle::dep_graph::{WorkProduct, WorkProductId};
4948
use rustc_session::Session;
@@ -56,7 +55,6 @@ use crate::prelude::*;
5655
mod abi;
5756
mod allocator;
5857
mod analyze;
59-
mod archive;
6058
mod base;
6159
mod cast;
6260
mod codegen_i128;
@@ -249,17 +247,6 @@ impl CodegenBackend for CraneliftCodegenBackend {
249247
self.config.borrow().as_ref().unwrap(),
250248
)
251249
}
252-
253-
fn link(
254-
&self,
255-
sess: &Session,
256-
codegen_results: CodegenResults,
257-
outputs: &OutputFilenames,
258-
) -> Result<(), ErrorGuaranteed> {
259-
use rustc_codegen_ssa::back::link::link_binary;
260-
261-
link_binary(sess, &crate::archive::ArArchiveBuilderBuilder, &codegen_results, outputs)
262-
}
263250
}
264251

265252
fn target_triple(sess: &Session) -> target_lexicon::Triple {

compiler/rustc_codegen_gcc/src/archive.rs

-25
This file was deleted.

compiler/rustc_codegen_gcc/src/lib.rs

+1-13
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,6 @@ extern crate rustc_driver;
5858

5959
mod abi;
6060
mod allocator;
61-
mod archive;
6261
mod asm;
6362
mod attributes;
6463
mod back;
@@ -103,7 +102,7 @@ use rustc_codegen_ssa::traits::{CodegenBackend, ExtraBackendMethods, WriteBacken
103102
use rustc_codegen_ssa::{CodegenResults, CompiledModule, ModuleCodegen};
104103
use rustc_data_structures::fx::FxIndexMap;
105104
use rustc_data_structures::sync::IntoDynSyncSend;
106-
use rustc_errors::{DiagCtxtHandle, ErrorGuaranteed};
105+
use rustc_errors::DiagCtxtHandle;
107106
use rustc_metadata::EncodedMetadata;
108107
use rustc_middle::dep_graph::{WorkProduct, WorkProductId};
109108
use rustc_middle::ty::TyCtxt;
@@ -261,17 +260,6 @@ impl CodegenBackend for GccCodegenBackend {
261260
.join(sess)
262261
}
263262

264-
fn link(
265-
&self,
266-
sess: &Session,
267-
codegen_results: CodegenResults,
268-
outputs: &OutputFilenames,
269-
) -> Result<(), ErrorGuaranteed> {
270-
use rustc_codegen_ssa::back::link::link_binary;
271-
272-
link_binary(sess, &crate::archive::ArArchiveBuilderBuilder, &codegen_results, outputs)
273-
}
274-
275263
fn target_features(&self, sess: &Session, allow_unstable: bool) -> Vec<Symbol> {
276264
target_features(sess, allow_unstable, &self.target_info)
277265
}

compiler/rustc_codegen_llvm/src/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -382,7 +382,7 @@ impl CodegenBackend for LlvmCodegenBackend {
382382

383383
// Run the linker on any artifacts that resulted from the LLVM run.
384384
// This should produce either a finished executable or library.
385-
link_binary(sess, &LlvmArchiveBuilderBuilder, &codegen_results, outputs)
385+
link_binary(sess, &LlvmArchiveBuilderBuilder, codegen_results, outputs)
386386
}
387387
}
388388

compiler/rustc_codegen_ssa/src/back/archive.rs

+8
Original file line numberDiff line numberDiff line change
@@ -304,6 +304,14 @@ pub trait ArchiveBuilder {
304304
fn build(self: Box<Self>, output: &Path) -> bool;
305305
}
306306

307+
pub struct ArArchiveBuilderBuilder;
308+
309+
impl ArchiveBuilderBuilder for ArArchiveBuilderBuilder {
310+
fn new_archive_builder<'a>(&self, sess: &'a Session) -> Box<dyn ArchiveBuilder + 'a> {
311+
Box::new(ArArchiveBuilder::new(sess, &DEFAULT_OBJECT_READER))
312+
}
313+
}
314+
307315
#[must_use = "must call build() to finish building the archive"]
308316
pub struct ArArchiveBuilder<'a> {
309317
sess: &'a Session,

compiler/rustc_codegen_ssa/src/back/link.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ pub fn ensure_removed(dcx: DiagCtxtHandle<'_>, path: &Path) {
6969
pub fn link_binary(
7070
sess: &Session,
7171
archive_builder_builder: &dyn ArchiveBuilderBuilder,
72-
codegen_results: &CodegenResults,
72+
codegen_results: CodegenResults,
7373
outputs: &OutputFilenames,
7474
) -> Result<(), ErrorGuaranteed> {
7575
let _timer = sess.timer("link_binary");
@@ -116,7 +116,7 @@ pub fn link_binary(
116116
link_rlib(
117117
sess,
118118
archive_builder_builder,
119-
codegen_results,
119+
&codegen_results,
120120
RlibFlavor::Normal,
121121
&path,
122122
)?
@@ -126,7 +126,7 @@ pub fn link_binary(
126126
link_staticlib(
127127
sess,
128128
archive_builder_builder,
129-
codegen_results,
129+
&codegen_results,
130130
&out_filename,
131131
&path,
132132
)?;
@@ -137,7 +137,7 @@ pub fn link_binary(
137137
archive_builder_builder,
138138
crate_type,
139139
&out_filename,
140-
codegen_results,
140+
&codegen_results,
141141
path.as_ref(),
142142
)?;
143143
}

compiler/rustc_codegen_ssa/src/traits/backend.rs

+5-1
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ use rustc_span::symbol::Symbol;
1616

1717
use super::CodegenObject;
1818
use super::write::WriteBackendMethods;
19+
use crate::back::archive::ArArchiveBuilderBuilder;
20+
use crate::back::link::link_binary;
1921
use crate::back::write::TargetMachineFactoryFn;
2022
use crate::{CodegenResults, ModuleCodegen};
2123

@@ -87,7 +89,9 @@ pub trait CodegenBackend {
8789
sess: &Session,
8890
codegen_results: CodegenResults,
8991
outputs: &OutputFilenames,
90-
) -> Result<(), ErrorGuaranteed>;
92+
) -> Result<(), ErrorGuaranteed> {
93+
link_binary(sess, &ArArchiveBuilderBuilder, codegen_results, outputs)
94+
}
9195

9296
/// Returns `true` if this backend can be safely called from multiple threads.
9397
///

compiler/rustc_session/src/options.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ top_level_options!(
130130
pub struct Options {
131131
/// The crate config requested for the session, which may be combined
132132
/// with additional crate configurations during the compile process.
133-
#[rustc_lint_opt_deny_field_access("use `Session::crate_types` instead of this field")]
133+
#[rustc_lint_opt_deny_field_access("use `TyCtxt::crate_types` instead of this field")]
134134
crate_types: Vec<CrateType> [TRACKED],
135135
optimize: OptLevel [TRACKED],
136136
/// Include the `debug_assertions` flag in dependency tracking, since it

tests/ui-fulldeps/internal-lints/bad_opt_access.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ pub fn access_bad_option(sess: Session) {
1515
//~^ ERROR use `Session::split_debuginfo` instead of this field
1616

1717
let _ = sess.opts.crate_types;
18-
//~^ ERROR use `Session::crate_types` instead of this field
18+
//~^ ERROR use `TyCtxt::crate_types` instead of this field
1919

2020
let _ = sess.opts.crate_name;
2121
// okay!

tests/ui-fulldeps/internal-lints/bad_opt_access.stderr

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ note: the lint level is defined here
1010
LL | #![deny(rustc::bad_opt_access)]
1111
| ^^^^^^^^^^^^^^^^^^^^^
1212

13-
error: use `Session::crate_types` instead of this field
13+
error: use `TyCtxt::crate_types` instead of this field
1414
--> $DIR/bad_opt_access.rs:17:13
1515
|
1616
LL | let _ = sess.opts.crate_types;

0 commit comments

Comments
 (0)