Skip to content

Commit 1d3de31

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

File tree

4 files changed

+92
-40
lines changed

4 files changed

+92
-40
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,88 @@
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+
// FIXME(Oneirical): MSVC
23+
24+
use run_make_support::{
25+
build_native_static_lib, dynamic_lib_name, llvm_nm, rust_lib_name, rustc, static_lib_name,
26+
};
27+
28+
fn main() {
29+
build_native_static_lib("native-staticlib");
30+
// Build a staticlib and a rlib, the `native_func` symbol will be bundled into them
31+
rustc().input("bundled.rs").crate_type("staticlib").crate_type("rlib").run();
32+
llvm_nm()
33+
.input(static_lib_name("bundled"))
34+
.run()
35+
.assert_stdout_contains_regex("T _*native_func");
36+
llvm_nm()
37+
.input(static_lib_name("bundled"))
38+
.run()
39+
.assert_stdout_contains_regex("U _*native_func");
40+
llvm_nm().input(rust_lib_name("bundled")).run().assert_stdout_contains_regex("T _*native_func");
41+
llvm_nm().input(rust_lib_name("bundled")).run().assert_stdout_contains_regex("U _*native_func");
42+
43+
// Build a staticlib and a rlib, the `native_func` symbol will not be bundled into it
44+
build_native_static_lib("native-staticlib");
45+
rustc().input("non-bundled.rs").crate_type("staticlib").crate_type("rlib").run();
46+
llvm_nm()
47+
.input(static_lib_name("non_bundled"))
48+
.run()
49+
.assert_stdout_not_contains_regex("T _*native_func");
50+
llvm_nm()
51+
.input(static_lib_name("non_bundled"))
52+
.run()
53+
.assert_stdout_contains_regex("U _*native_func");
54+
llvm_nm()
55+
.input(rust_lib_name("non_bundled"))
56+
.run()
57+
.assert_stdout_not_contains_regex("T _*native_func");
58+
llvm_nm()
59+
.input(rust_lib_name("non_bundled"))
60+
.run()
61+
.assert_stdout_contains_regex("U _*native_func");
62+
63+
// Build a cdylib, `native-staticlib` will not appear on the linker line because it was bundled
64+
// previously. The cdylib will contain the `native_func` symbol in the end.
65+
rustc()
66+
.input("cdylib-bundled.rs")
67+
.crate_type("cdylib")
68+
.print("link-args")
69+
.run()
70+
.assert_stdout_not_contains(r#"-l[" ]*native-staticlib"#);
71+
llvm_nm()
72+
.input(dynamic_lib_name("cdylib_bundled"))
73+
.run()
74+
.assert_stdout_contains_regex("[Tt] _*native_func");
75+
76+
// Build a cdylib, `native-staticlib` will appear on the linker line because it was not bundled
77+
// previously. The cdylib will contain the `native_func` symbol in the end
78+
rustc()
79+
.input("cdylib-non-bundled.rs")
80+
.crate_type("cdylib")
81+
.print("link-args")
82+
.run()
83+
.assert_stdout_contains_regex(r#"-l[" ]*native-staticlib"#);
84+
llvm_nm()
85+
.input(dynamic_lib_name("cdylib_non_bundled"))
86+
.run()
87+
.assert_stdout_contains_regex("[Tt] _*native_func");
88+
}

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

+4-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,10 @@
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
9+
10+
// FIXME(Oneirical): MSVC
811

912
use run_make_support::{
1013
bin_name, build_native_static_lib, cwd, filename_contains, llvm_ar, llvm_nm, rfs,

0 commit comments

Comments
 (0)