2024-05-30 09:32:12 -05:00
|
|
|
// This test tries to check that basic cdylib libraries can be compiled and linked successfully
|
|
|
|
// with C code, that the cdylib itself can depend on another rlib, and that the library can be built
|
|
|
|
// with LTO.
|
|
|
|
//
|
|
|
|
// - `bar.rs` is a rlib
|
|
|
|
// - `foo.rs` is a cdylib that relies on an extern crate `bar` and defines two `extern "C"`
|
|
|
|
// functions:
|
|
|
|
// - `foo()` which calls `bar::bar()`.
|
|
|
|
// - `bar()` which implements basic addition.
|
|
|
|
|
|
|
|
//@ ignore-cross-compile
|
|
|
|
|
2024-07-17 08:31:38 -05:00
|
|
|
use run_make_support::{cc, cwd, dynamic_lib_name, is_msvc, rfs, run, rustc};
|
2024-05-30 09:32:12 -05:00
|
|
|
|
|
|
|
fn main() {
|
|
|
|
rustc().input("bar.rs").run();
|
|
|
|
rustc().input("foo.rs").run();
|
|
|
|
|
|
|
|
if is_msvc() {
|
2024-06-06 14:34:34 -05:00
|
|
|
cc().input("foo.c").arg("foo.dll.lib").out_exe("foo").run();
|
2024-05-30 09:32:12 -05:00
|
|
|
} else {
|
2024-06-06 14:34:34 -05:00
|
|
|
cc().input("foo.c").arg("-lfoo").library_search_path(cwd()).output("foo").run();
|
2024-05-30 09:32:12 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
run("foo");
|
2024-07-17 07:42:06 -05:00
|
|
|
rfs::remove_file(dynamic_lib_name("foo"));
|
2024-05-30 09:32:12 -05:00
|
|
|
|
|
|
|
rustc().input("foo.rs").arg("-Clto").run();
|
|
|
|
run("foo");
|
|
|
|
}
|