diff options
Diffstat (limited to 'src')
18 files changed, 97 insertions, 34 deletions
diff --git a/src/librustc/middle/dependency_format.rs b/src/librustc/middle/dependency_format.rs index 0a28c93a34e..20be7406204 100644 --- a/src/librustc/middle/dependency_format.rs +++ b/src/librustc/middle/dependency_format.rs @@ -123,6 +123,16 @@ fn calculate_type(sess: &session::Session, return Vec::new(); } + // Generating a dylib without `-C prefer-dynamic` means that we're going + // to try to eagerly statically link all dependencies. This is normally + // done for end-product dylibs, not intermediate products. + config::CrateTypeDylib if !sess.opts.cg.prefer_dynamic => { + match attempt_static(sess) { + Some(v) => return v, + None => {} + } + } + // Everything else falls through below config::CrateTypeExecutable | config::CrateTypeDylib => {}, } diff --git a/src/test/auxiliary/issue-12133-dylib.rs b/src/test/auxiliary/issue-12133-dylib.rs index 858d7269cd8..ea22258f67d 100644 --- a/src/test/auxiliary/issue-12133-dylib.rs +++ b/src/test/auxiliary/issue-12133-dylib.rs @@ -8,6 +8,4 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -// no-prefer-dynamic - #![crate_type = "dylib"] diff --git a/src/test/auxiliary/syntax-extension-with-dll-deps-1.rs b/src/test/auxiliary/syntax-extension-with-dll-deps-1.rs index a6e17e73322..338e04fbb07 100644 --- a/src/test/auxiliary/syntax-extension-with-dll-deps-1.rs +++ b/src/test/auxiliary/syntax-extension-with-dll-deps-1.rs @@ -8,7 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -// no-prefer-dynamic // force-host #![crate_type = "dylib"] diff --git a/src/test/auxiliary/syntax-extension-with-dll-deps-2.rs b/src/test/auxiliary/syntax-extension-with-dll-deps-2.rs index 7a4339aa9f0..88548bb5410 100644 --- a/src/test/auxiliary/syntax-extension-with-dll-deps-2.rs +++ b/src/test/auxiliary/syntax-extension-with-dll-deps-2.rs @@ -9,7 +9,6 @@ // except according to those terms. // force-host -// no-prefer-dynamic #![crate_type = "dylib"] #![feature(plugin_registrar, quote, globs)] diff --git a/src/test/run-make/c-dynamic-dylib/Makefile b/src/test/run-make/c-dynamic-dylib/Makefile index c4720c418a7..83bddd4c73c 100644 --- a/src/test/run-make/c-dynamic-dylib/Makefile +++ b/src/test/run-make/c-dynamic-dylib/Makefile @@ -6,7 +6,7 @@ all: echo ignored else all: $(call DYLIB,cfoo) - $(RUSTC) foo.rs + $(RUSTC) foo.rs -C prefer-dynamic $(RUSTC) bar.rs $(call RUN,bar) $(call REMOVE_DYLIBS,cfoo) diff --git a/src/test/run-make/c-static-dylib/Makefile b/src/test/run-make/c-static-dylib/Makefile index 6b047846cfd..9914e12d569 100644 --- a/src/test/run-make/c-static-dylib/Makefile +++ b/src/test/run-make/c-static-dylib/Makefile @@ -1,7 +1,7 @@ -include ../tools.mk all: $(call STATICLIB,cfoo) - $(RUSTC) foo.rs + $(RUSTC) foo.rs -C prefer-dynamic $(RUSTC) bar.rs rm $(TMPDIR)/$(call STATICLIB_GLOB,cfoo) $(call RUN,bar) diff --git a/src/test/run-make/dylib-chain/Makefile b/src/test/run-make/dylib-chain/Makefile index 2149f245147..a33177197b1 100644 --- a/src/test/run-make/dylib-chain/Makefile +++ b/src/test/run-make/dylib-chain/Makefile @@ -1,9 +1,9 @@ -include ../tools.mk all: - $(RUSTC) m1.rs - $(RUSTC) m2.rs - $(RUSTC) m3.rs + $(RUSTC) m1.rs -C prefer-dynamic + $(RUSTC) m2.rs -C prefer-dynamic + $(RUSTC) m3.rs -C prefer-dynamic $(RUSTC) m4.rs $(call RUN,m4) $(call REMOVE_DYLIBS,m1) diff --git a/src/test/run-make/issue-15460/Makefile b/src/test/run-make/issue-15460/Makefile index e6dd5c4c1af..bc5e9b72869 100644 --- a/src/test/run-make/issue-15460/Makefile +++ b/src/test/run-make/issue-15460/Makefile @@ -1,6 +1,6 @@ -include ../tools.mk all: $(TMPDIR)/libfoo.a - $(RUSTC) foo.rs -C extra-filename=-383hf8 + $(RUSTC) foo.rs -C extra-filename=-383hf8 -C prefer-dynamic $(RUSTC) bar.rs $(call RUN,bar) diff --git a/src/test/run-make/mixing-deps/Makefile b/src/test/run-make/mixing-deps/Makefile index 76106ada144..0e52d4a8bef 100644 --- a/src/test/run-make/mixing-deps/Makefile +++ b/src/test/run-make/mixing-deps/Makefile @@ -1,7 +1,7 @@ -include ../tools.mk all: - $(RUSTC) both.rs + $(RUSTC) both.rs -C prefer-dynamic $(RUSTC) dylib.rs -C prefer-dynamic $(RUSTC) prog.rs $(call RUN,prog) diff --git a/src/test/run-make/mixing-formats/Makefile b/src/test/run-make/mixing-formats/Makefile index e665cb2e535..48257669baf 100644 --- a/src/test/run-make/mixing-formats/Makefile +++ b/src/test/run-make/mixing-formats/Makefile @@ -15,60 +15,60 @@ all: # Building just baz $(RUSTC) --crate-type=rlib foo.rs - $(RUSTC) --crate-type=dylib bar1.rs - $(RUSTC) --crate-type=dylib,rlib baz.rs + $(RUSTC) --crate-type=dylib bar1.rs -C prefer-dynamic + $(RUSTC) --crate-type=dylib,rlib baz.rs -C prefer-dynamic $(RUSTC) --crate-type=bin baz.rs rm $(TMPDIR)/* - $(RUSTC) --crate-type=dylib foo.rs + $(RUSTC) --crate-type=dylib foo.rs -C prefer-dynamic $(RUSTC) --crate-type=rlib bar1.rs - $(RUSTC) --crate-type=dylib,rlib baz.rs + $(RUSTC) --crate-type=dylib,rlib baz.rs -C prefer-dynamic $(RUSTC) --crate-type=bin baz.rs rm $(TMPDIR)/* # Building baz2 $(RUSTC) --crate-type=rlib foo.rs - $(RUSTC) --crate-type=dylib bar1.rs - $(RUSTC) --crate-type=dylib bar2.rs + $(RUSTC) --crate-type=dylib bar1.rs -C prefer-dynamic + $(RUSTC) --crate-type=dylib bar2.rs -C prefer-dynamic $(RUSTC) --crate-type=dylib baz2.rs && exit 1 || exit 0 $(RUSTC) --crate-type=bin baz2.rs && exit 1 || exit 0 rm $(TMPDIR)/* $(RUSTC) --crate-type=rlib foo.rs $(RUSTC) --crate-type=rlib bar1.rs - $(RUSTC) --crate-type=dylib bar2.rs + $(RUSTC) --crate-type=dylib bar2.rs -C prefer-dynamic $(RUSTC) --crate-type=dylib,rlib baz2.rs $(RUSTC) --crate-type=bin baz2.rs rm $(TMPDIR)/* $(RUSTC) --crate-type=rlib foo.rs - $(RUSTC) --crate-type=dylib bar1.rs + $(RUSTC) --crate-type=dylib bar1.rs -C prefer-dynamic $(RUSTC) --crate-type=rlib bar2.rs - $(RUSTC) --crate-type=dylib,rlib baz2.rs + $(RUSTC) --crate-type=dylib,rlib baz2.rs -C prefer-dynamic $(RUSTC) --crate-type=bin baz2.rs rm $(TMPDIR)/* $(RUSTC) --crate-type=rlib foo.rs $(RUSTC) --crate-type=rlib bar1.rs $(RUSTC) --crate-type=rlib bar2.rs - $(RUSTC) --crate-type=dylib,rlib baz2.rs + $(RUSTC) --crate-type=dylib,rlib baz2.rs -C prefer-dynamic $(RUSTC) --crate-type=bin baz2.rs rm $(TMPDIR)/* - $(RUSTC) --crate-type=dylib foo.rs + $(RUSTC) --crate-type=dylib foo.rs -C prefer-dynamic $(RUSTC) --crate-type=rlib bar1.rs $(RUSTC) --crate-type=rlib bar2.rs - $(RUSTC) --crate-type=dylib,rlib baz2.rs + $(RUSTC) --crate-type=dylib,rlib baz2.rs -C prefer-dynamic $(RUSTC) --crate-type=bin baz2.rs rm $(TMPDIR)/* - $(RUSTC) --crate-type=dylib foo.rs - $(RUSTC) --crate-type=dylib bar1.rs + $(RUSTC) --crate-type=dylib foo.rs -C prefer-dynamic + $(RUSTC) --crate-type=dylib bar1.rs -C prefer-dynamic $(RUSTC) --crate-type=rlib bar2.rs $(RUSTC) --crate-type=dylib,rlib baz2.rs $(RUSTC) --crate-type=bin baz2.rs rm $(TMPDIR)/* - $(RUSTC) --crate-type=dylib foo.rs + $(RUSTC) --crate-type=dylib foo.rs -C prefer-dynamic $(RUSTC) --crate-type=rlib bar1.rs - $(RUSTC) --crate-type=dylib bar2.rs + $(RUSTC) --crate-type=dylib bar2.rs -C prefer-dynamic $(RUSTC) --crate-type=dylib,rlib baz2.rs $(RUSTC) --crate-type=bin baz2.rs rm $(TMPDIR)/* - $(RUSTC) --crate-type=dylib foo.rs - $(RUSTC) --crate-type=dylib bar1.rs - $(RUSTC) --crate-type=dylib bar2.rs + $(RUSTC) --crate-type=dylib foo.rs -C prefer-dynamic + $(RUSTC) --crate-type=dylib bar1.rs -C prefer-dynamic + $(RUSTC) --crate-type=dylib bar2.rs -C prefer-dynamic $(RUSTC) --crate-type=dylib,rlib baz2.rs $(RUSTC) --crate-type=bin baz2.rs diff --git a/src/test/run-make/prefer-dylib/Makefile b/src/test/run-make/prefer-dylib/Makefile index fe9bbb95095..bd44feecf2a 100644 --- a/src/test/run-make/prefer-dylib/Makefile +++ b/src/test/run-make/prefer-dylib/Makefile @@ -1,7 +1,7 @@ -include ../tools.mk all: - $(RUSTC) bar.rs --crate-type=dylib --crate-type=rlib + $(RUSTC) bar.rs --crate-type=dylib --crate-type=rlib -C prefer-dynamic $(RUSTC) foo.rs -C prefer-dynamic $(call RUN,foo) rm $(TMPDIR)/*bar* diff --git a/src/test/run-make/simple-dylib/Makefile b/src/test/run-make/simple-dylib/Makefile index 84e6e079e6f..26730820fea 100644 --- a/src/test/run-make/simple-dylib/Makefile +++ b/src/test/run-make/simple-dylib/Makefile @@ -1,5 +1,5 @@ -include ../tools.mk all: - $(RUSTC) bar.rs --crate-type=dylib + $(RUSTC) bar.rs --crate-type=dylib -C prefer-dynamic $(RUSTC) foo.rs $(call RUN,foo) diff --git a/src/test/run-make/static-dylib-by-default/Makefile b/src/test/run-make/static-dylib-by-default/Makefile new file mode 100644 index 00000000000..20bed0abbfd --- /dev/null +++ b/src/test/run-make/static-dylib-by-default/Makefile @@ -0,0 +1,9 @@ +-include ../tools.mk + +all: + $(RUSTC) foo.rs + $(RUSTC) bar.rs + $(CC) main.c -o $(call RUN_BINFILE,main) -lbar + rm $(TMPDIR)/*.rlib + rm $(call DYLIB,foo) + $(call RUN,main) diff --git a/src/test/run-make/static-dylib-by-default/bar.rs b/src/test/run-make/static-dylib-by-default/bar.rs new file mode 100644 index 00000000000..63da277dece --- /dev/null +++ b/src/test/run-make/static-dylib-by-default/bar.rs @@ -0,0 +1,18 @@ +// Copyright 2014 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or +// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license +// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![crate_type = "dylib"] + +extern crate foo; + +#[no_mangle] +pub extern fn bar() { + foo::foo(); +} diff --git a/src/test/run-make/static-dylib-by-default/foo.rs b/src/test/run-make/static-dylib-by-default/foo.rs new file mode 100644 index 00000000000..341040e653c --- /dev/null +++ b/src/test/run-make/static-dylib-by-default/foo.rs @@ -0,0 +1,14 @@ +// Copyright 2014 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or +// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license +// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![crate_type = "rlib"] +#![crate_type = "dylib"] + +pub fn foo() {} diff --git a/src/test/run-make/static-dylib-by-default/main.c b/src/test/run-make/static-dylib-by-default/main.c new file mode 100644 index 00000000000..30bb0783edf --- /dev/null +++ b/src/test/run-make/static-dylib-by-default/main.c @@ -0,0 +1,16 @@ +// Copyright 2014 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or +// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license +// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +extern void bar(); + +int main() { + bar(); + return 0; +} diff --git a/src/test/run-make/suspicious-library/Makefile b/src/test/run-make/suspicious-library/Makefile index 621f3064b5c..12f437075fb 100644 --- a/src/test/run-make/suspicious-library/Makefile +++ b/src/test/run-make/suspicious-library/Makefile @@ -1,7 +1,7 @@ -include ../tools.mk all: - $(RUSTC) foo.rs + $(RUSTC) foo.rs -C prefer-dynamic touch $(call DYLIB,foo-something-special) touch $(call DYLIB,foo-something-special2) $(RUSTC) bar.rs diff --git a/src/test/run-make/symlinked-libraries/Makefile b/src/test/run-make/symlinked-libraries/Makefile index 9eb2c135230..ac595546aa7 100644 --- a/src/test/run-make/symlinked-libraries/Makefile +++ b/src/test/run-make/symlinked-libraries/Makefile @@ -4,7 +4,7 @@ ifndef IS_WINDOWS all: - $(RUSTC) foo.rs + $(RUSTC) foo.rs -C prefer-dynamic mkdir -p $(TMPDIR)/other ln -nsf $(TMPDIR)/$(call DYLIB_GLOB,foo) $(TMPDIR)/other $(RUSTC) bar.rs -L $(TMPDIR)/other |
