mirror of
https://github.com/rust-lang/rust.git
synced 2026-04-27 18:57:42 +03:00
Auto merge of #37994 - upsuper:msvc-link-opt, r=alexcrichton
Don't apply msvc link opts for non-opt build `/OPT:REF,ICF` sometimes takes lots of time. It makes no sense to apply them when doing debug build. MSVC's linker by default disables these optimizations when `/DEBUG` is specified, unless they are explicitly passed.
This commit is contained in:
@@ -321,7 +321,16 @@ fn build_dylib(&mut self, out_filename: &Path) {
|
||||
}
|
||||
|
||||
fn gc_sections(&mut self, _keep_metadata: bool) {
|
||||
self.cmd.arg("/OPT:REF,ICF");
|
||||
// MSVC's ICF (Identical COMDAT Folding) link optimization is
|
||||
// slow for Rust and thus we disable it by default when not in
|
||||
// optimization build.
|
||||
if self.sess.opts.optimize != config::OptLevel::No {
|
||||
self.cmd.arg("/OPT:REF,ICF");
|
||||
} else {
|
||||
// It is necessary to specify NOICF here, because /OPT:REF
|
||||
// implies ICF by default.
|
||||
self.cmd.arg("/OPT:REF,NOICF");
|
||||
}
|
||||
}
|
||||
|
||||
fn link_dylib(&mut self, lib: &str) {
|
||||
|
||||
@@ -25,7 +25,7 @@ all:
|
||||
|
||||
# Should not link dead code...
|
||||
$(RUSTC) -Z print-link-args dummy.rs 2>&1 | \
|
||||
grep -e '--gc-sections' -e '-dead_strip' -e '/OPT:REF,ICF'
|
||||
grep -e '--gc-sections' -e '-dead_strip' -e '/OPT:REF'
|
||||
# ... unless you specifically ask to keep it
|
||||
$(RUSTC) -Z print-link-args -C link-dead-code dummy.rs 2>&1 | \
|
||||
(! grep -e '--gc-sections' -e '-dead_strip' -e '/OPT:REF,ICF')
|
||||
(! grep -e '--gc-sections' -e '-dead_strip' -e '/OPT:REF')
|
||||
|
||||
Reference in New Issue
Block a user