Skip to content

Commit

Permalink
Auto merge of #111675 - Urgau:fix-local-libs-for-native-static-libs, …
Browse files Browse the repository at this point in the history
…r=bjorn3

Fix local libs not included when printing native static libs

This PR fixes #111643 by adding the local used libs to the printed `--print=native-static-libs` output.

It seems that `--print=native-static-libs` doesn't have any test, so I added one. It's very simple and doesn't even tries to compile the result to a binary as I don't know how to handle external library linking in CI. (Note that https://github.com/rust-lang/rust/blob/master/tests/run-make/staticlib-dylib-linkage/Makefile does compile to a binary)

r? `@bjorn3`
  • Loading branch information
bors committed May 21, 2023
2 parents fe76e14 + 3281060 commit 1b67f8b
Show file tree
Hide file tree
Showing 4 changed files with 45 additions and 0 deletions.
2 changes: 2 additions & 0 deletions compiler/rustc_codegen_ssa/src/back/link.rs
Original file line number Diff line number Diff line change
Expand Up @@ -574,6 +574,8 @@ fn link_staticlib<'a>(
}
}

all_native_libs.extend_from_slice(&codegen_results.crate_info.used_libraries);

if sess.opts.prints.contains(&PrintRequest::NativeStaticLibs) {
print_native_static_libs(sess, &all_native_libs, &all_rust_dylibs);
}
Expand Down
15 changes: 15 additions & 0 deletions tests/run-make/print-native-static-libs/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
include ../tools.mk

# ignore-cross-compile
# ignore-wasm

all:
$(RUSTC) --crate-type rlib -lbar_cli bar.rs
$(RUSTC) foo.rs -lfoo_cli --crate-type staticlib --print native-static-libs 2>&1 \
| grep 'note: native-static-libs: ' \
| sed 's/note: native-static-libs: \(.*\)/\1/' > $(TMPDIR)/libs.txt

cat $(TMPDIR)/libs.txt | grep -F "glib-2.0" # in bar.rs
cat $(TMPDIR)/libs.txt | grep -F "systemd" # in foo.rs
cat $(TMPDIR)/libs.txt | grep -F "bar_cli"
cat $(TMPDIR)/libs.txt | grep -F "foo_cli"
13 changes: 13 additions & 0 deletions tests/run-make/print-native-static-libs/bar.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
#[no_mangle]
pub extern "C" fn my_bar_add(left: i32, right: i32) -> i32 {
// Obviously makes no sense but...
unsafe {
g_free(std::ptr::null_mut());
}
left + right
}

#[link(name = "glib-2.0")]
extern "C" {
fn g_free(p: *mut ());
}
15 changes: 15 additions & 0 deletions tests/run-make/print-native-static-libs/foo.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
extern crate bar;

#[no_mangle]
pub extern "C" fn my_foo_add(left: i32, right: i32) -> i32 {
// Obviously makes no sense but...
unsafe {
init(std::ptr::null_mut());
}
bar::my_bar_add(left, right)
}

#[link(name = "systemd")]
extern "C" {
fn init(p: *mut ());
}

0 comments on commit 1b67f8b

Please sign in to comment.