mirror of
https://github.com/pezkuwichain/revive.git
synced 2026-05-01 12:17:56 +00:00
Separate compilation and linker phases (#376)
Separate between compilation and linker phases to allow deploy time linking and back-porting era compiler changes to fix #91. Unlinked contract binaries (caused by missing libraries or missing factory dependencies in turn) are emitted as raw ELF object. Few drive by fixes: - #98 - A compiler panic on missing libraries definitions. - Fixes some incosistent type forwarding in JSON output (empty string vs. null object). - Remove the unused fallback for size optimization setting. - Remove the broken `--lvm-ir` mode. - CI workflow fixes. --------- Signed-off-by: Cyrill Leutwiler <bigcyrill@hotmail.com> Signed-off-by: xermicus <bigcyrill@hotmail.com> Signed-off-by: xermicus <cyrill@parity.io>
This commit is contained in:
@@ -1,7 +1,5 @@
|
||||
//! The LLVM optimizing tools.
|
||||
|
||||
pub mod settings;
|
||||
|
||||
use serde::Deserialize;
|
||||
use serde::Serialize;
|
||||
|
||||
@@ -9,6 +7,8 @@ use crate::target_machine::TargetMachine;
|
||||
|
||||
use self::settings::Settings;
|
||||
|
||||
pub mod settings;
|
||||
|
||||
/// The LLVM optimizing tools.
|
||||
#[derive(Debug, Serialize, Deserialize)]
|
||||
pub struct Optimizer {
|
||||
|
||||
@@ -1,8 +1,5 @@
|
||||
//! The LLVM optimizer settings.
|
||||
|
||||
pub mod size_level;
|
||||
|
||||
use revive_solc_json_interface::SolcStandardJsonInputSettingsOptimizer;
|
||||
use serde::Deserialize;
|
||||
use serde::Serialize;
|
||||
|
||||
@@ -10,6 +7,8 @@ use itertools::Itertools;
|
||||
|
||||
use self::size_level::SizeLevel;
|
||||
|
||||
pub mod size_level;
|
||||
|
||||
/// The LLVM optimizer and code-gen settings.
|
||||
#[derive(Debug, Serialize, Deserialize, Clone, Eq)]
|
||||
pub struct Settings {
|
||||
@@ -20,9 +19,6 @@ pub struct Settings {
|
||||
/// The back-end optimization level.
|
||||
pub level_back_end: inkwell::OptimizationLevel,
|
||||
|
||||
/// Fallback to optimizing for size if the bytecode is too large.
|
||||
pub is_fallback_to_size_enabled: bool,
|
||||
|
||||
/// Whether the LLVM `verify each` option is enabled.
|
||||
pub is_verify_each_enabled: bool,
|
||||
/// Whether the LLVM `debug logging` option is enabled.
|
||||
@@ -41,8 +37,6 @@ impl Settings {
|
||||
level_middle_end_size,
|
||||
level_back_end,
|
||||
|
||||
is_fallback_to_size_enabled: false,
|
||||
|
||||
is_verify_each_enabled: false,
|
||||
is_debug_logging_enabled: false,
|
||||
}
|
||||
@@ -62,8 +56,6 @@ impl Settings {
|
||||
level_middle_end_size,
|
||||
level_back_end,
|
||||
|
||||
is_fallback_to_size_enabled: false,
|
||||
|
||||
is_verify_each_enabled,
|
||||
is_debug_logging_enabled,
|
||||
}
|
||||
@@ -197,16 +189,6 @@ impl Settings {
|
||||
|
||||
combinations
|
||||
}
|
||||
|
||||
/// Sets the fallback to optimizing for size if the bytecode is too large.
|
||||
pub fn enable_fallback_to_size(&mut self) {
|
||||
self.is_fallback_to_size_enabled = true;
|
||||
}
|
||||
|
||||
/// Whether the fallback to optimizing for size is enabled.
|
||||
pub fn is_fallback_to_size_enabled(&self) -> bool {
|
||||
self.is_fallback_to_size_enabled
|
||||
}
|
||||
}
|
||||
|
||||
impl PartialEq for Settings {
|
||||
@@ -227,18 +209,3 @@ impl std::fmt::Display for Settings {
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
impl TryFrom<&SolcStandardJsonInputSettingsOptimizer> for Settings {
|
||||
type Error = anyhow::Error;
|
||||
|
||||
fn try_from(value: &SolcStandardJsonInputSettingsOptimizer) -> Result<Self, Self::Error> {
|
||||
let mut result = match value.mode {
|
||||
Some(mode) => Self::try_from_cli(mode)?,
|
||||
None => Self::size(),
|
||||
};
|
||||
if value.fallback_to_optimizing_for_size.unwrap_or_default() {
|
||||
result.enable_fallback_to_size();
|
||||
}
|
||||
Ok(result)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user