diff --git a/.github/workflows/build-revive-wasm.yml b/.github/workflows/build-revive-wasm.yml index 8759426..e0e9771 100644 --- a/.github/workflows/build-revive-wasm.yml +++ b/.github/workflows/build-revive-wasm.yml @@ -29,18 +29,9 @@ jobs: # Use a unique key based on LLVM version or configuration files to avoid cache invalidation key: llvm-build-${{ runner.os }}-${{ hashFiles('clone-llvm.sh', 'emscripten-build-llvm.sh') }} - - name: Install LLVM Dependencies - if: steps.cache-llvm.outputs.cache-hit != 'true' - run: | - sudo apt-get update && sudo apt-get install -y cmake ninja-build libncurses5 libtinfo5 - # Install Emscripten - git clone https://github.com/emscripten-core/emsdk.git - cd emsdk - ./emsdk install ${{ env.EMSCRIPTEN_VERSION }} - ./emsdk activate ${{ env.EMSCRIPTEN_VERSION }} - - name: Install Dependencies run: | + sudo apt-get update && sudo apt-get install -y cmake ninja-build libncurses5 rustup target add wasm32-unknown-emscripten # Install LLVM required for the compiler runtime, runtime-api and stdlib curl -sSL --output llvm.tar.xz https://github.com/llvm/llvm-project/releases/download/llvmorg-18.1.4/clang+llvm-18.1.4-x86_64-linux-gnu-ubuntu-18.04.tar.xz @@ -57,6 +48,15 @@ jobs: bash --version llvm-config --version + - name: Install LLVM Dependencies + if: steps.cache-llvm.outputs.cache-hit != 'true' + run: | + # Install Emscripten + git clone https://github.com/emscripten-core/emsdk.git + cd emsdk + ./emsdk install ${{ env.EMSCRIPTEN_VERSION }} + ./emsdk activate ${{ env.EMSCRIPTEN_VERSION }} + - name: Build LLVM if: steps.cache-llvm.outputs.cache-hit != 'true' run: | diff --git a/crates/solidity/src/evmla/assembly/mod.rs b/crates/solidity/src/evmla/assembly/mod.rs index 84f1734..06ac8e9 100644 --- a/crates/solidity/src/evmla/assembly/mod.rs +++ b/crates/solidity/src/evmla/assembly/mod.rs @@ -9,9 +9,9 @@ use std::collections::HashSet; use serde::Deserialize; use serde::Serialize; -use crate::solc::standard_json::output::contract::evm::extra_metadata::ExtraMetadata; use crate::evmla::ethereal_ir::entry_link::EntryLink; use crate::evmla::ethereal_ir::EtherealIR; +use crate::solc::standard_json::output::contract::evm::extra_metadata::ExtraMetadata; use self::data::Data; use self::instruction::name::Name as InstructionName; diff --git a/crates/solidity/src/evmla/ethereal_ir/function/mod.rs b/crates/solidity/src/evmla/ethereal_ir/function/mod.rs index c7c78b9..52547cd 100644 --- a/crates/solidity/src/evmla/ethereal_ir/function/mod.rs +++ b/crates/solidity/src/evmla/ethereal_ir/function/mod.rs @@ -20,13 +20,13 @@ use num::One; use num::ToPrimitive; use num::Zero; -use crate::solc::standard_json::output::contract::evm::extra_metadata::recursive_function::RecursiveFunction; -use crate::solc::standard_json::output::contract::evm::extra_metadata::ExtraMetadata; use crate::evmla::assembly::instruction::name::Name as InstructionName; use crate::evmla::assembly::instruction::Instruction; use crate::evmla::ethereal_ir::function::block::element::stack::element::Element; use crate::evmla::ethereal_ir::function::block::element::stack::Stack; use crate::evmla::ethereal_ir::EtherealIR; +use crate::solc::standard_json::output::contract::evm::extra_metadata::recursive_function::RecursiveFunction; +use crate::solc::standard_json::output::contract::evm::extra_metadata::ExtraMetadata; use self::block::element::stack::element::Element as StackElement; use self::block::element::Element as BlockElement; diff --git a/crates/solidity/src/evmla/ethereal_ir/mod.rs b/crates/solidity/src/evmla/ethereal_ir/mod.rs index 6c5f710..4dd229f 100644 --- a/crates/solidity/src/evmla/ethereal_ir/mod.rs +++ b/crates/solidity/src/evmla/ethereal_ir/mod.rs @@ -7,8 +7,8 @@ use std::collections::BTreeMap; use std::collections::BTreeSet; use std::collections::HashMap; -use crate::solc::standard_json::output::contract::evm::extra_metadata::ExtraMetadata; use crate::evmla::assembly::instruction::Instruction; +use crate::solc::standard_json::output::contract::evm::extra_metadata::ExtraMetadata; use self::function::block::Block; use self::function::r#type::Type as FunctionType; diff --git a/crates/solidity/src/lib.rs b/crates/solidity/src/lib.rs index a3ca24f..c1373f7 100644 --- a/crates/solidity/src/lib.rs +++ b/crates/solidity/src/lib.rs @@ -1,18 +1,29 @@ //! Solidity to PolkaVM compiler library. pub(crate) mod build; -pub(crate) mod solc; pub(crate) mod r#const; pub(crate) mod evmla; pub(crate) mod missing_libraries; pub(crate) mod process; pub(crate) mod project; +pub(crate) mod solc; pub(crate) mod version; pub(crate) mod warning; pub(crate) mod yul; pub use self::build::contract::Contract as ContractBuild; pub use self::build::Build; +pub use self::missing_libraries::MissingLibraries; +pub use self::process::input::Input as ProcessInput; +#[cfg(not(target_os = "emscripten"))] +pub use self::process::native_process::NativeProcess; +pub use self::process::output::Output as ProcessOutput; +#[cfg(target_os = "emscripten")] +pub use self::process::worker_process::WorkerProcess; +pub use self::process::Process; +pub use self::project::contract::Contract as ProjectContract; +pub use self::project::Project; +pub use self::r#const::*; pub use self::solc::combined_json::contract::Contract as SolcCombinedJsonContract; pub use self::solc::combined_json::CombinedJson as SolcCombinedJson; pub use self::solc::pipeline::Pipeline as SolcPipeline; @@ -35,17 +46,6 @@ pub use self::solc::standard_json::output::contract::Contract as SolcStandardJso pub use self::solc::standard_json::output::Output as SolcStandardJsonOutput; pub use self::solc::version::Version as SolcVersion; pub use self::solc::Compiler; -pub use self::missing_libraries::MissingLibraries; -pub use self::process::input::Input as ProcessInput; -#[cfg(not(target_os = "emscripten"))] -pub use self::process::native_process::NativeProcess; -pub use self::process::output::Output as ProcessOutput; -#[cfg(target_os = "emscripten")] -pub use self::process::worker_process::WorkerProcess; -pub use self::process::Process; -pub use self::project::contract::Contract as ProjectContract; -pub use self::project::Project; -pub use self::r#const::*; pub use self::version::Version as ResolcVersion; pub use self::warning::Warning; #[cfg(target_os = "emscripten")] diff --git a/crates/solidity/src/project/contract/ir/evmla.rs b/crates/solidity/src/project/contract/ir/evmla.rs index 8d34852..9a1367d 100644 --- a/crates/solidity/src/project/contract/ir/evmla.rs +++ b/crates/solidity/src/project/contract/ir/evmla.rs @@ -5,8 +5,8 @@ use std::collections::HashSet; use serde::Deserialize; use serde::Serialize; -use crate::solc::standard_json::output::contract::evm::extra_metadata::ExtraMetadata; use crate::evmla::assembly::Assembly; +use crate::solc::standard_json::output::contract::evm::extra_metadata::ExtraMetadata; /// The contract EVM legacy assembly source code. #[derive(Debug, Serialize, Deserialize, Clone)] diff --git a/crates/solidity/src/project/contract/ir/mod.rs b/crates/solidity/src/project/contract/ir/mod.rs index 423aeac..a1d9f53 100644 --- a/crates/solidity/src/project/contract/ir/mod.rs +++ b/crates/solidity/src/project/contract/ir/mod.rs @@ -9,8 +9,8 @@ use std::collections::HashSet; use serde::Deserialize; use serde::Serialize; -use crate::solc::standard_json::output::contract::evm::extra_metadata::ExtraMetadata; use crate::evmla::assembly::Assembly; +use crate::solc::standard_json::output::contract::evm::extra_metadata::ExtraMetadata; use crate::yul::parser::statement::object::Object; use self::evmla::EVMLA; diff --git a/crates/solidity/src/project/contract/mod.rs b/crates/solidity/src/project/contract/mod.rs index fe40b3a..fdbdb3f 100644 --- a/crates/solidity/src/project/contract/mod.rs +++ b/crates/solidity/src/project/contract/mod.rs @@ -12,8 +12,8 @@ use sha3::Digest; use revive_llvm_context::PolkaVMWriteLLVM; use crate::build::contract::Contract as ContractBuild; -use crate::solc::version::Version as SolcVersion; use crate::project::Project; +use crate::solc::version::Version as SolcVersion; use self::ir::IR; use self::metadata::Metadata; diff --git a/crates/solidity/src/project/mod.rs b/crates/solidity/src/project/mod.rs index f21ef3f..55b9e73 100644 --- a/crates/solidity/src/project/mod.rs +++ b/crates/solidity/src/project/mod.rs @@ -15,12 +15,12 @@ use sha3::Digest; use crate::build::contract::Contract as ContractBuild; use crate::build::Build; -use crate::solc::version::Version as SolcVersion; -use crate::solc::Compiler; use crate::missing_libraries::MissingLibraries; use crate::process::input::Input as ProcessInput; use crate::process::Process; use crate::project::contract::ir::IR; +use crate::solc::version::Version as SolcVersion; +use crate::solc::Compiler; use crate::yul::lexer::Lexer; use crate::yul::parser::statement::object::Object; diff --git a/crates/solidity/src/solc/standard_json/output/mod.rs b/crates/solidity/src/solc/standard_json/output/mod.rs index ffede2e..0d64285 100644 --- a/crates/solidity/src/solc/standard_json/output/mod.rs +++ b/crates/solidity/src/solc/standard_json/output/mod.rs @@ -10,13 +10,13 @@ use serde::Deserialize; use serde::Serialize; use sha3::Digest; -use crate::solc::pipeline::Pipeline as SolcPipeline; -use crate::solc::version::Version as SolcVersion; use crate::evmla::assembly::instruction::Instruction; use crate::evmla::assembly::Assembly; use crate::project::contract::ir::IR as ProjectContractIR; use crate::project::contract::Contract as ProjectContract; use crate::project::Project; +use crate::solc::pipeline::Pipeline as SolcPipeline; +use crate::solc::version::Version as SolcVersion; use crate::warning::Warning; use crate::yul::lexer::Lexer; use crate::yul::parser::statement::object::Object; diff --git a/crates/solidity/src/test_utils.rs b/crates/solidity/src/test_utils.rs index 8c7e9ad..1a1ea0f 100644 --- a/crates/solidity/src/test_utils.rs +++ b/crates/solidity/src/test_utils.rs @@ -7,6 +7,7 @@ use std::sync::Mutex; use once_cell::sync::Lazy; +use crate::project::Project; use crate::solc::pipeline::Pipeline as SolcPipeline; use crate::solc::solc::SolcCompiler; use crate::solc::standard_json::input::settings::optimizer::Optimizer as SolcStandardJsonInputSettingsOptimizer; @@ -16,7 +17,6 @@ use crate::solc::standard_json::output::contract::evm::bytecode::Bytecode; use crate::solc::standard_json::output::contract::evm::bytecode::DeployedBytecode; use crate::solc::standard_json::output::Output as SolcStandardJsonOutput; use crate::solc::Compiler; -use crate::project::Project; use crate::warning::Warning; static PVM_BLOB_CACHE: Lazy>>> = Lazy::new(Default::default);