-
Notifications
You must be signed in to change notification settings - Fork 12.8k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Auto merge of #129018 - Oneirical:nmemonic-artifice, r=<try>
Migrate `rlib-format-packed-bundled-libs` and `native-link-modifier-bundle` `run-make` tests to rmake Part of #121876 and the associated [Google Summer of Code project](https://blog.rust-lang.org/2024/05/01/gsoc-2024-selected-projects.html). Please try: try-job: x86_64-msvc try-job: test-various
- Loading branch information
Showing
6 changed files
with
172 additions
and
79 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,85 @@ | ||
// This test exercises the `bundle` link argument, which can be turned on or off. | ||
|
||
// When building a rlib or staticlib, +bundle means that all object files from the native static | ||
// library will be added to the rlib or staticlib archive, and then used from it during linking of | ||
// the final binary. | ||
|
||
// When building a rlib -bundle means that the native static library is registered as a dependency | ||
// of that rlib "by name", and object files from it are included only during linking of the final | ||
// binary, the file search by that name is also performed during final linking. | ||
// When building a staticlib -bundle means that the native static library is simply not included | ||
// into the archive and some higher level build system will need to add it later during linking of | ||
// the final binary. | ||
|
||
// This modifier has no effect when building other targets like executables or dynamic libraries. | ||
|
||
// The default for this modifier is +bundle. | ||
// See https://github.com/rust-lang/rust/pull/95818 | ||
|
||
// FIXME(Oneirical): cross compile and MSVC | ||
|
||
use run_make_support::{ | ||
build_native_static_lib, dynamic_lib_name, llvm_nm, rust_lib_name, rustc, static_lib_name, | ||
}; | ||
|
||
fn main() { | ||
build_native_static_lib("native-staticlib"); | ||
// Build a staticlib and a rlib, the `native_func` symbol will be bundled into them | ||
rustc().input("bundled.rs").crate_type("staticlib").crate_type("rlib").run(); | ||
llvm_nm() | ||
.input(static_lib_name("bundled")) | ||
.run() | ||
.assert_stdout_contains_regex("T _*native_func"); | ||
llvm_nm() | ||
.input(static_lib_name("bundled")) | ||
.run() | ||
.assert_stdout_contains_regex("U _*native_func"); | ||
llvm_nm().input(rust_lib_name("bundled")).run().assert_stdout_contains_regex("T _*native_func"); | ||
llvm_nm().input(rust_lib_name("bundled")).run().assert_stdout_contains_regex("U _*native_func"); | ||
|
||
// Build a staticlib and a rlib, the `native_func` symbol will not be bundled into it | ||
build_native_static_lib("native-staticlib"); | ||
rustc().input("non-bundled.rs").crate_type("staticlib").crate_type("rlib").run(); | ||
llvm_nm() | ||
.input(static_lib_name("non_bundled")) | ||
.run() | ||
.assert_stdout_not_contains_regex("T _*native_func"); | ||
llvm_nm() | ||
.input(static_lib_name("non_bundled")) | ||
.run() | ||
.assert_stdout_contains_regex("U _*native_func"); | ||
llvm_nm() | ||
.input(rust_lib_name("non_bundled")) | ||
.run() | ||
.assert_stdout_not_contains_regex("T _*native_func"); | ||
llvm_nm() | ||
.input(rust_lib_name("non_bundled")) | ||
.run() | ||
.assert_stdout_contains_regex("U _*native_func"); | ||
|
||
// Build a cdylib, `native-staticlib` will not appear on the linker line because it was bundled | ||
// previously. The cdylib will contain the `native_func` symbol in the end. | ||
rustc() | ||
.input("cdylib-bundled.rs") | ||
.crate_type("cdylib") | ||
.print("link-args") | ||
.run() | ||
.assert_stdout_not_contains(r#"-l[" ]*native-staticlib"#); | ||
llvm_nm() | ||
.input(dynamic_lib_name("cdylib_bundled")) | ||
.run() | ||
.assert_stdout_contains_regex("[Tt] _*native_func"); | ||
|
||
// Build a cdylib, `native-staticlib` will appear on the linker line because it was not bundled | ||
// previously. The cdylib will contain the `native_func` symbol in the end | ||
rustc() | ||
.input("cdylib-non-bundled.rs") | ||
.crate_type("cdylib") | ||
.print("link-args") | ||
.run() | ||
.assert_stdout_contains_regex(r#"-l[" ]*native-staticlib"#); | ||
llvm_nm() | ||
.input(dynamic_lib_name("cdylib_non_bundled")) | ||
.run() | ||
.assert_stdout_contains_regex("[Tt] _*native_func"); | ||
} |
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,81 @@ | ||
// `-Z packed_bundled_libs` is an unstable rustc flag that makes the compiler | ||
// only require a native library and no supplementary object files to compile. | ||
// Output files compiled with this flag should still contain all expected symbols - | ||
// that is what this test checks. | ||
// See https://github.com/rust-lang/rust/pull/100101 | ||
|
||
// FIXME(Oneirical): MSVC and cross-compile | ||
|
||
use run_make_support::{ | ||
bin_name, build_native_static_lib, cwd, filename_contains, llvm_ar, llvm_nm, rfs, | ||
rust_lib_name, rustc, shallow_find_files, | ||
}; | ||
|
||
fn main() { | ||
build_native_static_lib("native_dep_1"); | ||
build_native_static_lib("native_dep_2"); | ||
build_native_static_lib("native_dep_3"); | ||
rustc().input("rust_dep_up.rs").crate_type("rlib").arg("-Zpacked_bundled_libs").run(); | ||
llvm_nm() | ||
.input(rust_lib_name("rust_dep_up")) | ||
.run() | ||
.assert_stdout_contains_regex("U.*native_f2"); | ||
llvm_nm() | ||
.input(rust_lib_name("rust_dep_up")) | ||
.run() | ||
.assert_stdout_contains_regex("U.*native_f3"); | ||
llvm_nm() | ||
.input(rust_lib_name("rust_dep_up")) | ||
.run() | ||
.assert_stdout_contains_regex("T.*rust_dep_up"); | ||
llvm_ar() | ||
.table_of_contents() | ||
.arg(rust_lib_name("rust_dep_up")) | ||
.run() | ||
.assert_stdout_contains("native_dep_2"); | ||
llvm_ar() | ||
.table_of_contents() | ||
.arg(rust_lib_name("rust_dep_up")) | ||
.run() | ||
.assert_stdout_contains("native_dep_3"); | ||
rustc() | ||
.input("rust_dep_local.rs") | ||
.extern_("rlib", rust_lib_name("rust_dep_up")) | ||
.arg("-Zpacked_bundled_libs") | ||
.crate_type("rlib") | ||
.run(); | ||
llvm_nm() | ||
.input(rust_lib_name("rust_dep_local")) | ||
.run() | ||
.assert_stdout_contains_regex("U.*native_f1"); | ||
llvm_nm() | ||
.input(rust_lib_name("rust_dep_local")) | ||
.run() | ||
.assert_stdout_contains_regex("T.*rust_dep_local"); | ||
llvm_ar() | ||
.table_of_contents() | ||
.arg(rust_lib_name("rust_dep_local")) | ||
.run() | ||
.assert_stdout_contains("native_dep_1"); | ||
|
||
// Ensure the compiler will not use files it should not know about. | ||
for file in shallow_find_files(cwd(), |path| filename_contains(path, "native_dep_")) { | ||
rfs::remove_file(file); | ||
} | ||
|
||
rustc() | ||
.input("main.rs") | ||
.extern_("lib", rust_lib_name("rust_dep_local")) | ||
.output(bin_name("main")) | ||
.arg("-Zpacked_bundled_libs") | ||
.print("link-args") | ||
.run() | ||
.assert_stdout_contains_regex("native_dep_1.*native_dep_2.*native_dep_3"); | ||
|
||
//FIXME(Oneirical): This part will apparently fail on MSVC | ||
llvm_nm().input(bin_name("main")).run().assert_stdout_contains_regex("T.*native_f1"); | ||
llvm_nm().input(bin_name("main")).run().assert_stdout_contains_regex("T.*native_f2"); | ||
llvm_nm().input(bin_name("main")).run().assert_stdout_contains_regex("T.*native_f3"); | ||
llvm_nm().input(bin_name("main")).run().assert_stdout_contains_regex("T.*rust_dep_local"); | ||
llvm_nm().input(bin_name("main")).run().assert_stdout_contains_regex("T.*rust_dep_up"); | ||
} |