Skip to content

Commit 30fa7f6

Browse files
committed
rewrite native-link-modifier-bundle to rmake
1 parent 2b8e93d commit 30fa7f6

File tree

4 files changed

+101
-47
lines changed

4 files changed

+101
-47
lines changed

src/tools/tidy/src/allowed_run_make_makefiles.txt

-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ run-make/libtest-junit/Makefile
1414
run-make/libtest-thread-limit/Makefile
1515
run-make/macos-deployment-target/Makefile
1616
run-make/min-global-align/Makefile
17-
run-make/native-link-modifier-bundle/Makefile
1817
run-make/no-alloc-shim/Makefile
1918
run-make/remap-path-prefix-dwarf/Makefile
2019
run-make/reproducible-build/Makefile

tests/run-make/native-link-modifier-bundle/Makefile

-38
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
// This test exercises the `bundle` link argument, which can be turned on or off.
2+
3+
// When building a rlib or staticlib, +bundle means that all object files from the native static
4+
// library will be added to the rlib or staticlib archive, and then used from it during linking of
5+
// the final binary.
6+
7+
// When building a rlib -bundle means that the native static library is registered as a dependency
8+
// of that rlib "by name", and object files from it are included only during linking of the final
9+
// binary, the file search by that name is also performed during final linking.
10+
// When building a staticlib -bundle means that the native static library is simply not included
11+
// into the archive and some higher level build system will need to add it later during linking of
12+
// the final binary.
13+
14+
// This modifier has no effect when building other targets like executables or dynamic libraries.
15+
16+
// The default for this modifier is +bundle.
17+
// See https://github.com/rust-lang/rust/pull/95818
18+
19+
//@ ignore-cross-compile
20+
// Reason: cross-compilation fails to export native symbols
21+
22+
use run_make_support::{
23+
build_native_static_lib, dynamic_lib_name, is_msvc, llvm_nm, rust_lib_name, rustc,
24+
static_lib_name,
25+
};
26+
27+
fn main() {
28+
build_native_static_lib("native-staticlib");
29+
// Build a staticlib and a rlib, the `native_func` symbol will be bundled into them
30+
rustc().input("bundled.rs").crate_type("staticlib").crate_type("rlib").run();
31+
llvm_nm()
32+
.input(static_lib_name("bundled"))
33+
.run()
34+
.assert_stdout_contains_regex("T _*native_func");
35+
llvm_nm()
36+
.input(static_lib_name("bundled"))
37+
.run()
38+
.assert_stdout_contains_regex("U _*native_func");
39+
llvm_nm().input(rust_lib_name("bundled")).run().assert_stdout_contains_regex("T _*native_func");
40+
llvm_nm().input(rust_lib_name("bundled")).run().assert_stdout_contains_regex("U _*native_func");
41+
42+
// Build a staticlib and a rlib, the `native_func` symbol will not be bundled into it
43+
build_native_static_lib("native-staticlib");
44+
rustc().input("non-bundled.rs").crate_type("staticlib").crate_type("rlib").run();
45+
llvm_nm()
46+
.input(static_lib_name("non_bundled"))
47+
.run()
48+
.assert_stdout_not_contains_regex("T _*native_func");
49+
llvm_nm()
50+
.input(static_lib_name("non_bundled"))
51+
.run()
52+
.assert_stdout_contains_regex("U _*native_func");
53+
llvm_nm()
54+
.input(rust_lib_name("non_bundled"))
55+
.run()
56+
.assert_stdout_not_contains_regex("T _*native_func");
57+
llvm_nm()
58+
.input(rust_lib_name("non_bundled"))
59+
.run()
60+
.assert_stdout_contains_regex("U _*native_func");
61+
62+
// This part of the test does not function on Windows MSVC - no symbols are printed.
63+
if !is_msvc() {
64+
// Build a cdylib, `native-staticlib` will not appear on the linker line because it was
65+
// bundled previously. The cdylib will contain the `native_func` symbol in the end.
66+
rustc()
67+
.input("cdylib-bundled.rs")
68+
.crate_type("cdylib")
69+
.print("link-args")
70+
.run()
71+
.assert_stdout_not_contains(r#"-l[" ]*native-staticlib"#);
72+
llvm_nm()
73+
.input(dynamic_lib_name("cdylib_bundled"))
74+
.run()
75+
.assert_stdout_contains_regex("[Tt] _*native_func");
76+
77+
// Build a cdylib, `native-staticlib` will appear on the linker line because it was not
78+
// bundled previously. The cdylib will contain the `native_func` symbol in the end
79+
rustc()
80+
.input("cdylib-non-bundled.rs")
81+
.crate_type("cdylib")
82+
.print("link-args")
83+
.run()
84+
.assert_stdout_contains_regex(r#"-l[" ]*native-staticlib"#);
85+
llvm_nm()
86+
.input(dynamic_lib_name("cdylib_non_bundled"))
87+
.run()
88+
.assert_stdout_contains_regex("[Tt] _*native_func");
89+
}
90+
}

tests/run-make/rlib-format-packed-bundled-libs/rmake.rs

+11-8
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,11 @@
44
// that is what this test checks.
55
// See https://github.com/rust-lang/rust/pull/100101
66

7-
// FIXME(Oneirical): MSVC and cross-compile
7+
//@ ignore-cross-compile
8+
// Reason: cross-compilation fails to export native symbols
89

910
use run_make_support::{
10-
bin_name, build_native_static_lib, cwd, filename_contains, llvm_ar, llvm_nm, rfs,
11+
bin_name, build_native_static_lib, cwd, filename_contains, is_msvc, llvm_ar, llvm_nm, rfs,
1112
rust_lib_name, rustc, shallow_find_files,
1213
};
1314

@@ -72,10 +73,12 @@ fn main() {
7273
.run()
7374
.assert_stdout_contains_regex("native_dep_1.*native_dep_2.*native_dep_3");
7475

75-
//FIXME(Oneirical): This part will apparently fail on MSVC
76-
llvm_nm().input(bin_name("main")).run().assert_stdout_contains_regex("T.*native_f1");
77-
llvm_nm().input(bin_name("main")).run().assert_stdout_contains_regex("T.*native_f2");
78-
llvm_nm().input(bin_name("main")).run().assert_stdout_contains_regex("T.*native_f3");
79-
llvm_nm().input(bin_name("main")).run().assert_stdout_contains_regex("T.*rust_dep_local");
80-
llvm_nm().input(bin_name("main")).run().assert_stdout_contains_regex("T.*rust_dep_up");
76+
// The binary "main" will not contain any symbols on MSVC.
77+
if !is_msvc() {
78+
llvm_nm().input(bin_name("main")).run().assert_stdout_contains_regex("T.*native_f1");
79+
llvm_nm().input(bin_name("main")).run().assert_stdout_contains_regex("T.*native_f2");
80+
llvm_nm().input(bin_name("main")).run().assert_stdout_contains_regex("T.*native_f3");
81+
llvm_nm().input(bin_name("main")).run().assert_stdout_contains_regex("T.*rust_dep_local");
82+
llvm_nm().input(bin_name("main")).run().assert_stdout_contains_regex("T.*rust_dep_up");
83+
}
8184
}

0 commit comments

Comments
 (0)