Skip to content

Commit

Permalink
Fix "Remove src_files and remove_file"
Browse files Browse the repository at this point in the history
  • Loading branch information
bjorn3 committed Jun 19, 2022
1 parent 43929a8 commit 7ff0df5
Show file tree
Hide file tree
Showing 5 changed files with 20 additions and 10 deletions.
6 changes: 5 additions & 1 deletion compiler/rustc_codegen_cranelift/src/archive.rs
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ impl<'a> ArchiveBuilder<'a> for ArArchiveBuilder<'a> {
Ok(())
}

fn build(mut self) {
fn build(mut self) -> bool {
enum BuilderKind {
Bsd(ar::Builder<File>),
Gnu(ar::GnuBuilder<File>),
Expand Down Expand Up @@ -191,6 +191,8 @@ impl<'a> ArchiveBuilder<'a> for ArArchiveBuilder<'a> {
)
};

let any_members = !entries.is_empty();

// Add all files
for (entry_name, data) in entries.into_iter() {
let header = ar::Header::new(entry_name, data.len() as u64);
Expand All @@ -216,6 +218,8 @@ impl<'a> ArchiveBuilder<'a> for ArArchiveBuilder<'a> {
self.sess.fatal(&format!("Ranlib exited with code {:?}", status.code()));
}
}

any_members
}

fn inject_dll_import_lib(
Expand Down
6 changes: 5 additions & 1 deletion compiler/rustc_codegen_gcc/src/archive.rs
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ impl<'a> ArchiveBuilder<'a> for ArArchiveBuilder<'a> {
Ok(())
}

fn build(mut self) {
fn build(mut self) -> bool {
use std::process::Command;

fn add_file_using_ar(archive: &Path, file: &Path) {
Expand Down Expand Up @@ -133,6 +133,8 @@ impl<'a> ArchiveBuilder<'a> for ArArchiveBuilder<'a> {
BuilderKind::Bsd(ar::Builder::new(File::create(&self.config.dst).unwrap()))
};

let any_members = !self.entries.is_empty();

// Add all files
for (entry_name, entry) in self.entries.into_iter() {
match entry {
Expand Down Expand Up @@ -193,6 +195,8 @@ impl<'a> ArchiveBuilder<'a> for ArArchiveBuilder<'a> {
if !status.success() {
self.config.sess.fatal(&format!("Ranlib exited with code {:?}", status.code()));
}

any_members
}

fn inject_dll_import_lib(&mut self, _lib_name: &str, _dll_imports: &[DllImport], _tmpdir: &MaybeTempDir) {
Expand Down
11 changes: 6 additions & 5 deletions compiler/rustc_codegen_llvm/src/back/archive.rs
Original file line number Diff line number Diff line change
Expand Up @@ -97,13 +97,14 @@ impl<'a> ArchiveBuilder<'a> for LlvmArchiveBuilder<'a> {

/// Combine the provided files, rlibs, and native libraries into a single
/// `Archive`.
fn build(mut self) {
fn build(mut self) -> bool {
let kind = self.llvm_archive_kind().unwrap_or_else(|kind| {
self.sess.fatal(&format!("Don't know how to build archive of type: {}", kind))
});

if let Err(e) = self.build_with_llvm(kind) {
self.sess.fatal(&format!("failed to build archive: {}", e));
match self.build_with_llvm(kind) {
Ok(any_members) => any_members,
Err(e) => self.sess.fatal(&format!("failed to build archive: {}", e)),
}
}

Expand Down Expand Up @@ -270,7 +271,7 @@ impl<'a> LlvmArchiveBuilder<'a> {
kind.parse().map_err(|_| kind)
}

fn build_with_llvm(&mut self, kind: ArchiveKind) -> io::Result<()> {
fn build_with_llvm(&mut self, kind: ArchiveKind) -> io::Result<bool> {
let mut additions = mem::take(&mut self.additions);
let mut strings = Vec::new();
let mut members = Vec::new();
Expand Down Expand Up @@ -353,7 +354,7 @@ impl<'a> LlvmArchiveBuilder<'a> {
};
Err(io::Error::new(io::ErrorKind::Other, msg))
} else {
Ok(())
Ok(!members.is_empty())
};
for member in members {
llvm::LLVMRustArchiveMemberFree(member);
Expand Down
2 changes: 1 addition & 1 deletion compiler/rustc_codegen_ssa/src/back/archive.rs
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ pub trait ArchiveBuilder<'a> {
where
F: FnMut(&str) -> bool + 'static;

fn build(self);
fn build(self) -> bool;

fn inject_dll_import_lib(
&mut self,
Expand Down
5 changes: 3 additions & 2 deletions compiler/rustc_codegen_ssa/src/back/link.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2503,8 +2503,9 @@ fn add_upstream_rust_crates<'a, B: ArchiveBuilder<'a>>(
}) {
sess.fatal(&format!("failed to build archive from rlib: {}", e));
}
archive.build();
link_upstream(&dst);
if archive.build() {
link_upstream(&dst);
}
});
}

Expand Down

0 comments on commit 7ff0df5

Please sign in to comment.