rewrite rlib-format-packed-bundled-libs-3 to rmake
This commit is contained in:
parent
7d3cbb3e93
commit
f1747f40a3
@ -92,7 +92,6 @@ run-make/reproducible-build-2/Makefile
|
|||||||
run-make/reproducible-build/Makefile
|
run-make/reproducible-build/Makefile
|
||||||
run-make/return-non-c-like-enum-from-c/Makefile
|
run-make/return-non-c-like-enum-from-c/Makefile
|
||||||
run-make/rlib-format-packed-bundled-libs-2/Makefile
|
run-make/rlib-format-packed-bundled-libs-2/Makefile
|
||||||
run-make/rlib-format-packed-bundled-libs-3/Makefile
|
|
||||||
run-make/rlib-format-packed-bundled-libs/Makefile
|
run-make/rlib-format-packed-bundled-libs/Makefile
|
||||||
run-make/sanitizer-cdylib-link/Makefile
|
run-make/sanitizer-cdylib-link/Makefile
|
||||||
run-make/sanitizer-dylib-link/Makefile
|
run-make/sanitizer-dylib-link/Makefile
|
||||||
|
@ -1,35 +0,0 @@
|
|||||||
include ../tools.mk
|
|
||||||
|
|
||||||
# ignore-cross-compile
|
|
||||||
# only-linux
|
|
||||||
|
|
||||||
# Make sure -Zpacked_bundled_libs-like behavior activates with +bundle,+whole-archive.
|
|
||||||
|
|
||||||
# We're using the llvm-nm instead of the system nm to ensure it is compatible
|
|
||||||
# with the LLVM bitcode generated by rustc.
|
|
||||||
NM = "$(LLVM_BIN_DIR)"/llvm-nm
|
|
||||||
|
|
||||||
all: $(call NATIVE_STATICLIB,native_dep_1) $(call NATIVE_STATICLIB,native_dep_2) $(call NATIVE_STATICLIB,native_dep_3) $(call NATIVE_STATICLIB,native_dep_4)
|
|
||||||
# test cfg with packed bundle
|
|
||||||
$(RUSTC) rust_dep_cfg.rs --crate-type=rlib
|
|
||||||
$(RUSTC) main.rs --extern rust_dep=$(TMPDIR)/librust_dep_cfg.rlib --crate-type=staticlib --cfg should_add
|
|
||||||
$(AR) t $(TMPDIR)/librust_dep_cfg.rlib | $(CGREP) -e "libnative_dep_1.a"
|
|
||||||
$(AR) t $(TMPDIR)/librust_dep_cfg.rlib | $(CGREP) -e "libnative_dep_2.a"
|
|
||||||
$(AR) t $(TMPDIR)/libmain.a | $(CGREP) -e "libnative_dep_1.o"
|
|
||||||
$(AR) t $(TMPDIR)/libmain.a | $(CGREP) -ev "libnative_dep_2.o"
|
|
||||||
|
|
||||||
|
|
||||||
# test bundle with whole_archive
|
|
||||||
$(RUSTC) rust_dep.rs --crate-type=rlib
|
|
||||||
$(AR) t $(TMPDIR)/librust_dep.rlib | $(CGREP) -e "native_dep_1"
|
|
||||||
$(AR) t $(TMPDIR)/librust_dep.rlib | $(CGREP) -e "native_dep_3"
|
|
||||||
$(AR) t $(TMPDIR)/librust_dep.rlib | $(CGREP) -ev "native_dep_2"
|
|
||||||
$(AR) t $(TMPDIR)/librust_dep.rlib | $(CGREP) -ev "native_dep_4"
|
|
||||||
|
|
||||||
# Make sure compiler doesn't use files, that it shouldn't know about.
|
|
||||||
rm $(TMPDIR)/libnative_dep_1.a
|
|
||||||
rm $(TMPDIR)/libnative_dep_3.a
|
|
||||||
|
|
||||||
$(RUSTC) main.rs --extern rust_dep=$(TMPDIR)/librust_dep.rlib --print link-args > $(TMPDIR)/link_args
|
|
||||||
cat $(TMPDIR)/link_args | $(CGREP) -ev "native_dep_3"
|
|
||||||
cat $(TMPDIR)/link_args | $(CGREP) -e "--whole-archive.*native_dep_1.*--whole-archive.*lnative_dep_2.*no-whole-archive.*lnative_dep_4"
|
|
88
tests/run-make/rlib-format-packed-bundled-libs-3/rmake.rs
Normal file
88
tests/run-make/rlib-format-packed-bundled-libs-3/rmake.rs
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
// `-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.
|
||||||
|
// #105601 made it possible to have this behaviour without an unstable flag by
|
||||||
|
// passing +bundle in modifiers, and this test checks that this feature successfully
|
||||||
|
// compiles and includes only the static libraries, with no object files.
|
||||||
|
// See https://github.com/rust-lang/rust/pull/105601
|
||||||
|
|
||||||
|
use run_make_support::{
|
||||||
|
build_native_static_lib, fs_wrapper, is_msvc, llvm_ar, regex, rust_lib_name, rustc,
|
||||||
|
static_lib_name,
|
||||||
|
};
|
||||||
|
|
||||||
|
// FIXME only-linux test-various
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
build_native_static_lib("native_dep_1");
|
||||||
|
build_native_static_lib("native_dep_2");
|
||||||
|
build_native_static_lib("native_dep_3");
|
||||||
|
build_native_static_lib("native_dep_4");
|
||||||
|
// Test cfg with packed bundle.
|
||||||
|
rustc().input("rust_dep_cfg.rs").crate_type("rlib").run();
|
||||||
|
rustc()
|
||||||
|
.input("main.rs")
|
||||||
|
.extern_("rust_dep", rust_lib_name("rust_dep_cfg"))
|
||||||
|
.crate_type("staticlib")
|
||||||
|
.cfg("should_add")
|
||||||
|
.run();
|
||||||
|
// Only static libraries should appear, no object files at all.
|
||||||
|
llvm_ar()
|
||||||
|
.arg("t")
|
||||||
|
.arg(rust_lib_name("rust_dep_cfg"))
|
||||||
|
.run()
|
||||||
|
.assert_stdout_contains(static_lib_name("native_dep_1"));
|
||||||
|
llvm_ar()
|
||||||
|
.arg("t")
|
||||||
|
.arg(rust_lib_name("rust_dep_cfg"))
|
||||||
|
.run()
|
||||||
|
.assert_stdout_contains(static_lib_name("native_dep_2"));
|
||||||
|
llvm_ar()
|
||||||
|
.arg("t")
|
||||||
|
.arg(static_lib_name("main"))
|
||||||
|
.run()
|
||||||
|
.assert_stdout_contains(object_file_name("native_dep_1"));
|
||||||
|
llvm_ar()
|
||||||
|
.arg("t")
|
||||||
|
.arg(static_lib_name("main"))
|
||||||
|
.run()
|
||||||
|
.assert_stdout_not_contains(object_file_name("native_dep_2"));
|
||||||
|
|
||||||
|
// Test bundle with whole archive.
|
||||||
|
rustc().input("rust_dep.rs").crate_type("rlib").run();
|
||||||
|
// Only deps with `+bundle` should appear.
|
||||||
|
llvm_ar().arg("t").arg(rust_lib_name("rust_dep")).run().assert_stdout_contains("native_dep_1");
|
||||||
|
llvm_ar().arg("t").arg(rust_lib_name("rust_dep")).run().assert_stdout_contains("native_dep_3");
|
||||||
|
llvm_ar()
|
||||||
|
.arg("t")
|
||||||
|
.arg(rust_lib_name("rust_dep"))
|
||||||
|
.run()
|
||||||
|
.assert_stdout_not_contains("native_dep_2");
|
||||||
|
llvm_ar()
|
||||||
|
.arg("t")
|
||||||
|
.arg(rust_lib_name("rust_dep"))
|
||||||
|
.run()
|
||||||
|
.assert_stdout_not_contains("native_dep_4");
|
||||||
|
|
||||||
|
// The compiler shouldn't use files which it doesn't know about.
|
||||||
|
fs_wrapper::remove_file(static_lib_name("native_dep_1"));
|
||||||
|
fs_wrapper::remove_file(static_lib_name("native_dep_3"));
|
||||||
|
|
||||||
|
let out = rustc()
|
||||||
|
.input("main.rs")
|
||||||
|
.extern_("rust_dep", rust_lib_name("rust_dep"))
|
||||||
|
.print("link-args")
|
||||||
|
.run()
|
||||||
|
.assert_stdout_not_contains("native_dep_3")
|
||||||
|
.stdout_utf8();
|
||||||
|
|
||||||
|
let re = regex::Regex::new(
|
||||||
|
"--whole-archive.*native_dep_1.*--whole-archive.*lnative_dep_2.*no-whole-archive.*lnative_dep_4"
|
||||||
|
).unwrap();
|
||||||
|
|
||||||
|
assert!(re.is_match(&out));
|
||||||
|
}
|
||||||
|
|
||||||
|
//FIXME(Oneirical): potential helper fn if this works on msvc too
|
||||||
|
fn object_file_name(name: &str) -> String {
|
||||||
|
if is_msvc() { format!("{name}.obj") } else { format!("{name}.o") }
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user