diff options
| author | Matthew Maurer <matthew.r.maurer@gmail.com> | 2020-01-21 22:47:03 -0800 |
|---|---|---|
| committer | Matthew Maurer <mmaurer@google.com> | 2020-01-23 13:10:04 -0800 |
| commit | 72aaa3a414d17aa0c4f19feafa5bab5f84b60e63 (patch) | |
| tree | 4f86655cc705cfe1256293da4487ca735898fc0c /src/test | |
| parent | c0e02ad724f05f73b957b3d6f6314a9a2e5c284e (diff) | |
| download | rust-72aaa3a414d17aa0c4f19feafa5bab5f84b60e63.tar.gz rust-72aaa3a414d17aa0c4f19feafa5bab5f84b60e63.zip | |
rustc: Allow cdylibs to link against dylibs
Previously, rustc mandated that cdylibs could only link against rlibs as dependencies (not dylibs). This commit disables that restriction and tests that it works in a simple case.
Diffstat (limited to 'src/test')
| -rw-r--r-- | src/test/run-make-fulldeps/cdylib-dylib-linkage/Makefile | 27 | ||||
| -rw-r--r-- | src/test/run-make-fulldeps/cdylib-dylib-linkage/bar.rs | 5 | ||||
| -rw-r--r-- | src/test/run-make-fulldeps/cdylib-dylib-linkage/foo.c | 10 | ||||
| -rw-r--r-- | src/test/run-make-fulldeps/cdylib-dylib-linkage/foo.rs | 13 | ||||
| -rw-r--r-- | src/test/ui/auxiliary/cdylib-dep.rs | 1 | ||||
| -rw-r--r-- | src/test/ui/cdylib-deps-must-be-static.rs | 10 | ||||
| -rw-r--r-- | src/test/ui/cdylib-deps-must-be-static.stderr | 4 |
7 files changed, 55 insertions, 15 deletions
diff --git a/src/test/run-make-fulldeps/cdylib-dylib-linkage/Makefile b/src/test/run-make-fulldeps/cdylib-dylib-linkage/Makefile new file mode 100644 index 00000000000..5c9b2d1bb2f --- /dev/null +++ b/src/test/run-make-fulldeps/cdylib-dylib-linkage/Makefile @@ -0,0 +1,27 @@ +include ../tools.mk + +TARGET_SYSROOT := $(shell $(RUSTC) --print sysroot)/lib/rustlib/$(TARGET)/lib + +ifdef IS_MSVC +LIBSTD := $(wildcard $(TARGET_SYSROOT)/libstd-*.dll.lib) +else +LIBSTD := $(wildcard $(TARGET_SYSROOT)/$(call DYLIB_GLOB,std)) +STD := $(basename $(patsubst lib%,%, $(notdir $(LIBSTD)))) +endif + +all: $(call RUN_BINFILE,foo) + $(call RUN,foo) + +ifdef IS_MSVC +CLIBS := $(TMPDIR)/foo.dll.lib $(TMPDIR)/bar.dll.lib $(LIBSTD) +$(call RUN_BINFILE,foo): $(call DYLIB,foo) + $(CC) $(CFLAGS) foo.c $(CLIBS) $(call OUT_EXE,foo) +else +CLIBS := -lfoo -lbar -l$(STD) -L $(TMPDIR) -L $(TARGET_SYSROOT) +$(call RUN_BINFILE,foo): $(call DYLIB,foo) + $(CC) $(CFLAGS) foo.c $(CLIBS) -o $(call RUN_BINFILE,foo) +endif + +$(call DYLIB,foo): + $(RUSTC) -C prefer-dynamic bar.rs + $(RUSTC) foo.rs diff --git a/src/test/run-make-fulldeps/cdylib-dylib-linkage/bar.rs b/src/test/run-make-fulldeps/cdylib-dylib-linkage/bar.rs new file mode 100644 index 00000000000..b3a7539abae --- /dev/null +++ b/src/test/run-make-fulldeps/cdylib-dylib-linkage/bar.rs @@ -0,0 +1,5 @@ +#![crate_type = "dylib"] + +pub fn bar() { + println!("hello!"); +} diff --git a/src/test/run-make-fulldeps/cdylib-dylib-linkage/foo.c b/src/test/run-make-fulldeps/cdylib-dylib-linkage/foo.c new file mode 100644 index 00000000000..154f9682ef8 --- /dev/null +++ b/src/test/run-make-fulldeps/cdylib-dylib-linkage/foo.c @@ -0,0 +1,10 @@ +#include <assert.h> + +extern void foo(); +extern unsigned bar(unsigned a, unsigned b); + +int main() { + foo(); + assert(bar(1, 2) == 3); + return 0; +} diff --git a/src/test/run-make-fulldeps/cdylib-dylib-linkage/foo.rs b/src/test/run-make-fulldeps/cdylib-dylib-linkage/foo.rs new file mode 100644 index 00000000000..c2cc3afcc13 --- /dev/null +++ b/src/test/run-make-fulldeps/cdylib-dylib-linkage/foo.rs @@ -0,0 +1,13 @@ +#![crate_type = "cdylib"] + +extern crate bar; + +#[no_mangle] +pub extern fn foo() { + bar::bar(); +} + +#[no_mangle] +pub extern fn bar(a: u32, b: u32) -> u32 { + a + b +} diff --git a/src/test/ui/auxiliary/cdylib-dep.rs b/src/test/ui/auxiliary/cdylib-dep.rs deleted file mode 100644 index 8bd2b3353b8..00000000000 --- a/src/test/ui/auxiliary/cdylib-dep.rs +++ /dev/null @@ -1 +0,0 @@ -#![crate_type = "dylib"] diff --git a/src/test/ui/cdylib-deps-must-be-static.rs b/src/test/ui/cdylib-deps-must-be-static.rs deleted file mode 100644 index abf954d8fb2..00000000000 --- a/src/test/ui/cdylib-deps-must-be-static.rs +++ /dev/null @@ -1,10 +0,0 @@ -// build-fail -// error-pattern: crate `cdylib_dep` required to be available in rlib format, but was not found -// aux-build:cdylib-dep.rs -// ignore-musl -// ignore-cloudabi -// ignore-emscripten -// ignore-sgx no dynamic libraries -#![crate_type = "cdylib"] - -extern crate cdylib_dep; diff --git a/src/test/ui/cdylib-deps-must-be-static.stderr b/src/test/ui/cdylib-deps-must-be-static.stderr deleted file mode 100644 index a1dc8e985da..00000000000 --- a/src/test/ui/cdylib-deps-must-be-static.stderr +++ /dev/null @@ -1,4 +0,0 @@ -error: crate `cdylib_dep` required to be available in rlib format, but was not found in this form - -error: aborting due to previous error - |
