mirror of
https://github.com/sigp/lighthouse.git
synced 2026-04-16 20:39:10 +00:00
Improve compile time (#1989)
## Issue Addressed Closes #1264 ## Proposed Changes * Milagro BLS: tweak the feature flags so that Milagro doesn't get compiled if we're using BLST. Profiling showed that it was consuming about 1 minute of CPU time out of 60 minutes of CPU time (real time ~15 mins). A 1.6% saving. * Reduce monomorphization: compiling for 3 different `EthSpec` types causes a heck of a lot of generic functions to be instantiated (monomorphized). Removing 2 of 3 cuts the LLVM+linking step from around 250 seconds to 180 seconds, a saving of 70 seconds (real time!). This applies only to `make` and not the CI build, because we test with the minimal spec on CI. * Update `web3` crate to v0.13. This is perhaps the most controversial change, because it requires axing some deposit contract tools from `lcli`. I suspect these tools weren't used much anyway, and could be maintained separately, but I'm also happy to revert this change. However, it does save us a lot of compile time. With #1839, we now have 3 versions of Tokio (and all of Tokio's deps). This change brings us down to 2 versions, but 1 should be achievable once web3 (and reqwest) move to Tokio 0.3. * Remove `lcli` from the Docker image. It's a dev tool and can be built from the repo if required.
This commit is contained in:
@@ -7,7 +7,7 @@ edition = "2018"
|
||||
[dependencies]
|
||||
eth2_ssz = "0.1.2"
|
||||
tree_hash = "0.1.1"
|
||||
milagro_bls = { git = "https://github.com/sigp/milagro_bls", tag = "v1.4.0" }
|
||||
milagro_bls = { git = "https://github.com/sigp/milagro_bls", tag = "v1.4.0", optional = true }
|
||||
rand = "0.7.3"
|
||||
serde = "1.0.116"
|
||||
serde_derive = "1.0.116"
|
||||
@@ -22,7 +22,7 @@ blst = "0.3.2"
|
||||
[features]
|
||||
default = ["supranational"]
|
||||
fake_crypto = []
|
||||
milagro = []
|
||||
milagro = ["milagro_bls"]
|
||||
supranational = []
|
||||
supranational-portable = ["supranational", "blst/portable"]
|
||||
supranational-force-adx = ["supranational", "blst/force-adx"]
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
pub mod blst;
|
||||
pub mod fake_crypto;
|
||||
#[cfg(feature = "milagro")]
|
||||
pub mod milagro;
|
||||
|
||||
@@ -42,6 +42,7 @@ pub use get_withdrawal_credentials::get_withdrawal_credentials;
|
||||
pub use zeroize_hash::ZeroizeHash;
|
||||
|
||||
use blst::BLST_ERROR as BlstError;
|
||||
#[cfg(feature = "milagro")]
|
||||
use milagro_bls::AmclError;
|
||||
|
||||
pub type Hash256 = ethereum_types::H256;
|
||||
@@ -49,6 +50,7 @@ pub type Hash256 = ethereum_types::H256;
|
||||
#[derive(Clone, Debug, PartialEq)]
|
||||
pub enum Error {
|
||||
/// An error was raised from the Milagro BLS library.
|
||||
#[cfg(feature = "milagro")]
|
||||
MilagroError(AmclError),
|
||||
/// An error was raised from the Supranational BLST BLS library.
|
||||
BlstError(BlstError),
|
||||
@@ -62,6 +64,7 @@ pub enum Error {
|
||||
InvalidZeroSecretKey,
|
||||
}
|
||||
|
||||
#[cfg(feature = "milagro")]
|
||||
impl From<AmclError> for Error {
|
||||
fn from(e: AmclError) -> Error {
|
||||
Error::MilagroError(e)
|
||||
@@ -122,6 +125,7 @@ macro_rules! define_mod {
|
||||
};
|
||||
}
|
||||
|
||||
#[cfg(feature = "milagro")]
|
||||
define_mod!(milagro_implementations, crate::impls::milagro::types);
|
||||
define_mod!(blst_implementations, crate::impls::blst::types);
|
||||
#[cfg(feature = "fake_crypto")]
|
||||
|
||||
@@ -498,7 +498,7 @@ mod blst {
|
||||
test_suite!(blst_implementations);
|
||||
}
|
||||
|
||||
#[cfg(not(debug_assertions))]
|
||||
#[cfg(all(feature = "milagro", not(debug_assertions)))]
|
||||
mod milagro {
|
||||
test_suite!(milagro_implementations);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user