rewrite raw-dylib-inline-cross-dylib to rmake
This commit is contained in:
parent
9a21ac8e7e
commit
ae144bfff0
@ -121,7 +121,6 @@ run-make/raw-dylib-alt-calling-convention/Makefile
|
||||
run-make/raw-dylib-c/Makefile
|
||||
run-make/raw-dylib-custom-dlltool/Makefile
|
||||
run-make/raw-dylib-import-name-type/Makefile
|
||||
run-make/raw-dylib-inline-cross-dylib/Makefile
|
||||
run-make/raw-dylib-link-ordinal/Makefile
|
||||
run-make/raw-dylib-stdcall-ordinal/Makefile
|
||||
run-make/redundant-libs/Makefile
|
||||
|
@ -1,30 +0,0 @@
|
||||
# Regression test for calling an inline function that uses a raw-dylib function.
|
||||
|
||||
# only-windows
|
||||
|
||||
include ../tools.mk
|
||||
|
||||
# We'd be using the llvm-objdump instead of the system objdump to ensure compatibility
|
||||
# with the LLVM bitcode generated by rustc but on Windows piping/IO redirection under MSYS2 is wonky with llvm-objdump.
|
||||
OBJDUMP = objdump
|
||||
|
||||
all:
|
||||
$(RUSTC) --crate-type dylib --crate-name raw_dylib_test lib.rs -C prefer-dynamic
|
||||
$(RUSTC) --crate-type dylib --crate-name raw_dylib_test_wrapper lib_wrapper.rs -C prefer-dynamic
|
||||
$(RUSTC) --crate-type bin driver.rs -L "$(TMPDIR)" -C prefer-dynamic
|
||||
# Make sure we don't find an import to the functions we expect to be inlined.
|
||||
$(OBJDUMP) -p $(TMPDIR)/driver.exe | $(CGREP) -v -e "inline_library_function"
|
||||
$(OBJDUMP) -p $(TMPDIR)/driver.exe | $(CGREP) -v -e "inline_library_function_calls_inline"
|
||||
# Make sure we do find an import to the functions we expect to be imported.
|
||||
$(OBJDUMP) -p $(TMPDIR)/driver.exe | $(CGREP) -e "library_function"
|
||||
$(call COMPILE_OBJ,"$(TMPDIR)"/extern_1.obj,extern_1.c)
|
||||
$(call COMPILE_OBJ,"$(TMPDIR)"/extern_2.obj,extern_2.c)
|
||||
ifdef IS_MSVC
|
||||
$(CC) "$(TMPDIR)"/extern_1.obj -link -dll -out:"$(TMPDIR)"/extern_1.dll -noimplib
|
||||
$(CC) "$(TMPDIR)"/extern_2.obj -link -dll -out:"$(TMPDIR)"/extern_2.dll -noimplib
|
||||
else
|
||||
$(CC) "$(TMPDIR)"/extern_1.obj -shared -o "$(TMPDIR)"/extern_1.dll
|
||||
$(CC) "$(TMPDIR)"/extern_2.obj -shared -o "$(TMPDIR)"/extern_2.dll
|
||||
endif
|
||||
$(call RUN,driver) | tr -d '\r' > "$(TMPDIR)"/output.txt
|
||||
$(RUSTC_TEST_OP) "$(TMPDIR)"/output.txt output.txt
|
61
tests/run-make/raw-dylib-inline-cross-dylib/rmake.rs
Normal file
61
tests/run-make/raw-dylib-inline-cross-dylib/rmake.rs
Normal file
@ -0,0 +1,61 @@
|
||||
// When we generate the import library for a dylib or bin crate, we should generate it
|
||||
// for the symbols both for the current crate and all upstream crates. This allows for
|
||||
// using the link kind `raw-dylib` inside inline functions successfully. This test checks
|
||||
// that the import symbols in the object files match this convention, and that execution
|
||||
// of the binary results in all function names exported successfully.
|
||||
// See https://github.com/rust-lang/rust/pull/102988
|
||||
|
||||
//@ only-windows
|
||||
|
||||
use run_make_support::{cc, diff, is_msvc, llvm_objdump, run, rustc};
|
||||
|
||||
fn main() {
|
||||
rustc()
|
||||
.crate_type("dylib")
|
||||
.crate_name("raw_dylib_test")
|
||||
.input("lib.rs")
|
||||
.arg("-Cprefer-dynamic")
|
||||
.run();
|
||||
rustc()
|
||||
.crate_type("dylib")
|
||||
.crate_name("raw_dylib_test_wrapper")
|
||||
.input("lib_wrapper.rs")
|
||||
.arg("-Cprefer-dynamic")
|
||||
.run();
|
||||
rustc().crate_type("bin").input("driver.rs").arg("-Cprefer-dynamic").run();
|
||||
llvm_objdump()
|
||||
.arg("--private-headers")
|
||||
.input("driver.exe")
|
||||
.run()
|
||||
// Make sure we don't find an import to the functions we expect to be inlined.
|
||||
.assert_stdout_not_contains("inline_library_function")
|
||||
// Make sure we do find an import to the functions we expect to be imported.
|
||||
.assert_stdout_contains("library_function");
|
||||
if is_msvc() {
|
||||
cc().arg("-c").out_exe("extern_1.obj").input("extern_1.c").run();
|
||||
cc().arg("-c").out_exe("extern_2.obj").input("extern_2.c").run();
|
||||
cc().input("extern_1.obj")
|
||||
.arg("-link")
|
||||
.arg("-dll")
|
||||
.arg("-out:extern_1.dll")
|
||||
.arg("-noimplib")
|
||||
.run();
|
||||
cc().input("extern_2.obj")
|
||||
.arg("-link")
|
||||
.arg("-dll")
|
||||
.arg("-out:extern_2.dll")
|
||||
.arg("-noimplib")
|
||||
.run();
|
||||
} else {
|
||||
cc().arg("-v").arg("-c").out_exe("extern_1.obj").input("extern_1.c").run();
|
||||
cc().arg("-v").arg("-c").out_exe("extern_2.obj").input("extern_2.c").run();
|
||||
cc().input("extern_1.obj").out_exe("extern_1.dll").arg("-shared").run();
|
||||
cc().input("extern_2.obj").out_exe("extern_2.dll").arg("-shared").run();
|
||||
}
|
||||
let out = run("driver").stdout_utf8();
|
||||
diff()
|
||||
.expected_file("output.txt")
|
||||
.actual_text("actual_output", out)
|
||||
.normalize(r#"\\r"#, "")
|
||||
.run();
|
||||
}
|
Loading…
Reference in New Issue
Block a user