mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-22 06:44:35 +00:00
Auto merge of #41757 - alexcrichton:stabilize-crt-static, r=japaric
rustc: Stabilize `-C target-feature=+crt-static` This commit stabilizes the `crt-static` feature accepted by the compiler. Note that this does not stabilize the `#[cfg]` attribute for `crt-static` as that's going to be covered by #29717. This only stabilizes a few small pieces: * The `crt-static` feature as accepted by the `-C target-feature` flag, and its connection with the platform-specific definition of `crt-static`. * The semantics of `--print cfg` printing out activated `crt-static` feature, if available. This should be enough to get the benefits of `crt-static` on stable Rust with MSVC and with musl, but sidsteps the issue of stabilizing #29717 first. Closes #37406
This commit is contained in:
commit
e19ccb71c8
@ -635,11 +635,24 @@ impl RustcDefaultCalls {
|
||||
node: ast::MetaItemKind::Word,
|
||||
span: DUMMY_SP,
|
||||
});
|
||||
if !allow_unstable_cfg && gated_cfg.is_some() {
|
||||
continue;
|
||||
|
||||
// Note that crt-static is a specially recognized cfg
|
||||
// directive that's printed out here as part of
|
||||
// rust-lang/rust#37406, but in general the
|
||||
// `target_feature` cfg is gated under
|
||||
// rust-lang/rust#29717. For now this is just
|
||||
// specifically allowing the crt-static cfg and that's
|
||||
// it, this is intended to get into Cargo and then go
|
||||
// through to build scripts.
|
||||
let value = value.as_ref().map(|s| s.as_str());
|
||||
let value = value.as_ref().map(|s| s.as_ref());
|
||||
if name != "target_feature" || value != Some("crt-static") {
|
||||
if !allow_unstable_cfg && gated_cfg.is_some() {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
cfgs.push(if let &Some(ref value) = value {
|
||||
cfgs.push(if let Some(value) = value {
|
||||
format!("{}=\"{}\"", name, value)
|
||||
} else {
|
||||
format!("{}", name)
|
||||
|
@ -12,7 +12,6 @@ use syntax::ast;
|
||||
use llvm::LLVMRustHasFeature;
|
||||
use rustc::session::Session;
|
||||
use rustc_trans::back::write::create_target_machine;
|
||||
use syntax::feature_gate::UnstableFeatures;
|
||||
use syntax::symbol::Symbol;
|
||||
use libc::c_char;
|
||||
|
||||
@ -53,8 +52,6 @@ pub fn add_configuration(cfg: &mut ast::CrateConfig, sess: &Session) {
|
||||
}
|
||||
|
||||
let requested_features = sess.opts.cg.target_feature.split(',');
|
||||
let unstable_options = sess.opts.debugging_opts.unstable_options;
|
||||
let is_nightly = UnstableFeatures::from_environment().is_nightly_build();
|
||||
let found_negative = requested_features.clone().any(|r| r == "-crt-static");
|
||||
let found_positive = requested_features.clone().any(|r| r == "+crt-static");
|
||||
|
||||
@ -68,14 +65,6 @@ pub fn add_configuration(cfg: &mut ast::CrateConfig, sess: &Session) {
|
||||
found_positive
|
||||
};
|
||||
|
||||
// If we switched from the default then that's only allowed on nightly, so
|
||||
// gate that here.
|
||||
if (found_positive || found_negative) && (!is_nightly || !unstable_options) {
|
||||
sess.fatal("specifying the `crt-static` target feature is only allowed \
|
||||
on the nightly channel with `-Z unstable-options` passed \
|
||||
as well");
|
||||
}
|
||||
|
||||
if crt_static {
|
||||
cfg.insert((tf, Some(Symbol::intern("crt-static"))));
|
||||
}
|
||||
|
@ -1,14 +0,0 @@
|
||||
// Copyright 2016 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.
|
||||
|
||||
// compile-flags:-C target-feature=+crt-static
|
||||
// error-pattern: specifying the `crt-static` target feature is only allowed
|
||||
|
||||
fn main() {}
|
Loading…
Reference in New Issue
Block a user