
This feature allows targets to opt in to full support of the crt-static feature. Currently, crt-static is allowed on all targets, even those that really can't or really shouldn't support it. This works because it is very loose in the specification of its effects. Changing the behavior of crt-static to be more strict in how it chooses libraries and links executables would likely cause compilation to fail on these platforms. To avoid breaking existing uses of crt-static, whitelist targets that support the new, stricter behavior. For all other targets, this changes crt-static from being "mostly a no-op" to "explicitly a no-op".
31 lines
1.1 KiB
Rust
31 lines
1.1 KiB
Rust
// Copyright 2015 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.
|
|
|
|
use syntax::ast;
|
|
use rustc::session::Session;
|
|
use syntax::symbol::Symbol;
|
|
use rustc_trans;
|
|
|
|
/// Add `target_feature = "..."` cfgs for a variety of platform
|
|
/// specific features (SSE, NEON etc.).
|
|
///
|
|
/// This is performed by checking whether a whitelisted set of
|
|
/// features is available on the target machine, by querying LLVM.
|
|
pub fn add_configuration(cfg: &mut ast::CrateConfig, sess: &Session) {
|
|
let tf = Symbol::intern("target_feature");
|
|
|
|
for feat in rustc_trans::target_features(sess) {
|
|
cfg.insert((tf, Some(feat)));
|
|
}
|
|
|
|
if sess.crt_static_feature() {
|
|
cfg.insert((tf, Some(Symbol::intern("crt-static"))));
|
|
}
|
|
}
|