Remove core_intrinsics feature gate

This commit is contained in:
Mark Simulacrum 2017-07-13 11:12:57 -06:00
parent 6a85193149
commit e7b1a60ad7
10 changed files with 67 additions and 20 deletions

View File

@ -56,6 +56,9 @@ pub trait Step<'a>: Serialize + Sized {
/// somewhat harder.
type Output: Serialize + Deserialize<'a> + 'a;
/// This type, but with a 'static bound. Used for caching the step.
type Id: 'static;
const DEFAULT: bool = false;
/// Run this rule for all hosts without cross compiling.
@ -190,6 +193,7 @@ impl<'a> Builder<'a> {
target: &'a str,
}
impl<'a> Step<'a> for Libdir<'a> {
type Id = Libdir<'static>;
type Output = PathBuf;
fn run(self, builder: &Builder) -> PathBuf {
let compiler = self.compiler;

View File

@ -10,10 +10,11 @@
use serde_json;
use serde::{Serialize, Deserialize};
use std::any::TypeId;
use builder::Step;
use std::fmt;
use std::mem;
use std::intrinsics;
use std::collections::HashMap;
use std::cell::RefCell;
@ -29,31 +30,20 @@ use std::cell::RefCell;
pub struct Cache(RefCell<HashMap<Key, Box<str>>>);
fn to_json<T: Serialize>(element: &T) -> String {
let type_id = unsafe {
intrinsics::type_name::<T>()
};
t!(serde_json::to_string(&(type_id, element)))
t!(serde_json::to_string(element))
}
fn from_json<'a, O: Deserialize<'a>>(data: &'a str) -> O {
let type_id = unsafe {
intrinsics::type_name::<O>()
};
let (de_type_id, element): (&'a str, O) = t!(serde_json::from_str(data));
assert_eq!(type_id, de_type_id);
element
t!(serde_json::from_str(data))
}
#[derive(Clone, PartialEq, Eq, Hash)]
pub struct Key(String);
pub struct Key(TypeId, String);
impl fmt::Debug for Key {
fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
fmt.write_str(&self.0)
fmt.write_str(&format!("{:?}; ", self.0))?;
fmt.write_str(&self.1)
}
}
@ -62,8 +52,8 @@ impl Cache {
Cache(RefCell::new(HashMap::new()))
}
pub fn to_key<K: Serialize>(key: &K) -> Key {
Key(to_json(key))
pub fn to_key<'a, K: Step<'a>>(key: &K) -> Key {
Key(TypeId::of::<K::Id>(), to_json(key))
}
/// Puts a value into the cache. Will panic if called more than once with

View File

@ -99,6 +99,7 @@ pub struct Linkcheck<'a> {
}
impl<'a> Step<'a> for Linkcheck<'a> {
type Id = Linkcheck<'static>;
type Output = ();
const ONLY_HOSTS: bool = true;
const DEFAULT: bool = true;
@ -148,6 +149,7 @@ pub struct Cargotest<'a> {
}
impl<'a> Step<'a> for Cargotest<'a> {
type Id = Cargotest<'static>;
type Output = ();
const ONLY_HOSTS: bool = true;
@ -198,6 +200,7 @@ pub struct Cargo<'a> {
}
impl<'a> Step<'a> for Cargo<'a> {
type Id = Cargo<'static>;
type Output = ();
const ONLY_HOSTS: bool = true;
@ -307,6 +310,7 @@ pub struct Tidy<'a> {
}
impl<'a> Step<'a> for Tidy<'a> {
type Id = Tidy<'static>;
type Output = ();
const DEFAULT: bool = true;
const ONLY_HOSTS: bool = true;
@ -509,6 +513,7 @@ static COMPILETESTS: &[Test] = &[
];
impl<'a> Step<'a> for Compiletest<'a> {
type Id = Compiletest<'static>;
type Output = ();
const DEFAULT: bool = true;
@ -775,6 +780,7 @@ pub struct Docs<'a> {
// .host(true)
// .run(move |s| check::docs(build, &s.compiler()));
impl<'a> Step<'a> for Docs<'a> {
type Id = Docs<'static>;
type Output = ();
const DEFAULT: bool = true;
const ONLY_HOSTS: bool = true;
@ -840,6 +846,7 @@ pub struct ErrorIndex<'a> {
}
impl<'a> Step<'a> for ErrorIndex<'a> {
type Id = ErrorIndex<'static>;
type Output = ();
const DEFAULT: bool = true;
const ONLY_HOSTS: bool = true;
@ -935,6 +942,7 @@ pub struct KrateLibrustc<'a> {
}
impl<'a> Step<'a> for KrateLibrustc<'a> {
type Id = KrateLibrustc<'static>;
type Output = ();
const DEFAULT: bool = true;
const ONLY_HOSTS: bool = true;
@ -1045,6 +1053,7 @@ pub struct Krate<'a> {
}
impl<'a> Step<'a> for Krate<'a> {
type Id = Krate<'static>;
type Output = ();
const DEFAULT: bool = true;
@ -1311,6 +1320,7 @@ pub struct RemoteCopyLibs<'a> {
}
impl<'a> Step<'a> for RemoteCopyLibs<'a> {
type Id = RemoteCopyLibs<'static>;
type Output = ();
fn run(self, builder: &Builder) {
@ -1362,6 +1372,7 @@ impl<'a> Step<'a> for RemoteCopyLibs<'a> {
pub struct Distcheck;
impl<'a> Step<'a> for Distcheck {
type Id = Distcheck;
type Output = ();
/// Run "distcheck", a 'make check' from a tarball
@ -1429,6 +1440,7 @@ impl<'a> Step<'a> for Distcheck {
pub struct Bootstrap;
impl<'a> Step<'a> for Bootstrap {
type Id = Bootstrap;
type Output = ();
const DEFAULT: bool = true;
const ONLY_HOSTS: bool = true;

View File

@ -147,6 +147,7 @@ pub struct Std<'a> {
}
impl<'a> Step<'a> for Std<'a> {
type Id = Std<'static>;
type Output = ();
const DEFAULT: bool = true;
@ -268,6 +269,7 @@ struct StdLink<'a> {
}
impl<'a> Step<'a> for StdLink<'a> {
type Id = StdLink<'static>;
type Output = ();
/// Link all libstd rlibs/dylibs into the sysroot location.
@ -337,6 +339,7 @@ pub struct StartupObjects<'a> {
}
impl<'a> Step<'a> for StartupObjects<'a> {
type Id = StartupObjects<'static>;
type Output = ();
fn should_run(_builder: &Builder, path: &Path) -> bool {
@ -403,6 +406,7 @@ pub struct Test<'a> {
}
impl<'a> Step<'a> for Test<'a> {
type Id = Test<'static>;
type Output = ();
const DEFAULT: bool = true;
@ -485,6 +489,7 @@ pub struct TestLink<'a> {
}
impl<'a> Step<'a> for TestLink<'a> {
type Id = TestLink<'static>;
type Output = ();
/// Same as `std_link`, only for libtest
@ -519,6 +524,7 @@ pub struct Rustc<'a> {
}
impl<'a> Step<'a> for Rustc<'a> {
type Id = Rustc<'static>;
type Output = ();
const ONLY_HOSTS: bool = true;
const DEFAULT: bool = true;
@ -668,6 +674,7 @@ struct RustcLink<'a> {
}
impl<'a> Step<'a> for RustcLink<'a> {
type Id = RustcLink<'static>;
type Output = ();
/// Same as `std_link`, only for librustc
@ -720,6 +727,7 @@ pub struct Sysroot<'a> {
}
impl<'a> Step<'a> for Sysroot<'a> {
type Id = Sysroot<'static>;
type Output = PathBuf;
/// Returns the sysroot for the `compiler` specified that *this build system
@ -766,6 +774,7 @@ pub struct Assemble<'a> {
}
impl<'a> Step<'a> for Assemble<'a> {
type Id = Assemble<'static>;
type Output = Compiler<'a>;
/// Prepare a new compiler from the artifacts in `stage`

View File

@ -78,6 +78,7 @@ pub struct Docs<'a> {
}
impl<'a> Step<'a> for Docs<'a> {
type Id = Docs<'static>;
type Output = Option<PathBuf>;
const DEFAULT: bool = true;
const ONLY_BUILD_TARGETS: bool = true;
@ -287,6 +288,7 @@ pub struct Mingw<'a> {
}
impl<'a> Step<'a> for Mingw<'a> {
type Id = Mingw<'static>;
type Output = Option<PathBuf>;
const DEFAULT: bool = true;
const ONLY_BUILD_TARGETS: bool = true;
@ -355,6 +357,7 @@ pub struct Rustc<'a> {
}
impl<'a> Step<'a> for Rustc<'a> {
type Id = Rustc<'static>;
type Output = PathBuf;
const DEFAULT: bool = true;
const ONLY_HOSTS: bool = true;
@ -495,6 +498,7 @@ pub struct DebuggerScripts<'a> {
}
impl<'a> Step<'a> for DebuggerScripts<'a> {
type Id = DebuggerScripts<'static>;
type Output = ();
fn should_run(_builder: &Builder, path: &Path) -> bool {
@ -567,6 +571,7 @@ pub struct Std<'a> {
}
impl<'a> Step<'a> for Std<'a> {
type Id = Std<'static>;
type Output = Option<PathBuf>;
const DEFAULT: bool = true;
const ONLY_BUILD_TARGETS: bool = true;
@ -647,6 +652,7 @@ pub struct Analysis<'a> {
}
impl<'a> Step<'a> for Analysis<'a> {
type Id = Analysis<'static>;
type Output = Option<PathBuf>;
const DEFAULT: bool = true;
const ONLY_BUILD_TARGETS: bool = true;
@ -767,6 +773,7 @@ fn copy_src_dirs(build: &Build, src_dirs: &[&str], exclude_dirs: &[&str], dst_di
pub struct Src;
impl<'a> Step<'a> for Src {
type Id = Src;
/// The output path of the src installer tarball
type Output = PathBuf;
const DEFAULT: bool = true;
@ -864,6 +871,7 @@ const CARGO_VENDOR_VERSION: &str = "0.1.4";
pub struct PlainSourceTarball;
impl<'a> Step<'a> for PlainSourceTarball {
type Id = PlainSourceTarball;
/// Produces the location of the tarball generated
type Output = PathBuf;
const DEFAULT: bool = true;
@ -1018,6 +1026,7 @@ pub struct Cargo<'a> {
}
impl<'a> Step<'a> for Cargo<'a> {
type Id = Cargo<'static>;
type Output = PathBuf;
const ONLY_BUILD_TARGETS: bool = true;
const ONLY_HOSTS: bool = true;
@ -1114,6 +1123,7 @@ pub struct Rls<'a> {
}
impl<'a> Step<'a> for Rls<'a> {
type Id = Rls<'static>;
type Output = PathBuf;
const ONLY_BUILD_TARGETS: bool = true;
const ONLY_HOSTS: bool = true;
@ -1207,6 +1217,7 @@ pub struct Extended<'a> {
}
impl<'a> Step<'a> for Extended<'a> {
type Id = Extended<'static>;
type Output = ();
const DEFAULT: bool = true;
const ONLY_BUILD_TARGETS: bool = true;
@ -1613,6 +1624,7 @@ fn add_env(build: &Build, cmd: &mut Command, target: &str) {
pub struct HashSign;
impl<'a> Step<'a> for HashSign {
type Id = HashSign;
type Output = ();
const ONLY_BUILD_TARGETS: bool = true;
const ONLY_HOSTS: bool = true;

View File

@ -40,6 +40,7 @@ macro_rules! book {
}
impl<'a> Step<'a> for $name<'a> {
type Id = $name<'static>;
type Output = ();
const DEFAULT: bool = true;
@ -99,6 +100,7 @@ pub struct Rustbook<'a> {
}
impl<'a> Step<'a> for Rustbook<'a> {
type Id = Rustbook<'static>;
type Output = ();
/// Invoke `rustbook` for `target` for the doc book `name`.
@ -134,6 +136,7 @@ pub struct UnstableBook<'a> {
}
impl<'a> Step<'a> for UnstableBook<'a> {
type Id = UnstableBook<'static>;
type Output = ();
const DEFAULT: bool = true;
@ -172,6 +175,7 @@ pub struct RustbookSrc<'a> {
}
impl<'a> Step<'a> for RustbookSrc<'a> {
type Id = UnstableBook<'static>;
type Output = ();
/// Invoke `rustbook` for `target` for the doc book `name` from the `src` path.
@ -220,6 +224,7 @@ pub struct TheBook<'a> {
}
impl<'a> Step<'a> for TheBook<'a> {
type Id = TheBook<'static>;
type Output = ();
fn should_run(_builder: &Builder, path: &Path) -> bool {
@ -341,6 +346,7 @@ pub struct Standalone<'a> {
}
impl<'a> Step<'a> for Standalone<'a> {
type Id = Standalone<'static>;
type Output = ();
const DEFAULT: bool = true;
@ -448,6 +454,7 @@ pub struct Std<'a> {
}
impl<'a> Step<'a> for Std<'a> {
type Id = Std<'static>;
type Output = ();
const DEFAULT: bool = true;
@ -559,6 +566,7 @@ pub struct Test<'a> {
}
impl<'a> Step<'a> for Test<'a> {
type Id = Test<'static>;
type Output = ();
const DEFAULT: bool = true;
@ -646,6 +654,7 @@ pub struct Rustc<'a> {
}
impl<'a> Step<'a> for Rustc<'a> {
type Id = Rustc<'static>;
type Output = ();
const DEFAULT: bool = true;
const ONLY_HOSTS: bool = true;
@ -746,6 +755,7 @@ pub struct ErrorIndex<'a> {
}
impl<'a> Step<'a> for ErrorIndex<'a> {
type Id = ErrorIndex<'static>;
type Output = ();
const DEFAULT: bool = true;
const ONLY_HOSTS: bool = true;
@ -808,6 +818,7 @@ pub struct UnstableBookGen<'a> {
}
impl<'a> Step<'a> for UnstableBookGen<'a> {
type Id = UnstableBookGen<'static>;
type Output = ();
const DEFAULT: bool = true;
const ONLY_HOSTS: bool = true;

View File

@ -135,6 +135,7 @@ macro_rules! install {
}
impl<'a> Step<'a> for $name<'a> {
type Id = $name<'static>;
type Output = ();
const DEFAULT: bool = true;
const ONLY_BUILD_TARGETS: bool = true;

View File

@ -116,7 +116,6 @@
#![deny(warnings)]
#![allow(stable_features)]
#![feature(associated_consts)]
#![feature(core_intrinsics)]
#[macro_use]
extern crate build_helper;

View File

@ -51,6 +51,7 @@ pub struct Llvm<'a> {
}
impl<'a> Step<'a> for Llvm<'a> {
type Id = Llvm<'static>;
type Output = ();
const ONLY_HOSTS: bool = true;
@ -250,6 +251,7 @@ pub struct TestHelpers<'a> {
}
impl<'a> Step<'a> for TestHelpers<'a> {
type Id = TestHelpers<'static>;
type Output = ();
fn should_run(_builder: &Builder, path: &Path) -> bool {
@ -310,6 +312,7 @@ pub struct Openssl<'a> {
}
impl<'a> Step<'a> for Openssl<'a> {
type Id = Openssl<'static>;
type Output = ();
fn should_run(_builder: &Builder, _path: &Path) -> bool {

View File

@ -52,6 +52,7 @@ pub struct CleanTools<'a> {
}
impl<'a> Step<'a> for CleanTools<'a> {
type Id = CleanTools<'static>;
type Output = ();
/// Build a tool in `src/tools`
@ -86,6 +87,7 @@ pub struct ToolBuild<'a> {
}
impl<'a> Step<'a> for ToolBuild<'a> {
type Id = ToolBuild<'static>;
type Output = PathBuf;
/// Build a tool in `src/tools`
@ -172,6 +174,7 @@ macro_rules! tool {
}
impl<'a> Step<'a> for $name<'a> {
type Id = $name<'static>;
type Output = PathBuf;
fn should_run(_builder: &Builder, path: &Path) -> bool {
@ -258,6 +261,7 @@ pub struct RemoteTestServer<'a> {
}
impl<'a> Step<'a> for RemoteTestServer<'a> {
type Id = RemoteTestServer<'static>;
type Output = PathBuf;
fn should_run(_builder: &Builder, path: &Path) -> bool {
@ -302,6 +306,7 @@ pub struct Cargo<'a> {
}
impl<'a> Step<'a> for Cargo<'a> {
type Id = Cargo<'static>;
type Output = PathBuf;
const DEFAULT: bool = true;
const ONLY_HOSTS: bool = true;
@ -359,6 +364,7 @@ pub struct Rls<'a> {
}
impl<'a> Step<'a> for Rls<'a> {
type Id = Rls<'static>;
type Output = PathBuf;
const DEFAULT: bool = true;
const ONLY_HOSTS: bool = true;