* add rustc_version to build deps of ether types (needed by build script)

* ethereum-types: add build script that sets cargo:rustc-cfg=asm_available on nightly

* ethereum-types: #![cfg_attr(asm_available, feature(asm))]

* tests: add the whole feature asm build script to make it pass on nightly CI

* add #![cfg_attr(asm_available, feature(asm))] directly where needed

so users don't have to add it

* remove tests/build.rs since it should not be needed anymore

* move inner cfg_attr attributes to the right allowed position

* remove check for asm_available in contexts that already have check for that
This commit is contained in:
snd 2017-12-05 13:14:16 +01:00 committed by Tomasz Drwięga
parent d910e92888
commit 8a14926f6d
5 changed files with 25 additions and 3 deletions

View File

@ -3,6 +3,9 @@ name = "ethereum-types"
version = "0.1.0"
authors = ["debris <marek.kotewicz@gmail.com>"]
[build-dependencies]
rustc_version = "0.2"
[dependencies]
uint = { path = "../uint", version = "0.1" }
fixed-hash = { path = "../fixed-hash", version = "0.1" }

17
ethereum-types/build.rs Normal file
View File

@ -0,0 +1,17 @@
// Copyright 2015-2017 Parity Technologies
//
// 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 crate rustc_version;
use rustc_version::{version_meta, Channel};
fn main() {
if let Channel::Nightly = version_meta().unwrap().channel {
println!("cargo:rustc-cfg=asm_available");
}
}

View File

@ -7,6 +7,7 @@ impl U256 {
/// No overflow possible
#[cfg(all(asm_available, target_arch="x86_64"))]
pub fn full_mul(self, other: U256) -> U512 {
#![feature(asm)]
let self_t: &[u64; 4] = &self.0;
let other_t: &[u64; 4] = &other.0;
let mut result: [u64; 8] = unsafe { ::core::mem::uninitialized() };

View File

@ -8,8 +8,6 @@
//! Efficient large, fixed-size big integers and hashes.
#![cfg_attr(asm_available, feature(asm))]
#[doc(hidden)]
pub extern crate byteorder;

View File

@ -77,6 +77,7 @@ macro_rules! uint_overflowing_add_reg {
#[macro_export]
#[doc(hidden)]
macro_rules! uint_overflowing_add {
#![feature(asm)]
(U256, $n_words:tt, $self_expr: expr, $other: expr) => ({
let mut result: [u64; $n_words] = unsafe { ::core::mem::uninitialized() };
let self_t: &[u64; $n_words] = &$self_expr.0;
@ -223,6 +224,7 @@ macro_rules! uint_overflowing_sub_reg {
#[macro_export]
#[doc(hidden)]
macro_rules! uint_overflowing_sub {
#![feature(asm)]
(U256, $n_words:tt, $self_expr: expr, $other: expr) => ({
let mut result: [u64; $n_words] = unsafe { ::core::mem::uninitialized() };
let self_t: &[u64; $n_words] = &$self_expr.0;
@ -277,7 +279,7 @@ macro_rules! uint_overflowing_sub {
"={al}"(overflow) /* $0 - $4 */
: "{rdi}"(&result[4] as *const u64) /* $5 */
"{rsi}"(&self_t[4] as *const u64) /* $6 */
"{rsi}"(&self_t[4] as *const u64) /* $6 */
"0"(self_t[0]), "1"(self_t[1]), "2"(self_t[2]), "3"(self_t[3]),
"m"(self_t[4]), "m"(self_t[5]), "m"(self_t[6]), "m"(self_t[7]),
/* $7 - $14 */
@ -298,6 +300,7 @@ macro_rules! uint_overflowing_sub {
#[cfg(all(asm_available, target_arch="x86_64"))]
#[macro_export]
macro_rules! uint_overflowing_mul {
#![feature(asm)]
(U256, $n_words: expr, $self_expr: expr, $other: expr) => ({
let mut result: [u64; $n_words] = unsafe { ::core::mem::uninitialized() };
let self_t: &[u64; $n_words] = &$self_expr.0;